diff options
author | Starfall <root@starfall.blue> | 2019-12-09 19:07:33 -0600 |
---|---|---|
committer | Starfall <root@starfall.blue> | 2019-12-09 19:09:31 -0600 |
commit | 6b34fcfef7566105e8d80ab5fee0a539c06cddbf (patch) | |
tree | 8fad2d47bf8be255d3c671c40cbfd04c2f55ed03 | |
parent | 9fbb4af7611aa7836e65ef9f544d341423c15685 (diff) | |
parent | 246addd5b33a172600342af3fb6fb5e4c80ad95e (diff) |
Merge branch 'glitch'`
2219 files changed, 55446 insertions, 22116 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml index 8c8b411df..ff8eb4859 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2 aliases: - &defaults docker: - - image: circleci/ruby:2.6.0-stretch-node + - image: circleci/ruby:2.6-stretch-node environment: &ruby_environment BUNDLE_APP_CONFIG: ./.bundle/ DB_HOST: localhost @@ -105,14 +105,14 @@ jobs: install-ruby2.5: <<: *defaults docker: - - image: circleci/ruby:2.5.3-stretch-node + - image: circleci/ruby:2.5-stretch-node environment: *ruby_environment <<: *install_ruby_dependencies install-ruby2.4: <<: *defaults docker: - - image: circleci/ruby:2.4.5-stretch-node + - image: circleci/ruby:2.4-stretch-node environment: *ruby_environment <<: *install_ruby_dependencies @@ -121,10 +121,7 @@ jobs: steps: - *attach_workspace - *install_system_dependencies - - run: - name: Precompile assets - command: ./bin/rails assets:precompile - no_output_timeout: 40m + - run: ./bin/rails assets:precompile - persist_to_workspace: root: ~/projects/ paths: @@ -134,40 +131,40 @@ jobs: test-ruby2.6: <<: *defaults docker: - - image: circleci/ruby:2.6.0-stretch-node + - image: circleci/ruby:2.6-stretch-node environment: *ruby_environment - image: circleci/postgres:10.6-alpine environment: POSTGRES_USER: root - - image: circleci/redis:5.0.3-alpine3.8 + - image: circleci/redis:5-alpine <<: *test_steps test-ruby2.5: <<: *defaults docker: - - image: circleci/ruby:2.5.3-stretch-node + - image: circleci/ruby:2.5-stretch-node environment: *ruby_environment - image: circleci/postgres:10.6-alpine environment: POSTGRES_USER: root - - image: circleci/redis:4.0.12-alpine + - image: circleci/redis:5-alpine <<: *test_steps test-ruby2.4: <<: *defaults docker: - - image: circleci/ruby:2.4.5-stretch-node + - image: circleci/ruby:2.4-stretch-node environment: *ruby_environment - image: circleci/postgres:10.6-alpine environment: POSTGRES_USER: root - - image: circleci/redis:4.0.12-alpine + - image: circleci/redis:5-alpine <<: *test_steps test-webui: <<: *defaults docker: - - image: circleci/node:8.15.0-stretch + - image: circleci/node:12.9-stretch steps: - *attach_workspace - run: ./bin/retry yarn test:jest @@ -176,9 +173,11 @@ jobs: <<: *defaults steps: - *attach_workspace + - *install_system_dependencies - run: bundle exec i18n-tasks check-normalized - run: bundle exec i18n-tasks unused -l en - run: bundle exec i18n-tasks check-consistent-interpolations + - run: bundle exec rake repo:check_locales_files workflows: version: 2 diff --git a/.codeclimate.yml b/.codeclimate.yml index 571507a54..9817d7f1c 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -27,10 +27,10 @@ plugins: enabled: true eslint: enabled: true - channel: eslint-5 + channel: eslint-6 rubocop: enabled: true - channel: rubocop-0-71 + channel: rubocop-0-76 sass-lint: enabled: true exclude_patterns: diff --git a/.env.nanobox b/.env.nanobox index b60b6ee68..03aa01a34 100644 --- a/.env.nanobox +++ b/.env.nanobox @@ -11,24 +11,14 @@ DB_NAME=gonano DB_PASS=$DATA_DB_PASS DB_PORT=5432 -DATABASE_URL=postgresql://$DATA_DB_USER:$DATA_DB_PASS@$DATA_DB_HOST/gonano +# DATABASE_URL=postgresql://$DATA_DB_USER:$DATA_DB_PASS@$DATA_DB_HOST/gonano # Optional ElasticSearch configuration ES_ENABLED=true ES_HOST=$DATA_ELASTIC_HOST ES_PORT=9200 -# Optimizations -LD_PRELOAD=/data/lib/libjemalloc.so - -# ImageMagick optimizations -MAGICK_TEMPORARY_PATH=/app/tmp -MAGICK_MEMORY_LIMIT=128MiB -MAGICK_MAP_LIMIT=64MiB -MAGICK_TIME_LIMIT=15 -MAGICK_AREA_LIMIT=16MP -MAGICK_WIDTH_LIMIT=8KP -MAGICK_HEIGHT_LIMIT=8KP +BIND=0.0.0.0 # Federation # Note: Changing LOCAL_DOMAIN at a later time will cause unwanted side effects, including breaking all existing federation. @@ -84,6 +74,7 @@ SMTP_PORT=587 SMTP_LOGIN=$SMTP_LOGIN SMTP_PASSWORD=$SMTP_PASSWORD SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io +#SMTP_REPLY_TO= #SMTP_DOMAIN= # defaults to LOCAL_DOMAIN #SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail #SMTP_AUTH_METHOD=plain @@ -97,9 +88,17 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io # PAPERCLIP_ROOT_URL=/system # Optional asset host for multi-server setups +# The asset host must allow cross origin request from WEB_DOMAIN or LOCAL_DOMAIN +# if WEB_DOMAIN is not set. For example, the server may have the +# following header field: +# Access-Control-Allow-Origin: https://example.com/ # CDN_HOST=https://assets.example.com # S3 (optional) +# The attachment host must allow cross origin request from WEB_DOMAIN or +# LOCAL_DOMAIN if WEB_DOMAIN is not set. For example, the server may have the +# following header field: +# Access-Control-Allow-Origin: https://192.168.1.123:9000/ # S3_ENABLED=true # S3_BUCKET= # AWS_ACCESS_KEY_ID= @@ -109,6 +108,8 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io # S3_HOSTNAME=192.168.1.123:9000 # S3 (Minio Config (optional) Please check Minio instance for details) +# The attachment host must allow cross origin request - see the description +# above. # S3_ENABLED=true # S3_BUCKET= # AWS_ACCESS_KEY_ID= @@ -119,12 +120,30 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io # S3_ENDPOINT= # S3_SIGNATURE_VERSION= +# Google Cloud Storage (optional) +# Use S3 compatible API. Since GCS does not support Multipart Upload, +# increase the value of S3_MULTIPART_THRESHOLD to disable Multipart Upload. +# The attachment host must allow cross origin request - see the description +# above. +# S3_ENABLED=true +# AWS_ACCESS_KEY_ID= +# AWS_SECRET_ACCESS_KEY= +# S3_REGION= +# S3_PROTOCOL=https +# S3_HOSTNAME=storage.googleapis.com +# S3_ENDPOINT=https://storage.googleapis.com +# S3_MULTIPART_THRESHOLD=52428801 # 50.megabytes + # Swift (optional) +# The attachment host must allow cross origin request - see the description +# above. # SWIFT_ENABLED=true # SWIFT_USERNAME= # For Keystone V3, the value for SWIFT_TENANT should be the project name # SWIFT_TENANT= # SWIFT_PASSWORD= +# Some OpenStack V3 providers require PROJECT_ID (optional) +# SWIFT_PROJECT_ID= # Keystone V2 and V3 URLs are supported. Use a V3 URL if possible to avoid # issues with token rate-limiting during high load. # SWIFT_AUTH_URL= @@ -164,6 +183,11 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io # LDAP_BIND_DN= # LDAP_PASSWORD= # LDAP_UID=cn +# LDAP_MAIL=mail +# LDAP_SEARCH_FILTER=(|(%{uid}=%{email})(%{mail}=%{email})) +# LDAP_UID_CONVERSION_ENABLED=true +# LDAP_UID_CONVERSION_SEARCH=., - +# LDAP_UID_CONVERSION_REPLACE=_ # PAM authentication (optional) # PAM authentication uses for the email generation the "email" pam variable @@ -171,8 +195,8 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io # The pam environment variable "email" is provided by: # https://github.com/devkral/pam_email_extractor # PAM_ENABLED=true -# Fallback Suffix for email address generation (nil by default) -# PAM_DEFAULT_SUFFIX=pam +# Fallback email domain for email address generation (LOCAL_DOMAIN by default) +# PAM_EMAIL_DOMAIN=example.com # Name of the pam service (pam "auth" section is evaluated) # PAM_DEFAULT_SERVICE=rpam # Name of the pam service used for checking if an user can register (pam "account" section is evaluated) (nil (disabled) by default) @@ -220,7 +244,14 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io # SAML_SECURITY_ASSUME_EMAIL_IS_VERIFIED=true # SAML_ATTRIBUTES_STATEMENTS_UID="urn:oid:0.9.2342.19200300.100.1.1" # SAML_ATTRIBUTES_STATEMENTS_EMAIL="urn:oid:1.3.6.1.4.1.5923.1.1.1.6" -# SAML_ATTRIBUTES_STATEMENTS_FULL_NAME="urn:oid:2.5.4.42" +# SAML_ATTRIBUTES_STATEMENTS_FULL_NAME="urn:oid:2.16.840.1.113730.3.1.241" +# SAML_ATTRIBUTES_STATEMENTS_FIRST_NAME="urn:oid:2.5.4.42" +# SAML_ATTRIBUTES_STATEMENTS_LAST_NAME="urn:oid:2.5.4.4" # SAML_UID_ATTRIBUTE="urn:oid:0.9.2342.19200300.100.1.1" # SAML_ATTRIBUTES_STATEMENTS_VERIFIED= # SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL= + +# Use HTTP proxy for outgoing request (optional) +# http_proxy=http://gateway.local:8118 +# Access control for hidden service. +# ALLOW_ACCESS_TO_HIDDEN_SERVICE=true diff --git a/.env.production.sample b/.env.production.sample index a64959c77..8121aafeb 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -69,6 +69,7 @@ SMTP_PORT=587 SMTP_LOGIN= SMTP_PASSWORD= SMTP_FROM_ADDRESS=notifications@example.com +#SMTP_REPLY_TO= #SMTP_DOMAIN= # defaults to LOCAL_DOMAIN #SMTP_DELIVERY_METHOD=smtp # delivery method can also be sendmail #SMTP_AUTH_METHOD=plain @@ -114,6 +115,20 @@ SMTP_FROM_ADDRESS=notifications@example.com # S3_ENDPOINT= # S3_SIGNATURE_VERSION= +# Google Cloud Storage (optional) +# Use S3 compatible API. Since GCS does not support Multipart Upload, +# increase the value of S3_MULTIPART_THRESHOLD to disable Multipart Upload. +# The attachment host must allow cross origin request - see the description +# above. +# S3_ENABLED=true +# AWS_ACCESS_KEY_ID= +# AWS_SECRET_ACCESS_KEY= +# S3_REGION= +# S3_PROTOCOL=https +# S3_HOSTNAME=storage.googleapis.com +# S3_ENDPOINT=https://storage.googleapis.com +# S3_MULTIPART_THRESHOLD=52428801 # 50.megabytes + # Swift (optional) # The attachment host must allow cross origin request - see the description # above. @@ -169,14 +184,15 @@ STREAMING_CLUSTER_NUM=1 # Maximum allowed display name characters # MAX_DISPLAY_NAME_CHARS=30 -# Maximum image and video upload sizes +# Maximum image and video/audio upload sizes # Units are in bytes # 1048576 bytes equals 1 megabyte # MAX_IMAGE_SIZE=8388608 # MAX_VIDEO_SIZE=41943040 -# Maximum length of audio uploads in seconds -# MAX_AUDIO_LENGTH=60 +# Maximum search results to display +# Only relevant when elasticsearch is installed +# MAX_SEARCH_RESULTS=20 # LDAP authentication (optional) # LDAP_ENABLED=true @@ -187,7 +203,11 @@ STREAMING_CLUSTER_NUM=1 # LDAP_BIND_DN= # LDAP_PASSWORD= # LDAP_UID=cn -# LDAP_SEARCH_FILTER="%{uid}=%{email}" +# LDAP_MAIL=mail +# LDAP_SEARCH_FILTER=(|(%{uid}=%{email})(%{mail}=%{email})) +# LDAP_UID_CONVERSION_ENABLED=true +# LDAP_UID_CONVERSION_SEARCH=., - +# LDAP_UID_CONVERSION_REPLACE=_ # PAM authentication (optional) # PAM authentication uses for the email generation the "email" pam variable diff --git a/.env.test b/.env.test index fa4e1d91f..761d0d921 100644 --- a/.env.test +++ b/.env.test @@ -1,5 +1,5 @@ # Node.js -NODE_ENV=test +NODE_ENV=tests # Federation LOCAL_DOMAIN=cb6e6126.ngrok.io LOCAL_HTTPS=true diff --git a/.env.vagrant b/.env.vagrant index f3b54f6e3..c2d26fa45 100644 --- a/.env.vagrant +++ b/.env.vagrant @@ -1,2 +1,3 @@ VAGRANT=true LOCAL_DOMAIN=mastodon.local +BIND=0.0.0.0 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..768868516 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Mastodon Meta Discussion Board + url: https://discourse.joinmastodon.org/ + about: Please ask and answer questions here. diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 000000000..6601ef8c0 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,10 @@ +daysUntilStale: 120 +daysUntilClose: 7 +exemptLabels: + - security +staleLabel: wontfix +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +only: pulls diff --git a/.gitignore b/.gitignore index 51e47bb52..c3f20deea 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,9 @@ npm-debug.log yarn-error.log yarn-debug.log +# Ignore vagrant log files +ubuntu-xenial-16.04-cloudimg-console.log + # Ignore Docker option files docker-compose.override.yml diff --git a/.rubocop.yml b/.rubocop.yml index 8bd4c867f..9a68becbb 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -71,6 +71,9 @@ Naming/MemoizedInstanceVariableName: Rails: Enabled: true +Rails/EnumHash: + Enabled: false + Rails/HasAndBelongsToMany: Enabled: false @@ -102,6 +105,9 @@ Style/Documentation: Style/DoubleNegation: Enabled: true +Style/FormatStringToken: + Enabled: false + Style/FrozenStringLiteralComment: Enabled: true diff --git a/.ruby-version b/.ruby-version index 6a6a3d8e3..57cf282eb 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.6.1 +2.6.5 diff --git a/AUTHORS.md b/AUTHORS.md index 8d3aaf480..5f5985fba 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -5,89 +5,100 @@ Mastodon is available on [GitHub](https://github.com/tootsuite/mastodon) and provided thanks to the work of the following contributors: * [Gargron](https://github.com/Gargron) -* [ykzts](https://github.com/ykzts) * [ThibG](https://github.com/ThibG) +* [ykzts](https://github.com/ykzts) +* [dependabot[bot]](https://github.com/apps/dependabot) * [akihikodaki](https://github.com/akihikodaki) +* [dependabot-preview[bot]](https://github.com/apps/dependabot-preview) * [mjankowski](https://github.com/mjankowski) -* [dependabot[bot]](https://github.com/apps/dependabot) * [unarist](https://github.com/unarist) -* [m4sk1n](https://github.com/m4sk1n) * [yiskah](https://github.com/yiskah) * [nolanlawson](https://github.com/nolanlawson) * [ysksn](https://github.com/ysksn) -* [sorin-davidoi](https://github.com/sorin-davidoi) * [abcang](https://github.com/abcang) +* [sorin-davidoi](https://github.com/sorin-davidoi) * [lynlynlynx](https://github.com/lynlynlynx) * [mayaeh](https://github.com/mayaeh) +* [m4sk1n](mailto:me@m4sk.in) +* [Marcin Mikołajczak](mailto:me@m4sk.in) +* [Kjwon15](https://github.com/Kjwon15) * [renatolond](https://github.com/renatolond) * [alpaca-tc](https://github.com/alpaca-tc) +* [jeroenpraat](https://github.com/jeroenpraat) * [nclm](https://github.com/nclm) * [ineffyble](https://github.com/ineffyble) -* [jeroenpraat](https://github.com/jeroenpraat) +* [mabkenar](https://github.com/mabkenar) * [blackle](https://github.com/blackle) * [Quent-in](https://github.com/Quent-in) * [JantsoP](https://github.com/JantsoP) -* [Kjwon15](https://github.com/Kjwon15) -* [mabkenar](https://github.com/mabkenar) +* [zunda](https://github.com/zunda) * [nullkal](https://github.com/nullkal) * [yookoala](https://github.com/yookoala) +* [Aditoo17](https://github.com/Aditoo17) +* [Quenty31](https://github.com/Quenty31) +* [marek-lach](https://github.com/marek-lach) * [shuheiktgw](https://github.com/shuheiktgw) * [ashfurrow](https://github.com/ashfurrow) -* [zunda](https://github.com/zunda) -* [Quenty31](https://github.com/Quenty31) * [eramdam](https://github.com/eramdam) +* [noellabo](https://github.com/noellabo) * [takayamaki](https://github.com/takayamaki) +* [danhunsaker](https://github.com/danhunsaker) * [masarakki](https://github.com/masarakki) * [ticky](https://github.com/ticky) -* [danhunsaker](https://github.com/danhunsaker) * [ThisIsMissEm](https://github.com/ThisIsMissEm) * [hcmiya](https://github.com/hcmiya) * [stephenburgess8](https://github.com/stephenburgess8) * [Wonderfall](https://github.com/Wonderfall) * [matteoaquila](https://github.com/matteoaquila) * [yukimochi](https://github.com/yukimochi) +* [palindromordnilap](https://github.com/palindromordnilap) * [rkarabut](https://github.com/rkarabut) * [Artoria2e5](https://github.com/Artoria2e5) * [nightpool](https://github.com/nightpool) * [marrus-sh](https://github.com/marrus-sh) +* [hinaloe](https://github.com/hinaloe) * [krainboltgreene](https://github.com/krainboltgreene) * [pfigel](https://github.com/pfigel) * [Aldarone](https://github.com/Aldarone) * [BoFFire](https://github.com/BoFFire) * [clworld](https://github.com/clworld) +* [MasterGroosha](https://github.com/MasterGroosha) * [dracos](https://github.com/dracos) +* [MaciekBaron](https://github.com/MaciekBaron) * [SerCom_KC](mailto:sercom-kc@users.noreply.github.com) * [Sylvhem](https://github.com/Sylvhem) -* [MasterGroosha](https://github.com/MasterGroosha) +* [MitarashiDango](https://github.com/MitarashiDango) * [JeanGauthier](https://github.com/JeanGauthier) * [kschaper](https://github.com/kschaper) -* [MaciekBaron](https://github.com/MaciekBaron) -* [MitarashiDango](mailto:mitarashidango@users.noreply.github.com) * [beatrix-bitrot](https://github.com/beatrix-bitrot) -* [Aditoo17](https://github.com/Aditoo17) +* [angristan](https://github.com/angristan) * [adbelle](https://github.com/adbelle) * [evanminto](https://github.com/evanminto) * [MightyPork](https://github.com/MightyPork) +* [ashleyhull-versent](mailto:ashley.hull@versent.com.au) * [yhirano55](https://github.com/yhirano55) * [rinsuki](https://github.com/rinsuki) * [camponez](https://github.com/camponez) -* [hinaloe](https://github.com/hinaloe) -* [SerCom-KC](https://github.com/SerCom-KC) +* [SerCom_KC](mailto:szescxz@gmail.com) * [aschmitz](https://github.com/aschmitz) +* [trwnh](https://github.com/trwnh) * [devkral](https://github.com/devkral) * [fpiesche](https://github.com/fpiesche) +* [hugogameiro](https://github.com/hugogameiro) * [gandaro](https://github.com/gandaro) * [johnsudaar](https://github.com/johnsudaar) +* [ariasuni](https://github.com/ariasuni) * [trebmuh](https://github.com/trebmuh) -* [Rakib Hasan](mailto:rmhasan@gmail.com) -* [ashleyhull-versent](https://github.com/ashleyhull-versent) +* [rmhasan](https://github.com/rmhasan) +* [kedamaDQ](https://github.com/kedamaDQ) * [lindwurm](https://github.com/lindwurm) * [victorhck](mailto:victorhck@geeko.site) * [voidsatisfaction](https://github.com/voidsatisfaction) +* [BenLubar](https://github.com/BenLubar) * [hikari-no-yume](https://github.com/hikari-no-yume) -* [angristan](https://github.com/angristan) * [seefood](https://github.com/seefood) * [jackjennings](https://github.com/jackjennings) +* [koyuawsmbrtn](https://github.com/koyuawsmbrtn) * [spla](mailto:spla@mastodont.cat) * [expenses](https://github.com/expenses) * [walf443](https://github.com/walf443) @@ -95,18 +106,17 @@ and provided thanks to the work of the following contributors: * [mistydemeo](https://github.com/mistydemeo) * [dunn](https://github.com/dunn) * [xqus](https://github.com/xqus) -* [hugogameiro](https://github.com/hugogameiro) -* [ariasuni](https://github.com/ariasuni) * [pfm-eyesightjp](https://github.com/pfm-eyesightjp) * [fakenine](https://github.com/fakenine) +* [Shleeble](https://github.com/Shleeble) * [tsuwatch](https://github.com/tsuwatch) * [victorhck](https://github.com/victorhck) -* [kedamaDQ](https://github.com/kedamaDQ) +* [mkljczk](https://github.com/mkljczk) +* [manuelviens](https://github.com/manuelviens) * [puckipedia](https://github.com/puckipedia) -* [trwnh](https://github.com/trwnh) * [fvh-P](https://github.com/fvh-P) +* [rtucker](https://github.com/rtucker) * [Anna e só](mailto:contraexemplos@gmail.com) -* [BenLubar](https://github.com/BenLubar) * [kazu9su](https://github.com/kazu9su) * [Komic](https://github.com/Komic) * [lmorchard](https://github.com/lmorchard) @@ -119,6 +129,7 @@ and provided thanks to the work of the following contributors: * [goofy-bz](mailto:goofy@babelzilla.org) * [kadiix](https://github.com/kadiix) * [kodacs](https://github.com/kodacs) +* [marcin mikołajczak](mailto:me@m4sk.in) * [JMendyk](https://github.com/JMendyk) * [KScl](https://github.com/KScl) * [sterdev](https://github.com/sterdev) @@ -129,30 +140,31 @@ and provided thanks to the work of the following contributors: * [northerner](https://github.com/northerner) * [fhemberger](https://github.com/fhemberger) * [greysteil](https://github.com/greysteil) -* [hensmith](https://github.com/hensmith) +* [hencatsmith](https://github.com/hencatsmith) * [d6rkaiz](https://github.com/d6rkaiz) * [Reverite](https://github.com/Reverite) * [JohnD28](https://github.com/JohnD28) * [znz](https://github.com/znz) -* [marek-lach](https://github.com/marek-lach) * [Naouak](https://github.com/Naouak) * [pawelngei](https://github.com/pawelngei) -* [rtucker](https://github.com/rtucker) * [reneklacan](https://github.com/reneklacan) * [ekiru](https://github.com/ekiru) -* [noellabo](https://github.com/noellabo) * [tcitworld](https://github.com/tcitworld) * [geta6](https://github.com/geta6) * [happycoloredbanana](https://github.com/happycoloredbanana) * [leopku](https://github.com/leopku) * [SansPseudoFix](https://github.com/SansPseudoFix) +* [salvadorpla](https://github.com/salvadorpla) * [tomfhowe](https://github.com/tomfhowe) * [noraworld](https://github.com/noraworld) * [theboss](https://github.com/theboss) +* [nzws](https://github.com/nzws) * [178inaba](https://github.com/178inaba) +* [xgess](https://github.com/xgess) * [alyssais](https://github.com/alyssais) -* [hiphref](https://github.com/hiphref) +* [aablinov](https://github.com/aablinov) * [stalker314314](https://github.com/stalker314314) +* [cutls](https://github.com/cutls) * [huertanix](https://github.com/huertanix) * [genesixx](https://github.com/genesixx) * [halkeye](https://github.com/halkeye) @@ -162,21 +174,24 @@ and provided thanks to the work of the following contributors: * [kmichl](https://github.com/kmichl) * [Kurtis Rainbolt-Greene](mailto:me@kurtisrainboltgreene.name) * [saper](https://github.com/saper) +* [Dar13](https://github.com/Dar13) * [nevillepark](https://github.com/nevillepark) * [ornithocoder](https://github.com/ornithocoder) +* [pwoolcoc](https://github.com/pwoolcoc) * [pierreozoux](https://github.com/pierreozoux) * [qguv](https://github.com/qguv) * [Ram Lmn](mailto:ramlmn@users.noreply.github.com) -* [sascha-sl](https://github.com/sascha-sl) +* [aurelia-sl](https://github.com/aurelia-sl) * [harukasan](https://github.com/harukasan) * [stamak](https://github.com/stamak) -* [Technowix](mailto:technowix@users.noreply.github.com) +* [Technowix](https://github.com/Technowix) * [Zoeille](https://github.com/Zoeille) * [Thor Harald Johansen](mailto:thj@thj.no) * [0x70b1a5](https://github.com/0x70b1a5) * [gled-rs](https://github.com/gled-rs) * [Valentin_NC](mailto:valentin.ouvrard@nautile.sarl) * [R0ckweb](https://github.com/R0ckweb) +* [unasuke](https://github.com/unasuke) * [caasi](https://github.com/caasi) * [chr-1x](https://github.com/chr-1x) * [esetomo](https://github.com/esetomo) @@ -184,8 +199,9 @@ and provided thanks to the work of the following contributors: * [hoodie](mailto:hoodiekitten@outlook.com) * [luzi82](https://github.com/luzi82) * [duxovni](https://github.com/duxovni) +* [slice](https://github.com/slice) * [tmm576](https://github.com/tmm576) -* [unsmell](https://github.com/unsmell) +* [unsmell](mailto:unsmell@users.noreply.github.com) * [valerauko](https://github.com/valerauko) * [chriswmartin](https://github.com/chriswmartin) * [vahnj](https://github.com/vahnj) @@ -193,21 +209,25 @@ and provided thanks to the work of the following contributors: * [AndreLewin](https://github.com/AndreLewin) * [0xflotus](https://github.com/0xflotus) * [redtachyons](https://github.com/redtachyons) +* [acid-chicken](https://github.com/acid-chicken) * [thurloat](https://github.com/thurloat) * [aaribaud](https://github.com/aaribaud) * [pointlessone](https://github.com/pointlessone) * [Andrew](mailto:andrewlchronister@gmail.com) +* [aurelien-reeves](https://github.com/aurelien-reeves) +* [AnaGelez](https://github.com/AnaGelez) * [estuans](https://github.com/estuans) * [dissolve](https://github.com/dissolve) * [PurpleBooth](https://github.com/PurpleBooth) * [bradurani](https://github.com/bradurani) * [wavebeem](https://github.com/wavebeem) * [bruwalfas](https://github.com/bruwalfas) -* [foxsan48](https://github.com/foxsan48) +* [LottieVixen](https://github.com/LottieVixen) * [wchristian](https://github.com/wchristian) * [muffinista](https://github.com/muffinista) * [cdutson](https://github.com/cdutson) * [farlistener](https://github.com/farlistener) +* [dariusk](https://github.com/dariusk) * [DavidLibeau](https://github.com/DavidLibeau) * [ddevault](https://github.com/ddevault) * [Fjoerfoks](https://github.com/Fjoerfoks) @@ -216,6 +236,7 @@ and provided thanks to the work of the following contributors: * [Gomasy](https://github.com/Gomasy) * [unstabler](https://github.com/unstabler) * [potato4d](https://github.com/potato4d) +* [Hanage999](https://github.com/Hanage999) * [h-izumi](https://github.com/h-izumi) * [ErikXXon](https://github.com/ErikXXon) * [ian-kelling](https://github.com/ian-kelling) @@ -231,21 +252,23 @@ and provided thanks to the work of the following contributors: * [Kaylee](mailto:kaylee@codethat.sucks) * [Kazhnuz](https://github.com/Kazhnuz) * [connyduck](https://github.com/connyduck) -* [Lindsey Bieda](mailto:lindseyb@users.noreply.github.com) +* [LindseyB](https://github.com/LindseyB) * [Lorenz Diener](mailto:halcyon@icosahedron.website) * [alimony](https://github.com/alimony) * [mig5](https://github.com/mig5) * [moritzheiber](https://github.com/moritzheiber) * [ndarville](https://github.com/ndarville) * [Abzol](https://github.com/Abzol) -* [pwoolcoc](https://github.com/pwoolcoc) +* [PatOnTheBack](https://github.com/PatOnTheBack) * [xPaw](https://github.com/xPaw) * [petzah](https://github.com/petzah) * [ignisf](https://github.com/ignisf) * [raymestalez](https://github.com/raymestalez) * [remram44](https://github.com/remram44) * [sts10](https://github.com/sts10) +* [SuperSandro2000](https://github.com/SuperSandro2000) * [u1-liquid](https://github.com/u1-liquid) +* [rosylilly](https://github.com/rosylilly) * [sim6](https://github.com/sim6) * [Sir-Boops](https://github.com/Sir-Boops) * [stemid](https://github.com/stemid) @@ -270,6 +293,7 @@ and provided thanks to the work of the following contributors: * [cpsdqs](https://github.com/cpsdqs) * [barzamin](https://github.com/barzamin) * [fhalna](https://github.com/fhalna) +* [highemerly](https://github.com/highemerly) * [haoyayoi](https://github.com/haoyayoi) * [ik11235](https://github.com/ik11235) * [kawax](https://github.com/kawax) @@ -279,6 +303,7 @@ and provided thanks to the work of the following contributors: * [mecab](https://github.com/mecab) * [nicobz25](https://github.com/nicobz25) * [oliverkeeble](https://github.com/oliverkeeble) +* [partev](https://github.com/partev) * [pinfort](https://github.com/pinfort) * [rbaumert](https://github.com/rbaumert) * [rhoio](https://github.com/rhoio) @@ -287,19 +312,17 @@ and provided thanks to the work of the following contributors: * [vjackson725](https://github.com/vjackson725) * [wxcafe](https://github.com/wxcafe) * [新都心(Neet Shin)](mailto:nucx@dio-vox.com) +* [clarfon](https://github.com/clarfon) * [cygnan](https://github.com/cygnan) * [Awea](https://github.com/Awea) * [halcy](https://github.com/halcy) -* [naaaaaaaaaaaf](https://github.com/naaaaaaaaaaaf) * [8398a7](https://github.com/8398a7) * [857b](https://github.com/857b) * [insom](https://github.com/insom) * [tachyons](https://github.com/tachyons) -* [acid-chicken](https://github.com/acid-chicken) * [Esteth](https://github.com/Esteth) * [unascribed](https://github.com/unascribed) * [Aguay-val](https://github.com/Aguay-val) -* [Akihiko Odaki](mailto:nekomanma@pixiv.co.jp) * [knu](https://github.com/knu) * [h3poteto](https://github.com/h3poteto) * [unleashed](https://github.com/unleashed) @@ -307,8 +330,8 @@ and provided thanks to the work of the following contributors: * [console-cowboy](https://github.com/console-cowboy) * [Alkarex](https://github.com/Alkarex) * [a2](https://github.com/a2) +* [alfiedotwtf](https://github.com/alfiedotwtf) * [0xa](https://github.com/0xa) -* [palindromordnilap](https://github.com/palindromordnilap) * [virtualpain](https://github.com/virtualpain) * [sapphirus](https://github.com/sapphirus) * [amandavisconti](https://github.com/amandavisconti) @@ -320,10 +343,9 @@ and provided thanks to the work of the following contributors: * [contraexemplo](https://github.com/contraexemplo) * [abackstrom](https://github.com/abackstrom) * [armandfardeau](https://github.com/armandfardeau) +* [raboof](https://github.com/raboof) * [jumbosushi](https://github.com/jumbosushi) -* [aurelien-reeves](https://github.com/aurelien-reeves) * [ayumin](https://github.com/ayumin) -* [BaptisteGelez](https://github.com/BaptisteGelez) * [bzg](https://github.com/bzg) * [benediktg](https://github.com/benediktg) * [blakebarnett](https://github.com/blakebarnett) @@ -337,15 +359,15 @@ and provided thanks to the work of the following contributors: * [DoubleMalt](https://github.com/DoubleMalt) * [Moosh-be](https://github.com/Moosh-be) * [Motoma](https://github.com/Motoma) -* [chriswk](https://github.com/chriswk) +* [Christopher Kolstad](mailto:christopher.kolstad@finn.no) * [csu](https://github.com/csu) -* [clarfon](https://github.com/clarfon) * [kklleemm](https://github.com/kklleemm) * [colindean](https://github.com/colindean) * [dachinat](https://github.com/dachinat) * [multiple-creatures](https://github.com/multiple-creatures) * [watilde](https://github.com/watilde) * [daprice](https://github.com/daprice) +* [da2x](https://github.com/da2x) * [dar5hak](https://github.com/dar5hak) * [kant](https://github.com/kant) * [maxolasersquad](https://github.com/maxolasersquad) @@ -354,7 +376,7 @@ and provided thanks to the work of the following contributors: * [davefp](https://github.com/davefp) * [yipdw](https://github.com/yipdw) * [debanshuk](https://github.com/debanshuk) -* [Derek Lewis](mailto:derekcecillewis@gmail.com) +* [DerekNonGeneric](https://github.com/DerekNonGeneric) * [dblandin](https://github.com/dblandin) * [Drew Gates](mailto:aranaur@users.noreply.github.com) * [dtschust](https://github.com/dtschust) @@ -366,11 +388,13 @@ and provided thanks to the work of the following contributors: * [ericblade](https://github.com/ericblade) * [mikoim](https://github.com/mikoim) * [espenronnevik](https://github.com/espenronnevik) +* [fabianonline](https://github.com/fabianonline) * [Finariel](https://github.com/Finariel) * [siuying](https://github.com/siuying) * [zoc](https://github.com/zoc) * [fwenzel](https://github.com/fwenzel) * [GenbuHase](https://github.com/GenbuHase) +* [nilsding](https://github.com/nilsding) * [hattori6789](https://github.com/hattori6789) * [algernon](https://github.com/algernon) * [Fastbyte01](https://github.com/Fastbyte01) @@ -386,17 +410,19 @@ and provided thanks to the work of the following contributors: * [suzukaze](https://github.com/suzukaze) * [Hiromi-Kai](https://github.com/Hiromi-Kai) * [hishamhm](https://github.com/hishamhm) +* [Slaynash](https://github.com/Slaynash) * [musashino205](https://github.com/musashino205) * [iwaim](https://github.com/iwaim) * [valrus](https://github.com/valrus) * [IMcD23](https://github.com/IMcD23) * [yi0713](https://github.com/yi0713) * [iblech](https://github.com/iblech) -* [usbsnowcrash](https://github.com/usbsnowcrash) +* [J Yeary](mailto:usbsnowcrash@users.noreply.github.com) * [jack-michaud](https://github.com/jack-michaud) * [Floppy](https://github.com/Floppy) * [loomchild](https://github.com/loomchild) * [jenkr55](https://github.com/jenkr55) +* [hyenagirl64](https://github.com/hyenagirl64) * [press5](https://github.com/press5) * [TrollDecker](https://github.com/TrollDecker) * [jmontane](https://github.com/jmontane) @@ -406,17 +432,17 @@ and provided thanks to the work of the following contributors: * [joshuap](https://github.com/joshuap) * [Tiwy57](https://github.com/Tiwy57) * [xuv](https://github.com/xuv) -* [June Sallou](mailto:jnsll@users.noreply.github.com) +* [Jnsll](https://github.com/Jnsll) * [j0k3r](https://github.com/j0k3r) * [KEINOS](https://github.com/KEINOS) * [futoase](https://github.com/futoase) -* [Pneumaticat](https://github.com/Pneumaticat) +* [pot8to](https://github.com/pot8to) * [Kit Redgrave](mailto:qwertyitis@gmail.com) * [Knut Erik](mailto:abjectio@users.noreply.github.com) * [mkody](https://github.com/mkody) * [k0ta0uchi](https://github.com/k0ta0uchi) * [KrzysiekJ](https://github.com/KrzysiekJ) -* [leowzukw](https://github.com/leowzukw) +* [Leo Wzukw](mailto:leowzukw@users.noreply.github.com) * [Tak](https://github.com/Tak) * [cacheflow](https://github.com/cacheflow) * [ldidry](https://github.com/ldidry) @@ -424,6 +450,7 @@ and provided thanks to the work of the following contributors: * [lfuelling](https://github.com/lfuelling) * [Grabacr07](https://github.com/Grabacr07) * [mistermantas](https://github.com/mistermantas) +* [MareenaKunjachan](https://github.com/MareenaKunjachan) * [mareklach](https://github.com/mareklach) * [wirehack7](https://github.com/wirehack7) * [martymcguire](https://github.com/martymcguire) @@ -431,50 +458,53 @@ and provided thanks to the work of the following contributors: * [otsune](https://github.com/otsune) * [mbugowski](https://github.com/mbugowski) * [Mathias B](mailto:10813340+mathias-b@users.noreply.github.com) +* [madmath03](https://github.com/madmath03) * [matt-auckland](https://github.com/matt-auckland) * [webroo](https://github.com/webroo) -* [matthiasbeyer](https://github.com/matthiasbeyer) -* [mattjmattj](https://github.com/mattjmattj) -* [mtparet](https://github.com/mtparet) -* [maximeborges](https://github.com/maximeborges) -* [minacle](https://github.com/minacle) -* [michaeljdeeb](https://github.com/michaeljdeeb) -* [Themimitoof](https://github.com/Themimitoof) -* [cyweo](https://github.com/cyweo) +* [Matthias Beyer](mailto:mail@beyermatthias.de) +* [Matthias Jouan](mailto:matthias.jouan@gmail.com) +* [Matthieu Paret](mailto:matthieuparet69@gmail.com) +* [Maxime BORGES](mailto:maxime.borges@gmail.com) +* [Mayu Laierlence](mailto:minacle@live.com) +* [Michael Deeb](mailto:michaeldeeb@me.com) +* [Michael Vieira](mailto:dtox94@gmail.com) +* [Michel](mailto:michel@cyweo.com) * [Midgard](mailto:m1dgard@users.noreply.github.com) -* [mike-burns](https://github.com/mike-burns) -* [verymilan](https://github.com/verymilan) -* [milmazz](https://github.com/milmazz) -* [premist](https://github.com/premist) -* [Mnkai](https://github.com/Mnkai) -* [mitchhentges](https://github.com/mitchhentges) -* [mouse-reeve](https://github.com/mouse-reeve) -* [Mozinet-fr](https://github.com/Mozinet-fr) -* [lae](https://github.com/lae) -* [nosada](https://github.com/nosada) -* [Nanamachi](https://github.com/Nanamachi) -* [orinthe](https://github.com/orinthe) -* [NecroTechno](https://github.com/NecroTechno) -* [Dar13](https://github.com/Dar13) -* [ngerakines](https://github.com/ngerakines) -* [vonneudeck](https://github.com/vonneudeck) -* [Ninetailed](https://github.com/Ninetailed) -* [k24](https://github.com/k24) -* [noiob](https://github.com/noiob) -* [kwaio](https://github.com/kwaio) -* [norayr](https://github.com/norayr) -* [joyeusenoelle](https://github.com/joyeusenoelle) -* [OlivierNicole](https://github.com/OlivierNicole) -* [noppa](https://github.com/noppa) -* [Otakan951](https://github.com/Otakan951) -* [fahy](https://github.com/fahy) +* [Mike Burns](mailto:mburns@thoughtbot.com) +* [Milan](mailto:me@petabyteboy.de) +* [Milan*](mailto:tchncs@vivaldi.net) +* [Milton Mazzarri](mailto:milmazz@gmail.com) +* [Minku Lee](mailto:premist@me.com) +* [Minori Hiraoka](mailto:mnkai@users.noreply.github.com) +* [Mitchell Hentges](mailto:mitch9654@gmail.com) +* [Mostafa Ahangarha](mailto:ahangarha@users.noreply.github.com) +* [Mouse Reeve](mailto:mousereeve@riseup.net) +* [Mozinet](mailto:mozinet-fr@users.noreply.github.com) +* [Musee U](mailto:lae@users.noreply.github.com) +* [NOGISAKA Sadata](mailto:ngsksdt@gmail.com) +* [Naf](mailto:uenok.htc@gmail.com) +* [Nanamachi](mailto:town7.haruki@gmail.com) +* [Nathaniel Ekoniak](mailto:nekoniak@ennate.tech) +* [NecroTechno](mailto:necrotechno@riseup.net) +* [Nick Gerakines](mailto:nick@gerakines.net) +* [Nicolai von Neudeck](mailto:nicolai@vonneudeck.com) +* [Ninetailed](mailto:ninetailed@gmail.com) +* [Nishi, Keisuke](mailto:k24@users.noreply.github.com) +* [Noiob](mailto:noiob@users.noreply.github.com) +* [Nope Nope](mailto:hireme@kwaio.ninja) +* [Norayr Chilingarian](mailto:norayr@arnet.am) +* [Noëlle Anthony](mailto:noelle.d.anthony@gmail.com) +* [N氏](mailto:uenok.htc@gmail.com) +* [Olivier Nicole](mailto:olivierthnicole@gmail.com) +* [Oskari Noppa](mailto:noppa@users.noreply.github.com) +* [Otakan](mailto:otakan951@gmail.com) +* [Padraig Fahy](mailto:tech@padraigfahy.com) * [PatrickRWells](mailto:32802366+patrickrwells@users.noreply.github.com) * [Paul](mailto:naydex.mc+github@gmail.com) * [Pete Keen](mailto:pete@petekeen.net) * [Pierre-Morgan Gate](mailto:pgate@users.noreply.github.com) * [Ratmir Karabut](mailto:rkarabut@sfmodern.ru) * [Reto Kromer](mailto:retokromer@users.noreply.github.com) -* [Rey Tucker](mailto:git@reytucker.us) * [Rob Watson](mailto:rfwatson@users.noreply.github.com) * [Ryan Freebern](mailto:ryan@freebern.org) * [Ryan Wade](mailto:ryan.wade@protonmail.com) @@ -482,6 +512,7 @@ and provided thanks to the work of the following contributors: * [S.H](mailto:gamelinks007@gmail.com) * [Sadiq Saif](mailto:staticsafe@users.noreply.github.com) * [Sam Hewitt](mailto:hewittsamuel@gmail.com) +* [Sasha Sorokin](mailto:dafri.nochiterov8@gmail.com) * [Satoshi KOJIMA](mailto:skoji@mac.com) * [ScienJus](mailto:i@scienjus.com) * [Scott Larkin](mailto:scott@codeclimate.com) @@ -492,12 +523,10 @@ and provided thanks to the work of the following contributors: * [Shaun Gillies](mailto:me@shaungillies.net) * [Shin Adachi](mailto:shn@glucose.jp) * [Shin Kojima](mailto:shin@kojima.org) -* [Sho Kusano](mailto:rosylilly@aduca.org) * [Shouko Yu](mailto:imshouko@gmail.com) * [Sina Mashek](mailto:sina@mashek.xyz) * [Soshi Kato](mailto:mail@sossii.com) * [Spanky](mailto:2788886+spankyworks@users.noreply.github.com) -* [Stanislas](mailto:angristan@pm.me) * [StefOfficiel](mailto:pichard.stephane@free.fr) * [Steven Tappert](mailto:admin@dark-it.net) * [Svetlozar Todorov](mailto:svetlik@users.noreply.github.com) @@ -506,6 +535,7 @@ and provided thanks to the work of the following contributors: * [Takayoshi Nishida](mailto:takayoshi.nishida@gmail.com) * [Takayuki KUSANO](mailto:github@tkusano.jp) * [TakesxiSximada](mailto:takesxi.sximada@gmail.com) +* [Tao Bror Bojlén](mailto:brortao@users.noreply.github.com) * [TheInventrix](mailto:theinventrix@users.noreply.github.com) * [Thomas Alberola](mailto:thomas@needacoffee.fr) * [Toby Deshane](mailto:fortyseven@users.noreply.github.com) @@ -515,10 +545,12 @@ and provided thanks to the work of the following contributors: * [Treyssat-Vincent Nino](mailto:treyssatvincent@users.noreply.github.com) * [Udo Kramer](mailto:optik@fluffel.io) * [Una](mailto:una@unascribed.com) +* [Ushitora Anqou](mailto:ushitora@anqou.net) * [Ushitora Anqou](mailto:ushitora_anqou@yahoo.co.jp) * [Valentin Lorentz](mailto:progval+git@progval.net) * [Vladimir Mincev](mailto:vladimir@canicinteractive.com) * [Waldir Pimenta](mailto:waldyrious@gmail.com) +* [Wenceslao Páez Chávez](mailto:wcpaez@gmail.com) * [Wesley Ellis](mailto:tahnok@gmail.com) * [Wiktor](mailto:wiktor@metacode.biz) * [Wonderfall](mailto:wonderfall@schrodinger.io) @@ -529,6 +561,7 @@ and provided thanks to the work of the following contributors: * [YaQ](mailto:i_k_o_m_a_7@yahoo.co.jp) * [Yanaken](mailto:yanakend@gmail.com) * [Yann Klis](mailto:yann.klis@gmail.com) +* [Yağızhan](mailto:35808275+yagizhan49@users.noreply.github.com) * [Yeechan Lu](mailto:wz.bluesnow@gmail.com) * [Yusuke Abe](mailto:moonset20@gmail.com) * [Zachary Spector](mailto:logicaldash@gmail.com) @@ -542,6 +575,7 @@ and provided thanks to the work of the following contributors: * [chrolis](mailto:chrolis@users.noreply.github.com) * [cormo](mailto:cormorant2+github@gmail.com) * [d0p1](mailto:dopi-sama@hush.com) +* [dxwc](mailto:dxwc@users.noreply.github.com) * [evilny0](mailto:evilny0@moomoocamp.net) * [febrezo](mailto:felixbrezo@gmail.com) * [fsubal](mailto:fsubal@users.noreply.github.com) @@ -550,6 +584,7 @@ and provided thanks to the work of the following contributors: * [gol-cha](mailto:info@mevo.xyz) * [hakoai](mailto:hk--76@qa2.so-net.ne.jp) * [haosbvnker](mailto:github@chaosbunker.com) +* [ichi_i](mailto:51489410+ichi-i@users.noreply.github.com) * [isati](mailto:phil@juchnowi.cz) * [jacob](mailto:jacobherringtondeveloper@gmail.com) * [jenn kaplan](mailto:me@jkap.io) @@ -561,7 +596,6 @@ and provided thanks to the work of the following contributors: * [karlyeurl](mailto:karl.yeurl@gmail.com) * [kedama](mailto:32974885+kedamadq@users.noreply.github.com) * [kodai](mailto:shirafuta.kodai@gmail.com) -* [koyu](mailto:me@koyu.space) * [kuro5hin](mailto:rusty@kuro5hin.org) * [luzpaz](mailto:luzpaz@users.noreply.github.com) * [maxypy](mailto:maxime@mpigou.fr) @@ -573,6 +607,7 @@ and provided thanks to the work of the following contributors: * [muan](mailto:muan@github.com) * [namelessGonbai](mailto:43787036+namelessgonbai@users.noreply.github.com) * [neetshin](mailto:neetshin@neetsh.in) +* [nzws](mailto:git-yuzu@svk.jp) * [rch850](mailto:rich850@gmail.com) * [roikale](mailto:roikale@users.noreply.github.com) * [rysiekpl](mailto:rysiek@hackerspace.pl) @@ -585,6 +620,8 @@ and provided thanks to the work of the following contributors: * [tateisu](mailto:tateisu@gmail.com) * [tmyt](mailto:shigure@refy.net) * [trevDev()](mailto:trev@trevdev.ca) +* [tsia](mailto:github@tsia.de) +* [umonaca](mailto:53662960+umonaca@users.noreply.github.com) * [utam0k](mailto:k0ma@utam0k.jp) * [vpzomtrrfrt](mailto:vpzomtrrfrt@gmail.com) * [walfie](mailto:walfington@gmail.com) @@ -593,9 +630,10 @@ and provided thanks to the work of the following contributors: * [yoshipc](mailto:yoooo@yoshipc.net) * [Özcan Zafer AYAN](mailto:ozcanzaferayan@gmail.com) * [ばん](mailto:detteiu0321@gmail.com) -* [みたらしだんご](mailto:mitarashidango@users.noreply.github.com) +* [ふるふる](mailto:frfs@users.noreply.github.com) * [りんすき](mailto:6533808+rinsuki@users.noreply.github.com) * [ヨイツの賢狼ホロ | 3rd style](mailto:horo@yoitsu.moe) +* [唐宗勛](mailto:tangzongxun@hotmail.com) * [猫吸血鬼ディフリス / 猫ロキP](mailto:deflis@gmail.com) * [艮 鮟鱇](mailto:ushitora_anqou@yahoo.co.jp) * [西小倉宏信](mailto:nishiko@mindia.jp) @@ -607,338 +645,122 @@ This document is provided for informational purposes only. Since it is only upda Following people have contributed to translation of Mastodon: -- **Albanian** - - Besnik Bleta - - Aditoo -- **Arabic** - - ButterflyOfFire - - Aditoo - - Amrz0 -- **Asturian** - - ButterflyOfFire - - Enol P. - - Aditoo -- **Basque** - - Osoitz - - Aditoo - - Aitzol - - ButterflyOfFire - - Peru Iparragirre - - Gorka Azkarate -- **Bengali** - - dxwc -- **Bulgarian** - - ButterflyOfFire - - Aditoo -- **Catalan** - - spla - - Aditoo - - ButterflyOfFire - - Joan Montané - - Jose Luis -- **Chinese (Hong Kong)** - - ButterflyOfFire - - Luzi Leung - - Aditoo -- **Chinese (Simplified)** - - Allen Zhong - - ButterflyOfFire - - SerCom_KC - - martialarts - - Kaitian Xie - - Aditoo - - pan93412 -- **Chinese (Traditional)** - - Aditoo - - ButterflyOfFire - - James58899 - - pan93412 - - S1ttidoe477 - - SHA265 - - Jeff Huang -- **Corsican** - - Alix D. R. - - Aditoo - - ButterflyOfFire -- **Croatian** - - ButterflyOfFire - - Aditoo -- **Czech** - - Aditoo - - Marek Ľach - - ButterflyOfFire -- **Danish** - - Einhjeriar - - Rasmus Sæderup - - Aditoo - - ButterflyOfFire -- **Dutch** - - Albakham - - ButterflyOfFire - - jeroenpraat - - rscmbbng - - Aditoo - - Jelv -- **English** - - ButterflyOfFire - - Renato "Lond" Cerqueira -- **English (United Kingdom)** - - Albakham -- **Esperanto** - - Aditoo - - ButterflyOfFire - - Becci Cat - - Jeong Arm - - Mélanie Chauvel - - Vanege - - Martin Bodin - - tuxayo/Victor Grousset -- **Finnish** - - ButterflyOfFire - - Mikko Poussu - - Taru Luojola - - S Heija - - Aditoo - - Jonne Arjoranta -- **French** - - Albakham - - Alix D. R. - - ButterflyOfFire - - codl - - Leia - - Alda Marteau-Hardi - - Mélanie Chauvel - - Paul Marques Mota - - azenet - - Olivier Humbert - - Aditoo - - Jonathan Chan - - Letiteuf55 - - Baptiste Jonglez - - goofy-mdn - - Jean-Baptiste Holcroft - - Technowix - - Martin Bodin - - Théodore - - Thibaut Girka - - Franck Paul - - Sylvhem -- **Galician** - - ButterflyOfFire - - Xose M. - - Aditoo - - manequim -- **Georgian** - - ButterflyOfFire - - Aditoo -- **German** - - Aditoo - - ButterflyOfFire - - Daniel - - averageunicorn - - Koyu Berteon - - larsreineke - - koyu - - Austin Jones - - lilo - - Benedikt Geißler - - ePirat - - Eugen Rochko - - Weblate Admin - - Patrick Figel -- **Greek** - - Dimitris Maroulidis - - Antonis - - Aditoo - - ButterflyOfFire - - Konstantinos Grevenitis -- **Hebrew** - - ButterflyOfFire - - Aditoo - - Ira - - Yaron Shahrabani -- **Hungarian** - - ButterflyOfFire - - Adam Paszternak - - Aditoo - - Tibike Miklós -- **Ido** - - ButterflyOfFire - - Aditoo -- **Indonesian** - - afachri - - ButterflyOfFire - - Dito Kurnia Pratama - - Eirworks - - Aditoo - - Alfiana Sibuea - - se7entime -- **Irish** - - Albakham - - Kevin Houlihan -- **Italian** - - Alessandro Levati - - Albakham - - ButterflyOfFire - - Marcin Mikołajczak - - Aditoo - - Giuseppe Pignataro - - Stefano -- **Japanese** - - Hinaloe - - 小鳥遊まりあ - - mayaeh - - osapon - - 森の子リスのミーコの大冒険 - - Kumasun Morino - - Yamagishi Kazutoshi - - Aditoo - - ButterflyOfFire - - Jeong Arm - - unarist -- **Kazakh** - - arshat - - Aditoo -- **Korean** - - Aditoo - - Jeong Arm - - ButterflyOfFire - - Minori Hiraoka - - Yamagishi Kazutoshi -- **Lithuanian** - - Sarunas Medeikis -- **Malay** - - Muhammad Nur Hidayat (MNH48) - - Aditoo - - ButterflyOfFire -- **Norwegian (old code)** - - ButterflyOfFire - - Espen Rønnevik - - Aditoo - - Tale -- **Occitan** - - Aditoo - - ButterflyOfFire - - Quenti2 - - Quentí - - Maxenç -- **Persian** - - Masoud Abkenar - - Aditoo - - ButterflyOfFire -- **Polish** - - Aditoo - - Albakham - - ButterflyOfFire - - Stasiek Michalski - - Marcin Mikołajczak - - Jakub Mendyk - - Marek Ľach - - krkk -- **Portuguese** - - Albakham - - João Pinheiro - - manequim - - Aditoo - - ButterflyOfFire - - Hugo Gameiro -- **Portuguese (Brazil)** - - Aditoo - - Albakham - - Anna e só - - Renato "Lond" Cerqueira - - André Andrade - - ButterflyOfFire -- **Romanian** - - adrianbblk - - ButterflyOfFire - - Aditoo -- **Russian** - - Albakham - - ButterflyOfFire - - Evgeny Petrov - - Aditoo - - Павел Гастелло - - Andrew Zyabin - - Yaron Shahrabani -- **Serbian** - - Branko Kokanovic - - Burekz Finezt - - Aditoo - - ButterflyOfFire -- **Serbian (latin)** - - ButterflyOfFire - - Aditoo -- **Slovak** - - Aditoo - - ButterflyOfFire - - Ivan Pleva - - Marek Ľach - - Peter -- **Slovenian** - - Kristijan Tkalec - - Aditoo - - ButterflyOfFire -- **Spanish** - - Albakham - - ButterflyOfFire - - Carlos Mondragon - - Antón López - - Max Winkler - - Pablo de la Concepción Sanz - - Sergio Soriano - - Angeles Broullón - - Lothar Wolf - - Aditoo - - David Charte - - Emmanuel -- **Swedish** - - ButterflyOfFire - - Isak Holmström - - Shellkr - - Aditoo - - Elias Mårtenson - - Stefan Midjich - - Tim Stahel - - Jonas Hultén -- **Telugu** - - avndp - - Ranjith Tellakula - - Aditoo - - ButterflyOfFire - - Joseph Nuthalapati -- **Thai** - - ButterflyOfFire - - parnikkapore - - Thai Localization - - Aditoo -- **Turkish** - - Ali Demirtas - - ButterflyOfFire - - Aditoo -- **Ukrainian** - - alexcleac - - ButterflyOfFire - - Aditoo - - Ivan Verchenko -- **Welsh** - - carl morris - - Jaz-Michael King - - Owain Rhys Lewis - - Rhoslyn Prys - - Aditoo - - ButterflyOfFire - - Renato "Lond" Cerqueira - - Albakham - - Kevin Beynon -- **Armenian** - - Aditoo - - ButterflyOfFire -- **Latvian** - - Aditoo - - ButterflyOfFire - - Maigonis -- **Tamil** - - Aditoo - - ButterflyOfFire - - Prasanna Venkadesh +- Zoltán Gera (*Hungarian*) +- Kristijan Tkalec (*Slovenian*) +- Evert Prants (*Estonian*) +- borys_sh (*Ukrainian*) +- ButterflyOfFire (*Arabic; French*) +- Osoitz (*Basque*) +- oɹʇuʞ (*Spanish, Argentina*) +- koyu (*German*) +- Jeroen (*Dutch*) +- Muha Aliss (*Turkish*) +- 唐宗勛 (*Chinese Simplified*) +- Jeong Arm (*Korean; Esperanto; Japanese*) +- Oguz Ersen (*Turkish*) +- spla (*Catalan*) +- Ramdziana F Y (*Indonesian*) +- Aditoo17 (*Czech*) +- Xosé M. (*Galician*) +- Roboron (*Spanish*) +- Alix Rossi (*Corsican; French*) +- Maya Minatsuki (*Japanese*) +- Masoud Abkenar (*Persian*) +- Thai Localization (*Thai*) +- Marek Ľach (*Slovak; Polish*) +- d5Ziif3K (*Ukrainian*) +- lamnatos (*Greek*) +- Emyn Nant Nefydd (*Welsh*) +- Diluns (*Occitan*) +- atarashiako (*Chinese Simplified*) +- 101010 (*Polish*) +- Yi-Jyun Pan (*Chinese Traditional*) +- silkevicious (*Italian*) +- FédiQuébec (*French*) +- Jaz-Michael King (*Welsh*) +- christalleras (*Norwegian Nynorsk*) +- tykayn (*French*) +- Alessandro Levati (*Italian*) +- carolinagiorno (*Portuguese, Brazilian*) +- taoxvx (*Danish*) +- sabri (*Spanish*) +- Sasha Sorokin (*Russian*) +- shioko (*Chinese Simplified*) +- Evgeny Petrov (*Russian*) +- ariasuni (*French; Esperanto*) +- Tiago Epifânio (*Portuguese*) +- dxwc (*Bengali*) +- liffon (*Swedish*) +- Vanege (*Esperanto*) +- Johan Schiff (*Swedish*) +- kat (*Ukrainian; Russian*) +- oti4500 (*Hungarian; Ukrainian*) +- Juan José Salvador Piedra (*Spanish*) +- diazepan (*Spanish*) +- SHeija (*Finnish*) +- Jack R (*Spanish*) +- Saederup92 (*Danish*) +- Stasiek Michalski (*Polish*) +- Dewi (*Breton; French*) +- cybergene (*Japanese*) +- AW Unad (*Indonesian*) +- Andrea Lo Iacono (*Italian*) +- Ray (*Spanish*) +- Unmual (*Spanish*) +- Ryo (*Korean*) +- juanda097 (*Spanish*) +- Anunnakey (*Macedonian*) +- Cutls (*Japanese*) +- erikstl (*Esperanto*) +- ruine (*Japanese*) +- MadeInSteak (*Finnish*) +- Sokratis Alichanidis (*Greek*) +- dragnucs2 (*Arabic*) +- frumble (*German*) +- Rikard Linde (*Swedish*) +- PPNplus (*Thai*) +- arethsu (*Swedish*) +- EPEMA YT (*German*) +- Rhys Harrison (*Esperanto*) +- KEINOS (*Japanese*) +- filippodb (*Italian*) +- JzshAC (*Chinese Simplified*) +- Rintan1 (*Japanese*) +- Antillion (*Spanish*) +- hiphipvargas (*Portuguese*) +- Ch. (*Korean*) +- tctovsli (*Norwegian Nynorsk*) +- vjasiegd (*Polish*) +- SamitiMed (*Thai*) +- umelard (*Hebrew*) +- 硫酸鶏 (*Japanese*) +- Adrián Lattes (*Spanish*) +- Hinaloe (*Japanese*) +- Renato "Lond" Cerqueira (*Portuguese, Brazilian*) +- parnikkapore (*Thai*) +- Marcin Mikołajczak (*Polish*) +- 森の子リスのミーコの大冒険 (*Japanese*) +- Marcepanek_ (*Polish*) +- Sahak Petrosyan (*Armenian*) +- Daniel Dimitrov (*Bulgarian*) +- Hugh Liu (*Chinese Simplified*) +- Rakino (*Chinese Simplified*) +- hussama (*Portuguese, Brazilian*) +- ThibG (*French*) +- SnDer (*Dutch*) +- PifyZ (*French*) +- eichkat3r (*German*) +- Karol Kosek (*Polish*) +- Akarshan Biswas (*Bengali*) +- Tradjincal (*French*) +- Steven Tappert (*German*) +- sergioaraujo1 (*Portuguese, Brazilian*) +- mmokhi (*Persian*) +- fedot (*Russian*) +- skaaarrr (*German*) +- JackXu (*Chinese Simplified*) +- Lukas Fülling (*German*) +- Zoé Bőle (*German*) +- Dremski (*Bulgarian*) +- tamaina (*Japanese*) +- OpenAlgeria (*Arabic*) diff --git a/CHANGELOG.md b/CHANGELOG.md index c89f35cdf..b200747b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,333 @@ Changelog All notable changes to this project will be documented in this file. +## [3.0.1] - 2019-10-10 +### Added + +- Add `tootctl media usage` command ([Gargron](https://github.com/tootsuite/mastodon/pull/12115)) +- Add admin setting to auto-approve trending hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/12122), [Gargron](https://github.com/tootsuite/mastodon/pull/12130)) + +### Changed + +- Change `tootctl media refresh` to skip already downloaded attachments ([Gargron](https://github.com/tootsuite/mastodon/pull/12118)) + +### Removed + +- Remove auto-silence behaviour from spam check ([Gargron](https://github.com/tootsuite/mastodon/pull/12117)) +- Remove HTML `lang` attribute from individual statuses in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12124)) +- Remove fallback to long description on sidebar and meta description ([Gargron](https://github.com/tootsuite/mastodon/pull/12119)) + +### Fixed + +- Fix preloaded JSON-LD context for identity not being used ([Gargron](https://github.com/tootsuite/mastodon/pull/12138)) +- Fix media editing modal changing dimensions once the image loads ([Gargron](https://github.com/tootsuite/mastodon/pull/12131)) +- Fix not showing whether a custom emoji has a local counterpart in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12135)) +- Fix attachment not being re-downloaded even if file is not stored ([Gargron](https://github.com/tootsuite/mastodon/pull/12125)) +- Fix old migration trying to use new column due to default status scope ([Gargron](https://github.com/tootsuite/mastodon/pull/12095)) +- Fix column back button missing for not found accounts ([trwnh](https://github.com/tootsuite/mastodon/pull/12094)) +- Fix issues with tootctl's parallelization and progress reporting ([Gargron](https://github.com/tootsuite/mastodon/pull/12093), [Gargron](https://github.com/tootsuite/mastodon/pull/12097)) +- Fix existing user records with now-renamed `pt` locale ([Gargron](https://github.com/tootsuite/mastodon/pull/12092)) +- Fix hashtag timeline REST API accepting too many hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/12091)) +- Fix `GET /api/v1/instance` REST APIs being unavailable in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12089)) +- Fix performance of home feed regeneration and merging ([Gargron](https://github.com/tootsuite/mastodon/pull/12084)) +- Fix ffmpeg performance issues due to stdout buffer overflow ([hugogameiro](https://github.com/tootsuite/mastodon/pull/12088)) +- Fix S3 adapter retrying failing uploads with exponential backoff ([Gargron](https://github.com/tootsuite/mastodon/pull/12085)) +- Fix `tootctl accounts cull` advertising unused option flag ([Kjwon15](https://github.com/tootsuite/mastodon/pull/12074)) + +## [3.0.0] - 2019-10-03 +### Added + +- Add "not available" label to unloaded media attachments in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11715), [Gargron](https://github.com/tootsuite/mastodon/pull/11745)) +- **Add profile directory to web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11688), [mayaeh](https://github.com/tootsuite/mastodon/pull/11872)) + - Add profile directory opt-in federation + - Add profile directory REST API +- Add special alert for throttled requests in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11677)) +- Add confirmation modal when logging out from the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11671)) +- **Add audio player in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11644), [Gargron](https://github.com/tootsuite/mastodon/pull/11652), [Gargron](https://github.com/tootsuite/mastodon/pull/11654), [ThibG](https://github.com/tootsuite/mastodon/pull/11629), [Gargron](https://github.com/tootsuite/mastodon/pull/12056)) +- **Add autosuggestions for hashtags in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11422), [ThibG](https://github.com/tootsuite/mastodon/pull/11632), [Gargron](https://github.com/tootsuite/mastodon/pull/11764), [Gargron](https://github.com/tootsuite/mastodon/pull/11588), [Gargron](https://github.com/tootsuite/mastodon/pull/11442)) +- **Add media editing modal with OCR tool in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11563), [Gargron](https://github.com/tootsuite/mastodon/pull/11566), [ThibG](https://github.com/tootsuite/mastodon/pull/11575), [ThibG](https://github.com/tootsuite/mastodon/pull/11576), [Gargron](https://github.com/tootsuite/mastodon/pull/11577), [Gargron](https://github.com/tootsuite/mastodon/pull/11573), [Gargron](https://github.com/tootsuite/mastodon/pull/11571)) +- Add indicator of unread notifications to window title when web UI is out of focus ([Gargron](https://github.com/tootsuite/mastodon/pull/11560), [Gargron](https://github.com/tootsuite/mastodon/pull/11572)) +- Add indicator for which options you voted for in a poll in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11195)) +- **Add search results pagination to web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11409), [ThibG](https://github.com/tootsuite/mastodon/pull/11447)) +- **Add option to disable real-time updates in web UI ("slow mode")** ([Gargron](https://github.com/tootsuite/mastodon/pull/9984), [ykzts](https://github.com/tootsuite/mastodon/pull/11880), [ThibG](https://github.com/tootsuite/mastodon/pull/11883), [Gargron](https://github.com/tootsuite/mastodon/pull/11898), [ThibG](https://github.com/tootsuite/mastodon/pull/11859)) +- Add option to disable blurhash previews in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11188)) +- Add native smooth scrolling when supported in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11207)) +- Add scrolling to the search bar on focus in web UI ([Kjwon15](https://github.com/tootsuite/mastodon/pull/12032)) +- Add refresh button to list of rebloggers/favouriters in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12031)) +- Add error description and button to copy stack trace to web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12033)) +- Add search and sort functions to hashtag admin UI ([mayaeh](https://github.com/tootsuite/mastodon/pull/11829), [Gargron](https://github.com/tootsuite/mastodon/pull/11897), [mayaeh](https://github.com/tootsuite/mastodon/pull/11875)) +- Add setting for default search engine indexing in admin UI ([brortao](https://github.com/tootsuite/mastodon/pull/11804)) +- Add account bio to account view in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11473)) +- **Add option to include reported statuses in warning e-mail from admin UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11639), [Gargron](https://github.com/tootsuite/mastodon/pull/11812), [Gargron](https://github.com/tootsuite/mastodon/pull/11741), [Gargron](https://github.com/tootsuite/mastodon/pull/11698), [mayaeh](https://github.com/tootsuite/mastodon/pull/11765)) +- Add number of pending accounts and pending hashtags to dashboard in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11514)) +- **Add account migration UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11846), [noellabo](https://github.com/tootsuite/mastodon/pull/11905), [noellabo](https://github.com/tootsuite/mastodon/pull/11907), [noellabo](https://github.com/tootsuite/mastodon/pull/11906), [noellabo](https://github.com/tootsuite/mastodon/pull/11902)) +- **Add table of contents to about page** ([Gargron](https://github.com/tootsuite/mastodon/pull/11885), [ykzts](https://github.com/tootsuite/mastodon/pull/11941), [ykzts](https://github.com/tootsuite/mastodon/pull/11895), [Kjwon15](https://github.com/tootsuite/mastodon/pull/11916)) +- **Add password challenge to 2FA settings, e-mail notifications** ([Gargron](https://github.com/tootsuite/mastodon/pull/11878)) +- **Add optional public list of domain blocks with comments** ([ThibG](https://github.com/tootsuite/mastodon/pull/11298), [ThibG](https://github.com/tootsuite/mastodon/pull/11515), [Gargron](https://github.com/tootsuite/mastodon/pull/11908)) +- Add an RSS feed for featured hashtags ([noellabo](https://github.com/tootsuite/mastodon/pull/10502)) +- Add explanations to featured hashtags UI and profile ([Gargron](https://github.com/tootsuite/mastodon/pull/11586)) +- **Add hashtag trends with admin and user settings** ([Gargron](https://github.com/tootsuite/mastodon/pull/11490), [Gargron](https://github.com/tootsuite/mastodon/pull/11502), [Gargron](https://github.com/tootsuite/mastodon/pull/11641), [Gargron](https://github.com/tootsuite/mastodon/pull/11594), [Gargron](https://github.com/tootsuite/mastodon/pull/11517), [mayaeh](https://github.com/tootsuite/mastodon/pull/11845), [Gargron](https://github.com/tootsuite/mastodon/pull/11774), [Gargron](https://github.com/tootsuite/mastodon/pull/11712), [Gargron](https://github.com/tootsuite/mastodon/pull/11791), [Gargron](https://github.com/tootsuite/mastodon/pull/11743), [Gargron](https://github.com/tootsuite/mastodon/pull/11740), [Gargron](https://github.com/tootsuite/mastodon/pull/11714), [ThibG](https://github.com/tootsuite/mastodon/pull/11631), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/11569), [Gargron](https://github.com/tootsuite/mastodon/pull/11524), [Gargron](https://github.com/tootsuite/mastodon/pull/11513)) + - Add hashtag usage breakdown to admin UI + - Add batch actions for hashtags to admin UI + - Add trends to web UI + - Add trends to public pages + - Add user preference to hide trends + - Add admin setting to disable trends +- **Add categories for custom emojis** ([Gargron](https://github.com/tootsuite/mastodon/pull/11196), [Gargron](https://github.com/tootsuite/mastodon/pull/11793), [Gargron](https://github.com/tootsuite/mastodon/pull/11920), [highemerly](https://github.com/tootsuite/mastodon/pull/11876)) + - Add custom emoji categories to emoji picker in web UI + - Add `category` to custom emojis in REST API + - Add batch actions for custom emojis in admin UI +- Add max image dimensions to error message ([raboof](https://github.com/tootsuite/mastodon/pull/11552)) +- Add aac, m4a, 3gp, amr, wma to allowed audio formats ([Gargron](https://github.com/tootsuite/mastodon/pull/11342), [umonaca](https://github.com/tootsuite/mastodon/pull/11687)) +- **Add search syntax for operators and phrases** ([Gargron](https://github.com/tootsuite/mastodon/pull/11411)) +- **Add REST API for managing featured hashtags** ([noellabo](https://github.com/tootsuite/mastodon/pull/11778)) +- **Add REST API for managing timeline read markers** ([Gargron](https://github.com/tootsuite/mastodon/pull/11762)) +- Add `exclude_unreviewed` param to `GET /api/v2/search` REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/11977)) +- Add `reason` param to `POST /api/v1/accounts` REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/12064)) +- **Add ActivityPub secure mode** ([Gargron](https://github.com/tootsuite/mastodon/pull/11269), [ThibG](https://github.com/tootsuite/mastodon/pull/11332), [ThibG](https://github.com/tootsuite/mastodon/pull/11295)) +- Add HTTP signatures to all outgoing ActivityPub GET requests ([Gargron](https://github.com/tootsuite/mastodon/pull/11284), [ThibG](https://github.com/tootsuite/mastodon/pull/11300)) +- Add support for ActivityPub Audio activities ([ThibG](https://github.com/tootsuite/mastodon/pull/11189)) +- Add ActivityPub actor representing the entire server ([ThibG](https://github.com/tootsuite/mastodon/pull/11321), [rtucker](https://github.com/tootsuite/mastodon/pull/11400), [ThibG](https://github.com/tootsuite/mastodon/pull/11561), [Gargron](https://github.com/tootsuite/mastodon/pull/11798)) +- **Add whitelist mode** ([Gargron](https://github.com/tootsuite/mastodon/pull/11291), [mayaeh](https://github.com/tootsuite/mastodon/pull/11634)) +- Add config of multipart threshold for S3 ([ykzts](https://github.com/tootsuite/mastodon/pull/11924), [ykzts](https://github.com/tootsuite/mastodon/pull/11944)) +- Add health check endpoint for web ([ykzts](https://github.com/tootsuite/mastodon/pull/11770), [ykzts](https://github.com/tootsuite/mastodon/pull/11947)) +- Add HTTP signature keyId to request log ([Gargron](https://github.com/tootsuite/mastodon/pull/11591)) +- Add `SMTP_REPLY_TO` environment variable ([hugogameiro](https://github.com/tootsuite/mastodon/pull/11718)) +- Add `tootctl preview_cards remove` command ([mayaeh](https://github.com/tootsuite/mastodon/pull/11320)) +- Add `tootctl media refresh` command ([Gargron](https://github.com/tootsuite/mastodon/pull/11775)) +- Add `tootctl cache recount` command ([Gargron](https://github.com/tootsuite/mastodon/pull/11597)) +- Add option to exclude suspended domains from `tootctl domains crawl` ([dariusk](https://github.com/tootsuite/mastodon/pull/11454)) +- Add parallelization to `tootctl search deploy` ([noellabo](https://github.com/tootsuite/mastodon/pull/12051)) +- Add soft delete for statuses for instant deletes through API ([Gargron](https://github.com/tootsuite/mastodon/pull/11623), [Gargron](https://github.com/tootsuite/mastodon/pull/11648)) +- Add rails-level JSON caching ([Gargron](https://github.com/tootsuite/mastodon/pull/11333), [Gargron](https://github.com/tootsuite/mastodon/pull/11271)) +- **Add request pool to improve delivery performance** ([Gargron](https://github.com/tootsuite/mastodon/pull/10353), [ykzts](https://github.com/tootsuite/mastodon/pull/11756)) +- Add concurrent connection attempts to resolved IP addresses ([ThibG](https://github.com/tootsuite/mastodon/pull/11757)) +- Add index for remember_token to improve login performance ([abcang](https://github.com/tootsuite/mastodon/pull/11881)) +- **Add more accurate hashtag search** ([Gargron](https://github.com/tootsuite/mastodon/pull/11579), [Gargron](https://github.com/tootsuite/mastodon/pull/11427), [Gargron](https://github.com/tootsuite/mastodon/pull/11448)) +- **Add more accurate account search** ([Gargron](https://github.com/tootsuite/mastodon/pull/11537), [Gargron](https://github.com/tootsuite/mastodon/pull/11580)) +- **Add a spam check** ([Gargron](https://github.com/tootsuite/mastodon/pull/11217), [Gargron](https://github.com/tootsuite/mastodon/pull/11806), [ThibG](https://github.com/tootsuite/mastodon/pull/11296)) +- Add new languages ([Gargron](https://github.com/tootsuite/mastodon/pull/12062)) + - Breton + - Spanish (Argentina) + - Estonian + - Macedonian + - New Norwegian +- Add NodeInfo endpoint ([Gargron](https://github.com/tootsuite/mastodon/pull/12002), [Gargron](https://github.com/tootsuite/mastodon/pull/12058)) + +### Changed + +- **Change conversations UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11896)) +- Change dashboard to short number notation ([noellabo](https://github.com/tootsuite/mastodon/pull/11847), [noellabo](https://github.com/tootsuite/mastodon/pull/11911)) +- Change REST API `GET /api/v1/timelines/public` to require authentication when public preview is off ([ThibG](https://github.com/tootsuite/mastodon/pull/11802)) +- Change REST API `POST /api/v1/follow_requests/:id/(approve|reject)` to return relationship ([ThibG](https://github.com/tootsuite/mastodon/pull/11800)) +- Change rate limit for media proxy ([ykzts](https://github.com/tootsuite/mastodon/pull/11814)) +- Change unlisted custom emoji to not appear in autosuggestions ([Gargron](https://github.com/tootsuite/mastodon/pull/11818)) +- Change max length of media descriptions from 420 to 1500 characters ([Gargron](https://github.com/tootsuite/mastodon/pull/11819), [ThibG](https://github.com/tootsuite/mastodon/pull/11836)) +- **Change deletes to preserve soft-deleted statuses in unresolved reports** ([Gargron](https://github.com/tootsuite/mastodon/pull/11805)) +- **Change tootctl to use inline parallelization instead of Sidekiq** ([Gargron](https://github.com/tootsuite/mastodon/pull/11776)) +- **Change account deletion page to have better explanations** ([Gargron](https://github.com/tootsuite/mastodon/pull/11753), [Gargron](https://github.com/tootsuite/mastodon/pull/11763)) +- Change hashtag component in web UI to show numbers for 2 last days ([Gargron](https://github.com/tootsuite/mastodon/pull/11742), [Gargron](https://github.com/tootsuite/mastodon/pull/11755), [Gargron](https://github.com/tootsuite/mastodon/pull/11754)) +- Change OpenGraph description on sign-up page to reflect invite ([Gargron](https://github.com/tootsuite/mastodon/pull/11744)) +- Change layout of public profile directory to be the same as in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11705)) +- Change detailed status child ordering to sort self-replies on top ([ThibG](https://github.com/tootsuite/mastodon/pull/11686)) +- Change window resize handler to switch to/from mobile layout as soon as needed ([ThibG](https://github.com/tootsuite/mastodon/pull/11656)) +- Change icon button styles to make hover/focus states more obvious ([ThibG](https://github.com/tootsuite/mastodon/pull/11474)) +- Change contrast of status links that are not mentions or hashtags ([ThibG](https://github.com/tootsuite/mastodon/pull/11406)) +- **Change hashtags to preserve first-used casing** ([Gargron](https://github.com/tootsuite/mastodon/pull/11416), [Gargron](https://github.com/tootsuite/mastodon/pull/11508), [Gargron](https://github.com/tootsuite/mastodon/pull/11504), [Gargron](https://github.com/tootsuite/mastodon/pull/11507), [Gargron](https://github.com/tootsuite/mastodon/pull/11441)) +- **Change unconfirmed user login behaviour** ([Gargron](https://github.com/tootsuite/mastodon/pull/11375), [ThibG](https://github.com/tootsuite/mastodon/pull/11394), [Gargron](https://github.com/tootsuite/mastodon/pull/11860)) +- **Change single-column mode to scroll the whole page** ([Gargron](https://github.com/tootsuite/mastodon/pull/11359), [Gargron](https://github.com/tootsuite/mastodon/pull/11894), [Gargron](https://github.com/tootsuite/mastodon/pull/11891), [ThibG](https://github.com/tootsuite/mastodon/pull/11655), [Gargron](https://github.com/tootsuite/mastodon/pull/11463), [Gargron](https://github.com/tootsuite/mastodon/pull/11458), [ThibG](https://github.com/tootsuite/mastodon/pull/11395), [Gargron](https://github.com/tootsuite/mastodon/pull/11418)) +- Change `tootctl accounts follow` to only work with local accounts ([angristan](https://github.com/tootsuite/mastodon/pull/11592)) +- Change Dockerfile ([Shleeble](https://github.com/tootsuite/mastodon/pull/11710), [ykzts](https://github.com/tootsuite/mastodon/pull/11768), [Shleeble](https://github.com/tootsuite/mastodon/pull/11707)) +- Change supported Node versions to include v12 ([abcang](https://github.com/tootsuite/mastodon/pull/11706)) +- Change Portuguese language from `pt` to `pt-PT` ([Gargron](https://github.com/tootsuite/mastodon/pull/11820)) +- Change domain block silence to always require approval on follow ([ThibG](https://github.com/tootsuite/mastodon/pull/11975)) +- Change link preview fetcher to not perform a HEAD request first ([Gargron](https://github.com/tootsuite/mastodon/pull/12028)) +- Change `tootctl domains purge` to accept multiple domains at once ([Gargron](https://github.com/tootsuite/mastodon/pull/12046)) + +### Removed + +- **Remove OStatus support** ([Gargron](https://github.com/tootsuite/mastodon/pull/11205), [Gargron](https://github.com/tootsuite/mastodon/pull/11303), [Gargron](https://github.com/tootsuite/mastodon/pull/11460), [ThibG](https://github.com/tootsuite/mastodon/pull/11280), [ThibG](https://github.com/tootsuite/mastodon/pull/11278)) +- Remove Atom feeds and old URLs in the form of `GET /:username/updates/:id` ([Gargron](https://github.com/tootsuite/mastodon/pull/11247)) +- Remove WebP support ([angristan](https://github.com/tootsuite/mastodon/pull/11589)) +- Remove deprecated config options from Heroku and Scalingo ([ykzts](https://github.com/tootsuite/mastodon/pull/11925)) +- Remove deprecated REST API `GET /api/v1/search` API ([Gargron](https://github.com/tootsuite/mastodon/pull/11823)) +- Remove deprecated REST API `GET /api/v1/statuses/:id/card` ([Gargron](https://github.com/tootsuite/mastodon/pull/11213)) +- Remove deprecated REST API `POST /api/v1/notifications/dismiss?id=:id` ([Gargron](https://github.com/tootsuite/mastodon/pull/11214)) +- Remove deprecated REST API `GET /api/v1/timelines/direct` ([Gargron](https://github.com/tootsuite/mastodon/pull/11212)) + +### Fixed + +- Fix manifest warning ([ykzts](https://github.com/tootsuite/mastodon/pull/11767)) +- Fix admin UI for custom emoji not respecting GIF autoplay preference ([ThibG](https://github.com/tootsuite/mastodon/pull/11801)) +- Fix page body not being scrollable in admin/settings layout ([Gargron](https://github.com/tootsuite/mastodon/pull/11893)) +- Fix placeholder colors for inputs not being explicitly defined ([Gargron](https://github.com/tootsuite/mastodon/pull/11890)) +- Fix incorrect enclosure length in RSS ([tsia](https://github.com/tootsuite/mastodon/pull/11889)) +- Fix TOTP codes not being filtered from logs during enabling/disabling ([Gargron](https://github.com/tootsuite/mastodon/pull/11877)) +- Fix webfinger response not returning 410 when account is suspended ([Gargron](https://github.com/tootsuite/mastodon/pull/11869)) +- Fix ActivityPub Move handler queuing jobs that will fail if account is suspended ([Gargron](https://github.com/tootsuite/mastodon/pull/11864)) +- Fix SSO login not using existing account when e-mail is verified ([Gargron](https://github.com/tootsuite/mastodon/pull/11862)) +- Fix web UI allowing uploads past status limit via drag & drop ([Gargron](https://github.com/tootsuite/mastodon/pull/11863)) +- Fix expiring polls not being displayed as such in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11835)) +- Fix 2FA challenge and password challenge for non-database users ([Gargron](https://github.com/tootsuite/mastodon/pull/11831), [Gargron](https://github.com/tootsuite/mastodon/pull/11943)) +- Fix profile fields overflowing page width in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11828)) +- Fix web push subscriptions being deleted on rate limit or timeout ([Gargron](https://github.com/tootsuite/mastodon/pull/11826)) +- Fix display of long poll options in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11717), [ThibG](https://github.com/tootsuite/mastodon/pull/11833)) +- Fix search API not resolving URL when `type` is given ([Gargron](https://github.com/tootsuite/mastodon/pull/11822)) +- Fix hashtags being split by ZWNJ character ([Gargron](https://github.com/tootsuite/mastodon/pull/11821)) +- Fix scroll position resetting when opening media modals in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11815)) +- Fix duplicate HTML IDs on about page ([ThibG](https://github.com/tootsuite/mastodon/pull/11803)) +- Fix admin UI showing superfluous reject media/reports on suspended domain blocks ([ThibG](https://github.com/tootsuite/mastodon/pull/11749)) +- Fix ActivityPub context not being dynamically computed ([ThibG](https://github.com/tootsuite/mastodon/pull/11746)) +- Fix Mastodon logo style on hover on public pages' footer ([ThibG](https://github.com/tootsuite/mastodon/pull/11735)) +- Fix height of dashboard counters ([ThibG](https://github.com/tootsuite/mastodon/pull/11736)) +- Fix custom emoji animation on hover in web UI directory bios ([ThibG](https://github.com/tootsuite/mastodon/pull/11716)) +- Fix non-numbers being passed to Redis and causing an error ([Gargron](https://github.com/tootsuite/mastodon/pull/11697)) +- Fix error in REST API for an account's statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/11700)) +- Fix uncaught error when resource param is missing in Webfinger request ([Gargron](https://github.com/tootsuite/mastodon/pull/11701)) +- Fix uncaught domain normalization error in remote follow ([Gargron](https://github.com/tootsuite/mastodon/pull/11703)) +- Fix uncaught 422 and 500 errors ([Gargron](https://github.com/tootsuite/mastodon/pull/11590), [Gargron](https://github.com/tootsuite/mastodon/pull/11811)) +- Fix uncaught parameter missing exceptions and missing error templates ([Gargron](https://github.com/tootsuite/mastodon/pull/11702)) +- Fix encoding error when checking e-mail MX records ([Gargron](https://github.com/tootsuite/mastodon/pull/11696)) +- Fix items in StatusContent render list not all having a key ([ThibG](https://github.com/tootsuite/mastodon/pull/11645)) +- Fix remote and staff-removed statuses leaving media behind for a day ([Gargron](https://github.com/tootsuite/mastodon/pull/11638)) +- Fix CSP needlessly allowing blob URLs in script-src ([ThibG](https://github.com/tootsuite/mastodon/pull/11620)) +- Fix ignoring whole status because of one invalid hashtag ([Gargron](https://github.com/tootsuite/mastodon/pull/11621)) +- Fix hidden statuses losing focus ([ThibG](https://github.com/tootsuite/mastodon/pull/11208)) +- Fix loading bar being obscured by other elements in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11598)) +- Fix multiple issues with replies collection for pages further than self-replies ([ThibG](https://github.com/tootsuite/mastodon/pull/11582)) +- Fix blurhash and autoplay not working on public pages ([Gargron](https://github.com/tootsuite/mastodon/pull/11585)) +- Fix 422 being returned instead of 404 when POSTing to unmatched routes ([Gargron](https://github.com/tootsuite/mastodon/pull/11574), [Gargron](https://github.com/tootsuite/mastodon/pull/11704)) +- Fix client-side resizing of image uploads ([ThibG](https://github.com/tootsuite/mastodon/pull/11570)) +- Fix short number formatting for numbers above million in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11559)) +- Fix ActivityPub and REST API queries setting cookies and preventing caching ([ThibG](https://github.com/tootsuite/mastodon/pull/11539), [ThibG](https://github.com/tootsuite/mastodon/pull/11557), [ThibG](https://github.com/tootsuite/mastodon/pull/11336), [ThibG](https://github.com/tootsuite/mastodon/pull/11331)) +- Fix some emojis in profile metadata labels are not emojified. ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/11534)) +- Fix account search always returning exact match on paginated results ([Gargron](https://github.com/tootsuite/mastodon/pull/11525)) +- Fix acct URIs with IDN domains not being resolved ([Gargron](https://github.com/tootsuite/mastodon/pull/11520)) +- Fix admin dashboard missing latest features ([Gargron](https://github.com/tootsuite/mastodon/pull/11505)) +- Fix jumping of toot date when clicking spoiler button ([ariasuni](https://github.com/tootsuite/mastodon/pull/11449)) +- Fix boost to original audience not working on mobile in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11371)) +- Fix handling of webfinger redirects in ResolveAccountService ([ThibG](https://github.com/tootsuite/mastodon/pull/11279)) +- Fix URLs appearing twice in errors of ActivityPub::DeliveryWorker ([Gargron](https://github.com/tootsuite/mastodon/pull/11231)) +- Fix support for HTTP proxies ([ThibG](https://github.com/tootsuite/mastodon/pull/11245)) +- Fix HTTP requests to IPv6 hosts ([ThibG](https://github.com/tootsuite/mastodon/pull/11240)) +- Fix error in ElasticSearch index import ([mayaeh](https://github.com/tootsuite/mastodon/pull/11192)) +- Fix duplicate account error when seeding development database ([ysksn](https://github.com/tootsuite/mastodon/pull/11366)) +- Fix performance of session clean-up scheduler ([abcang](https://github.com/tootsuite/mastodon/pull/11871)) +- Fix older migrations not running ([zunda](https://github.com/tootsuite/mastodon/pull/11377)) +- Fix URLs counting towards RTL detection ([ahangarha](https://github.com/tootsuite/mastodon/pull/11759)) +- Fix unnecessary status re-rendering in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11211)) +- Fix http_parser.rb gem not being compiled when no network available ([petabyteboy](https://github.com/tootsuite/mastodon/pull/11444)) +- Fix muted text color not applying to all text ([trwnh](https://github.com/tootsuite/mastodon/pull/11996)) +- Fix follower/following lists resetting on back-navigation in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11986)) +- Fix n+1 query when approving multiple follow requests ([abcang](https://github.com/tootsuite/mastodon/pull/12004)) +- Fix records not being indexed into ElasticSearch sometimes ([Gargron](https://github.com/tootsuite/mastodon/pull/12024)) +- Fix needlessly indexing unsearchable statuses into ElasticSearch ([Gargron](https://github.com/tootsuite/mastodon/pull/12041)) +- Fix new user bootstrapping crashing when to-be-followed accounts are invalid ([ThibG](https://github.com/tootsuite/mastodon/pull/12037)) +- Fix featured hashtag URL being interpreted as media or replies tab ([Gargron](https://github.com/tootsuite/mastodon/pull/12048)) +- Fix account counters being overwritten by parallel writes ([Gargron](https://github.com/tootsuite/mastodon/pull/12045)) + +### Security + +- Fix performance of GIF re-encoding and always strip EXIF data from videos ([Gargron](https://github.com/tootsuite/mastodon/pull/12057)) + +## [2.9.3] - 2019-08-10 +### Added + +- Add GIF and WebP support for custom emojis ([Gargron](https://github.com/tootsuite/mastodon/pull/11519)) +- Add logout link to dropdown menu in web UI ([koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/11353)) +- Add indication that text search is unavailable in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11112), [ThibG](https://github.com/tootsuite/mastodon/pull/11202)) +- Add `suffix` to `Mastodon::Version` to help forks ([clarfon](https://github.com/tootsuite/mastodon/pull/11407)) +- Add on-hover animation to animated custom emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11348), [ThibG](https://github.com/tootsuite/mastodon/pull/11404), [ThibG](https://github.com/tootsuite/mastodon/pull/11522)) +- Add custom emoji support in profile metadata labels ([ThibG](https://github.com/tootsuite/mastodon/pull/11350)) + +### Changed + +- Change default interface of web and streaming from 0.0.0.0 to 127.0.0.1 ([Gargron](https://github.com/tootsuite/mastodon/pull/11302), [zunda](https://github.com/tootsuite/mastodon/pull/11378), [Gargron](https://github.com/tootsuite/mastodon/pull/11351), [zunda](https://github.com/tootsuite/mastodon/pull/11326)) +- Change the retry limit of web push notifications ([highemerly](https://github.com/tootsuite/mastodon/pull/11292)) +- Change ActivityPub deliveries to not retry HTTP 501 errors ([Gargron](https://github.com/tootsuite/mastodon/pull/11233)) +- Change language detection to include hashtags as words ([Gargron](https://github.com/tootsuite/mastodon/pull/11341)) +- Change terms and privacy policy pages to always be accessible ([Gargron](https://github.com/tootsuite/mastodon/pull/11334)) +- Change robots tag to include `noarchive` when user opts out of indexing ([Kjwon15](https://github.com/tootsuite/mastodon/pull/11421)) + +### Fixed + +- Fix account domain block not clearing out notifications ([Gargron](https://github.com/tootsuite/mastodon/pull/11393)) +- Fix incorrect locale sometimes being detected for browser ([Gargron](https://github.com/tootsuite/mastodon/pull/8657)) +- Fix crash when saving invalid domain name ([Gargron](https://github.com/tootsuite/mastodon/pull/11528)) +- Fix pinned statuses REST API returning pagination headers ([Gargron](https://github.com/tootsuite/mastodon/pull/11526)) +- Fix "cancel follow request" button having unreadable text in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11521)) +- Fix image uploads being blank when canvas read access is blocked ([ThibG](https://github.com/tootsuite/mastodon/pull/11499)) +- Fix avatars not being animated on hover when not logged in ([ThibG](https://github.com/tootsuite/mastodon/pull/11349)) +- Fix overzealous sanitization of HTML lists ([ThibG](https://github.com/tootsuite/mastodon/pull/11354)) +- Fix block crashing when a follow request exists ([ThibG](https://github.com/tootsuite/mastodon/pull/11288)) +- Fix backup service crashing when an attachment is missing ([ThibG](https://github.com/tootsuite/mastodon/pull/11241)) +- Fix account moderation action always sending e-mail notification ([Gargron](https://github.com/tootsuite/mastodon/pull/11242)) +- Fix swiping columns on mobile sometimes failing in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11200)) +- Fix wrong actor URI being serialized into poll updates ([ThibG](https://github.com/tootsuite/mastodon/pull/11194)) +- Fix statsd UDP sockets not being cleaned up in Sidekiq ([Gargron](https://github.com/tootsuite/mastodon/pull/11230)) +- Fix expiration date of filters being set to "never" when editing them ([ThibG](https://github.com/tootsuite/mastodon/pull/11204)) +- Fix support for MP4 files that are actually M4V files ([Gargron](https://github.com/tootsuite/mastodon/pull/11210)) +- Fix `alerts` not being typecast correctly in push subscription in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/11343)) +- Fix some notices staying on unrelated pages ([ThibG](https://github.com/tootsuite/mastodon/pull/11364)) +- Fix unboosting sometimes preventing a boost from reappearing on feed ([ThibG](https://github.com/tootsuite/mastodon/pull/11405), [Gargron](https://github.com/tootsuite/mastodon/pull/11450)) +- Fix only one middle dot being recognized in hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/11345), [ThibG](https://github.com/tootsuite/mastodon/pull/11363)) +- Fix unnecessary SQL query performed on unauthenticated requests ([Gargron](https://github.com/tootsuite/mastodon/pull/11179)) +- Fix incorrect timestamp displayed on featured tags ([Kjwon15](https://github.com/tootsuite/mastodon/pull/11477)) +- Fix privacy dropdown active state when dropdown is placed on top of it ([ThibG](https://github.com/tootsuite/mastodon/pull/11495)) +- Fix filters not being applied to poll options ([ThibG](https://github.com/tootsuite/mastodon/pull/11174)) +- Fix keyboard navigation on various dropdowns ([ThibG](https://github.com/tootsuite/mastodon/pull/11511), [ThibG](https://github.com/tootsuite/mastodon/pull/11492), [ThibG](https://github.com/tootsuite/mastodon/pull/11491)) +- Fix keyboard navigation in modals ([ThibG](https://github.com/tootsuite/mastodon/pull/11493)) +- Fix image conversation being non-deterministic due to timestamps ([Gargron](https://github.com/tootsuite/mastodon/pull/11408)) +- Fix web UI performance ([ThibG](https://github.com/tootsuite/mastodon/pull/11211), [ThibG](https://github.com/tootsuite/mastodon/pull/11234)) +- Fix scrolling to compose form when not necessary in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11246), [ThibG](https://github.com/tootsuite/mastodon/pull/11182)) +- Fix save button being enabled when list title is empty in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11475)) +- Fix poll expiration not being pre-filled on delete & redraft in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11203)) +- Fix content warning sometimes being set when not requested in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11206)) + +### Security + +- Fix invites not being disabled upon account suspension ([ThibG](https://github.com/tootsuite/mastodon/pull/11412)) +- Fix blocked domains still being able to fill database with account records ([Gargron](https://github.com/tootsuite/mastodon/pull/11219)) + +## [2.9.2] - 2019-06-22 +### Added + +- Add `short_description` and `approval_required` to `GET /api/v1/instance` ([Gargron](https://github.com/tootsuite/mastodon/pull/11146)) + +### Changed + +- Change camera icon to paperclip icon in upload form ([koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/11149)) + +### Fixed + +- Fix audio-only OGG and WebM files not being processed as such ([Gargron](https://github.com/tootsuite/mastodon/pull/11151)) +- Fix audio not being downloaded from remote servers ([Gargron](https://github.com/tootsuite/mastodon/pull/11145)) + +## [2.9.1] - 2019-06-22 +### Added + +- Add moderation API ([Gargron](https://github.com/tootsuite/mastodon/pull/9387)) +- Add audio uploads ([Gargron](https://github.com/tootsuite/mastodon/pull/11123), [Gargron](https://github.com/tootsuite/mastodon/pull/11141)) + +### Changed + +- Change domain blocks to automatically support subdomains ([Gargron](https://github.com/tootsuite/mastodon/pull/11138)) +- Change Nanobox configuration to bring it up to date ([danhunsaker](https://github.com/tootsuite/mastodon/pull/11083)) + +### Removed + +- Remove expensive counters from federation page in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11139)) + +### Fixed + +- Fix converted media being saved with original extension and mime type ([Gargron](https://github.com/tootsuite/mastodon/pull/11130)) +- Fix layout of identity proofs settings ([acid-chicken](https://github.com/tootsuite/mastodon/pull/11126)) +- Fix active scope only returning suspended users ([ThibG](https://github.com/tootsuite/mastodon/pull/11111)) +- Fix sanitizer making block level elements unreadable ([Gargron](https://github.com/tootsuite/mastodon/pull/10836)) +- Fix label for site theme not being translated in admin UI ([palindromordnilap](https://github.com/tootsuite/mastodon/pull/11121)) +- Fix statuses not being filtered irreversibly in web UI under some circumstances ([ThibG](https://github.com/tootsuite/mastodon/pull/11113)) +- Fix scrolling behaviour in compose form ([ThibG](https://github.com/tootsuite/mastodon/pull/11093)) + ## [2.9.0] - 2019-06-13 ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4019b1eed..a5b80c7e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,13 +48,13 @@ If your contributions are accepted into Mastodon, you can request to be paid thr ## Bug reports -Bug reports and feature suggestions can be submitted to [GitHub Issues](https://github.com/tootsuite/mastodon/issues). Please make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected in the past using the search function. Please also use descriptive, concise titles. +Bug reports and feature suggestions must use descriptive and concise titles and be submitted to [GitHub Issues](https://github.com/tootsuite/mastodon/issues). Please use the search function to make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected. ## Translations You can submit translations via [Crowdin](https://crowdin.com/project/mastodon). They are periodically merged into the codebase. -[][crowdin] +[](https://crowdin.com/project/mastodon) ## Pull requests diff --git a/Dockerfile b/Dockerfile index 62541d382..f122f38f8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,23 +3,21 @@ FROM ubuntu:18.04 as build-dep # Use bash for the shell SHELL ["bash", "-c"] -# Install Node -ENV NODE_VER="10.15.3" +# Install Node v12 (LTS) +ENV NODE_VER="12.13.1" RUN echo "Etc/UTC" > /etc/localtime && \ apt update && \ - apt -y install wget make gcc g++ python && \ + apt -y install wget python && \ cd ~ && \ - wget https://nodejs.org/download/release/v$NODE_VER/node-v$NODE_VER.tar.gz && \ - tar xf node-v$NODE_VER.tar.gz && \ - cd node-v$NODE_VER && \ - ./configure --prefix=/opt/node && \ - make -j$(nproc) > /dev/null && \ - make install + wget https://nodejs.org/download/release/v$NODE_VER/node-v$NODE_VER-linux-x64.tar.gz && \ + tar xf node-v$NODE_VER-linux-x64.tar.gz && \ + rm node-v$NODE_VER-linux-x64.tar.gz && \ + mv node-v$NODE_VER-linux-x64 /opt/node # Install jemalloc -ENV JE_VER="5.2.0" +ENV JE_VER="5.2.1" RUN apt update && \ - apt -y install autoconf && \ + apt -y install make autoconf gcc g++ && \ cd ~ && \ wget https://github.com/jemalloc/jemalloc/archive/$JE_VER.tar.gz && \ tar xf $JE_VER.tar.gz && \ @@ -30,7 +28,7 @@ RUN apt update && \ make install_bin install_include install_lib # Install ruby -ENV RUBY_VER="2.6.3" +ENV RUBY_VER="2.6.5" ENV CPPFLAGS="-I/opt/jemalloc/include" ENV LDFLAGS="-L/opt/jemalloc/lib/" RUN apt update && \ @@ -112,6 +110,7 @@ ENV NODE_ENV="production" # Tell rails to serve static files ENV RAILS_SERVE_STATIC_FILES="true" +ENV BIND="0.0.0.0" # Set the run user USER mastodon @@ -124,3 +123,4 @@ RUN cd ~ && \ # Set the work dir and the container entry point WORKDIR /opt/mastodon ENTRYPOINT ["/tini", "--"] +EXPOSE 3000 4000 diff --git a/Gemfile b/Gemfile index 65f6fa3cb..4d6d3aec0 100644 --- a/Gemfile +++ b/Gemfile @@ -3,19 +3,19 @@ source 'https://rubygems.org' ruby '>= 2.4.0', '< 2.7.0' -gem 'pkg-config', '~> 1.3' +gem 'pkg-config', '~> 1.4' -gem 'puma', '~> 3.12' +gem 'puma', '~> 4.3' gem 'rails', '~> 5.2.3' gem 'thor', '~> 0.20' gem 'hamlit-rails', '~> 0.2' gem 'pg', '~> 1.1' gem 'makara', '~> 0.4' -gem 'pghero', '~> 2.2' +gem 'pghero', '~> 2.4' gem 'dotenv-rails', '~> 2.7' -gem 'aws-sdk-s3', '~> 1.41', require: false +gem 'aws-sdk-s3', '~> 1.57', require: false gem 'fog-core', '<= 2.1.0' gem 'fog-openstack', '~> 0.3', require: false gem 'paperclip', '~> 6.0' @@ -24,86 +24,92 @@ gem 'streamio-ffmpeg', '~> 3.0' gem 'blurhash', '~> 0.1' gem 'active_model_serializers', '~> 0.10' -gem 'addressable', '~> 2.6' +gem 'addressable', '~> 2.7' gem 'bootsnap', '~> 1.4', require: false gem 'browser' -gem 'charlock_holmes', '~> 0.7.6' +gem 'charlock_holmes', '~> 0.7.7' gem 'iso-639' -gem 'chewy', '~> 5.0' +gem 'chewy', '~> 5.1' gem 'cld3', '~> 3.2.4' -gem 'devise', '~> 4.6' -gem 'devise-two-factor', '~> 3.0' +gem 'devise', '~> 4.7' +gem 'devise-two-factor', '~> 3.1' group :pam_authentication, optional: true do gem 'devise_pam_authenticatable2', '~> 9.2' end -gem 'net-ldap', '~> 0.10' +gem 'net-ldap', '~> 0.16' gem 'omniauth-cas', '~> 1.1' gem 'omniauth-saml', '~> 1.10' gem 'omniauth', '~> 1.9' -gem 'doorkeeper', '~> 5.1' +gem 'discard', '~> 1.1' +gem 'doorkeeper', '~> 5.2' gem 'fast_blank', '~> 1.0' gem 'fastimage' gem 'goldfinger', '~> 2.1' gem 'hiredis', '~> 0.6' gem 'redis-namespace', '~> 1.5' +gem 'health_check', git: 'https://github.com/ianheggie/health_check', ref: '0b799ead604f900ed50685e9b2d469cd2befba5b' gem 'html2text' gem 'htmlentities', '~> 4.3' gem 'http', '~> 3.3' gem 'http_accept_language', '~> 2.1' -gem 'http_parser.rb', '~> 0.6', git: 'https://github.com/tmm1/http_parser.rb', ref: '54b17ba8c7d8d20a16dfc65d1775241833219cf2' +gem 'http_parser.rb', '~> 0.6', git: 'https://github.com/tmm1/http_parser.rb', ref: '54b17ba8c7d8d20a16dfc65d1775241833219cf2', submodules: true gem 'httplog', '~> 1.3' gem 'idn-ruby', require: 'idn' gem 'kaminari', '~> 1.1' gem 'link_header', '~> 0.0' -gem 'mime-types', '~> 3.2', require: 'mime/types/columnar' +gem 'mime-types', '~> 3.3', require: 'mime/types/columnar' +gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532' gem 'nokogiri', '~> 1.10' gem 'nsa', '~> 0.2' -gem 'oj', '~> 3.7' +gem 'oj', '~> 3.9' gem 'ostatus2', '~> 2.0' -gem 'ox', '~> 2.10' +gem 'ox', '~> 2.11' +gem 'parslet' +gem 'parallel', '~> 1.19' gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c' -gem 'pundit', '~> 2.0' +gem 'pundit', '~> 2.1' gem 'premailer-rails' -gem 'rack-attack', '~> 6.0' -gem 'rack-cors', '~> 1.0', require: 'rack/cors' +gem 'rack-attack', '~> 6.2' +gem 'rack-cors', '~> 1.1', require: 'rack/cors' gem 'rails-i18n', '~> 5.1' gem 'rails-settings-cached', '~> 0.6' gem 'redis', '~> 4.1', require: ['redis', 'redis/connection/hiredis'] gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock' gem 'rqrcode', '~> 0.10' -gem 'sanitize', '~> 5.0' +gem 'ruby-progressbar', '~> 1.10' +gem 'sanitize', '~> 5.1' gem 'sidekiq', '~> 5.2' gem 'sidekiq-scheduler', '~> 3.0' gem 'sidekiq-unique-jobs', '~> 6.0' gem 'sidekiq-bulk', '~>0.2.0' -gem 'simple-navigation', '~> 4.0' -gem 'simple_form', '~> 4.1' +gem 'simple-navigation', '~> 4.1' +gem 'simple_form', '~> 5.0' gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie' -gem 'stoplight', '~> 2.1.3' +gem 'stoplight', '~> 2.2.0' gem 'strong_migrations', '~> 0.4' -gem 'tty-command', '~> 0.8', require: false -gem 'tty-prompt', '~> 0.19', require: false +gem 'tty-command', '~> 0.9', require: false +gem 'tty-prompt', '~> 0.20', require: false gem 'twitter-text', '~> 1.14' gem 'tzinfo-data', '~> 1.2019' -gem 'webpacker', '~> 4.0' +gem 'webpacker', '~> 4.2' gem 'webpush' -gem 'json-ld', '~> 3.0' +gem 'json-ld', git: 'https://github.com/ruby-rdf/json-ld.git', ref: 'e742697a0906e74e8bb777ef98137bc3955d981d' gem 'json-ld-preloaded', '~> 3.0' gem 'rdf-normalize', '~> 0.3' gem 'redcarpet', '~> 3.4' group :development, :test do - gem 'fabrication', '~> 2.20' - gem 'fuubar', '~> 2.4' + gem 'fabrication', '~> 2.21' + gem 'fuubar', '~> 2.5' gem 'i18n-tasks', '~> 0.9', require: false gem 'pry-byebug', '~> 3.7' gem 'pry-rails', '~> 0.3' - gem 'rspec-rails', '~> 3.8' + gem 'rspec-rails', '~> 3.9' end group :production, :test do @@ -111,29 +117,29 @@ group :production, :test do end group :test do - gem 'capybara', '~> 3.22' + gem 'capybara', '~> 3.29' gem 'climate_control', '~> 0.2' - gem 'faker', '~> 1.9' + gem 'faker', '~> 2.8' gem 'microformats', '~> 4.1' gem 'rails-controller-testing', '~> 1.0' gem 'rspec-sidekiq', '~> 3.0' - gem 'simplecov', '~> 0.16', require: false - gem 'webmock', '~> 3.5' + gem 'simplecov', '~> 0.17', require: false + gem 'webmock', '~> 3.7' gem 'parallel_tests', '~> 2.29' end group :development do - gem 'active_record_query_trace', '~> 1.6' - gem 'annotate', '~> 2.7' + gem 'active_record_query_trace', '~> 1.7' + gem 'annotate', '~> 3.0' gem 'better_errors', '~> 2.5' gem 'binding_of_caller', '~> 0.7' gem 'bullet', '~> 6.0' gem 'letter_opener', '~> 1.7' gem 'letter_opener_web', '~> 1.3' gem 'memory_profiler' - gem 'rubocop', '~> 0.71', require: false - gem 'rubocop-rails', '~> 2.0', require: false - gem 'brakeman', '~> 4.5', require: false + gem 'rubocop', '~> 0.76', require: false + gem 'rubocop-rails', '~> 2.4', require: false + gem 'brakeman', '~> 4.7', require: false gem 'bundler-audit', '~> 0.6', require: false gem 'capistrano', '~> 3.11' @@ -151,3 +157,4 @@ group :production do end gem 'concurrent-ruby', require: false +gem 'connection_pool', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 73f0d63f5..091fc78c4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,4 +1,12 @@ GIT + remote: https://github.com/ianheggie/health_check + revision: 0b799ead604f900ed50685e9b2d469cd2befba5b + ref: 0b799ead604f900ed50685e9b2d469cd2befba5b + specs: + health_check (4.0.0.pre) + rails (>= 4.0) + +GIT remote: https://github.com/rtomayko/posix-spawn revision: 58465d2e213991f8afb13b984854a49fcdcc980c ref: 58465d2e213991f8afb13b984854a49fcdcc980c @@ -6,12 +14,33 @@ GIT posix-spawn (0.3.13) GIT + remote: https://github.com/ruby-rdf/json-ld.git + revision: e742697a0906e74e8bb777ef98137bc3955d981d + ref: e742697a0906e74e8bb777ef98137bc3955d981d + specs: + json-ld (3.0.2) + htmlentities (~> 4.3) + json-canonicalization (~> 0.1) + link_header (~> 0.0, >= 0.0.8) + multi_json (~> 1.13) + rack (>= 1.6, < 3.0) + rdf (~> 3.0, >= 3.0.8) + +GIT remote: https://github.com/tmm1/http_parser.rb revision: 54b17ba8c7d8d20a16dfc65d1775241833219cf2 ref: 54b17ba8c7d8d20a16dfc65d1775241833219cf2 + submodules: true specs: http_parser.rb (0.6.1) +GIT + remote: https://github.com/witgo/nilsimsa + revision: fd184883048b922b176939f851338d0a4971a532 + ref: fd184883048b922b176939f851338d0a4971a532 + specs: + nilsimsa (1.1.2) + GEM remote: https://rubygems.org/ specs: @@ -38,12 +67,12 @@ GEM erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) - active_model_serializers (0.10.9) - actionpack (>= 4.1, < 6) - activemodel (>= 4.1, < 6) + active_model_serializers (0.10.10) + actionpack (>= 4.1, < 6.1) + activemodel (>= 4.1, < 6.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - active_record_query_trace (1.6.2) + active_record_query_trace (1.7) activejob (5.2.3) activesupport (= 5.2.3) globalid (>= 0.3.6) @@ -62,13 +91,13 @@ GEM i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) - addressable (2.6.0) - public_suffix (>= 2.0.2, < 4.0) - airbrussh (1.3.0) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + airbrussh (1.3.4) sshkit (>= 1.6.1, != 1.7.0) - annotate (2.7.5) + annotate (3.0.3) activerecord (>= 3.2, < 7.0) - rake (>= 10.4, < 13.0) + rake (>= 10.4, < 14.0) arel (9.0.0) ast (2.4.0) attr_encrypted (3.1.0) @@ -76,17 +105,17 @@ GEM av (0.9.0) cocaine (~> 0.5.3) aws-eventstream (1.0.3) - aws-partitions (1.169.0) - aws-sdk-core (3.54.0) + aws-partitions (1.246.0) + aws-sdk-core (3.82.0) aws-eventstream (~> 1.0, >= 1.0.2) - aws-partitions (~> 1.0) + aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.21.0) - aws-sdk-core (~> 3, >= 3.53.0) + aws-sdk-kms (1.26.0) + aws-sdk-core (~> 3, >= 3.71.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.41.0) - aws-sdk-core (~> 3, >= 3.53.0) + aws-sdk-s3 (1.57.0) + aws-sdk-core (~> 3, >= 3.77.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) aws-sigv4 (1.1.0) @@ -101,19 +130,19 @@ GEM debug_inspector (>= 0.0.1) blurhash (0.1.3) ffi (~> 1.10.0) - bootsnap (1.4.4) + bootsnap (1.4.5) msgpack (~> 1.0) - brakeman (4.5.1) - browser (2.5.3) + brakeman (4.7.2) + browser (2.7.1) builder (3.2.3) - bullet (6.0.0) + bullet (6.0.2) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) bundler-audit (0.6.1) bundler (>= 1.2.0, < 3) thor (~> 0.18) byebug (11.0.0) - capistrano (3.11.0) + capistrano (3.11.2) airbrussh (>= 1.0.0) i18n rake (>= 10.0.0) @@ -129,7 +158,7 @@ GEM sshkit (~> 1.3) capistrano-yarn (2.0.2) capistrano (~> 3.0) - capybara (3.22.0) + capybara (3.29.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -139,8 +168,8 @@ GEM xpath (~> 3.2) case_transform (0.2) activesupport - charlock_holmes (0.7.6) - chewy (5.0.0) + charlock_holmes (0.7.7) + chewy (5.1.0) activesupport (>= 4.0) elasticsearch (>= 2.0.0) elasticsearch-dsl @@ -155,65 +184,68 @@ GEM connection_pool (2.2.2) crack (0.4.3) safe_yaml (~> 1.0.0) - crass (1.0.4) - css_parser (1.6.0) + crass (1.0.5) + css_parser (1.7.0) addressable debug_inspector (0.0.3) - derailed_benchmarks (1.3.5) + derailed_benchmarks (1.4.2) benchmark-ips (~> 2) get_process_mem (~> 0) heapy (~> 0) memory_profiler (~> 0) rack (>= 1) - rake (> 10, < 13) + rake (> 10, < 14) + ruby-statistics (>= 2.1) thor (~> 0.19) - devise (4.6.2) + devise (4.7.1) bcrypt (~> 3.0) orm_adapter (~> 0.1) - railties (>= 4.1.0, < 6.0) + railties (>= 4.1.0) responders warden (~> 1.2.3) - devise-two-factor (3.0.3) - activesupport (< 5.3) + devise-two-factor (3.1.0) + activesupport (< 6.1) attr_encrypted (>= 1.3, < 4, != 2) devise (~> 4.0) - railties (< 5.3) + railties (< 6.1) rotp (~> 2.0) devise_pam_authenticatable2 (9.2.0) devise (>= 4.0.0) rpam2 (~> 4.0) diff-lcs (1.3) - docile (1.3.0) + discard (1.1.0) + activerecord (>= 4.2, < 7) + docile (1.3.2) domain_name (0.5.20180417) unf (>= 0.0.5, < 1.0.0) - doorkeeper (5.1.0) + doorkeeper (5.2.2) railties (>= 5) - dotenv (2.7.2) - dotenv-rails (2.7.2) - dotenv (= 2.7.2) + dotenv (2.7.5) + dotenv-rails (2.7.5) + dotenv (= 2.7.5) railties (>= 3.2, < 6.1) - elasticsearch (6.0.2) - elasticsearch-api (= 6.0.2) - elasticsearch-transport (= 6.0.2) - elasticsearch-api (6.0.2) + elasticsearch (7.3.0) + elasticsearch-api (= 7.3.0) + elasticsearch-transport (= 7.3.0) + elasticsearch-api (7.3.0) multi_json - elasticsearch-dsl (0.1.5) - elasticsearch-transport (6.0.2) + elasticsearch-dsl (0.1.8) + elasticsearch-transport (7.3.0) faraday multi_json encryptor (3.0.0) - equatable (0.5.0) - erubi (1.8.0) + equatable (0.6.1) + erubi (1.9.0) et-orbi (1.1.6) tzinfo excon (0.62.0) - fabrication (2.20.2) - faker (1.9.3) - i18n (>= 0.7) - faraday (0.15.0) + fabrication (2.21.0) + faker (2.8.0) + i18n (>= 1.6, < 1.8) + faraday (0.15.4) multipart-post (>= 1.2, < 3) fast_blank (1.0.0) - fastimage (2.1.5) + fastimage (2.1.7) ffi (1.10.0) fog-core (2.1.0) builder @@ -231,10 +263,11 @@ GEM fugit (1.1.6) et-orbi (~> 1.1, >= 1.1.6) raabro (~> 1.1) - fuubar (2.4.0) + fuubar (2.5.0) rspec-core (~> 3.0) ruby-progressbar (~> 1.4) - get_process_mem (0.2.3) + get_process_mem (0.2.5) + ffi (~> 1.0) globalid (0.4.2) activesupport (>= 4.2.0) goldfinger (2.1.0) @@ -253,7 +286,7 @@ GEM railties (>= 4.0.1) hamster (3.0.0) concurrent-ruby (~> 1.0) - hashdiff (0.3.7) + hashdiff (1.0.0) hashie (3.6.0) heapy (0.1.4) highline (2.0.1) @@ -271,10 +304,10 @@ GEM domain_name (~> 0.5) http-form_data (2.1.1) http_accept_language (2.1.1) - httplog (1.3.0) + httplog (1.3.3) rack (>= 1.0) rainbow (>= 2.0.0) - i18n (1.6.0) + i18n (1.7.0) concurrent-ruby (~> 1.0) i18n-tasks (0.9.29) activesupport (>= 4.0.2) @@ -289,17 +322,15 @@ GEM idn-ruby (0.1.0) ipaddress (0.8.3) iso-639 (0.2.8) - jaro_winkler (1.5.2) + jaro_winkler (1.5.4) jmespath (1.4.0) - json (2.1.0) - json-ld (3.0.2) - multi_json (~> 1.12) - rdf (>= 2.2.8, < 4.0) - json-ld-preloaded (3.0.2) + json (2.2.0) + json-canonicalization (0.1.0) + json-ld-preloaded (3.0.4) json-ld (~> 3.0) multi_json (~> 1.12) rdf (~> 3.0) - jsonapi-renderer (0.2.0) + jsonapi-renderer (0.2.2) jwt (2.1.0) kaminari (1.1.1) activesupport (>= 4.1.0) @@ -322,12 +353,12 @@ GEM letter_opener (~> 1.0) railties (>= 3.2) link_header (0.0.8) - lograge (0.11.1) + lograge (0.11.2) actionpack (>= 4) activesupport (>= 4) railties (>= 4) request_store (~> 1.0) - loofah (2.2.3) + loofah (2.3.1) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) @@ -338,37 +369,37 @@ GEM mimemagic (~> 0.3.2) mario-redis-lock (1.2.1) redis (>= 3.0.5) - memory_profiler (0.9.13) + memory_profiler (0.9.14) method_source (0.9.2) microformats (4.1.0) json (~> 2.1) nokogiri (~> 1.8, >= 1.8.3) - mime-types (3.2.2) + mime-types (3.3) mime-types-data (~> 3.2015) - mime-types-data (3.2018.0812) + mime-types-data (3.2019.0904) mimemagic (0.3.3) - mini_mime (1.0.1) + mini_mime (1.0.2) mini_portile2 (2.4.0) - minitest (5.11.3) - msgpack (1.2.10) + minitest (5.13.0) + msgpack (1.3.1) multi_json (1.13.1) - multipart-post (2.0.0) - necromancer (0.5.0) - net-ldap (0.16.1) - net-scp (1.2.1) - net-ssh (>= 2.6.5) - net-ssh (5.0.2) - nio4r (2.3.1) - nokogiri (1.10.3) + multipart-post (2.1.1) + necromancer (0.5.1) + net-ldap (0.16.2) + net-scp (2.0.0) + net-ssh (>= 2.6.5, < 6.0.0) + net-ssh (5.2.0) + nio4r (2.5.2) + nokogiri (1.10.5) mini_portile2 (~> 2.4.0) - nokogumbo (2.0.0) + nokogumbo (2.0.1) nokogiri (~> 1.8, >= 1.8.4) nsa (0.2.7) activesupport (>= 4.2, < 6) concurrent-ruby (~> 1.0, >= 1.0.2) sidekiq (>= 3.5) statsd-ruby (~> 1.4, >= 1.4.0) - oj (3.7.12) + oj (3.9.2) omniauth (1.9.0) hashie (>= 3.4.6, < 3.7.0) rack (>= 1.6.2, < 3) @@ -384,7 +415,7 @@ GEM addressable (~> 2.5) http (~> 3.0) nokogiri (~> 1.8) - ox (2.10.1) + ox (2.11.0) paperclip (6.0.0) activemodel (>= 4.2.0) activesupport (>= 4.2.0) @@ -394,24 +425,25 @@ GEM paperclip-av-transcoder (0.6.4) av (~> 0.9.0) paperclip (>= 2.5.2) - parallel (1.17.0) - parallel_tests (2.29.0) + parallel (1.19.1) + parallel_tests (2.29.2) parallel - parser (2.6.3.0) + parser (2.6.5.0) ast (~> 2.4.0) - pastel (0.7.2) - equatable (~> 0.5.0) - tty-color (~> 0.4.0) + parslet (1.8.2) + pastel (0.7.3) + equatable (~> 0.6) + tty-color (~> 0.5) pg (1.1.4) - pghero (2.2.0) - activerecord - pkg-config (1.3.7) + pghero (2.4.1) + activerecord (>= 5) + pkg-config (1.4.0) premailer (1.11.1) addressable css_parser (>= 1.6.0) htmlentities (>= 4.0.0) - premailer-rails (1.10.2) - actionmailer (>= 3, < 6) + premailer-rails (1.10.3) + actionmailer (>= 3) premailer (~> 1.7, >= 1.7.9) private_address_check (0.5.0) pry (0.12.2) @@ -422,16 +454,18 @@ GEM pry (~> 0.10) pry-rails (0.3.9) pry (>= 0.10.4) - public_suffix (3.1.0) - puma (3.12.1) - pundit (2.0.1) + public_suffix (4.0.1) + puma (4.3.1) + nio4r (~> 2.0) + pundit (2.1.0) activesupport (>= 3.0.0) raabro (1.1.6) rack (2.0.7) - rack-attack (6.0.0) + rack-attack (6.2.1) rack (>= 1.0, < 3) - rack-cors (1.0.3) - rack-protection (2.0.5) + rack-cors (1.1.0) + rack (>= 2.0.0) + rack-protection (2.0.7) rack rack-proxy (0.6.5) rack @@ -457,8 +491,8 @@ GEM rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) - rails-html-sanitizer (1.0.4) - loofah (~> 2.2, >= 2.2.2) + rails-html-sanitizer (1.3.0) + loofah (~> 2.3) rails-i18n (5.1.3) i18n (>= 0.7, < 2) railties (>= 5.0, < 6) @@ -471,14 +505,14 @@ GEM rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) rainbow (3.0.0) - rake (12.3.2) - rdf (3.0.9) + rake (13.0.1) + rdf (3.0.12) hamster (~> 3.0) link_header (~> 0.0, >= 0.0.8) rdf-normalize (0.3.3) rdf (>= 2.2, < 4.0) redcarpet (3.4.0) - redis (4.1.2) + redis (4.1.3) redis-actionpack (5.0.2) actionpack (>= 4.0, < 6) redis-rack (>= 1, < 3) @@ -497,53 +531,54 @@ GEM redis-store (>= 1.2, < 2) redis-store (1.5.0) redis (>= 2.2, < 5) - regexp_parser (1.5.1) + regexp_parser (1.6.0) request_store (1.4.1) rack (>= 1.4) - responders (2.4.1) - actionpack (>= 4.2.0, < 6.0) - railties (>= 4.2.0, < 6.0) + responders (3.0.0) + actionpack (>= 5.0) + railties (>= 5.0) rotp (2.1.2) rpam2 (4.0.2) rqrcode (0.10.1) chunky_png (~> 1.0) - rspec-core (3.8.0) - rspec-support (~> 3.8.0) - rspec-expectations (3.8.2) + rspec-core (3.9.0) + rspec-support (~> 3.9.0) + rspec-expectations (3.9.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.8.0) - rspec-mocks (3.8.0) + rspec-support (~> 3.9.0) + rspec-mocks (3.9.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.8.0) - rspec-rails (3.8.2) + rspec-support (~> 3.9.0) + rspec-rails (3.9.0) actionpack (>= 3.0) activesupport (>= 3.0) railties (>= 3.0) - rspec-core (~> 3.8.0) - rspec-expectations (~> 3.8.0) - rspec-mocks (~> 3.8.0) - rspec-support (~> 3.8.0) + rspec-core (~> 3.9.0) + rspec-expectations (~> 3.9.0) + rspec-mocks (~> 3.9.0) + rspec-support (~> 3.9.0) rspec-sidekiq (3.0.3) rspec-core (~> 3.0, >= 3.0.0) sidekiq (>= 2.4.0) - rspec-support (3.8.0) - rubocop (0.71.0) + rspec-support (3.9.0) + rubocop (0.76.0) jaro_winkler (~> 1.5.1) parallel (~> 1.10) parser (>= 2.6) rainbow (>= 2.2.2, < 4.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 1.7) - rubocop-rails (2.0.0) - rack (>= 2.0) - rubocop (>= 0.70.0) + rubocop-rails (2.4.0) + rack (>= 1.1) + rubocop (>= 0.72.0) ruby-progressbar (1.10.1) ruby-saml (1.9.0) nokogiri (>= 1.5.10) + ruby-statistics (2.1.1) rufus-scheduler (3.5.2) fugit (~> 1.1, >= 1.1.5) - safe_yaml (1.0.4) - sanitize (5.0.0) + safe_yaml (1.0.5) + sanitize (5.1.0) crass (~> 1.0.2) nokogiri (>= 1.8.0) nokogumbo (~> 2.0) @@ -559,16 +594,16 @@ GEM rufus-scheduler (~> 3.2) sidekiq (>= 3) tilt (>= 1.4.0) - sidekiq-unique-jobs (6.0.13) + sidekiq-unique-jobs (6.0.15) concurrent-ruby (~> 1.0, >= 1.0.5) sidekiq (>= 4.0, < 7.0) thor (~> 0) - simple-navigation (4.0.5) + simple-navigation (4.1.0) activesupport (>= 2.3.2) - simple_form (4.1.0) + simple_form (5.0.1) actionpack (>= 5.0) activemodel (>= 5.0) - simplecov (0.16.1) + simplecov (0.17.1) docile (~> 1.1) json (>= 1.8, < 3) simplecov-html (~> 0.10.0) @@ -580,15 +615,15 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - sshkit (1.17.0) + sshkit (1.20.0) net-scp (>= 1.1.2) net-ssh (>= 2.8.0) - stackprof (0.2.12) + stackprof (0.2.13) statsd-ruby (1.4.0) - stoplight (2.1.3) + stoplight (2.2.0) streamio-ffmpeg (3.0.2) multi_json (~> 1.8) - strong_migrations (0.4.0) + strong_migrations (0.4.2) activerecord (>= 5) temple (0.8.1) terminal-table (1.8.0) @@ -598,15 +633,15 @@ GEM thor (0.20.3) thread_safe (0.3.6) tilt (2.0.9) - tty-color (0.4.3) - tty-command (0.8.2) + tty-color (0.5.0) + tty-command (0.9.0) pastel (~> 0.7.0) tty-cursor (0.7.0) - tty-prompt (0.19.0) + tty-prompt (0.20.0) necromancer (~> 0.5.0) pastel (~> 0.7.0) - tty-reader (~> 0.6.0) - tty-reader (0.6.0) + tty-reader (~> 0.7.0) + tty-reader (0.7.0) tty-cursor (~> 0.7) tty-screen (~> 0.7) wisper (~> 2.0.0) @@ -615,7 +650,7 @@ GEM unf (~> 0.1.0) tzinfo (1.2.5) thread_safe (~> 0.1) - tzinfo-data (1.2019.1) + tzinfo-data (1.2019.3) tzinfo (>= 1.0.0) unf (0.1.4) unf_ext @@ -624,11 +659,11 @@ GEM uniform_notifier (1.12.1) warden (1.2.8) rack (>= 2.0.6) - webmock (3.5.1) + webmock (3.7.6) addressable (>= 2.3.6) crack (>= 0.3.2) - hashdiff - webpacker (4.0.7) + hashdiff (>= 0.4.0, < 2.0.0) + webpacker (4.2.0) activesupport (>= 4.2) rack-proxy (>= 0.6.1) railties (>= 4.2) @@ -638,7 +673,7 @@ GEM websocket-driver (0.7.0) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.3) - wisper (2.0.0) + wisper (2.0.1) xpath (3.2.0) nokogiri (~> 1.8) @@ -647,15 +682,15 @@ PLATFORMS DEPENDENCIES active_model_serializers (~> 0.10) - active_record_query_trace (~> 1.6) - addressable (~> 2.6) - annotate (~> 2.7) - aws-sdk-s3 (~> 1.41) + active_record_query_trace (~> 1.7) + addressable (~> 2.7) + annotate (~> 3.0) + aws-sdk-s3 (~> 1.57) better_errors (~> 2.5) binding_of_caller (~> 0.7) blurhash (~> 0.1) bootsnap (~> 1.4) - brakeman (~> 4.5) + brakeman (~> 4.7) browser bullet (~> 6.0) bundler-audit (~> 0.6) @@ -663,27 +698,30 @@ DEPENDENCIES capistrano-rails (~> 1.4) capistrano-rbenv (~> 2.1) capistrano-yarn (~> 2.0) - capybara (~> 3.22) - charlock_holmes (~> 0.7.6) - chewy (~> 5.0) + capybara (~> 3.29) + charlock_holmes (~> 0.7.7) + chewy (~> 5.1) cld3 (~> 3.2.4) climate_control (~> 0.2) concurrent-ruby + connection_pool derailed_benchmarks - devise (~> 4.6) - devise-two-factor (~> 3.0) + devise (~> 4.7) + devise-two-factor (~> 3.1) devise_pam_authenticatable2 (~> 9.2) - doorkeeper (~> 5.1) + discard (~> 1.1) + doorkeeper (~> 5.2) dotenv-rails (~> 2.7) - fabrication (~> 2.20) - faker (~> 1.9) + fabrication (~> 2.21) + faker (~> 2.8) fast_blank (~> 1.0) fastimage fog-core (<= 2.1.0) fog-openstack (~> 0.3) - fuubar (~> 2.4) + fuubar (~> 2.5) goldfinger (~> 2.1) hamlit-rails (~> 0.2) + health_check! hiredis (~> 0.6) html2text htmlentities (~> 4.3) @@ -694,7 +732,7 @@ DEPENDENCIES i18n-tasks (~> 0.9) idn-ruby iso-639 - json-ld (~> 3.0) + json-ld! json-ld-preloaded (~> 3.0) kaminari (~> 1.1) letter_opener (~> 1.7) @@ -705,31 +743,34 @@ DEPENDENCIES mario-redis-lock (~> 1.2) memory_profiler microformats (~> 4.1) - mime-types (~> 3.2) - net-ldap (~> 0.10) + mime-types (~> 3.3) + net-ldap (~> 0.16) + nilsimsa! nokogiri (~> 1.10) nsa (~> 0.2) - oj (~> 3.7) + oj (~> 3.9) omniauth (~> 1.9) omniauth-cas (~> 1.1) omniauth-saml (~> 1.10) ostatus2 (~> 2.0) - ox (~> 2.10) + ox (~> 2.11) paperclip (~> 6.0) paperclip-av-transcoder (~> 0.6) + parallel (~> 1.19) parallel_tests (~> 2.29) + parslet pg (~> 1.1) - pghero (~> 2.2) - pkg-config (~> 1.3) + pghero (~> 2.4) + pkg-config (~> 1.4) posix-spawn! premailer-rails private_address_check (~> 0.5) pry-byebug (~> 3.7) pry-rails (~> 0.3) - puma (~> 3.12) - pundit (~> 2.0) - rack-attack (~> 6.0) - rack-cors (~> 1.0) + puma (~> 4.3) + pundit (~> 2.1) + rack-attack (~> 6.2) + rack-cors (~> 1.1) rails (~> 5.2.3) rails-controller-testing (~> 1.0) rails-i18n (~> 5.1) @@ -740,34 +781,35 @@ DEPENDENCIES redis-namespace (~> 1.5) redis-rails (~> 5.0) rqrcode (~> 0.10) - rspec-rails (~> 3.8) + rspec-rails (~> 3.9) rspec-sidekiq (~> 3.0) - rubocop (~> 0.71) - rubocop-rails (~> 2.0) - sanitize (~> 5.0) + rubocop (~> 0.76) + rubocop-rails (~> 2.4) + ruby-progressbar (~> 1.10) + sanitize (~> 5.1) sidekiq (~> 5.2) sidekiq-bulk (~> 0.2.0) sidekiq-scheduler (~> 3.0) sidekiq-unique-jobs (~> 6.0) - simple-navigation (~> 4.0) - simple_form (~> 4.1) - simplecov (~> 0.16) + simple-navigation (~> 4.1) + simple_form (~> 5.0) + simplecov (~> 0.17) sprockets-rails (~> 3.2) stackprof - stoplight (~> 2.1.3) + stoplight (~> 2.2.0) streamio-ffmpeg (~> 3.0) strong_migrations (~> 0.4) thor (~> 0.20) - tty-command (~> 0.8) - tty-prompt (~> 0.19) + tty-command (~> 0.9) + tty-prompt (~> 0.20) twitter-text (~> 1.14) tzinfo-data (~> 1.2019) - webmock (~> 3.5) - webpacker (~> 4.0) + webmock (~> 3.7) + webpacker (~> 4.2) webpush RUBY VERSION - ruby 2.6.1p33 + ruby 2.6.5p114 BUNDLED WITH 1.17.3 diff --git a/Procfile b/Procfile index b18e4b6be..d48b0373b 100644 --- a/Procfile +++ b/Procfile @@ -1,2 +1,14 @@ -web: bundle exec puma -C config/puma.rb +web: if [ "$RUN_STREAMING" != "true" ]; then BIND=0.0.0.0 bundle exec puma -C config/puma.rb; else BIND=0.0.0.0 node ./streaming; fi worker: bundle exec sidekiq + +# For the streaming API, you need a separate app that shares Postgres and Redis: +# +# heroku create +# heroku buildpacks:add heroku/nodejs +# heroku config:set RUN_STREAMING=true +# heroku addons:attach <main-app>::DATABASE +# heroku addons:attach <main-app>::REDIS +# +# and let the main app use the separate app: +# +# heroku config:set STREAMING_API_BASE_URL=wss://<streaming-app>.herokuapp.com -a <main-app> diff --git a/app.json b/app.json index 09adaac2c..211f17d81 100644 --- a/app.json +++ b/app.json @@ -13,15 +13,6 @@ "description": "The domain that your Mastodon instance will run on (this can be appname.herokuapp.com or a custom domain)", "required": true }, - "LOCAL_HTTPS": { - "description": "Will your domain support HTTPS? (Automatic for herokuapp, requires manual configuration for custom domains)", - "value": "false", - "required": true - }, - "PAPERCLIP_SECRET": { - "description": "The secret key for storing media files", - "generator": "secret" - }, "SECRET_KEY_BASE": { "description": "The secret key base", "generator": "secret" diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb new file mode 100644 index 000000000..b814e009e --- /dev/null +++ b/app/chewy/accounts_index.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +class AccountsIndex < Chewy::Index + settings index: { refresh_interval: '5m' }, analysis: { + analyzer: { + content: { + tokenizer: 'whitespace', + filter: %w(lowercase asciifolding cjk_width), + }, + + edge_ngram: { + tokenizer: 'edge_ngram', + filter: %w(lowercase asciifolding cjk_width), + }, + }, + + tokenizer: { + edge_ngram: { + type: 'edge_ngram', + min_gram: 1, + max_gram: 15, + }, + }, + } + + define_type ::Account.searchable.includes(:account_stat), delete_if: ->(account) { account.destroyed? || !account.searchable? } do + root date_detection: false do + field :id, type: 'long' + + field :display_name, type: 'text', analyzer: 'content' do + field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content' + end + + field :acct, type: 'text', analyzer: 'content', value: ->(account) { [account.username, account.domain].compact.join('@') } do + field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content' + end + + field :following_count, type: 'long', value: ->(account) { account.following.local.count } + field :followers_count, type: 'long', value: ->(account) { account.followers.local.count } + field :last_status_at, type: 'date', value: ->(account) { account.last_status_at || account.created_at } + end + end +end diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb index 8ce413f8a..f5735421c 100644 --- a/app/chewy/statuses_index.rb +++ b/app/chewy/statuses_index.rb @@ -31,19 +31,19 @@ class StatusesIndex < Chewy::Index }, } - define_type ::Status.unscoped.without_reblogs.includes(:media_attachments) do + define_type ::Status.unscoped.kept.without_reblogs.includes(:media_attachments), delete_if: ->(status) { status.searchable_by.empty? } do crutch :mentions do |collection| - data = ::Mention.where(status_id: collection.map(&:id)).pluck(:status_id, :account_id) + data = ::Mention.where(status_id: collection.map(&:id)).where(account: Account.local).pluck(:status_id, :account_id) data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) } end crutch :favourites do |collection| - data = ::Favourite.where(status_id: collection.map(&:id)).pluck(:status_id, :account_id) + data = ::Favourite.where(status_id: collection.map(&:id)).where(account: Account.local).pluck(:status_id, :account_id) data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) } end crutch :reblogs do |collection| - data = ::Status.where(reblog_of_id: collection.map(&:id)).pluck(:reblog_of_id, :account_id) + data = ::Status.where(reblog_of_id: collection.map(&:id)).where(account: Account.local).pluck(:reblog_of_id, :account_id) data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) } end @@ -51,7 +51,7 @@ class StatusesIndex < Chewy::Index field :id, type: 'long' field :account_id, type: 'long' - field :text, type: 'text', value: ->(status) { [status.spoiler_text, Formatter.instance.plaintext(status)].concat(status.media_attachments.map(&:description)).join("\n\n") } do + field :text, type: 'text', value: ->(status) { [status.spoiler_text, Formatter.instance.plaintext(status)].concat(status.media_attachments.map(&:description)).concat(status.preloadable_poll ? status.preloadable_poll.options : []).join("\n\n") } do field :stemmed, type: 'text', analyzer: 'content' end diff --git a/app/chewy/tags_index.rb b/app/chewy/tags_index.rb new file mode 100644 index 000000000..300fc128f --- /dev/null +++ b/app/chewy/tags_index.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class TagsIndex < Chewy::Index + settings index: { refresh_interval: '15m' }, analysis: { + analyzer: { + content: { + tokenizer: 'keyword', + filter: %w(lowercase asciifolding cjk_width), + }, + + edge_ngram: { + tokenizer: 'edge_ngram', + filter: %w(lowercase asciifolding cjk_width), + }, + }, + + tokenizer: { + edge_ngram: { + type: 'edge_ngram', + min_gram: 2, + max_gram: 15, + }, + }, + } + + define_type ::Tag.listable, delete_if: ->(tag) { tag.destroyed? || !tag.listable? } do + root date_detection: false do + field :name, type: 'text', analyzer: 'content' do + field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content' + end + + field :reviewed, type: 'boolean', value: ->(tag) { tag.reviewed? } + field :usage, type: 'long', value: ->(tag) { tag.history.reduce(0) { |total, day| total + day[:accounts].to_i } } + field :last_status_at, type: 'date', value: ->(tag) { tag.last_status_at || tag.created_at } + end + end +end diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb index 5850bd56d..5d5db937c 100644 --- a/app/controllers/about_controller.rb +++ b/app/controllers/about_controller.rb @@ -4,18 +4,46 @@ class AboutController < ApplicationController before_action :set_pack layout 'public' - before_action :set_instance_presenter, only: [:show, :more, :terms] + before_action :require_open_federation!, only: [:show, :more] + before_action :set_body_classes, only: :show + before_action :set_instance_presenter + before_action :set_expires_in, only: [:show, :more, :terms] - def show - @hide_navbar = true - end + skip_before_action :require_functional!, only: [:more, :terms] + + def show; end - def more; end + def more + flash.now[:notice] = I18n.t('about.instance_actor_flash') if params[:instance_actor] + + toc_generator = TOCGenerator.new(@instance_presenter.site_extended_description) + + @contents = toc_generator.html + @table_of_contents = toc_generator.toc + @blocks = DomainBlock.with_user_facing_limitations.by_severity if display_blocks? + end def terms; end + helper_method :display_blocks? + helper_method :display_blocks_rationale? + helper_method :public_fetch_mode? + helper_method :new_user + private + def require_open_federation! + not_found if whitelist_mode? + end + + def display_blocks? + Setting.show_domain_blocks == 'all' || (Setting.show_domain_blocks == 'users' && user_signed_in?) + end + + def display_blocks_rationale? + Setting.show_domain_blocks_rationale == 'all' || (Setting.show_domain_blocks_rationale == 'users' && user_signed_in?) + end + def new_user User.new.tap do |user| user.build_account @@ -23,13 +51,19 @@ class AboutController < ApplicationController end end - helper_method :new_user - def set_pack - use_pack 'common' + use_pack 'public' end def set_instance_presenter @instance_presenter = InstancePresenter.new end + + def set_body_classes + @hide_navbar = true + end + + def set_expires_in + expires_in 0, public: true + end end diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 051b6ecbd..c4ee22847 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -4,18 +4,23 @@ class AccountsController < ApplicationController PAGE_SIZE = 20 include AccountControllerConcern + include SignatureAuthentication before_action :set_cache_headers + before_action :set_body_classes + + skip_around_action :set_locale, if: -> { [:json, :rss].include?(request.format) } + skip_before_action :require_functional! def show respond_to do |format| format.html do use_pack 'public' - mark_cacheable! unless user_signed_in? + expires_in 0, public: true unless user_signed_in? - @body_classes = 'with-modals' @pinned_statuses = [] @endorsed_accounts = @account.endorsed_accounts.to_a.sample(4) + @featured_hashtags = @account.featured_tags.order(statuses_count: :desc) if current_account && @account.blocking?(current_account) @statuses = [] @@ -25,6 +30,7 @@ class AccountsController < ApplicationController @pinned_statuses = cache_collection(@account.pinned_statuses, Status) if show_pinned_statuses? @statuses = filtered_status_page(params) @statuses = cache_collection(@statuses, Status) + @rss_url = rss_url unless @statuses.empty? @older_url = older_url if @statuses.last.id > filtered_statuses.last.id @@ -32,30 +38,27 @@ class AccountsController < ApplicationController end end - format.atom do - mark_cacheable! - - @entries = @account.stream_entries.where(hidden: false).with_includes.paginate_by_max_id(PAGE_SIZE, params[:max_id], params[:since_id]) - render xml: OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.feed(@account, @entries.reject { |entry| entry.status.nil? || entry.status.local_only? })) - end - format.rss do - mark_cacheable! + expires_in 1.minute, public: true - @statuses = cache_collection(default_statuses.without_reblogs.without_replies.limit(PAGE_SIZE), Status) - render xml: RSS::AccountSerializer.render(@account, @statuses) + @statuses = filtered_statuses.without_reblogs.without_replies.limit(PAGE_SIZE) + @statuses = cache_collection(@statuses, Status) + render xml: RSS::AccountSerializer.render(@account, @statuses, params[:tag]) end format.json do - render_cached_json(['activitypub', 'actor', @account], content_type: 'application/activity+json') do - ActiveModelSerializers::SerializableResource.new(@account, serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter) - end + expires_in 3.minutes, public: !(authorized_fetch_mode? && signed_request_account.present?) + render_with_cache json: @account, content_type: 'application/activity+json', serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter, fields: restrict_fields_to end end end private + def set_body_classes + @body_classes = 'with-modals' + end + def show_pinned_statuses? [replies_requested?, media_requested?, tag_requested?, params[:max_id].present?, params[:min_id].present?].none? end @@ -98,6 +101,14 @@ class AccountsController < ApplicationController params[:username] end + def rss_url + if tag_requested? + short_account_tag_url(@account, params[:tag], format: 'rss') + else + short_account_url(@account, format: 'rss') + end + end + def older_url pagination_url(max_id: @statuses.last.id) end @@ -119,15 +130,15 @@ class AccountsController < ApplicationController end def media_requested? - request.path.ends_with?('/media') + request.path.ends_with?('/media') && !tag_requested? end def replies_requested? - request.path.ends_with?('/with_replies') + request.path.ends_with?('/with_replies') && !tag_requested? end def tag_requested? - request.path.ends_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize) + request.path.split('.').first.ends_with?(Addressable::URI.parse("/tagged/#{params[:tag]}").normalize) end def filtered_status_page(params) @@ -137,4 +148,12 @@ class AccountsController < ApplicationController filtered_statuses.paginate_by_max_id(PAGE_SIZE, params[:max_id], params[:since_id]).to_a end end + + def restrict_fields_to + if signed_request_account.present? || public_fetch_mode? + # Return all fields + else + %i(id type preferred_username inbox public_key endpoints) + end + end end diff --git a/app/controllers/activitypub/base_controller.rb b/app/controllers/activitypub/base_controller.rb new file mode 100644 index 000000000..0c2591e97 --- /dev/null +++ b/app/controllers/activitypub/base_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class ActivityPub::BaseController < Api::BaseController + skip_before_action :require_authenticated_user! + + private + + def set_cache_headers + response.headers['Vary'] = 'Signature' if authorized_fetch_mode? + end +end diff --git a/app/controllers/activitypub/collections_controller.rb b/app/controllers/activitypub/collections_controller.rb index 012c3c538..910fefb1c 100644 --- a/app/controllers/activitypub/collections_controller.rb +++ b/app/controllers/activitypub/collections_controller.rb @@ -1,30 +1,21 @@ # frozen_string_literal: true -class ActivityPub::CollectionsController < Api::BaseController +class ActivityPub::CollectionsController < ActivityPub::BaseController include SignatureVerification + include AccountOwnedConcern - before_action :set_account + before_action :require_signature!, if: :authorized_fetch_mode? before_action :set_size before_action :set_statuses before_action :set_cache_headers def show - render_cached_json(['activitypub', 'collection', @account, params[:id]], content_type: 'application/activity+json') do - ActiveModelSerializers::SerializableResource.new( - collection_presenter, - serializer: ActivityPub::CollectionSerializer, - adapter: ActivityPub::Adapter, - skip_activities: true - ) - end + expires_in 3.minutes, public: public_fetch_mode? + render_with_cache json: collection_presenter, content_type: 'application/activity+json', serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, skip_activities: true end private - def set_account - @account = Account.find_local!(params[:account_username]) - end - def set_statuses @statuses = scope_for_collection @statuses = cache_collection(@statuses, Status) @@ -42,9 +33,9 @@ class ActivityPub::CollectionsController < Api::BaseController def scope_for_collection case params[:id] when 'featured' - @account.statuses.permitted_for(@account, signed_request_account).tap do |scope| - scope.merge!(@account.pinned_statuses) - end + return Status.none if @account.blocking?(signed_request_account) + + @account.pinned_statuses else raise ActiveRecord::RecordNotFound end diff --git a/app/controllers/activitypub/inboxes_controller.rb b/app/controllers/activitypub/inboxes_controller.rb index a0b7532c2..291eec19a 100644 --- a/app/controllers/activitypub/inboxes_controller.rb +++ b/app/controllers/activitypub/inboxes_controller.rb @@ -1,40 +1,45 @@ # frozen_string_literal: true -class ActivityPub::InboxesController < Api::BaseController +class ActivityPub::InboxesController < ActivityPub::BaseController include SignatureVerification include JsonLdHelper + include AccountOwnedConcern - before_action :set_account + before_action :skip_unknown_actor_delete + before_action :require_signature! + skip_before_action :authenticate_user! def create - if unknown_deleted_account? - head 202 - elsif signed_request_account - upgrade_account - process_payload - head 202 - else - render plain: signature_verification_failure_reason, status: 401 - end + upgrade_account + process_payload + head 202 end private + def skip_unknown_actor_delete + head 202 if unknown_deleted_account? + end + def unknown_deleted_account? json = Oj.load(body, mode: :strict) - json['type'] == 'Delete' && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.where(uri: json['actor']).exists? + json.is_a?(Hash) && json['type'] == 'Delete' && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.where(uri: json['actor']).exists? rescue Oj::ParseError false end - def set_account - @account = Account.find_local!(params[:account_username]) if params[:account_username] + def account_required? + params[:account_username].present? end def body return @body if defined?(@body) - @body = request.body.read.force_encoding('UTF-8') + + @body = request.body.read + @body.force_encoding('UTF-8') if @body.present? + request.body.rewind if request.body.respond_to?(:rewind) + @body end @@ -44,7 +49,6 @@ class ActivityPub::InboxesController < Api::BaseController ResolveAccountWorker.perform_async(signed_request_account.acct) end - Pubsubhubbub::UnsubscribeWorker.perform_async(signed_request_account.id) if signed_request_account.subscribed? DeliveryFailureTracker.track_inverse_success!(signed_request_account) end diff --git a/app/controllers/activitypub/outboxes_controller.rb b/app/controllers/activitypub/outboxes_controller.rb index 5147afbf7..891756b7e 100644 --- a/app/controllers/activitypub/outboxes_controller.rb +++ b/app/controllers/activitypub/outboxes_controller.rb @@ -1,26 +1,22 @@ # frozen_string_literal: true -class ActivityPub::OutboxesController < Api::BaseController +class ActivityPub::OutboxesController < ActivityPub::BaseController LIMIT = 20 include SignatureVerification + include AccountOwnedConcern - before_action :set_account + before_action :require_signature!, if: :authorized_fetch_mode? before_action :set_statuses before_action :set_cache_headers def show - expires_in 1.minute, public: true unless page_requested? - + expires_in(page_requested? ? 0 : 3.minutes, public: public_fetch_mode?) render json: outbox_presenter, serializer: ActivityPub::OutboxSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json' end private - def set_account - @account = Account.find_local!(params[:account_username]) - end - def outbox_presenter if page_requested? ActivityPub::CollectionPresenter.new( diff --git a/app/controllers/activitypub/replies_controller.rb b/app/controllers/activitypub/replies_controller.rb new file mode 100644 index 000000000..c62061555 --- /dev/null +++ b/app/controllers/activitypub/replies_controller.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +class ActivityPub::RepliesController < ActivityPub::BaseController + include SignatureAuthentication + include Authorization + include AccountOwnedConcern + + DESCENDANTS_LIMIT = 60 + + before_action :require_signature!, if: :authorized_fetch_mode? + before_action :set_status + before_action :set_cache_headers + before_action :set_replies + + def index + expires_in 0, public: public_fetch_mode? + render json: replies_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json', skip_activities: true + end + + private + + def set_status + @status = @account.statuses.find(params[:status_id]) + authorize @status, :show? + rescue Mastodon::NotPermittedError + raise ActiveRecord::RecordNotFound + end + + def set_replies + @replies = page_params[:only_other_accounts] ? Status.where.not(account_id: @account.id) : @account.statuses + @replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted]) + @replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id]) + end + + def replies_collection_presenter + page = ActivityPub::CollectionPresenter.new( + id: account_status_replies_url(@account, @status, page_params), + type: :unordered, + part_of: account_status_replies_url(@account, @status), + next: next_page, + items: @replies.map { |status| status.local ? status : status.uri } + ) + + return page if page_requested? + + ActivityPub::CollectionPresenter.new( + id: account_status_replies_url(@account, @status), + type: :unordered, + first: page + ) + end + + def page_requested? + params[:page] == 'true' + end + + def next_page + only_other_accounts = !(@replies&.last&.account_id == @account.id && @replies.size == DESCENDANTS_LIMIT) + account_status_replies_url( + @account, + @status, + page: true, + min_id: only_other_accounts && !page_params[:only_other_accounts] ? nil : @replies&.last&.id, + only_other_accounts: only_other_accounts + ) + end + + def page_params + params_slice(:only_other_accounts, :min_id).merge(page: true) + end +end diff --git a/app/controllers/admin/account_actions_controller.rb b/app/controllers/admin/account_actions_controller.rb index a2cea461e..ea56fa0ac 100644 --- a/app/controllers/admin/account_actions_controller.rb +++ b/app/controllers/admin/account_actions_controller.rb @@ -5,7 +5,7 @@ module Admin before_action :set_account def new - @account_action = Admin::AccountAction.new(type: params[:type], report_id: params[:report_id], send_email_notification: true) + @account_action = Admin::AccountAction.new(type: params[:type], report_id: params[:report_id], send_email_notification: true, include_statuses: true) @warning_presets = AccountWarningPreset.all end @@ -30,7 +30,7 @@ module Admin end def resource_params - params.require(:admin_account_action).permit(:type, :report_id, :warning_preset_id, :text, :send_email_notification) + params.require(:admin_account_action).permit(:type, :report_id, :warning_preset_id, :text, :send_email_notification, :include_statuses) end end end diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb index b0d45ce47..68b6352f8 100644 --- a/app/controllers/admin/accounts_controller.rb +++ b/app/controllers/admin/accounts_controller.rb @@ -2,8 +2,8 @@ module Admin class AccountsController < BaseController - before_action :set_account, only: [:show, :subscribe, :unsubscribe, :redownload, :remove_avatar, :remove_header, :enable, :unsilence, :unsuspend, :memorialize, :approve, :reject] - before_action :require_remote_account!, only: [:subscribe, :unsubscribe, :redownload] + before_action :set_account, only: [:show, :redownload, :remove_avatar, :remove_header, :enable, :unsilence, :unsuspend, :memorialize, :approve, :reject] + before_action :require_remote_account!, only: [:redownload] before_action :require_local_account!, only: [:enable, :memorialize, :approve, :reject] def index @@ -19,18 +19,6 @@ module Admin @warnings = @account.targeted_account_warnings.latest.custom end - def subscribe - authorize @account, :subscribe? - Pubsubhubbub::SubscribeWorker.perform_async(@account.id) - redirect_to admin_account_path(@account.id) - end - - def unsubscribe - authorize @account, :unsubscribe? - Pubsubhubbub::UnsubscribeWorker.perform_async(@account.id) - redirect_to admin_account_path(@account.id) - end - def memorialize authorize @account, :memorialize? @account.memorialize! @@ -53,7 +41,7 @@ module Admin def reject authorize @account.user, :reject? - SuspendAccountService.new.call(@account, including_user: true, destroy: true, skip_distribution: true) + SuspendAccountService.new.call(@account, reserve_email: false, reserve_username: false) redirect_to admin_pending_accounts_path end @@ -127,6 +115,7 @@ module Admin :by_domain, :active, :pending, + :disabled, :silenced, :suspended, :username, diff --git a/app/controllers/admin/custom_emojis_controller.rb b/app/controllers/admin/custom_emojis_controller.rb index f77699166..2af90f051 100644 --- a/app/controllers/admin/custom_emojis_controller.rb +++ b/app/controllers/admin/custom_emojis_controller.rb @@ -2,19 +2,20 @@ module Admin class CustomEmojisController < BaseController - before_action :set_custom_emoji, except: [:index, :new, :create] - before_action :set_filter_params - include ObfuscateFilename + obfuscate_filename [:custom_emoji, :image] def index authorize :custom_emoji, :index? + @custom_emojis = filtered_custom_emojis.eager_load(:local_counterpart).page(params[:page]) + @form = Form::CustomEmojiBatch.new end def new authorize :custom_emoji, :create? + @custom_emoji = CustomEmoji.new end @@ -31,69 +32,17 @@ module Admin end end - def update - authorize @custom_emoji, :update? - - if @custom_emoji.update(resource_params) - log_action :update, @custom_emoji - flash[:notice] = I18n.t('admin.custom_emojis.updated_msg') - else - flash[:alert] = I18n.t('admin.custom_emojis.update_failed_msg') - end - redirect_to admin_custom_emojis_path(page: params[:page], **@filter_params) - end - - def destroy - authorize @custom_emoji, :destroy? - @custom_emoji.destroy! - log_action :destroy, @custom_emoji - flash[:notice] = I18n.t('admin.custom_emojis.destroyed_msg') - redirect_to admin_custom_emojis_path(page: params[:page], **@filter_params) - end - - def copy - authorize @custom_emoji, :copy? - - emoji = CustomEmoji.find_or_initialize_by(domain: nil, - shortcode: @custom_emoji.shortcode) - emoji.image = @custom_emoji.image - - if emoji.save - log_action :create, emoji - flash[:notice] = I18n.t('admin.custom_emojis.copied_msg') - else - flash[:alert] = I18n.t('admin.custom_emojis.copy_failed_msg') - end - - redirect_to admin_custom_emojis_path(page: params[:page], **@filter_params) - end - - def enable - authorize @custom_emoji, :enable? - @custom_emoji.update!(disabled: false) - log_action :enable, @custom_emoji - flash[:notice] = I18n.t('admin.custom_emojis.enabled_msg') - redirect_to admin_custom_emojis_path(page: params[:page], **@filter_params) - end - - def disable - authorize @custom_emoji, :disable? - @custom_emoji.update!(disabled: true) - log_action :disable, @custom_emoji - flash[:notice] = I18n.t('admin.custom_emojis.disabled_msg') - redirect_to admin_custom_emojis_path(page: params[:page], **@filter_params) + def batch + @form = Form::CustomEmojiBatch.new(form_custom_emoji_batch_params.merge(current_account: current_account, action: action_from_button)) + @form.save + rescue ActionController::ParameterMissing + flash[:alert] = I18n.t('admin.accounts.no_account_selected') + ensure + redirect_to admin_custom_emojis_path(filter_params) end private - def set_custom_emoji - @custom_emoji = CustomEmoji.find(params[:id]) - end - - def set_filter_params - @filter_params = filter_params.to_hash.symbolize_keys - end - def resource_params params.require(:custom_emoji).permit(:shortcode, :image, :visible_in_picker) end @@ -103,12 +52,29 @@ module Admin end def filter_params - params.permit( - :local, - :remote, - :by_domain, - :shortcode - ) + params.slice(:local, :remote, :by_domain, :shortcode, :page).permit(:local, :remote, :by_domain, :shortcode, :page) + end + + def action_from_button + if params[:update] + 'update' + elsif params[:list] + 'list' + elsif params[:unlist] + 'unlist' + elsif params[:enable] + 'enable' + elsif params[:disable] + 'disable' + elsif params[:copy] + 'copy' + elsif params[:delete] + 'delete' + end + end + + def form_custom_emoji_batch_params + params.require(:form_custom_emoji_batch).permit(:action, :category_id, :category_name, custom_emoji_ids: []) end end end diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index aedfeb70e..4116f99f4 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -5,6 +5,7 @@ module Admin class DashboardController < BaseController def index @users_count = User.count + @pending_users_count = User.pending.count @registrations_week = Redis.current.get("activity:accounts:local:#{current_week}") || 0 @logins_week = Redis.current.pfcount("activity:logins:#{current_week}") @interactions_week = Redis.current.get("activity:interactions:#{current_week}") || 0 @@ -19,7 +20,7 @@ module Admin @redis_version = redis_info['redis_version'] @reports_count = Report.unresolved.count @queue_backlog = Sidekiq::Stats.new.enqueued - @recent_users = User.confirmed.recent.includes(:account).limit(4) + @recent_users = User.confirmed.recent.includes(:account).limit(8) @database_size = ActiveRecord::Base.connection.execute('SELECT pg_database_size(current_database())').first['pg_database_size'] @redis_size = redis_info['used_memory'] @ldap_enabled = ENV['LDAP_ENABLED'] == 'true' @@ -27,10 +28,15 @@ module Admin @saml_enabled = ENV['SAML_ENABLED'] == 'true' @pam_enabled = ENV['PAM_ENABLED'] == 'true' @hidden_service = ENV['ALLOW_ACCESS_TO_HIDDEN_SERVICE'] == 'true' - @trending_hashtags = TrendingTags.get(7) + @trending_hashtags = TrendingTags.get(10, filtered: false) + @pending_tags_count = Tag.pending_review.count + @authorized_fetch = authorized_fetch_mode? + @whitelist_enabled = whitelist_mode? @profile_directory = Setting.profile_directory @timeline_preview = Setting.timeline_preview @keybase_integration = Setting.enable_keybase + @spam_check_enabled = Setting.spam_check_enabled + @trends_enabled = Setting.trends end private @@ -40,7 +46,13 @@ module Admin end def redis_info - @redis_info ||= Redis.current.info + @redis_info ||= begin + if Redis.current.is_a?(Redis::Namespace) + Redis.current.redis.info + else + Redis.current.info + end + end end end end diff --git a/app/controllers/admin/domain_allows_controller.rb b/app/controllers/admin/domain_allows_controller.rb new file mode 100644 index 000000000..31be1978b --- /dev/null +++ b/app/controllers/admin/domain_allows_controller.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +class Admin::DomainAllowsController < Admin::BaseController + before_action :set_domain_allow, only: [:destroy] + + def new + authorize :domain_allow, :create? + + @domain_allow = DomainAllow.new(domain: params[:_domain]) + end + + def create + authorize :domain_allow, :create? + + @domain_allow = DomainAllow.new(resource_params) + + if @domain_allow.save + log_action :create, @domain_allow + redirect_to admin_instances_path, notice: I18n.t('admin.domain_allows.created_msg') + else + render :new + end + end + + def destroy + authorize @domain_allow, :destroy? + UnallowDomainService.new.call(@domain_allow) + redirect_to admin_instances_path, notice: I18n.t('admin.domain_allows.destroyed_msg') + end + + private + + def set_domain_allow + @domain_allow = DomainAllow.find(params[:id]) + end + + def resource_params + params.require(:domain_allow).permit(:domain) + end +end diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb index 71597763b..74a36b79c 100644 --- a/app/controllers/admin/domain_blocks_controller.rb +++ b/app/controllers/admin/domain_blocks_controller.rb @@ -2,22 +2,26 @@ module Admin class DomainBlocksController < BaseController - before_action :set_domain_block, only: [:show, :destroy] + before_action :set_domain_block, only: [:show, :destroy, :edit, :update] def new authorize :domain_block, :create? @domain_block = DomainBlock.new(domain: params[:_domain]) end + def edit + authorize :domain_block, :create? + end + def create authorize :domain_block, :create? @domain_block = DomainBlock.new(resource_params) - existing_domain_block = resource_params[:domain].present? ? DomainBlock.find_by(domain: resource_params[:domain]) : nil + existing_domain_block = resource_params[:domain].present? ? DomainBlock.rule_for(resource_params[:domain]) : nil if existing_domain_block.present? && !@domain_block.stricter_than?(existing_domain_block) @domain_block.save - flash[:alert] = I18n.t('admin.domain_blocks.existing_domain_block_html', name: existing_domain_block.domain, unblock_url: admin_domain_block_path(existing_domain_block)).html_safe # rubocop:disable Rails/OutputSafety + flash.now[:alert] = I18n.t('admin.domain_blocks.existing_domain_block_html', name: existing_domain_block.domain, unblock_url: admin_domain_block_path(existing_domain_block)).html_safe # rubocop:disable Rails/OutputSafety @domain_block.errors[:domain].clear render :new else @@ -35,6 +39,22 @@ module Admin end end + def update + authorize :domain_block, :create? + + @domain_block.update(update_params) + + severity_changed = @domain_block.severity_changed? + + if @domain_block.save + DomainBlockWorker.perform_async(@domain_block.id, severity_changed) + log_action :create, @domain_block + redirect_to admin_instances_path(limited: '1'), notice: I18n.t('admin.domain_blocks.created_msg') + else + render :edit + end + end + def show authorize @domain_block, :show? end @@ -52,8 +72,12 @@ module Admin @domain_block = DomainBlock.find(params[:id]) end + def update_params + params.require(:domain_block).permit(:severity, :reject_media, :reject_reports, :private_comment, :public_comment) + end + def resource_params - params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports) + params.require(:domain_block).permit(:domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment) end end end diff --git a/app/controllers/admin/instances_controller.rb b/app/controllers/admin/instances_controller.rb index 6dd659a30..b47b18f8e 100644 --- a/app/controllers/admin/instances_controller.rb +++ b/app/controllers/admin/instances_controller.rb @@ -2,6 +2,10 @@ module Admin class InstancesController < BaseController + before_action :set_domain_block, only: :show + before_action :set_domain_allow, only: :show + before_action :set_instance, only: :show + def index authorize :instance, :index? @@ -11,20 +15,40 @@ module Admin def show authorize :instance, :show? - @instance = Instance.new(Account.by_domain_accounts.find_by(domain: params[:id]) || DomainBlock.find_by!(domain: params[:id])) @following_count = Follow.where(account: Account.where(domain: params[:id])).count @followers_count = Follow.where(target_account: Account.where(domain: params[:id])).count @reports_count = Report.where(target_account: Account.where(domain: params[:id])).count @blocks_count = Block.where(target_account: Account.where(domain: params[:id])).count @available = DeliveryFailureTracker.available?(Account.select(:shared_inbox_url).where(domain: params[:id]).first&.shared_inbox_url) @media_storage = MediaAttachment.where(account: Account.where(domain: params[:id])).sum(:file_file_size) - @domain_block = DomainBlock.find_by(domain: params[:id]) + @private_comment = @domain_block&.private_comment + @public_comment = @domain_block&.public_comment end private + def set_domain_block + @domain_block = DomainBlock.rule_for(params[:id]) + end + + def set_domain_allow + @domain_allow = DomainAllow.rule_for(params[:id]) + end + + def set_instance + resource = Account.by_domain_accounts.find_by(domain: params[:id]) + resource ||= @domain_block + resource ||= @domain_allow + + if resource + @instance = Instance.new(resource) + else + not_found + end + end + def filtered_instances - InstanceFilter.new(filter_params).results + InstanceFilter.new(whitelist_mode? ? { allowed: true } : filter_params).results end def paginated_instances diff --git a/app/controllers/admin/relays_controller.rb b/app/controllers/admin/relays_controller.rb index 1b02d3c36..6fbb6e063 100644 --- a/app/controllers/admin/relays_controller.rb +++ b/app/controllers/admin/relays_controller.rb @@ -3,6 +3,7 @@ module Admin class RelaysController < BaseController before_action :set_relay, except: [:index, :new, :create] + before_action :require_signatures_enabled!, only: [:new, :create, :enable] def index authorize :relay, :update? @@ -11,7 +12,7 @@ module Admin def new authorize :relay, :update? - @relay = Relay.new(inbox_url: Relay::PRESET_RELAY) + @relay = Relay.new end def create @@ -54,5 +55,9 @@ module Admin def resource_params params.require(:relay).permit(:inbox_url) end + + def require_signatures_enabled! + redirect_to admin_relays_path, alert: I18n.t('admin.relays.signatures_not_enabled') if authorized_fetch_mode? + end end end diff --git a/app/controllers/admin/report_notes_controller.rb b/app/controllers/admin/report_notes_controller.rb index bcb3f2026..b816c5b5d 100644 --- a/app/controllers/admin/report_notes_controller.rb +++ b/app/controllers/admin/report_notes_controller.rb @@ -5,10 +5,10 @@ module Admin before_action :set_report_note, only: [:destroy] def create - authorize ReportNote, :create? + authorize :report_note, :create? @report_note = current_account.report_notes.new(resource_params) - @report = @report_note.report + @report = @report_note.report if @report_note.save if params[:create_and_resolve] @@ -26,9 +26,8 @@ module Admin redirect_to admin_report_path(@report), notice: I18n.t('admin.report_notes.created_msg') else - @report_notes = @report.notes.latest - @report_history = @report.history - @form = Form::StatusBatch.new + @report_notes = (@report.notes.latest + @report.history + @report.target_account.targeted_account_warnings.latest.custom).sort_by(&:created_at) + @form = Form::StatusBatch.new render template: 'admin/reports/show' end diff --git a/app/controllers/admin/reports_controller.rb b/app/controllers/admin/reports_controller.rb index f138376b2..09ce1761c 100644 --- a/app/controllers/admin/reports_controller.rb +++ b/app/controllers/admin/reports_controller.rb @@ -55,7 +55,8 @@ module Admin params.permit( :account_id, :resolved, - :target_account_id + :target_account_id, + :by_target_domain ) end diff --git a/app/controllers/admin/tags_controller.rb b/app/controllers/admin/tags_controller.rb index e9f4f2cfa..65341bbfb 100644 --- a/app/controllers/admin/tags_controller.rb +++ b/app/controllers/admin/tags_controller.rb @@ -2,43 +2,102 @@ module Admin class TagsController < BaseController - before_action :set_tags, only: :index - before_action :set_tag, except: :index - before_action :set_filter_params + before_action :set_tag, except: [:index, :batch, :approve_all, :reject_all] + before_action :set_usage_by_domain, except: [:index, :batch, :approve_all, :reject_all] + before_action :set_counters, except: [:index, :batch, :approve_all, :reject_all] def index authorize :tag, :index? + + @tags = filtered_tags.page(params[:page]) + @form = Form::TagBatch.new end - def hide - authorize @tag, :hide? - @tag.account_tag_stat.update!(hidden: true) - redirect_to admin_tags_path(@filter_params) + def batch + @form = Form::TagBatch.new(form_tag_batch_params.merge(current_account: current_account, action: action_from_button)) + @form.save + rescue ActionController::ParameterMissing + flash[:alert] = I18n.t('admin.accounts.no_account_selected') + ensure + redirect_to admin_tags_path(filter_params) end - def unhide - authorize @tag, :unhide? - @tag.account_tag_stat.update!(hidden: false) - redirect_to admin_tags_path(@filter_params) + def approve_all + Form::TagBatch.new(current_account: current_account, tag_ids: Tag.pending_review.pluck(:id), action: 'approve').save + redirect_to admin_tags_path(filter_params) end - private + def reject_all + Form::TagBatch.new(current_account: current_account, tag_ids: Tag.pending_review.pluck(:id), action: 'reject').save + redirect_to admin_tags_path(filter_params) + end + + def show + authorize @tag, :show? + end + + def update + authorize @tag, :update? - def set_tags - @tags = Tag.discoverable - @tags.merge!(Tag.hidden) if filter_params[:hidden] + if @tag.update(tag_params.merge(reviewed_at: Time.now.utc)) + redirect_to admin_tag_path(@tag.id), notice: I18n.t('admin.tags.updated_msg') + else + render :show + end end + private + def set_tag @tag = Tag.find(params[:id]) end - def set_filter_params - @filter_params = filter_params.to_hash.symbolize_keys + def set_usage_by_domain + @usage_by_domain = @tag.statuses + .with_public_visibility + .excluding_silenced_accounts + .where(Status.arel_table[:id].gteq(Mastodon::Snowflake.id_at(Time.now.utc.beginning_of_day))) + .joins(:account) + .group('accounts.domain') + .reorder('statuses_count desc') + .pluck('accounts.domain, count(*) AS statuses_count') + end + + def set_counters + @accounts_today = @tag.history.first[:accounts] + @accounts_week = Redis.current.pfcount(*current_week_days.map { |day| "activity:tags:#{@tag.id}:#{day}:accounts" }) + end + + def filtered_tags + TagFilter.new(filter_params).results end def filter_params - params.permit(:hidden) + params.slice(:directory, :reviewed, :unreviewed, :pending_review, :page, :popular, :active, :name).permit(:directory, :reviewed, :unreviewed, :pending_review, :page, :popular, :active, :name) + end + + def tag_params + params.require(:tag).permit(:name, :trendable, :usable, :listable) + end + + def current_week_days + now = Time.now.utc.beginning_of_day.to_date + + (Date.commercial(now.cwyear, now.cweek)..now).map do |date| + date.to_time(:utc).beginning_of_day.to_i + end + end + + def form_tag_batch_params + params.require(:form_tag_batch).permit(:action, tag_ids: []) + end + + def action_from_button + if params[:approve] + 'approve' + elsif params[:reject] + 'reject' + end end end end diff --git a/app/controllers/admin/two_factor_authentications_controller.rb b/app/controllers/admin/two_factor_authentications_controller.rb index 2577a4b17..0652c3a7a 100644 --- a/app/controllers/admin/two_factor_authentications_controller.rb +++ b/app/controllers/admin/two_factor_authentications_controller.rb @@ -8,6 +8,7 @@ module Admin authorize @user, :disable_2fa? @user.disable_two_factor! log_action :disable_2fa, @user + UserMailer.two_factor_disabled(@user).deliver_later! redirect_to admin_accounts_path end diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index eca558f42..144fdd6ac 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -7,16 +7,23 @@ class Api::BaseController < ApplicationController include RateLimitHeaders skip_before_action :store_current_location - skip_before_action :check_user_permissions + skip_before_action :require_functional! + before_action :require_authenticated_user!, if: :disallow_unauthenticated_api_access? before_action :set_cache_headers protect_from_forgery with: :null_session + skip_around_action :set_locale + rescue_from ActiveRecord::RecordInvalid, Mastodon::ValidationError do |e| render json: { error: e.to_s }, status: 422 end + rescue_from ActiveRecord::RecordNotUnique do + render json: { error: 'Duplicate record' }, status: 422 + end + rescue_from ActiveRecord::RecordNotFound do render json: { error: 'Record not found' }, status: 404 end @@ -33,6 +40,14 @@ class Api::BaseController < ApplicationController render json: { error: 'This action is not allowed' }, status: 403 end + rescue_from Mastodon::RaceConditionError do + render json: { error: 'There was a temporary problem serving your request, please try again' }, status: 503 + end + + rescue_from ActionController::ParameterMissing do |e| + render json: { error: e.to_s }, status: 400 + end + def doorkeeper_unauthorized_render_options(error: nil) { json: { error: (error.try(:description) || 'Not authorized') } } end @@ -69,6 +84,10 @@ class Api::BaseController < ApplicationController nil end + def require_authenticated_user! + render json: { error: 'This API requires an authenticated user' }, status: 401 unless current_user + end + def require_user! if !current_user render json: { error: 'This method requires an authenticated user' }, status: 422 @@ -94,4 +113,8 @@ class Api::BaseController < ApplicationController def set_cache_headers response.headers['Cache-Control'] = 'no-cache, no-store, max-age=0, must-revalidate' end + + def disallow_unauthenticated_api_access? + authorized_fetch_mode? + end end diff --git a/app/controllers/api/proofs_controller.rb b/app/controllers/api/proofs_controller.rb index a84ad2014..dd32cd577 100644 --- a/app/controllers/api/proofs_controller.rb +++ b/app/controllers/api/proofs_controller.rb @@ -1,10 +1,11 @@ # frozen_string_literal: true class Api::ProofsController < Api::BaseController - before_action :set_account + include AccountOwnedConcern + + skip_before_action :require_authenticated_user! + before_action :set_provider - before_action :check_account_approval - before_action :check_account_suspension def index render json: @account, serializer: @provider.serializer_class @@ -16,15 +17,7 @@ class Api::ProofsController < Api::BaseController @provider = ProofProvider.find(params[:provider]) || raise(ActiveRecord::RecordNotFound) end - def set_account - @account = Account.find_local!(params[:username]) - end - - def check_account_approval - not_found if @account.user_pending? - end - - def check_account_suspension - gone if @account.suspended? + def username_param + params[:username] end end diff --git a/app/controllers/api/push_controller.rb b/app/controllers/api/push_controller.rb deleted file mode 100644 index e04d19125..000000000 --- a/app/controllers/api/push_controller.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true - -class Api::PushController < Api::BaseController - include SignatureVerification - - def update - response, status = process_push_request - render plain: response, status: status - end - - private - - def process_push_request - case hub_mode - when 'subscribe' - Pubsubhubbub::SubscribeService.new.call(account_from_topic, hub_callback, hub_secret, hub_lease_seconds, verified_domain) - when 'unsubscribe' - Pubsubhubbub::UnsubscribeService.new.call(account_from_topic, hub_callback) - else - ["Unknown mode: #{hub_mode}", 422] - end - end - - def hub_mode - params['hub.mode'] - end - - def hub_topic - params['hub.topic'] - end - - def hub_callback - params['hub.callback'] - end - - def hub_lease_seconds - params['hub.lease_seconds'] - end - - def hub_secret - params['hub.secret'] - end - - def account_from_topic - if hub_topic.present? && local_domain? && account_feed_path? - Account.find_local(hub_topic_params[:username]) - end - end - - def hub_topic_params - @_hub_topic_params ||= Rails.application.routes.recognize_path(hub_topic_uri.path) - end - - def hub_topic_uri - @_hub_topic_uri ||= Addressable::URI.parse(hub_topic).normalize - end - - def local_domain? - TagManager.instance.web_domain?(hub_topic_domain) - end - - def verified_domain - return signed_request_account.domain if signed_request_account - end - - def hub_topic_domain - hub_topic_uri.host + (hub_topic_uri.port ? ":#{hub_topic_uri.port}" : '') - end - - def account_feed_path? - hub_topic_params[:controller] == 'accounts' && hub_topic_params[:action] == 'show' && hub_topic_params[:format] == 'atom' - end -end diff --git a/app/controllers/api/salmon_controller.rb b/app/controllers/api/salmon_controller.rb deleted file mode 100644 index ac5f3268d..000000000 --- a/app/controllers/api/salmon_controller.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -class Api::SalmonController < Api::BaseController - include SignatureVerification - - before_action :set_account - respond_to :txt - - def update - if verify_payload? - process_salmon - head 202 - elsif payload.present? - render plain: signature_verification_failure_reason, status: 401 - else - head 400 - end - end - - private - - def set_account - @account = Account.find(params[:id]) - end - - def payload - @_payload ||= request.body.read - end - - def verify_payload? - payload.present? && VerifySalmonService.new.call(payload) - end - - def process_salmon - SalmonWorker.perform_async(@account.id, payload.force_encoding('UTF-8')) - end -end diff --git a/app/controllers/api/subscriptions_controller.rb b/app/controllers/api/subscriptions_controller.rb deleted file mode 100644 index 89007f3d6..000000000 --- a/app/controllers/api/subscriptions_controller.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true - -class Api::SubscriptionsController < Api::BaseController - before_action :set_account - respond_to :txt - - def show - if subscription.valid?(params['hub.topic']) - @account.update(subscription_expires_at: future_expires) - render plain: encoded_challenge, status: 200 - else - head 404 - end - end - - def update - if subscription.verify(body, request.headers['HTTP_X_HUB_SIGNATURE']) - ProcessingWorker.perform_async(@account.id, body.force_encoding('UTF-8')) - end - - head 200 - end - - private - - def subscription - @_subscription ||= @account.subscription( - api_subscription_url(@account.id) - ) - end - - def body - @_body ||= request.body.read - end - - def encoded_challenge - HTMLEntities.new.encode(params['hub.challenge']) - end - - def future_expires - Time.now.utc + lease_seconds_or_default - end - - def lease_seconds_or_default - (params['hub.lease_seconds'] || 1.day).to_i.seconds - end - - def set_account - @account = Account.find(params[:id]) - end -end diff --git a/app/controllers/api/v1/accounts/credentials_controller.rb b/app/controllers/api/v1/accounts/credentials_controller.rb index e77f57910..64b5cb747 100644 --- a/app/controllers/api/v1/accounts/credentials_controller.rb +++ b/app/controllers/api/v1/accounts/credentials_controller.rb @@ -25,7 +25,7 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController end def user_settings_params - return nil unless params.key?(:source) + return nil if params[:source].blank? source_params = params.require(:source) diff --git a/app/controllers/api/v1/accounts/statuses_controller.rb b/app/controllers/api/v1/accounts/statuses_controller.rb index 8cd8f8e79..333db9618 100644 --- a/app/controllers/api/v1/accounts/statuses_controller.rb +++ b/app/controllers/api/v1/accounts/statuses_controller.rb @@ -3,7 +3,8 @@ class Api::V1::Accounts::StatusesController < Api::BaseController before_action -> { authorize_if_got_token! :read, :'read:statuses' } before_action :set_account - after_action :insert_pagination_headers + + after_action :insert_pagination_headers, unless: -> { truthy_param?(:pinned) } respond_to :json @@ -28,14 +29,13 @@ class Api::V1::Accounts::StatusesController < Api::BaseController def account_statuses statuses = truthy_param?(:pinned) ? pinned_scope : permitted_account_statuses - statuses = statuses.paginate_by_id(limit_param(DEFAULT_STATUSES_LIMIT), params_slice(:max_id, :since_id, :min_id)) statuses.merge!(only_media_scope) if truthy_param?(:only_media) statuses.merge!(no_replies_scope) if truthy_param?(:exclude_replies) statuses.merge!(no_reblogs_scope) if truthy_param?(:exclude_reblogs) statuses.merge!(hashtag_scope) if params[:tagged].present? - statuses + statuses.paginate_by_id(limit_param(DEFAULT_STATUSES_LIMIT), params_slice(:max_id, :since_id, :min_id)) end def permitted_account_statuses @@ -57,6 +57,8 @@ class Api::V1::Accounts::StatusesController < Api::BaseController end def pinned_scope + return Status.none if @account.blocking?(current_account) + @account.pinned_statuses end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index b0c62778e..d68d2715f 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -12,6 +12,8 @@ class Api::V1::AccountsController < Api::BaseController before_action :check_account_suspension, only: [:show] before_action :check_enabled_registrations, only: [:create] + skip_before_action :require_authenticated_user!, only: :create + respond_to :json def show @@ -31,7 +33,7 @@ class Api::V1::AccountsController < Api::BaseController def follow FollowService.new.call(current_user.account, @account, reblogs: truthy_param?(:reblogs)) - options = @account.locked? ? {} : { following_map: { @account.id => { reblogs: truthy_param?(:reblogs) } }, requested_map: { @account.id => false } } + options = @account.locked? || current_user.account.silenced? ? {} : { following_map: { @account.id => { reblogs: truthy_param?(:reblogs) } }, requested_map: { @account.id => false } } render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(options) end @@ -76,7 +78,7 @@ class Api::V1::AccountsController < Api::BaseController end def account_params - params.permit(:username, :email, :password, :agreement, :locale) + params.permit(:username, :email, :password, :agreement, :locale, :reason) end def check_enabled_registrations diff --git a/app/controllers/api/v1/admin/account_actions_controller.rb b/app/controllers/api/v1/admin/account_actions_controller.rb new file mode 100644 index 000000000..29c9b7107 --- /dev/null +++ b/app/controllers/api/v1/admin/account_actions_controller.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +class Api::V1::Admin::AccountActionsController < Api::BaseController + before_action -> { doorkeeper_authorize! :'admin:write', :'admin:write:accounts' } + before_action :require_staff! + before_action :set_account + + def create + account_action = Admin::AccountAction.new(resource_params) + account_action.target_account = @account + account_action.current_account = current_account + account_action.save! + + render_empty + end + + private + + def set_account + @account = Account.find(params[:account_id]) + end + + def resource_params + params.permit( + :type, + :report_id, + :warning_preset_id, + :text, + :send_email_notification + ) + end +end diff --git a/app/controllers/api/v1/admin/accounts_controller.rb b/app/controllers/api/v1/admin/accounts_controller.rb new file mode 100644 index 000000000..c35ea5ab2 --- /dev/null +++ b/app/controllers/api/v1/admin/accounts_controller.rb @@ -0,0 +1,128 @@ +# frozen_string_literal: true + +class Api::V1::Admin::AccountsController < Api::BaseController + include Authorization + include AccountableConcern + + LIMIT = 100 + + before_action -> { doorkeeper_authorize! :'admin:read', :'admin:read:accounts' }, only: [:index, :show] + before_action -> { doorkeeper_authorize! :'admin:write', :'admin:write:accounts' }, except: [:index, :show] + before_action :require_staff! + before_action :set_accounts, only: :index + before_action :set_account, except: :index + before_action :require_local_account!, only: [:enable, :approve, :reject] + + after_action :insert_pagination_headers, only: :index + + FILTER_PARAMS = %i( + local + remote + by_domain + active + pending + disabled + silenced + suspended + username + display_name + email + ip + staff + ).freeze + + PAGINATION_PARAMS = (%i(limit) + FILTER_PARAMS).freeze + + def index + authorize :account, :index? + render json: @accounts, each_serializer: REST::Admin::AccountSerializer + end + + def show + authorize @account, :show? + render json: @account, serializer: REST::Admin::AccountSerializer + end + + def enable + authorize @account.user, :enable? + @account.user.enable! + log_action :enable, @account.user + render json: @account, serializer: REST::Admin::AccountSerializer + end + + def approve + authorize @account.user, :approve? + @account.user.approve! + render json: @account, serializer: REST::Admin::AccountSerializer + end + + def reject + authorize @account.user, :reject? + SuspendAccountService.new.call(@account, reserve_email: false, reserve_username: false) + render json: @account, serializer: REST::Admin::AccountSerializer + end + + def unsilence + authorize @account, :unsilence? + @account.unsilence! + log_action :unsilence, @account + render json: @account, serializer: REST::Admin::AccountSerializer + end + + def unsuspend + authorize @account, :unsuspend? + @account.unsuspend! + log_action :unsuspend, @account + render json: @account, serializer: REST::Admin::AccountSerializer + end + + private + + def set_accounts + @accounts = filtered_accounts.order(id: :desc).includes(user: [:invite_request, :invite]).paginate_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) + end + + def set_account + @account = Account.find(params[:id]) + end + + def filtered_accounts + AccountFilter.new(filter_params).results + end + + def filter_params + params.permit(*FILTER_PARAMS) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + api_v1_admin_accounts_url(pagination_params(max_id: pagination_max_id)) if records_continue? + end + + def prev_path + api_v1_admin_accounts_url(pagination_params(min_id: pagination_since_id)) unless @accounts.empty? + end + + def pagination_max_id + @accounts.last.id + end + + def pagination_since_id + @accounts.first.id + end + + def records_continue? + @accounts.size == limit_param(LIMIT) + end + + def pagination_params(core_params) + params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params) + end + + def require_local_account! + forbidden unless @account.local? && @account.user.present? + end +end diff --git a/app/controllers/api/v1/admin/reports_controller.rb b/app/controllers/api/v1/admin/reports_controller.rb new file mode 100644 index 000000000..1d48d3160 --- /dev/null +++ b/app/controllers/api/v1/admin/reports_controller.rb @@ -0,0 +1,108 @@ +# frozen_string_literal: true + +class Api::V1::Admin::ReportsController < Api::BaseController + include Authorization + include AccountableConcern + + LIMIT = 100 + + before_action -> { doorkeeper_authorize! :'admin:read', :'admin:read:reports' }, only: [:index, :show] + before_action -> { doorkeeper_authorize! :'admin:write', :'admin:write:reports' }, except: [:index, :show] + before_action :require_staff! + before_action :set_reports, only: :index + before_action :set_report, except: :index + + after_action :insert_pagination_headers, only: :index + + FILTER_PARAMS = %i( + resolved + account_id + target_account_id + ).freeze + + PAGINATION_PARAMS = (%i(limit) + FILTER_PARAMS).freeze + + def index + authorize :report, :index? + render json: @reports, each_serializer: REST::Admin::ReportSerializer + end + + def show + authorize @report, :show? + render json: @report, serializer: REST::Admin::ReportSerializer + end + + def assign_to_self + authorize @report, :update? + @report.update!(assigned_account_id: current_account.id) + log_action :assigned_to_self, @report + render json: @report, serializer: REST::Admin::ReportSerializer + end + + def unassign + authorize @report, :update? + @report.update!(assigned_account_id: nil) + log_action :unassigned, @report + render json: @report, serializer: REST::Admin::ReportSerializer + end + + def reopen + authorize @report, :update? + @report.unresolve! + log_action :reopen, @report + render json: @report, serializer: REST::Admin::ReportSerializer + end + + def resolve + authorize @report, :update? + @report.resolve!(current_account) + log_action :resolve, @report + render json: @report, serializer: REST::Admin::ReportSerializer + end + + private + + def set_reports + @reports = filtered_reports.order(id: :desc).with_accounts.paginate_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) + end + + def set_report + @report = Report.find(params[:id]) + end + + def filtered_reports + ReportFilter.new(filter_params).results + end + + def filter_params + params.permit(*FILTER_PARAMS) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + api_v1_admin_reports_url(pagination_params(max_id: pagination_max_id)) if records_continue? + end + + def prev_path + api_v1_admin_reports_url(pagination_params(min_id: pagination_since_id)) unless @reports.empty? + end + + def pagination_max_id + @reports.last.id + end + + def pagination_since_id + @reports.first.id + end + + def records_continue? + @reports.size == limit_param(LIMIT) + end + + def pagination_params(core_params) + params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params) + end +end diff --git a/app/controllers/api/v1/apps_controller.rb b/app/controllers/api/v1/apps_controller.rb index e9f7a7291..97177547a 100644 --- a/app/controllers/api/v1/apps_controller.rb +++ b/app/controllers/api/v1/apps_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Api::V1::AppsController < Api::BaseController + skip_before_action :require_authenticated_user! + def create @app = Doorkeeper::Application.create!(application_options) render json: @app, serializer: REST::ApplicationSerializer diff --git a/app/controllers/api/v1/bookmarks_controller.rb b/app/controllers/api/v1/bookmarks_controller.rb index 1cab3c372..e1b244e76 100644 --- a/app/controllers/api/v1/bookmarks_controller.rb +++ b/app/controllers/api/v1/bookmarks_controller.rb @@ -26,10 +26,9 @@ class Api::V1::BookmarksController < Api::BaseController end def results - @_results ||= account_bookmarks.paginate_by_max_id( + @_results ||= account_bookmarks.paginate_by_id( limit_param(DEFAULT_STATUSES_LIMIT), - params[:max_id], - params[:since_id] + params_slice(:max_id, :since_id, :min_id) ) end @@ -42,15 +41,11 @@ class Api::V1::BookmarksController < Api::BaseController end def next_path - if records_continue? - api_v1_bookmarks_url pagination_params(max_id: pagination_max_id) - end + api_v1_bookmarks_url pagination_params(max_id: pagination_max_id) if records_continue? end def prev_path - unless results.empty? - api_v1_bookmarks_url pagination_params(since_id: pagination_since_id) - end + api_v1_bookmarks_url pagination_params(min_id: pagination_since_id) unless results.empty? end def pagination_max_id diff --git a/app/controllers/api/v1/custom_emojis_controller.rb b/app/controllers/api/v1/custom_emojis_controller.rb index 1bb19a09d..4e6d5d7c6 100644 --- a/app/controllers/api/v1/custom_emojis_controller.rb +++ b/app/controllers/api/v1/custom_emojis_controller.rb @@ -6,8 +6,7 @@ class Api::V1::CustomEmojisController < Api::BaseController skip_before_action :set_cache_headers def index - render_cached_json('api:v1:custom_emojis', expires_in: 1.minute) do - ActiveModelSerializers::SerializableResource.new(CustomEmoji.local.where(disabled: false), each_serializer: REST::CustomEmojiSerializer) - end + expires_in 3.minutes, public: true + render_with_cache(each_serializer: REST::CustomEmojiSerializer) { CustomEmoji.listed.includes(:category) } end end diff --git a/app/controllers/api/v1/directories_controller.rb b/app/controllers/api/v1/directories_controller.rb new file mode 100644 index 000000000..c91543e3a --- /dev/null +++ b/app/controllers/api/v1/directories_controller.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class Api::V1::DirectoriesController < Api::BaseController + before_action :require_enabled! + before_action :set_accounts + + def show + render json: @accounts, each_serializer: REST::AccountSerializer + end + + private + + def require_enabled! + return not_found unless Setting.profile_directory + end + + def set_accounts + @accounts = accounts_scope.offset(params[:offset]).limit(limit_param(DEFAULT_ACCOUNTS_LIMIT)) + end + + def accounts_scope + Account.discoverable.tap do |scope| + scope.merge!(Account.local) if truthy_param?(:local) + scope.merge!(Account.by_recent_status) if params[:order].blank? || params[:order] == 'active' + scope.merge!(Account.order(id: :desc)) if params[:order] == 'new' + scope.merge!(Account.not_excluded_by_account(current_account)) if current_account + scope.merge!(Account.not_domain_blocked_by_account(current_account)) if current_account && !truthy_param?(:local) + end + end +end diff --git a/app/controllers/api/v1/featured_tags/suggestions_controller.rb b/app/controllers/api/v1/featured_tags/suggestions_controller.rb new file mode 100644 index 000000000..fb27ef88b --- /dev/null +++ b/app/controllers/api/v1/featured_tags/suggestions_controller.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class Api::V1::FeaturedTags::SuggestionsController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index + + before_action :require_user! + before_action :set_most_used_tags, only: :index + + respond_to :json + + def index + render json: @most_used_tags, each_serializer: REST::TagSerializer + end + + private + + def set_most_used_tags + @most_used_tags = Tag.most_used(current_account).where.not(id: current_account.featured_tags).limit(10) + end +end diff --git a/app/controllers/api/v1/featured_tags_controller.rb b/app/controllers/api/v1/featured_tags_controller.rb new file mode 100644 index 000000000..e4e836c97 --- /dev/null +++ b/app/controllers/api/v1/featured_tags_controller.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +class Api::V1::FeaturedTagsController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index + before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index + + before_action :require_user! + before_action :set_featured_tags, only: :index + before_action :set_featured_tag, except: [:index, :create] + + def index + render json: @featured_tags, each_serializer: REST::FeaturedTagSerializer + end + + def create + @featured_tag = current_account.featured_tags.new(featured_tag_params) + @featured_tag.reset_data + @featured_tag.save! + render json: @featured_tag, serializer: REST::FeaturedTagSerializer + end + + def destroy + @featured_tag.destroy! + render_empty + end + + private + + def set_featured_tag + @featured_tag = current_account.featured_tags.find(params[:id]) + end + + def set_featured_tags + @featured_tags = current_account.featured_tags.order(statuses_count: :desc) + end + + def featured_tag_params + params.permit(:name) + end +end diff --git a/app/controllers/api/v1/follow_requests_controller.rb b/app/controllers/api/v1/follow_requests_controller.rb index e6888154e..0ee6e531f 100644 --- a/app/controllers/api/v1/follow_requests_controller.rb +++ b/app/controllers/api/v1/follow_requests_controller.rb @@ -14,12 +14,12 @@ class Api::V1::FollowRequestsController < Api::BaseController def authorize AuthorizeFollowService.new.call(account, current_account) NotifyService.new.call(current_account, Follow.find_by(account: account, target_account: current_account)) - render_empty + render json: account, serializer: REST::RelationshipSerializer, relationships: relationships end def reject RejectFollowService.new.call(account, current_account) - render_empty + render json: account, serializer: REST::RelationshipSerializer, relationships: relationships end private @@ -28,6 +28,10 @@ class Api::V1::FollowRequestsController < Api::BaseController Account.find(params[:id]) end + def relationships(**options) + AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, options) + end + def load_accounts default_accounts.merge(paginated_follow_requests).to_a end diff --git a/app/controllers/api/v1/follows_controller.rb b/app/controllers/api/v1/follows_controller.rb deleted file mode 100644 index 5420c0533..000000000 --- a/app/controllers/api/v1/follows_controller.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::FollowsController < Api::BaseController - before_action -> { doorkeeper_authorize! :follow, :'write:follows' } - before_action :require_user! - - respond_to :json - - def create - raise ActiveRecord::RecordNotFound if follow_params[:uri].blank? - - @account = FollowService.new.call(current_user.account, target_uri).try(:target_account) - - if @account.nil? - username, domain = target_uri.split('@') - @account = Account.find_remote!(username, domain) - end - - render json: @account, serializer: REST::AccountSerializer - end - - private - - def target_uri - follow_params[:uri].strip.gsub(/\A@/, '') - end - - def follow_params - params.permit(:uri) - end -end diff --git a/app/controllers/api/v1/instances/activity_controller.rb b/app/controllers/api/v1/instances/activity_controller.rb index 09edfe365..b30e8464c 100644 --- a/app/controllers/api/v1/instances/activity_controller.rb +++ b/app/controllers/api/v1/instances/activity_controller.rb @@ -2,12 +2,15 @@ class Api::V1::Instances::ActivityController < Api::BaseController before_action :require_enabled_api! + skip_before_action :set_cache_headers + skip_before_action :require_authenticated_user!, unless: :whitelist_mode? respond_to :json def show - render_cached_json('api:v1:instances:activity:show', expires_in: 1.day) { activity } + expires_in 1.day, public: true + render_with_cache json: :activity, expires_in: 1.day end private @@ -32,6 +35,6 @@ class Api::V1::Instances::ActivityController < Api::BaseController end def require_enabled_api! - head 404 unless Setting.activity_api_enabled + head 404 unless Setting.activity_api_enabled && !whitelist_mode? end end diff --git a/app/controllers/api/v1/instances/peers_controller.rb b/app/controllers/api/v1/instances/peers_controller.rb index a8891d126..cc00d8a6b 100644 --- a/app/controllers/api/v1/instances/peers_controller.rb +++ b/app/controllers/api/v1/instances/peers_controller.rb @@ -2,17 +2,20 @@ class Api::V1::Instances::PeersController < Api::BaseController before_action :require_enabled_api! + skip_before_action :set_cache_headers + skip_before_action :require_authenticated_user!, unless: :whitelist_mode? respond_to :json def index - render_cached_json('api:v1:instances:peers:index', expires_in: 1.day) { Account.remote.domains } + expires_in 1.day, public: true + render_with_cache(expires_in: 1.day) { Account.remote.domains } end private def require_enabled_api! - head 404 unless Setting.peers_api_enabled + head 404 unless Setting.peers_api_enabled && !whitelist_mode? end end diff --git a/app/controllers/api/v1/instances_controller.rb b/app/controllers/api/v1/instances_controller.rb index 8c83a1801..c323b60b4 100644 --- a/app/controllers/api/v1/instances_controller.rb +++ b/app/controllers/api/v1/instances_controller.rb @@ -2,11 +2,12 @@ class Api::V1::InstancesController < Api::BaseController respond_to :json + skip_before_action :set_cache_headers + skip_before_action :require_authenticated_user!, unless: :whitelist_mode? def show - render_cached_json('api:v1:instances', expires_in: 5.minutes) do - ActiveModelSerializers::SerializableResource.new({}, serializer: REST::InstanceSerializer) - end + expires_in 3.minutes, public: true + render_with_cache json: {}, serializer: REST::InstanceSerializer, root: 'instance' end end diff --git a/app/controllers/api/v1/markers_controller.rb b/app/controllers/api/v1/markers_controller.rb new file mode 100644 index 000000000..28c2ec791 --- /dev/null +++ b/app/controllers/api/v1/markers_controller.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +class Api::V1::MarkersController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:statuses' }, only: [:index] + before_action -> { doorkeeper_authorize! :write, :'write:statuses' }, except: [:index] + + before_action :require_user! + + def index + @markers = current_user.markers.where(timeline: Array(params[:timeline])).each_with_object({}) { |marker, h| h[marker.timeline] = marker } + render json: serialize_map(@markers) + end + + def create + Marker.transaction do + @markers = {} + + resource_params.each_pair do |timeline, timeline_params| + @markers[timeline] = current_user.markers.find_or_initialize_by(timeline: timeline) + @markers[timeline].update!(timeline_params) + end + end + + render json: serialize_map(@markers) + rescue ActiveRecord::StaleObjectError + render json: { error: 'Conflict during update, please try again' }, status: 409 + end + + private + + def serialize_map(map) + serialized = {} + + map.each_pair do |key, value| + serialized[key] = ActiveModelSerializers::SerializableResource.new(value, serializer: REST::MarkerSerializer).as_json + end + + Oj.dump(serialized) + end + + def resource_params + params.slice(*Marker::TIMELINES).permit(*Marker::TIMELINES.map { |timeline| { timeline.to_sym => [:last_read_id] } }) + end +end diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb index 1b658f870..1cbc92b93 100644 --- a/app/controllers/api/v1/push/subscriptions_controller.rb +++ b/app/controllers/api/v1/push/subscriptions_controller.rb @@ -51,6 +51,6 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController def data_params return {} if params[:data].blank? - params.require(:data).permit(alerts: [:follow, :favourite, :reblog, :mention, :poll]) + params.require(:data).permit(alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll]) end end diff --git a/app/controllers/api/v1/reports_controller.rb b/app/controllers/api/v1/reports_controller.rb index e182a9c6c..1b0b4b05b 100644 --- a/app/controllers/api/v1/reports_controller.rb +++ b/app/controllers/api/v1/reports_controller.rb @@ -21,7 +21,7 @@ class Api::V1::ReportsController < Api::BaseController private def reported_status_ids - reported_account.statuses.find(status_ids).pluck(:id) + reported_account.statuses.with_discarded.find(status_ids).pluck(:id) end def status_ids diff --git a/app/controllers/api/v1/search_controller.rb b/app/controllers/api/v1/search_controller.rb deleted file mode 100644 index 6131cbbb6..000000000 --- a/app/controllers/api/v1/search_controller.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::SearchController < Api::BaseController - include Authorization - - RESULTS_LIMIT = 20 - - before_action -> { doorkeeper_authorize! :read, :'read:search' } - before_action :require_user! - - respond_to :json - - def index - @search = Search.new(search_results) - render json: @search, serializer: REST::SearchSerializer - end - - private - - def search_results - SearchService.new.call( - params[:q], - current_account, - limit_param(RESULTS_LIMIT), - search_params.merge(resolve: truthy_param?(:resolve)) - ) - end - - def search_params - params.permit(:type, :offset, :min_id, :max_id, :account_id) - end -end diff --git a/app/controllers/api/v1/statuses/reblogs_controller.rb b/app/controllers/api/v1/statuses/reblogs_controller.rb index ed4f55100..42381a37f 100644 --- a/app/controllers/api/v1/statuses/reblogs_controller.rb +++ b/app/controllers/api/v1/statuses/reblogs_controller.rb @@ -18,6 +18,7 @@ class Api::V1::Statuses::ReblogsController < Api::BaseController @reblogs_map = { @status.id => false } authorize status_for_destroy, :unreblog? + status_for_destroy.discard RemovalWorker.perform_async(status_for_destroy.id) render json: @status, serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new([@status], current_user&.account_id, reblogs_map: @reblogs_map) @@ -30,7 +31,7 @@ class Api::V1::Statuses::ReblogsController < Api::BaseController end def status_for_destroy - current_user.account.statuses.where(reblog_of_id: params[:status_id]).first! + @status_for_destroy ||= current_user.account.statuses.where(reblog_of_id: params[:status_id]).first! end def reblog_params diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index 26a0ab457..486004f9c 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -5,8 +5,8 @@ class Api::V1::StatusesController < Api::BaseController before_action -> { authorize_if_got_token! :read, :'read:statuses' }, except: [:create, :destroy] before_action -> { doorkeeper_authorize! :write, :'write:statuses' }, only: [:create, :destroy] - before_action :require_user!, except: [:show, :context, :card] - before_action :set_status, only: [:show, :context, :card] + before_action :require_user!, except: [:show, :context] + before_action :set_status, only: [:show, :context] respond_to :json @@ -33,16 +33,6 @@ class Api::V1::StatusesController < Api::BaseController render json: @context, serializer: REST::ContextSerializer, relationships: StatusRelationshipsPresenter.new(statuses, current_user&.account_id) end - def card - @card = @status.preview_cards.first - - if @card.nil? - render_empty - else - render json: @card, serializer: REST::PreviewCardSerializer - end - end - def create @status = PostStatusService.new.call(current_user.account, text: status_params[:status], @@ -64,7 +54,8 @@ class Api::V1::StatusesController < Api::BaseController @status = Status.where(account_id: current_user.account).find(params[:id]) authorize @status, :destroy? - RemovalWorker.perform_async(@status.id) + @status.discard + RemovalWorker.perform_async(@status.id, redraft: true) render json: @status, serializer: REST::StatusSerializer, source_requested: true end diff --git a/app/controllers/api/v1/streaming_controller.rb b/app/controllers/api/v1/streaming_controller.rb index 66b812e76..ebb17608c 100644 --- a/app/controllers/api/v1/streaming_controller.rb +++ b/app/controllers/api/v1/streaming_controller.rb @@ -5,11 +5,17 @@ class Api::V1::StreamingController < Api::BaseController def index if Rails.configuration.x.streaming_api_base_url != request.host - uri = URI.parse(request.url) - uri.host = URI.parse(Rails.configuration.x.streaming_api_base_url).host - redirect_to uri.to_s, status: 301 + redirect_to streaming_api_url, status: 301 else - raise ActiveRecord::RecordNotFound + not_found end end + + private + + def streaming_api_url + Addressable::URI.parse(request.url).tap do |uri| + uri.host = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url).host + end.to_s + end end diff --git a/app/controllers/api/v1/timelines/direct_controller.rb b/app/controllers/api/v1/timelines/direct_controller.rb index d8a76d153..6e98e9cac 100644 --- a/app/controllers/api/v1/timelines/direct_controller.rb +++ b/app/controllers/api/v1/timelines/direct_controller.rb @@ -27,16 +27,18 @@ class Api::V1::Timelines::DirectController < Api::BaseController end def direct_timeline_statuses - # this query requires built in pagination. - Status.as_direct_timeline( - current_account, + account_direct_feed.get( limit_param(DEFAULT_STATUSES_LIMIT), params[:max_id], params[:since_id], - true # returns array of cache_ids object + params[:min_id] ) end + def account_direct_feed + DirectFeed.new(current_account) + end + def insert_pagination_headers set_pagination_headers(next_path, prev_path) end diff --git a/app/controllers/api/v1/timelines/home_controller.rb b/app/controllers/api/v1/timelines/home_controller.rb index fcd0757f1..ff5ede138 100644 --- a/app/controllers/api/v1/timelines/home_controller.rb +++ b/app/controllers/api/v1/timelines/home_controller.rb @@ -13,7 +13,7 @@ class Api::V1::Timelines::HomeController < Api::BaseController render json: @statuses, each_serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new(@statuses, current_user&.account_id), - status: regeneration_in_progress? ? 206 : 200 + status: account_home_feed.regenerating? ? 206 : 200 end private @@ -62,8 +62,4 @@ class Api::V1::Timelines::HomeController < Api::BaseController def pagination_since_id @statuses.first.id end - - def regeneration_in_progress? - Redis.current.exists("account:#{current_account.id}:regeneration") - end end diff --git a/app/controllers/api/v1/timelines/public_controller.rb b/app/controllers/api/v1/timelines/public_controller.rb index aabe24324..ccc10f966 100644 --- a/app/controllers/api/v1/timelines/public_controller.rb +++ b/app/controllers/api/v1/timelines/public_controller.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class Api::V1::Timelines::PublicController < Api::BaseController + before_action :require_user!, only: [:show], if: :require_auth? after_action :insert_pagination_headers, unless: -> { @statuses.empty? } respond_to :json @@ -12,6 +13,10 @@ class Api::V1::Timelines::PublicController < Api::BaseController private + def require_auth? + !Setting.timeline_preview + end + def load_statuses cached_public_statuses end diff --git a/app/controllers/api/v1/trends_controller.rb b/app/controllers/api/v1/trends_controller.rb new file mode 100644 index 000000000..bcea9857e --- /dev/null +++ b/app/controllers/api/v1/trends_controller.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class Api::V1::TrendsController < Api::BaseController + before_action :set_tags + + respond_to :json + + def index + render json: @tags, each_serializer: REST::TagSerializer + end + + private + + def set_tags + @tags = TrendingTags.get(limit_param(10)) + end +end diff --git a/app/controllers/api/v2/search_controller.rb b/app/controllers/api/v2/search_controller.rb index 9aa6edc69..76decdb25 100644 --- a/app/controllers/api/v2/search_controller.rb +++ b/app/controllers/api/v2/search_controller.rb @@ -1,8 +1,32 @@ # frozen_string_literal: true -class Api::V2::SearchController < Api::V1::SearchController +class Api::V2::SearchController < Api::BaseController + include Authorization + + RESULTS_LIMIT = (ENV['MAX_SEARCH_RESULTS'] || 20).to_i + + before_action -> { doorkeeper_authorize! :read, :'read:search' } + before_action :require_user! + + respond_to :json + def index @search = Search.new(search_results) - render json: @search, serializer: REST::V2::SearchSerializer + render json: @search, serializer: REST::SearchSerializer + end + + private + + def search_results + SearchService.new.call( + params[:q], + current_account, + limit_param(RESULTS_LIMIT), + search_params.merge(resolve: truthy_param?(:resolve), exclude_unreviewed: truthy_param?(:exclude_unreviewed)) + ) + end + + def search_params + params.permit(:type, :offset, :min_id, :max_id, :account_id) end end diff --git a/app/controllers/api/web/push_subscriptions_controller.rb b/app/controllers/api/web/push_subscriptions_controller.rb index d8153e082..f388b17e5 100644 --- a/app/controllers/api/web/push_subscriptions_controller.rb +++ b/app/controllers/api/web/push_subscriptions_controller.rb @@ -19,6 +19,7 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController data = { alerts: { follow: alerts_enabled, + follow_request: false, favourite: alerts_enabled, reblog: alerts_enabled, mention: alerts_enabled, @@ -58,6 +59,6 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController end def data_params - @data_params ||= params.require(:data).permit(alerts: [:follow, :favourite, :reblog, :mention, :poll]) + @data_params ||= params.require(:data).permit(alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll]) end end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 333082f68..599c64062 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -10,6 +10,8 @@ class ApplicationController < ActionController::Base include Localized include UserTrackingConcern include SessionTrackingConcern + include CacheConcern + include DomainControlHelper helper_method :current_account helper_method :current_session @@ -17,15 +19,21 @@ class ApplicationController < ActionController::Base helper_method :current_skin helper_method :single_user_mode? helper_method :use_seamless_external_login? + helper_method :whitelist_mode? rescue_from ActionController::RoutingError, with: :not_found - rescue_from ActiveRecord::RecordNotFound, with: :not_found rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity rescue_from ActionController::UnknownFormat, with: :not_acceptable + rescue_from ActionController::ParameterMissing, with: :bad_request + rescue_from ActiveRecord::RecordNotFound, with: :not_found rescue_from Mastodon::NotPermittedError, with: :forbidden + rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error + rescue_from Mastodon::RaceConditionError, with: :service_unavailable before_action :store_current_location, except: :raise_not_found, unless: :devise_controller? - before_action :check_user_permissions, if: :user_signed_in? + before_action :require_functional!, if: :user_signed_in? + + skip_before_action :verify_authenticity_token, only: :raise_not_found def raise_not_found raise ActionController::RoutingError, "No route matches #{params[:unmatched_route]}" @@ -34,7 +42,15 @@ class ApplicationController < ActionController::Base private def https_enabled? - Rails.env.production? + Rails.env.production? && !request.path.start_with?('/health') + end + + def authorized_fetch_mode? + ENV['AUTHORIZED_FETCH'] == 'true' || Rails.configuration.x.whitelist_mode + end + + def public_fetch_mode? + !authorized_fetch_mode? end def store_current_location @@ -49,8 +65,8 @@ class ApplicationController < ActionController::Base forbidden unless current_user&.staff? end - def check_user_permissions - forbidden if current_user.disabled? || current_user.account.suspended? + def require_functional! + redirect_to edit_user_registration_path unless current_user.functional? end def after_sign_out_path_for(_resource_or_scope) @@ -152,8 +168,20 @@ class ApplicationController < ActionController::Base respond_with_error(406) end + def bad_request + respond_with_error(400) + end + + def internal_server_error + respond_with_error(500) + end + + def service_unavailable + respond_with_error(503) + end + def single_user_mode? - @single_user_mode ||= Rails.configuration.x.single_user_mode && Account.exists? + @single_user_mode ||= Rails.configuration.x.single_user_mode && Account.where('id > 0').exists? end def use_seamless_external_login? @@ -161,11 +189,15 @@ class ApplicationController < ActionController::Base end def current_account - @current_account ||= current_user.try(:account) + return @current_account if defined?(@current_account) + + @current_account = current_user&.account end def current_session - @current_session ||= SessionActivation.find_by(session_id: cookies.signed['_session_id']) + return @current_session if defined?(@current_session) + + @current_session = SessionActivation.find_by(session_id: cookies.signed['_session_id']) if cookies.signed['_session_id'].present? end def current_flavour @@ -178,56 +210,8 @@ class ApplicationController < ActionController::Base current_user.setting_skin end - def cache_collection(raw, klass) - return raw unless klass.respond_to?(:with_includes) - - raw = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation) - cached_keys_with_value = Rails.cache.read_multi(*raw).transform_keys(&:id) - uncached_ids = raw.map(&:id) - cached_keys_with_value.keys - - klass.reload_stale_associations!(cached_keys_with_value.values) if klass.respond_to?(:reload_stale_associations!) - - unless uncached_ids.empty? - uncached = klass.where(id: uncached_ids).with_includes.each_with_object({}) { |item, h| h[item.id] = item } - - uncached.each_value do |item| - Rails.cache.write(item, item) - end - end - - raw.map { |item| cached_keys_with_value[item.id] || uncached[item.id] }.compact - end - def respond_with_error(code) - respond_to do |format| - format.any { head code } - - format.html do - set_locale - use_pack 'error' - render "errors/#{code}", layout: 'error', status: code - end - end - end - - def render_cached_json(cache_key, **options) - options[:expires_in] ||= 3.minutes - cache_public = options.key?(:public) ? options.delete(:public) : true - content_type = options.delete(:content_type) || 'application/json' - - data = Rails.cache.fetch(cache_key, { raw: true }.merge(options)) do - yield.to_json - end - - expires_in options[:expires_in], public: cache_public - render json: data, content_type: content_type - end - - def set_cache_headers - response.headers['Vary'] = 'Accept' - end - - def mark_cacheable! - expires_in 0, public: true + use_pack 'error' + render "errors/#{code}", layout: 'error', status: code end end diff --git a/app/controllers/auth/challenges_controller.rb b/app/controllers/auth/challenges_controller.rb new file mode 100644 index 000000000..41827b21c --- /dev/null +++ b/app/controllers/auth/challenges_controller.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class Auth::ChallengesController < ApplicationController + include ChallengableConcern + + layout 'auth' + + before_action :set_pack + before_action :authenticate_user! + + skip_before_action :require_functional! + + def create + if challenge_passed? + session[:challenge_passed_at] = Time.now.utc + redirect_to challenge_params[:return_to] + else + @challenge = Form::Challenge.new(return_to: challenge_params[:return_to]) + flash.now[:alert] = I18n.t('challenge.invalid_password') + render_challenge + end + end + + private + + def set_pack + use_pack 'auth' + end +end diff --git a/app/controllers/auth/confirmations_controller.rb b/app/controllers/auth/confirmations_controller.rb index eade82e36..4e89446c7 100644 --- a/app/controllers/auth/confirmations_controller.rb +++ b/app/controllers/auth/confirmations_controller.rb @@ -4,19 +4,15 @@ class Auth::ConfirmationsController < Devise::ConfirmationsController layout 'auth' before_action :set_body_classes - before_action :set_user, only: [:finish_signup] before_action :set_pack + before_action :require_unconfirmed! - def finish_signup - return unless request.patch? && params[:user] + skip_before_action :require_functional! - if @user.update(user_params) - @user.skip_reconfirmation! - bypass_sign_in(@user) - redirect_to root_path, notice: I18n.t('devise.confirmations.send_instructions') - else - @show_errors = true - end + def new + super + + resource.email = current_user.unconfirmed_email || current_user.email if user_signed_in? end private @@ -25,16 +21,24 @@ class Auth::ConfirmationsController < Devise::ConfirmationsController use_pack 'auth' end - def set_user - @user = current_user + def require_unconfirmed! + redirect_to edit_user_registration_path if user_signed_in? && current_user.confirmed? && current_user.unconfirmed_email.blank? end def set_body_classes @body_classes = 'lighter' end - def user_params - params.require(:user).permit(:email) + def after_resending_confirmation_instructions_path_for(_resource_name) + if user_signed_in? + if current_user.confirmed? && current_user.approved? + edit_user_registration_path + else + auth_setup_path + end + else + new_user_session_path + end end def after_confirmation_path_for(_resource_name, user) diff --git a/app/controllers/auth/omniauth_callbacks_controller.rb b/app/controllers/auth/omniauth_callbacks_controller.rb index bbf63bed3..682c77016 100644 --- a/app/controllers/auth/omniauth_callbacks_controller.rb +++ b/app/controllers/auth/omniauth_callbacks_controller.rb @@ -27,7 +27,7 @@ class Auth::OmniauthCallbacksController < Devise::OmniauthCallbacksController if resource.email_verified? root_path else - finish_signup_path + auth_setup_path(missing_email: '1') end end end diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index c56728464..068375843 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -10,6 +10,9 @@ class Auth::RegistrationsController < Devise::RegistrationsController before_action :set_sessions, only: [:edit, :update] before_action :set_instance_presenter, only: [:new, :create, :update] before_action :set_body_classes, only: [:new, :create, :edit, :update] + before_action :require_not_suspended!, only: [:update] + + skip_before_action :require_functional!, only: [:edit, :update] def new super(&:build_invite_request) @@ -44,7 +47,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController end def after_sign_up_path_for(_resource) - new_user_session_path + auth_setup_path end def after_sign_in_path_for(_resource) @@ -107,4 +110,8 @@ class Auth::RegistrationsController < Devise::RegistrationsController def set_sessions @sessions = current_user.session_activations end + + def require_not_suspended! + forbidden if current_account.suspended? + end end diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index 332f4d7a7..eac9dde6f 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -6,9 +6,11 @@ class Auth::SessionsController < Devise::SessionsController layout 'auth' skip_before_action :require_no_authentication, only: [:create] - skip_before_action :check_user_permissions, only: [:destroy] - prepend_before_action :authenticate_with_two_factor, if: :two_factor_enabled?, only: [:create] + skip_before_action :require_functional! + prepend_before_action :set_pack + prepend_before_action :authenticate_with_two_factor, if: :two_factor_enabled?, only: [:create] + before_action :set_instance_presenter, only: [:new] before_action :set_body_classes @@ -30,6 +32,7 @@ class Auth::SessionsController < Devise::SessionsController def destroy tmp_stored_location = stored_location_for(:user) super + session.delete(:challenge_passed_at) flash.delete(:notice) store_location_for(:user, tmp_stored_location) if continue_after? end @@ -39,12 +42,10 @@ class Auth::SessionsController < Devise::SessionsController def find_user if session[:otp_user_id] User.find(session[:otp_user_id]) - elsif user_params[:email] - if use_seamless_external_login? && Devise.check_at_sign && user_params[:email].index('@').nil? - User.joins(:account).find_by(accounts: { username: user_params[:email] }) - else - User.find_for_authentication(email: user_params[:email]) - end + else + user = User.authenticate_with_ldap(user_params) if Devise.ldap_authentication + user ||= User.authenticate_with_pam(user_params) if Devise.pam_authentication + user ||= User.find_for_authentication(email: user_params[:email]) end end @@ -71,13 +72,13 @@ class Auth::SessionsController < Devise::SessionsController end def two_factor_enabled? - find_user.try(:otp_required_for_login?) + find_user&.otp_required_for_login? end def valid_otp_attempt?(user) user.validate_and_consume_otp!(user_params[:otp_attempt]) || user.invalidate_otp_backup_code!(user_params[:otp_attempt]) - rescue OpenSSL::Cipher::CipherError => _error + rescue OpenSSL::Cipher::CipherError false end @@ -86,7 +87,10 @@ class Auth::SessionsController < Devise::SessionsController if user_params[:otp_attempt].present? && session[:otp_user_id] authenticate_with_two_factor_via_otp(user) - elsif user&.valid_password?(user_params[:password]) + elsif user.present? && (user.encrypted_password.blank? || user.valid_password?(user_params[:password])) + # If encrypted_password is blank, we got the user from LDAP or PAM, + # so credentials are already valid + prompt_for_two_factor(user) end end @@ -104,6 +108,8 @@ class Auth::SessionsController < Devise::SessionsController def prompt_for_two_factor(user) session[:otp_user_id] = user.id + use_pack 'auth' + @body_classes = 'lighter' render :two_factor end diff --git a/app/controllers/auth/setup_controller.rb b/app/controllers/auth/setup_controller.rb new file mode 100644 index 000000000..db5a866f2 --- /dev/null +++ b/app/controllers/auth/setup_controller.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +class Auth::SetupController < ApplicationController + layout 'auth' + + before_action :set_pack + before_action :authenticate_user! + before_action :require_unconfirmed_or_pending! + before_action :set_body_classes + before_action :set_user + + skip_before_action :require_functional! + + def show + flash.now[:notice] = begin + if @user.pending? + I18n.t('devise.registrations.signed_up_but_pending') + else + I18n.t('devise.registrations.signed_up_but_unconfirmed') + end + end + end + + def update + # This allows updating the e-mail without entering a password as is required + # on the account settings page; however, we only allow this for accounts + # that were not confirmed yet + + if @user.update(user_params) + redirect_to auth_setup_path, notice: I18n.t('devise.confirmations.send_instructions') + else + render :show + end + end + + helper_method :missing_email? + + private + + def require_unconfirmed_or_pending! + redirect_to root_path if current_user.confirmed? && current_user.approved? + end + + def set_user + @user = current_user + end + + def set_body_classes + @body_classes = 'lighter' + end + + def user_params + params.require(:user).permit(:email) + end + + def missing_email? + truthy_param?(:missing_email) + end + + def set_pack + use_pack 'auth' + end +end diff --git a/app/controllers/concerns/account_controller_concern.rb b/app/controllers/concerns/account_controller_concern.rb index 1c422096c..11eac0eb6 100644 --- a/app/controllers/concerns/account_controller_concern.rb +++ b/app/controllers/concerns/account_controller_concern.rb @@ -3,24 +3,19 @@ module AccountControllerConcern extend ActiveSupport::Concern + include AccountOwnedConcern + FOLLOW_PER_PAGE = 12 included do layout 'public' - before_action :set_account - before_action :check_account_approval - before_action :check_account_suspension before_action :set_instance_presenter - before_action :set_link_headers + before_action :set_link_headers, if: -> { request.format.nil? || request.format == :html } end private - def set_account - @account = Account.find_local!(username_param) - end - def set_instance_presenter @instance_presenter = InstancePresenter.new end @@ -29,27 +24,15 @@ module AccountControllerConcern response.headers['Link'] = LinkHeader.new( [ webfinger_account_link, - atom_account_url_link, actor_url_link, ] ) end - def username_param - params[:account_username] - end - def webfinger_account_link [ webfinger_account_url, - [%w(rel lrdd), %w(type application/xrd+xml)], - ] - end - - def atom_account_url_link - [ - account_url(@account, format: 'atom'), - [%w(rel alternate), %w(type application/atom+xml)], + [%w(rel lrdd), %w(type application/jrd+json)], ] end @@ -63,15 +46,4 @@ module AccountControllerConcern def webfinger_account_url webfinger_url(resource: @account.to_webfinger_s) end - - def check_account_approval - not_found if @account.user_pending? - end - - def check_account_suspension - if @account.suspended? - expires_in(3.minutes, public: true) - gone - end - end end diff --git a/app/controllers/concerns/account_owned_concern.rb b/app/controllers/concerns/account_owned_concern.rb new file mode 100644 index 000000000..460f71f65 --- /dev/null +++ b/app/controllers/concerns/account_owned_concern.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module AccountOwnedConcern + extend ActiveSupport::Concern + + included do + before_action :authenticate_user!, if: -> { whitelist_mode? && request.format != :json } + before_action :set_account, if: :account_required? + before_action :check_account_approval, if: :account_required? + before_action :check_account_suspension, if: :account_required? + end + + private + + def account_required? + true + end + + def set_account + @account = Account.find_local!(username_param) + end + + def username_param + params[:account_username] + end + + def check_account_approval + not_found if @account.local? && @account.user_pending? + end + + def check_account_suspension + expires_in(3.minutes, public: true) && gone if @account.suspended? + end +end diff --git a/app/controllers/concerns/cache_concern.rb b/app/controllers/concerns/cache_concern.rb new file mode 100644 index 000000000..c7d25ae00 --- /dev/null +++ b/app/controllers/concerns/cache_concern.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +module CacheConcern + extend ActiveSupport::Concern + + def render_with_cache(**options) + raise ArgumentError, 'only JSON render calls are supported' unless options.key?(:json) || block_given? + + key = options.delete(:key) || [[params[:controller], params[:action]].join('/'), options[:json].respond_to?(:cache_key) ? options[:json].cache_key : nil, options[:fields].nil? ? nil : options[:fields].join(',')].compact.join(':') + expires_in = options.delete(:expires_in) || 3.minutes + body = Rails.cache.read(key, raw: true) + + if body + render(options.except(:json, :serializer, :each_serializer, :adapter, :fields).merge(json: body)) + else + if block_given? + options[:json] = yield + elsif options[:json].is_a?(Symbol) + options[:json] = send(options[:json]) + end + + render(options) + Rails.cache.write(key, response.body, expires_in: expires_in, raw: true) + end + end + + def set_cache_headers + response.headers['Vary'] = public_fetch_mode? ? 'Accept' : 'Accept, Signature' + end + + def cache_collection(raw, klass) + return raw unless klass.respond_to?(:with_includes) + + raw = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation) + cached_keys_with_value = Rails.cache.read_multi(*raw).transform_keys(&:id) + uncached_ids = raw.map(&:id) - cached_keys_with_value.keys + + klass.reload_stale_associations!(cached_keys_with_value.values) if klass.respond_to?(:reload_stale_associations!) + + unless uncached_ids.empty? + uncached = klass.where(id: uncached_ids).with_includes.each_with_object({}) { |item, h| h[item.id] = item } + + uncached.each_value do |item| + Rails.cache.write(item, item) + end + end + + raw.map { |item| cached_keys_with_value[item.id] || uncached[item.id] }.compact + end +end diff --git a/app/controllers/concerns/challengable_concern.rb b/app/controllers/concerns/challengable_concern.rb new file mode 100644 index 000000000..b29d90b3c --- /dev/null +++ b/app/controllers/concerns/challengable_concern.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +# This concern is inspired by "sudo mode" on GitHub. It +# is a way to re-authenticate a user before allowing them +# to see or perform an action. +# +# Add `before_action :require_challenge!` to actions you +# want to protect. +# +# The user will be shown a page to enter the challenge (which +# is either the password, or just the username when no +# password exists). Upon passing, there is a grace period +# during which no challenge will be asked from the user. +# +# Accessing challenge-protected resources during the grace +# period will refresh the grace period. +module ChallengableConcern + extend ActiveSupport::Concern + + CHALLENGE_TIMEOUT = 1.hour.freeze + + def require_challenge! + return if skip_challenge? + + if challenge_passed_recently? + session[:challenge_passed_at] = Time.now.utc + return + end + + @challenge = Form::Challenge.new(return_to: request.url) + + if params.key?(:form_challenge) + if challenge_passed? + session[:challenge_passed_at] = Time.now.utc + return + else + flash.now[:alert] = I18n.t('challenge.invalid_password') + render_challenge + end + else + render_challenge + end + end + + def render_challenge + @body_classes = 'lighter' + render template: 'auth/challenges/new', layout: 'auth' + end + + def challenge_passed? + current_user.valid_password?(challenge_params[:current_password]) + end + + def skip_challenge? + current_user.encrypted_password.blank? + end + + def challenge_passed_recently? + session[:challenge_passed_at].present? && session[:challenge_passed_at] >= CHALLENGE_TIMEOUT.ago + end + + def challenge_params + params.require(:form_challenge).permit(:current_password, :return_to) + end +end diff --git a/app/controllers/concerns/export_controller_concern.rb b/app/controllers/concerns/export_controller_concern.rb index e20b71a30..bfe990c82 100644 --- a/app/controllers/concerns/export_controller_concern.rb +++ b/app/controllers/concerns/export_controller_concern.rb @@ -5,7 +5,10 @@ module ExportControllerConcern included do before_action :authenticate_user! + before_action :require_not_suspended! before_action :load_export + + skip_before_action :require_functional! end private @@ -27,4 +30,8 @@ module ExportControllerConcern def export_filename "#{controller_name}.csv" end + + def require_not_suspended! + forbidden if current_account.suspended? + end end diff --git a/app/controllers/concerns/localized.rb b/app/controllers/concerns/localized.rb index 145549bcd..b43859d9d 100644 --- a/app/controllers/concerns/localized.rb +++ b/app/controllers/concerns/localized.rb @@ -4,16 +4,19 @@ module Localized extend ActiveSupport::Concern included do - before_action :set_locale + around_action :set_locale end private def set_locale - I18n.locale = default_locale - I18n.locale = current_user.locale if user_signed_in? - rescue I18n::InvalidLocale - I18n.locale = default_locale + locale = current_user.locale if respond_to?(:user_signed_in?) && user_signed_in? + locale ||= session[:locale] ||= default_locale + locale = default_locale unless I18n.available_locales.include?(locale.to_sym) + + I18n.with_locale(locale) do + yield + end end def default_locale diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index 90a57197c..ce353f1de 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -5,12 +5,35 @@ module SignatureVerification extend ActiveSupport::Concern + include DomainControlHelper + + def require_signature! + render plain: signature_verification_failure_reason, status: signature_verification_failure_code unless signed_request_account + end + def signed_request? request.headers['Signature'].present? end def signature_verification_failure_reason - return @signature_verification_failure_reason if defined?(@signature_verification_failure_reason) + @signature_verification_failure_reason + end + + def signature_verification_failure_code + @signature_verification_failure_code || 401 + end + + def signature_key_id + raw_signature = request.headers['Signature'] + signature_params = {} + + raw_signature.split(',').each do |part| + parsed_parts = part.match(/([a-z]+)="([^"]+)"/i) + next if parsed_parts.nil? || parsed_parts.size != 3 + signature_params[parsed_parts[1]] = parsed_parts[2] + end + + signature_params['keyId'] end def signed_request_account @@ -123,6 +146,13 @@ module SignatureVerification end def account_from_key_id(key_id) + domain = key_id.start_with?('acct:') ? key_id.split('@').last : key_id + + if domain_not_allowed?(domain) + @signature_verification_failure_code = 403 + return + end + if key_id.start_with?('acct:') stoplight_wrap_request { ResolveAccountService.new.call(key_id.gsub(/\Aacct:/, '')) } elsif !ActivityPub::TagManager.instance.local_uri?(key_id) @@ -137,7 +167,7 @@ module SignatureVerification .with_fallback { nil } .with_threshold(1) .with_cool_off_time(5.minutes.seconds) - .with_error_handler { |error, handle| error.is_a?(HTTP::Error) ? handle.call(error) : raise(error) } + .with_error_handler { |error, handle| error.is_a?(HTTP::Error) || error.is_a?(OpenSSL::SSL::SSLError) ? handle.call(error) : raise(error) } .run end diff --git a/app/controllers/concerns/status_controller_concern.rb b/app/controllers/concerns/status_controller_concern.rb new file mode 100644 index 000000000..62a7cf508 --- /dev/null +++ b/app/controllers/concerns/status_controller_concern.rb @@ -0,0 +1,87 @@ +# frozen_string_literal: true + +module StatusControllerConcern + extend ActiveSupport::Concern + + ANCESTORS_LIMIT = 40 + DESCENDANTS_LIMIT = 60 + DESCENDANTS_DEPTH_LIMIT = 20 + + def create_descendant_thread(starting_depth, statuses) + depth = starting_depth + statuses.size + + if depth < DESCENDANTS_DEPTH_LIMIT + { + statuses: statuses, + starting_depth: starting_depth, + } + else + next_status = statuses.pop + + { + statuses: statuses, + starting_depth: starting_depth, + next_status: next_status, + } + end + end + + def set_ancestors + @ancestors = @status.reply? ? cache_collection(@status.ancestors(ANCESTORS_LIMIT, current_account), Status) : [] + @next_ancestor = @ancestors.size < ANCESTORS_LIMIT ? nil : @ancestors.shift + end + + def set_descendants + @max_descendant_thread_id = params[:max_descendant_thread_id]&.to_i + @since_descendant_thread_id = params[:since_descendant_thread_id]&.to_i + + descendants = cache_collection( + @status.descendants( + DESCENDANTS_LIMIT, + current_account, + @max_descendant_thread_id, + @since_descendant_thread_id, + DESCENDANTS_DEPTH_LIMIT + ), + Status + ) + + @descendant_threads = [] + + if descendants.present? + statuses = [descendants.first] + starting_depth = 0 + + descendants.drop(1).each_with_index do |descendant, index| + if descendants[index].id == descendant.in_reply_to_id + statuses << descendant + else + @descendant_threads << create_descendant_thread(starting_depth, statuses) + + # The thread is broken, assume it's a reply to the root status + starting_depth = 0 + + # ... unless we can find its ancestor in one of the already-processed threads + @descendant_threads.reverse_each do |descendant_thread| + statuses = descendant_thread[:statuses] + + index = statuses.find_index do |thread_status| + thread_status.id == descendant.in_reply_to_id + end + + if index.present? + starting_depth = descendant_thread[:starting_depth] + index + 1 + break + end + end + + statuses = [descendant] + end + end + + @descendant_threads << create_descendant_thread(starting_depth, statuses) + end + + @max_descendant_thread_id = @descendant_threads.pop[:statuses].first.id if descendants.size >= DESCENDANTS_LIMIT + end +end diff --git a/app/controllers/custom_css_controller.rb b/app/controllers/custom_css_controller.rb index 6e80feaf8..0a667a6a6 100644 --- a/app/controllers/custom_css_controller.rb +++ b/app/controllers/custom_css_controller.rb @@ -2,10 +2,12 @@ class CustomCssController < ApplicationController skip_before_action :store_current_location + skip_before_action :require_functional! before_action :set_cache_headers def show + expires_in 3.minutes, public: true render plain: Setting.custom_css || '', content_type: 'text/css' end end diff --git a/app/controllers/directories_controller.rb b/app/controllers/directories_controller.rb index 59247a21f..adf2bd014 100644 --- a/app/controllers/directories_controller.rb +++ b/app/controllers/directories_controller.rb @@ -3,13 +3,15 @@ class DirectoriesController < ApplicationController layout 'public' - before_action :check_enabled + before_action :authenticate_user!, if: :whitelist_mode? + before_action :require_enabled! before_action :set_instance_presenter before_action :set_tag, only: :show - before_action :set_tags before_action :set_accounts before_action :set_pack + skip_before_action :require_functional! + def index render :index end @@ -24,21 +26,18 @@ class DirectoriesController < ApplicationController use_pack 'share' end - def check_enabled + def require_enabled! return not_found unless Setting.profile_directory end def set_tag - @tag = Tag.discoverable.find_by!(name: params[:id].downcase) - end - - def set_tags - @tags = Tag.discoverable.limit(30).reject { |tag| tag.cached_sample_accounts.empty? } + @tag = Tag.discoverable.find_normalized!(params[:id]) end def set_accounts - @accounts = Account.discoverable.by_recent_status.page(params[:page]).per(40).tap do |query| + @accounts = Account.local.discoverable.by_recent_status.page(params[:page]).per(20).tap do |query| query.merge!(Account.tagged_with(@tag.id)) if @tag + query.merge!(Account.not_excluded_by_account(current_account)) if current_account end end diff --git a/app/controllers/emojis_controller.rb b/app/controllers/emojis_controller.rb index 3feb08132..41f1e1c5c 100644 --- a/app/controllers/emojis_controller.rb +++ b/app/controllers/emojis_controller.rb @@ -7,9 +7,8 @@ class EmojisController < ApplicationController def show respond_to do |format| format.json do - render_cached_json(['activitypub', 'emoji', @emoji], content_type: 'application/activity+json') do - ActiveModelSerializers::SerializableResource.new(@emoji, serializer: ActivityPub::EmojiSerializer, adapter: ActivityPub::Adapter) - end + expires_in 3.minutes, public: true + render_with_cache json: @emoji, content_type: 'application/activity+json', serializer: ActivityPub::EmojiSerializer, adapter: ActivityPub::Adapter end end end diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb index fab9c8462..df46f5f72 100644 --- a/app/controllers/follower_accounts_controller.rb +++ b/app/controllers/follower_accounts_controller.rb @@ -2,14 +2,19 @@ class FollowerAccountsController < ApplicationController include AccountControllerConcern + include SignatureVerification + before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } before_action :set_cache_headers + skip_around_action :set_locale, if: -> { request.format == :json } + skip_before_action :require_functional! + def index respond_to do |format| format.html do use_pack 'public' - mark_cacheable! unless user_signed_in? + expires_in 0, public: true unless user_signed_in? next if @account.user_hides_network? @@ -18,9 +23,9 @@ class FollowerAccountsController < ApplicationController end format.json do - raise Mastodon::NotPermittedError if params[:page].present? && @account.user_hides_network? + raise Mastodon::NotPermittedError if page_requested? && @account.user_hides_network? - expires_in 3.minutes, public: true if params[:page].blank? + expires_in(page_requested? ? 0 : 3.minutes, public: public_fetch_mode?) render json: collection_presenter, serializer: ActivityPub::CollectionSerializer, @@ -36,6 +41,10 @@ class FollowerAccountsController < ApplicationController @follows ||= Follow.where(target_account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:account) end + def page_requested? + params[:page].present? + end + def page_url(page) account_followers_url(@account, page: page) unless page.nil? end @@ -43,7 +52,7 @@ class FollowerAccountsController < ApplicationController def collection_presenter options = { type: :ordered } options[:size] = @account.followers_count unless Setting.hide_followers_count || @account.user&.setting_hide_followers_count - if params[:page].present? + if page_requested? ActivityPub::CollectionPresenter.new( id: account_followers_url(@account, page: params.fetch(:page, 1)), items: follows.map { |f| ActivityPub::TagManager.instance.uri_for(f.account) }, diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb index 272116040..8cab67ff5 100644 --- a/app/controllers/following_accounts_controller.rb +++ b/app/controllers/following_accounts_controller.rb @@ -2,14 +2,19 @@ class FollowingAccountsController < ApplicationController include AccountControllerConcern + include SignatureVerification + before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } before_action :set_cache_headers + skip_around_action :set_locale, if: -> { request.format == :json } + skip_before_action :require_functional! + def index respond_to do |format| format.html do use_pack 'public' - mark_cacheable! unless user_signed_in? + expires_in 0, public: true unless user_signed_in? next if @account.user_hides_network? @@ -18,9 +23,9 @@ class FollowingAccountsController < ApplicationController end format.json do - raise Mastodon::NotPermittedError if params[:page].present? && @account.user_hides_network? + raise Mastodon::NotPermittedError if page_requested? && @account.user_hides_network? - expires_in 3.minutes, public: true if params[:page].blank? + expires_in(page_requested? ? 0 : 3.minutes, public: public_fetch_mode?) render json: collection_presenter, serializer: ActivityPub::CollectionSerializer, @@ -36,12 +41,16 @@ class FollowingAccountsController < ApplicationController @follows ||= Follow.where(account: @account).recent.page(params[:page]).per(FOLLOW_PER_PAGE).preload(:target_account) end + def page_requested? + params[:page].present? + end + def page_url(page) account_following_index_url(@account, page: page) unless page.nil? end def collection_presenter - if params[:page].present? + if page_requested? ActivityPub::CollectionPresenter.new( id: account_following_index_url(@account, page: params.fetch(:page, 1)), type: :ordered, diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 17cf9e07b..efdb1d226 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -5,7 +5,6 @@ class HomeController < ApplicationController before_action :set_pack before_action :set_referrer_policy_header - before_action :set_initial_state_json def index @body_classes = 'app-body' @@ -23,7 +22,7 @@ class HomeController < ApplicationController when 'statuses' status = Status.find_by(id: matches[2]) - if status && (status.public_visibility? || status.unlisted_visibility?) + if status&.distributable? redirect_to(ActivityPub::TagManager.instance.url_for(status)) return end @@ -45,26 +44,11 @@ class HomeController < ApplicationController use_pack 'home' end - def set_initial_state_json - serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer) - @initial_state_json = serializable_resource.to_json - end - - def initial_state_params - { - settings: Web::Setting.find_by(user: current_user)&.data || {}, - push_subscription: current_account.user.web_push_subscription(current_session), - current_account: current_account, - token: current_session.token, - admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')), - } - end - def default_redirect_path - if request.path.start_with?('/web') + if request.path.start_with?('/web') || whitelist_mode? new_user_session_path elsif single_user_mode? - short_account_path(Account.local.without_suspended.first) + short_account_path(Account.local.without_suspended.where('id > 0').first) else about_path end diff --git a/app/controllers/instance_actors_controller.rb b/app/controllers/instance_actors_controller.rb new file mode 100644 index 000000000..6f02d6a35 --- /dev/null +++ b/app/controllers/instance_actors_controller.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class InstanceActorsController < ApplicationController + include AccountControllerConcern + + skip_around_action :set_locale + + def show + expires_in 10.minutes, public: true + render json: @account, content_type: 'application/activity+json', serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter, fields: restrict_fields_to + end + + private + + def set_account + @account = Account.find(-99) + end + + def restrict_fields_to + %i(id type preferred_username inbox public_key endpoints url manually_approves_followers) + end +end diff --git a/app/controllers/intents_controller.rb b/app/controllers/intents_controller.rb index 9f41cf48a..ca89fc7fe 100644 --- a/app/controllers/intents_controller.rb +++ b/app/controllers/intents_controller.rb @@ -2,6 +2,7 @@ class IntentsController < ApplicationController before_action :check_uri + rescue_from Addressable::URI::InvalidURIError, with: :handle_invalid_uri def show diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb index 52cddc404..0b3c082dc 100644 --- a/app/controllers/invites_controller.rb +++ b/app/controllers/invites_controller.rb @@ -44,11 +44,11 @@ class InvitesController < ApplicationController end def invites - Invite.where(user: current_user).order(id: :desc) + current_user.invites.order(id: :desc) end def resource_params - params.require(:invite).permit(:max_uses, :expires_in, :autofollow) + params.require(:invite).permit(:max_uses, :expires_in, :autofollow, :comment) end def set_body_classes diff --git a/app/controllers/manifests_controller.rb b/app/controllers/manifests_controller.rb index 332d845d8..960510f60 100644 --- a/app/controllers/manifests_controller.rb +++ b/app/controllers/manifests_controller.rb @@ -2,8 +2,10 @@ class ManifestsController < ApplicationController skip_before_action :store_current_location + skip_before_action :require_functional! def show - render json: InstancePresenter.new, serializer: ManifestSerializer + expires_in 3.minutes, public: true + render json: InstancePresenter.new, serializer: ManifestSerializer, root: 'instance' end end diff --git a/app/controllers/media_controller.rb b/app/controllers/media_controller.rb index a245db2d1..05cf09c28 100644 --- a/app/controllers/media_controller.rb +++ b/app/controllers/media_controller.rb @@ -4,9 +4,13 @@ class MediaController < ApplicationController include Authorization skip_before_action :store_current_location + skip_before_action :require_functional! + before_action :authenticate_user!, if: :whitelist_mode? before_action :set_media_attachment before_action :verify_permitted_status! + before_action :check_playable, only: :player + before_action :allow_iframing, only: :player content_security_policy only: :player do |p| p.frame_ancestors(false) @@ -18,8 +22,6 @@ class MediaController < ApplicationController def player @body_classes = 'player' - response.headers['X-Frame-Options'] = 'ALLOWALL' - raise ActiveRecord::RecordNotFound unless @media_attachment.video? || @media_attachment.gifv? end private @@ -31,7 +33,14 @@ class MediaController < ApplicationController def verify_permitted_status! authorize @media_attachment.status, :show? rescue Mastodon::NotPermittedError - # Reraise in order to get a 404 instead of a 403 error code raise ActiveRecord::RecordNotFound end + + def check_playable + not_found unless @media_attachment.larger_media_format? + end + + def allow_iframing + response.headers['X-Frame-Options'] = 'ALLOWALL' + end end diff --git a/app/controllers/media_proxy_controller.rb b/app/controllers/media_proxy_controller.rb index 950cf6d09..014b89de1 100644 --- a/app/controllers/media_proxy_controller.rb +++ b/app/controllers/media_proxy_controller.rb @@ -4,6 +4,13 @@ class MediaProxyController < ApplicationController include RoutingHelper skip_before_action :store_current_location + skip_before_action :require_functional! + + before_action :authenticate_user!, if: :whitelist_mode? + + rescue_from ActiveRecord::RecordInvalid, with: :not_found + rescue_from Mastodon::UnexpectedResponseError, with: :not_found + rescue_from HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError, with: :internal_server_error def show RedisLock.acquire(lock_options) do |lock| @@ -39,6 +46,6 @@ class MediaProxyController < ApplicationController end def reject_media? - DomainBlock.find_by(domain: @media_attachment.account.domain)&.reject_media? + DomainBlock.reject_media?(@media_attachment.account.domain) end end diff --git a/app/controllers/oauth/authorized_applications_controller.rb b/app/controllers/oauth/authorized_applications_controller.rb index 4e45445df..c5ccece13 100644 --- a/app/controllers/oauth/authorized_applications_controller.rb +++ b/app/controllers/oauth/authorized_applications_controller.rb @@ -8,6 +8,8 @@ class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicatio before_action :set_pack before_action :set_body_classes + skip_before_action :require_functional! + include Localized def destroy diff --git a/app/controllers/public_timelines_controller.rb b/app/controllers/public_timelines_controller.rb index c5fe789f4..eb5bb191b 100644 --- a/app/controllers/public_timelines_controller.rb +++ b/app/controllers/public_timelines_controller.rb @@ -4,25 +4,17 @@ class PublicTimelinesController < ApplicationController before_action :set_pack layout 'public' - before_action :check_enabled + before_action :authenticate_user!, if: :whitelist_mode? + before_action :require_enabled! before_action :set_body_classes before_action :set_instance_presenter - def show - respond_to do |format| - format.html do - @initial_state_json = ActiveModelSerializers::SerializableResource.new( - InitialStatePresenter.new(settings: { known_fediverse: Setting.show_known_fediverse_at_about_page }, token: current_session&.token), - serializer: InitialStateSerializer - ).to_json - end - end - end + def show; end private - def check_enabled - raise ActiveRecord::RecordNotFound unless Setting.timeline_preview + def require_enabled! + not_found unless Setting.timeline_preview end def set_body_classes diff --git a/app/controllers/remote_follow_controller.rb b/app/controllers/remote_follow_controller.rb index 17bc1940a..93a0a7476 100644 --- a/app/controllers/remote_follow_controller.rb +++ b/app/controllers/remote_follow_controller.rb @@ -1,13 +1,15 @@ # frozen_string_literal: true class RemoteFollowController < ApplicationController + include AccountOwnedConcern + layout 'modal' - before_action :set_account before_action :set_pack - before_action :gone, if: :suspended_account? before_action :set_body_classes + skip_before_action :require_functional! + def new @remote_follow = RemoteFollow.new(session_params) end @@ -30,21 +32,13 @@ class RemoteFollowController < ApplicationController end def session_params - { acct: session[:remote_follow] } + { acct: session[:remote_follow] || current_account&.username } end def set_pack use_pack 'modal' end - def set_account - @account = Account.find_local!(params[:account_username]) - end - - def suspended_account? - @account.suspended? - end - def set_body_classes @body_classes = 'modal-layout' @hide_header = true diff --git a/app/controllers/remote_interaction_controller.rb b/app/controllers/remote_interaction_controller.rb index d7197d434..e058d0ed5 100644 --- a/app/controllers/remote_interaction_controller.rb +++ b/app/controllers/remote_interaction_controller.rb @@ -5,11 +5,14 @@ class RemoteInteractionController < ApplicationController layout 'modal' + before_action :authenticate_user!, if: :whitelist_mode? before_action :set_interaction_type before_action :set_status before_action :set_body_classes before_action :set_pack + skip_before_action :require_functional! + def new @remote_follow = RemoteFollow.new(session_params) end @@ -32,14 +35,13 @@ class RemoteInteractionController < ApplicationController end def session_params - { acct: session[:remote_follow] } + { acct: session[:remote_follow] || current_account&.username } end def set_status @status = Status.find(params[:id]) authorize @status, :show? rescue Mastodon::NotPermittedError - # Reraise in order to get a 404 raise ActiveRecord::RecordNotFound end diff --git a/app/controllers/remote_unfollows_controller.rb b/app/controllers/remote_unfollows_controller.rb deleted file mode 100644 index af5943363..000000000 --- a/app/controllers/remote_unfollows_controller.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -class RemoteUnfollowsController < ApplicationController - layout 'modal' - - before_action :authenticate_user! - before_action :set_body_classes - - def create - @account = unfollow_attempt.try(:target_account) - - if @account.nil? - render :error - else - render :success - end - rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError - render :error - end - - private - - def unfollow_attempt - username, domain = acct_without_prefix.split('@') - UnfollowService.new.call(current_account, Account.find_remote!(username, domain)) - end - - def acct_without_prefix - acct_params.gsub(/\Aacct:/, '') - end - - def acct_params - params.fetch(:acct, '') - end - - def set_body_classes - @body_classes = 'modal-layout' - end -end diff --git a/app/controllers/settings/aliases_controller.rb b/app/controllers/settings/aliases_controller.rb new file mode 100644 index 000000000..b7c9a409d --- /dev/null +++ b/app/controllers/settings/aliases_controller.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +class Settings::AliasesController < Settings::BaseController + layout 'admin' + + before_action :authenticate_user! + before_action :set_aliases, except: :destroy + before_action :set_alias, only: :destroy + + def index + @alias = current_account.aliases.build + end + + def create + @alias = current_account.aliases.build(resource_params) + + if @alias.save + ActivityPub::UpdateDistributionWorker.perform_async(current_account.id) + redirect_to settings_aliases_path, notice: I18n.t('aliases.created_msg') + else + render :index + end + end + + def destroy + @alias.destroy! + redirect_to settings_aliases_path, notice: I18n.t('aliases.deleted_msg') + end + + private + + def resource_params + params.require(:account_alias).permit(:acct) + end + + def set_alias + @alias = current_account.aliases.find(params[:id]) + end + + def set_aliases + @aliases = current_account.aliases.order(id: :desc).reject(&:new_record?) + end +end diff --git a/app/controllers/settings/applications_controller.rb b/app/controllers/settings/applications_controller.rb index d3ac268d8..ed3f82a8e 100644 --- a/app/controllers/settings/applications_controller.rb +++ b/app/controllers/settings/applications_controller.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true class Settings::ApplicationsController < Settings::BaseController + layout 'admin' + + before_action :authenticate_user! before_action :set_application, only: [:show, :update, :destroy, :regenerate] before_action :prepare_scopes, only: [:create, :update] diff --git a/app/controllers/settings/base_controller.rb b/app/controllers/settings/base_controller.rb index 34ef16568..8c394a6d3 100644 --- a/app/controllers/settings/base_controller.rb +++ b/app/controllers/settings/base_controller.rb @@ -1,12 +1,11 @@ # frozen_string_literal: true class Settings::BaseController < ApplicationController - layout 'admin' - - before_action :authenticate_user! before_action :set_pack before_action :set_body_classes + private + def set_pack use_pack 'settings' end diff --git a/app/controllers/settings/deletes_controller.rb b/app/controllers/settings/deletes_controller.rb index 4c1121471..15a59c999 100644 --- a/app/controllers/settings/deletes_controller.rb +++ b/app/controllers/settings/deletes_controller.rb @@ -1,20 +1,24 @@ # frozen_string_literal: true class Settings::DeletesController < Settings::BaseController + layout 'admin' - prepend_before_action :check_enabled_deletion + before_action :check_enabled_deletion + before_action :authenticate_user! + before_action :require_not_suspended! + + skip_before_action :require_functional! def show @confirmation = Form::DeleteConfirmation.new end def destroy - if current_user.valid_password?(delete_params[:password]) - Admin::SuspensionWorker.perform_async(current_user.account_id, true) - sign_out + if challenge_passed? + destroy_account! redirect_to new_user_session_path, notice: I18n.t('deletes.success_msg') else - redirect_to settings_delete_path, alert: I18n.t('deletes.bad_password_msg') + redirect_to settings_delete_path, alert: I18n.t('deletes.challenge_not_passed') end end @@ -24,7 +28,25 @@ class Settings::DeletesController < Settings::BaseController redirect_to root_path unless Setting.open_deletion end - def delete_params - params.require(:form_delete_confirmation).permit(:password) + def resource_params + params.require(:form_delete_confirmation).permit(:password, :username) + end + + def require_not_suspended! + forbidden if current_account.suspended? + end + + def challenge_passed? + if current_user.encrypted_password.blank? + current_account.username == resource_params[:username] + else + current_user.valid_password?(resource_params[:password]) + end + end + + def destroy_account! + current_account.suspend! + Admin::SuspensionWorker.perform_async(current_user.account_id, true) + sign_out end end diff --git a/app/controllers/settings/exports_controller.rb b/app/controllers/settings/exports_controller.rb index 7f76668d5..0e93d07a9 100644 --- a/app/controllers/settings/exports_controller.rb +++ b/app/controllers/settings/exports_controller.rb @@ -3,6 +3,13 @@ class Settings::ExportsController < Settings::BaseController include Authorization + layout 'admin' + + before_action :authenticate_user! + before_action :require_not_suspended! + + skip_before_action :require_functional! + def show @export = Export.new(current_account) @backups = current_user.backups @@ -30,4 +37,8 @@ class Settings::ExportsController < Settings::BaseController def lock_options { redis: Redis.current, key: "backup:#{current_user.id}" } end + + def require_not_suspended! + forbidden if current_account.suspended? + end end diff --git a/app/controllers/settings/flavours_controller.rb b/app/controllers/settings/flavours_controller.rb index 634387715..62c52eee9 100644 --- a/app/controllers/settings/flavours_controller.rb +++ b/app/controllers/settings/flavours_controller.rb @@ -1,6 +1,12 @@ # frozen_string_literal: true class Settings::FlavoursController < Settings::BaseController + layout 'admin' + + before_action :authenticate_user! + + skip_before_action :require_functional! + def index redirect_to action: 'show', flavour: current_flavour end diff --git a/app/controllers/settings/identity_proofs_controller.rb b/app/controllers/settings/identity_proofs_controller.rb index 4d0938545..e84c1aca6 100644 --- a/app/controllers/settings/identity_proofs_controller.rb +++ b/app/controllers/settings/identity_proofs_controller.rb @@ -61,8 +61,4 @@ class Settings::IdentityProofsController < Settings::BaseController def post_params params.require(:account_identity_proof).permit(:post_status, :status_text) end - - def set_body_classes - @body_classes = '' - end end diff --git a/app/controllers/settings/imports_controller.rb b/app/controllers/settings/imports_controller.rb index dbd136ebe..38f2e39c1 100644 --- a/app/controllers/settings/imports_controller.rb +++ b/app/controllers/settings/imports_controller.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true class Settings::ImportsController < Settings::BaseController + layout 'admin' + + before_action :authenticate_user! before_action :set_account def show diff --git a/app/controllers/settings/migration/redirects_controller.rb b/app/controllers/settings/migration/redirects_controller.rb new file mode 100644 index 000000000..6e5b72ffb --- /dev/null +++ b/app/controllers/settings/migration/redirects_controller.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +class Settings::Migration::RedirectsController < Settings::BaseController + layout 'admin' + + before_action :authenticate_user! + before_action :require_not_suspended! + + skip_before_action :require_functional! + + def new + @redirect = Form::Redirect.new + end + + def create + @redirect = Form::Redirect.new(resource_params.merge(account: current_account)) + + if @redirect.valid_with_challenge?(current_user) + current_account.update!(moved_to_account: @redirect.target_account) + ActivityPub::UpdateDistributionWorker.perform_async(current_account.id) + redirect_to settings_migration_path, notice: I18n.t('migrations.moved_msg', acct: current_account.moved_to_account.acct) + else + render :new + end + end + + def destroy + if current_account.moved_to_account_id.present? + current_account.update!(moved_to_account: nil) + ActivityPub::UpdateDistributionWorker.perform_async(current_account.id) + end + + redirect_to settings_migration_path, notice: I18n.t('migrations.cancelled_msg') + end + + private + + def resource_params + params.require(:form_redirect).permit(:acct, :current_password, :current_username) + end + + def require_not_suspended! + forbidden if current_account.suspended? + end +end diff --git a/app/controllers/settings/migrations_controller.rb b/app/controllers/settings/migrations_controller.rb index 89b3f7246..68304bb51 100644 --- a/app/controllers/settings/migrations_controller.rb +++ b/app/controllers/settings/migrations_controller.rb @@ -1,30 +1,51 @@ # frozen_string_literal: true class Settings::MigrationsController < Settings::BaseController + layout 'admin' + + before_action :authenticate_user! + before_action :require_not_suspended! + before_action :set_migrations + before_action :set_cooldown + + skip_before_action :require_functional! + def show - @migration = Form::Migration.new(account: current_account.moved_to_account) + @migration = current_account.migrations.build end - def update - @migration = Form::Migration.new(resource_params) + def create + @migration = current_account.migrations.build(resource_params) - if @migration.valid? && migration_account_changed? - current_account.update!(moved_to_account: @migration.account) - ActivityPub::UpdateDistributionWorker.perform_async(current_account.id) - redirect_to settings_migration_path, notice: I18n.t('migrations.updated_msg') + if @migration.save_with_challenge(current_user) + MoveService.new.call(@migration) + redirect_to settings_migration_path, notice: I18n.t('migrations.moved_msg', acct: current_account.moved_to_account.acct) else render :show end end + helper_method :on_cooldown? + private def resource_params - params.require(:migration).permit(:acct) + params.require(:account_migration).permit(:acct, :current_password, :current_username) + end + + def set_migrations + @migrations = current_account.migrations.includes(:target_account).order(id: :desc).reject(&:new_record?) + end + + def set_cooldown + @cooldown = current_account.migrations.within_cooldown.first + end + + def on_cooldown? + @cooldown.present? end - def migration_account_changed? - current_account.moved_to_account_id != @migration.account&.id && - current_account.id != @migration.account&.id + def require_not_suspended! + forbidden if current_account.suspended? end end diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index 5103cc50e..75c3e2495 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -1,6 +1,10 @@ # frozen_string_literal: true class Settings::PreferencesController < Settings::BaseController + layout 'admin' + + before_action :authenticate_user! + def show; end def update @@ -45,6 +49,7 @@ class Settings::PreferencesController < Settings::BaseController :setting_expand_spoilers, :setting_reduce_motion, :setting_system_font_ui, + :setting_system_emoji_font, :setting_noindex, :setting_hide_network, :setting_hide_followers_count, @@ -52,7 +57,11 @@ class Settings::PreferencesController < Settings::BaseController :setting_show_application, :setting_advanced_layout, :setting_default_content_type, - notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account), + :setting_use_blurhash, + :setting_use_pending_items, + :setting_trends, + :setting_crop_images, + notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account trending_tag), interactions: %i(must_be_follower must_be_following must_be_following_dm) ) end diff --git a/app/controllers/settings/profiles_controller.rb b/app/controllers/settings/profiles_controller.rb index 76d599f08..8b640cdca 100644 --- a/app/controllers/settings/profiles_controller.rb +++ b/app/controllers/settings/profiles_controller.rb @@ -3,6 +3,9 @@ class Settings::ProfilesController < Settings::BaseController include ObfuscateFilename + layout 'admin' + + before_action :authenticate_user! before_action :set_account obfuscate_filename [:account, :avatar] diff --git a/app/controllers/settings/sessions_controller.rb b/app/controllers/settings/sessions_controller.rb index d74db6000..f8fb4036e 100644 --- a/app/controllers/settings/sessions_controller.rb +++ b/app/controllers/settings/sessions_controller.rb @@ -5,6 +5,8 @@ class Settings::SessionsController < ApplicationController before_action :authenticate_user! before_action :set_session, only: :destroy + skip_before_action :require_functional! + def destroy @session.destroy! flash[:notice] = I18n.t('sessions.revoke_success') diff --git a/app/controllers/settings/two_factor_authentication/confirmations_controller.rb b/app/controllers/settings/two_factor_authentication/confirmations_controller.rb index 8518c61ee..ef4df3339 100644 --- a/app/controllers/settings/two_factor_authentication/confirmations_controller.rb +++ b/app/controllers/settings/two_factor_authentication/confirmations_controller.rb @@ -3,20 +3,30 @@ module Settings module TwoFactorAuthentication class ConfirmationsController < BaseController + include ChallengableConcern + + layout 'admin' + + before_action :authenticate_user! + before_action :require_challenge! before_action :ensure_otp_secret + skip_before_action :require_functional! + def new prepare_two_factor_form end def create - if current_user.validate_and_consume_otp!(confirmation_params[:code]) - flash[:notice] = I18n.t('two_factor_authentication.enabled_success') + if current_user.validate_and_consume_otp!(confirmation_params[:otp_attempt]) + flash.now[:notice] = I18n.t('two_factor_authentication.enabled_success') current_user.otp_required_for_login = true @recovery_codes = current_user.generate_otp_backup_codes! current_user.save! + UserMailer.two_factor_enabled(current_user).deliver_later! + render 'settings/two_factor_authentication/recovery_codes/index' else flash.now[:alert] = I18n.t('two_factor_authentication.wrong_code') @@ -28,7 +38,7 @@ module Settings private def confirmation_params - params.require(:form_two_factor_confirmation).permit(:code) + params.require(:form_two_factor_confirmation).permit(:otp_attempt) end def prepare_two_factor_form diff --git a/app/controllers/settings/two_factor_authentication/recovery_codes_controller.rb b/app/controllers/settings/two_factor_authentication/recovery_codes_controller.rb index 94d1567f3..0c4f5bff7 100644 --- a/app/controllers/settings/two_factor_authentication/recovery_codes_controller.rb +++ b/app/controllers/settings/two_factor_authentication/recovery_codes_controller.rb @@ -3,10 +3,22 @@ module Settings module TwoFactorAuthentication class RecoveryCodesController < BaseController + include ChallengableConcern + + layout 'admin' + + before_action :authenticate_user! + before_action :require_challenge!, on: :create + + skip_before_action :require_functional! + def create @recovery_codes = current_user.generate_otp_backup_codes! current_user.save! - flash[:notice] = I18n.t('two_factor_authentication.recovery_codes_regenerated') + + UserMailer.two_factor_recovery_codes_changed(current_user).deliver_later! + flash.now[:notice] = I18n.t('two_factor_authentication.recovery_codes_regenerated') + render :index end end diff --git a/app/controllers/settings/two_factor_authentications_controller.rb b/app/controllers/settings/two_factor_authentications_controller.rb index 8c7737e9d..9118a7933 100644 --- a/app/controllers/settings/two_factor_authentications_controller.rb +++ b/app/controllers/settings/two_factor_authentications_controller.rb @@ -2,7 +2,15 @@ module Settings class TwoFactorAuthenticationsController < BaseController + include ChallengableConcern + + layout 'admin' + + before_action :authenticate_user! before_action :verify_otp_required, only: [:create] + before_action :require_challenge!, only: [:create] + + skip_before_action :require_functional! def show @confirmation = Form::TwoFactorConfirmation.new @@ -18,6 +26,7 @@ module Settings if acceptable_code? current_user.otp_required_for_login = false current_user.save! + UserMailer.two_factor_disabled(current_user).deliver_later! redirect_to settings_two_factor_authentication_path else flash.now[:alert] = I18n.t('two_factor_authentication.wrong_code') @@ -29,7 +38,7 @@ module Settings private def confirmation_params - params.require(:form_two_factor_confirmation).permit(:code) + params.require(:form_two_factor_confirmation).permit(:otp_attempt) end def verify_otp_required @@ -37,8 +46,8 @@ module Settings end def acceptable_code? - current_user.validate_and_consume_otp!(confirmation_params[:code]) || - current_user.invalidate_otp_backup_code!(confirmation_params[:code]) + current_user.validate_and_consume_otp!(confirmation_params[:otp_attempt]) || + current_user.invalidate_otp_backup_code!(confirmation_params[:otp_attempt]) end end end diff --git a/app/controllers/shares_controller.rb b/app/controllers/shares_controller.rb index ada4eec54..e13e7e8b6 100644 --- a/app/controllers/shares_controller.rb +++ b/app/controllers/shares_controller.rb @@ -7,26 +7,10 @@ class SharesController < ApplicationController before_action :set_pack before_action :set_body_classes - def show - serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer) - @initial_state_json = serializable_resource.to_json - end + def show; end private - def initial_state_params - text = [params[:title], params[:text], params[:url]].compact.join(' ') - - { - settings: Web::Setting.find_by(user: current_user)&.data || {}, - push_subscription: current_account.user.web_push_subscription(current_session), - current_account: current_account, - token: current_session.token, - admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')), - text: text, - } - end - def set_pack use_pack 'share' end diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb index 66ba260aa..1b00d38c9 100644 --- a/app/controllers/statuses_controller.rb +++ b/app/controllers/statuses_controller.rb @@ -1,24 +1,25 @@ # frozen_string_literal: true class StatusesController < ApplicationController + include StatusControllerConcern include SignatureAuthentication include Authorization - - ANCESTORS_LIMIT = 40 - DESCENDANTS_LIMIT = 60 - DESCENDANTS_DEPTH_LIMIT = 20 + include AccountOwnedConcern layout 'public' - before_action :set_account + before_action :require_signature!, only: :show, if: -> { request.format == :json && authorized_fetch_mode? } before_action :set_status before_action :set_instance_presenter before_action :set_link_headers - before_action :check_account_suspension - before_action :redirect_to_original, only: [:show] - before_action :set_referrer_policy_header, only: [:show] + before_action :redirect_to_original, only: :show + before_action :set_referrer_policy_header, only: :show before_action :set_cache_headers - before_action :set_replies, only: [:replies] + before_action :set_body_classes + before_action :set_autoplay, only: :embed + + skip_around_action :set_locale, if: -> { request.format == :json } + skip_before_action :require_functional!, only: [:show, :embed] content_security_policy only: :embed do |p| p.frame_ancestors(false) @@ -30,27 +31,20 @@ class StatusesController < ApplicationController use_pack 'public' expires_in 10.seconds, public: true if current_account.nil? - - @body_classes = 'with-modals' - set_ancestors set_descendants - - render 'stream_entries/show' end format.json do - render_cached_json(['activitypub', 'note', @status], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do - ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::NoteSerializer, adapter: ActivityPub::Adapter) - end + expires_in 3.minutes, public: @status.distributable? && public_fetch_mode? + render_with_cache json: @status, content_type: 'application/activity+json', serializer: ActivityPub::NoteSerializer, adapter: ActivityPub::Adapter end end end def activity - render_cached_json(['activitypub', 'activity', @status], content_type: 'application/activity+json', public: !@stream_entry.hidden?) do - ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::ActivitySerializer, adapter: ActivityPub::Adapter) - end + expires_in 3.minutes, public: @status.distributable? && public_fetch_mode? + render_with_cache json: @status, content_type: 'application/activity+json', serializer: ActivityPub::ActivitySerializer, adapter: ActivityPub::Adapter end def embed @@ -59,130 +53,24 @@ class StatusesController < ApplicationController expires_in 180, public: true response.headers['X-Frame-Options'] = 'ALLOWALL' - @autoplay = ActiveModel::Type::Boolean.new.cast(params[:autoplay]) - - render 'stream_entries/embed', layout: 'embedded' - end - def replies - render json: replies_collection_presenter, - serializer: ActivityPub::CollectionSerializer, - adapter: ActivityPub::Adapter, - content_type: 'application/activity+json', - skip_activities: true + render layout: 'embedded' end private - def replies_collection_presenter - page = ActivityPub::CollectionPresenter.new( - id: replies_account_status_url(@account, @status, page_params), - type: :unordered, - part_of: replies_account_status_url(@account, @status), - next: next_page, - items: @replies.map { |status| status.local ? status : status.id } - ) - if page_requested? - page - else - ActivityPub::CollectionPresenter.new( - id: replies_account_status_url(@account, @status), - type: :unordered, - first: page - ) - end - end - - def create_descendant_thread(starting_depth, statuses) - depth = starting_depth + statuses.size - if depth < DESCENDANTS_DEPTH_LIMIT - { statuses: statuses, starting_depth: starting_depth } - else - next_status = statuses.pop - { statuses: statuses, starting_depth: starting_depth, next_status: next_status } - end - end - - def set_account - @account = Account.find_local!(params[:account_username]) - end - - def set_ancestors - @ancestors = @status.reply? ? cache_collection(@status.ancestors(ANCESTORS_LIMIT, current_account), Status) : [] - @next_ancestor = @ancestors.size < ANCESTORS_LIMIT ? nil : @ancestors.shift - end - - def set_descendants - @max_descendant_thread_id = params[:max_descendant_thread_id]&.to_i - @since_descendant_thread_id = params[:since_descendant_thread_id]&.to_i - - descendants = cache_collection( - @status.descendants( - DESCENDANTS_LIMIT, - current_account, - @max_descendant_thread_id, - @since_descendant_thread_id, - DESCENDANTS_DEPTH_LIMIT - ), - Status - ) - - @descendant_threads = [] - - if descendants.present? - statuses = [descendants.first] - starting_depth = 0 - - descendants.drop(1).each_with_index do |descendant, index| - if descendants[index].id == descendant.in_reply_to_id - statuses << descendant - else - @descendant_threads << create_descendant_thread(starting_depth, statuses) - - # The thread is broken, assume it's a reply to the root status - starting_depth = 0 - - # ... unless we can find its ancestor in one of the already-processed threads - @descendant_threads.reverse_each do |descendant_thread| - statuses = descendant_thread[:statuses] - - index = statuses.find_index do |thread_status| - thread_status.id == descendant.in_reply_to_id - end - - if index.present? - starting_depth = descendant_thread[:starting_depth] + index + 1 - break - end - end - - statuses = [descendant] - end - end - - @descendant_threads << create_descendant_thread(starting_depth, statuses) - end - - @max_descendant_thread_id = @descendant_threads.pop[:statuses].first.id if descendants.size >= DESCENDANTS_LIMIT + def set_body_classes + @body_classes = 'with-modals' end def set_link_headers - response.headers['Link'] = LinkHeader.new( - [ - [account_stream_entry_url(@account, @status.stream_entry, format: 'atom'), [%w(rel alternate), %w(type application/atom+xml)]], - [ActivityPub::TagManager.instance.uri_for(@status), [%w(rel alternate), %w(type application/activity+json)]], - ] - ) + response.headers['Link'] = LinkHeader.new([[ActivityPub::TagManager.instance.uri_for(@status), [%w(rel alternate), %w(type application/activity+json)]]]) end def set_status - @status = @account.statuses.find(params[:id]) - @stream_entry = @status.stream_entry - @type = @stream_entry.activity_type.downcase - + @status = @account.statuses.find(params[:id]) authorize @status, :show? rescue Mastodon::NotPermittedError - # Reraise in order to get a 404 raise ActiveRecord::RecordNotFound end @@ -190,39 +78,15 @@ class StatusesController < ApplicationController @instance_presenter = InstancePresenter.new end - def check_account_suspension - gone if @account.suspended? - end - def redirect_to_original - redirect_to ::TagManager.instance.url_for(@status.reblog) if @status.reblog? + redirect_to ActivityPub::TagManager.instance.url_for(@status.reblog) if @status.reblog? end def set_referrer_policy_header - return if @status.public_visibility? || @status.unlisted_visibility? - response.headers['Referrer-Policy'] = 'origin' - end - - def page_requested? - params[:page] == 'true' - end - - def set_replies - @replies = page_params[:other_accounts] ? Status.where.not(account_id: @account.id) : @account.statuses - @replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted]) - @replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id]) - end - - def next_page - last_reply = @replies.last - return if last_reply.nil? - same_account = last_reply.account_id == @account.id - return unless same_account || @replies.size == DESCENDANTS_LIMIT - same_account = false unless @replies.size == DESCENDANTS_LIMIT - replies_account_status_url(@account, @status, page: true, min_id: last_reply.id, other_accounts: !same_account) + response.headers['Referrer-Policy'] = 'origin' unless @status.distributable? end - def page_params - { page: true, other_accounts: params[:other_accounts], min_id: params[:min_id] }.compact + def set_autoplay + @autoplay = truthy_param?(:autoplay) end end diff --git a/app/controllers/stream_entries_controller.rb b/app/controllers/stream_entries_controller.rb deleted file mode 100644 index 1ee85592c..000000000 --- a/app/controllers/stream_entries_controller.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -class StreamEntriesController < ApplicationController - include Authorization - include SignatureVerification - - layout 'public' - - before_action :set_account - before_action :set_stream_entry - before_action :set_link_headers - before_action :check_account_suspension - before_action :set_cache_headers - - def show - respond_to do |format| - format.html do - use_pack 'public' - - expires_in 5.minutes, public: true unless @stream_entry.hidden? - - redirect_to short_account_status_url(params[:account_username], @stream_entry.activity) - end - - format.atom do - expires_in 3.minutes, public: true unless @stream_entry.hidden? - - render xml: OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.entry(@stream_entry, true)) - end - end - end - - def embed - redirect_to embed_short_account_status_url(@account, @stream_entry.activity), status: 301 - end - - private - - def set_account - @account = Account.find_local!(params[:account_username]) - end - - def set_link_headers - response.headers['Link'] = LinkHeader.new( - [ - [account_stream_entry_url(@account, @stream_entry, format: 'atom'), [%w(rel alternate), %w(type application/atom+xml)]], - [ActivityPub::TagManager.instance.uri_for(@stream_entry.activity), [%w(rel alternate), %w(type application/activity+json)]], - ] - ) - end - - def set_stream_entry - @stream_entry = @account.stream_entries.where(activity_type: 'Status').find(params[:id]) - @type = 'status' - - raise ActiveRecord::RecordNotFound if @stream_entry.activity.nil? - authorize @stream_entry.activity, :show? if @stream_entry.hidden? || @stream_entry.local_only? - rescue Mastodon::NotPermittedError - # Reraise in order to get a 404 - raise ActiveRecord::RecordNotFound - end - - def check_account_suspension - gone if @account.suspended? - end -end diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 5cb048c1a..ef61c980f 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -1,26 +1,30 @@ # frozen_string_literal: true class TagsController < ApplicationController + include SignatureVerification + PAGE_SIZE = 20 layout 'public' + before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? } + before_action :authenticate_user!, if: :whitelist_mode? + before_action :set_tag before_action :set_body_classes before_action :set_instance_presenter - def show - @tag = Tag.find_normalized!(params[:id]) + skip_before_action :require_functional! + def show respond_to do |format| format.html do use_pack 'about' - @initial_state_json = ActiveModelSerializers::SerializableResource.new( - InitialStatePresenter.new(settings: {}, token: current_session&.token), - serializer: InitialStateSerializer - ).to_json + expires_in 0, public: true end format.rss do + expires_in 0, public: true + @statuses = HashtagQueryService.new.call(@tag, params.slice(:any, :all, :none)).limit(PAGE_SIZE) @statuses = cache_collection(@statuses, Status) @@ -28,19 +32,22 @@ class TagsController < ApplicationController end format.json do + expires_in 3.minutes, public: public_fetch_mode? + @statuses = HashtagQueryService.new.call(@tag, params.slice(:any, :all, :none), current_account, params[:local]).paginate_by_max_id(PAGE_SIZE, params[:max_id]) @statuses = cache_collection(@statuses, Status) - render json: collection_presenter, - serializer: ActivityPub::CollectionSerializer, - adapter: ActivityPub::Adapter, - content_type: 'application/activity+json' + render json: collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json' end end end private + def set_tag + @tag = Tag.usable.find_normalized!(params[:id]) + end + def set_body_classes @body_classes = 'with-modals' end diff --git a/app/controllers/well_known/host_meta_controller.rb b/app/controllers/well_known/host_meta_controller.rb index 5fb70288a..2e9298c4a 100644 --- a/app/controllers/well_known/host_meta_controller.rb +++ b/app/controllers/well_known/host_meta_controller.rb @@ -13,7 +13,7 @@ module WellKnown format.xml { render content_type: 'application/xrd+xml' } end - expires_in(3.days, public: true) + expires_in 3.days, public: true end end end diff --git a/app/controllers/well_known/keybase_proof_config_controller.rb b/app/controllers/well_known/keybase_proof_config_controller.rb index c78683a8d..03232df2d 100644 --- a/app/controllers/well_known/keybase_proof_config_controller.rb +++ b/app/controllers/well_known/keybase_proof_config_controller.rb @@ -5,7 +5,7 @@ module WellKnown before_action :check_enabled def show - render json: {}, serializer: ProofProvider::Keybase::ConfigSerializer + render json: {}, serializer: ProofProvider::Keybase::ConfigSerializer, root: 'keybase_config' end private diff --git a/app/controllers/well_known/nodeinfo_controller.rb b/app/controllers/well_known/nodeinfo_controller.rb new file mode 100644 index 000000000..11a699ebc --- /dev/null +++ b/app/controllers/well_known/nodeinfo_controller.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module WellKnown + class NodeInfoController < ActionController::Base + include CacheConcern + + before_action { response.headers['Vary'] = 'Accept' } + + def index + expires_in 3.days, public: true + render_with_cache json: {}, serializer: NodeInfo::DiscoverySerializer, adapter: NodeInfo::Adapter, expires_in: 3.days, root: 'nodeinfo' + end + + def show + expires_in 30.minutes, public: true + render_with_cache json: {}, serializer: NodeInfo::Serializer, adapter: NodeInfo::Adapter, expires_in: 30.minutes, root: 'nodeinfo' + end + end +end diff --git a/app/controllers/well_known/webfinger_controller.rb b/app/controllers/well_known/webfinger_controller.rb index 28654b61d..480e58f3f 100644 --- a/app/controllers/well_known/webfinger_controller.rb +++ b/app/controllers/well_known/webfinger_controller.rb @@ -5,34 +5,26 @@ module WellKnown include RoutingHelper before_action { response.headers['Vary'] = 'Accept' } + before_action :set_account + before_action :check_account_suspension - def show - @account = Account.find_local!(username_from_resource) - - respond_to do |format| - format.any(:json, :html) do - render json: @account, serializer: WebfingerSerializer, content_type: 'application/jrd+json' - end + rescue_from ActiveRecord::RecordNotFound, ActionController::ParameterMissing, with: :not_found - format.xml do - render content_type: 'application/xrd+xml' - end - end - - expires_in(3.days, public: true) - rescue ActiveRecord::RecordNotFound - head 404 + def show + expires_in 3.days, public: true + render json: @account, serializer: WebfingerSerializer, content_type: 'application/jrd+json' end private - def username_from_resource - resource_user = resource_param + def set_account + @account = Account.find_local!(username_from_resource) + end + def username_from_resource + resource_user = resource_param username, domain = resource_user.split('@') - if Rails.configuration.x.alternate_domains.include?(domain) - resource_user = "#{username}@#{Rails.configuration.x.local_domain}" - end + resource_user = "#{username}@#{Rails.configuration.x.local_domain}" if Rails.configuration.x.alternate_domains.include?(domain) WebfingerResource.new(resource_user).username end @@ -40,5 +32,17 @@ module WellKnown def resource_param params.require(:resource) end + + def check_account_suspension + expires_in(3.minutes, public: true) && gone if @account.suspended? + end + + def not_found + head 404 + end + + def gone + head 410 + end end end diff --git a/app/helpers/accounts_helper.rb b/app/helpers/accounts_helper.rb new file mode 100644 index 000000000..7fcc4e816 --- /dev/null +++ b/app/helpers/accounts_helper.rb @@ -0,0 +1,114 @@ +# frozen_string_literal: true + +module AccountsHelper + def display_name(account, **options) + if options[:custom_emojify] + Formatter.instance.format_display_name(account, options) + else + account.display_name.presence || account.username + end + end + + def acct(account) + if account.local? + "@#{account.acct}@#{Rails.configuration.x.local_domain}" + else + "@#{account.acct}" + end + end + + def account_action_button(account) + if user_signed_in? + if account.id == current_user.account_id + link_to settings_profile_url, class: 'button logo-button' do + safe_join([svg_logo, t('settings.edit_profile')]) + end + elsif current_account.following?(account) || current_account.requested?(account) + link_to account_unfollow_path(account), class: 'button logo-button button--destructive', data: { method: :post } do + safe_join([svg_logo, t('accounts.unfollow')]) + end + elsif !(account.memorial? || account.moved?) + link_to account_follow_path(account), class: "button logo-button#{account.blocking?(current_account) ? ' disabled' : ''}", data: { method: :post } do + safe_join([svg_logo, t('accounts.follow')]) + end + end + elsif !(account.memorial? || account.moved?) + link_to account_remote_follow_path(account), class: 'button logo-button modal-button', target: '_new' do + safe_join([svg_logo, t('accounts.follow')]) + end + end + end + + def minimal_account_action_button(account) + if user_signed_in? + return if account.id == current_user.account_id + + if current_account.following?(account) || current_account.requested?(account) + link_to account_unfollow_path(account), class: 'icon-button active', data: { method: :post }, title: t('accounts.unfollow') do + fa_icon('user-times fw') + end + elsif !(account.memorial? || account.moved?) + link_to account_follow_path(account), class: "icon-button#{account.blocking?(current_account) ? ' disabled' : ''}", data: { method: :post }, title: t('accounts.follow') do + fa_icon('user-plus fw') + end + end + elsif !(account.memorial? || account.moved?) + link_to account_remote_follow_path(account), class: 'icon-button modal-button', target: '_new', title: t('accounts.follow') do + fa_icon('user-plus fw') + end + end + end + + def account_badge(account, all: false) + if account.bot? + content_tag(:div, content_tag(:div, t('accounts.roles.bot'), class: 'account-role bot'), class: 'roles') + elsif account.group? + content_tag(:div, content_tag(:div, t('accounts.roles.group'), class: 'account-role group'), class: 'roles') + elsif (Setting.show_staff_badge && account.user_staff?) || all + content_tag(:div, class: 'roles') do + if all && !account.user_staff? + content_tag(:div, t('admin.accounts.roles.user'), class: 'account-role') + elsif account.user_admin? + content_tag(:div, t('accounts.roles.admin'), class: 'account-role admin') + elsif account.user_moderator? + content_tag(:div, t('accounts.roles.moderator'), class: 'account-role moderator') + end + end + end + end + + def hide_followers_count?(account) + Setting.hide_followers_count || account.user&.setting_hide_followers_count + end + + def account_description(account) + prepend_stats = [ + [ + number_to_human(account.statuses_count, strip_insignificant_zeros: true), + I18n.t('accounts.posts', count: account.statuses_count), + ].join(' '), + + [ + number_to_human(account.following_count, strip_insignificant_zeros: true), + I18n.t('accounts.following', count: account.following_count), + ].join(' '), + ] + + unless hide_followers_count?(account) + prepend_stats << [ + number_to_human(account.followers_count, strip_insignificant_zeros: true), + I18n.t('accounts.followers', count: account.followers_count), + ].join(' ') + end + + [prepend_stats.join(', '), account.note].join(' · ') + end + + def svg_logo + content_tag(:svg, tag(:use, 'xlink:href' => '#mastodon-svg-logo'), 'viewBox' => '0 0 216.4144 232.00976') + end + + def svg_logo_full + content_tag(:svg, tag(:use, 'xlink:href' => '#mastodon-svg-logo-full'), 'viewBox' => '0 0 713.35878 175.8678') + end +end diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index e5fbb1500..608a99dd5 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -44,6 +44,8 @@ module Admin::ActionLogsHelper 'flag' when 'DomainBlock' 'lock' + when 'DomainAllow' + 'plus-circle' when 'EmailDomainBlock' 'envelope' when 'Status' @@ -86,10 +88,10 @@ module Admin::ActionLogsHelper record.shortcode when 'Report' link_to "##{record.id}", admin_report_path(record) - when 'DomainBlock', 'EmailDomainBlock' + when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock' link_to record.domain, "https://#{record.domain}" when 'Status' - link_to record.account.acct, TagManager.instance.url_for(record) + link_to record.account.acct, ActivityPub::TagManager.instance.url_for(record) when 'AccountWarning' link_to record.target_account.acct, admin_account_path(record.target_account_id) end @@ -99,7 +101,7 @@ module Admin::ActionLogsHelper case type when 'CustomEmoji' attributes['shortcode'] - when 'DomainBlock', 'EmailDomainBlock' + when 'DomainBlock', 'DomainAllow', 'EmailDomainBlock' link_to attributes['domain'], "https://#{attributes['domain']}" when 'Status' tmp_status = Status.new(attributes.except('reblogs_count', 'favourites_count')) diff --git a/app/helpers/admin/filter_helper.rb b/app/helpers/admin/filter_helper.rb index 0bda25974..fc4f15985 100644 --- a/app/helpers/admin/filter_helper.rb +++ b/app/helpers/admin/filter_helper.rb @@ -2,18 +2,19 @@ module Admin::FilterHelper ACCOUNT_FILTERS = %i(local remote by_domain active pending silenced suspended username display_name email ip staff).freeze - REPORT_FILTERS = %i(resolved account_id target_account_id).freeze + REPORT_FILTERS = %i(resolved account_id target_account_id by_target_domain).freeze INVITE_FILTER = %i(available expired).freeze CUSTOM_EMOJI_FILTERS = %i(local remote by_domain shortcode).freeze - TAGS_FILTERS = %i(hidden).freeze + TAGS_FILTERS = %i(directory reviewed unreviewed pending_review popular active name).freeze INSTANCES_FILTERS = %i(limited by_domain).freeze FOLLOWERS_FILTERS = %i(relationship status by_domain activity order).freeze FILTERS = ACCOUNT_FILTERS + REPORT_FILTERS + INVITE_FILTER + CUSTOM_EMOJI_FILTERS + TAGS_FILTERS + INSTANCES_FILTERS + FOLLOWERS_FILTERS def filter_link_to(text, link_to_params, link_class_params = link_to_params) - new_url = filtered_url_for(link_to_params) + new_url = filtered_url_for(link_to_params) new_class = filtered_url_for(link_class_params) + link_to text, new_url, class: filter_link_class(new_class) end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7ae1e5d0b..40f914f1e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -77,8 +77,12 @@ module ApplicationHelper content_tag(:i, nil, attributes.merge(class: class_names.join(' '))) end - def custom_emoji_tag(custom_emoji) - image_tag(custom_emoji.image.url, class: 'emojione', alt: ":#{custom_emoji.shortcode}:") + def custom_emoji_tag(custom_emoji, animate = true) + if animate + image_tag(custom_emoji.image.url, class: 'emojione', alt: ":#{custom_emoji.shortcode}:") + else + image_tag(custom_emoji.image.url(:static), class: 'emojione custom-emoji', alt: ":#{custom_emoji.shortcode}", 'data-original' => full_asset_url(custom_emoji.image.url), 'data-static' => full_asset_url(custom_emoji.image.url(:static))) + end end def opengraph(property, content) @@ -123,4 +127,25 @@ module ApplicationHelper text = word_wrap(text, line_width: line_width - 2, break_sequence: break_sequence) text.split("\n").map { |line| '> ' + line }.join("\n") end + + def render_initial_state + state_params = { + settings: { + known_fediverse: Setting.show_known_fediverse_at_about_page, + }, + + text: [params[:title], params[:text], params[:url]].compact.join(' '), + } + + if user_signed_in? + state_params[:settings] = state_params[:settings].merge(Web::Setting.find_by(user: current_user)&.data || {}) + state_params[:push_subscription] = current_account.user.web_push_subscription(current_session) + state_params[:current_account] = current_account + state_params[:token] = current_session.token + state_params[:admin] = Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')) + end + + json = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(state_params), serializer: InitialStateSerializer).to_json + content_tag(:script, json_escape(json).html_safe, id: 'initial-state', type: 'application/json') + end end diff --git a/app/helpers/domain_control_helper.rb b/app/helpers/domain_control_helper.rb new file mode 100644 index 000000000..ac60cad29 --- /dev/null +++ b/app/helpers/domain_control_helper.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module DomainControlHelper + def domain_not_allowed?(uri_or_domain) + return if uri_or_domain.blank? + + domain = begin + if uri_or_domain.include?('://') + Addressable::URI.parse(uri_or_domain).host + else + uri_or_domain + end + end + + if whitelist_mode? + !DomainAllow.allowed?(domain) + else + DomainBlock.blocked?(domain) + end + end + + def whitelist_mode? + Rails.configuration.x.whitelist_mode + end +end diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb index df60b7dd7..b66e827fe 100644 --- a/app/helpers/home_helper.rb +++ b/app/helpers/home_helper.rb @@ -21,7 +21,7 @@ module HomeHelper end end else - link_to(path || TagManager.instance.url_for(account), class: 'account__display-name') do + link_to(path || ActivityPub::TagManager.instance.url_for(account), class: 'account__display-name') do content_tag(:div, class: 'account__avatar-wrapper') do content_tag(:div, '', class: 'account__avatar', style: "width: #{size}px; height: #{size}px; background-size: #{size}px #{size}px; background-image: url(#{full_asset_url(current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url)})") end + diff --git a/app/helpers/instance_helper.rb b/app/helpers/instance_helper.rb index dd0b25f3e..daacb535b 100644 --- a/app/helpers/instance_helper.rb +++ b/app/helpers/instance_helper.rb @@ -8,4 +8,16 @@ module InstanceHelper def site_hostname @site_hostname ||= Addressable::URI.parse("//#{Rails.configuration.x.local_domain}").display_uri.host end + + def description_for_sign_up + prefix = begin + if @invite.present? + I18n.t('auth.description.prefix_invited_by_user', name: @invite.user.account.username) + else + I18n.t('auth.description.prefix_sign_up') + end + end + + safe_join([prefix, I18n.t('auth.description.suffix')], ' ') + end end diff --git a/app/helpers/jsonld_helper.rb b/app/helpers/jsonld_helper.rb index 5b4011275..1c473efa3 100644 --- a/app/helpers/jsonld_helper.rb +++ b/app/helpers/jsonld_helper.rb @@ -16,13 +16,15 @@ module JsonLdHelper # The url attribute can be a string, an array of strings, or an array of objects. # The objects could include a mimeType. Not-included mimeType means it's text/html. def url_to_href(value, preferred_type = nil) - single_value = if value.is_a?(Array) && !value.first.is_a?(String) - value.find { |link| preferred_type.nil? || ((link['mimeType'].presence || 'text/html') == preferred_type) } - elsif value.is_a?(Array) - value.first - else - value - end + single_value = begin + if value.is_a?(Array) && !value.first.is_a?(String) + value.find { |link| preferred_type.nil? || ((link['mimeType'].presence || 'text/html') == preferred_type) } + elsif value.is_a?(Array) + value.first + else + value + end + end if single_value.nil? || single_value.is_a?(String) single_value @@ -64,7 +66,9 @@ module JsonLdHelper def fetch_resource(uri, id, on_behalf_of = nil) unless id json = fetch_resource_without_id_validation(uri, on_behalf_of) + return unless json + uri = json['id'] end @@ -73,25 +77,20 @@ module JsonLdHelper end def fetch_resource_without_id_validation(uri, on_behalf_of = nil, raise_on_temporary_error = false) + on_behalf_of ||= Account.representative + build_request(uri, on_behalf_of).perform do |response| - unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error - raise Mastodon::UnexpectedResponseError, response - end - return body_to_json(response.body_with_limit) if response.code == 200 - end - # If request failed, retry without doing it on behalf of a user - return if on_behalf_of.nil? - build_request(uri).perform do |response| - unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error - raise Mastodon::UnexpectedResponseError, response - end - response.code == 200 ? body_to_json(response.body_with_limit) : nil + raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error + + body_to_json(response.body_with_limit) if response.code == 200 end end def body_to_json(body, compare_id: nil) json = body.is_a?(String) ? Oj.load(body, mode: :strict) : body + return if compare_id.present? && json['id'] != compare_id + json rescue Oj::ParseError nil @@ -105,35 +104,34 @@ module JsonLdHelper end end - private - def response_successful?(response) (200...300).cover?(response.code) end def response_error_unsalvageable?(response) - (400...500).cover?(response.code) && response.code != 429 + response.code == 501 || ((400...500).cover?(response.code) && ![401, 408, 429].include?(response.code)) end def build_request(uri, on_behalf_of = nil) - request = Request.new(:get, uri) - request.on_behalf_of(on_behalf_of) if on_behalf_of - request.add_headers('Accept' => 'application/activity+json, application/ld+json') - request + Request.new(:get, uri).tap do |request| + request.on_behalf_of(on_behalf_of) if on_behalf_of + request.add_headers('Accept' => 'application/activity+json, application/ld+json') + end end def load_jsonld_context(url, _options = {}, &_block) json = Rails.cache.fetch("jsonld:context:#{url}", expires_in: 30.days, raw: true) do request = Request.new(:get, url) request.add_headers('Accept' => 'application/ld+json') - request.perform do |res| raise JSON::LD::JsonLdError::LoadingDocumentFailed unless res.code == 200 && res.mime_type == 'application/ld+json' + res.body_with_limit end end - doc = JSON::LD::API::RemoteDocument.new(url, json) + doc = JSON::LD::API::RemoteDocument.new(json, documentUrl: url) + block_given? ? yield(doc) : doc end end diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 92bc222ea..39eb4180e 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -2,11 +2,11 @@ module SettingsHelper HUMAN_LOCALES = { - en: 'English', ar: 'العربية', ast: 'Asturianu', bg: 'Български', bn: 'বাংলা', + br: 'Breton', ca: 'Català', co: 'Corsu', cs: 'Čeština', @@ -14,8 +14,11 @@ module SettingsHelper da: 'Dansk', de: 'Deutsch', el: 'Ελληνικά', + en: 'English', eo: 'Esperanto', + 'es-AR': 'Español (Argentina)', es: 'Español', + et: 'Eesti', eu: 'Euskara', fa: 'فارسی', fi: 'Suomi', @@ -33,34 +36,40 @@ module SettingsHelper ja: '日本語', ka: 'ქართული', kk: 'Қазақша', + kn: 'ಕನ್ನಡ', ko: '한국어', lt: 'Lietuvių', lv: 'Latviešu', + mk: 'Македонски', ml: 'മലയാളം', + mr: 'मराठी', ms: 'Bahasa Melayu', nl: 'Nederlands', + nn: 'Nynorsk', no: 'Norsk', oc: 'Occitan', pl: 'Polski', + 'pt-BR': 'Português (Brasil)', + 'pt-PT': 'Português (Portugal)', pt: 'Português', - 'pt-BR': 'Português do Brasil', ro: 'Română', ru: 'Русский', sk: 'Slovenčina', sl: 'Slovenščina', sq: 'Shqip', - sr: 'Српски', 'sr-Latn': 'Srpski (latinica)', + sr: 'Српски', sv: 'Svenska', ta: 'தமிழ்', te: 'తెలుగు', th: 'ไทย', tr: 'Türkçe', uk: 'Українська', - zh: '中文', + ur: 'اُردُو', 'zh-CN': '简体中文', 'zh-HK': '繁體中文(香港)', 'zh-TW': '繁體中文(臺灣)', + zh: '中文', }.freeze def human_locale(locale) @@ -86,4 +95,12 @@ module SettingsHelper 'desktop' end end + + def compact_account_link_to(account) + return if account.nil? + + link_to ActivityPub::TagManager.instance.url_for(account), class: 'name-tag', title: account.acct do + safe_join([image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'), content_tag(:span, account.acct, class: 'username')], ' ') + end + end end diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/statuses_helper.rb index 6a71f1c02..866a9902c 100644 --- a/app/helpers/stream_entries_helper.rb +++ b/app/helpers/statuses_helper.rb @@ -1,63 +1,9 @@ # frozen_string_literal: true -module StreamEntriesHelper +module StatusesHelper EMBEDDED_CONTROLLER = 'statuses' EMBEDDED_ACTION = 'embed' - def display_name(account, **options) - if options[:custom_emojify] - Formatter.instance.format_display_name(account, options) - else - account.display_name.presence || account.username - end - end - - def account_action_button(account) - if user_signed_in? - if account.id == current_user.account_id - link_to settings_profile_url, class: 'button logo-button' do - safe_join([svg_logo, t('settings.edit_profile')]) - end - elsif current_account.following?(account) || current_account.requested?(account) - link_to account_unfollow_path(account), class: 'button logo-button button--destructive', data: { method: :post } do - safe_join([svg_logo, t('accounts.unfollow')]) - end - elsif !(account.memorial? || account.moved?) - link_to account_follow_path(account), class: "button logo-button#{account.blocking?(current_account) ? ' disabled' : ''}", data: { method: :post } do - safe_join([svg_logo, t('accounts.follow')]) - end - end - elsif !(account.memorial? || account.moved?) - link_to account_remote_follow_path(account), class: 'button logo-button modal-button', target: '_new' do - safe_join([svg_logo, t('accounts.follow')]) - end - end - end - - def svg_logo - content_tag(:svg, tag(:use, 'xlink:href' => '#mastodon-svg-logo'), 'viewBox' => '0 0 216.4144 232.00976') - end - - def svg_logo_full - content_tag(:svg, tag(:use, 'xlink:href' => '#mastodon-svg-logo-full'), 'viewBox' => '0 0 713.35878 175.8678') - end - - def account_badge(account, all: false) - if account.bot? - content_tag(:div, content_tag(:div, t('accounts.roles.bot'), class: 'account-role bot'), class: 'roles') - elsif (Setting.show_staff_badge && account.user_staff?) || all - content_tag(:div, class: 'roles') do - if all && !account.user_staff? - content_tag(:div, t('admin.accounts.roles.user'), class: 'account-role') - elsif account.user_admin? - content_tag(:div, t('accounts.roles.admin'), class: 'account-role admin') - elsif account.user_moderator? - content_tag(:div, t('accounts.roles.moderator'), class: 'account-role moderator') - end - end - end - end - def link_to_more(url) link_to t('statuses.show_more'), url, class: 'load-more load-gap' end @@ -68,33 +14,6 @@ module StreamEntriesHelper end end - def hide_followers_count?(account) - Setting.hide_followers_count || account.user&.setting_hide_followers_count - end - - def account_description(account) - prepend_stats = [ - [ - number_to_human(account.statuses_count, strip_insignificant_zeros: true), - I18n.t('accounts.posts', count: account.statuses_count), - ].join(' '), - - [ - number_to_human(account.following_count, strip_insignificant_zeros: true), - I18n.t('accounts.following', count: account.following_count), - ].join(' '), - ] - - unless hide_followers_count?(account) - prepend_stats << [ - number_to_human(account.followers_count, strip_insignificant_zeros: true), - I18n.t('accounts.followers', count: account.followers_count), - ].join(' ') - end - - [prepend_stats.join(', '), account.note].join(' · ') - end - def media_summary(status) attachments = { image: 0, video: 0 } @@ -115,11 +34,13 @@ module StreamEntriesHelper def status_text_summary(status) return if status.spoiler_text.blank? + I18n.t('statuses.content_warning', warning: status.spoiler_text) end def poll_summary(status) return unless status.preloadable_poll + status.preloadable_poll.options.map { |o| "[ ] #{o}" }.join("\n") end @@ -138,14 +59,6 @@ module StreamEntriesHelper embedded_view? ? '_blank' : nil end - def acct(account) - if account.local? - "@#{account.acct}@#{Rails.configuration.x.local_domain}" - else - "@#{account.acct}" - end - end - def style_classes(status, is_predecessor, is_successor, include_threads) classes = ['entry'] classes << 'entry-predecessor' if is_predecessor diff --git a/app/javascript/core/admin.js b/app/javascript/core/admin.js index 3f6f187bc..ffdabe674 100644 --- a/app/javascript/core/admin.js +++ b/app/javascript/core/admin.js @@ -1,6 +1,7 @@ // This file will be loaded on admin pages, regardless of theme. import { delegate } from 'rails-ujs'; +import ready from '../mastodon/ready'; const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]'; @@ -31,7 +32,7 @@ delegate(document, '.media-spoiler-hide-button', 'click', () => { }); }); -delegate(document, '#domain_block_severity', 'change', ({ target }) => { +const onDomainBlockSeverityChange = (target) => { const rejectMediaDiv = document.querySelector('.input.with_label.domain_block_reject_media'); const rejectReportsDiv = document.querySelector('.input.with_label.domain_block_reject_reports'); @@ -42,4 +43,11 @@ delegate(document, '#domain_block_severity', 'change', ({ target }) => { if (rejectReportsDiv) { rejectReportsDiv.style.display = (target.value === 'suspend') ? 'none' : 'block'; } +}; + +delegate(document, '#domain_block_severity', 'change', ({ target }) => onDomainBlockSeverityChange(target)); + +ready(() => { + const input = document.getElementById('domain_block_severity'); + if (input) onDomainBlockSeverityChange(input); }); diff --git a/app/javascript/core/public.js b/app/javascript/core/public.js index 33b7a207d..0f4222139 100644 --- a/app/javascript/core/public.js +++ b/app/javascript/core/public.js @@ -47,7 +47,7 @@ const getProfileAvatarAnimationHandler = (swapTo) => { return ({ target }) => { const swapSrc = target.getAttribute(swapTo); //only change the img source if autoplay is off and the image src is actually different - if(target.getAttribute('data-autoplay') === 'false' && target.src !== swapSrc) { + if(target.getAttribute('data-autoplay') !== 'true' && target.src !== swapSrc) { target.src = swapSrc; } }; diff --git a/app/javascript/flavours/glitch/actions/alerts.js b/app/javascript/flavours/glitch/actions/alerts.js index ef2500e7b..cd36d8007 100644 --- a/app/javascript/flavours/glitch/actions/alerts.js +++ b/app/javascript/flavours/glitch/actions/alerts.js @@ -3,6 +3,8 @@ import { defineMessages } from 'react-intl'; const messages = defineMessages({ unexpectedTitle: { id: 'alert.unexpected.title', defaultMessage: 'Oops!' }, unexpectedMessage: { id: 'alert.unexpected.message', defaultMessage: 'An unexpected error occurred.' }, + rateLimitedTitle: { id: 'alert.rate_limited.title', defaultMessage: 'Rate limited' }, + rateLimitedMessage: { id: 'alert.rate_limited.message', defaultMessage: 'Please retry after {retry_time, time, medium}.' }, }); export const ALERT_SHOW = 'ALERT_SHOW'; @@ -23,23 +25,29 @@ export function clearAlert() { }; }; -export function showAlert(title = messages.unexpectedTitle, message = messages.unexpectedMessage) { +export function showAlert(title = messages.unexpectedTitle, message = messages.unexpectedMessage, message_values = undefined) { return { type: ALERT_SHOW, title, message, + message_values, }; }; export function showAlertForError(error) { if (error.response) { - const { data, status, statusText } = error.response; + const { data, status, statusText, headers } = error.response; if (status === 404 || status === 410) { // Skip these errors as they are reflected in the UI return { type: ALERT_NOOP }; } + if (status === 429 && headers['x-ratelimit-reset']) { + const reset_date = new Date(headers['x-ratelimit-reset']); + return showAlert(messages.rateLimitedTitle, messages.rateLimitedMessage, { 'retry_time': reset_date }); + } + let message = statusText; let title = `${status}`; diff --git a/app/javascript/flavours/glitch/actions/blocks.js b/app/javascript/flavours/glitch/actions/blocks.js index 498ce519f..adae9d83c 100644 --- a/app/javascript/flavours/glitch/actions/blocks.js +++ b/app/javascript/flavours/glitch/actions/blocks.js @@ -1,6 +1,7 @@ import api, { getLinks } from 'flavours/glitch/util/api'; import { fetchRelationships } from './accounts'; import { importFetchedAccounts } from './importer'; +import { openModal } from './modal'; export const BLOCKS_FETCH_REQUEST = 'BLOCKS_FETCH_REQUEST'; export const BLOCKS_FETCH_SUCCESS = 'BLOCKS_FETCH_SUCCESS'; @@ -10,6 +11,8 @@ export const BLOCKS_EXPAND_REQUEST = 'BLOCKS_EXPAND_REQUEST'; export const BLOCKS_EXPAND_SUCCESS = 'BLOCKS_EXPAND_SUCCESS'; export const BLOCKS_EXPAND_FAIL = 'BLOCKS_EXPAND_FAIL'; +export const BLOCKS_INIT_MODAL = 'BLOCKS_INIT_MODAL'; + export function fetchBlocks() { return (dispatch, getState) => { dispatch(fetchBlocksRequest()); @@ -83,3 +86,14 @@ export function expandBlocksFail(error) { error, }; }; + +export function initBlockModal(account) { + return dispatch => { + dispatch({ + type: BLOCKS_INIT_MODAL, + account, + }); + + dispatch(openModal('BLOCK')); + }; +} diff --git a/app/javascript/flavours/glitch/actions/compose.js b/app/javascript/flavours/glitch/actions/compose.js index 69cc6827f..f80642bd8 100644 --- a/app/javascript/flavours/glitch/actions/compose.js +++ b/app/javascript/flavours/glitch/actions/compose.js @@ -12,7 +12,7 @@ import { showAlertForError } from './alerts'; import { showAlert } from './alerts'; import { defineMessages } from 'react-intl'; -let cancelFetchComposeSuggestionsAccounts; +let cancelFetchComposeSuggestionsAccounts, cancelFetchComposeSuggestionsTags; export const COMPOSE_CHANGE = 'COMPOSE_CHANGE'; export const COMPOSE_CYCLE_ELEFRIEND = 'COMPOSE_CYCLE_ELEFRIEND'; @@ -138,7 +138,8 @@ export function submitCompose(routerHistory) { return function (dispatch, getState) { let status = getState().getIn(['compose', 'text'], ''); let media = getState().getIn(['compose', 'media_attachments']); - let spoilerText = getState().getIn(['compose', 'spoiler_text'], ''); + const spoilers = getState().getIn(['compose', 'spoiler']) || getState().getIn(['local_settings', 'always_show_spoilers_field']); + let spoilerText = spoilers ? getState().getIn(['compose', 'spoiler_text'], '') : ''; if ((!status || !status.length) && media.size === 0) { return; @@ -231,10 +232,11 @@ export function uploadCompose(files) { return function (dispatch, getState) { const uploadLimit = 4; const media = getState().getIn(['compose', 'media_attachments']); + const pending = getState().getIn(['compose', 'pending_media_attachments']); const progress = new Array(files.length).fill(0); let total = Array.from(files).reduce((a, v) => a + v.size, 0); - if (files.length + media.size > uploadLimit) { + if (files.length + media.size + pending > uploadLimit) { dispatch(showAlert(undefined, messages.uploadErrorLimit)); return; } @@ -260,7 +262,7 @@ export function uploadCompose(files) { progress[i] = loaded; dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total)); }, - }).then(({ data }) => dispatch(uploadComposeSuccess(data))); + }).then(({ data }) => dispatch(uploadComposeSuccess(data, f))); }).catch(error => dispatch(uploadComposeFail(error))); }; }; @@ -315,10 +317,11 @@ export function uploadComposeProgress(loaded, total) { }; }; -export function uploadComposeSuccess(media) { +export function uploadComposeSuccess(media, file) { return { type: COMPOSE_UPLOAD_SUCCESS, media: media, + file: file, skipLoading: true, }; }; @@ -351,10 +354,12 @@ const fetchComposeSuggestionsAccounts = throttle((dispatch, getState, token) => if (cancelFetchComposeSuggestionsAccounts) { cancelFetchComposeSuggestionsAccounts(); } + api(getState).get('/api/v1/accounts/search', { cancelToken: new CancelToken(cancel => { cancelFetchComposeSuggestionsAccounts = cancel; }), + params: { q: token.slice(1), resolve: false, @@ -375,9 +380,32 @@ const fetchComposeSuggestionsEmojis = (dispatch, getState, token) => { dispatch(readyComposeSuggestionsEmojis(token, results)); }; -const fetchComposeSuggestionsTags = (dispatch, getState, token) => { +const fetchComposeSuggestionsTags = throttle((dispatch, getState, token) => { + if (cancelFetchComposeSuggestionsTags) { + cancelFetchComposeSuggestionsTags(); + } + dispatch(updateSuggestionTags(token)); -}; + + api(getState).get('/api/v2/search', { + cancelToken: new CancelToken(cancel => { + cancelFetchComposeSuggestionsTags = cancel; + }), + + params: { + type: 'hashtags', + q: token.slice(1), + resolve: false, + limit: 4, + }, + }).then(({ data }) => { + dispatch(readyComposeSuggestionsTags(token, data.hashtags)); + }).catch(error => { + if (!isCancel(error)) { + dispatch(showAlertForError(error)); + } + }); +}, 200, { leading: true, trailing: true }); export function fetchComposeSuggestions(token) { return (dispatch, getState) => { @@ -411,16 +439,22 @@ export function readyComposeSuggestionsAccounts(token, accounts) { }; }; +export const readyComposeSuggestionsTags = (token, tags) => ({ + type: COMPOSE_SUGGESTIONS_READY, + token, + tags, +}); + export function selectComposeSuggestion(position, token, suggestion, path) { return (dispatch, getState) => { let completion; - if (typeof suggestion === 'object' && suggestion.id) { + if (suggestion.type === 'emoji') { dispatch(useEmoji(suggestion)); completion = suggestion.native || suggestion.colons; - } else if (suggestion[0] === '#') { - completion = suggestion; - } else { - completion = '@' + getState().getIn(['accounts', suggestion, 'acct']); + } else if (suggestion.type === 'hashtag') { + completion = `#${suggestion.name}`; + } else if (suggestion.type === 'account') { + completion = '@' + getState().getIn(['accounts', suggestion.id, 'acct']); } dispatch({ diff --git a/app/javascript/flavours/glitch/actions/conversations.js b/app/javascript/flavours/glitch/actions/conversations.js index 856f8f10f..e5c85c65d 100644 --- a/app/javascript/flavours/glitch/actions/conversations.js +++ b/app/javascript/flavours/glitch/actions/conversations.js @@ -15,6 +15,10 @@ export const CONVERSATIONS_UPDATE = 'CONVERSATIONS_UPDATE'; export const CONVERSATIONS_READ = 'CONVERSATIONS_READ'; +export const CONVERSATIONS_DELETE_REQUEST = 'CONVERSATIONS_DELETE_REQUEST'; +export const CONVERSATIONS_DELETE_SUCCESS = 'CONVERSATIONS_DELETE_SUCCESS'; +export const CONVERSATIONS_DELETE_FAIL = 'CONVERSATIONS_DELETE_FAIL'; + export const mountConversations = () => ({ type: CONVERSATIONS_MOUNT, }); @@ -82,3 +86,27 @@ export const updateConversations = conversation => dispatch => { conversation, }); }; + +export const deleteConversation = conversationId => (dispatch, getState) => { + dispatch(deleteConversationRequest(conversationId)); + + api(getState).delete(`/api/v1/conversations/${conversationId}`) + .then(() => dispatch(deleteConversationSuccess(conversationId))) + .catch(error => dispatch(deleteConversationFail(conversationId, error))); +}; + +export const deleteConversationRequest = id => ({ + type: CONVERSATIONS_DELETE_REQUEST, + id, +}); + +export const deleteConversationSuccess = id => ({ + type: CONVERSATIONS_DELETE_SUCCESS, + id, +}); + +export const deleteConversationFail = (id, error) => ({ + type: CONVERSATIONS_DELETE_FAIL, + id, + error, +}); diff --git a/app/javascript/flavours/glitch/actions/directory.js b/app/javascript/flavours/glitch/actions/directory.js new file mode 100644 index 000000000..9fbfb7f5b --- /dev/null +++ b/app/javascript/flavours/glitch/actions/directory.js @@ -0,0 +1,61 @@ +import api from 'flavours/glitch/util/api'; +import { importFetchedAccounts } from './importer'; +import { fetchRelationships } from './accounts'; + +export const DIRECTORY_FETCH_REQUEST = 'DIRECTORY_FETCH_REQUEST'; +export const DIRECTORY_FETCH_SUCCESS = 'DIRECTORY_FETCH_SUCCESS'; +export const DIRECTORY_FETCH_FAIL = 'DIRECTORY_FETCH_FAIL'; + +export const DIRECTORY_EXPAND_REQUEST = 'DIRECTORY_EXPAND_REQUEST'; +export const DIRECTORY_EXPAND_SUCCESS = 'DIRECTORY_EXPAND_SUCCESS'; +export const DIRECTORY_EXPAND_FAIL = 'DIRECTORY_EXPAND_FAIL'; + +export const fetchDirectory = params => (dispatch, getState) => { + dispatch(fetchDirectoryRequest()); + + api(getState).get('/api/v1/directory', { params: { ...params, limit: 20 } }).then(({ data }) => { + dispatch(importFetchedAccounts(data)); + dispatch(fetchDirectorySuccess(data)); + dispatch(fetchRelationships(data.map(x => x.id))); + }).catch(error => dispatch(fetchDirectoryFail(error))); +}; + +export const fetchDirectoryRequest = () => ({ + type: DIRECTORY_FETCH_REQUEST, +}); + +export const fetchDirectorySuccess = accounts => ({ + type: DIRECTORY_FETCH_SUCCESS, + accounts, +}); + +export const fetchDirectoryFail = error => ({ + type: DIRECTORY_FETCH_FAIL, + error, +}); + +export const expandDirectory = params => (dispatch, getState) => { + dispatch(expandDirectoryRequest()); + + const loadedItems = getState().getIn(['user_lists', 'directory', 'items']).size; + + api(getState).get('/api/v1/directory', { params: { ...params, offset: loadedItems, limit: 20 } }).then(({ data }) => { + dispatch(importFetchedAccounts(data)); + dispatch(expandDirectorySuccess(data)); + dispatch(fetchRelationships(data.map(x => x.id))); + }).catch(error => dispatch(expandDirectoryFail(error))); +}; + +export const expandDirectoryRequest = () => ({ + type: DIRECTORY_EXPAND_REQUEST, +}); + +export const expandDirectorySuccess = accounts => ({ + type: DIRECTORY_EXPAND_SUCCESS, + accounts, +}); + +export const expandDirectoryFail = error => ({ + type: DIRECTORY_EXPAND_FAIL, + error, +}); diff --git a/app/javascript/flavours/glitch/actions/domain_blocks.js b/app/javascript/flavours/glitch/actions/domain_blocks.js index 7397f561b..6d3f471fa 100644 --- a/app/javascript/flavours/glitch/actions/domain_blocks.js +++ b/app/javascript/flavours/glitch/actions/domain_blocks.js @@ -23,6 +23,7 @@ export function blockDomain(domain) { api(getState).post('/api/v1/domain_blocks', { domain }).then(() => { const at_domain = '@' + domain; const accounts = getState().get('accounts').filter(item => item.get('acct').endsWith(at_domain)).valueSeq().map(item => item.get('id')); + dispatch(blockDomainSuccess(domain, accounts)); }).catch(err => { dispatch(blockDomainFail(domain, err)); diff --git a/app/javascript/flavours/glitch/actions/importer/normalizer.js b/app/javascript/flavours/glitch/actions/importer/normalizer.js index a8c3fe16a..2bc603930 100644 --- a/app/javascript/flavours/glitch/actions/importer/normalizer.js +++ b/app/javascript/flavours/glitch/actions/importer/normalizer.js @@ -10,6 +10,12 @@ const makeEmojiMap = record => record.emojis.reduce((obj, emoji) => { return obj; }, {}); +export function searchTextFromRawStatus (status) { + const spoilerText = status.spoiler_text || ''; + const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n'); + return domParser.parseFromString(searchContent, 'text/html').documentElement.textContent; +} + export function normalizeAccount(account) { account = { ...account }; @@ -22,7 +28,7 @@ export function normalizeAccount(account) { if (account.fields) { account.fields = account.fields.map(pair => ({ ...pair, - name_emojified: emojify(escapeTextContentForBrowser(pair.name)), + name_emojified: emojify(escapeTextContentForBrowser(pair.name), emojiMap), value_emojified: emojify(pair.value, emojiMap), value_plain: unescapeHTML(pair.value), })); @@ -55,7 +61,7 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.spoilerHtml = normalOldStatus.get('spoilerHtml'); } else { const spoilerText = normalStatus.spoiler_text || ''; - const searchContent = [spoilerText, status.content].join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n'); + const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n'); const emojiMap = makeEmojiMap(normalStatus); normalStatus.search_index = domParser.parseFromString(searchContent, 'text/html').documentElement.textContent; @@ -71,8 +77,9 @@ export function normalizePoll(poll) { const emojiMap = makeEmojiMap(normalPoll); - normalPoll.options = poll.options.map(option => ({ + normalPoll.options = poll.options.map((option, index) => ({ ...option, + voted: poll.own_votes && poll.own_votes.includes(index), title_emojified: emojify(escapeTextContentForBrowser(option.title), emojiMap), })); diff --git a/app/javascript/flavours/glitch/actions/markers.js b/app/javascript/flavours/glitch/actions/markers.js new file mode 100644 index 000000000..c3a5fe86f --- /dev/null +++ b/app/javascript/flavours/glitch/actions/markers.js @@ -0,0 +1,30 @@ +export const submitMarkers = () => (dispatch, getState) => { + const accessToken = getState().getIn(['meta', 'access_token'], ''); + const params = {}; + + const lastHomeId = getState().getIn(['timelines', 'home', 'items', 0]); + const lastNotificationId = getState().getIn(['notifications', 'items', 0, 'id']); + + if (lastHomeId) { + params.home = { + last_read_id: lastHomeId, + }; + } + + if (lastNotificationId) { + params.notifications = { + last_read_id: lastNotificationId, + }; + } + + if (Object.keys(params).length === 0) { + return; + } + + const client = new XMLHttpRequest(); + + client.open('POST', '/api/v1/markers', false); + client.setRequestHeader('Content-Type', 'application/json'); + client.setRequestHeader('Authorization', `Bearer ${accessToken}`); + client.send(JSON.stringify(params)); +}; diff --git a/app/javascript/flavours/glitch/actions/modal.js b/app/javascript/flavours/glitch/actions/modal.js index 80e15c28e..3d0299db5 100644 --- a/app/javascript/flavours/glitch/actions/modal.js +++ b/app/javascript/flavours/glitch/actions/modal.js @@ -9,8 +9,9 @@ export function openModal(type, props) { }; }; -export function closeModal() { +export function closeModal(type) { return { type: MODAL_CLOSE, + modalType: type, }; }; diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index 57fecf63d..940f3c3d4 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -11,7 +11,10 @@ import { saveSettings } from './settings'; import { defineMessages } from 'react-intl'; import { List as ImmutableList } from 'immutable'; import { unescapeHTML } from 'flavours/glitch/util/html'; -import { getFilters, regexFromFilters } from 'flavours/glitch/selectors'; +import { getFiltersRegex } from 'flavours/glitch/selectors'; +import { usePendingItems as preferPendingItems } from 'flavours/glitch/util/initial_state'; +import compareId from 'flavours/glitch/util/compare_id'; +import { searchTextFromRawStatus } from 'flavours/glitch/actions/importer/normalizer'; export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE'; @@ -32,8 +35,9 @@ export const NOTIFICATIONS_EXPAND_FAIL = 'NOTIFICATIONS_EXPAND_FAIL'; export const NOTIFICATIONS_FILTER_SET = 'NOTIFICATIONS_FILTER_SET'; -export const NOTIFICATIONS_CLEAR = 'NOTIFICATIONS_CLEAR'; -export const NOTIFICATIONS_SCROLL_TOP = 'NOTIFICATIONS_SCROLL_TOP'; +export const NOTIFICATIONS_CLEAR = 'NOTIFICATIONS_CLEAR'; +export const NOTIFICATIONS_SCROLL_TOP = 'NOTIFICATIONS_SCROLL_TOP'; +export const NOTIFICATIONS_LOAD_PENDING = 'NOTIFICATIONS_LOAD_PENDING'; export const NOTIFICATIONS_MOUNT = 'NOTIFICATIONS_MOUNT'; export const NOTIFICATIONS_UNMOUNT = 'NOTIFICATIONS_UNMOUNT'; @@ -52,18 +56,27 @@ const fetchRelatedRelationships = (dispatch, notifications) => { } }; +export const loadPending = () => ({ + type: NOTIFICATIONS_LOAD_PENDING, +}); + export function updateNotifications(notification, intlMessages, intlLocale) { return (dispatch, getState) => { const showInColumn = getState().getIn(['settings', 'notifications', 'shows', notification.type], true); const showAlert = getState().getIn(['settings', 'notifications', 'alerts', notification.type], true); const playSound = getState().getIn(['settings', 'notifications', 'sounds', notification.type], true); - const filters = getFilters(getState(), { contextType: 'notifications' }); + const filters = getFiltersRegex(getState(), { contextType: 'notifications' }); let filtered = false; if (notification.type === 'mention') { - const regex = regexFromFilters(filters); - const searchIndex = notification.status.spoiler_text + '\n' + unescapeHTML(notification.status.content); + const dropRegex = filters[0]; + const regex = filters[1]; + const searchIndex = searchTextFromRawStatus(notification.status); + + if (dropRegex && dropRegex.test(searchIndex)) { + return; + } filtered = regex && regex.test(searchIndex); } @@ -78,6 +91,7 @@ export function updateNotifications(notification, intlMessages, intlLocale) { dispatch({ type: NOTIFICATIONS_UPDATE, notification, + usePendingItems: preferPendingItems, meta: (playSound && !filtered) ? { sound: 'boop' } : undefined, }); @@ -107,7 +121,7 @@ const excludeTypesFromSettings = state => state.getIn(['settings', 'notification const excludeTypesFromFilter = filter => { - const allTypes = ImmutableList(['follow', 'favourite', 'reblog', 'mention', 'poll']); + const allTypes = ImmutableList(['follow', 'follow_request', 'favourite', 'reblog', 'mention', 'poll']); return allTypes.filterNot(item => item === filter).toJS(); }; @@ -131,10 +145,19 @@ export function expandNotifications({ maxId } = {}, done = noOp) { : excludeTypesFromFilter(activeFilter), }; - if (!maxId && notifications.get('items').size > 0) { - params.since_id = notifications.getIn(['items', 0, 'id']); + if (!params.max_id && (notifications.get('items', ImmutableList()).size + notifications.get('pendingItems', ImmutableList()).size) > 0) { + const a = notifications.getIn(['pendingItems', 0, 'id']); + const b = notifications.getIn(['items', 0, 'id']); + + if (a && b && compareId(a, b) > 0) { + params.since_id = a; + } else { + params.since_id = b || a; + } } + const isLoadingRecent = !!params.since_id; + dispatch(expandNotificationsRequest(isLoadingMore)); api(getState).get('/api/v1/notifications', { params }).then(response => { @@ -143,7 +166,7 @@ export function expandNotifications({ maxId } = {}, done = noOp) { dispatch(importFetchedAccounts(response.data.map(item => item.account))); dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); - dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore)); + dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); fetchRelatedRelationships(dispatch, response.data); done(); }).catch(error => { @@ -160,13 +183,13 @@ export function expandNotificationsRequest(isLoadingMore) { }; }; -export function expandNotificationsSuccess(notifications, next, isLoadingMore) { +export function expandNotificationsSuccess(notifications, next, isLoadingMore, isLoadingRecent, usePendingItems) { return { type: NOTIFICATIONS_EXPAND_SUCCESS, notifications, - accounts: notifications.map(item => item.account), - statuses: notifications.map(item => item.status).filter(status => !!status), next, + isLoadingRecent: isLoadingRecent, + usePendingItems, skipLoading: !isLoadingMore, }; }; diff --git a/app/javascript/flavours/glitch/actions/polls.js b/app/javascript/flavours/glitch/actions/polls.js index 8e8b82df5..ca94a095f 100644 --- a/app/javascript/flavours/glitch/actions/polls.js +++ b/app/javascript/flavours/glitch/actions/polls.js @@ -1,4 +1,4 @@ -import api from '../api'; +import api from 'flavours/glitch/util/api'; import { importFetchedPoll } from './importer'; export const POLL_VOTE_REQUEST = 'POLL_VOTE_REQUEST'; diff --git a/app/javascript/flavours/glitch/actions/search.js b/app/javascript/flavours/glitch/actions/search.js index b2d24e10b..a025f352a 100644 --- a/app/javascript/flavours/glitch/actions/search.js +++ b/app/javascript/flavours/glitch/actions/search.js @@ -10,6 +10,10 @@ export const SEARCH_FETCH_REQUEST = 'SEARCH_FETCH_REQUEST'; export const SEARCH_FETCH_SUCCESS = 'SEARCH_FETCH_SUCCESS'; export const SEARCH_FETCH_FAIL = 'SEARCH_FETCH_FAIL'; +export const SEARCH_EXPAND_REQUEST = 'SEARCH_EXPAND_REQUEST'; +export const SEARCH_EXPAND_SUCCESS = 'SEARCH_EXPAND_SUCCESS'; +export const SEARCH_EXPAND_FAIL = 'SEARCH_EXPAND_FAIL'; + export function changeSearch(value) { return { type: SEARCH_CHANGE, @@ -48,7 +52,7 @@ export function submitSearch() { dispatch(importFetchedStatuses(response.data.statuses)); } - dispatch(fetchSearchSuccess(response.data)); + dispatch(fetchSearchSuccess(response.data, value)); dispatch(fetchRelationships(response.data.accounts.map(item => item.id))); }).catch(error => { dispatch(fetchSearchFail(error)); @@ -62,12 +66,11 @@ export function fetchSearchRequest() { }; }; -export function fetchSearchSuccess(results) { +export function fetchSearchSuccess(results, searchTerm) { return { type: SEARCH_FETCH_SUCCESS, results, - accounts: results.accounts, - statuses: results.statuses, + searchTerm, }; }; @@ -78,8 +81,50 @@ export function fetchSearchFail(error) { }; }; -export function showSearch() { - return { - type: SEARCH_SHOW, - }; +export const expandSearch = type => (dispatch, getState) => { + const value = getState().getIn(['search', 'value']); + const offset = getState().getIn(['search', 'results', type]).size; + + dispatch(expandSearchRequest()); + + api(getState).get('/api/v2/search', { + params: { + q: value, + type, + offset, + }, + }).then(({ data }) => { + if (data.accounts) { + dispatch(importFetchedAccounts(data.accounts)); + } + + if (data.statuses) { + dispatch(importFetchedStatuses(data.statuses)); + } + + dispatch(expandSearchSuccess(data, value, type)); + dispatch(fetchRelationships(data.accounts.map(item => item.id))); + }).catch(error => { + dispatch(expandSearchFail(error)); + }); }; + +export const expandSearchRequest = () => ({ + type: SEARCH_EXPAND_REQUEST, +}); + +export const expandSearchSuccess = (results, searchTerm, searchType) => ({ + type: SEARCH_EXPAND_SUCCESS, + results, + searchTerm, + searchType, +}); + +export const expandSearchFail = error => ({ + type: SEARCH_EXPAND_FAIL, + error, +}); + +export const showSearch = () => ({ + type: SEARCH_SHOW, +}); diff --git a/app/javascript/flavours/glitch/actions/timelines.js b/app/javascript/flavours/glitch/actions/timelines.js index cca571583..097878c3b 100644 --- a/app/javascript/flavours/glitch/actions/timelines.js +++ b/app/javascript/flavours/glitch/actions/timelines.js @@ -1,6 +1,10 @@ import { importFetchedStatus, importFetchedStatuses } from './importer'; import api, { getLinks } from 'flavours/glitch/util/api'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; +import compareId from 'flavours/glitch/util/compare_id'; +import { me, usePendingItems as preferPendingItems } from 'flavours/glitch/util/initial_state'; +import { getFiltersRegex } from 'flavours/glitch/selectors'; +import { searchTextFromRawStatus } from 'flavours/glitch/actions/importer/normalizer'; export const TIMELINE_UPDATE = 'TIMELINE_UPDATE'; export const TIMELINE_DELETE = 'TIMELINE_DELETE'; @@ -10,23 +14,40 @@ export const TIMELINE_EXPAND_REQUEST = 'TIMELINE_EXPAND_REQUEST'; export const TIMELINE_EXPAND_SUCCESS = 'TIMELINE_EXPAND_SUCCESS'; export const TIMELINE_EXPAND_FAIL = 'TIMELINE_EXPAND_FAIL'; -export const TIMELINE_SCROLL_TOP = 'TIMELINE_SCROLL_TOP'; +export const TIMELINE_SCROLL_TOP = 'TIMELINE_SCROLL_TOP'; +export const TIMELINE_LOAD_PENDING = 'TIMELINE_LOAD_PENDING'; +export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT'; +export const TIMELINE_CONNECT = 'TIMELINE_CONNECT'; -export const TIMELINE_CONNECT = 'TIMELINE_CONNECT'; -export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT'; +export const loadPending = timeline => ({ + type: TIMELINE_LOAD_PENDING, + timeline, +}); export function updateTimeline(timeline, status, accept) { - return dispatch => { + return (dispatch, getState) => { if (typeof accept === 'function' && !accept(status)) { return; } + const filters = getFiltersRegex(getState(), { contextType: timeline }); + const dropRegex = filters[0]; + const regex = filters[1]; + const text = searchTextFromRawStatus(status); + let filtered = false; + + if (status.account.id !== me) { + filtered = (dropRegex && dropRegex.test(text)) || (regex && regex.test(text)); + } + dispatch(importFetchedStatus(status)); dispatch({ type: TIMELINE_UPDATE, timeline, status, + usePendingItems: preferPendingItems, + filtered }); }; }; @@ -71,8 +92,15 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { return; } - if (!params.max_id && !params.pinned && timeline.get('items', ImmutableList()).size > 0) { - params.since_id = timeline.getIn(['items', 0]); + if (!params.max_id && !params.pinned && (timeline.get('items', ImmutableList()).size + timeline.get('pendingItems', ImmutableList()).size) > 0) { + const a = timeline.getIn(['pendingItems', 0]); + const b = timeline.getIn(['items', 0]); + + if (a && b && compareId(a, b) > 0) { + params.since_id = a; + } else { + params.since_id = b || a; + } } const isLoadingRecent = !!params.since_id; @@ -81,8 +109,9 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { api(getState).get(path, { params }).then(response => { const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data)); - dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.code === 206, isLoadingRecent, isLoadingMore)); + dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.status === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems)); done(); }).catch(error => { dispatch(expandTimelineFail(timelineId, error, isLoadingMore)); @@ -117,7 +146,7 @@ export function expandTimelineRequest(timeline, isLoadingMore) { }; }; -export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadingRecent, isLoadingMore) { +export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadingRecent, isLoadingMore, usePendingItems) { return { type: TIMELINE_EXPAND_SUCCESS, timeline, @@ -125,6 +154,7 @@ export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadi next, partial, isLoadingRecent, + usePendingItems, skipLoading: !isLoadingMore, }; }; @@ -153,9 +183,8 @@ export function connectTimeline(timeline) { }; }; -export function disconnectTimeline(timeline) { - return { - type: TIMELINE_DISCONNECT, - timeline, - }; -}; +export const disconnectTimeline = timeline => ({ + type: TIMELINE_DISCONNECT, + timeline, + usePendingItems: preferPendingItems, +}); diff --git a/app/javascript/flavours/glitch/actions/trends.js b/app/javascript/flavours/glitch/actions/trends.js new file mode 100644 index 000000000..1b0ce2b5b --- /dev/null +++ b/app/javascript/flavours/glitch/actions/trends.js @@ -0,0 +1,32 @@ +import api from 'flavours/glitch/util/api'; + +export const TRENDS_FETCH_REQUEST = 'TRENDS_FETCH_REQUEST'; +export const TRENDS_FETCH_SUCCESS = 'TRENDS_FETCH_SUCCESS'; +export const TRENDS_FETCH_FAIL = 'TRENDS_FETCH_FAIL'; + +export const fetchTrends = () => (dispatch, getState) => { + dispatch(fetchTrendsRequest()); + + api(getState) + .get('/api/v1/trends') + .then(({ data }) => dispatch(fetchTrendsSuccess(data))) + .catch(err => dispatch(fetchTrendsFail(err))); +}; + +export const fetchTrendsRequest = () => ({ + type: TRENDS_FETCH_REQUEST, + skipLoading: true, +}); + +export const fetchTrendsSuccess = trends => ({ + type: TRENDS_FETCH_SUCCESS, + trends, + skipLoading: true, +}); + +export const fetchTrendsFail = error => ({ + type: TRENDS_FETCH_FAIL, + error, + skipLoading: true, + skipAlert: true, +}); diff --git a/app/javascript/flavours/glitch/components/account.js b/app/javascript/flavours/glitch/components/account.js index 3fc18cb72..f3e58dfe3 100644 --- a/app/javascript/flavours/glitch/components/account.js +++ b/app/javascript/flavours/glitch/components/account.js @@ -19,8 +19,8 @@ const messages = defineMessages({ unmute_notifications: { id: 'account.unmute_notifications', defaultMessage: 'You are currently muting notifications from @{name}. Click to unmute notifications' }, }); -@injectIntl -export default class Account extends ImmutablePureComponent { +export default @injectIntl +class Account extends ImmutablePureComponent { static propTypes = { account: ImmutablePropTypes.map.isRequired, diff --git a/app/javascript/flavours/glitch/components/attachment_list.js b/app/javascript/flavours/glitch/components/attachment_list.js index 8e5bb0e0b..68d8d29c7 100644 --- a/app/javascript/flavours/glitch/components/attachment_list.js +++ b/app/javascript/flavours/glitch/components/attachment_list.js @@ -2,6 +2,7 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import Icon from 'flavours/glitch/components/icon'; const filename = url => url.split('/').pop().split('#')[0].split('?')[0]; @@ -24,7 +25,7 @@ export default class AttachmentList extends ImmutablePureComponent { return ( <li key={attachment.get('id')}> - <a href={displayUrl} target='_blank' rel='noopener'><i className='fa fa-link' /> {filename(displayUrl)}</a> + <a href={displayUrl} target='_blank' rel='noopener noreferrer'><Icon id='link' /> {filename(displayUrl)}</a> </li> ); })} @@ -36,7 +37,7 @@ export default class AttachmentList extends ImmutablePureComponent { return ( <div className='attachment-list'> <div className='attachment-list__icon'> - <i className='fa fa-link' /> + <Icon id='link' /> </div> <ul className='attachment-list__list'> @@ -45,7 +46,7 @@ export default class AttachmentList extends ImmutablePureComponent { return ( <li key={attachment.get('id')}> - <a href={displayUrl} target='_blank' rel='noopener'>{filename(displayUrl)}</a> + <a href={displayUrl} target='_blank' rel='noopener noreferrer'>{filename(displayUrl)}</a> </li> ); })} diff --git a/app/javascript/flavours/glitch/components/autosuggest_hashtag.js b/app/javascript/flavours/glitch/components/autosuggest_hashtag.js new file mode 100644 index 000000000..648987dfd --- /dev/null +++ b/app/javascript/flavours/glitch/components/autosuggest_hashtag.js @@ -0,0 +1,28 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { shortNumberFormat } from 'flavours/glitch/util/numbers'; +import { FormattedMessage } from 'react-intl'; + +export default class AutosuggestHashtag extends React.PureComponent { + + static propTypes = { + tag: PropTypes.shape({ + name: PropTypes.string.isRequired, + url: PropTypes.string, + history: PropTypes.array, + }).isRequired, + }; + + render () { + const { tag } = this.props; + const weeklyUses = tag.history && shortNumberFormat(tag.history.reduce((total, day) => total + (day.uses * 1), 0)); + + return ( + <div className='autosuggest-hashtag'> + <div className='autosuggest-hashtag__name'>#<strong>{tag.name}</strong></div> + {tag.history !== undefined && <div className='autosuggest-hashtag__uses'><FormattedMessage id='autosuggest_hashtag.per_week' defaultMessage='{count} per week' values={{ count: weeklyUses }} /></div>} + </div> + ); + } + +} diff --git a/app/javascript/flavours/glitch/components/autosuggest_input.js b/app/javascript/flavours/glitch/components/autosuggest_input.js index 5fc952d8e..1ef7ee216 100644 --- a/app/javascript/flavours/glitch/components/autosuggest_input.js +++ b/app/javascript/flavours/glitch/components/autosuggest_input.js @@ -1,6 +1,7 @@ import React from 'react'; import AutosuggestAccountContainer from 'flavours/glitch/features/compose/containers/autosuggest_account_container'; import AutosuggestEmoji from './autosuggest_emoji'; +import AutosuggestHashtag from './autosuggest_hashtag'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import { isRtl } from 'flavours/glitch/util/rtl'; @@ -167,15 +168,15 @@ export default class AutosuggestInput extends ImmutablePureComponent { const { selectedSuggestion } = this.state; let inner, key; - if (typeof suggestion === 'object') { + if (suggestion.type === 'emoji') { inner = <AutosuggestEmoji emoji={suggestion} />; key = suggestion.id; - } else if (suggestion[0] === '#') { - inner = suggestion; - key = suggestion; - } else { - inner = <AutosuggestAccountContainer id={suggestion} />; - key = suggestion; + } else if (suggestion.type ==='hashtag') { + inner = <AutosuggestHashtag tag={suggestion} />; + key = suggestion.name; + } else if (suggestion.type === 'account') { + inner = <AutosuggestAccountContainer id={suggestion.id} />; + key = suggestion.id; } return ( diff --git a/app/javascript/flavours/glitch/components/autosuggest_textarea.js b/app/javascript/flavours/glitch/components/autosuggest_textarea.js index bbe0ffcbe..ec2fbbe4b 100644 --- a/app/javascript/flavours/glitch/components/autosuggest_textarea.js +++ b/app/javascript/flavours/glitch/components/autosuggest_textarea.js @@ -1,6 +1,7 @@ import React from 'react'; import AutosuggestAccountContainer from 'flavours/glitch/features/compose/containers/autosuggest_account_container'; import AutosuggestEmoji from './autosuggest_emoji'; +import AutosuggestHashtag from './autosuggest_hashtag'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import { isRtl } from 'flavours/glitch/util/rtl'; @@ -173,15 +174,15 @@ export default class AutosuggestTextarea extends ImmutablePureComponent { const { selectedSuggestion } = this.state; let inner, key; - if (typeof suggestion === 'object') { + if (suggestion.type === 'emoji') { inner = <AutosuggestEmoji emoji={suggestion} />; key = suggestion.id; - } else if (suggestion[0] === '#') { - inner = suggestion; - key = suggestion; - } else { - inner = <AutosuggestAccountContainer id={suggestion} />; - key = suggestion; + } else if (suggestion.type === 'hashtag') { + inner = <AutosuggestHashtag tag={suggestion} />; + key = suggestion.name; + } else if (suggestion.type === 'account') { + inner = <AutosuggestAccountContainer id={suggestion.id} />; + key = suggestion.id; } return ( diff --git a/app/javascript/flavours/glitch/components/avatar_composite.js b/app/javascript/flavours/glitch/components/avatar_composite.js index c52df043a..125b51c44 100644 --- a/app/javascript/flavours/glitch/components/avatar_composite.js +++ b/app/javascript/flavours/glitch/components/avatar_composite.js @@ -35,35 +35,35 @@ export default class AvatarComposite extends React.PureComponent { if (size === 2) { if (index === 0) { - right = '2px'; + right = '1px'; } else { - left = '2px'; + left = '1px'; } } else if (size === 3) { if (index === 0) { - right = '2px'; + right = '1px'; } else if (index > 0) { - left = '2px'; + left = '1px'; } if (index === 1) { - bottom = '2px'; + bottom = '1px'; } else if (index > 1) { - top = '2px'; + top = '1px'; } } else if (size === 4) { if (index === 0 || index === 2) { - right = '2px'; + right = '1px'; } if (index === 1 || index === 3) { - left = '2px'; + left = '1px'; } if (index < 2) { - bottom = '2px'; + bottom = '1px'; } else { - top = '2px'; + top = '1px'; } } @@ -96,7 +96,13 @@ export default class AvatarComposite extends React.PureComponent { return ( <div className='account__avatar-composite' style={{ width: `${size}px`, height: `${size}px` }}> - {accounts.take(4).map((account, i) => this.renderItem(account, accounts.size, i))} + {accounts.take(4).map((account, i) => this.renderItem(account, Math.min(accounts.size, 4), i))} + + {accounts.size > 4 && ( + <span className='account__avatar-composite__label'> + +{accounts.size - 4} + </span> + )} </div> ); } diff --git a/app/javascript/flavours/glitch/components/button.js b/app/javascript/flavours/glitch/components/button.js index 16868010c..cd6528f58 100644 --- a/app/javascript/flavours/glitch/components/button.js +++ b/app/javascript/flavours/glitch/components/button.js @@ -12,9 +12,9 @@ export default class Button extends React.PureComponent { secondary: PropTypes.bool, size: PropTypes.number, className: PropTypes.string, + title: PropTypes.string, style: PropTypes.object, children: PropTypes.node, - title: PropTypes.string, }; static defaultProps = { diff --git a/app/javascript/flavours/glitch/components/column.js b/app/javascript/flavours/glitch/components/column.js index dc87818a5..5819d5362 100644 --- a/app/javascript/flavours/glitch/components/column.js +++ b/app/javascript/flavours/glitch/components/column.js @@ -10,10 +10,11 @@ export default class Column extends React.PureComponent { extraClasses: PropTypes.string, name: PropTypes.string, label: PropTypes.string, + bindToDocument: PropTypes.bool, }; scrollTop () { - const scrollable = this.node.querySelector('.scrollable'); + const scrollable = this.props.bindToDocument ? document.scrollingElement : this.node.querySelector('.scrollable'); if (!scrollable) { return; @@ -35,11 +36,19 @@ export default class Column extends React.PureComponent { } componentDidMount () { - this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + if (this.props.bindToDocument) { + document.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + } else { + this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + } } componentWillUnmount () { - this.node.removeEventListener('wheel', this.handleWheel); + if (this.props.bindToDocument) { + document.removeEventListener('wheel', this.handleWheel); + } else { + this.node.removeEventListener('wheel', this.handleWheel); + } } render () { diff --git a/app/javascript/flavours/glitch/components/column_back_button.js b/app/javascript/flavours/glitch/components/column_back_button.js index 82556d22e..05688f867 100644 --- a/app/javascript/flavours/glitch/components/column_back_button.js +++ b/app/javascript/flavours/glitch/components/column_back_button.js @@ -1,6 +1,8 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; import PropTypes from 'prop-types'; +import Icon from 'flavours/glitch/components/icon'; +import { createPortal } from 'react-dom'; export default class ColumnBackButton extends React.PureComponent { @@ -8,6 +10,10 @@ export default class ColumnBackButton extends React.PureComponent { router: PropTypes.object, }; + static propTypes = { + multiColumn: PropTypes.bool, + }; + handleClick = (event) => { // if history is exhausted, or we would leave mastodon, just go to root. if (window.history.state) { @@ -23,12 +29,32 @@ export default class ColumnBackButton extends React.PureComponent { } render () { - return ( + const { multiColumn } = this.props; + + const component = ( <button onClick={this.handleClick} className='column-back-button'> - <i className='fa fa-fw fa-chevron-left column-back-button__icon' /> + <Icon id='chevron-left' className='column-back-button__icon' fixedWidth /> <FormattedMessage id='column_back_button.label' defaultMessage='Back' /> </button> ); + + if (multiColumn) { + return component; + } else { + // The portal container and the component may be rendered to the DOM in + // the same React render pass, so the container might not be available at + // the time `render()` is called. + const container = document.getElementById('tabs-bar__portal'); + if (container === null) { + // The container wasn't available, force a re-render so that the + // component can eventually be inserted in the container and not scroll + // with the rest of the area. + this.forceUpdate(); + return component; + } else { + return createPortal(component, container); + } + } } } diff --git a/app/javascript/flavours/glitch/components/column_back_button_slim.js b/app/javascript/flavours/glitch/components/column_back_button_slim.js index 38afd3df3..faa0c23a8 100644 --- a/app/javascript/flavours/glitch/components/column_back_button_slim.js +++ b/app/javascript/flavours/glitch/components/column_back_button_slim.js @@ -1,6 +1,7 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; import PropTypes from 'prop-types'; +import Icon from 'flavours/glitch/components/icon'; export default class ColumnBackButtonSlim extends React.PureComponent { @@ -26,7 +27,7 @@ export default class ColumnBackButtonSlim extends React.PureComponent { return ( <div className='column-back-button--slim'> <div role='button' tabIndex='0' onClick={this.handleClick} className='column-back-button column-back-button--slim-button'> - <i className='fa fa-fw fa-chevron-left column-back-button__icon' /> + <Icon id='chevron-left' className='column-back-button__icon' fixedWidth /> <FormattedMessage id='column_back_button.label' defaultMessage='Back' /> </div> </div> diff --git a/app/javascript/flavours/glitch/components/column_header.js b/app/javascript/flavours/glitch/components/column_header.js index a0ff09986..dd1162429 100644 --- a/app/javascript/flavours/glitch/components/column_header.js +++ b/app/javascript/flavours/glitch/components/column_header.js @@ -1,8 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { createPortal } from 'react-dom'; import classNames from 'classnames'; import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import Icon from 'flavours/glitch/components/icon'; import NotificationPurgeButtonsContainer from 'flavours/glitch/containers/notification_purge_buttons_container'; @@ -14,8 +16,8 @@ const messages = defineMessages({ enterNotifCleaning : { id: 'notification_purge.start', defaultMessage: 'Enter notification cleaning mode' }, }); -@injectIntl -export default class ColumnHeader extends React.PureComponent { +export default @injectIntl +class ColumnHeader extends React.PureComponent { static contextTypes = { router: PropTypes.object, @@ -35,6 +37,7 @@ export default class ColumnHeader extends React.PureComponent { onEnterCleaningMode: PropTypes.func, children: PropTypes.node, pinned: PropTypes.bool, + placeholder: PropTypes.bool, onPin: PropTypes.func, onMove: PropTypes.func, onClick: PropTypes.func, @@ -103,7 +106,7 @@ export default class ColumnHeader extends React.PureComponent { } render () { - const { intl, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, notifCleaning, notifCleaningActive } = this.props; + const { intl, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, notifCleaning, notifCleaningActive, placeholder } = this.props; const { collapsed, animating, animatingNCD } = this.state; let title = this.props.title; @@ -148,22 +151,22 @@ export default class ColumnHeader extends React.PureComponent { } if (multiColumn && pinned) { - pinButton = <button key='pin-button' className='text-btn column-header__setting-btn' onClick={this.handlePin}><i className='fa fa fa-times' /> <FormattedMessage id='column_header.unpin' defaultMessage='Unpin' /></button>; + pinButton = <button key='pin-button' className='text-btn column-header__setting-btn' onClick={this.handlePin}><Icon id='times' /> <FormattedMessage id='column_header.unpin' defaultMessage='Unpin' /></button>; moveButtons = ( <div key='move-buttons' className='column-header__setting-arrows'> - <button title={formatMessage(messages.moveLeft)} aria-label={formatMessage(messages.moveLeft)} className='text-btn column-header__setting-btn' onClick={this.handleMoveLeft}><i className='fa fa-chevron-left' /></button> - <button title={formatMessage(messages.moveRight)} aria-label={formatMessage(messages.moveRight)} className='text-btn column-header__setting-btn' onClick={this.handleMoveRight}><i className='fa fa-chevron-right' /></button> + <button title={formatMessage(messages.moveLeft)} aria-label={formatMessage(messages.moveLeft)} className='text-btn column-header__setting-btn' onClick={this.handleMoveLeft}><Icon id='chevron-left' /></button> + <button title={formatMessage(messages.moveRight)} aria-label={formatMessage(messages.moveRight)} className='text-btn column-header__setting-btn' onClick={this.handleMoveRight}><Icon id='chevron-right' /></button> </div> ); - } else if (multiColumn) { - pinButton = <button key='pin-button' className='text-btn column-header__setting-btn' onClick={this.handlePin}><i className='fa fa fa-plus' /> <FormattedMessage id='column_header.pin' defaultMessage='Pin' /></button>; + } else if (multiColumn && this.props.onPin) { + pinButton = <button key='pin-button' className='text-btn column-header__setting-btn' onClick={this.handlePin}><Icon id='plus' /> <FormattedMessage id='column_header.pin' defaultMessage='Pin' /></button>; } if (!pinned && (multiColumn || showBackButton)) { backButton = ( <button onClick={this.handleBackClick} className='column-header__back-button'> - <i className='fa fa-fw fa-chevron-left column-back-button__icon' /> + <Icon id='chevron-left' className='column-back-button__icon' fixedWidth /> <FormattedMessage id='column_back_button.label' defaultMessage='Back' /> </button> ); @@ -178,18 +181,18 @@ export default class ColumnHeader extends React.PureComponent { collapsedContent.push(pinButton); } - if (children || multiColumn) { - collapseButton = <button className={collapsibleButtonClassName} title={formatMessage(collapsed ? messages.show : messages.hide)} aria-label={formatMessage(collapsed ? messages.show : messages.hide)} aria-pressed={collapsed ? 'false' : 'true'} onClick={this.handleToggleClick}><i className='fa fa-sliders' /></button>; + if (children || (multiColumn && this.props.onPin)) { + collapseButton = <button className={collapsibleButtonClassName} title={formatMessage(collapsed ? messages.show : messages.hide)} aria-label={formatMessage(collapsed ? messages.show : messages.hide)} aria-pressed={collapsed ? 'false' : 'true'} onClick={this.handleToggleClick}><Icon id='sliders' /></button>; } const hasTitle = icon && title; - return ( + const component = ( <div className={wrapperClassName}> <h1 className={buttonClassName}> {hasTitle && ( <button onClick={this.handleTitleClick}> - <i className={`fa fa-fw fa-${icon} column-header__icon`} /> + <Icon id={icon} fixedWidth className='column-header__icon' /> {title} </button> )} @@ -206,7 +209,7 @@ export default class ColumnHeader extends React.PureComponent { onClick={this.onEnterCleaningMode} className={notifCleaningButtonClassName} > - <i className='fa fa-eraser' /> + <Icon id='eraser' /> </button> ) : null} {collapseButton} @@ -228,6 +231,24 @@ export default class ColumnHeader extends React.PureComponent { </div> </div> ); + + if (multiColumn || placeholder) { + return component; + } else { + // The portal container and the component may be rendered to the DOM in + // the same React render pass, so the container might not be available at + // the time `render()` is called. + const container = document.getElementById('tabs-bar__portal'); + if (container === null) { + // The container wasn't available, force a re-render so that the + // component can eventually be inserted in the container and not scroll + // with the rest of the area. + this.forceUpdate(); + return component; + } else { + return createPortal(component, container); + } + } } } diff --git a/app/javascript/flavours/glitch/components/display_name.js b/app/javascript/flavours/glitch/components/display_name.js index 7f6ef5a5d..44662a8b8 100644 --- a/app/javascript/flavours/glitch/components/display_name.js +++ b/app/javascript/flavours/glitch/components/display_name.js @@ -1,73 +1,112 @@ -// Package imports. -import classNames from 'classnames'; -import PropTypes from 'prop-types'; import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { autoPlayGif } from 'flavours/glitch/util/initial_state'; + +export default class DisplayName extends React.PureComponent { + + static propTypes = { + account: ImmutablePropTypes.map, + className: PropTypes.string, + inline: PropTypes.bool, + localDomain: PropTypes.string, + others: ImmutablePropTypes.list, + handleClick: PropTypes.func, + }; + + _updateEmojis () { + const node = this.node; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); + } + } -// The component. -export default function DisplayName ({ - account, - className, - inline, - localDomain, - others, - onAccountClick, -}) { - const computedClass = classNames('display-name', { inline }, className); + componentDidMount () { + this._updateEmojis(); + } - if (!account) return null; + componentDidUpdate () { + this._updateEmojis(); + } - let displayName, suffix; + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } - let acct = account.get('acct'); + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } - if (acct.indexOf('@') === -1 && localDomain) { - acct = `${acct}@${localDomain}`; + setRef = (c) => { + this.node = c; } - if (others && others.size > 0) { - displayName = others.take(2).map(a => ( - <a - href={a.get('url')} - target='_blank' - onClick={(e) => onAccountClick(a.get('id'), e)} - title={`@${a.get('acct')}`} - > - <bdi key={a.get('id')}> - <strong className='display-name__html' dangerouslySetInnerHTML={{ __html: a.get('display_name_html') }} /> - </bdi> - </a> - )).reduce((prev, cur) => [prev, ', ', cur]); - - if (others.size - 2 > 0) { - displayName.push(` +${others.size - 2}`); + render() { + const { account, className, inline, localDomain, others, onAccountClick } = this.props; + + const computedClass = classNames('display-name', { inline }, className); + + if (!account) return null; + + let displayName, suffix; + + let acct = account.get('acct'); + + if (acct.indexOf('@') === -1 && localDomain) { + acct = `${acct}@${localDomain}`; } - suffix = ( - <a href={account.get('url')} target='_blank' onClick={(e) => onAccountClick(account.get('id'), e)}> - <span className='display-name__account'>@{acct}</span> - </a> + if (others && others.size > 0) { + displayName = others.take(2).map(a => ( + <a + href={a.get('url')} + target='_blank' + onClick={(e) => onAccountClick(a.get('id'), e)} + title={`@${a.get('acct')}`} + rel='noopener noreferrer' + > + <bdi key={a.get('id')}> + <strong className='display-name__html' dangerouslySetInnerHTML={{ __html: a.get('display_name_html') }} /> + </bdi> + </a> + )).reduce((prev, cur) => [prev, ', ', cur]); + + if (others.size - 2 > 0) { + displayName.push(` +${others.size - 2}`); + } + + suffix = ( + <a href={account.get('url')} target='_blank' onClick={(e) => onAccountClick(account.get('id'), e)} rel='noopener noreferrer'> + <span className='display-name__account'>@{acct}</span> + </a> + ); + } else { + displayName = <bdi><strong className='display-name__html' dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }} /></bdi>; + suffix = <span className='display-name__account'>@{acct}</span>; + } + + return ( + <span className={computedClass} ref={this.setRef}> + {displayName} + {inline ? ' ' : null} + {suffix} + </span> ); - } else { - displayName = <bdi><strong className='display-name__html' dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }} /></bdi>; - suffix = <span className='display-name__account'>@{acct}</span>; } - return ( - <span className={computedClass}> - {displayName} - {inline ? ' ' : null} - {suffix} - </span> - ); } - -// Props. -DisplayName.propTypes = { - account: ImmutablePropTypes.map, - className: PropTypes.string, - inline: PropTypes.bool, - localDomain: PropTypes.string, - others: ImmutablePropTypes.list, - handleClick: PropTypes.func, -}; diff --git a/app/javascript/flavours/glitch/components/domain.js b/app/javascript/flavours/glitch/components/domain.js index 74174f83d..85729ca94 100644 --- a/app/javascript/flavours/glitch/components/domain.js +++ b/app/javascript/flavours/glitch/components/domain.js @@ -8,8 +8,8 @@ const messages = defineMessages({ unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' }, }); -@injectIntl -export default class Account extends ImmutablePureComponent { +export default @injectIntl +class Account extends ImmutablePureComponent { static propTypes = { domain: PropTypes.string, diff --git a/app/javascript/flavours/glitch/components/dropdown_menu.js b/app/javascript/flavours/glitch/components/dropdown_menu.js index 05611c135..ab5b7a572 100644 --- a/app/javascript/flavours/glitch/components/dropdown_menu.js +++ b/app/javascript/flavours/glitch/components/dropdown_menu.js @@ -45,7 +45,9 @@ class DropdownMenu extends React.PureComponent { document.addEventListener('click', this.handleDocumentClick, false); document.addEventListener('keydown', this.handleKeyDown, false); document.addEventListener('touchend', this.handleDocumentClick, listenerOptions); - if (this.focusedItem && this.props.openedViaKeyboard) this.focusedItem.focus(); + if (this.focusedItem && this.props.openedViaKeyboard) { + this.focusedItem.focus(); + } this.setState({ mounted: true }); } @@ -81,6 +83,18 @@ class DropdownMenu extends React.PureComponent { element.focus(); } break; + case 'Tab': + if (e.shiftKey) { + element = items[index-1] || items[items.length-1]; + } else { + element = items[index+1] || items[0]; + } + if (element) { + element.focus(); + e.preventDefault(); + e.stopPropagation(); + } + break; case 'Home': element = items[0]; if (element) { @@ -93,11 +107,14 @@ class DropdownMenu extends React.PureComponent { element.focus(); } break; + case 'Escape': + this.props.onClose(); + break; } } - handleItemKeyDown = e => { - if (e.key === 'Enter') { + handleItemKeyPress = e => { + if (e.key === 'Enter' || e.key === ' ') { this.handleClick(e); } } @@ -126,7 +143,7 @@ class DropdownMenu extends React.PureComponent { return ( <li className='dropdown-menu__item' key={`${text}-${i}`}> - <a href={href} target='_blank' rel='noopener' role='button' tabIndex='0' ref={i === 0 ? this.setFocusRef : null} onClick={this.handleClick} onKeyDown={this.handleItemKeyDown} data-index={i}> + <a href={href} target='_blank' rel='noopener noreferrer' role='button' tabIndex='0' ref={i === 0 ? this.setFocusRef : null} onClick={this.handleClick} onKeyPress={this.handleItemKeyPress} data-index={i}> {text} </a> </li> @@ -193,25 +210,41 @@ export default class Dropdown extends React.PureComponent { } else { const { top } = target.getBoundingClientRect(); const placement = top * 2 < innerHeight ? 'bottom' : 'top'; - this.props.onOpen(this.state.id, this.handleItemClick, placement, type !== 'click'); } } handleClose = () => { + if (this.activeElement) { + this.activeElement.focus(); + this.activeElement = null; + } this.props.onClose(this.state.id); } - handleKeyDown = e => { + handleMouseDown = () => { + if (!this.state.open) { + this.activeElement = document.activeElement; + } + } + + handleButtonKeyDown = (e) => { + switch(e.key) { + case ' ': + case 'Enter': + this.handleMouseDown(); + break; + } + } + + handleKeyPress = (e) => { switch(e.key) { case ' ': case 'Enter': this.handleClick(e); + e.stopPropagation(); e.preventDefault(); break; - case 'Escape': - this.handleClose(); - break; } } @@ -248,7 +281,7 @@ export default class Dropdown extends React.PureComponent { const open = this.state.id === openDropdownId; return ( - <div onKeyDown={this.handleKeyDown}> + <div> <IconButton icon={icon} title={ariaLabel} @@ -257,6 +290,9 @@ export default class Dropdown extends React.PureComponent { size={size} ref={this.setTargetRef} onClick={this.handleClick} + onMouseDown={this.handleMouseDown} + onKeyDown={this.handleButtonKeyDown} + onKeyPress={this.handleKeyPress} /> <Overlay show={open} placement={dropdownPlacement} target={this.findTarget}> diff --git a/app/javascript/flavours/glitch/components/error_boundary.js b/app/javascript/flavours/glitch/components/error_boundary.js index 142a0c21a..62950a7d3 100644 --- a/app/javascript/flavours/glitch/components/error_boundary.js +++ b/app/javascript/flavours/glitch/components/error_boundary.js @@ -50,43 +50,43 @@ export default class ErrorBoundary extends React.PureComponent { <h1><FormattedMessage id='web_app_crash.title' defaultMessage="We're sorry, but something went wrong with the Mastodon app." /></h1> <p> <FormattedMessage id='web_app_crash.content' defaultMessage='You could try any of the following:' /> - <ul> - <li> - <FormattedMessage - id='web_app_crash.report_issue' - defaultMessage='Report a bug in the {issuetracker}' - values={{ issuetracker: <a href='https://github.com/glitch-soc/mastodon/issues' rel='noopener' target='_blank'><FormattedMessage id='web_app_crash.issue_tracker' defaultMessage='issue tracker' /></a> }} - /> - { debugInfo !== '' && ( - <details> - <summary><FormattedMessage id='web_app_crash.debug_info' defaultMessage='Debug information' /></summary> - <textarea - className='web_app_crash-stacktrace' - value={debugInfo} - rows='10' - readOnly - /> - </details> - )} - </li> + </p> + <ul> + <li> + <FormattedMessage + id='web_app_crash.report_issue' + defaultMessage='Report a bug in the {issuetracker}' + values={{ issuetracker: <a href='https://github.com/glitch-soc/mastodon/issues' rel='noopener noreferrer' target='_blank'><FormattedMessage id='web_app_crash.issue_tracker' defaultMessage='issue tracker' /></a> }} + /> + { debugInfo !== '' && ( + <details> + <summary><FormattedMessage id='web_app_crash.debug_info' defaultMessage='Debug information' /></summary> + <textarea + className='web_app_crash-stacktrace' + value={debugInfo} + rows='10' + readOnly + /> + </details> + )} + </li> + <li> + <FormattedMessage + id='web_app_crash.reload_page' + defaultMessage='{reload} the current page' + values={{ reload: <a href='#' onClick={this.handleReload}><FormattedMessage id='web_app_crash.reload' defaultMessage='Reload' /></a> }} + /> + </li> + { preferencesLink !== undefined && ( <li> <FormattedMessage - id='web_app_crash.reload_page' - defaultMessage='{reload} the current page' - values={{ reload: <a href='#' onClick={this.handleReload}><FormattedMessage id='web_app_crash.reload' defaultMessage='Reload' /></a> }} + id='web_app_crash.change_your_settings' + defaultMessage='Change your {settings}' + values={{ settings: <a href={preferencesLink}><FormattedMessage id='web_app_crash.settings' defaultMessage='settings' /></a> }} /> </li> - { preferencesLink !== undefined && ( - <li> - <FormattedMessage - id='web_app_crash.change_your_settings' - defaultMessage='Change your {settings}' - values={{ settings: <a href={preferencesLink}><FormattedMessage id='web_app_crash.settings' defaultMessage='settings' /></a> }} - /> - </li> - )} - </ul> - </p> + )} + </ul> </div> </div> ); diff --git a/app/javascript/flavours/glitch/components/extended_video_player.js b/app/javascript/flavours/glitch/components/extended_video_player.js deleted file mode 100644 index 009c0d559..000000000 --- a/app/javascript/flavours/glitch/components/extended_video_player.js +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -export default class ExtendedVideoPlayer extends React.PureComponent { - - static propTypes = { - src: PropTypes.string.isRequired, - alt: PropTypes.string, - width: PropTypes.number, - height: PropTypes.number, - time: PropTypes.number, - controls: PropTypes.bool.isRequired, - muted: PropTypes.bool.isRequired, - onClick: PropTypes.func, - }; - - handleLoadedData = () => { - if (this.props.time) { - this.video.currentTime = this.props.time; - } - } - - componentDidMount () { - this.video.addEventListener('loadeddata', this.handleLoadedData); - } - - componentWillUnmount () { - this.video.removeEventListener('loadeddata', this.handleLoadedData); - } - - setRef = (c) => { - this.video = c; - } - - handleClick = e => { - e.stopPropagation(); - const handler = this.props.onClick; - if (handler) handler(); - } - - render () { - const { src, muted, controls, alt } = this.props; - - return ( - <div className='extended-video-player'> - <video - ref={this.setRef} - src={src} - autoPlay - role='button' - tabIndex='0' - aria-label={alt} - title={alt} - muted={muted} - controls={controls} - loop={!controls} - onClick={this.handleClick} - /> - </div> - ); - } - -} diff --git a/app/javascript/flavours/glitch/components/gifv.js b/app/javascript/flavours/glitch/components/gifv.js new file mode 100644 index 000000000..83cfae49c --- /dev/null +++ b/app/javascript/flavours/glitch/components/gifv.js @@ -0,0 +1,75 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +export default class GIFV extends React.PureComponent { + + static propTypes = { + src: PropTypes.string.isRequired, + alt: PropTypes.string, + width: PropTypes.number, + height: PropTypes.number, + onClick: PropTypes.func, + }; + + state = { + loading: true, + }; + + handleLoadedData = () => { + this.setState({ loading: false }); + } + + componentWillReceiveProps (nextProps) { + if (nextProps.src !== this.props.src) { + this.setState({ loading: true }); + } + } + + handleClick = e => { + const { onClick } = this.props; + + if (onClick) { + e.stopPropagation(); + onClick(); + } + } + + render () { + const { src, width, height, alt } = this.props; + const { loading } = this.state; + + return ( + <div className='gifv' style={{ position: 'relative' }}> + {loading && ( + <canvas + width={width} + height={height} + role='button' + tabIndex='0' + aria-label={alt} + title={alt} + onClick={this.handleClick} + /> + )} + + <video + src={src} + width={width} + height={height} + role='button' + tabIndex='0' + aria-label={alt} + title={alt} + muted + loop + autoPlay + playsInline + onClick={this.handleClick} + onLoadedData={this.handleLoadedData} + style={{ position: loading ? 'absolute' : 'static', top: 0, left: 0 }} + /> + </div> + ); + } + +} diff --git a/app/javascript/flavours/glitch/components/hashtag.js b/app/javascript/flavours/glitch/components/hashtag.js index d75edd994..d42bee0e9 100644 --- a/app/javascript/flavours/glitch/components/hashtag.js +++ b/app/javascript/flavours/glitch/components/hashtag.js @@ -12,11 +12,11 @@ const Hashtag = ({ hashtag }) => ( #<span>{hashtag.get('name')}</span> </Permalink> - <FormattedMessage id='trends.count_by_accounts' defaultMessage='{count} {rawCount, plural, one {person} other {people}} talking' values={{ rawCount: hashtag.getIn(['history', 0, 'accounts']), count: <strong>{shortNumberFormat(hashtag.getIn(['history', 0, 'accounts']))}</strong> }} /> + <FormattedMessage id='trends.count_by_accounts' defaultMessage='{count} {rawCount, plural, one {person} other {people}} talking' values={{ rawCount: hashtag.getIn(['history', 0, 'accounts']) * 1 + hashtag.getIn(['history', 1, 'accounts']) * 1, count: <strong>{shortNumberFormat(hashtag.getIn(['history', 0, 'accounts']) * 1 + hashtag.getIn(['history', 1, 'accounts']) * 1)}</strong> }} /> </div> <div className='trends__item__current'> - {shortNumberFormat(hashtag.getIn(['history', 0, 'uses']))} + {shortNumberFormat(hashtag.getIn(['history', 0, 'uses']) * 1 + hashtag.getIn(['history', 1, 'uses']) * 1)} </div> <div className='trends__item__sparkline'> diff --git a/app/javascript/flavours/glitch/components/icon.js b/app/javascript/flavours/glitch/components/icon.js index 8f55a0115..d8a17722f 100644 --- a/app/javascript/flavours/glitch/components/icon.js +++ b/app/javascript/flavours/glitch/components/icon.js @@ -1,26 +1,21 @@ -// Package imports. -import classNames from 'classnames'; -import PropTypes from 'prop-types'; import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; -// This just renders a FontAwesome icon. -export default function Icon ({ - className, - fullwidth, - icon, -}) { - const computedClass = classNames('icon', 'fa', { 'fa-fw': fullwidth }, `fa-${icon}`, className); - return icon ? ( - <span - aria-hidden='true' - className={computedClass} - /> - ) : null; -} +export default class Icon extends React.PureComponent { -// Props. -Icon.propTypes = { - className: PropTypes.string, - fullwidth: PropTypes.bool, - icon: PropTypes.string, -}; + static propTypes = { + id: PropTypes.string.isRequired, + className: PropTypes.string, + fixedWidth: PropTypes.bool, + }; + + render () { + const { id, className, fixedWidth, ...other } = this.props; + + return ( + <i role='img' className={classNames('fa', `fa-${id}`, className, { 'fa-fw': fixedWidth })} {...other} /> + ); + } + +} diff --git a/app/javascript/flavours/glitch/components/icon_button.js b/app/javascript/flavours/glitch/components/icon_button.js index 6a25794d3..e134d0a39 100644 --- a/app/javascript/flavours/glitch/components/icon_button.js +++ b/app/javascript/flavours/glitch/components/icon_button.js @@ -3,6 +3,7 @@ import Motion from 'flavours/glitch/util/optional_motion'; import spring from 'react-motion/lib/spring'; import PropTypes from 'prop-types'; import classNames from 'classnames'; +import Icon from 'flavours/glitch/components/icon'; export default class IconButton extends React.PureComponent { @@ -11,6 +12,9 @@ export default class IconButton extends React.PureComponent { title: PropTypes.string.isRequired, icon: PropTypes.string.isRequired, onClick: PropTypes.func, + onMouseDown: PropTypes.func, + onKeyDown: PropTypes.func, + onKeyPress: PropTypes.func, size: PropTypes.number, active: PropTypes.bool, pressed: PropTypes.bool, @@ -20,7 +24,6 @@ export default class IconButton extends React.PureComponent { disabled: PropTypes.bool, inverted: PropTypes.bool, animate: PropTypes.bool, - flip: PropTypes.bool, overlay: PropTypes.bool, tabIndex: PropTypes.string, label: PropTypes.string, @@ -35,6 +38,21 @@ export default class IconButton extends React.PureComponent { tabIndex: '0', }; + state = { + activate: false, + deactivate: false, + } + + componentWillReceiveProps (nextProps) { + if (!nextProps.animate) return; + + if (this.props.active && !nextProps.active) { + this.setState({ activate: false, deactivate: true }); + } else if (!this.props.active && nextProps.active) { + this.setState({ activate: true, deactivate: false }); + } + } + handleClick = (e) => { e.preventDefault(); @@ -43,6 +61,24 @@ export default class IconButton extends React.PureComponent { } } + handleKeyPress = (e) => { + if (this.props.onKeyPress && !this.props.disabled) { + this.props.onKeyPress(e); + } + } + + handleMouseDown = (e) => { + if (!this.props.disabled && this.props.onMouseDown) { + this.props.onMouseDown(e); + } + } + + handleKeyDown = (e) => { + if (!this.props.disabled && this.props.onKeyDown) { + this.props.onKeyDown(e); + } + } + render () { let style = { fontSize: `${this.props.size}px`, @@ -59,80 +95,49 @@ export default class IconButton extends React.PureComponent { const { active, - animate, className, disabled, expanded, icon, inverted, - flip, overlay, pressed, tabIndex, title, } = this.props; + const { + activate, + deactivate, + } = this.state; + const classes = classNames(className, 'icon-button', { active, disabled, inverted, + activate, + deactivate, overlayed: overlay, }); - const flipDeg = flip ? -180 : -360; - const rotateDeg = active ? flipDeg : 0; - - const motionDefaultStyle = { - rotate: rotateDeg, - }; - - const springOpts = { - stiffness: this.props.flip ? 60 : 120, - damping: 7, - }; - const motionStyle = { - rotate: animate ? spring(rotateDeg, springOpts) : 0, - }; - - if (!animate) { - // Perf optimization: avoid unnecessary <Motion> components unless - // we actually need to animate. - return ( - <button - aria-label={title} - aria-pressed={pressed} - aria-expanded={expanded} - title={title} - className={classes} - onClick={this.handleClick} - style={style} - tabIndex={tabIndex} - disabled={disabled} - > - <i className={`fa fa-fw fa-${icon}`} aria-hidden='true' /> - </button> - ); - } - return ( - <Motion defaultStyle={motionDefaultStyle} style={motionStyle}> - {({ rotate }) => - (<button - aria-label={title} - aria-pressed={pressed} - aria-expanded={expanded} - title={title} - className={classes} - onClick={this.handleClick} - style={style} - tabIndex={tabIndex} - disabled={disabled} - > - <i style={{ transform: `rotate(${rotate}deg)` }} className={`fa fa-fw fa-${icon}`} aria-hidden='true' /> - {this.props.label} - </button>) - } - </Motion> + <button + aria-label={title} + aria-pressed={pressed} + aria-expanded={expanded} + title={title} + className={classes} + onClick={this.handleClick} + onMouseDown={this.handleMouseDown} + onKeyDown={this.handleKeyDown} + onKeyPress={this.handleKeyPress} + style={style} + tabIndex={tabIndex} + disabled={disabled} + > + <Icon id={icon} fixedWidth aria-hidden='true' /> + {this.props.label} + </button> ); } diff --git a/app/javascript/flavours/glitch/components/icon_with_badge.js b/app/javascript/flavours/glitch/components/icon_with_badge.js index 4a15ee5b4..219efc28c 100644 --- a/app/javascript/flavours/glitch/components/icon_with_badge.js +++ b/app/javascript/flavours/glitch/components/icon_with_badge.js @@ -6,7 +6,7 @@ const formatNumber = num => num > 40 ? '40+' : num; const IconWithBadge = ({ id, count, className }) => ( <i className='icon-with-badge'> - <Icon icon={id} fixedWidth className={className} /> + <Icon id={id} fixedWidth className={className} /> {count > 0 && <i className='icon-with-badge__badge'>{formatNumber(count)}</i>} </i> ); diff --git a/app/javascript/flavours/glitch/components/intersection_observer_article.js b/app/javascript/flavours/glitch/components/intersection_observer_article.js index 900c98638..03b3700df 100644 --- a/app/javascript/flavours/glitch/components/intersection_observer_article.js +++ b/app/javascript/flavours/glitch/components/intersection_observer_article.js @@ -1,10 +1,12 @@ import React from 'react'; import PropTypes from 'prop-types'; -import ImmutablePureComponent from 'react-immutable-pure-component'; import scheduleIdleTask from 'flavours/glitch/util/schedule_idle_task'; import getRectFromEntry from 'flavours/glitch/util/get_rect_from_entry'; -export default class IntersectionObserverArticle extends ImmutablePureComponent { +// Diff these props in the "unrendered" state +const updateOnPropsForUnrendered = ['id', 'index', 'listLength', 'cachedHeight']; + +export default class IntersectionObserverArticle extends React.Component { static propTypes = { intersectionObserverWrapper: PropTypes.object.isRequired, @@ -22,20 +24,21 @@ export default class IntersectionObserverArticle extends ImmutablePureComponent } shouldComponentUpdate (nextProps, nextState) { - if (!nextState.isIntersecting && nextState.isHidden) { - // It's only if we're not intersecting (i.e. offscreen) and isHidden is true - // that either "isIntersecting" or "isHidden" matter, and then they're - // the only things that matter (and updated ARIA attributes). - return this.state.isIntersecting || !this.state.isHidden || nextProps.listLength !== this.props.listLength; - } else if (nextState.isIntersecting && !this.state.isIntersecting) { - // If we're going from a non-intersecting state to an intersecting state, - // (i.e. offscreen to onscreen), then we definitely need to re-render + const isUnrendered = !this.state.isIntersecting && (this.state.isHidden || this.props.cachedHeight); + const willBeUnrendered = !nextState.isIntersecting && (nextState.isHidden || nextProps.cachedHeight); + if (!!isUnrendered !== !!willBeUnrendered) { + // If we're going from rendered to unrendered (or vice versa) then update return true; } - // Otherwise, diff based on "updateOnProps" and "updateOnStates" - return super.shouldComponentUpdate(nextProps, nextState); + // If we are and remain hidden, diff based on props + if (isUnrendered) { + return !updateOnPropsForUnrendered.every(prop => nextProps[prop] === this.props[prop]); + } + // Else, assume the children have changed + return true; } + componentDidMount () { const { intersectionObserverWrapper, id } = this.props; @@ -119,7 +122,7 @@ export default class IntersectionObserverArticle extends ImmutablePureComponent data-id={id} tabIndex='0' style={style}> - {children && React.cloneElement(children, { hidden: !isIntersecting && (isHidden || cachedHeight) })} + {children && React.cloneElement(children, { hidden: !isIntersecting && (isHidden || !!cachedHeight) })} </article> ); } diff --git a/app/javascript/flavours/glitch/components/load_gap.js b/app/javascript/flavours/glitch/components/load_gap.js index 012303ae1..fe3f60a58 100644 --- a/app/javascript/flavours/glitch/components/load_gap.js +++ b/app/javascript/flavours/glitch/components/load_gap.js @@ -1,13 +1,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import { injectIntl, defineMessages } from 'react-intl'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ load_more: { id: 'status.load_more', defaultMessage: 'Load more' }, }); -@injectIntl -export default class LoadGap extends React.PureComponent { +export default @injectIntl +class LoadGap extends React.PureComponent { static propTypes = { disabled: PropTypes.bool, @@ -25,7 +26,7 @@ export default class LoadGap extends React.PureComponent { return ( <button className='load-more load-gap' disabled={disabled} onClick={this.handleClick} aria-label={intl.formatMessage(messages.load_more)}> - <i className='fa fa-ellipsis-h' /> + <Icon id='ellipsis-h' /> </button> ); } diff --git a/app/javascript/flavours/glitch/components/load_pending.js b/app/javascript/flavours/glitch/components/load_pending.js new file mode 100644 index 000000000..7e2702403 --- /dev/null +++ b/app/javascript/flavours/glitch/components/load_pending.js @@ -0,0 +1,22 @@ +import React from 'react'; +import { FormattedMessage } from 'react-intl'; +import PropTypes from 'prop-types'; + +export default class LoadPending extends React.PureComponent { + + static propTypes = { + onClick: PropTypes.func, + count: PropTypes.number, + } + + render() { + const { count } = this.props; + + return ( + <button className='load-more load-gap' onClick={this.props.onClick}> + <FormattedMessage id='load_pending' defaultMessage='{count, plural, one {# new item} other {# new items}}' values={{ count }} /> + </button> + ); + } + +} diff --git a/app/javascript/flavours/glitch/components/media_gallery.js b/app/javascript/flavours/glitch/components/media_gallery.js index 6ef101f11..85ee79e11 100644 --- a/app/javascript/flavours/glitch/components/media_gallery.js +++ b/app/javascript/flavours/glitch/components/media_gallery.js @@ -6,7 +6,7 @@ import IconButton from './icon_button'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { isIOS } from 'flavours/glitch/util/is_mobile'; import classNames from 'classnames'; -import { autoPlayGif, displayMedia } from 'flavours/glitch/util/initial_state'; +import { autoPlayGif, displayMedia, useBlurhash } from 'flavours/glitch/util/initial_state'; import { decode } from 'blurhash'; const messages = defineMessages({ @@ -101,6 +101,8 @@ class Item extends React.PureComponent { } _decode () { + if (!useBlurhash) return; + const hash = this.props.attachment.get('blurhash'); const pixels = decode(hash, 32, 32); @@ -177,7 +179,7 @@ class Item extends React.PureComponent { if (attachment.get('type') === 'unknown') { return ( <div className={classNames('media-gallery__item', { standalone })} key={attachment.get('id')} style={{ left: left, top: top, right: right, bottom: bottom, width: `${width}%`, height: `${height}%` }}> - <a className='media-gallery__item-thumbnail' href={attachment.get('remote_url')} target='_blank' style={{ cursor: 'pointer' }}> + <a className='media-gallery__item-thumbnail' href={attachment.get('remote_url') || attachment.get('url')} style={{ cursor: 'pointer' }} title={attachment.get('description')} target='_blank' rel='noopener noreferrer'> <canvas width={32} height={32} ref={this.setCanvasRef} className='media-gallery__preview' /> </a> </div> @@ -205,6 +207,7 @@ class Item extends React.PureComponent { href={attachment.get('remote_url') || originalUrl} onClick={this.handleClick} target='_blank' + rel='noopener noreferrer' > <img className={letterbox ? 'letterbox' : null} @@ -252,8 +255,8 @@ class Item extends React.PureComponent { } -@injectIntl -export default class MediaGallery extends React.PureComponent { +export default @injectIntl +class MediaGallery extends React.PureComponent { static propTypes = { sensitive: PropTypes.bool, @@ -327,7 +330,8 @@ export default class MediaGallery extends React.PureComponent { render () { const { media, intl, sensitive, letterbox, fullwidth, defaultWidth } = this.props; const { visible } = this.state; - const size = media.take(4).size; + const size = media.take(4).size; + const uncached = media.every(attachment => attachment.get('type') === 'unknown'); const width = this.state.width || defaultWidth; @@ -348,10 +352,16 @@ export default class MediaGallery extends React.PureComponent { if (this.isStandaloneEligible()) { children = <Item standalone onClick={this.handleClick} attachment={media.get(0)} displayWidth={width} visible={visible} />; } else { - children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} onClick={this.handleClick} attachment={attachment} index={i} size={size} letterbox={letterbox} displayWidth={width} visible={visible} />); + children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} onClick={this.handleClick} attachment={attachment} index={i} size={size} letterbox={letterbox} displayWidth={width} visible={visible || uncached} />); } - if (visible) { + if (uncached) { + spoilerButton = ( + <button type='button' disabled className='spoiler-button__overlay'> + <span className='spoiler-button__overlay__label'><FormattedMessage id='status.uncached_media_warning' defaultMessage='Not available' /></span> + </button> + ); + } else if (visible) { spoilerButton = <IconButton title={intl.formatMessage(messages.toggle_visible)} icon='eye-slash' overlay onClick={this.handleOpen} />; } else { spoilerButton = ( @@ -363,7 +373,7 @@ export default class MediaGallery extends React.PureComponent { return ( <div className={computedClass} style={style} ref={this.handleRef}> - <div className={classNames('spoiler-button', { 'spoiler-button--minified': visible })}> + <div className={classNames('spoiler-button', { 'spoiler-button--minified': visible && !uncached, 'spoiler-button--click-thru': uncached })}> {spoilerButton} {visible && sensitive && ( <span className='sensitive-marker'> diff --git a/app/javascript/flavours/glitch/components/missing_indicator.js b/app/javascript/flavours/glitch/components/missing_indicator.js index 70d8c3b98..ee5bf7c1e 100644 --- a/app/javascript/flavours/glitch/components/missing_indicator.js +++ b/app/javascript/flavours/glitch/components/missing_indicator.js @@ -1,17 +1,24 @@ import React from 'react'; +import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; +import illustration from 'flavours/glitch/images/elephant_ui_disappointed.svg'; +import classNames from 'classnames'; -const MissingIndicator = () => ( - <div className='regeneration-indicator missing-indicator'> - <div> - <div className='regeneration-indicator__figure' /> +const MissingIndicator = ({ fullPage }) => ( + <div className={classNames('regeneration-indicator', { 'regeneration-indicator--without-header': fullPage })}> + <div className='regeneration-indicator__figure'> + <img src={illustration} alt='' /> + </div> - <div className='regeneration-indicator__label'> - <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' /> - <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' /> - </div> + <div className='regeneration-indicator__label'> + <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' /> + <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' /> </div> </div> ); +MissingIndicator.propTypes = { + fullPage: PropTypes.bool, +}; + export default MissingIndicator; diff --git a/app/javascript/flavours/glitch/components/modal_root.js b/app/javascript/flavours/glitch/components/modal_root.js index 4e8648b49..f9877d5ea 100644 --- a/app/javascript/flavours/glitch/components/modal_root.js +++ b/app/javascript/flavours/glitch/components/modal_root.js @@ -1,5 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; +import 'wicg-inert'; import createHistory from 'history/createBrowserHistory'; export default class ModalRoot extends React.PureComponent { @@ -26,8 +27,30 @@ export default class ModalRoot extends React.PureComponent { } } + handleKeyDown = (e) => { + if (e.key === 'Tab') { + const focusable = Array.from(this.node.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter((x) => window.getComputedStyle(x).display !== 'none'); + const index = focusable.indexOf(e.target); + + let element; + + if (e.shiftKey) { + element = focusable[index - 1] || focusable[focusable.length - 1]; + } else { + element = focusable[index + 1] || focusable[0]; + } + + if (element) { + element.focus(); + e.stopPropagation(); + e.preventDefault(); + } + } + } + componentDidMount () { window.addEventListener('keyup', this.handleKeyUp, false); + window.addEventListener('keydown', this.handleKeyDown, false); this.history = this.context.router ? this.context.router.history : createHistory(); } @@ -39,15 +62,22 @@ export default class ModalRoot extends React.PureComponent { } else if (!nextProps.children) { this.setState({ revealed: false }); } - if (!nextProps.children && !!this.props.children) { - this.activeElement.focus({ preventScroll: true }); - this.activeElement = null; - } } componentDidUpdate (prevProps) { if (!this.props.children && !!prevProps.children) { this.getSiblings().forEach(sibling => sibling.removeAttribute('inert')); + + // Because of the wicg-inert polyfill, the activeElement may not be + // immediately selectable, we have to wait for observers to run, as + // described in https://github.com/WICG/inert#performance-and-gotchas + Promise.resolve().then(() => { + this.activeElement.focus({ preventScroll: true }); + this.activeElement = null; + }).catch((error) => { + console.error(error); + }); + this.handleModalClose(); } if (this.props.children) { @@ -60,6 +90,7 @@ export default class ModalRoot extends React.PureComponent { componentWillUnmount () { window.removeEventListener('keyup', this.handleKeyUp); + window.removeEventListener('keydown', this.handleKeyDown); } handleModalClose () { diff --git a/app/javascript/flavours/glitch/components/notification_purge_buttons.js b/app/javascript/flavours/glitch/components/notification_purge_buttons.js index e0c1543b0..3c7d67109 100644 --- a/app/javascript/flavours/glitch/components/notification_purge_buttons.js +++ b/app/javascript/flavours/glitch/components/notification_purge_buttons.js @@ -10,6 +10,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ btnAll : { id: 'notification_purge.btn_all', defaultMessage: 'Select\nall' }, @@ -18,8 +19,8 @@ const messages = defineMessages({ btnApply : { id: 'notification_purge.btn_apply', defaultMessage: 'Clear\nselected' }, }); -@injectIntl -export default class NotificationPurgeButtons extends ImmutablePureComponent { +export default @injectIntl +class NotificationPurgeButtons extends ImmutablePureComponent { static propTypes = { onDeleteMarked : PropTypes.func.isRequired, @@ -49,7 +50,7 @@ export default class NotificationPurgeButtons extends ImmutablePureComponent { </button> <button onClick={this.props.onDeleteMarked}> - <i className='fa fa-trash' /><br />{intl.formatMessage(messages.btnApply)} + <Icon id='trash' /><br />{intl.formatMessage(messages.btnApply)} </button> </div> ); diff --git a/app/javascript/flavours/glitch/components/poll.js b/app/javascript/flavours/glitch/components/poll.js index 690f9ae5a..62965df94 100644 --- a/app/javascript/flavours/glitch/components/poll.js +++ b/app/javascript/flavours/glitch/components/poll.js @@ -4,15 +4,17 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import { vote, fetchPoll } from 'mastodon/actions/polls'; -import Motion from 'mastodon/features/ui/util/optional_motion'; +import { vote, fetchPoll } from 'flavours/glitch/actions/polls'; +import Motion from 'flavours/glitch/util/optional_motion'; import spring from 'react-motion/lib/spring'; import escapeTextContentForBrowser from 'escape-html'; -import emojify from 'mastodon/features/emoji/emoji'; +import emojify from 'flavours/glitch/util/emoji'; import RelativeTimestamp from './relative_timestamp'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ closed: { id: 'poll.closed', defaultMessage: 'Closed' }, + voted: { id: 'poll.voted', defaultMessage: 'You voted for this answer', description: 'Tooltip of the "voted" checkmark in polls' }, }); const makeEmojiMap = record => record.get('emojis').reduce((obj, emoji) => { @@ -32,11 +34,40 @@ class Poll extends ImmutablePureComponent { state = { selected: {}, + expired: null, }; - handleOptionChange = e => { - const { target: { value } } = e; + static getDerivedStateFromProps (props, state) { + const { poll, intl } = props; + const expires_at = poll.get('expires_at'); + const expired = poll.get('expired') || expires_at !== null && (new Date(expires_at)).getTime() < intl.now(); + return (expired === state.expired) ? null : { expired }; + } + + componentDidMount () { + this._setupTimer(); + } + + componentDidUpdate () { + this._setupTimer(); + } + + componentWillUnmount () { + clearTimeout(this._timer); + } + + _setupTimer () { + const { poll, intl } = this.props; + clearTimeout(this._timer); + if (!this.state.expired) { + const delay = (new Date(poll.get('expires_at'))).getTime() - intl.now(); + this._timer = setTimeout(() => { + this.setState({ expired: true }); + }, delay); + } + } + _toggleOption = value => { if (this.props.poll.get('multiple')) { const tmp = { ...this.state.selected }; if (tmp[value]) { @@ -50,8 +81,20 @@ class Poll extends ImmutablePureComponent { tmp[value] = true; this.setState({ selected: tmp }); } + } + + handleOptionChange = ({ target: { value } }) => { + this._toggleOption(value); }; + handleOptionKeyPress = (e) => { + if (e.key === 'Enter' || e.key === ' ') { + this._toggleOption(e.target.getAttribute('data-index')); + e.stopPropagation(); + e.preventDefault(); + } + } + handleVote = () => { if (this.props.disabled) { return; @@ -68,12 +111,13 @@ class Poll extends ImmutablePureComponent { this.props.dispatch(fetchPoll(this.props.poll.get('id'))); }; - renderOption (option, optionIndex) { - const { poll, disabled } = this.props; - const percent = poll.get('votes_count') === 0 ? 0 : (option.get('votes_count') / poll.get('votes_count')) * 100; - const leading = poll.get('options').filterNot(other => other.get('title') === option.get('title')).every(other => option.get('votes_count') > other.get('votes_count')); - const active = !!this.state.selected[`${optionIndex}`]; - const showResults = poll.get('voted') || poll.get('expired'); + renderOption (option, optionIndex, showResults) { + const { poll, disabled, intl } = this.props; + const pollVotesCount = poll.get('voters_count') || poll.get('votes_count'); + const percent = pollVotesCount === 0 ? 0 : (option.get('votes_count') / pollVotesCount) * 100; + const leading = poll.get('options').filterNot(other => other.get('title') === option.get('title')).every(other => option.get('votes_count') >= other.get('votes_count')); + const active = !!this.state.selected[`${optionIndex}`]; + const voted = option.get('voted') || (poll.get('own_votes') && poll.get('own_votes').includes(optionIndex)); let titleEmojified = option.get('title_emojified'); if (!titleEmojified) { @@ -101,8 +145,21 @@ class Poll extends ImmutablePureComponent { disabled={disabled} /> - {!showResults && <span className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} />} - {showResults && <span className='poll__number'>{Math.round(percent)}%</span>} + {!showResults && ( + <span + className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} + tabIndex='0' + role={poll.get('multiple') ? 'checkbox' : 'radio'} + onKeyPress={this.handleOptionKeyPress} + aria-checked={active} + aria-label={option.get('title')} + data-index={optionIndex} + /> + )} + {showResults && <span className='poll__number'> + {!!voted && <Icon id='check' className='poll__vote__mark' title={intl.formatMessage(messages.voted)} />} + {Math.round(percent)}% + </span>} <span dangerouslySetInnerHTML={{ __html: titleEmojified }} /> </label> @@ -112,25 +169,34 @@ class Poll extends ImmutablePureComponent { render () { const { poll, intl } = this.props; + const { expired } = this.state; if (!poll) { return null; } - const timeRemaining = poll.get('expired') ? intl.formatMessage(messages.closed) : <RelativeTimestamp timestamp={poll.get('expires_at')} futureDate />; - const showResults = poll.get('voted') || poll.get('expired'); + const timeRemaining = expired ? intl.formatMessage(messages.closed) : <RelativeTimestamp timestamp={poll.get('expires_at')} futureDate />; + const showResults = poll.get('voted') || expired; const disabled = this.props.disabled || Object.entries(this.state.selected).every(item => !item); + let votesCount = null; + + if (poll.get('voters_count') !== null && poll.get('voters_count') !== undefined) { + votesCount = <FormattedMessage id='poll.total_people' defaultMessage='{count, plural, one {# person} other {# people}}' values={{ count: poll.get('voters_count') }} />; + } else { + votesCount = <FormattedMessage id='poll.total_votes' defaultMessage='{count, plural, one {# vote} other {# votes}}' values={{ count: poll.get('votes_count') }} />; + } + return ( <div className='poll'> <ul> - {poll.get('options').map((option, i) => this.renderOption(option, i))} + {poll.get('options').map((option, i) => this.renderOption(option, i, showResults))} </ul> <div className='poll__footer'> {!showResults && <button className='button button-secondary' disabled={disabled} onClick={this.handleVote}><FormattedMessage id='poll.vote' defaultMessage='Vote' /></button>} {showResults && !this.props.disabled && <span><button className='poll__link' onClick={this.handleRefresh}><FormattedMessage id='poll.refresh' defaultMessage='Refresh' /></button> · </span>} - <FormattedMessage id='poll.total_votes' defaultMessage='{count, plural, one {# vote} other {# votes}}' values={{ count: poll.get('votes_count') }} /> + {votesCount} {poll.get('expires_at') && <span> · {timeRemaining}</span>} </div> </div> diff --git a/app/javascript/flavours/glitch/components/radio_button.js b/app/javascript/flavours/glitch/components/radio_button.js new file mode 100644 index 000000000..0496fa286 --- /dev/null +++ b/app/javascript/flavours/glitch/components/radio_button.js @@ -0,0 +1,35 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; + +export default class RadioButton extends React.PureComponent { + + static propTypes = { + value: PropTypes.string.isRequired, + checked: PropTypes.bool, + name: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, + label: PropTypes.node.isRequired, + }; + + render () { + const { name, value, checked, onChange, label } = this.props; + + return ( + <label className='radio-button'> + <input + name={name} + type='radio' + value={value} + checked={checked} + onChange={onChange} + /> + + <span className={classNames('radio-button__input', { checked })} /> + + <span>{label}</span> + </label> + ); + } + +} diff --git a/app/javascript/flavours/glitch/components/regeneration_indicator.js b/app/javascript/flavours/glitch/components/regeneration_indicator.js new file mode 100644 index 000000000..f4e0a79ef --- /dev/null +++ b/app/javascript/flavours/glitch/components/regeneration_indicator.js @@ -0,0 +1,18 @@ +import React from 'react'; +import { FormattedMessage } from 'react-intl'; +import illustration from 'flavours/glitch/images/elephant_ui_working.svg'; + +const MissingIndicator = () => ( + <div className='regeneration-indicator'> + <div className='regeneration-indicator__figure'> + <img src={illustration} alt='' /> + </div> + + <div className='regeneration-indicator__label'> + <FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading…' /> + <FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' /> + </div> + </div> +); + +export default MissingIndicator; diff --git a/app/javascript/flavours/glitch/components/scrollable_list.js b/app/javascript/flavours/glitch/components/scrollable_list.js index 462185bbc..c022290a4 100644 --- a/app/javascript/flavours/glitch/components/scrollable_list.js +++ b/app/javascript/flavours/glitch/components/scrollable_list.js @@ -3,6 +3,7 @@ import { ScrollContainer } from 'react-router-scroll-4'; import PropTypes from 'prop-types'; import IntersectionObserverArticleContainer from 'flavours/glitch/containers/intersection_observer_article_container'; import LoadMore from './load_more'; +import LoadPending from './load_pending'; import IntersectionObserverWrapper from 'flavours/glitch/util/intersection_observer_wrapper'; import { throttle } from 'lodash'; import { List as ImmutableList } from 'immutable'; @@ -21,6 +22,7 @@ export default class ScrollableList extends PureComponent { static propTypes = { scrollKey: PropTypes.string.isRequired, onLoadMore: PropTypes.func, + onLoadPending: PropTypes.func, onScrollToTop: PropTypes.func, onScroll: PropTypes.func, trackScroll: PropTypes.bool, @@ -28,10 +30,12 @@ export default class ScrollableList extends PureComponent { isLoading: PropTypes.bool, showLoading: PropTypes.bool, hasMore: PropTypes.bool, + numPending: PropTypes.number, prepend: PropTypes.node, alwaysPrepend: PropTypes.bool, emptyMessage: PropTypes.node, children: PropTypes.node, + bindToDocument: PropTypes.bool, }; static defaultProps = { @@ -47,7 +51,9 @@ export default class ScrollableList extends PureComponent { handleScroll = throttle(() => { if (this.node) { - const { scrollTop, scrollHeight, clientHeight } = this.node; + const scrollTop = this.getScrollTop(); + const scrollHeight = this.getScrollHeight(); + const clientHeight = this.getClientHeight(); const offset = scrollHeight - scrollTop - clientHeight; if (400 > offset && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { @@ -77,9 +83,14 @@ export default class ScrollableList extends PureComponent { scrollToTopOnMouseIdle = false; setScrollTop = newScrollTop => { - if (this.node.scrollTop !== newScrollTop) { + if (this.getScrollTop() !== newScrollTop) { this.lastScrollWasSynthetic = true; - this.node.scrollTop = newScrollTop; + + if (this.props.bindToDocument) { + document.scrollingElement.scrollTop = newScrollTop; + } else { + this.node.scrollTop = newScrollTop; + } } }; @@ -97,7 +108,7 @@ export default class ScrollableList extends PureComponent { this.mouseIdleTimer = setTimeout(this.handleMouseIdle, MOUSE_IDLE_DELAY); - if (!this.mouseMovedRecently && this.node.scrollTop === 0) { + if (!this.mouseMovedRecently && this.getScrollTop() === 0) { // Only set if we just started moving and are scrolled to the top. this.scrollToTopOnMouseIdle = true; } @@ -129,15 +140,27 @@ export default class ScrollableList extends PureComponent { } getScrollPosition = () => { - if (this.node && (this.node.scrollTop > 0 || this.mouseMovedRecently)) { - return {height: this.node.scrollHeight, top: this.node.scrollTop}; + if (this.node && (this.getScrollTop() > 0 || this.mouseMovedRecently)) { + return { height: this.getScrollHeight(), top: this.getScrollTop() }; } else { return null; } } + getScrollTop = () => { + return this.props.bindToDocument ? document.scrollingElement.scrollTop : this.node.scrollTop; + } + + getScrollHeight = () => { + return this.props.bindToDocument ? document.scrollingElement.scrollHeight : this.node.scrollHeight; + } + + getClientHeight = () => { + return this.props.bindToDocument ? document.scrollingElement.clientHeight : this.node.clientHeight; + } + updateScrollBottom = (snapshot) => { - const newScrollTop = this.node.scrollHeight - snapshot; + const newScrollTop = this.getScrollHeight() - snapshot; this.setScrollTop(newScrollTop); } @@ -150,8 +173,10 @@ export default class ScrollableList extends PureComponent { const someItemInserted = React.Children.count(prevProps.children) > 0 && React.Children.count(prevProps.children) < React.Children.count(this.props.children) && this.getFirstChildKey(prevProps) !== this.getFirstChildKey(this.props); - if (someItemInserted && (this.node.scrollTop > 0 || this.mouseMovedRecently)) { - return this.node.scrollHeight - this.node.scrollTop; + const pendingChanged = (prevProps.numPending > 0) !== (this.props.numPending > 0); + + if (pendingChanged || someItemInserted && (this.getScrollTop() > 0 || this.mouseMovedRecently)) { + return this.getScrollHeight() - this.getScrollTop(); } else { return null; } @@ -160,7 +185,9 @@ export default class ScrollableList extends PureComponent { componentDidUpdate (prevProps, prevState, snapshot) { // Reset the scroll position when a new child comes in in order not to // jerk the scrollbar around if you're already scrolled down the page. - if (snapshot !== null) this.updateScrollBottom(snapshot); + if (snapshot !== null) { + this.updateScrollBottom(snapshot); + } } componentWillUnmount () { @@ -186,13 +213,23 @@ export default class ScrollableList extends PureComponent { } attachScrollListener () { - this.node.addEventListener('scroll', this.handleScroll); - this.node.addEventListener('wheel', this.handleWheel); + if (this.props.bindToDocument) { + document.addEventListener('scroll', this.handleScroll); + document.addEventListener('wheel', this.handleWheel); + } else { + this.node.addEventListener('scroll', this.handleScroll); + this.node.addEventListener('wheel', this.handleWheel); + } } detachScrollListener () { - this.node.removeEventListener('scroll', this.handleScroll); - this.node.removeEventListener('wheel', this.handleWheel); + if (this.props.bindToDocument) { + document.removeEventListener('scroll', this.handleScroll); + document.removeEventListener('wheel', this.handleWheel); + } else { + this.node.removeEventListener('scroll', this.handleScroll); + this.node.removeEventListener('wheel', this.handleWheel); + } } getFirstChildKey (props) { @@ -222,12 +259,25 @@ export default class ScrollableList extends PureComponent { return !(location.state && location.state.mastodonModalOpen); } + handleLoadPending = e => { + e.preventDefault(); + this.props.onLoadPending(); + // Prevent the weird scroll-jumping behavior, as we explicitly don't want to + // scroll to top, and we know the scroll height is going to change + this.scrollToTopOnMouseIdle = false; + this.lastScrollWasSynthetic = false; + this.clearMouseIdleTimer(); + this.mouseIdleTimer = setTimeout(this.handleMouseIdle, MOUSE_IDLE_DELAY); + this.mouseMovedRecently = true; + } + render () { - const { children, scrollKey, trackScroll, shouldUpdateScroll, showLoading, isLoading, hasMore, prepend, alwaysPrepend, emptyMessage, onLoadMore } = this.props; + const { children, scrollKey, trackScroll, shouldUpdateScroll, showLoading, isLoading, hasMore, numPending, prepend, alwaysPrepend, emptyMessage, onLoadMore } = this.props; const { fullscreen } = this.state; const childrenCount = React.Children.count(children); const loadMore = (hasMore && onLoadMore) ? <LoadMore visible={!isLoading} onClick={this.handleLoadMore} /> : null; + const loadPending = (numPending > 0) ? <LoadPending count={numPending} onClick={this.handleLoadPending} /> : null; let scrollableArea = null; if (showLoading) { @@ -248,6 +298,8 @@ export default class ScrollableList extends PureComponent { <div role='feed' className='item-list'> {prepend} + {loadPending} + {React.Children.map(this.props.children, (child, index) => ( <IntersectionObserverArticleContainer key={child.key} diff --git a/app/javascript/flavours/glitch/components/spoilers.js b/app/javascript/flavours/glitch/components/spoilers.js new file mode 100644 index 000000000..8527403c1 --- /dev/null +++ b/app/javascript/flavours/glitch/components/spoilers.js @@ -0,0 +1,50 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { FormattedMessage } from 'react-intl'; + +export default +class Spoilers extends React.PureComponent { + static propTypes = { + spoilerText: PropTypes.string, + children: PropTypes.node, + }; + + state = { + hidden: true, + } + + handleSpoilerClick = () => { + this.setState({ hidden: !this.state.hidden }); + } + + render () { + const { spoilerText, children } = this.props; + const { hidden } = this.state; + + const toggleText = hidden ? + <FormattedMessage + id='status.show_more' + defaultMessage='Show more' + key='0' + /> : + <FormattedMessage + id='status.show_less' + defaultMessage='Show less' + key='0' + />; + + return ([ + <p className='spoiler__text'> + {spoilerText} + {' '} + <button tabIndex='0' className='status__content__spoiler-link' onClick={this.handleSpoilerClick}> + {toggleText} + </button> + </p>, + <div className={`status__content__spoiler ${!hidden ? 'status__content__spoiler--visible' : ''}`}> + {children} + </div> + ]); + } +} + diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index f6d73475a..23cdc0167 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -10,7 +10,7 @@ import AttachmentList from './attachment_list'; import Card from '../features/status/components/card'; import { injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { MediaGallery, Video } from 'flavours/glitch/util/async-components'; +import { MediaGallery, Video, Audio } from 'flavours/glitch/util/async-components'; import { HotKeys } from 'react-hotkeys'; import NotificationOverlayContainer from 'flavours/glitch/features/notifications/containers/overlay_container'; import classNames from 'classnames'; @@ -55,8 +55,8 @@ export const defaultMediaVisibility = (status, settings) => { return (displayMedia !== 'hide_all' && !status.get('sensitive') || displayMedia === 'show_all'); } -@injectIntl -export default class Status extends ImmutablePureComponent { +export default @injectIntl +class Status extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -105,6 +105,8 @@ export default class Status extends ImmutablePureComponent { showMedia: undefined, statusId: undefined, revealBehindCW: undefined, + showCard: false, + forceFilter: undefined, } // Avoid checking props that are functions (and whose equality will always @@ -125,6 +127,7 @@ export default class Status extends ImmutablePureComponent { 'isExpanded', 'isCollapsed', 'showMedia', + 'forceFilter', ] // If our settings have changed to disable collapsed statuses, then we @@ -255,28 +258,32 @@ export default class Status extends ImmutablePureComponent { this.setState({ autoCollapsed: true }); } - this.didShowCard = !this.props.muted && !this.props.hidden && this.props.status && this.props.status.get('card') && this.props.settings.get('inline_preview_cards'); + // Hack to fix timeline jumps when a preview card is fetched + this.setState({ + showCard: !this.props.muted && !this.props.hidden && this.props.status && this.props.status.get('card') && this.props.settings.get('inline_preview_cards'), + }); } + // Hack to fix timeline jumps on second rendering when auto-collapsing + // or on subsequent rendering when a preview card has been fetched getSnapshotBeforeUpdate (prevProps, prevState) { - if (this.props.getScrollPosition) { + if (!this.props.getScrollPosition) return null; + + const { muted, hidden, status, settings } = this.props; + + const doShowCard = !muted && !hidden && status && status.get('card') && settings.get('inline_preview_cards'); + if (this.state.autoCollapsed || (doShowCard && !this.state.showCard)) { + if (doShowCard) this.setState({ showCard: true }); + if (this.state.autoCollapsed) this.setState({ autoCollapsed: false }); return this.props.getScrollPosition(); } else { return null; } } - // Hack to fix timeline jumps on second rendering when auto-collapsing componentDidUpdate (prevProps, prevState, snapshot) { - const doShowCard = !this.props.muted && !this.props.hidden && this.props.status && this.props.status.get('card') && this.props.settings.get('inline_preview_cards'); - if (this.state.autoCollapsed || (doShowCard && !this.didShowCard)) { - if (doShowCard) this.didShowCard = true; - if (this.state.autoCollapsed) this.setState({ autoCollapsed: false }); - if (snapshot !== null && this.props.updateScrollBottom) { - if (this.node.offsetTop < snapshot.top) { - this.props.updateScrollBottom(snapshot.height - snapshot.top); - } - } + if (snapshot !== null && this.props.updateScrollBottom && this.node.offsetTop < snapshot.top) { + this.props.updateScrollBottom(snapshot.height - snapshot.top); } } @@ -369,6 +376,22 @@ export default class Status extends ImmutablePureComponent { this.props.onOpenVideo(media, startTime); } + handleHotkeyOpenMedia = e => { + const { status, onOpenMedia, onOpenVideo } = this.props; + + e.preventDefault(); + + if (status.get('media_attachments').size > 0) { + if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + // TODO: toggle play/paused? + } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + onOpenVideo(status.getIn(['media_attachments', 0]), 0); + } else { + onOpenMedia(status.get('media_attachments'), 0); + } + } + } + handleHotkeyReply = e => { e.preventDefault(); this.props.onReply(this.props.status, this.context.router.history); @@ -422,16 +445,29 @@ export default class Status extends ImmutablePureComponent { this.handleToggleMediaVisibility(); } + handleUnfilterClick = e => { + const { onUnfilter, status } = this.props; + onUnfilter(status.get('reblog') ? status.get('reblog') : status, () => this.setState({ forceFilter: false })); + } + + handleFilterClick = () => { + this.setState({ forceFilter: true }); + } + handleRef = c => { this.node = c; } renderLoadingMediaGallery () { - return <div className='media_gallery' style={{ height: '110px' }} />; + return <div className='media-gallery' style={{ height: '110px' }} />; } renderLoadingVideoPlayer () { - return <div className='media-spoiler-video' style={{ height: '110px' }} />; + return <div className='video-player' style={{ height: '110px' }} />; + } + + renderLoadingAudioPlayer () { + return <div className='audio-player' style={{ height: '110px' }} />; } render () { @@ -460,7 +496,7 @@ export default class Status extends ImmutablePureComponent { featured, ...other } = this.props; - const { isExpanded, isCollapsed } = this.state; + const { isExpanded, isCollapsed, forceFilter } = this.state; let background = null; let attachments = null; let media = null; @@ -470,17 +506,36 @@ export default class Status extends ImmutablePureComponent { return null; } + const handlers = { + reply: this.handleHotkeyReply, + favourite: this.handleHotkeyFavourite, + boost: this.handleHotkeyBoost, + mention: this.handleHotkeyMention, + open: this.handleHotkeyOpen, + openProfile: this.handleHotkeyOpenProfile, + moveUp: this.handleHotkeyMoveUp, + moveDown: this.handleHotkeyMoveDown, + toggleSpoiler: this.handleExpandedToggle, + bookmark: this.handleHotkeyBookmark, + toggleCollapse: this.handleHotkeyCollapse, + toggleSensitive: this.handleHotkeyToggleSensitive, + openMedia: this.handleHotkeyOpenMedia, + }; + if (hidden) { return ( - <div ref={this.handleRef}> - {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} - {' '} - {status.get('content')} - </div> + <HotKeys handlers={handlers}> + <div ref={this.handleRef} className='status focusable' tabIndex='0'> + {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} + {' '} + {status.get('content')} + </div> + </HotKeys> ); } - if (status.get('filtered') || status.getIn(['reblog', 'filtered'])) { + const filtered = (status.get('filtered') || status.getIn(['reblog', 'filtered'])) && settings.get('filtering_behavior') !== 'content_warning'; + if (forceFilter === undefined ? filtered : forceFilter) { const minHandlers = this.props.muted ? {} : { moveUp: this.handleHotkeyMoveUp, moveDown: this.handleHotkeyMoveDown, @@ -490,6 +545,12 @@ export default class Status extends ImmutablePureComponent { <HotKeys handlers={minHandlers}> <div className='status__wrapper status__wrapper--filtered focusable' tabIndex='0' ref={this.handleRef}> <FormattedMessage id='status.filtered' defaultMessage='Filtered' /> + {settings.get('filtering_behavior') !== 'upstream' && ' '} + {settings.get('filtering_behavior') !== 'upstream' && ( + <button className='status__wrapper--filtered__button' onClick={this.handleUnfilterClick}> + <FormattedMessage id='status.show_filter_reason' defaultMessage='(show why)' /> + </button> + )} </div> </HotKeys> ); @@ -521,16 +582,33 @@ export default class Status extends ImmutablePureComponent { media={status.get('media_attachments')} /> ); - } else if (attachments.getIn([0, 'type']) === 'video') { // Media type is 'video' - const video = status.getIn(['media_attachments', 0]); + } else if (attachments.getIn([0, 'type']) === 'audio') { + const attachment = status.getIn(['media_attachments', 0]); + + media = ( + <Bundle fetchComponent={Audio} loading={this.renderLoadingAudioPlayer} > + {Component => ( + <Component + src={attachment.get('url')} + alt={attachment.get('description')} + duration={attachment.getIn(['meta', 'original', 'duration'], 0)} + peaks={[0]} + height={70} + /> + )} + </Bundle> + ); + mediaIcon = 'music'; + } else if (attachments.getIn([0, 'type']) === 'video') { + const attachment = status.getIn(['media_attachments', 0]); media = ( <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} > {Component => (<Component - preview={video.get('preview_url')} - blurhash={video.get('blurhash')} - src={video.get('url')} - alt={video.get('description')} + preview={attachment.get('preview_url')} + blurhash={attachment.get('blurhash')} + src={attachment.get('url')} + alt={attachment.get('description')} inline sensitive={status.get('sensitive')} letterbox={settings.getIn(['media', 'letterbox'])} @@ -605,21 +683,6 @@ export default class Status extends ImmutablePureComponent { rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} boosted' }, { name: account.get('acct') }); } - const handlers = { - reply: this.handleHotkeyReply, - favourite: this.handleHotkeyFavourite, - boost: this.handleHotkeyBoost, - mention: this.handleHotkeyMention, - open: this.handleHotkeyOpen, - openProfile: this.handleHotkeyOpenProfile, - moveUp: this.handleHotkeyMoveUp, - moveDown: this.handleHotkeyMoveDown, - toggleSpoiler: this.handleExpandedToggle, - bookmark: this.handleHotkeyBookmark, - toggleCollapse: this.handleHotkeyCollapse, - toggleSensitive: this.handleHotkeyToggleSensitive, - }; - const computedClass = classNames('status', `status-${status.get('visibility')}`, { collapsed: isCollapsed, 'has-background': isCollapsed && background, @@ -676,6 +739,8 @@ export default class Status extends ImmutablePureComponent { onExpandedToggle={this.handleExpandedToggle} parseClick={parseClick} disabled={!router} + tagLinks={settings.get('tag_misleading_links')} + rewriteMentions={settings.get('rewrite_mentions')} /> {!isCollapsed || !(muted || !settings.getIn(['collapsed', 'show_action_bar'])) ? ( <StatusActionBar @@ -684,6 +749,7 @@ export default class Status extends ImmutablePureComponent { account={status.get('account')} showReplyCount={settings.get('show_reply_count')} directMessage={!!otherAccounts} + onFilter={this.handleFilterClick} /> ) : null} {notification ? ( diff --git a/app/javascript/flavours/glitch/components/status_action_bar.js b/app/javascript/flavours/glitch/components/status_action_bar.js index 85bc4a976..60b370622 100644 --- a/app/javascript/flavours/glitch/components/status_action_bar.js +++ b/app/javascript/flavours/glitch/components/status_action_bar.js @@ -35,6 +35,7 @@ const messages = defineMessages({ admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' }, admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' }, copy: { id: 'status.copy', defaultMessage: 'Copy link to status' }, + hide: { id: 'status.hide', defaultMessage: 'Hide toot' }, }); const obfuscatedCount = count => { @@ -47,8 +48,8 @@ const obfuscatedCount = count => { } }; -@injectIntl -export default class StatusActionBar extends ImmutablePureComponent { +export default @injectIntl +class StatusActionBar extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -69,6 +70,7 @@ export default class StatusActionBar extends ImmutablePureComponent { onMuteConversation: PropTypes.func, onPin: PropTypes.func, onBookmark: PropTypes.func, + onFilter: PropTypes.func, withDismiss: PropTypes.bool, showReplyCount: PropTypes.bool, directMessage: PropTypes.bool, @@ -191,6 +193,10 @@ export default class StatusActionBar extends ImmutablePureComponent { } } + handleFilterClick = () => { + this.props.onFilter(); + } + render () { const { status, intl, withDismiss, showReplyCount, directMessage } = this.props; @@ -263,6 +269,10 @@ export default class StatusActionBar extends ImmutablePureComponent { <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.share)} icon='share-alt' onClick={this.handleShareClick} /> ); + const filterButton = status.get('filtered') && ( + <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.hide)} icon='eye' onClick={this.handleFilterClick} /> + ); + let replyButton = ( <IconButton className='status__action-bar-button' @@ -284,11 +294,12 @@ export default class StatusActionBar extends ImmutablePureComponent { <div className='status__action-bar'> {replyButton} {!directMessage && [ - <IconButton className='status__action-bar-button' disabled={reblogDisabled} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogDisabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(reblogMessage)} icon={reblogIcon} onClick={this.handleReblogClick} />, - <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} />, + <IconButton key='reblog-button' className='status__action-bar-button' disabled={reblogDisabled} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogDisabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(reblogMessage)} icon={reblogIcon} onClick={this.handleReblogClick} />, + <IconButton key='favourite-button' className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} />, shareButton, - <IconButton className='status__action-bar-button bookmark-icon' disabled={anonymousAccess} active={status.get('bookmarked')} pressed={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} />, - <div className='status__action-bar-dropdown'> + <IconButton key='bookmark-button' className='status__action-bar-button bookmark-icon' disabled={anonymousAccess} active={status.get('bookmarked')} pressed={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} />, + filterButton, + <div key='dropdown-button' className='status__action-bar-dropdown'> <DropdownMenuContainer disabled={anonymousAccess} status={status} items={menu} icon='ellipsis-h' size={18} direction='right' ariaLabel={intl.formatMessage(messages.more)} /> </div>, ]} diff --git a/app/javascript/flavours/glitch/components/status_content.js b/app/javascript/flavours/glitch/components/status_content.js index 07a0d1d5d..2c79de4db 100644 --- a/app/javascript/flavours/glitch/components/status_content.js +++ b/app/javascript/flavours/glitch/components/status_content.js @@ -5,6 +5,55 @@ import { isRtl } from 'flavours/glitch/util/rtl'; import { FormattedMessage } from 'react-intl'; import Permalink from './permalink'; import classnames from 'classnames'; +import Icon from 'flavours/glitch/components/icon'; +import { autoPlayGif } from 'flavours/glitch/util/initial_state'; +import { decode as decodeIDNA } from 'flavours/glitch/util/idna'; + +const textMatchesTarget = (text, origin, host) => { + return (text === origin || text === host + || text.startsWith(origin + '/') || text.startsWith(host + '/') + || 'www.' + text === host || ('www.' + text).startsWith(host + '/')); +} + +const isLinkMisleading = (link) => { + let linkTextParts = []; + + // Reconstruct visible text, as we do not have much control over how links + // from remote software look, and we can't rely on `innerText` because the + // `invisible` class does not set `display` to `none`. + + const walk = (node) => { + switch (node.nodeType) { + case Node.TEXT_NODE: + linkTextParts.push(node.textContent); + break; + case Node.ELEMENT_NODE: + if (node.classList.contains('invisible')) return; + const children = node.childNodes; + for (let i = 0; i < children.length; i++) { + walk(children[i]); + } + break; + } + }; + + walk(link); + + const linkText = linkTextParts.join(''); + const targetURL = new URL(link.href); + + // The following may not work with international domain names + if (textMatchesTarget(linkText, targetURL.origin, targetURL.host) || textMatchesTarget(linkText.toLowerCase(), targetURL.origin, targetURL.host)) { + return false; + } + + // The link hasn't been recognized, maybe it features an international domain name + const hostname = decodeIDNA(targetURL.hostname).normalize('NFKC'); + const host = targetURL.host.replace(targetURL.hostname, hostname); + const origin = targetURL.origin.replace(targetURL.host, host); + const text = linkText.normalize('NFKC'); + return !(textMatchesTarget(text, origin, host) || textMatchesTarget(text.toLowerCase(), origin, host)); +}; export default class StatusContent extends React.PureComponent { @@ -18,6 +67,13 @@ export default class StatusContent extends React.PureComponent { parseClick: PropTypes.func, disabled: PropTypes.bool, onUpdate: PropTypes.func, + tagLinks: PropTypes.bool, + rewriteMentions: PropTypes.string, + }; + + static defaultProps = { + tagLinks: true, + rewriteMentions: 'no', }; state = { @@ -25,7 +81,8 @@ export default class StatusContent extends React.PureComponent { }; _updateStatusLinks () { - const node = this.node; + const node = this.contentsNode; + const { tagLinks, rewriteMentions } = this.props; if (!node) { return; @@ -45,24 +102,70 @@ export default class StatusContent extends React.PureComponent { if (mention) { link.addEventListener('click', this.onMentionClick.bind(this, mention), false); link.setAttribute('title', mention.get('acct')); + if (rewriteMentions !== 'no') { + while (link.firstChild) link.removeChild(link.firstChild); + link.appendChild(document.createTextNode('@')); + const acctSpan = document.createElement('span'); + acctSpan.textContent = rewriteMentions === 'acct' ? mention.get('acct') : mention.get('username'); + link.appendChild(acctSpan); + } } else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) { link.addEventListener('click', this.onHashtagClick.bind(this, link.text), false); } else { link.addEventListener('click', this.onLinkClick.bind(this), false); link.setAttribute('title', link.href); + link.classList.add('unhandled-link'); + + try { + if (tagLinks && isLinkMisleading(link)) { + // Add a tag besides the link to display its origin + + const tag = document.createElement('span'); + tag.classList.add('link-origin-tag'); + tag.textContent = `[${new URL(link.href).host}]`; + link.insertAdjacentText('beforeend', ' '); + link.insertAdjacentElement('beforeend', tag); + } + } catch (e) { + // The URL is invalid, remove the href just to be safe + if (tagLinks && e instanceof TypeError) link.removeAttribute('href'); + } } link.setAttribute('target', '_blank'); - link.setAttribute('rel', 'noopener'); + link.setAttribute('rel', 'noopener noreferrer'); + } + } + + _updateStatusEmojis () { + const node = this.node; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); } } componentDidMount () { this._updateStatusLinks(); + this._updateStatusEmojis(); } componentDidUpdate () { this._updateStatusLinks(); + this._updateStatusEmojis(); if (this.props.onUpdate) this.props.onUpdate(); } @@ -79,13 +182,21 @@ export default class StatusContent extends React.PureComponent { } onHashtagClick = (hashtag, e) => { - hashtag = hashtag.replace(/^#/, '').toLowerCase(); + hashtag = hashtag.replace(/^#/, ''); if (this.props.parseClick) { this.props.parseClick(e, `/timelines/tag/${hashtag}`); } } + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } + + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } + handleMouseDown = (e) => { this.startXY = [e.clientX, e.clientY]; } @@ -102,7 +213,7 @@ export default class StatusContent extends React.PureComponent { let element = e.target; while (element) { - if (element.localName === 'button' || element.localName === 'video' || element.localName === 'a' || element.localName === 'label') { + if (['button', 'video', 'a', 'label', 'wave'].includes(element.localName)) { return; } element = element.parentNode; @@ -129,6 +240,10 @@ export default class StatusContent extends React.PureComponent { this.node = c; } + setContentsRef = (c) => { + this.contentsNode = c; + } + render () { const { status, @@ -136,6 +251,8 @@ export default class StatusContent extends React.PureComponent { mediaIcon, parseClick, disabled, + tagLinks, + rewriteMentions, } = this.props; const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden; @@ -173,10 +290,10 @@ export default class StatusContent extends React.PureComponent { key='0' />, mediaIcon ? ( - <i - className={ - `fa fa-fw fa-${mediaIcon} status__content__spoiler-icon` - } + <Icon + fixedWidth + className='status__content__spoiler-icon' + id={mediaIcon} aria-hidden='true' key='1' /> @@ -194,11 +311,11 @@ export default class StatusContent extends React.PureComponent { } return ( - <div className={classNames} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}> + <div className={classNames} tabIndex='0' onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} ref={this.setRef}> <p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }} > - <span dangerouslySetInnerHTML={spoilerContent} lang={status.get('language')} /> + <span dangerouslySetInnerHTML={spoilerContent} /> {' '} <button tabIndex='0' className='status__content__spoiler-link' onClick={this.handleSpoilerClick}> {toggleText} @@ -209,12 +326,12 @@ export default class StatusContent extends React.PureComponent { <div className={`status__content__spoiler ${!hidden ? 'status__content__spoiler--visible' : ''}`}> <div - ref={this.setRef} + ref={this.setContentsRef} + key={`contents-${tagLinks}`} style={directionStyle} tabIndex={!hidden ? 0 : null} dangerouslySetInnerHTML={content} className='status__content__text' - lang={status.get('language')} /> {media} </div> @@ -229,11 +346,12 @@ export default class StatusContent extends React.PureComponent { onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} tabIndex='0' + ref={this.setRef} > <div - ref={this.setRef} + ref={this.setContentsRef} + key={`contents-${tagLinks}-${rewriteMentions}`} dangerouslySetInnerHTML={content} - lang={status.get('language')} className='status__content__text' tabIndex='0' /> @@ -246,8 +364,9 @@ export default class StatusContent extends React.PureComponent { className='status__content' style={directionStyle} tabIndex='0' + ref={this.setRef} > - <div ref={this.setRef} className='status__content__text' dangerouslySetInnerHTML={content} lang={status.get('language')} tabIndex='0' /> + <div ref={this.setContentsRef} key={`contents-${tagLinks}`} className='status__content__text' dangerouslySetInnerHTML={content} tabIndex='0' /> {media} </div> ); diff --git a/app/javascript/flavours/glitch/components/status_header.js b/app/javascript/flavours/glitch/components/status_header.js index 23cff286a..06296e124 100644 --- a/app/javascript/flavours/glitch/components/status_header.js +++ b/app/javascript/flavours/glitch/components/status_header.js @@ -56,6 +56,7 @@ export default class StatusHeader extends React.PureComponent { target='_blank' className='status__avatar' onClick={this.handleAccountClick} + rel='noopener noreferrer' > {statusAvatar} </a> @@ -64,6 +65,7 @@ export default class StatusHeader extends React.PureComponent { target='_blank' className='status__display-name' onClick={this.handleAccountClick} + rel='noopener noreferrer' > <DisplayName account={account} others={otherAccounts} /> </a> diff --git a/app/javascript/flavours/glitch/components/status_icons.js b/app/javascript/flavours/glitch/components/status_icons.js index 4a2c62881..f4d0a7405 100644 --- a/app/javascript/flavours/glitch/components/status_icons.js +++ b/app/javascript/flavours/glitch/components/status_icons.js @@ -7,15 +7,23 @@ import { defineMessages, injectIntl } from 'react-intl'; // Mastodon imports. import IconButton from './icon_button'; import VisibilityIcon from './status_visibility_icon'; +import Icon from 'flavours/glitch/components/icon'; // Messages for use with internationalization stuff. const messages = defineMessages({ collapse: { id: 'status.collapse', defaultMessage: 'Collapse' }, uncollapse: { id: 'status.uncollapse', defaultMessage: 'Uncollapse' }, + inReplyTo: { id: 'status.in_reply_to', defaultMessage: 'This toot is a reply' }, + previewCard: { id: 'status.has_preview_card', defaultMessage: 'Features an attached preview card' }, + pictures: { id: 'status.has_pictures', defaultMessage: 'Features attached pictures' }, + poll: { id: 'status.is_poll', defaultMessage: 'This toot is a poll' }, + video: { id: 'status.has_video', defaultMessage: 'Features attached videos' }, + audio: { id: 'status.has_audio', defaultMessage: 'Features attached audio files' }, + localOnly: { id: 'status.local_only', defaultMessage: 'Only visible from your instance' }, }); -@injectIntl -export default class StatusIcons extends React.PureComponent { +export default @injectIntl +class StatusIcons extends React.PureComponent { static propTypes = { status: ImmutablePropTypes.map.isRequired, @@ -36,6 +44,23 @@ export default class StatusIcons extends React.PureComponent { } } + mediaIconTitleText () { + const { intl, mediaIcon } = this.props; + + switch (mediaIcon) { + case 'link': + return intl.formatMessage(messages.previewCard); + case 'picture-o': + return intl.formatMessage(messages.pictures); + case 'tasks': + return intl.formatMessage(messages.poll); + case 'video-camera': + return intl.formatMessage(messages.video); + case 'music': + return intl.formatMessage(messages.audio); + } + } + // Rendering. render () { const { @@ -50,22 +75,35 @@ export default class StatusIcons extends React.PureComponent { return ( <div className='status__info__icons'> {status.get('in_reply_to_id', null) !== null ? ( - <i - className={`fa fa-fw fa-comment status__reply-icon`} + <Icon + className='status__reply-icon' + fixedWidth + id='comment' aria-hidden='true' + title={intl.formatMessage(messages.inReplyTo)} /> ) : null} + {status.get('local_only') && + <Icon + fixedWidth + id='home' + aria-hidden='true' + title={intl.formatMessage(messages.localOnly)} + />} {mediaIcon ? ( - <i - className={`fa fa-fw fa-${mediaIcon} status__media-icon`} + <Icon + fixedWidth + className='status__media-icon' + id={mediaIcon} aria-hidden='true' + title={this.mediaIconTitleText()} /> ) : null} {!directMessage && <VisibilityIcon visibility={status.get('visibility')} />} {collapsible ? ( <IconButton className='status__collapse-button' - animate flip + animate active={collapsed} title={ collapsed ? diff --git a/app/javascript/flavours/glitch/components/status_list.js b/app/javascript/flavours/glitch/components/status_list.js index c1f51b307..a399ff567 100644 --- a/app/javascript/flavours/glitch/components/status_list.js +++ b/app/javascript/flavours/glitch/components/status_list.js @@ -6,7 +6,7 @@ import StatusContainer from 'flavours/glitch/containers/status_container'; import ImmutablePureComponent from 'react-immutable-pure-component'; import LoadGap from './load_gap'; import ScrollableList from './scrollable_list'; -import { FormattedMessage } from 'react-intl'; +import RegenerationIndicator from 'flavours/glitch/components/regeneration_indicator'; export default class StatusList extends ImmutablePureComponent { @@ -81,18 +81,7 @@ export default class StatusList extends ImmutablePureComponent { const { isLoading, isPartial } = other; if (isPartial) { - return ( - <div className='regeneration-indicator'> - <div> - <div className='regeneration-indicator__figure' /> - - <div className='regeneration-indicator__label'> - <FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading…' /> - <FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' /> - </div> - </div> - </div> - ); + return <RegenerationIndicator />; } let scrollableContent = (isLoading || statusIds.size > 0) ? ( diff --git a/app/javascript/flavours/glitch/components/status_prepend.js b/app/javascript/flavours/glitch/components/status_prepend.js index 481e6644e..637c4f23a 100644 --- a/app/javascript/flavours/glitch/components/status_prepend.js +++ b/app/javascript/flavours/glitch/components/status_prepend.js @@ -3,6 +3,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { FormattedMessage } from 'react-intl'; +import Icon from 'flavours/glitch/components/icon'; +import { me } from 'flavours/glitch/util/initial_state'; export default class StatusPrepend extends React.PureComponent { @@ -63,12 +65,21 @@ export default class StatusPrepend extends React.PureComponent { /> ); case 'poll': - return ( - <FormattedMessage - id='notification.poll' - defaultMessage='A poll you have voted in has ended' - /> - ); + if (me === account.get('id')) { + return ( + <FormattedMessage + id='notification.own_poll' + defaultMessage='Your poll has ended' + /> + ); + } else { + return ( + <FormattedMessage + id='notification.poll' + defaultMessage='A poll you have voted in has ended' + /> + ); + } } return null; } @@ -80,10 +91,9 @@ export default class StatusPrepend extends React.PureComponent { return !type ? null : ( <aside className={type === 'reblogged_by' || type === 'featured' ? 'status__prepend' : 'notification__message'}> <div className={type === 'reblogged_by' || type === 'featured' ? 'status__prepend-icon-wrapper' : 'notification__favourite-icon-wrapper'}> - <i - className={`fa fa-fw fa-${ - type === 'favourite' ? 'star star-icon' : (type === 'featured' ? 'thumb-tack' : (type === 'poll' ? 'tasks' : 'retweet')) - } status__prepend-icon`} + <Icon + className={`status__prepend-icon ${type === 'favourite' ? 'star-icon' : ''}`} + id={type === 'favourite' ? 'star' : (type === 'featured' ? 'thumb-tack' : (type === 'poll' ? 'tasks' : 'retweet'))} /> </div> <Message /> diff --git a/app/javascript/flavours/glitch/components/status_visibility_icon.js b/app/javascript/flavours/glitch/components/status_visibility_icon.js index 5e7b8ed00..e2e0f30b8 100644 --- a/app/javascript/flavours/glitch/components/status_visibility_icon.js +++ b/app/javascript/flavours/glitch/components/status_visibility_icon.js @@ -3,6 +3,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ public: { id: 'privacy.public.short', defaultMessage: 'Public' }, @@ -11,8 +12,8 @@ const messages = defineMessages({ direct: { id: 'privacy.direct.short', defaultMessage: 'Direct' }, }); -@injectIntl -export default class VisibilityIcon extends ImmutablePureComponent { +export default @injectIntl +class VisibilityIcon extends ImmutablePureComponent { static propTypes = { visibility: PropTypes.string, @@ -23,7 +24,7 @@ export default class VisibilityIcon extends ImmutablePureComponent { render() { const { withLabel, visibility, intl } = this.props; - const visibilityClass = { + const visibilityIcon = { public: 'globe', unlisted: 'unlock', private: 'lock', @@ -32,8 +33,10 @@ export default class VisibilityIcon extends ImmutablePureComponent { const label = intl.formatMessage(messages[visibility]); - const icon = (<i - className={`status__visibility-icon fa fa-fw fa-${visibilityClass}`} + const icon = (<Icon + className='status__visibility-icon' + fixedWidth + id={visibilityIcon} title={label} aria-hidden='true' />); diff --git a/app/javascript/flavours/glitch/containers/dropdown_menu_container.js b/app/javascript/flavours/glitch/containers/dropdown_menu_container.js index b2419a0fd..1378e75fe 100644 --- a/app/javascript/flavours/glitch/containers/dropdown_menu_container.js +++ b/app/javascript/flavours/glitch/containers/dropdown_menu_container.js @@ -25,7 +25,7 @@ const mapDispatchToProps = (dispatch, { status, items }) => ({ }) : openDropdownMenu(id, dropdownPlacement, keyboard)); }, onClose(id) { - dispatch(closeModal()); + dispatch(closeModal('ACTIONS')); dispatch(closeDropdownMenu(id)); }, }); diff --git a/app/javascript/flavours/glitch/containers/mastodon.js b/app/javascript/flavours/glitch/containers/mastodon.js index 59eef6636..8101be87e 100644 --- a/app/javascript/flavours/glitch/containers/mastodon.js +++ b/app/javascript/flavours/glitch/containers/mastodon.js @@ -49,6 +49,10 @@ export default class Mastodon extends React.PureComponent { } } + shouldUpdateScroll (_, { location }) { + return !(location.state && location.state.mastodonModalOpen); + } + render () { const { locale } = this.props; @@ -57,7 +61,7 @@ export default class Mastodon extends React.PureComponent { <Provider store={store}> <ErrorBoundary> <BrowserRouter basename='/web'> - <ScrollContext> + <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}> <Route path='/' component={UI} /> </ScrollContext> </BrowserRouter> diff --git a/app/javascript/flavours/glitch/containers/media_container.js b/app/javascript/flavours/glitch/containers/media_container.js index 1b480658f..a483510b0 100644 --- a/app/javascript/flavours/glitch/containers/media_container.js +++ b/app/javascript/flavours/glitch/containers/media_container.js @@ -2,19 +2,22 @@ import React, { PureComponent, Fragment } from 'react'; import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; import { IntlProvider, addLocaleData } from 'react-intl'; +import { List as ImmutableList, fromJS } from 'immutable'; import { getLocale } from 'mastodon/locales'; +import { getScrollbarWidth } from 'flavours/glitch/util/scrollbar'; import MediaGallery from 'flavours/glitch/components/media_gallery'; -import Video from 'flavours/glitch/features/video'; -import Card from 'flavours/glitch/features/status/components/card'; import Poll from 'flavours/glitch/components/poll'; +import Hashtag from 'flavours/glitch/components/hashtag'; import ModalRoot from 'flavours/glitch/components/modal_root'; import MediaModal from 'flavours/glitch/features/ui/components/media_modal'; -import { List as ImmutableList, fromJS } from 'immutable'; +import Video from 'flavours/glitch/features/video'; +import Card from 'flavours/glitch/features/status/components/card'; +import Audio from 'flavours/glitch/features/audio'; const { localeData, messages } = getLocale(); addLocaleData(localeData); -const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll }; +const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll, Hashtag, Audio }; export default class MediaContainer extends PureComponent { @@ -31,6 +34,8 @@ export default class MediaContainer extends PureComponent { handleOpenMedia = (media, index) => { document.body.classList.add('with-modals--active'); + document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; + this.setState({ media, index }); } @@ -38,11 +43,15 @@ export default class MediaContainer extends PureComponent { const media = ImmutableList([video]); document.body.classList.add('with-modals--active'); + document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; + this.setState({ media, time }); } handleCloseMedia = () => { document.body.classList.remove('with-modals--active'); + document.documentElement.style.marginRight = 0; + this.setState({ media: null, index: null, time: null }); } @@ -55,12 +64,13 @@ export default class MediaContainer extends PureComponent { {[].map.call(components, (component, i) => { const componentName = component.getAttribute('data-component'); const Component = MEDIA_COMPONENTS[componentName]; - const { media, card, poll, ...props } = JSON.parse(component.getAttribute('data-props')); + const { media, card, poll, hashtag, ...props } = JSON.parse(component.getAttribute('data-props')); Object.assign(props, { - ...(media ? { media: fromJS(media) } : {}), - ...(card ? { card: fromJS(card) } : {}), - ...(poll ? { poll: fromJS(poll) } : {}), + ...(media ? { media: fromJS(media) } : {}), + ...(card ? { card: fromJS(card) } : {}), + ...(poll ? { poll: fromJS(poll) } : {}), + ...(hashtag ? { hashtag: fromJS(hashtag) } : {}), ...(componentName === 'Video' ? { onOpenVideo: this.handleOpenVideo, @@ -74,6 +84,7 @@ export default class MediaContainer extends PureComponent { component, ); })} + <ModalRoot onClose={this.handleCloseMedia}> {this.state.media && ( <MediaModal diff --git a/app/javascript/flavours/glitch/containers/status_container.js b/app/javascript/flavours/glitch/containers/status_container.js index a6069cb90..4c3555dea 100644 --- a/app/javascript/flavours/glitch/containers/status_container.js +++ b/app/javascript/flavours/glitch/containers/status_container.js @@ -1,7 +1,7 @@ -import React from 'react'; import { connect } from 'react-redux'; import Status from 'flavours/glitch/components/status'; -import { makeGetStatus } from 'flavours/glitch/selectors'; +import { List as ImmutableList } from 'immutable'; +import { makeGetStatus, regexFromFilters, toServerSideType } from 'flavours/glitch/selectors'; import { replyCompose, mentionCompose, @@ -17,25 +17,31 @@ import { pin, unpin, } from 'flavours/glitch/actions/interactions'; -import { blockAccount } from 'flavours/glitch/actions/accounts'; import { muteStatus, unmuteStatus, deleteStatus } from 'flavours/glitch/actions/statuses'; import { initMuteModal } from 'flavours/glitch/actions/mutes'; +import { initBlockModal } from 'flavours/glitch/actions/blocks'; import { initReport } from 'flavours/glitch/actions/reports'; import { openModal } from 'flavours/glitch/actions/modal'; import { changeLocalSetting } from 'flavours/glitch/actions/local_settings'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/util/initial_state'; +import { filterEditLink } from 'flavours/glitch/util/backend_links'; import { showAlertForError } from '../actions/alerts'; +import AccountContainer from 'flavours/glitch/containers/account_container'; +import Spoilers from '../components/spoilers'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' }, deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' }, redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' }, redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' }, - blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, - blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, + unfilterConfirm: { id: 'confirmations.unfilter.confirm', defaultMessage: 'Show' }, + author: { id: 'confirmations.unfilter.author', defaultMessage: 'Author' }, + matchingFilters: { id: 'confirmations.unfilter.filters', defaultMessage: 'Matching {count, plural, one {filter} other {filters}}' }, + editFilter: { id: 'confirmations.unfilter.edit_filter', defaultMessage: 'Edit filter' }, }); const makeMapStateToProps = () => { @@ -69,11 +75,12 @@ const makeMapStateToProps = () => { return mapStateToProps; }; -const mapDispatchToProps = (dispatch, { intl }) => ({ +const mapDispatchToProps = (dispatch, { intl, contextType }) => ({ onReply (status, router) { dispatch((_, getState) => { let state = getState(); + if (state.getIn(['local_settings', 'confirm_before_clearing_draft']) && state.getIn(['compose', 'text']).trim().length !== 0) { dispatch(openModal('CONFIRM', { message: intl.formatMessage(messages.replyMessage), @@ -99,7 +106,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch((_, getState) => { let state = getState(); if (state.getIn(['local_settings', 'confirm_boost_missing_media_description']) && status.get('media_attachments').some(item => !item.get('description')) && !status.get('reblogged')) { - dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog, missingMediaDescription: true })); + dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog, missingMediaDescription: true })); } else if (e.shiftKey || !boostModal) { this.onModalReblog(status); } else { @@ -177,16 +184,49 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ onBlock (status) { const account = status.get('account'); - dispatch(openModal('CONFIRM', { - message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, - confirm: intl.formatMessage(messages.blockConfirm), - onConfirm: () => dispatch(blockAccount(account.get('id'))), - secondary: intl.formatMessage(messages.blockAndReport), - onSecondary: () => { - dispatch(blockAccount(account.get('id'))); - dispatch(initReport(account, status)); - }, - })); + dispatch(initBlockModal(account)); + }, + + onUnfilter (status, onConfirm) { + dispatch((_, getState) => { + let state = getState(); + const serverSideType = toServerSideType(contextType); + const enabledFilters = state.get('filters', ImmutableList()).filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))).toArray(); + const searchIndex = status.get('search_index'); + const matchingFilters = enabledFilters.filter(filter => regexFromFilters([filter]).test(searchIndex)); + dispatch(openModal('CONFIRM', { + message: [ + <FormattedMessage id='confirmations.unfilter' defaultMessage='Information about this filtered toot' />, + <div className='filtered-status-info'> + <Spoilers spoilerText={intl.formatMessage(messages.author)}> + <AccountContainer id={status.getIn(['account', 'id'])} /> + </Spoilers> + <Spoilers spoilerText={intl.formatMessage(messages.matchingFilters, {count: matchingFilters.size})}> + <ul> + {matchingFilters.map(filter => ( + <li> + {filter.get('phrase')} + {!!filterEditLink && ' '} + {!!filterEditLink && ( + <a + target='_blank' + className='filtered-status-edit-link' + title={intl.formatMessage(messages.editFilter)} + href={filterEditLink(filter.get('id'))} + > + <Icon icon='pencil' /> + </a> + )} + </li> + ))} + </ul> + </Spoilers> + </div> + ], + confirm: intl.formatMessage(messages.unfilterConfirm), + onConfirm: onConfirm, + })); + }); }, onReport (status) { diff --git a/app/javascript/flavours/glitch/features/account/components/action_bar.js b/app/javascript/flavours/glitch/features/account/components/action_bar.js index a2c00c1c2..6576bff8e 100644 --- a/app/javascript/flavours/glitch/features/account/components/action_bar.js +++ b/app/javascript/flavours/glitch/features/account/components/action_bar.js @@ -8,8 +8,8 @@ import { me, isStaff } from 'flavours/glitch/util/initial_state'; import { profileLink, accountAdminLink } from 'flavours/glitch/util/backend_links'; import Icon from 'flavours/glitch/components/icon'; -@injectIntl -export default class ActionBar extends React.PureComponent { +export default @injectIntl +class ActionBar extends React.PureComponent { static propTypes = { account: ImmutablePropTypes.map.isRequired, @@ -31,7 +31,7 @@ export default class ActionBar extends React.PureComponent { if (account.get('acct') !== account.get('username')) { extraInfo = ( <div className='account__disclaimer'> - <Icon icon='info-circle' fixedWidth /> <FormattedMessage + <Icon id='info-circle' fixedWidth /> <FormattedMessage id='account.disclaimer_full' defaultMessage="Information below may reflect the user's profile incompletely." /> diff --git a/app/javascript/flavours/glitch/features/account/components/header.js b/app/javascript/flavours/glitch/features/account/components/header.js index 43c4f0d32..6b4aff616 100644 --- a/app/javascript/flavours/glitch/features/account/components/header.js +++ b/app/javascript/flavours/glitch/features/account/components/header.js @@ -4,6 +4,7 @@ import PropTypes from 'prop-types'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { autoPlayGif, me, isStaff } from 'flavours/glitch/util/initial_state'; +import { preferencesLink, profileLink, accountAdminLink } from 'flavours/glitch/util/backend_links'; import classNames from 'classnames'; import Icon from 'flavours/glitch/components/icon'; import Avatar from 'flavours/glitch/components/avatar'; @@ -15,6 +16,7 @@ import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_cont const messages = defineMessages({ unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, follow: { id: 'account.follow', defaultMessage: 'Follow' }, + cancel_follow_request: { id: 'account.cancel_follow_request', defaultMessage: 'Cancel follow request' }, requested: { id: 'account.requested', defaultMessage: 'Awaiting approval. Click to cancel follow request' }, unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' }, @@ -68,7 +70,48 @@ class Header extends ImmutablePureComponent { }; openEditProfile = () => { - window.open('/settings/profile', '_blank'); + window.open(profileLink, '_blank'); + } + + _updateEmojis () { + const node = this.node; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); + } + } + + componentDidMount () { + this._updateEmojis(); + } + + componentDidUpdate () { + this._updateEmojis(); + } + + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } + + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } + + setRef = (c) => { + this.node = c; } render () { @@ -100,13 +143,13 @@ class Header extends ImmutablePureComponent { if (!account.get('relationship')) { // Wait until the relationship is loaded actionBtn = ''; } else if (account.getIn(['relationship', 'requested'])) { - actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />; + actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />; } else if (!account.getIn(['relationship', 'blocking'])) { actionBtn = <Button className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']) })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />; } else if (account.getIn(['relationship', 'blocking'])) { actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.props.onBlock} />; } - } else { + } else if (profileLink) { actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.edit_profile)} onClick={this.openEditProfile} />; } @@ -115,7 +158,7 @@ class Header extends ImmutablePureComponent { } if (account.get('locked')) { - lockedIcon = <Icon icon='lock' title={intl.formatMessage(messages.account_locked)} />; + lockedIcon = <Icon id='lock' title={intl.formatMessage(messages.account_locked)} />; } if (account.get('id') !== me) { @@ -130,8 +173,8 @@ class Header extends ImmutablePureComponent { } if (account.get('id') === me) { - menu.push({ text: intl.formatMessage(messages.edit_profile), href: '/settings/profile' }); - menu.push({ text: intl.formatMessage(messages.preferences), href: '/settings/preferences' }); + if (profileLink) menu.push({ text: intl.formatMessage(messages.edit_profile), href: profileLink }); + if (preferencesLink) menu.push({ text: intl.formatMessage(messages.preferences), href: preferencesLink }); menu.push({ text: intl.formatMessage(messages.pins), to: '/pinned' }); menu.push(null); menu.push({ text: intl.formatMessage(messages.follow_requests), to: '/follow_requests' }); @@ -181,19 +224,28 @@ class Header extends ImmutablePureComponent { } } - if (account.get('id') !== me && isStaff) { + if (account.get('id') !== me && isStaff && accountAdminLink) { menu.push(null); - menu.push({ text: intl.formatMessage(messages.admin_account, { name: account.get('username') }), href: `/admin/accounts/${account.get('id')}` }); + menu.push({ text: intl.formatMessage(messages.admin_account, { name: account.get('username') }), href: accountAdminLink(account.get('id')) }); } const content = { __html: account.get('note_emojified') }; const displayNameHtml = { __html: account.get('display_name_html') }; const fields = account.get('fields'); - const badge = account.get('bot') ? (<div className='account-role bot'><FormattedMessage id='account.badges.bot' defaultMessage='Bot' /></div>) : null; const acct = account.get('acct').indexOf('@') === -1 && domain ? `${account.get('acct')}@${domain}` : account.get('acct'); + let badge; + + if (account.get('bot')) { + badge = (<div className='account-role bot'><FormattedMessage id='account.badges.bot' defaultMessage='Bot' /></div>); + } else if (account.get('group')) { + badge = (<div className='account-role group'><FormattedMessage id='account.badges.group' defaultMessage='Group' /></div>); + } else { + badge = null; + } + return ( - <div className={classNames('account__header', { inactive: !!account.get('moved') })}> + <div className={classNames('account__header', { inactive: !!account.get('moved') })} ref={this.setRef}> <div className='account__header__image'> <div className='account__header__info'> {info} @@ -204,7 +256,7 @@ class Header extends ImmutablePureComponent { <div className='account__header__bar'> <div className='account__header__tabs'> - <a className='avatar' href={account.get('url')} rel='noopener' target='_blank'> + <a className='avatar' href={account.get('url')} rel='noopener noreferrer' target='_blank'> <Avatar account={account} size={90} /> </a> @@ -233,10 +285,10 @@ class Header extends ImmutablePureComponent { <dt dangerouslySetInnerHTML={{ __html: proof.get('provider') }} /> <dd className='verified'> - <a href={proof.get('proof_url')} target='_blank' rel='noopener'><span title={intl.formatMessage(messages.linkVerifiedOn, { date: intl.formatDate(proof.get('updated_at'), dateFormatOptions) })}> + <a href={proof.get('proof_url')} target='_blank' rel='noopener noreferrer'><span title={intl.formatMessage(messages.linkVerifiedOn, { date: intl.formatDate(proof.get('updated_at'), dateFormatOptions) })}> <Icon id='check' className='verified__mark' /> </span></a> - <a href={proof.get('profile_url')} target='_blank' rel='noopener'><span dangerouslySetInnerHTML={{ __html: ' '+proof.get('provider_username') }} /></a> + <a href={proof.get('profile_url')} target='_blank' rel='noopener noreferrer'><span dangerouslySetInnerHTML={{ __html: ' '+proof.get('provider_username') }} /></a> </dd> </dl> ))} diff --git a/app/javascript/flavours/glitch/features/account/components/profile_column_header.js b/app/javascript/flavours/glitch/features/account/components/profile_column_header.js index b6d373a2c..17c08e375 100644 --- a/app/javascript/flavours/glitch/features/account/components/profile_column_header.js +++ b/app/javascript/flavours/glitch/features/account/components/profile_column_header.js @@ -12,11 +12,12 @@ class ProfileColumnHeader extends React.PureComponent { static propTypes = { onClick: PropTypes.func, + multiColumn: PropTypes.bool, intl: PropTypes.object.isRequired, }; render() { - const { onClick, intl } = this.props; + const { onClick, intl, multiColumn } = this.props; return ( <ColumnHeader @@ -24,6 +25,7 @@ class ProfileColumnHeader extends React.PureComponent { title={intl.formatMessage(messages.profile)} onClick={onClick} showBackButton + multiColumn={multiColumn} /> ); } diff --git a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js index 026136b2c..f1cb3f9e4 100644 --- a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js +++ b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js @@ -1,11 +1,12 @@ -import React from 'react'; +import { decode } from 'blurhash'; +import classNames from 'classnames'; +import Icon from 'flavours/glitch/components/icon'; +import { autoPlayGif, displayMedia } from 'flavours/glitch/util/initial_state'; +import { isIOS } from 'flavours/glitch/util/is_mobile'; import PropTypes from 'prop-types'; +import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { autoPlayGif, displayMedia } from 'flavours/glitch/util/initial_state'; -import classNames from 'classnames'; -import { decode } from 'blurhash'; -import { isIOS } from 'flavours/glitch/util/is_mobile'; export default class MediaItem extends ImmutablePureComponent { @@ -94,6 +95,12 @@ export default class MediaItem extends ImmutablePureComponent { if (attachment.get('type') === 'unknown') { // Skip + } else if (attachment.get('type') === 'audio') { + thumbnail = ( + <span className='account-gallery__item__icons'> + <Icon id='music' /> + </span> + ); } else if (attachment.get('type') === 'image') { const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0; const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0; @@ -111,6 +118,7 @@ export default class MediaItem extends ImmutablePureComponent { ); } else if (['gifv', 'video'].indexOf(attachment.get('type')) !== -1) { const autoPlay = !isIOS() && autoPlayGif; + const label = attachment.get('type') === 'video' ? <Icon id='play' /> : 'GIF'; thumbnail = ( <div className={classNames('media-gallery__gifv', { autoplay: autoPlay })}> @@ -126,20 +134,21 @@ export default class MediaItem extends ImmutablePureComponent { loop muted /> - <span className='media-gallery__gifv__label'>GIF</span> + + <span className='media-gallery__gifv__label'>{label}</span> </div> ); } const icon = ( <span className='account-gallery__item__icons'> - <i className='fa fa-eye-slash' /> + <Icon id='eye-slash' /> </span> ); return ( <div className='account-gallery__item' style={{ width, height }}> - <a className='media-gallery__item-thumbnail' href={status.get('url')} target='_blank' onClick={this.handleClick} title={title}> + <a className='media-gallery__item-thumbnail' href={status.get('url')} onClick={this.handleClick} title={title} target='_blank' rel='noopener noreferrer'> <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': visible && loaded })} /> {visible ? thumbnail : icon} </a> diff --git a/app/javascript/flavours/glitch/features/account_gallery/index.js b/app/javascript/flavours/glitch/features/account_gallery/index.js index 3e4421306..f5fe6c930 100644 --- a/app/javascript/flavours/glitch/features/account_gallery/index.js +++ b/app/javascript/flavours/glitch/features/account_gallery/index.js @@ -45,8 +45,8 @@ class LoadMoreMedia extends ImmutablePureComponent { } -@connect(mapStateToProps) -export default class AccountGallery extends ImmutablePureComponent { +export default @connect(mapStateToProps) +class AccountGallery extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, @@ -55,6 +55,7 @@ export default class AccountGallery extends ImmutablePureComponent { isLoading: PropTypes.bool, hasMore: PropTypes.bool, isAccount: PropTypes.bool, + multiColumn: PropTypes.bool, }; state = { @@ -113,6 +114,8 @@ export default class AccountGallery extends ImmutablePureComponent { handleOpenMedia = attachment => { if (attachment.get('type') === 'video') { this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status') })); + } else if (attachment.get('type') === 'audio') { + this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status') })); } else { const media = attachment.getIn(['status', 'media_attachments']); const index = media.findIndex(x => x.get('id') === attachment.get('id')); @@ -128,7 +131,7 @@ export default class AccountGallery extends ImmutablePureComponent { } render () { - const { attachments, isLoading, hasMore, isAccount } = this.props; + const { attachments, isLoading, hasMore, isAccount, multiColumn } = this.props; const { width } = this.state; if (!isAccount) { @@ -155,7 +158,7 @@ export default class AccountGallery extends ImmutablePureComponent { return ( <Column ref={this.setColumnRef}> - <ProfileColumnHeader onClick={this.handleHeaderClick} /> + <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} /> <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={this.shouldUpdateScroll}> <div className='scrollable scrollable--flex' onScroll={this.handleScroll}> diff --git a/app/javascript/flavours/glitch/features/account_timeline/components/moved_note.js b/app/javascript/flavours/glitch/features/account_timeline/components/moved_note.js index 1fab083db..fcaa7b494 100644 --- a/app/javascript/flavours/glitch/features/account_timeline/components/moved_note.js +++ b/app/javascript/flavours/glitch/features/account_timeline/components/moved_note.js @@ -5,6 +5,7 @@ import { FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import AvatarOverlay from '../../../components/avatar_overlay'; import DisplayName from '../../../components/display_name'; +import Icon from 'flavours/glitch/components/icon'; export default class MovedNote extends ImmutablePureComponent { @@ -35,7 +36,7 @@ export default class MovedNote extends ImmutablePureComponent { return ( <div className='account__moved-note'> <div className='account__moved-note__message'> - <div className='account__moved-note__icon-wrapper'><i className='fa fa-fw fa-suitcase account__moved-note__icon' /></div> + <div className='account__moved-note__icon-wrapper'><Icon id='suitcase' className='account__moved-note__icon' fixedWidth /></div> <FormattedMessage id='account.moved_to' defaultMessage='{name} has moved to:' values={{ name: <bdi><strong dangerouslySetInnerHTML={displayNameHtml} /></bdi> }} /> </div> diff --git a/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js b/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js index 787a36658..fff5e097f 100644 --- a/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js +++ b/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js @@ -5,7 +5,6 @@ import Header from '../components/header'; import { followAccount, unfollowAccount, - blockAccount, unblockAccount, unmuteAccount, pinAccount, @@ -16,6 +15,7 @@ import { directCompose } from 'flavours/glitch/actions/compose'; import { initMuteModal } from 'flavours/glitch/actions/mutes'; +import { initBlockModal } from 'flavours/glitch/actions/blocks'; import { initReport } from 'flavours/glitch/actions/reports'; import { openModal } from 'flavours/glitch/actions/modal'; import { blockDomain, unblockDomain } from 'flavours/glitch/actions/domain_blocks'; @@ -25,9 +25,7 @@ import { List as ImmutableList } from 'immutable'; const messages = defineMessages({ unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' }, - blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Hide entire domain' }, - blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, }); const makeMapStateToProps = () => { @@ -64,16 +62,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ if (account.getIn(['relationship', 'blocking'])) { dispatch(unblockAccount(account.get('id'))); } else { - dispatch(openModal('CONFIRM', { - message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, - confirm: intl.formatMessage(messages.blockConfirm), - onConfirm: () => dispatch(blockAccount(account.get('id'))), - secondary: intl.formatMessage(messages.blockAndReport), - onSecondary: () => { - dispatch(blockAccount(account.get('id'))); - dispatch(initReport(account)); - }, - })); + dispatch(initBlockModal(account)); } }, diff --git a/app/javascript/flavours/glitch/features/account_timeline/index.js b/app/javascript/flavours/glitch/features/account_timeline/index.js index 93d8fc9ec..2ef4ff602 100644 --- a/app/javascript/flavours/glitch/features/account_timeline/index.js +++ b/app/javascript/flavours/glitch/features/account_timeline/index.js @@ -9,6 +9,7 @@ import LoadingIndicator from '../../components/loading_indicator'; import Column from '../ui/components/column'; import ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header'; import HeaderContainer from './containers/header_container'; +import ColumnBackButton from 'flavours/glitch/components/column_back_button'; import { List as ImmutableList } from 'immutable'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { FormattedMessage } from 'react-intl'; @@ -27,8 +28,8 @@ const mapStateToProps = (state, { params: { accountId }, withReplies = false }) }; }; -@connect(mapStateToProps) -export default class AccountTimeline extends ImmutablePureComponent { +export default @connect(mapStateToProps) +class AccountTimeline extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, @@ -39,6 +40,7 @@ export default class AccountTimeline extends ImmutablePureComponent { hasMore: PropTypes.bool, withReplies: PropTypes.bool, isAccount: PropTypes.bool, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -76,11 +78,12 @@ export default class AccountTimeline extends ImmutablePureComponent { } render () { - const { statusIds, featuredStatusIds, isLoading, hasMore, isAccount } = this.props; + const { statusIds, featuredStatusIds, isLoading, hasMore, isAccount, multiColumn } = this.props; if (!isAccount) { return ( <Column> + <ColumnBackButton multiColumn={multiColumn} /> <MissingIndicator /> </Column> ); @@ -96,7 +99,7 @@ export default class AccountTimeline extends ImmutablePureComponent { return ( <Column ref={this.setRef} name='account'> - <ProfileColumnHeader onClick={this.handleHeaderClick} /> + <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} /> <StatusList prepend={<HeaderContainer accountId={this.props.params.accountId} />} @@ -108,6 +111,7 @@ export default class AccountTimeline extends ImmutablePureComponent { hasMore={hasMore} onLoadMore={this.handleLoadMore} emptyMessage={<FormattedMessage id='empty_column.account_timeline' defaultMessage='No toots here!' />} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/audio/index.js b/app/javascript/flavours/glitch/features/audio/index.js new file mode 100644 index 000000000..033d92adf --- /dev/null +++ b/app/javascript/flavours/glitch/features/audio/index.js @@ -0,0 +1,236 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import WaveSurfer from 'wavesurfer.js'; +import { defineMessages, injectIntl } from 'react-intl'; +import { formatTime } from 'flavours/glitch/features/video'; +import Icon from 'flavours/glitch/components/icon'; +import classNames from 'classnames'; +import { throttle } from 'lodash'; + +const messages = defineMessages({ + play: { id: 'video.play', defaultMessage: 'Play' }, + pause: { id: 'video.pause', defaultMessage: 'Pause' }, + mute: { id: 'video.mute', defaultMessage: 'Mute sound' }, + unmute: { id: 'video.unmute', defaultMessage: 'Unmute sound' }, + download: { id: 'video.download', defaultMessage: 'Download file' }, +}); + +export default @injectIntl +class Audio extends React.PureComponent { + + static propTypes = { + src: PropTypes.string.isRequired, + alt: PropTypes.string, + duration: PropTypes.number, + peaks: PropTypes.arrayOf(PropTypes.number), + height: PropTypes.number, + preload: PropTypes.bool, + editable: PropTypes.bool, + intl: PropTypes.object.isRequired, + }; + + state = { + currentTime: 0, + duration: null, + paused: true, + muted: false, + volume: 0.5, + }; + + // hard coded in components.scss + // any way to get ::before values programatically? + + volWidth = 50; + + volOffset = 70; + + volHandleOffset = v => { + const offset = v * this.volWidth + this.volOffset; + return (offset > 110) ? 110 : offset; + } + + setVolumeRef = c => { + this.volume = c; + } + + setWaveformRef = c => { + this.waveform = c; + } + + componentDidMount () { + if (this.waveform) { + this._updateWaveform(); + } + } + + componentDidUpdate (prevProps) { + if (this.waveform && prevProps.src !== this.props.src) { + this._updateWaveform(); + } + } + + componentWillUnmount () { + if (this.wavesurfer) { + this.wavesurfer.destroy(); + this.wavesurfer = null; + } + } + + _updateWaveform () { + const { src, height, duration, peaks, preload } = this.props; + + const progressColor = window.getComputedStyle(document.querySelector('.audio-player__progress-placeholder')).getPropertyValue('background-color'); + const waveColor = window.getComputedStyle(document.querySelector('.audio-player__wave-placeholder')).getPropertyValue('background-color'); + + if (this.wavesurfer) { + this.wavesurfer.destroy(); + this.loaded = false; + } + + const wavesurfer = WaveSurfer.create({ + container: this.waveform, + height, + barWidth: 3, + cursorWidth: 0, + progressColor, + waveColor, + backend: 'MediaElement', + interact: preload, + }); + + wavesurfer.setVolume(this.state.volume); + + if (preload) { + wavesurfer.load(src); + this.loaded = true; + } else { + wavesurfer.load(src, peaks, 'none', duration); + this.loaded = false; + } + + wavesurfer.on('ready', () => this.setState({ duration: Math.floor(wavesurfer.getDuration()) })); + wavesurfer.on('audioprocess', () => this.setState({ currentTime: Math.floor(wavesurfer.getCurrentTime()) })); + wavesurfer.on('pause', () => this.setState({ paused: true })); + wavesurfer.on('play', () => this.setState({ paused: false })); + wavesurfer.on('volume', volume => this.setState({ volume })); + wavesurfer.on('mute', muted => this.setState({ muted })); + + this.wavesurfer = wavesurfer; + } + + togglePlay = () => { + if (this.state.paused) { + if (!this.props.preload && !this.loaded) { + this.wavesurfer.createBackend(); + this.wavesurfer.createPeakCache(); + this.wavesurfer.load(this.props.src); + this.wavesurfer.toggleInteraction(); + this.loaded = true; + } + + this.wavesurfer.play(); + this.setState({ paused: false }); + } else { + this.wavesurfer.pause(); + this.setState({ paused: true }); + } + } + + toggleMute = () => { + this.wavesurfer.setMute(!this.state.muted); + } + + handleVolumeMouseDown = e => { + document.addEventListener('mousemove', this.handleMouseVolSlide, true); + document.addEventListener('mouseup', this.handleVolumeMouseUp, true); + document.addEventListener('touchmove', this.handleMouseVolSlide, true); + document.addEventListener('touchend', this.handleVolumeMouseUp, true); + + this.handleMouseVolSlide(e); + + e.preventDefault(); + e.stopPropagation(); + } + + handleVolumeMouseUp = () => { + document.removeEventListener('mousemove', this.handleMouseVolSlide, true); + document.removeEventListener('mouseup', this.handleVolumeMouseUp, true); + document.removeEventListener('touchmove', this.handleMouseVolSlide, true); + document.removeEventListener('touchend', this.handleVolumeMouseUp, true); + } + + handleMouseVolSlide = throttle(e => { + const rect = this.volume.getBoundingClientRect(); + const x = (e.clientX - rect.left) / this.volWidth; // x position within the element. + + if(!isNaN(x)) { + let slideamt = x; + + if (x > 1) { + slideamt = 1; + } else if(x < 0) { + slideamt = 0; + } + + this.wavesurfer.setVolume(slideamt); + } + }, 60); + + render () { + const { height, intl, alt, editable } = this.props; + const { paused, muted, volume, currentTime } = this.state; + + const volumeWidth = muted ? 0 : volume * this.volWidth; + const volumeHandleLoc = muted ? this.volHandleOffset(0) : this.volHandleOffset(volume); + + return ( + <div className={classNames('audio-player', { editable })}> + <div className='audio-player__progress-placeholder' style={{ display: 'none' }} /> + <div className='audio-player__wave-placeholder' style={{ display: 'none' }} /> + + <div + className='audio-player__waveform' + aria-label={alt} + title={alt} + style={{ height }} + ref={this.setWaveformRef} + /> + + <div className='video-player__controls active'> + <div className='video-player__buttons-bar'> + <div className='video-player__buttons left'> + <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button> + <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button> + + <div className='video-player__volume' onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> + + <div className='video-player__volume__current' style={{ width: `${volumeWidth}px` }} /> + + <span + className={classNames('video-player__volume__handle')} + tabIndex='0' + style={{ left: `${volumeHandleLoc}px` }} + /> + </div> + + <span> + <span className='video-player__time-current'>{formatTime(currentTime)}</span> + <span className='video-player__time-sep'>/</span> + <span className='video-player__time-total'>{formatTime(this.state.duration || Math.floor(this.props.duration))}</span> + </span> + </div> + + <div className='video-player__buttons right'> + <button type='button' aria-label={intl.formatMessage(messages.download)}> + <a className='video-player__download__icon' href={this.props.src} download> + <Icon id={'download'} fixedWidth /> + </a> + </button> + </div> + </div> + </div> + </div> + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/blocks/index.js b/app/javascript/flavours/glitch/features/blocks/index.js index 386a0ce63..9eb6fe02e 100644 --- a/app/javascript/flavours/glitch/features/blocks/index.js +++ b/app/javascript/flavours/glitch/features/blocks/index.js @@ -1,14 +1,15 @@ import React from 'react'; import { connect } from 'react-redux'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { debounce } from 'lodash'; import PropTypes from 'prop-types'; import LoadingIndicator from 'flavours/glitch/components/loading_indicator'; -import { ScrollContainer } from 'react-router-scroll-4'; +import ScrollableList from '../../components/scrollable_list'; import Column from 'flavours/glitch/features/ui/components/column'; import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim'; import AccountContainer from 'flavours/glitch/containers/account_container'; import { fetchBlocks, expandBlocks } from 'flavours/glitch/actions/blocks'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; const messages = defineMessages({ @@ -17,38 +18,32 @@ const messages = defineMessages({ const mapStateToProps = state => ({ accountIds: state.getIn(['user_lists', 'blocks', 'items']), + hasMore: !!state.getIn(['user_lists', 'blocks', 'next']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class Blocks extends ImmutablePureComponent { +class Blocks extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, accountIds: ImmutablePropTypes.list, + hasMore: PropTypes.bool, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { this.props.dispatch(fetchBlocks()); } - handleScroll = (e) => { - const { scrollTop, scrollHeight, clientHeight } = e.target; - - if (scrollTop === scrollHeight - clientHeight) { - this.props.dispatch(expandBlocks()); - } - } - - shouldUpdateScroll = (prevRouterProps, { location }) => { - if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false; - return !(location.state && location.state.mastodonModalOpen); - } + handleLoadMore = debounce(() => { + this.props.dispatch(expandBlocks()); + }, 300, { leading: true }); render () { - const { intl, accountIds } = this.props; + const { intl, accountIds, hasMore, multiColumn } = this.props; if (!accountIds) { return ( @@ -58,16 +53,22 @@ export default class Blocks extends ImmutablePureComponent { ); } + const emptyMessage = <FormattedMessage id='empty_column.blocks' defaultMessage="You haven't blocked any users yet." />; + return ( - <Column name='blocks' icon='ban' heading={intl.formatMessage(messages.heading)}> + <Column name='blocks' bindToDocument={!multiColumn} icon='ban' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> - <ScrollContainer scrollKey='blocks' shouldUpdateScroll={this.shouldUpdateScroll}> - <div className='scrollable' onScroll={this.handleScroll}> - {accountIds.map(id => - <AccountContainer key={id} id={id} /> - )} - </div> - </ScrollContainer> + <ScrollableList + scrollKey='blocks' + onLoadMore={this.handleLoadMore} + hasMore={hasMore} + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + > + {accountIds.map(id => + <AccountContainer key={id} id={id} /> + )} + </ScrollableList> </Column> ); } diff --git a/app/javascript/flavours/glitch/features/bookmarked_statuses/index.js b/app/javascript/flavours/glitch/features/bookmarked_statuses/index.js index 9468ad81d..58b9e6396 100644 --- a/app/javascript/flavours/glitch/features/bookmarked_statuses/index.js +++ b/app/javascript/flavours/glitch/features/bookmarked_statuses/index.js @@ -2,14 +2,14 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { debounce } from 'lodash'; import { fetchBookmarkedStatuses, expandBookmarkedStatuses } from 'flavours/glitch/actions/bookmarks'; import Column from 'flavours/glitch/features/ui/components/column'; import ColumnHeader from 'flavours/glitch/components/column_header'; import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns'; import StatusList from 'flavours/glitch/components/status_list'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { debounce } from 'lodash'; const messages = defineMessages({ heading: { id: 'column.bookmarks', defaultMessage: 'Bookmarks' }, @@ -21,9 +21,9 @@ const mapStateToProps = state => ({ hasMore: !!state.getIn(['status_lists', 'bookmarks', 'next']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class Bookmarks extends ImmutablePureComponent { +class Bookmarks extends ImmutablePureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, @@ -70,8 +70,10 @@ export default class Bookmarks extends ImmutablePureComponent { const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props; const pinned = !!columnId; + const emptyMessage = <FormattedMessage id='empty_column.bookmarked_statuses' defaultMessage="You don't have any bookmarked toots yet. When you bookmark one, it will show up here." />; + return ( - <Column ref={this.setRef} name='bookmarks'> + <Column bindToDocument={!multiColumn} ref={this.setRef} name='bookmarks'> <ColumnHeader icon='bookmark' title={intl.formatMessage(messages.heading)} @@ -90,6 +92,8 @@ export default class Bookmarks extends ImmutablePureComponent { hasMore={hasMore} isLoading={isLoading} onLoadMore={this.handleLoadMore} + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.js b/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.js index 96db003ce..69a4699ac 100644 --- a/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.js +++ b/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.js @@ -10,8 +10,8 @@ const messages = defineMessages({ settings: { id: 'home.settings', defaultMessage: 'Column settings' }, }); -@injectIntl -export default class ColumnSettings extends React.PureComponent { +export default @injectIntl +class ColumnSettings extends React.PureComponent { static propTypes = { settings: ImmutablePropTypes.map.isRequired, @@ -26,7 +26,7 @@ export default class ColumnSettings extends React.PureComponent { return ( <div> <div className='column-settings__row'> - <SettingToggle settings={settings} settingPath={['other', 'onlyMedia']} onChange={onChange} label={<FormattedMessage id='community.column_settings.media_only' defaultMessage='Media Only' />} /> + <SettingToggle settings={settings} settingPath={['other', 'onlyMedia']} onChange={onChange} label={<FormattedMessage id='community.column_settings.media_only' defaultMessage='Media only' />} /> </div> <span className='column-settings__section'><FormattedMessage id='home.column_settings.advanced' defaultMessage='Advanced' /></span> diff --git a/app/javascript/flavours/glitch/features/community_timeline/index.js b/app/javascript/flavours/glitch/features/community_timeline/index.js index 2c0fbff36..7341f9702 100644 --- a/app/javascript/flavours/glitch/features/community_timeline/index.js +++ b/app/javascript/flavours/glitch/features/community_timeline/index.js @@ -14,20 +14,22 @@ const messages = defineMessages({ title: { id: 'column.community', defaultMessage: 'Local timeline' }, }); -const mapStateToProps = (state, { onlyMedia, columnId }) => { +const mapStateToProps = (state, { columnId }) => { const uuid = columnId; const columns = state.getIn(['settings', 'columns']); const index = columns.findIndex(c => c.get('uuid') === uuid); + const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']); + const timelineState = state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`]); return { - hasUnread: state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`, 'unread']) > 0, - onlyMedia: (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']), + hasUnread: !!timelineState && timelineState.get('unread') > 0, + onlyMedia, }; }; -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class CommunityTimeline extends React.PureComponent { +class CommunityTimeline extends React.PureComponent { static defaultProps = { onlyMedia: false, @@ -99,16 +101,12 @@ export default class CommunityTimeline extends React.PureComponent { dispatch(expandCommunityTimeline({ maxId, onlyMedia })); } - shouldUpdateScroll = (prevRouterProps, { location }) => { - return !(location.state && location.state.mastodonModalOpen) - } - render () { const { intl, hasUnread, columnId, multiColumn, onlyMedia } = this.props; const pinned = !!columnId; return ( - <Column ref={this.setRef} name='local' label={intl.formatMessage(messages.title)}> + <Column ref={this.setRef} name='local' bindToDocument={!multiColumn} label={intl.formatMessage(messages.title)}> <ColumnHeader icon='users' active={hasUnread} @@ -125,10 +123,10 @@ export default class CommunityTimeline extends React.PureComponent { <StatusListContainer trackScroll={!pinned} scrollKey={`community_timeline-${columnId}`} - shouldUpdateScroll={this.shouldUpdateScroll} timelineId={`community${onlyMedia ? ':media' : ''}`} onLoadMore={this.handleLoadMore} emptyMessage={<FormattedMessage id='empty_column.community' defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!' />} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/compose/components/character_counter.js b/app/javascript/flavours/glitch/features/compose/components/character_counter.js new file mode 100644 index 000000000..0ecfc9141 --- /dev/null +++ b/app/javascript/flavours/glitch/features/compose/components/character_counter.js @@ -0,0 +1,25 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { length } from 'stringz'; + +export default class CharacterCounter extends React.PureComponent { + + static propTypes = { + text: PropTypes.string.isRequired, + max: PropTypes.number.isRequired, + }; + + checkRemainingText (diff) { + if (diff < 0) { + return <span className='character-counter character-counter--over'>{diff}</span>; + } + + return <span className='character-counter'>{diff}</span>; + } + + render () { + const diff = this.props.max - length(this.props.text); + return this.checkRemainingText(diff); + } + +} diff --git a/app/javascript/flavours/glitch/features/compose/components/compose_form.js b/app/javascript/flavours/glitch/features/compose/components/compose_form.js index cbce675d5..6e07998ec 100644 --- a/app/javascript/flavours/glitch/features/compose/components/compose_form.js +++ b/app/javascript/flavours/glitch/features/compose/components/compose_form.js @@ -15,6 +15,8 @@ import { countableText } from 'flavours/glitch/util/counter'; import OptionsContainer from '../containers/options_container'; import Publisher from './publisher'; import TextareaIcons from './textarea_icons'; +import { maxChars } from 'flavours/glitch/util/initial_state'; +import CharacterCounter from './character_counter'; const messages = defineMessages({ placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' }, @@ -119,14 +121,8 @@ class ComposeForm extends ImmutablePureComponent { // Submit unless there are media with missing descriptions if (mediaDescriptionConfirmation && onMediaDescriptionConfirm && media && media.some(item => !item.get('description'))) { - const firstWithoutDescription = media.findIndex(item => !item.get('description')); - if (uploadForm) { - const inputs = uploadForm.querySelectorAll('.composer--upload_form--item input'); - if (inputs.length == media.size && firstWithoutDescription !== -1) { - inputs[firstWithoutDescription].focus(); - } - } - onMediaDescriptionConfirm(this.context.router ? this.context.router.history : null); + const firstWithoutDescription = media.find(item => !item.get('description')); + onMediaDescriptionConfirm(this.context.router ? this.context.router.history : null, firstWithoutDescription.get('id')); } else if (onSubmit) { onSubmit(this.context.router ? this.context.router.history : null); } @@ -197,7 +193,10 @@ class ComposeForm extends ImmutablePureComponent { handleFocus = () => { if (this.composeForm && !this.props.singleColumn) { - this.composeForm.scrollIntoView(); + const { left, right } = this.composeForm.getBoundingClientRect(); + if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) { + this.composeForm.scrollIntoView(); + } } } @@ -295,13 +294,15 @@ class ComposeForm extends ImmutablePureComponent { let disabledButton = isSubmitting || isUploading || isChangingUpload || (!text.trim().length && !anyMedia); + const countText = `${spoilerText}${countableText(text)}${advancedOptions && advancedOptions.get('do_not_federate') ? ' 👁️' : ''}`; + return ( - <div className='composer' ref={this.setRef}> + <div className='composer'> <WarningContainer /> <ReplyIndicatorContainer /> - <div className={`composer--spoiler ${spoiler ? 'composer--spoiler--visible' : ''}`}> + <div className={`composer--spoiler ${spoiler ? 'composer--spoiler--visible' : ''}`} ref={this.setRef}> <AutosuggestInput placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={spoilerText} @@ -344,19 +345,24 @@ class ComposeForm extends ImmutablePureComponent { </div> </AutosuggestTextarea> - <OptionsContainer - advancedOptions={advancedOptions} - disabled={isSubmitting} - onChangeVisibility={onChangeVisibility} - onToggleSpoiler={spoilersAlwaysOn ? null : onChangeSpoilerness} - onUpload={onPaste} - privacy={privacy} - sensitive={sensitive || (spoilersAlwaysOn && spoilerText && spoilerText.length > 0)} - spoiler={spoilersAlwaysOn ? (spoilerText && spoilerText.length > 0) : spoiler} - /> + <div className='composer--options-wrapper'> + <OptionsContainer + advancedOptions={advancedOptions} + disabled={isSubmitting} + onChangeVisibility={onChangeVisibility} + onToggleSpoiler={spoilersAlwaysOn ? null : onChangeSpoilerness} + onUpload={onPaste} + privacy={privacy} + sensitive={sensitive || (spoilersAlwaysOn && spoilerText && spoilerText.length > 0)} + spoiler={spoilersAlwaysOn ? (spoilerText && spoilerText.length > 0) : spoiler} + /> + <div className='compose--counter-wrapper'> + <CharacterCounter text={countText} max={maxChars} /> + </div> + </div> <Publisher - countText={`${spoilerText}${countableText(text)}${advancedOptions && advancedOptions.get('do_not_federate') ? ' 👁️' : ''}`} + countText={countText} disabled={disabledButton} onSecondarySubmit={handleSecondarySubmit} onSubmit={handleSubmit} diff --git a/app/javascript/flavours/glitch/features/compose/components/dropdown.js b/app/javascript/flavours/glitch/features/compose/components/dropdown.js index 8d982208f..60035b705 100644 --- a/app/javascript/flavours/glitch/features/compose/components/dropdown.js +++ b/app/javascript/flavours/glitch/features/compose/components/dropdown.js @@ -12,33 +12,101 @@ import DropdownMenu from './dropdown_menu'; import { isUserTouching } from 'flavours/glitch/util/is_mobile'; import { assignHandlers } from 'flavours/glitch/util/react_helpers'; -// Handlers. -const handlers = { +// The component. +export default class ComposerOptionsDropdown extends React.PureComponent { - // Closes the dropdown. - handleClose () { - this.setState({ open: false }); - }, + static propTypes = { + active: PropTypes.bool, + disabled: PropTypes.bool, + icon: PropTypes.string, + items: PropTypes.arrayOf(PropTypes.shape({ + icon: PropTypes.string, + meta: PropTypes.node, + name: PropTypes.string.isRequired, + on: PropTypes.bool, + text: PropTypes.node, + })).isRequired, + onModalOpen: PropTypes.func, + onModalClose: PropTypes.func, + title: PropTypes.string, + value: PropTypes.string, + onChange: PropTypes.func, + }; + + state = { + needsModalUpdate: false, + open: false, + openedViaKeyboard: undefined, + placement: 'bottom', + }; - // The enter key toggles the dropdown's open state, and the escape - // key closes it. - handleKeyDown ({ key }) { - const { - handleClose, - handleToggle, - } = this.handlers; - switch (key) { + // Toggles opening and closing the dropdown. + handleToggle = ({ target, type }) => { + const { onModalOpen } = this.props; + const { open } = this.state; + + if (isUserTouching()) { + if (this.state.open) { + this.props.onModalClose(); + } else { + const modal = this.handleMakeModal(); + if (modal && onModalOpen) { + onModalOpen(modal); + } + } + } else { + const { top } = target.getBoundingClientRect(); + if (this.state.open && this.activeElement) { + this.activeElement.focus(); + } + this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' }); + this.setState({ open: !this.state.open, openedViaKeyboard: type !== 'click' }); + } + } + + handleKeyDown = (e) => { + switch (e.key) { + case 'Escape': + this.handleClose(); + break; + } + } + + handleMouseDown = () => { + if (!this.state.open) { + this.activeElement = document.activeElement; + } + } + + handleButtonKeyDown = (e) => { + switch(e.key) { + case ' ': case 'Enter': - handleToggle(key); + this.handleMouseDown(); break; - case 'Escape': - handleClose(); + } + } + + handleKeyPress = (e) => { + switch(e.key) { + case ' ': + case 'Enter': + this.handleToggle(e); + e.stopPropagation(); + e.preventDefault(); break; } - }, + } + + handleClose = () => { + if (this.state.open && this.activeElement) { + this.activeElement.focus(); + } + this.setState({ open: false }); + } // Creates an action modal object. - handleMakeModal () { + handleMakeModal = () => { const component = this; const { items, @@ -76,74 +144,31 @@ const handlers = { }) ), }; - }, - - // Toggles opening and closing the dropdown. - handleToggle ({ target }) { - const { handleMakeModal } = this.handlers; - const { onModalOpen } = this.props; - const { open } = this.state; - - // If this is a touch device, we open a modal instead of the - // dropdown. - if (isUserTouching()) { - - // This gets the modal to open. - const modal = handleMakeModal(); - - // If we can, we then open the modal. - if (modal && onModalOpen) { - onModalOpen(modal); - return; - } - } - - const { top } = target.getBoundingClientRect(); - this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' }); - // Otherwise, we just set our state to open. - this.setState({ open: !open }); - }, + } // If our modal is open and our props update, we need to also update // the modal. - handleUpdate () { - const { handleMakeModal } = this.handlers; + handleUpdate = () => { const { onModalOpen } = this.props; const { needsModalUpdate } = this.state; // Gets our modal object. - const modal = handleMakeModal(); + const modal = this.handleMakeModal(); // Reopens the modal with the new object. if (needsModalUpdate && modal && onModalOpen) { onModalOpen(modal); } - }, -}; - -// The component. -export default class ComposerOptionsDropdown extends React.PureComponent { - - // Constructor. - constructor (props) { - super(props); - assignHandlers(this, handlers); - this.state = { - needsModalUpdate: false, - open: false, - placement: 'bottom', - }; } // Updates our modal as necessary. componentDidUpdate (prevProps) { - const { handleUpdate } = this.handlers; const { items } = this.props; const { needsModalUpdate } = this.state; if (needsModalUpdate && items.find( (item, i) => item.on !== prevProps.items[i].on )) { - handleUpdate(); + this.handleUpdate(); this.setState({ needsModalUpdate: false }); } } @@ -151,11 +176,6 @@ export default class ComposerOptionsDropdown extends React.PureComponent { // Rendering. render () { const { - handleClose, - handleKeyDown, - handleToggle, - } = this.handlers; - const { active, disabled, title, @@ -175,14 +195,18 @@ export default class ComposerOptionsDropdown extends React.PureComponent { return ( <div className={computedClass} - onKeyDown={handleKeyDown} + onKeyDown={this.handleKeyDown} > <IconButton active={open || active} className='value' disabled={disabled} icon={icon} - onClick={handleToggle} + inverted + onClick={this.handleToggle} + onMouseDown={this.handleMouseDown} + onKeyDown={this.handleButtonKeyDown} + onKeyPress={this.handleKeyPress} size={18} style={{ height: null, @@ -199,8 +223,9 @@ export default class ComposerOptionsDropdown extends React.PureComponent { <DropdownMenu items={items} onChange={onChange} - onClose={handleClose} + onClose={this.handleClose} value={value} + openedViaKeyboard={this.state.openedViaKeyboard} /> </Overlay> </div> @@ -208,22 +233,3 @@ export default class ComposerOptionsDropdown extends React.PureComponent { } } - -// Props. -ComposerOptionsDropdown.propTypes = { - active: PropTypes.bool, - disabled: PropTypes.bool, - icon: PropTypes.string, - items: PropTypes.arrayOf(PropTypes.shape({ - icon: PropTypes.string, - meta: PropTypes.node, - name: PropTypes.string.isRequired, - on: PropTypes.bool, - text: PropTypes.node, - })).isRequired, - onChange: PropTypes.func, - onModalClose: PropTypes.func, - onModalOpen: PropTypes.func, - title: PropTypes.string, - value: PropTypes.string, -}; diff --git a/app/javascript/flavours/glitch/features/compose/components/dropdown_menu.js b/app/javascript/flavours/glitch/features/compose/components/dropdown_menu.js index 19d35a8f4..404504e84 100644 --- a/app/javascript/flavours/glitch/features/compose/components/dropdown_menu.js +++ b/app/javascript/flavours/glitch/features/compose/components/dropdown_menu.js @@ -14,91 +14,6 @@ import { withPassive } from 'flavours/glitch/util/dom_helpers'; import Motion from 'flavours/glitch/util/optional_motion'; import { assignHandlers } from 'flavours/glitch/util/react_helpers'; -class ComposerOptionsDropdownContentItem extends ImmutablePureComponent { - - static propTypes = { - active: PropTypes.bool, - name: PropTypes.string, - onChange: PropTypes.func, - onClose: PropTypes.func, - options: PropTypes.shape({ - icon: PropTypes.string, - meta: PropTypes.node, - on: PropTypes.bool, - text: PropTypes.node, - }), - }; - - handleActivate = (e) => { - const { - name, - onChange, - onClose, - options: { on }, - } = this.props; - - // If the escape key was pressed, we close the dropdown. - if (e.key === 'Escape' && onClose) { - onClose(); - - // Otherwise, we both close the dropdown and change the value. - } else if (onChange && (!e.key || e.key === 'Enter')) { - e.preventDefault(); // Prevents change in focus on click - if ((on === null || typeof on === 'undefined') && onClose) { - onClose(); - } - onChange(name); - } - } - - // Rendering. - render () { - const { - active, - options: { - icon, - meta, - on, - text, - }, - } = this.props; - const computedClass = classNames('composer--options--dropdown--content--item', { - active, - lengthy: meta, - 'toggled-off': !on && on !== null && typeof on !== 'undefined', - 'toggled-on': on, - 'with-icon': icon, - }); - - let prefix = null; - - if (on !== null && typeof on !== 'undefined') { - prefix = <Toggle checked={on} onChange={this.handleActivate} />; - } else if (icon) { - prefix = <Icon className='icon' fullwidth icon={icon} /> - } - - // The result. - return ( - <div - className={computedClass} - onClick={this.handleActivate} - onKeyDown={this.handleActivate} - role='button' - tabIndex='0' - > - {prefix} - - <div className='content'> - <strong>{text}</strong> - {meta} - </div> - </div> - ); - } - -}; - // The spring to use with our motion. const springMotion = spring(1, { damping: 35, @@ -116,10 +31,11 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent on: PropTypes.bool, text: PropTypes.node, })), - onChange: PropTypes.func, - onClose: PropTypes.func, + onChange: PropTypes.func.isRequired, + onClose: PropTypes.func.isRequired, style: PropTypes.object, value: PropTypes.string, + openedViaKeyboard: PropTypes.bool, }; static defaultProps = { @@ -128,14 +44,13 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent state = { mounted: false, + value: this.props.openedViaKeyboard ? this.props.items[0].name : undefined, }; // When the document is clicked elsewhere, we close the dropdown. - handleDocumentClick = ({ target }) => { - const { node } = this; - const { onClose } = this.props; - if (onClose && node && !node.contains(target)) { - onClose(); + handleDocumentClick = (e) => { + if (this.node && !this.node.contains(e.target)) { + this.props.onClose(); } } @@ -148,6 +63,11 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent componentDidMount () { document.addEventListener('click', this.handleDocumentClick, false); document.addEventListener('touchend', this.handleDocumentClick, withPassive); + if (this.focusedItem) { + this.focusedItem.focus(); + } else { + this.node.firstChild.focus(); + } this.setState({ mounted: true }); } @@ -157,6 +77,135 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent document.removeEventListener('touchend', this.handleDocumentClick, withPassive); } + handleClick = (name, e) => { + const { + onChange, + onClose, + items, + } = this.props; + + const { on } = this.props.items.find(item => item.name === name); + e.preventDefault(); // Prevents change in focus on click + if ((on === null || typeof on === 'undefined')) { + onClose(); + } + onChange(name); + } + + // Handle changes differently whether the dropdown is a list of options or actions + handleChange = (name) => { + if (this.props.value) { + this.props.onChange(name); + } else { + this.setState({ value: name }); + } + } + + handleKeyDown = (name, e) => { + const { items } = this.props; + const index = items.findIndex(item => { + return (item.name === name); + }); + let element; + + switch(e.key) { + case 'Escape': + this.props.onClose(); + break; + case 'Enter': + case ' ': + this.handleClick(e); + break; + case 'ArrowDown': + element = this.node.childNodes[index + 1]; + if (element) { + element.focus(); + this.handleChange(element.getAttribute('data-index')); + } + break; + case 'ArrowUp': + element = this.node.childNodes[index - 1]; + if (element) { + element.focus(); + this.handleChange(element.getAttribute('data-index')); + } + break; + case 'Tab': + if (e.shiftKey) { + element = this.node.childNodes[index - 1] || this.node.lastChild; + } else { + element = this.node.childNodes[index + 1] || this.node.firstChild; + } + if (element) { + element.focus(); + this.handleChange(element.getAttribute('data-index')); + e.preventDefault(); + e.stopPropagation(); + } + break; + case 'Home': + element = this.node.firstChild; + if (element) { + element.focus(); + this.handleChange(element.getAttribute('data-index')); + } + break; + case 'End': + element = this.node.lastChild; + if (element) { + element.focus(); + this.handleChange(element.getAttribute('data-index')); + } + break; + } + } + + setFocusRef = c => { + this.focusedItem = c; + } + + renderItem = (item) => { + const { name, icon, meta, on, text } = item; + + const active = (name === (this.props.value || this.state.value)); + + const computedClass = classNames('composer--options--dropdown--content--item', { + active, + lengthy: meta, + 'toggled-off': !on && on !== null && typeof on !== 'undefined', + 'toggled-on': on, + 'with-icon': icon, + }); + + let prefix = null; + + if (on !== null && typeof on !== 'undefined') { + prefix = <Toggle checked={on} onChange={this.handleClick.bind(this, name)} />; + } else if (icon) { + prefix = <Icon className='icon' fixedWidth id={icon} /> + } + + return ( + <div + className={computedClass} + onClick={this.handleClick.bind(this, name)} + onKeyDown={this.handleKeyDown.bind(this, name)} + role='option' + tabIndex='0' + key={name} + data-index={name} + ref={active ? this.setFocusRef : null} + > + {prefix} + + <div className='content'> + <strong>{text}</strong> + {meta} + </div> + </div> + ); + } + // Rendering. render () { const { mounted } = this.state; @@ -165,7 +214,6 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent onChange, onClose, style, - value, } = this.props; // The result. @@ -189,27 +237,14 @@ export default class ComposerOptionsDropdownContent extends React.PureComponent <div className='composer--options--dropdown--content' ref={this.handleRef} + role='listbox' style={{ ...style, opacity: opacity, transform: mounted ? `scale(${scaleX}, ${scaleY})` : null, }} > - {items ? items.map( - ({ - name, - ...rest - }) => ( - <ComposerOptionsDropdownContentItem - active={name === value} - key={name} - name={name} - onChange={onChange} - onClose={onClose} - options={rest} - /> - ) - ) : null} + {!!items && items.map(item => this.renderItem(item))} </div> )} </Motion> diff --git a/app/javascript/flavours/glitch/features/compose/components/header.js b/app/javascript/flavours/glitch/features/compose/components/header.js index 2e29084f2..5b456b717 100644 --- a/app/javascript/flavours/glitch/features/compose/components/header.js +++ b/app/javascript/flavours/glitch/features/compose/components/header.js @@ -53,8 +53,18 @@ class Header extends ImmutablePureComponent { showNotificationsBadge: PropTypes.bool, intl: PropTypes.object, onSettingsClick: PropTypes.func, + onLogout: PropTypes.func.isRequired, }; + handleLogoutClick = e => { + e.preventDefault(); + e.stopPropagation(); + + this.props.onLogout(); + + return false; + } + render () { const { intl, columns, unreadNotifications, showNotificationsBadge, onSettingsClick } = this.props; @@ -72,13 +82,13 @@ class Header extends ImmutablePureComponent { aria-label={intl.formatMessage(messages.start)} title={intl.formatMessage(messages.start)} to='/getting-started' - ><Icon icon='asterisk' /></Link> + ><Icon id='asterisk' /></Link> {renderForColumn('HOME', ( <Link aria-label={intl.formatMessage(messages.home_timeline)} title={intl.formatMessage(messages.home_timeline)} to='/timelines/home' - ><Icon icon='home' /></Link> + ><Icon id='home' /></Link> ))} {renderForColumn('NOTIFICATIONS', ( <Link @@ -87,7 +97,7 @@ class Header extends ImmutablePureComponent { to='/notifications' > <span className='icon-badge-wrapper'> - <Icon icon='bell' /> + <Icon id='bell' /> { showNotificationsBadge && unreadNotifications > 0 && <div className='icon-badge' />} </span> </Link> @@ -97,27 +107,27 @@ class Header extends ImmutablePureComponent { aria-label={intl.formatMessage(messages.community)} title={intl.formatMessage(messages.community)} to='/timelines/public/local' - ><Icon icon='users' /></Link> + ><Icon id='users' /></Link> ))} {renderForColumn('PUBLIC', ( <Link aria-label={intl.formatMessage(messages.public)} title={intl.formatMessage(messages.public)} to='/timelines/public' - ><Icon icon='globe' /></Link> + ><Icon id='globe' /></Link> ))} <a aria-label={intl.formatMessage(messages.settings)} onClick={onSettingsClick} href='#' title={intl.formatMessage(messages.settings)} - ><Icon icon='cogs' /></a> + ><Icon id='cogs' /></a> <a aria-label={intl.formatMessage(messages.logout)} - data-method='delete' + onClick={this.handleLogoutClick} href={ signOutLink } title={intl.formatMessage(messages.logout)} - ><Icon icon='sign-out' /></a> + ><Icon id='sign-out' /></a> </nav> ); }; diff --git a/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js b/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js index 3148434f1..f6bfbdd1e 100644 --- a/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js +++ b/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js @@ -20,16 +20,18 @@ export default class NavigationBar extends ImmutablePureComponent { <Avatar account={this.props.account} size={48} /> </Permalink> - <Permalink className='acct' href={this.props.account.get('url')} to={`/accounts/${this.props.account.get('id')}`}> - <strong>@{this.props.account.get('acct')}</strong> - </Permalink> + <div className='navigation-bar__profile'> + <Permalink className='acct' href={this.props.account.get('url')} to={`/accounts/${this.props.account.get('id')}`}> + <strong>@{this.props.account.get('acct')}</strong> + </Permalink> - { profileLink !== undefined && ( - <a - className='edit' - href={ profileLink } - ><FormattedMessage id='navigation_bar.edit_profile' defaultMessage='Edit profile' /></a> - )} + { profileLink !== undefined && ( + <a + className='edit' + href={ profileLink } + ><FormattedMessage id='navigation_bar.edit_profile' defaultMessage='Edit profile' /></a> + )} + </div> </div> ); }; diff --git a/app/javascript/flavours/glitch/features/compose/components/options.js b/app/javascript/flavours/glitch/features/compose/components/options.js index 0c94f5514..92348b000 100644 --- a/app/javascript/flavours/glitch/features/compose/components/options.js +++ b/app/javascript/flavours/glitch/features/compose/components/options.js @@ -7,7 +7,7 @@ import spring from 'react-motion/lib/spring'; // Components. import IconButton from 'flavours/glitch/components/icon_button'; -import TextIconButton from 'flavours/glitch/components/text_icon_button'; +import TextIconButton from './text_icon_button'; import Dropdown from './dropdown'; import ImmutablePureComponent from 'react-immutable-pure-component'; @@ -232,7 +232,7 @@ class ComposerOptions extends ImmutablePureComponent { const contentTypeItems = { plain: { - icon: 'align-left', + icon: 'file-text', name: 'text/plain', text: <FormattedMessage {...messages.plain} />, }, diff --git a/app/javascript/flavours/glitch/features/compose/components/poll_form.js b/app/javascript/flavours/glitch/features/compose/components/poll_form.js index 21b5d3d73..3d818ea20 100644 --- a/app/javascript/flavours/glitch/features/compose/components/poll_form.js +++ b/app/javascript/flavours/glitch/features/compose/components/poll_form.js @@ -132,7 +132,7 @@ class PollForm extends ImmutablePureComponent { {options.size < pollLimits.max_options && ( <label className='poll__text editable'> <span className={classNames('poll__input')} style={{ opacity: 0 }} /> - <button className='button button-secondary' onClick={this.handleAddOption}><Icon icon='plus' /> <FormattedMessage {...messages.add_option} /></button> + <button className='button button-secondary' onClick={this.handleAddOption}><Icon id='plus' /> <FormattedMessage {...messages.add_option} /></button> </label> )} </ul> diff --git a/app/javascript/flavours/glitch/features/compose/components/publisher.js b/app/javascript/flavours/glitch/features/compose/components/publisher.js index e283b32b9..b8d9d98bf 100644 --- a/app/javascript/flavours/glitch/features/compose/components/publisher.js +++ b/app/javascript/flavours/glitch/features/compose/components/publisher.js @@ -49,7 +49,6 @@ class Publisher extends ImmutablePureComponent { return ( <div className={computedClass}> - <span className='count'>{diff}</span> {sideArm && sideArm !== 'none' ? ( <Button className='side_arm' @@ -59,7 +58,7 @@ class Publisher extends ImmutablePureComponent { text={ <span> <Icon - icon={{ + id={{ public: 'globe', unlisted: 'unlock', private: 'lock', @@ -81,7 +80,7 @@ class Publisher extends ImmutablePureComponent { return ( <span> <Icon - icon={{ + id={{ direct: 'envelope', private: 'lock', public: 'globe', diff --git a/app/javascript/flavours/glitch/features/compose/components/search.js b/app/javascript/flavours/glitch/features/compose/components/search.js index 1d96933ea..12d839637 100644 --- a/app/javascript/flavours/glitch/features/compose/components/search.js +++ b/app/javascript/flavours/glitch/features/compose/components/search.js @@ -36,7 +36,7 @@ class SearchPopout extends React.PureComponent { <div style={{ ...style, position: 'absolute', width: 285, zIndex: 2 }}> <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}> {({ opacity, scaleX, scaleY }) => ( - <div className='drawer--search--popout' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}> + <div className='search-popout' style={{ opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }}> <h4><FormattedMessage id='search_popout.search_format' defaultMessage='Advanced search format' /></h4> <ul> @@ -73,12 +73,17 @@ class Search extends React.PureComponent { onShow: PropTypes.func.isRequired, openInRoute: PropTypes.bool, intl: PropTypes.object.isRequired, + singleColumn: PropTypes.bool, }; state = { expanded: false, }; + setRef = c => { + this.searchForm = c; + } + handleChange = (e) => { const { onChange } = this.props; if (onChange) { @@ -103,10 +108,14 @@ class Search extends React.PureComponent { } handleFocus = () => { - const { onShow } = this.props; this.setState({ expanded: true }); - if (onShow) { - onShow(); + this.props.onShow(); + + if (this.searchForm && !this.props.singleColumn) { + const { left, right } = this.searchForm.getBoundingClientRect(); + if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) { + this.searchForm.scrollIntoView(); + } } } @@ -128,14 +137,15 @@ class Search extends React.PureComponent { render () { const { intl, value, submitted } = this.props; const { expanded } = this.state; - const active = value.length > 0 || submitted; - const computedClass = classNames('drawer--search', { active }); + const hasValue = value.length > 0 || submitted; return ( - <div className={computedClass}> + <div className='search'> <label> <span style={{ display: 'none' }}>{intl.formatMessage(messages.placeholder)}</span> <input + ref={this.setRef} + className='search__input' type='text' placeholder={intl.formatMessage(messages.placeholder)} value={value || ''} @@ -145,17 +155,19 @@ class Search extends React.PureComponent { onBlur={this.handleBlur} /> </label> + <div aria-label={intl.formatMessage(messages.placeholder)} - className='icon' + className='search__icon' onClick={this.handleClear} role='button' tabIndex='0' > - <Icon icon='search' /> - <Icon icon='times-circle' /> + <Icon id='search' className={hasValue ? '' : 'active'} /> + <Icon id='times-circle' className={hasValue ? 'active' : ''} /> </div> - <Overlay show={expanded && !active} placement='bottom' target={this}> + + <Overlay show={expanded && !hasValue} placement='bottom' target={this}> <SearchPopout /> </Overlay> </div> diff --git a/app/javascript/flavours/glitch/features/compose/components/search_results.js b/app/javascript/flavours/glitch/features/compose/components/search_results.js index 69df8cdc9..fa3487328 100644 --- a/app/javascript/flavours/glitch/features/compose/components/search_results.js +++ b/app/javascript/flavours/glitch/features/compose/components/search_results.js @@ -7,6 +7,8 @@ import StatusContainer from 'flavours/glitch/containers/status_container'; import ImmutablePureComponent from 'react-immutable-pure-component'; import Hashtag from 'flavours/glitch/components/hashtag'; import Icon from 'flavours/glitch/components/icon'; +import { searchEnabled } from 'flavours/glitch/util/initial_state'; +import LoadMore from 'flavours/glitch/components/load_more'; const messages = defineMessages({ dismissSuggestion: { id: 'suggestions.dismiss', defaultMessage: 'Dismiss suggestion' }, @@ -19,23 +21,33 @@ class SearchResults extends ImmutablePureComponent { results: ImmutablePropTypes.map.isRequired, suggestions: ImmutablePropTypes.list.isRequired, fetchSuggestions: PropTypes.func.isRequired, + expandSearch: PropTypes.func.isRequired, dismissSuggestion: PropTypes.func.isRequired, + searchTerm: PropTypes.string, intl: PropTypes.object.isRequired, }; componentDidMount () { - this.props.fetchSuggestions(); + if (this.props.searchTerm === '') { + this.props.fetchSuggestions(); + } } - render() { - const { intl, results, suggestions, dismissSuggestion } = this.props; + handleLoadMoreAccounts = () => this.props.expandSearch('accounts'); + + handleLoadMoreStatuses = () => this.props.expandSearch('statuses'); + + handleLoadMoreHashtags = () => this.props.expandSearch('hashtags'); + + render () { + const { intl, results, suggestions, dismissSuggestion, searchTerm } = this.props; if (results.isEmpty() && !suggestions.isEmpty()) { return ( <div className='drawer--results'> <div className='trends'> <div className='trends__header'> - <i className='fa fa-user-plus fa-fw' /> + <Icon fixedWidth id='user-plus' /> <FormattedMessage id='suggestions.header' defaultMessage='You might be interested in…' /> </div> @@ -51,6 +63,16 @@ class SearchResults extends ImmutablePureComponent { </div> </div> ); + } else if(results.get('statuses') && results.get('statuses').size === 0 && !searchEnabled && !(searchTerm.startsWith('@') || searchTerm.startsWith('#') || searchTerm.includes(' '))) { + statuses = ( + <section> + <h5><Icon id='quote-right' fixedWidth /><FormattedMessage id='search_results.statuses' defaultMessage='Toots' /></h5> + + <div className='search-results__info'> + <FormattedMessage id='search_results.statuses_fts_disabled' defaultMessage='Searching toots by their content is not enabled on this Mastodon server.' /> + </div> + </section> + ); } let accounts, statuses, hashtags; @@ -60,9 +82,11 @@ class SearchResults extends ImmutablePureComponent { count += results.get('accounts').size; accounts = ( <section> - <h5><Icon icon='users' fixedWidth /><FormattedMessage id='search_results.accounts' defaultMessage='People' /></h5> + <h5><Icon id='users' fixedWidth /><FormattedMessage id='search_results.accounts' defaultMessage='People' /></h5> {results.get('accounts').map(accountId => <AccountContainer id={accountId} key={accountId} />)} + + {results.get('accounts').size >= 5 && <LoadMore visible onClick={this.handleLoadMoreAccounts} />} </section> ); } @@ -71,9 +95,11 @@ class SearchResults extends ImmutablePureComponent { count += results.get('statuses').size; statuses = ( <section> - <h5><Icon icon='quote-right' fixedWidth /><FormattedMessage id='search_results.statuses' defaultMessage='Toots' /></h5> + <h5><Icon id='quote-right' fixedWidth /><FormattedMessage id='search_results.statuses' defaultMessage='Toots' /></h5> {results.get('statuses').map(statusId => <StatusContainer id={statusId} key={statusId}/>)} + + {results.get('statuses').size >= 5 && <LoadMore visible onClick={this.handleLoadMoreStatuses} />} </section> ); } @@ -82,9 +108,11 @@ class SearchResults extends ImmutablePureComponent { count += results.get('hashtags').size; hashtags = ( <section> - <h5><Icon icon='hashtag' fixedWidth /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></h5> + <h5><Icon id='hashtag' fixedWidth /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></h5> {results.get('hashtags').map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)} + + {results.get('hashtags').size >= 5 && <LoadMore visible onClick={this.handleLoadMoreHashtags} />} </section> ); } @@ -93,7 +121,7 @@ class SearchResults extends ImmutablePureComponent { return ( <div className='drawer--results'> <header className='search-results__header'> - <Icon icon='search' fixedWidth /> + <Icon id='search' fixedWidth /> <FormattedMessage id='search_results.total' defaultMessage='{count, number} {count, plural, one {result} other {results}}' values={{ count }} /> </header> diff --git a/app/javascript/flavours/glitch/components/text_icon_button.js b/app/javascript/flavours/glitch/features/compose/components/text_icon_button.js index 9c8ffab1f..7f2005060 100644 --- a/app/javascript/flavours/glitch/components/text_icon_button.js +++ b/app/javascript/flavours/glitch/features/compose/components/text_icon_button.js @@ -1,6 +1,12 @@ import React from 'react'; import PropTypes from 'prop-types'; +const iconStyle = { + height: null, + lineHeight: '27px', + width: `${18 * 1.28571429}px`, +}; + export default class TextIconButton extends React.PureComponent { static propTypes = { @@ -20,7 +26,15 @@ export default class TextIconButton extends React.PureComponent { const { label, title, active, ariaControls } = this.props; return ( - <button title={title} aria-label={title} className={`text-icon-button ${active ? 'active' : ''}`} aria-expanded={active} onClick={this.handleClick} aria-controls={ariaControls}> + <button + title={title} + aria-label={title} + className={`text-icon-button ${active ? 'active' : ''}`} + aria-expanded={active} + onClick={this.handleClick} + aria-controls={ariaControls} + style={iconStyle} + > {label} </button> ); diff --git a/app/javascript/flavours/glitch/features/compose/components/textarea_icons.js b/app/javascript/flavours/glitch/features/compose/components/textarea_icons.js index ec696f9c3..b875fb15e 100644 --- a/app/javascript/flavours/glitch/features/compose/components/textarea_icons.js +++ b/app/javascript/flavours/glitch/features/compose/components/textarea_icons.js @@ -47,8 +47,8 @@ class TextareaIcons extends ImmutablePureComponent { title={intl.formatMessage(message)} > <Icon - fullwidth - icon={icon} + fixedWidth + id={icon} /> </span> ) : null diff --git a/app/javascript/flavours/glitch/features/compose/components/upload.js b/app/javascript/flavours/glitch/features/compose/components/upload.js index 84edf664e..425b0fe5e 100644 --- a/app/javascript/flavours/glitch/features/compose/components/upload.js +++ b/app/javascript/flavours/glitch/features/compose/components/upload.js @@ -4,18 +4,12 @@ import PropTypes from 'prop-types'; import Motion from 'flavours/glitch/util/optional_motion'; import spring from 'react-motion/lib/spring'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { FormattedMessage } from 'react-intl'; import classNames from 'classnames'; import Icon from 'flavours/glitch/components/icon'; import { isUserTouching } from 'flavours/glitch/util/is_mobile'; -const messages = defineMessages({ - description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' }, -}); - -// The component. -export default @injectIntl -class Upload extends ImmutablePureComponent { +export default class Upload extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -23,30 +17,10 @@ class Upload extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.map.isRequired, - intl: PropTypes.object.isRequired, onUndo: PropTypes.func.isRequired, - onDescriptionChange: PropTypes.func.isRequired, onOpenFocalPoint: PropTypes.func.isRequired, - onSubmit: PropTypes.func.isRequired, - }; - - state = { - hovered: false, - focused: false, - dirtyDescription: null, }; - handleKeyDown = (e) => { - if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) { - this.handleSubmit(); - } - } - - handleSubmit = () => { - this.handleInputBlur(); - this.props.onSubmit(this.context.router.history); - } - handleUndoClick = e => { e.stopPropagation(); this.props.onUndo(this.props.media.get('id')); @@ -57,69 +31,21 @@ class Upload extends ImmutablePureComponent { this.props.onOpenFocalPoint(this.props.media.get('id')); } - handleInputChange = e => { - this.setState({ dirtyDescription: e.target.value }); - } - - handleMouseEnter = () => { - this.setState({ hovered: true }); - } - - handleMouseLeave = () => { - this.setState({ hovered: false }); - } - - handleInputFocus = () => { - this.setState({ focused: true }); - } - - handleClick = () => { - this.setState({ focused: true }); - } - - handleInputBlur = () => { - const { dirtyDescription } = this.state; - - this.setState({ focused: false, dirtyDescription: null }); - - if (dirtyDescription !== null) { - this.props.onDescriptionChange(this.props.media.get('id'), dirtyDescription); - } - } - render () { const { intl, media } = this.props; - const active = this.state.hovered || this.state.focused || isUserTouching(); - const description = this.state.dirtyDescription || (this.state.dirtyDescription !== '' && media.get('description')) || ''; - const computedClass = classNames('composer--upload_form--item', { active }); const focusX = media.getIn(['meta', 'focus', 'x']); const focusY = media.getIn(['meta', 'focus', 'y']); const x = ((focusX / 2) + .5) * 100; const y = ((focusY / -2) + .5) * 100; return ( - <div className={computedClass} tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClick} role='button'> + <div className='composer--upload_form--item' tabIndex='0' role='button'> <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12, }) }}> {({ scale }) => ( <div style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}> - <div className={classNames('composer--upload_form--actions', { active })}> - <button className='icon-button' onClick={this.handleUndoClick}><Icon icon='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button> - {media.get('type') === 'image' && <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='crosshairs' /> <FormattedMessage id='upload_form.focus' defaultMessage='Crop' /></button>} - </div> - - <div className={classNames('composer--upload_form--description', { active })}> - <label> - <span style={{ display: 'none' }}>{intl.formatMessage(messages.description)}</span> - <textarea - placeholder={intl.formatMessage(messages.description)} - value={description} - maxLength={420} - onFocus={this.handleInputFocus} - onChange={this.handleInputChange} - onBlur={this.handleInputBlur} - onKeyDown={this.handleKeyDown} - /> - </label> + <div className={classNames('composer--upload_form--actions', { active: true })}> + <button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button> + <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button> </div> </div> )} diff --git a/app/javascript/flavours/glitch/features/compose/components/upload_form.js b/app/javascript/flavours/glitch/features/compose/components/upload_form.js index 35880ddcc..43039c674 100644 --- a/app/javascript/flavours/glitch/features/compose/components/upload_form.js +++ b/app/javascript/flavours/glitch/features/compose/components/upload_form.js @@ -4,6 +4,7 @@ import UploadProgressContainer from '../containers/upload_progress_container'; import ImmutablePureComponent from 'react-immutable-pure-component'; import UploadContainer from '../containers/upload_container'; import SensitiveButtonContainer from '../containers/sensitive_button_container'; +import { FormattedMessage } from 'react-intl'; export default class UploadForm extends ImmutablePureComponent { static propTypes = { @@ -15,7 +16,7 @@ export default class UploadForm extends ImmutablePureComponent { return ( <div className='composer--upload_form'> - <UploadProgressContainer /> + <UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} /> {mediaIds.size > 0 && ( <div className='content'> diff --git a/app/javascript/flavours/glitch/features/compose/components/upload_progress.js b/app/javascript/flavours/glitch/features/compose/components/upload_progress.js index 264c563f2..493bb9ca5 100644 --- a/app/javascript/flavours/glitch/features/compose/components/upload_progress.js +++ b/app/javascript/flavours/glitch/features/compose/components/upload_progress.js @@ -2,7 +2,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import Motion from 'flavours/glitch/util/optional_motion'; import spring from 'react-motion/lib/spring'; -import { FormattedMessage } from 'react-intl'; import Icon from 'flavours/glitch/components/icon'; export default class UploadProgress extends React.PureComponent { @@ -10,10 +9,12 @@ export default class UploadProgress extends React.PureComponent { static propTypes = { active: PropTypes.bool, progress: PropTypes.number, + icon: PropTypes.string.isRequired, + message: PropTypes.node.isRequired, }; render () { - const { active, progress } = this.props; + const { active, progress, icon, message } = this.props; if (!active) { return null; @@ -21,10 +22,10 @@ export default class UploadProgress extends React.PureComponent { return ( <div className='composer--upload_form--progress'> - <Icon icon='upload' /> + <Icon id={icon} /> <div className='message'> - <FormattedMessage id='upload_progress.label' defaultMessage='Uploading...' /> + {message} <div className='backdrop'> <Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}> diff --git a/app/javascript/flavours/glitch/features/compose/containers/compose_form_container.js b/app/javascript/flavours/glitch/features/compose/containers/compose_form_container.js index 199d43913..18e2b2f39 100644 --- a/app/javascript/flavours/glitch/features/compose/containers/compose_form_container.js +++ b/app/javascript/flavours/glitch/features/compose/containers/compose_form_container.js @@ -25,6 +25,8 @@ const messages = defineMessages({ defaultMessage: 'At least one media attachment is lacking a description. Consider describing all media attachments for the visually impaired before sending your toot.' }, missingDescriptionConfirm: { id: 'confirmations.missing_media_description.confirm', defaultMessage: 'Send anyway' }, + missingDescriptionEdit: { id: 'confirmations.missing_media_description.edit', + defaultMessage: 'Edit media' }, }); // State mapping. @@ -112,11 +114,13 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(changeComposeVisibility(value)); }, - onMediaDescriptionConfirm(routerHistory) { + onMediaDescriptionConfirm(routerHistory, mediaId) { dispatch(openModal('CONFIRM', { message: intl.formatMessage(messages.missingDescriptionMessage), confirm: intl.formatMessage(messages.missingDescriptionConfirm), onConfirm: () => dispatch(submitCompose(routerHistory)), + secondary: intl.formatMessage(messages.missingDescriptionEdit), + onSecondary: () => dispatch(openModal('FOCAL_POINT', { id: mediaId })), onDoNotAsk: () => dispatch(changeLocalSetting(['confirm_missing_media_description'], false)), })); }, diff --git a/app/javascript/flavours/glitch/features/compose/containers/header_container.js b/app/javascript/flavours/glitch/features/compose/containers/header_container.js index ce1dea319..b4dcb4d56 100644 --- a/app/javascript/flavours/glitch/features/compose/containers/header_container.js +++ b/app/javascript/flavours/glitch/features/compose/containers/header_container.js @@ -1,6 +1,13 @@ import { openModal } from 'flavours/glitch/actions/modal'; import { connect } from 'react-redux'; +import { defineMessages, injectIntl } from 'react-intl'; import Header from '../components/header'; +import { logOut } from 'flavours/glitch/util/log_out'; + +const messages = defineMessages({ + logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' }, + logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' }, +}); const mapStateToProps = state => { return { @@ -16,6 +23,13 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ e.stopPropagation(); dispatch(openModal('SETTINGS', {})); }, + onLogout () { + dispatch(openModal('CONFIRM', { + message: intl.formatMessage(messages.logoutMessage), + confirm: intl.formatMessage(messages.logoutConfirm), + onConfirm: () => logOut(), + })); + }, }); -export default connect(mapStateToProps, mapDispatchToProps)(Header); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Header)); diff --git a/app/javascript/flavours/glitch/features/compose/containers/options_container.js b/app/javascript/flavours/glitch/features/compose/containers/options_container.js index c8c7ecd43..c792aa582 100644 --- a/app/javascript/flavours/glitch/features/compose/containers/options_container.js +++ b/app/javascript/flavours/glitch/features/compose/containers/options_container.js @@ -12,11 +12,12 @@ function mapStateToProps (state) { const spoilersAlwaysOn = state.getIn(['local_settings', 'always_show_spoilers_field']); const poll = state.getIn(['compose', 'poll']); const media = state.getIn(['compose', 'media_attachments']); + const pending_media = state.getIn(['compose', 'pending_media_attachments']); return { acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']).toArray().join(','), resetFileKey: state.getIn(['compose', 'resetFileKey']), hasPoll: !!poll, - allowMedia: !poll && (media ? media.size < 4 && !media.some(item => item.get('type') === 'video') : true), + allowMedia: !poll && (media ? media.size + pending_media < 4 && !media.some(item => ['video', 'audio'].includes(item.get('type'))) : pending_media < 4), hasMedia: media && !!media.size, allowPoll: !(media && !!media.size), showContentTypeChoice: state.getIn(['local_settings', 'show_content_type_choice']), diff --git a/app/javascript/flavours/glitch/features/compose/containers/search_results_container.js b/app/javascript/flavours/glitch/features/compose/containers/search_results_container.js index f9637861a..5c2c1be23 100644 --- a/app/javascript/flavours/glitch/features/compose/containers/search_results_container.js +++ b/app/javascript/flavours/glitch/features/compose/containers/search_results_container.js @@ -1,14 +1,17 @@ import { connect } from 'react-redux'; import SearchResults from '../components/search_results'; -import { fetchSuggestions, dismissSuggestion } from '../../../actions/suggestions'; +import { fetchSuggestions, dismissSuggestion } from 'flavours/glitch/actions/suggestions'; +import { expandSearch } from 'flavours/glitch/actions/search'; const mapStateToProps = state => ({ results: state.getIn(['search', 'results']), suggestions: state.getIn(['suggestions', 'items']), + searchTerm: state.getIn(['search', 'searchTerm']), }); const mapDispatchToProps = dispatch => ({ fetchSuggestions: () => dispatch(fetchSuggestions()), + expandSearch: type => dispatch(expandSearch(type)), dismissSuggestion: account => dispatch(dismissSuggestion(account.get('id'))), }); diff --git a/app/javascript/flavours/glitch/features/compose/containers/upload_container.js b/app/javascript/flavours/glitch/features/compose/containers/upload_container.js index d6bff63ac..f687fae99 100644 --- a/app/javascript/flavours/glitch/features/compose/containers/upload_container.js +++ b/app/javascript/flavours/glitch/features/compose/containers/upload_container.js @@ -1,6 +1,6 @@ import { connect } from 'react-redux'; import Upload from '../components/upload'; -import { undoUploadCompose, changeUploadCompose } from 'flavours/glitch/actions/compose'; +import { undoUploadCompose } from 'flavours/glitch/actions/compose'; import { openModal } from 'flavours/glitch/actions/modal'; import { submitCompose } from 'flavours/glitch/actions/compose'; @@ -14,10 +14,6 @@ const mapDispatchToProps = dispatch => ({ dispatch(undoUploadCompose(id)); }, - onDescriptionChange: (id, description) => { - dispatch(changeUploadCompose(id, { description })); - }, - onOpenFocalPoint: id => { dispatch(openModal('FOCAL_POINT', { id })); }, diff --git a/app/javascript/flavours/glitch/features/compose/containers/warning_container.js b/app/javascript/flavours/glitch/features/compose/containers/warning_container.js index fdd21f114..b9b0a2644 100644 --- a/app/javascript/flavours/glitch/features/compose/containers/warning_container.js +++ b/app/javascript/flavours/glitch/features/compose/containers/warning_container.js @@ -4,6 +4,7 @@ import Warning from '../components/warning'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; import { me } from 'flavours/glitch/util/initial_state'; +import { profileLink, termsLink } from 'flavours/glitch/util/backend_links'; const APPROX_HASHTAG_RE = /(?:^|[^\/\)\w])#(\w*[a-zA-Z·]\w*)/i; @@ -15,7 +16,7 @@ const mapStateToProps = state => ({ const WarningWrapper = ({ needsLockWarning, hashtagWarning, directMessageWarning }) => { if (needsLockWarning) { - return <Warning message={<FormattedMessage id='compose_form.lock_disclaimer' defaultMessage='Your account is not {locked}. Anyone can follow you to view your follower-only posts.' values={{ locked: <a href='/settings/profile'><FormattedMessage id='compose_form.lock_disclaimer.lock' defaultMessage='locked' /></a> }} />} />; + return <Warning message={<FormattedMessage id='compose_form.lock_disclaimer' defaultMessage='Your account is not {locked}. Anyone can follow you to view your follower-only posts.' values={{ locked: <a href={profileLink}><FormattedMessage id='compose_form.lock_disclaimer.lock' defaultMessage='locked' /></a> }} />} />; } if (hashtagWarning) { @@ -25,7 +26,7 @@ const WarningWrapper = ({ needsLockWarning, hashtagWarning, directMessageWarning if (directMessageWarning) { const message = ( <span> - <FormattedMessage id='compose_form.direct_message_warning' defaultMessage='This toot will only be sent to all the mentioned users.' /> <a href='/terms' target='_blank'><FormattedMessage id='compose_form.direct_message_warning_learn_more' defaultMessage='Learn more' /></a> + <FormattedMessage id='compose_form.direct_message_warning' defaultMessage='This toot will only be sent to all the mentioned users.' /> {!!termsLink && <a href='/terms' target='_blank'><FormattedMessage id='compose_form.direct_message_warning_learn_more' defaultMessage='Learn more' /></a>} </span> ); diff --git a/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.js b/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.js index 5adb44f2c..ce14e2a9d 100644 --- a/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.js +++ b/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.js @@ -9,8 +9,8 @@ const messages = defineMessages({ settings: { id: 'home.settings', defaultMessage: 'Column settings' }, }); -@injectIntl -export default class ColumnSettings extends React.PureComponent { +export default @injectIntl +class ColumnSettings extends React.PureComponent { static propTypes = { settings: ImmutablePropTypes.map.isRequired, diff --git a/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js b/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js index 9ddeabe75..ba01f8d5c 100644 --- a/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js +++ b/app/javascript/flavours/glitch/features/direct_timeline/components/conversation.js @@ -2,9 +2,30 @@ import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import StatusContainer from 'flavours/glitch/containers/status_container'; +import StatusContent from 'flavours/glitch/components/status_content'; +import AttachmentList from 'flavours/glitch/components/attachment_list'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container'; +import AvatarComposite from 'flavours/glitch/components/avatar_composite'; +import Permalink from 'flavours/glitch/components/permalink'; +import IconButton from 'flavours/glitch/components/icon_button'; +import RelativeTimestamp from 'flavours/glitch/components/relative_timestamp'; +import { HotKeys } from 'react-hotkeys'; +import { autoPlayGif } from 'flavours/glitch/util/initial_state'; +import classNames from 'classnames'; -export default class Conversation extends ImmutablePureComponent { +const messages = defineMessages({ + more: { id: 'status.more', defaultMessage: 'More' }, + open: { id: 'conversation.open', defaultMessage: 'View conversation' }, + reply: { id: 'status.reply', defaultMessage: 'Reply' }, + markAsRead: { id: 'conversation.mark_as_read', defaultMessage: 'Mark as read' }, + delete: { id: 'conversation.delete', defaultMessage: 'Delete conversation' }, + muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' }, + unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' }, +}); + +export default @injectIntl +class Conversation extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -13,25 +34,99 @@ export default class Conversation extends ImmutablePureComponent { static propTypes = { conversationId: PropTypes.string.isRequired, accounts: ImmutablePropTypes.list.isRequired, - lastStatusId: PropTypes.string, + lastStatus: ImmutablePropTypes.map, unread:PropTypes.bool.isRequired, onMoveUp: PropTypes.func, onMoveDown: PropTypes.func, markRead: PropTypes.func.isRequired, + delete: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; + + state = { + isExpanded: undefined, }; + parseClick = (e, destination) => { + const { router } = this.context; + const { lastStatus, unread, markRead } = this.props; + if (!router) return; + + if (e.button === 0 && !(e.ctrlKey || e.altKey || e.metaKey)) { + if (destination === undefined) { + if (unread) { + markRead(); + } + destination = `/statuses/${lastStatus.get('id')}`; + } + let state = {...router.history.location.state}; + state.mastodonBackSteps = (state.mastodonBackSteps || 0) + 1; + router.history.push(destination, state); + e.preventDefault(); + } + } + + _updateEmojis () { + const node = this.namesNode; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); + } + } + + componentDidMount () { + this._updateEmojis(); + } + + componentDidUpdate () { + this._updateEmojis(); + } + + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } + + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } + handleClick = () => { if (!this.context.router) { return; } - const { lastStatusId, unread, markRead } = this.props; + const { lastStatus, unread, markRead } = this.props; if (unread) { markRead(); } - this.context.router.history.push(`/statuses/${lastStatusId}`); + this.context.router.history.push(`/statuses/${lastStatus.get('id')}`); + } + + handleMarkAsRead = () => { + this.props.markRead(); + } + + handleReply = () => { + this.props.reply(this.props.lastStatus, this.context.router.history); + } + + handleDelete = () => { + this.props.delete(); } handleHotkeyMoveUp = () => { @@ -42,22 +137,98 @@ export default class Conversation extends ImmutablePureComponent { this.props.onMoveDown(this.props.conversationId); } + handleConversationMute = () => { + this.props.onMute(this.props.lastStatus); + } + + handleShowMore = () => { + if (this.props.lastStatus.get('spoiler_text')) { + this.setExpansion(!this.state.isExpanded); + } + }; + + setExpansion = value => { + this.setState({ isExpanded: value }); + } + + setNamesRef = (c) => { + this.namesNode = c; + } + render () { - const { accounts, lastStatusId, unread } = this.props; + const { accounts, lastStatus, unread, intl } = this.props; + const { isExpanded } = this.state; - if (lastStatusId === null) { + if (lastStatus === null) { return null; } + const menu = [ + { text: intl.formatMessage(messages.open), action: this.handleClick }, + null, + ]; + + menu.push({ text: intl.formatMessage(lastStatus.get('muted') ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMute }); + + if (unread) { + menu.push({ text: intl.formatMessage(messages.markAsRead), action: this.handleMarkAsRead }); + menu.push(null); + } + + menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDelete }); + + const names = accounts.map(a => <Permalink to={`/accounts/${a.get('id')}`} href={a.get('url')} key={a.get('id')} title={a.get('acct')}><bdi><strong className='display-name__html' dangerouslySetInnerHTML={{ __html: a.get('display_name_html') }} /></bdi></Permalink>).reduce((prev, cur) => [prev, ', ', cur]); + + const handlers = { + reply: this.handleReply, + open: this.handleClick, + moveUp: this.handleHotkeyMoveUp, + moveDown: this.handleHotkeyMoveDown, + toggleHidden: this.handleShowMore, + }; + + let media = null; + if (lastStatus.get('media_attachments').size > 0) { + media = <AttachmentList compact media={lastStatus.get('media_attachments')} />; + } + return ( - <StatusContainer - id={lastStatusId} - unread={unread} - otherAccounts={accounts} - onMoveUp={this.handleHotkeyMoveUp} - onMoveDown={this.handleHotkeyMoveDown} - onClick={this.handleClick} - /> + <HotKeys handlers={handlers}> + <div className={classNames('conversation focusable muted', { 'conversation--unread': unread })} tabIndex='0'> + <div className='conversation__avatar'> + <AvatarComposite accounts={accounts} size={48} /> + </div> + + <div className='conversation__content'> + <div className='conversation__content__info'> + <div className='conversation__content__relative-time'> + {unread && <span className='conversation__unread' />} <RelativeTimestamp timestamp={lastStatus.get('created_at')} /> + </div> + + <div className='conversation__content__names' ref={this.setNamesRef}> + <FormattedMessage id='conversation.with' defaultMessage='With {names}' values={{ names: <span>{names}</span> }} /> + </div> + </div> + + <StatusContent + status={lastStatus} + parseClick={this.parseClick} + expanded={isExpanded} + onExpandedToggle={this.handleShowMore} + collapsable + media={media} + /> + + <div className='status__action-bar'> + <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.reply)} icon='reply' onClick={this.handleReply} /> + + <div className='status__action-bar-dropdown'> + <DropdownMenuContainer status={lastStatus} items={menu} icon='ellipsis-h' size={18} direction='right' title={intl.formatMessage(messages.more)} /> + </div> + </div> + </div> + </div> + </HotKeys> ); } diff --git a/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js b/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js index bd6f6bfb0..b15ce9f0f 100644 --- a/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js +++ b/app/javascript/flavours/glitch/features/direct_timeline/containers/conversation_container.js @@ -1,19 +1,74 @@ import { connect } from 'react-redux'; import Conversation from '../components/conversation'; -import { markConversationRead } from '../../../actions/conversations'; +import { markConversationRead, deleteConversation } from 'flavours/glitch/actions/conversations'; +import { makeGetStatus } from 'flavours/glitch/selectors'; +import { replyCompose } from 'flavours/glitch/actions/compose'; +import { openModal } from 'flavours/glitch/actions/modal'; +import { muteStatus, unmuteStatus, hideStatus, revealStatus } from 'flavours/glitch/actions/statuses'; +import { defineMessages, injectIntl } from 'react-intl'; -const mapStateToProps = (state, { conversationId }) => { - const conversation = state.getIn(['conversations', 'items']).find(x => x.get('id') === conversationId); +const messages = defineMessages({ + replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, + replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, +}); + +const mapStateToProps = () => { + const getStatus = makeGetStatus(); + + return (state, { conversationId }) => { + const conversation = state.getIn(['conversations', 'items']).find(x => x.get('id') === conversationId); + const lastStatusId = conversation.get('last_status', null); - return { - accounts: conversation.get('accounts').map(accountId => state.getIn(['accounts', accountId], null)), - unread: conversation.get('unread'), - lastStatusId: conversation.get('last_status', null), + return { + accounts: conversation.get('accounts').map(accountId => state.getIn(['accounts', accountId], null)), + unread: conversation.get('unread'), + lastStatus: lastStatusId && getStatus(state, { id: lastStatusId }), + }; }; }; -const mapDispatchToProps = (dispatch, { conversationId }) => ({ - markRead: () => dispatch(markConversationRead(conversationId)), +const mapDispatchToProps = (dispatch, { intl, conversationId }) => ({ + + markRead () { + dispatch(markConversationRead(conversationId)); + }, + + reply (status, router) { + dispatch((_, getState) => { + let state = getState(); + + if (state.getIn(['compose', 'text']).trim().length !== 0) { + dispatch(openModal('CONFIRM', { + message: intl.formatMessage(messages.replyMessage), + confirm: intl.formatMessage(messages.replyConfirm), + onConfirm: () => dispatch(replyCompose(status, router)), + })); + } else { + dispatch(replyCompose(status, router)); + } + }); + }, + + delete () { + dispatch(deleteConversation(conversationId)); + }, + + onMute (status) { + if (status.get('muted')) { + dispatch(unmuteStatus(status.get('id'))); + } else { + dispatch(muteStatus(status.get('id'))); + } + }, + + onToggleHidden (status) { + if (status.get('hidden')) { + dispatch(revealStatus(status.get('id'))); + } else { + dispatch(hideStatus(status.get('id'))); + } + }, + }); -export default connect(mapStateToProps, mapDispatchToProps)(Conversation); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Conversation)); diff --git a/app/javascript/flavours/glitch/features/direct_timeline/index.js b/app/javascript/flavours/glitch/features/direct_timeline/index.js index 6fe8a1ce8..7741c6922 100644 --- a/app/javascript/flavours/glitch/features/direct_timeline/index.js +++ b/app/javascript/flavours/glitch/features/direct_timeline/index.js @@ -22,9 +22,9 @@ const mapStateToProps = state => ({ conversationsMode: state.getIn(['settings', 'direct', 'conversations']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class DirectTimeline extends React.PureComponent { +class DirectTimeline extends React.PureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, @@ -135,7 +135,7 @@ export default class DirectTimeline extends React.PureComponent { } return ( - <Column ref={this.setRef} label={intl.formatMessage(messages.title)}> + <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}> <ColumnHeader icon='envelope' active={hasUnread} diff --git a/app/javascript/flavours/glitch/features/directory/components/account_card.js b/app/javascript/flavours/glitch/features/directory/components/account_card.js new file mode 100644 index 000000000..d1c406933 --- /dev/null +++ b/app/javascript/flavours/glitch/features/directory/components/account_card.js @@ -0,0 +1,190 @@ +import React from 'react'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { makeGetAccount } from 'flavours/glitch/selectors'; +import Avatar from 'flavours/glitch/components/avatar'; +import DisplayName from 'flavours/glitch/components/display_name'; +import Permalink from 'flavours/glitch/components/permalink'; +import RelativeTimestamp from 'flavours/glitch/components/relative_timestamp'; +import IconButton from 'flavours/glitch/components/icon_button'; +import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; +import { autoPlayGif, me, unfollowModal } from 'flavours/glitch/util/initial_state'; +import { shortNumberFormat } from 'flavours/glitch/util/numbers'; +import { followAccount, unfollowAccount, blockAccount, unblockAccount, unmuteAccount } from 'flavours/glitch/actions/accounts'; +import { openModal } from 'flavours/glitch/actions/modal'; +import { initMuteModal } from 'flavours/glitch/actions/mutes'; + +const messages = defineMessages({ + follow: { id: 'account.follow', defaultMessage: 'Follow' }, + unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, + requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' }, + unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, + unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' }, +}); + +const makeMapStateToProps = () => { + const getAccount = makeGetAccount(); + + const mapStateToProps = (state, { id }) => ({ + account: getAccount(state, id), + }); + + return mapStateToProps; +}; + +const mapDispatchToProps = (dispatch, { intl }) => ({ + + onFollow (account) { + if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) { + if (unfollowModal) { + dispatch(openModal('CONFIRM', { + message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, + confirm: intl.formatMessage(messages.unfollowConfirm), + onConfirm: () => dispatch(unfollowAccount(account.get('id'))), + })); + } else { + dispatch(unfollowAccount(account.get('id'))); + } + } else { + dispatch(followAccount(account.get('id'))); + } + }, + + onBlock (account) { + if (account.getIn(['relationship', 'blocking'])) { + dispatch(unblockAccount(account.get('id'))); + } else { + dispatch(blockAccount(account.get('id'))); + } + }, + + onMute (account) { + if (account.getIn(['relationship', 'muting'])) { + dispatch(unmuteAccount(account.get('id'))); + } else { + dispatch(initMuteModal(account)); + } + }, + +}); + +export default @injectIntl +@connect(makeMapStateToProps, mapDispatchToProps) +class AccountCard extends ImmutablePureComponent { + + static propTypes = { + account: ImmutablePropTypes.map.isRequired, + intl: PropTypes.object.isRequired, + onFollow: PropTypes.func.isRequired, + onBlock: PropTypes.func.isRequired, + onMute: PropTypes.func.isRequired, + }; + + _updateEmojis () { + const node = this.node; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); + } + } + + componentDidMount () { + this._updateEmojis(); + } + + componentDidUpdate () { + this._updateEmojis(); + } + + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } + + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } + + handleFollow = () => { + this.props.onFollow(this.props.account); + } + + handleBlock = () => { + this.props.onBlock(this.props.account); + } + + handleMute = () => { + this.props.onMute(this.props.account); + } + + setRef = (c) => { + this.node = c; + } + + render () { + const { account, intl } = this.props; + + let buttons; + + if (account.get('id') !== me && account.get('relationship', null) !== null) { + const following = account.getIn(['relationship', 'following']); + const requested = account.getIn(['relationship', 'requested']); + const blocking = account.getIn(['relationship', 'blocking']); + const muting = account.getIn(['relationship', 'muting']); + + if (requested) { + buttons = <IconButton disabled icon='hourglass' title={intl.formatMessage(messages.requested)} />; + } else if (blocking) { + buttons = <IconButton active icon='unlock' title={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.handleBlock} />; + } else if (muting) { + buttons = <IconButton active icon='volume-up' title={intl.formatMessage(messages.unmute, { name: account.get('username') })} onClick={this.handleMute} />; + } else if (!account.get('moved') || following) { + buttons = <IconButton icon={following ? 'user-times' : 'user-plus'} title={intl.formatMessage(following ? messages.unfollow : messages.follow)} onClick={this.handleFollow} active={following} />; + } + } + + return ( + <div className='directory__card'> + <div className='directory__card__img'> + <img src={autoPlayGif ? account.get('header') : account.get('header_static')} alt='' /> + </div> + + <div className='directory__card__bar'> + <Permalink className='directory__card__bar__name' href={account.get('url')} to={`/accounts/${account.get('id')}`}> + <Avatar account={account} size={48} /> + <DisplayName account={account} /> + </Permalink> + + <div className='directory__card__bar__relationship account__relationship'> + {buttons} + </div> + </div> + + <div className='directory__card__extra' ref={this.setRef}> + <div className='account__header__content' dangerouslySetInnerHTML={{ __html: account.get('note_emojified') }} /> + </div> + + <div className='directory__card__extra'> + <div className='accounts-table__count'>{shortNumberFormat(account.get('statuses_count'))} <small><FormattedMessage id='account.posts' defaultMessage='Toots' /></small></div> + <div className='accounts-table__count'>{account.get('followers_count') < 0 ? '-' : shortNumberFormat(account.get('followers_count'))} <small><FormattedMessage id='account.followers' defaultMessage='Followers' /></small></div> + <div className='accounts-table__count'>{account.get('last_status_at') === null ? <FormattedMessage id='account.never_active' defaultMessage='Never' /> : <RelativeTimestamp timestamp={account.get('last_status_at')} />} <small><FormattedMessage id='account.last_status' defaultMessage='Last active' /></small></div> + </div> + </div> + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/directory/index.js b/app/javascript/flavours/glitch/features/directory/index.js new file mode 100644 index 000000000..858a8fa55 --- /dev/null +++ b/app/javascript/flavours/glitch/features/directory/index.js @@ -0,0 +1,171 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { defineMessages, injectIntl } from 'react-intl'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import Column from 'flavours/glitch/components/column'; +import ColumnHeader from 'flavours/glitch/components/column_header'; +import { addColumn, removeColumn, moveColumn, changeColumnParams } from 'flavours/glitch/actions/columns'; +import { fetchDirectory, expandDirectory } from 'flavours/glitch/actions/directory'; +import { List as ImmutableList } from 'immutable'; +import AccountCard from './components/account_card'; +import RadioButton from 'flavours/glitch/components/radio_button'; +import classNames from 'classnames'; +import LoadMore from 'flavours/glitch/components/load_more'; +import { ScrollContainer } from 'react-router-scroll-4'; + +const messages = defineMessages({ + title: { id: 'column.directory', defaultMessage: 'Browse profiles' }, + recentlyActive: { id: 'directory.recently_active', defaultMessage: 'Recently active' }, + newArrivals: { id: 'directory.new_arrivals', defaultMessage: 'New arrivals' }, + local: { id: 'directory.local', defaultMessage: 'From {domain} only' }, + federated: { id: 'directory.federated', defaultMessage: 'From known fediverse' }, +}); + +const mapStateToProps = state => ({ + accountIds: state.getIn(['user_lists', 'directory', 'items'], ImmutableList()), + isLoading: state.getIn(['user_lists', 'directory', 'isLoading'], true), + domain: state.getIn(['meta', 'domain']), +}); + +export default @connect(mapStateToProps) +@injectIntl +class Directory extends React.PureComponent { + + static contextTypes = { + router: PropTypes.object, + }; + + static propTypes = { + isLoading: PropTypes.bool, + accountIds: ImmutablePropTypes.list.isRequired, + dispatch: PropTypes.func.isRequired, + shouldUpdateScroll: PropTypes.func, + columnId: PropTypes.string, + intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, + domain: PropTypes.string.isRequired, + params: PropTypes.shape({ + order: PropTypes.string, + local: PropTypes.bool, + }), + }; + + state = { + order: null, + local: null, + }; + + handlePin = () => { + const { columnId, dispatch } = this.props; + + if (columnId) { + dispatch(removeColumn(columnId)); + } else { + dispatch(addColumn('DIRECTORY', this.getParams(this.props, this.state))); + } + } + + getParams = (props, state) => ({ + order: state.order === null ? (props.params.order || 'active') : state.order, + local: state.local === null ? (props.params.local || false) : state.local, + }); + + handleMove = dir => { + const { columnId, dispatch } = this.props; + dispatch(moveColumn(columnId, dir)); + } + + handleHeaderClick = () => { + this.column.scrollTop(); + } + + componentDidMount () { + const { dispatch } = this.props; + dispatch(fetchDirectory(this.getParams(this.props, this.state))); + } + + componentDidUpdate (prevProps, prevState) { + const { dispatch } = this.props; + const paramsOld = this.getParams(prevProps, prevState); + const paramsNew = this.getParams(this.props, this.state); + + if (paramsOld.order !== paramsNew.order || paramsOld.local !== paramsNew.local) { + dispatch(fetchDirectory(paramsNew)); + } + } + + setRef = c => { + this.column = c; + } + + handleChangeOrder = e => { + const { dispatch, columnId } = this.props; + + if (columnId) { + dispatch(changeColumnParams(columnId, ['order'], e.target.value)); + } else { + this.setState({ order: e.target.value }); + } + } + + handleChangeLocal = e => { + const { dispatch, columnId } = this.props; + + if (columnId) { + dispatch(changeColumnParams(columnId, ['local'], e.target.value === '1')); + } else { + this.setState({ local: e.target.value === '1' }); + } + } + + handleLoadMore = () => { + const { dispatch } = this.props; + dispatch(expandDirectory(this.getParams(this.props, this.state))); + } + + render () { + const { isLoading, accountIds, intl, columnId, multiColumn, domain, shouldUpdateScroll } = this.props; + const { order, local } = this.getParams(this.props, this.state); + const pinned = !!columnId; + + const scrollableArea = ( + <div className='scrollable' style={{ background: 'transparent' }}> + <div className='filter-form'> + <div className='filter-form__column' role='group'> + <RadioButton name='order' value='active' label={intl.formatMessage(messages.recentlyActive)} checked={order === 'active'} onChange={this.handleChangeOrder} /> + <RadioButton name='order' value='new' label={intl.formatMessage(messages.newArrivals)} checked={order === 'new'} onChange={this.handleChangeOrder} /> + </div> + + <div className='filter-form__column' role='group'> + <RadioButton name='local' value='1' label={intl.formatMessage(messages.local, { domain })} checked={local} onChange={this.handleChangeLocal} /> + <RadioButton name='local' value='0' label={intl.formatMessage(messages.federated)} checked={!local} onChange={this.handleChangeLocal} /> + </div> + </div> + + <div className={classNames('directory__list', { loading: isLoading })}> + {accountIds.map(accountId => <AccountCard id={accountId} key={accountId} />)} + </div> + + <LoadMore onClick={this.handleLoadMore} visible={!isLoading} /> + </div> + ); + + return ( + <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}> + <ColumnHeader + icon='address-book-o' + title={intl.formatMessage(messages.title)} + onPin={this.handlePin} + onMove={this.handleMove} + onClick={this.handleHeaderClick} + pinned={pinned} + multiColumn={multiColumn} + /> + + {multiColumn && !pinned ? <ScrollContainer scrollKey='directory' shouldUpdateScroll={shouldUpdateScroll}>{scrollableArea}</ScrollContainer> : scrollableArea} + </Column> + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/domain_blocks/index.js b/app/javascript/flavours/glitch/features/domain_blocks/index.js index 3b29e2a26..cd105a49b 100644 --- a/app/javascript/flavours/glitch/features/domain_blocks/index.js +++ b/app/javascript/flavours/glitch/features/domain_blocks/index.js @@ -1,16 +1,16 @@ import React from 'react'; import { connect } from 'react-redux'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { debounce } from 'lodash'; import PropTypes from 'prop-types'; import LoadingIndicator from '../../components/loading_indicator'; import Column from '../ui/components/column'; import ColumnBackButtonSlim from '../../components/column_back_button_slim'; import DomainContainer from '../../containers/domain_container'; import { fetchDomainBlocks, expandDomainBlocks } from '../../actions/domain_blocks'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { debounce } from 'lodash'; -import ScrollableList from '../../components/scrollable_list'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; const messages = defineMessages({ heading: { id: 'column.domain_blocks', defaultMessage: 'Hidden domains' }, @@ -19,17 +19,20 @@ const messages = defineMessages({ const mapStateToProps = state => ({ domains: state.getIn(['domain_lists', 'blocks', 'items']), + hasMore: !!state.getIn(['domain_lists', 'blocks', 'next']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class Blocks extends ImmutablePureComponent { +class Blocks extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, + hasMore: PropTypes.bool, domains: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -41,7 +44,7 @@ export default class Blocks extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { intl, domains } = this.props; + const { intl, domains, hasMore, multiColumn } = this.props; if (!domains) { return ( @@ -51,10 +54,18 @@ export default class Blocks extends ImmutablePureComponent { ); } + const emptyMessage = <FormattedMessage id='empty_column.domain_blocks' defaultMessage='There are no hidden domains yet.' />; + return ( - <Column icon='minus-circle' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} icon='minus-circle' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> - <ScrollableList scrollKey='domain_blocks' onLoadMore={this.handleLoadMore}> + <ScrollableList + scrollKey='domain_blocks' + onLoadMore={this.handleLoadMore} + hasMore={hasMore} + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + > {domains.map(domain => <DomainContainer key={domain} domain={domain} /> )} diff --git a/app/javascript/flavours/glitch/features/emoji_picker/index.js b/app/javascript/flavours/glitch/features/emoji_picker/index.js index a78117971..6e5518b0c 100644 --- a/app/javascript/flavours/glitch/features/emoji_picker/index.js +++ b/app/javascript/flavours/glitch/features/emoji_picker/index.js @@ -11,7 +11,8 @@ import Overlay from 'react-overlays/lib/Overlay'; import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import detectPassiveEvents from 'detect-passive-events'; -import { buildCustomEmojis } from 'flavours/glitch/util/emoji'; +import { buildCustomEmojis, categoriesFromEmojis } from 'flavours/glitch/util/emoji'; +import { useSystemEmojiFont } from 'flavours/glitch/util/initial_state'; const messages = defineMessages({ emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' }, @@ -110,19 +111,6 @@ let EmojiPicker, Emoji; // load asynchronously const backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`; const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; -const categoriesSort = [ - 'recent', - 'custom', - 'people', - 'nature', - 'foods', - 'activity', - 'places', - 'objects', - 'symbols', - 'flags', -]; - class ModifierPickerMenu extends React.PureComponent { static propTypes = { @@ -172,12 +160,12 @@ class ModifierPickerMenu extends React.PureComponent { return ( <div className='emoji-picker-dropdown__modifiers__menu' style={{ display: active ? 'block' : 'none' }} ref={this.setRef}> - <button onClick={this.handleClick} data-index={1}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={1} backgroundImageFn={backgroundImageFn} /></button> - <button onClick={this.handleClick} data-index={2}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={2} backgroundImageFn={backgroundImageFn} /></button> - <button onClick={this.handleClick} data-index={3}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={3} backgroundImageFn={backgroundImageFn} /></button> - <button onClick={this.handleClick} data-index={4}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={4} backgroundImageFn={backgroundImageFn} /></button> - <button onClick={this.handleClick} data-index={5}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={5} backgroundImageFn={backgroundImageFn} /></button> - <button onClick={this.handleClick} data-index={6}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={6} backgroundImageFn={backgroundImageFn} /></button> + <button onClick={this.handleClick} data-index={1}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={1} backgroundImageFn={backgroundImageFn} native={useSystemEmojiFont} /></button> + <button onClick={this.handleClick} data-index={2}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={2} backgroundImageFn={backgroundImageFn} native={useSystemEmojiFont} /></button> + <button onClick={this.handleClick} data-index={3}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={3} backgroundImageFn={backgroundImageFn} native={useSystemEmojiFont} /></button> + <button onClick={this.handleClick} data-index={4}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={4} backgroundImageFn={backgroundImageFn} native={useSystemEmojiFont} /></button> + <button onClick={this.handleClick} data-index={5}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={5} backgroundImageFn={backgroundImageFn} native={useSystemEmojiFont} /></button> + <button onClick={this.handleClick} data-index={6}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={6} backgroundImageFn={backgroundImageFn} native={useSystemEmojiFont} /></button> </div> ); } @@ -212,7 +200,7 @@ class ModifierPicker extends React.PureComponent { return ( <div className='emoji-picker-dropdown__modifiers'> - <Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={modifier} onClick={this.handleClick} backgroundImageFn={backgroundImageFn} /> + <Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={modifier} onClick={this.handleClick} backgroundImageFn={backgroundImageFn} native={useSystemEmojiFont} /> <ModifierPickerMenu active={active} onSelect={this.handleSelect} onClose={this.props.onClose} /> </div> ); @@ -320,8 +308,23 @@ class EmojiPickerMenu extends React.PureComponent { } const title = intl.formatMessage(messages.emoji); + const { modifierOpen } = this.state; + const categoriesSort = [ + 'recent', + 'people', + 'nature', + 'foods', + 'activity', + 'places', + 'objects', + 'symbols', + 'flags', + ]; + + categoriesSort.splice(1, 0, ...Array.from(categoriesFromEmojis(custom_emojis)).sort()); + return ( <div className={classNames('emoji-picker-dropdown__menu', { selecting: modifierOpen })} style={style} ref={this.setRef}> <EmojiPicker @@ -342,6 +345,7 @@ class EmojiPickerMenu extends React.PureComponent { backgroundImageFn={backgroundImageFn} autoFocus emojiTooltip + native={useSystemEmojiFont} /> <ModifierPicker @@ -357,9 +361,9 @@ class EmojiPickerMenu extends React.PureComponent { } -@connect(mapStateToProps, mapDispatchToProps) +export default @connect(mapStateToProps, mapDispatchToProps) @injectIntl -export default class EmojiPickerDropdown extends React.PureComponent { +class EmojiPickerDropdown extends React.PureComponent { static propTypes = { custom_emojis: ImmutablePropTypes.list, diff --git a/app/javascript/flavours/glitch/features/favourited_statuses/index.js b/app/javascript/flavours/glitch/features/favourited_statuses/index.js index 32bf4e71a..c6470ba74 100644 --- a/app/javascript/flavours/glitch/features/favourited_statuses/index.js +++ b/app/javascript/flavours/glitch/features/favourited_statuses/index.js @@ -2,14 +2,14 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { debounce } from 'lodash'; import { fetchFavouritedStatuses, expandFavouritedStatuses } from 'flavours/glitch/actions/favourites'; import Column from 'flavours/glitch/features/ui/components/column'; import ColumnHeader from 'flavours/glitch/components/column_header'; import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns'; import StatusList from 'flavours/glitch/components/status_list'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { debounce } from 'lodash'; const messages = defineMessages({ heading: { id: 'column.favourites', defaultMessage: 'Favourites' }, @@ -21,9 +21,9 @@ const mapStateToProps = state => ({ hasMore: !!state.getIn(['status_lists', 'favourites', 'next']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class Favourites extends ImmutablePureComponent { +class Favourites extends ImmutablePureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, @@ -70,8 +70,10 @@ export default class Favourites extends ImmutablePureComponent { const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props; const pinned = !!columnId; + const emptyMessage = <FormattedMessage id='empty_column.favourited_statuses' defaultMessage="You don't have any favourite toots yet. When you favourite one, it will show up here." />; + return ( - <Column ref={this.setRef} name='favourites' label={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} ref={this.setRef} name='favourites' label={intl.formatMessage(messages.heading)}> <ColumnHeader icon='star' title={intl.formatMessage(messages.heading)} @@ -90,6 +92,8 @@ export default class Favourites extends ImmutablePureComponent { hasMore={hasMore} isLoading={isLoading} onLoadMore={this.handleLoadMore} + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/favourites/index.js b/app/javascript/flavours/glitch/features/favourites/index.js index eb86636c3..953bf171f 100644 --- a/app/javascript/flavours/glitch/features/favourites/index.js +++ b/app/javascript/flavours/glitch/features/favourites/index.js @@ -4,34 +4,39 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import LoadingIndicator from 'flavours/glitch/components/loading_indicator'; import { fetchFavourites } from 'flavours/glitch/actions/interactions'; -import { ScrollContainer } from 'react-router-scroll-4'; import AccountContainer from 'flavours/glitch/containers/account_container'; import Column from 'flavours/glitch/features/ui/components/column'; +import Icon from 'flavours/glitch/components/icon'; import ColumnHeader from 'flavours/glitch/components/column_header'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import ScrollableList from '../../components/scrollable_list'; const messages = defineMessages({ heading: { id: 'column.favourited_by', defaultMessage: 'Favourited by' }, + refresh: { id: 'refresh', defaultMessage: 'Refresh' }, }); const mapStateToProps = (state, props) => ({ accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class Favourites extends ImmutablePureComponent { +class Favourites extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, accountIds: ImmutablePropTypes.list, + multiColumn: PropTypes.bool, intl: PropTypes.object.isRequired, }; componentWillMount () { - this.props.dispatch(fetchFavourites(this.props.params.statusId)); + if (!this.props.accountIds) { + this.props.dispatch(fetchFavourites(this.props.params.statusId)); + } } componentWillReceiveProps (nextProps) { @@ -40,11 +45,6 @@ export default class Favourites extends ImmutablePureComponent { } } - shouldUpdateScroll = (prevRouterProps, { location }) => { - if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false; - return !(location.state && location.state.mastodonModalOpen); - } - handleHeaderClick = () => { this.column.scrollTop(); } @@ -53,8 +53,12 @@ export default class Favourites extends ImmutablePureComponent { this.column = c; } + handleRefresh = () => { + this.props.dispatch(fetchFavourites(this.props.params.statusId)); + } + render () { - const { intl, accountIds } = this.props; + const { intl, accountIds, multiColumn } = this.props; if (!accountIds) { return ( @@ -64,6 +68,8 @@ export default class Favourites extends ImmutablePureComponent { ); } + const emptyMessage = <FormattedMessage id='empty_column.favourites' defaultMessage='No one has favourited this toot yet. When someone does, they will show up here.' />; + return ( <Column ref={this.setRef}> <ColumnHeader @@ -71,13 +77,20 @@ export default class Favourites extends ImmutablePureComponent { title={intl.formatMessage(messages.heading)} onClick={this.handleHeaderClick} showBackButton + multiColumn={multiColumn} + extraButton={( + <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button> + )} /> - - <ScrollContainer scrollKey='favourites' shouldUpdateScroll={this.shouldUpdateScroll}> - <div className='scrollable'> - {accountIds.map(id => <AccountContainer key={id} id={id} withNote={false} />)} - </div> - </ScrollContainer> + <ScrollableList + scrollKey='favourites' + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + > + {accountIds.map(id => + <AccountContainer key={id} id={id} withNote={false} /> + )} + </ScrollableList> </Column> ); } diff --git a/app/javascript/flavours/glitch/features/follow_requests/components/account_authorize.js b/app/javascript/flavours/glitch/features/follow_requests/components/account_authorize.js index dead0753f..bf145cb67 100644 --- a/app/javascript/flavours/glitch/features/follow_requests/components/account_authorize.js +++ b/app/javascript/flavours/glitch/features/follow_requests/components/account_authorize.js @@ -13,8 +13,8 @@ const messages = defineMessages({ reject: { id: 'follow_request.reject', defaultMessage: 'Reject' }, }); -@injectIntl -export default class AccountAuthorize extends ImmutablePureComponent { +export default @injectIntl +class AccountAuthorize extends ImmutablePureComponent { static propTypes = { account: ImmutablePropTypes.map.isRequired, diff --git a/app/javascript/flavours/glitch/features/follow_requests/index.js b/app/javascript/flavours/glitch/features/follow_requests/index.js index d0845769e..36770aace 100644 --- a/app/javascript/flavours/glitch/features/follow_requests/index.js +++ b/app/javascript/flavours/glitch/features/follow_requests/index.js @@ -2,14 +2,15 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { debounce } from 'lodash'; import LoadingIndicator from 'flavours/glitch/components/loading_indicator'; -import { ScrollContainer } from 'react-router-scroll-4'; import Column from 'flavours/glitch/features/ui/components/column'; import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim'; import AccountAuthorizeContainer from './containers/account_authorize_container'; import { fetchFollowRequests, expandFollowRequests } from 'flavours/glitch/actions/accounts'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; const messages = defineMessages({ heading: { id: 'column.follow_requests', defaultMessage: 'Follow requests' }, @@ -17,38 +18,32 @@ const messages = defineMessages({ const mapStateToProps = state => ({ accountIds: state.getIn(['user_lists', 'follow_requests', 'items']), + hasMore: !!state.getIn(['user_lists', 'follow_requests', 'next']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class FollowRequests extends ImmutablePureComponent { +class FollowRequests extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, + hasMore: PropTypes.bool, accountIds: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { this.props.dispatch(fetchFollowRequests()); } - handleScroll = (e) => { - const { scrollTop, scrollHeight, clientHeight } = e.target; - - if (scrollTop === scrollHeight - clientHeight) { - this.props.dispatch(expandFollowRequests()); - } - } - - shouldUpdateScroll = (prevRouterProps, { location }) => { - if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false; - return !(location.state && location.state.mastodonModalOpen); - } + handleLoadMore = debounce(() => { + this.props.dispatch(expandFollowRequests()); + }, 300, { leading: true }); render () { - const { intl, accountIds } = this.props; + const { intl, accountIds, hasMore, multiColumn } = this.props; if (!accountIds) { return ( @@ -58,17 +53,23 @@ export default class FollowRequests extends ImmutablePureComponent { ); } + const emptyMessage = <FormattedMessage id='empty_column.follow_requests' defaultMessage="You don't have any follow requests yet. When you receive one, it will show up here." />; + return ( - <Column name='follow-requests' icon='user-plus' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} name='follow-requests' icon='user-plus' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> - <ScrollContainer scrollKey='follow_requests' shouldUpdateScroll={this.shouldUpdateScroll}> - <div className='scrollable' onScroll={this.handleScroll}> - {accountIds.map(id => - <AccountAuthorizeContainer key={id} id={id} /> - )} - </div> - </ScrollContainer> + <ScrollableList + scrollKey='follow_requests' + onLoadMore={this.handleLoadMore} + hasMore={hasMore} + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + > + {accountIds.map(id => + <AccountAuthorizeContainer key={id} id={id} /> + )} + </ScrollableList> </Column> ); } diff --git a/app/javascript/flavours/glitch/features/followers/index.js b/app/javascript/flavours/glitch/features/followers/index.js index 2e47ab9b9..c78dcc8e4 100644 --- a/app/javascript/flavours/glitch/features/followers/index.js +++ b/app/javascript/flavours/glitch/features/followers/index.js @@ -2,20 +2,21 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { debounce } from 'lodash'; import LoadingIndicator from 'flavours/glitch/components/loading_indicator'; import { fetchAccount, fetchFollowers, expandFollowers, } from 'flavours/glitch/actions/accounts'; -import { ScrollContainer } from 'react-router-scroll-4'; +import { FormattedMessage } from 'react-intl'; import AccountContainer from 'flavours/glitch/containers/account_container'; import Column from 'flavours/glitch/features/ui/components/column'; import ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header'; import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container'; -import LoadMore from 'flavours/glitch/components/load_more'; import ImmutablePureComponent from 'react-immutable-pure-component'; import MissingIndicator from 'flavours/glitch/components/missing_indicator'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; const mapStateToProps = (state, props) => ({ isAccount: !!state.getIn(['accounts', props.params.accountId]), @@ -23,8 +24,8 @@ const mapStateToProps = (state, props) => ({ hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']), }); -@connect(mapStateToProps) -export default class Followers extends ImmutablePureComponent { +export default @connect(mapStateToProps) +class Followers extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, @@ -32,11 +33,14 @@ export default class Followers extends ImmutablePureComponent { accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, isAccount: PropTypes.bool, + multiColumn: PropTypes.bool, }; componentWillMount () { - this.props.dispatch(fetchAccount(this.props.params.accountId)); - this.props.dispatch(fetchFollowers(this.props.params.accountId)); + if (!this.props.accountIds) { + this.props.dispatch(fetchAccount(this.props.params.accountId)); + this.props.dispatch(fetchFollowers(this.props.params.accountId)); + } } componentWillReceiveProps (nextProps) { @@ -58,22 +62,16 @@ export default class Followers extends ImmutablePureComponent { } } - handleLoadMore = (e) => { - e.preventDefault(); + handleLoadMore = debounce(() => { this.props.dispatch(expandFollowers(this.props.params.accountId)); - } - - shouldUpdateScroll = (prevRouterProps, { location }) => { - if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false; - return !(location.state && location.state.mastodonModalOpen); - } + }, 300, { leading: true }); setRef = c => { this.column = c; } render () { - const { accountIds, hasMore, isAccount } = this.props; + const { accountIds, hasMore, isAccount, multiColumn } = this.props; if (!isAccount) { return ( @@ -83,8 +81,6 @@ export default class Followers extends ImmutablePureComponent { ); } - let loadMore = null; - if (!accountIds) { return ( <Column> @@ -93,23 +89,25 @@ export default class Followers extends ImmutablePureComponent { ); } - if (hasMore) { - loadMore = <LoadMore onClick={this.handleLoadMore} />; - } + const emptyMessage = <FormattedMessage id='account.followers.empty' defaultMessage='No one follows this user yet.' />; return ( <Column ref={this.setRef}> - <ProfileColumnHeader onClick={this.handleHeaderClick} /> - - <ScrollContainer scrollKey='followers' shouldUpdateScroll={this.shouldUpdateScroll}> - <div className='scrollable' onScroll={this.handleScroll}> - <div className='followers'> - <HeaderContainer accountId={this.props.params.accountId} hideTabs /> - {accountIds.map(id => <AccountContainer key={id} id={id} withNote={false} />)} - {loadMore} - </div> - </div> - </ScrollContainer> + <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} /> + + <ScrollableList + scrollKey='followers' + hasMore={hasMore} + onLoadMore={this.handleLoadMore} + prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />} + alwaysPrepend + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + > + {accountIds.map(id => + <AccountContainer key={id} id={id} withNote={false} /> + )} + </ScrollableList> </Column> ); } diff --git a/app/javascript/flavours/glitch/features/following/index.js b/app/javascript/flavours/glitch/features/following/index.js index ad1445f3a..df7c19c22 100644 --- a/app/javascript/flavours/glitch/features/following/index.js +++ b/app/javascript/flavours/glitch/features/following/index.js @@ -2,20 +2,21 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { debounce } from 'lodash'; import LoadingIndicator from 'flavours/glitch/components/loading_indicator'; import { fetchAccount, fetchFollowing, expandFollowing, } from 'flavours/glitch/actions/accounts'; -import { ScrollContainer } from 'react-router-scroll-4'; +import { FormattedMessage } from 'react-intl'; import AccountContainer from 'flavours/glitch/containers/account_container'; import Column from 'flavours/glitch/features/ui/components/column'; import ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header'; import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container'; -import LoadMore from 'flavours/glitch/components/load_more'; import ImmutablePureComponent from 'react-immutable-pure-component'; import MissingIndicator from 'flavours/glitch/components/missing_indicator'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; const mapStateToProps = (state, props) => ({ isAccount: !!state.getIn(['accounts', props.params.accountId]), @@ -23,8 +24,8 @@ const mapStateToProps = (state, props) => ({ hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']), }); -@connect(mapStateToProps) -export default class Following extends ImmutablePureComponent { +export default @connect(mapStateToProps) +class Following extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, @@ -32,11 +33,14 @@ export default class Following extends ImmutablePureComponent { accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, isAccount: PropTypes.bool, + multiColumn: PropTypes.bool, }; componentWillMount () { - this.props.dispatch(fetchAccount(this.props.params.accountId)); - this.props.dispatch(fetchFollowing(this.props.params.accountId)); + if (!this.props.accountIds) { + this.props.dispatch(fetchAccount(this.props.params.accountId)); + this.props.dispatch(fetchFollowing(this.props.params.accountId)); + } } componentWillReceiveProps (nextProps) { @@ -58,22 +62,16 @@ export default class Following extends ImmutablePureComponent { } } - handleLoadMore = (e) => { - e.preventDefault(); + handleLoadMore = debounce(() => { this.props.dispatch(expandFollowing(this.props.params.accountId)); - } - - shouldUpdateScroll = (prevRouterProps, { location }) => { - if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false; - return !(location.state && location.state.mastodonModalOpen); - } + }, 300, { leading: true }); setRef = c => { this.column = c; } render () { - const { accountIds, hasMore, isAccount } = this.props; + const { accountIds, hasMore, isAccount, multiColumn } = this.props; if (!isAccount) { return ( @@ -83,8 +81,6 @@ export default class Following extends ImmutablePureComponent { ); } - let loadMore = null; - if (!accountIds) { return ( <Column> @@ -93,23 +89,25 @@ export default class Following extends ImmutablePureComponent { ); } - if (hasMore) { - loadMore = <LoadMore onClick={this.handleLoadMore} />; - } + const emptyMessage = <FormattedMessage id='account.follows.empty' defaultMessage="This user doesn't follow anyone yet." />; return ( <Column ref={this.setRef}> - <ProfileColumnHeader onClick={this.handleHeaderClick} /> - - <ScrollContainer scrollKey='following' shouldUpdateScroll={this.shouldUpdateScroll}> - <div className='scrollable' onScroll={this.handleScroll}> - <div className='following'> - <HeaderContainer accountId={this.props.params.accountId} hideTabs /> - {accountIds.map(id => <AccountContainer key={id} id={id} withNote={false} />)} - {loadMore} - </div> - </div> - </ScrollContainer> + <ProfileColumnHeader onClick={this.handleHeaderClick} multiColumn={multiColumn} /> + + <ScrollableList + scrollKey='following' + hasMore={hasMore} + onLoadMore={this.handleLoadMore} + prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />} + alwaysPrepend + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + > + {accountIds.map(id => + <AccountContainer key={id} id={id} withNote={false} /> + )} + </ScrollableList> </Column> ); } diff --git a/app/javascript/flavours/glitch/features/generic_not_found/index.js b/app/javascript/flavours/glitch/features/generic_not_found/index.js index d01a1ba47..4412adaed 100644 --- a/app/javascript/flavours/glitch/features/generic_not_found/index.js +++ b/app/javascript/flavours/glitch/features/generic_not_found/index.js @@ -4,7 +4,7 @@ import MissingIndicator from 'flavours/glitch/components/missing_indicator'; const GenericNotFound = () => ( <Column> - <MissingIndicator /> + <MissingIndicator fullPage /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/getting_started/components/trends.js b/app/javascript/flavours/glitch/features/getting_started/components/trends.js new file mode 100644 index 000000000..0734ec72b --- /dev/null +++ b/app/javascript/flavours/glitch/features/getting_started/components/trends.js @@ -0,0 +1,46 @@ +import React from 'react'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import Hashtag from 'flavours/glitch/components/hashtag'; +import { FormattedMessage } from 'react-intl'; + +export default class Trends extends ImmutablePureComponent { + + static defaultProps = { + loading: false, + }; + + static propTypes = { + trends: ImmutablePropTypes.list, + fetchTrends: PropTypes.func.isRequired, + }; + + componentDidMount () { + this.props.fetchTrends(); + this.refreshInterval = setInterval(() => this.props.fetchTrends(), 900 * 1000); + } + + componentWillUnmount () { + if (this.refreshInterval) { + clearInterval(this.refreshInterval); + } + } + + render () { + const { trends } = this.props; + + if (!trends || trends.isEmpty()) { + return null; + } + + return ( + <div className='getting-started__trends'> + <h4><FormattedMessage id='trends.trending_now' defaultMessage='Trending now' /></h4> + + {trends.take(3).map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)} + </div> + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/getting_started/containers/trends_container.js b/app/javascript/flavours/glitch/features/getting_started/containers/trends_container.js new file mode 100644 index 000000000..1df3fb4fe --- /dev/null +++ b/app/javascript/flavours/glitch/features/getting_started/containers/trends_container.js @@ -0,0 +1,13 @@ +import { connect } from 'react-redux'; +import { fetchTrends } from '../../../actions/trends'; +import Trends from '../components/trends'; + +const mapStateToProps = state => ({ + trends: state.getIn(['trends', 'items']), +}); + +const mapDispatchToProps = dispatch => ({ + fetchTrends: () => dispatch(fetchTrends()), +}); + +export default connect(mapStateToProps, mapDispatchToProps)(Trends); diff --git a/app/javascript/flavours/glitch/features/getting_started/index.js b/app/javascript/flavours/glitch/features/getting_started/index.js index f669220e3..d8a51c689 100644 --- a/app/javascript/flavours/glitch/features/getting_started/index.js +++ b/app/javascript/flavours/glitch/features/getting_started/index.js @@ -8,13 +8,15 @@ import { openModal } from 'flavours/glitch/actions/modal'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { me } from 'flavours/glitch/util/initial_state'; +import { me, profile_directory, showTrends } from 'flavours/glitch/util/initial_state'; import { fetchFollowRequests } from 'flavours/glitch/actions/accounts'; import { List as ImmutableList } from 'immutable'; import { createSelector } from 'reselect'; import { fetchLists } from 'flavours/glitch/actions/lists'; -import { preferencesLink, signOutLink } from 'flavours/glitch/util/backend_links'; +import { preferencesLink } from 'flavours/glitch/util/backend_links'; +import NavigationBar from '../compose/components/navigation_bar'; import LinkFooter from 'flavours/glitch/features/ui/components/link_footer'; +import TrendsContainer from './containers/trends_container'; const messages = defineMessages({ heading: { id: 'getting_started.heading', defaultMessage: 'Getting started' }, @@ -29,13 +31,13 @@ const messages = defineMessages({ preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, settings: { id: 'navigation_bar.app_settings', defaultMessage: 'App settings' }, follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, - sign_out: { id: 'navigation_bar.logout', defaultMessage: 'Logout' }, lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' }, keyboard_shortcuts: { id: 'navigation_bar.keyboard_shortcuts', defaultMessage: 'Keyboard shortcuts' }, lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' }, lists_subheading: { id: 'column_subheading.lists', defaultMessage: 'Lists' }, misc: { id: 'navigation_bar.misc', defaultMessage: 'Misc' }, menu: { id: 'getting_started.heading', defaultMessage: 'Getting started' }, + profile_directory: { id: 'getting_started.directory', defaultMessage: 'Profile directory' }, }); const makeMapStateToProps = () => { @@ -102,16 +104,14 @@ const NAVIGATION_PANEL_BREAKPOINT = 600 + (285 * 2) + (10 * 2); } componentDidMount () { - const { myAccount, fetchFollowRequests, multiColumn } = this.props; + const { fetchFollowRequests, multiColumn } = this.props; if (!multiColumn && window.innerWidth >= NAVIGATION_PANEL_BREAKPOINT) { this.context.router.history.replace('/timelines/home'); return; } - if (myAccount.get('locked')) { - fetchFollowRequests(); - } + fetchFollowRequests(); } render () { @@ -146,37 +146,43 @@ const NAVIGATION_PANEL_BREAKPOINT = 600 + (285 * 2) + (10 * 2); navItems.push(<ColumnLink key='5' icon='bookmark' text={intl.formatMessage(messages.bookmarks)} to='/bookmarks' />); } - if (myAccount.get('locked')) { + if (myAccount.get('locked') || unreadFollowRequests > 0) { navItems.push(<ColumnLink key='6' icon='user-plus' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />); } - navItems.push(<ColumnLink key='7' icon='ellipsis-h' text={intl.formatMessage(messages.misc)} to='/getting-started-misc' />); + if (profile_directory) { + navItems.push(<ColumnLink key='7' icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' />); + } + + navItems.push(<ColumnLink key='8' icon='ellipsis-h' text={intl.formatMessage(messages.misc)} to='/getting-started-misc' />); listItems = listItems.concat([ - <div key='8'> - <ColumnLink key='9' icon='bars' text={intl.formatMessage(messages.lists)} to='/lists' /> + <div key='9'> + <ColumnLink key='10' icon='bars' text={intl.formatMessage(messages.lists)} to='/lists' /> {lists.map(list => - <ColumnLink key={(9 + Number(list.get('id'))).toString()} to={`/timelines/list/${list.get('id')}`} icon='list-ul' text={list.get('title')} /> + <ColumnLink key={(11 + Number(list.get('id'))).toString()} to={`/timelines/list/${list.get('id')}`} icon='list-ul' text={list.get('title')} /> )} </div>, ]); return ( - <Column name='getting-started' icon='asterisk' heading={intl.formatMessage(messages.heading)} label={intl.formatMessage(messages.menu)} hideHeadingOnMobile> + <Column bindToDocument={!multiColumn} name='getting-started' icon='asterisk' heading={intl.formatMessage(messages.heading)} label={intl.formatMessage(messages.menu)} hideHeadingOnMobile> <div className='scrollable optionally-scrollable'> <div className='getting-started__wrapper'> - <ColumnSubheading text={intl.formatMessage(messages.navigation_subheading)} /> + {!multiColumn && <NavigationBar account={myAccount} />} + {multiColumn && <ColumnSubheading text={intl.formatMessage(messages.navigation_subheading)} />} {navItems} <ColumnSubheading text={intl.formatMessage(messages.lists_subheading)} /> {listItems} <ColumnSubheading text={intl.formatMessage(messages.settings_subheading)} /> { preferencesLink !== undefined && <ColumnLink icon='cog' text={intl.formatMessage(messages.preferences)} href={preferencesLink} /> } <ColumnLink icon='cogs' text={intl.formatMessage(messages.settings)} onClick={openSettings} /> - <ColumnLink icon='sign-out' text={intl.formatMessage(messages.sign_out)} href={signOutLink} method='delete' /> </div> <LinkFooter /> </div> + + {multiColumn && showTrends && <TrendsContainer />} </Column> ); } diff --git a/app/javascript/flavours/glitch/features/getting_started_misc/index.js b/app/javascript/flavours/glitch/features/getting_started_misc/index.js index ee4452472..570fe78bf 100644 --- a/app/javascript/flavours/glitch/features/getting_started_misc/index.js +++ b/app/javascript/flavours/glitch/features/getting_started_misc/index.js @@ -24,9 +24,9 @@ const messages = defineMessages({ featured_users: { id: 'navigation_bar.featured_users', defaultMessage: 'Featured users' }, }); -@connect() +export default @connect() @injectIntl -export default class gettingStartedMisc extends ImmutablePureComponent { +class gettingStartedMisc extends ImmutablePureComponent { static propTypes = { intl: PropTypes.object.isRequired, diff --git a/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.js b/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.js index dc0ffee85..9c39b158a 100644 --- a/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.js +++ b/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.js @@ -3,15 +3,15 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import Toggle from 'react-toggle'; -import AsyncSelect from 'react-select/lib/Async'; +import AsyncSelect from 'react-select/async'; const messages = defineMessages({ placeholder: { id: 'hashtag.column_settings.select.placeholder', defaultMessage: 'Enter hashtags…' }, noOptions: { id: 'hashtag.column_settings.select.no_options_message', defaultMessage: 'No suggestions found' }, }); -@injectIntl -export default class ColumnSettings extends React.PureComponent { +export default @injectIntl +class ColumnSettings extends React.PureComponent { static propTypes = { settings: ImmutablePropTypes.map.isRequired, diff --git a/app/javascript/flavours/glitch/features/hashtag_timeline/containers/column_settings_container.js b/app/javascript/flavours/glitch/features/hashtag_timeline/containers/column_settings_container.js index 757cd48fb..de1db692d 100644 --- a/app/javascript/flavours/glitch/features/hashtag_timeline/containers/column_settings_container.js +++ b/app/javascript/flavours/glitch/features/hashtag_timeline/containers/column_settings_container.js @@ -20,7 +20,7 @@ const mapDispatchToProps = (dispatch, { columnId }) => ({ }, onLoad (value) { - return api().get('/api/v2/search', { params: { q: value } }).then(response => { + return api().get('/api/v2/search', { params: { q: value, type: 'hashtags' } }).then(response => { return (response.data.hashtags || []).map((tag) => { return { value: tag.name, label: `#${tag.name}` }; }); diff --git a/app/javascript/flavours/glitch/features/hashtag_timeline/index.js b/app/javascript/flavours/glitch/features/hashtag_timeline/index.js index 21efaceea..16dd80c4f 100644 --- a/app/javascript/flavours/glitch/features/hashtag_timeline/index.js +++ b/app/javascript/flavours/glitch/features/hashtag_timeline/index.js @@ -15,8 +15,8 @@ const mapStateToProps = (state, props) => ({ hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0, }); -@connect(mapStateToProps) -export default class HashtagTimeline extends React.PureComponent { +export default @connect(mapStateToProps) +class HashtagTimeline extends React.PureComponent { disconnects = []; @@ -145,6 +145,7 @@ export default class HashtagTimeline extends React.PureComponent { pinned={pinned} multiColumn={multiColumn} showBackButton + bindToDocument={!multiColumn} > {columnId && <ColumnSettingsContainer columnId={columnId} />} </ColumnHeader> @@ -155,6 +156,7 @@ export default class HashtagTimeline extends React.PureComponent { timelineId={`hashtag:${id}`} onLoadMore={this.handleLoadMore} emptyMessage={<FormattedMessage id='empty_column.hashtag' defaultMessage='There is nothing in this hashtag yet.' />} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.js b/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.js index d7692513e..df615db65 100644 --- a/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.js +++ b/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.js @@ -10,8 +10,8 @@ const messages = defineMessages({ settings: { id: 'home.settings', defaultMessage: 'Column settings' }, }); -@injectIntl -export default class ColumnSettings extends React.PureComponent { +export default @injectIntl +class ColumnSettings extends React.PureComponent { static propTypes = { settings: ImmutablePropTypes.map.isRequired, diff --git a/app/javascript/flavours/glitch/features/home_timeline/index.js b/app/javascript/flavours/glitch/features/home_timeline/index.js index 8eb79fa60..9b71a4404 100644 --- a/app/javascript/flavours/glitch/features/home_timeline/index.js +++ b/app/javascript/flavours/glitch/features/home_timeline/index.js @@ -19,9 +19,9 @@ const mapStateToProps = state => ({ isPartial: state.getIn(['timelines', 'home', 'isPartial']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class HomeTimeline extends React.PureComponent { +class HomeTimeline extends React.PureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, @@ -97,7 +97,7 @@ export default class HomeTimeline extends React.PureComponent { const pinned = !!columnId; return ( - <Column ref={this.setRef} name='home' label={intl.formatMessage(messages.title)}> + <Column bindToDocument={!multiColumn} ref={this.setRef} name='home' label={intl.formatMessage(messages.title)}> <ColumnHeader icon='home' active={hasUnread} @@ -117,6 +117,7 @@ export default class HomeTimeline extends React.PureComponent { onLoadMore={this.handleLoadMore} timelineId='home' emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Visit {public} or use search to get started and meet other users.' values={{ public: <Link to='/timelines/public'><FormattedMessage id='empty_column.home.public_timeline' defaultMessage='the public timeline' /></Link> }} />} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.js b/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.js index f7b475f8d..bc7571200 100644 --- a/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.js +++ b/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.js @@ -14,9 +14,9 @@ const mapStateToProps = state => ({ collapseEnabled: state.getIn(['local_settings', 'collapsed', 'enabled']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class KeyboardShortcuts extends ImmutablePureComponent { +class KeyboardShortcuts extends ImmutablePureComponent { static propTypes = { intl: PropTypes.object.isRequired, @@ -25,10 +25,10 @@ export default class KeyboardShortcuts extends ImmutablePureComponent { }; render () { - const { intl, collapseEnabled } = this.props; + const { intl, collapseEnabled, multiColumn } = this.props; return ( - <Column icon='question' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} icon='question' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> <div className='keyboard-shortcuts scrollable optionally-scrollable'> <table> @@ -68,6 +68,10 @@ export default class KeyboardShortcuts extends ImmutablePureComponent { <td><FormattedMessage id='keyboard_shortcuts.enter' defaultMessage='to open status' /></td> </tr> <tr> + <td><kbd>e</kbd></td> + <td><FormattedMessage id='keyboard_shortcuts.open_media' defaultMessage='to open media' /></td> + </tr> + <tr> <td><kbd>x</kbd></td> <td><FormattedMessage id='keyboard_shortcuts.toggle_hidden' defaultMessage='to show/hide text behind CW' /></td> </tr> diff --git a/app/javascript/flavours/glitch/features/list_adder/components/list.js b/app/javascript/flavours/glitch/features/list_adder/components/list.js index cb8eb7d7a..4666ca47b 100644 --- a/app/javascript/flavours/glitch/features/list_adder/components/list.js +++ b/app/javascript/flavours/glitch/features/list_adder/components/list.js @@ -6,6 +6,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import IconButton from '../../../components/icon_button'; import { defineMessages, injectIntl } from 'react-intl'; import { removeFromListAdder, addToListAdder } from '../../../actions/lists'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ remove: { id: 'lists.account.remove', defaultMessage: 'Remove from list' }, @@ -53,7 +54,7 @@ class List extends ImmutablePureComponent { <div className='list'> <div className='list__wrapper'> <div className='list__display-name'> - <i className='fa fa-fw fa-list-ul column-link__icon' /> + <Icon id='list-ul' className='column-link__icon' fixedWidth /> {list.get('title')} </div> diff --git a/app/javascript/flavours/glitch/features/list_editor/components/edit_list_form.js b/app/javascript/flavours/glitch/features/list_editor/components/edit_list_form.js index 24aaf82ac..a8cab2762 100644 --- a/app/javascript/flavours/glitch/features/list_editor/components/edit_list_form.js +++ b/app/javascript/flavours/glitch/features/list_editor/components/edit_list_form.js @@ -11,7 +11,7 @@ const messages = defineMessages({ const mapStateToProps = state => ({ value: state.getIn(['listEditor', 'title']), - disabled: !state.getIn(['listEditor', 'isChanged']), + disabled: !state.getIn(['listEditor', 'isChanged']) || !state.getIn(['listEditor', 'title']), }); const mapDispatchToProps = dispatch => ({ @@ -19,9 +19,9 @@ const mapDispatchToProps = dispatch => ({ onSubmit: () => dispatch(submitListEditor(false)), }); -@connect(mapStateToProps, mapDispatchToProps) +export default @connect(mapStateToProps, mapDispatchToProps) @injectIntl -export default class ListForm extends React.PureComponent { +class ListForm extends React.PureComponent { static propTypes = { value: PropTypes.string.isRequired, diff --git a/app/javascript/flavours/glitch/features/list_editor/components/search.js b/app/javascript/flavours/glitch/features/list_editor/components/search.js index 280632652..192643f77 100644 --- a/app/javascript/flavours/glitch/features/list_editor/components/search.js +++ b/app/javascript/flavours/glitch/features/list_editor/components/search.js @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages } from 'react-intl'; import classNames from 'classnames'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ search: { id: 'lists.search', defaultMessage: 'Search among people you follow' }, @@ -51,8 +52,8 @@ export default class Search extends React.PureComponent { </label> <div role='button' tabIndex='0' className='search__icon' onClick={this.handleClear}> - <i className={classNames('fa fa-search', { active: !hasValue })} /> - <i aria-label={intl.formatMessage(messages.search)} className={classNames('fa fa-times-circle', { active: hasValue })} /> + <Icon id='search' className={classNames({ active: !hasValue })} /> + <Icon id='times-circle' aria-label={intl.formatMessage(messages.search)} className={classNames({ active: hasValue })} /> </div> </div> ); diff --git a/app/javascript/flavours/glitch/features/list_editor/index.js b/app/javascript/flavours/glitch/features/list_editor/index.js index 5f552b113..75b0de3d3 100644 --- a/app/javascript/flavours/glitch/features/list_editor/index.js +++ b/app/javascript/flavours/glitch/features/list_editor/index.js @@ -22,9 +22,9 @@ const mapDispatchToProps = dispatch => ({ onReset: () => dispatch(resetListEditor()), }); -@connect(mapStateToProps, mapDispatchToProps) +export default @connect(mapStateToProps, mapDispatchToProps) @injectIntl -export default class ListEditor extends ImmutablePureComponent { +class ListEditor extends ImmutablePureComponent { static propTypes = { listId: PropTypes.string.isRequired, diff --git a/app/javascript/flavours/glitch/features/list_timeline/index.js b/app/javascript/flavours/glitch/features/list_timeline/index.js index 0405073c5..908a65597 100644 --- a/app/javascript/flavours/glitch/features/list_timeline/index.js +++ b/app/javascript/flavours/glitch/features/list_timeline/index.js @@ -13,6 +13,7 @@ import { fetchList, deleteList, updateList } from 'flavours/glitch/actions/lists import { openModal } from 'flavours/glitch/actions/modal'; import MissingIndicator from 'flavours/glitch/components/missing_indicator'; import LoadingIndicator from 'flavours/glitch/components/loading_indicator'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ deleteMessage: { id: 'confirmations.delete_list.message', defaultMessage: 'Are you sure you want to permanently delete this list?' }, @@ -27,9 +28,9 @@ const mapStateToProps = (state, props) => ({ hasUnread: state.getIn(['timelines', `list:${props.params.id}`, 'unread']) > 0, }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class ListTimeline extends React.PureComponent { +class ListTimeline extends React.PureComponent { static contextTypes = { router: PropTypes.object, @@ -173,14 +174,15 @@ export default class ListTimeline extends React.PureComponent { onClick={this.handleHeaderClick} pinned={pinned} multiColumn={multiColumn} + bindToDocument={!multiColumn} > <div className='column-header__links'> <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.handleEditClick}> - <i className='fa fa-pencil' /> <FormattedMessage id='lists.edit' defaultMessage='Edit list' /> + <Icon id='pencil' /> <FormattedMessage id='lists.edit' defaultMessage='Edit list' /> </button> <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.handleDeleteClick}> - <i className='fa fa-trash' /> <FormattedMessage id='lists.delete' defaultMessage='Delete list' /> + <Icon id='trash' /> <FormattedMessage id='lists.delete' defaultMessage='Delete list' /> </button> </div> @@ -211,6 +213,7 @@ export default class ListTimeline extends React.PureComponent { timelineId={`list:${id}`} onLoadMore={this.handleLoadMore} emptyMessage={<FormattedMessage id='empty_column.list' defaultMessage='There is nothing in this list yet.' />} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/lists/components/new_list_form.js b/app/javascript/flavours/glitch/features/lists/components/new_list_form.js index 61fcbeaf9..cc78d30b7 100644 --- a/app/javascript/flavours/glitch/features/lists/components/new_list_form.js +++ b/app/javascript/flavours/glitch/features/lists/components/new_list_form.js @@ -20,9 +20,9 @@ const mapDispatchToProps = dispatch => ({ onSubmit: () => dispatch(submitListEditor(true)), }); -@connect(mapStateToProps, mapDispatchToProps) +export default @connect(mapStateToProps, mapDispatchToProps) @injectIntl -export default class NewListForm extends React.PureComponent { +class NewListForm extends React.PureComponent { static propTypes = { value: PropTypes.string.isRequired, @@ -66,7 +66,7 @@ export default class NewListForm extends React.PureComponent { </label> <IconButton - disabled={disabled} + disabled={disabled || !value} icon='plus' title={title} onClick={this.handleClick} diff --git a/app/javascript/flavours/glitch/features/lists/index.js b/app/javascript/flavours/glitch/features/lists/index.js index 8b0470c92..adde3dd5c 100644 --- a/app/javascript/flavours/glitch/features/lists/index.js +++ b/app/javascript/flavours/glitch/features/lists/index.js @@ -6,12 +6,13 @@ import LoadingIndicator from 'flavours/glitch/components/loading_indicator'; import Column from 'flavours/glitch/features/ui/components/column'; import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim'; import { fetchLists } from 'flavours/glitch/actions/lists'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import ColumnLink from 'flavours/glitch/features/ui/components/column_link'; import ColumnSubheading from 'flavours/glitch/features/ui/components/column_subheading'; import NewListForm from './components/new_list_form'; import { createSelector } from 'reselect'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; const messages = defineMessages({ heading: { id: 'column.lists', defaultMessage: 'Lists' }, @@ -30,15 +31,16 @@ const mapStateToProps = state => ({ lists: getOrderedLists(state), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class Lists extends ImmutablePureComponent { +class Lists extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, lists: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -46,7 +48,7 @@ export default class Lists extends ImmutablePureComponent { } render () { - const { intl, lists } = this.props; + const { intl, lists, multiColumn } = this.props; if (!lists) { return ( @@ -56,19 +58,24 @@ export default class Lists extends ImmutablePureComponent { ); } + const emptyMessage = <FormattedMessage id='empty_column.lists' defaultMessage="You don't have any lists yet. When you create one, it will show up here." />; + return ( - <Column icon='bars' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} icon='bars' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> <NewListForm /> - <div className='scrollable'> - <ColumnSubheading text={intl.formatMessage(messages.subheading)} /> - + <ColumnSubheading text={intl.formatMessage(messages.subheading)} /> + <ScrollableList + scrollKey='lists' + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + > {lists.map(list => <ColumnLink key={list.get('id')} to={`/timelines/list/${list.get('id')}`} icon='list-ul' text={list.get('title')} /> )} - </div> + </ScrollableList> </Column> ); } diff --git a/app/javascript/flavours/glitch/features/local_settings/navigation/index.js b/app/javascript/flavours/glitch/features/local_settings/navigation/index.js index c583c4863..ab3a554bf 100644 --- a/app/javascript/flavours/glitch/features/local_settings/navigation/index.js +++ b/app/javascript/flavours/glitch/features/local_settings/navigation/index.js @@ -13,14 +13,15 @@ const messages = defineMessages({ general: { id: 'settings.general', defaultMessage: 'General' }, compose: { id: 'settings.compose_box_opts', defaultMessage: 'Compose box' }, content_warnings: { id: 'settings.content_warnings', defaultMessage: 'Content Warnings' }, + filters: { id: 'settings.filters', defaultMessage: 'Filters' }, collapsed: { id: 'settings.collapsed_statuses', defaultMessage: 'Collapsed toots' }, media: { id: 'settings.media', defaultMessage: 'Media' }, preferences: { id: 'settings.preferences', defaultMessage: 'Preferences' }, close: { id: 'settings.close', defaultMessage: 'Close' }, }); -@injectIntl -export default class LocalSettingsNavigation extends React.PureComponent { +export default @injectIntl +class LocalSettingsNavigation extends React.PureComponent { static propTypes = { index : PropTypes.number, @@ -60,27 +61,34 @@ export default class LocalSettingsNavigation extends React.PureComponent { active={index === 3} index={3} onNavigate={onNavigate} - icon='angle-double-up' - title={intl.formatMessage(messages.collapsed)} + icon='filter' + title={intl.formatMessage(messages.filters)} /> <LocalSettingsNavigationItem active={index === 4} index={4} onNavigate={onNavigate} + icon='angle-double-up' + title={intl.formatMessage(messages.collapsed)} + /> + <LocalSettingsNavigationItem + active={index === 5} + index={5} + onNavigate={onNavigate} icon='image' title={intl.formatMessage(messages.media)} /> <LocalSettingsNavigationItem - active={index === 5} + active={index === 6} href={ preferencesLink } - index={5} - icon='sliders' + index={6} + icon='cog' title={intl.formatMessage(messages.preferences)} /> <LocalSettingsNavigationItem - active={index === 6} + active={index === 7} className='close' - index={6} + index={7} onNavigate={onClose} icon='times' title={intl.formatMessage(messages.close)} diff --git a/app/javascript/flavours/glitch/features/local_settings/navigation/item/index.js b/app/javascript/flavours/glitch/features/local_settings/navigation/item/index.js index 68a998b6c..4dec7d154 100644 --- a/app/javascript/flavours/glitch/features/local_settings/navigation/item/index.js +++ b/app/javascript/flavours/glitch/features/local_settings/navigation/item/index.js @@ -3,6 +3,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; +import Icon from 'flavours/glitch/components/icon'; + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * export default class LocalSettingsPage extends React.PureComponent { @@ -42,7 +44,7 @@ export default class LocalSettingsPage extends React.PureComponent { active, }, className); - const iconElem = icon ? <i className={`fa fa-fw fa-${icon}`} /> : (textIcon ? <span className='text-icon-button'>{textIcon}</span> : null); + const iconElem = icon ? <Icon fixedWidth id={icon} /> : (textIcon ? <span className='text-icon-button'>{textIcon}</span> : null); if (href) return ( <a diff --git a/app/javascript/flavours/glitch/features/local_settings/page/index.js b/app/javascript/flavours/glitch/features/local_settings/page/index.js index 23499455b..e08c12c76 100644 --- a/app/javascript/flavours/glitch/features/local_settings/page/index.js +++ b/app/javascript/flavours/glitch/features/local_settings/page/index.js @@ -21,10 +21,17 @@ const messages = defineMessages({ side_arm_copy: { id: 'settings.side_arm_reply_mode.copy', defaultMessage: 'Copy privacy setting of the toot being replied to' }, side_arm_restrict: { id: 'settings.side_arm_reply_mode.restrict', defaultMessage: 'Restrict privacy setting to that of the toot being replied to' }, regexp: { id: 'settings.content_warnings.regexp', defaultMessage: 'Regular expression' }, + filters_drop: { id: 'settings.filtering_behavior.drop', defaultMessage: 'Hide filtered toots completely' }, + filters_upstream: { id: 'settings.filtering_behavior.upstream', defaultMessage: 'Show "filtered" like vanilla Mastodon' }, + filters_hide: { id: 'settings.filtering_behavior.hide', defaultMessage: 'Show "filtered" and add a button to display why' }, + filters_cw: { id: 'settings.filtering_behavior.cw', defaultMessage: 'Still display the post, and add filtered words to content warning' }, + rewrite_mentions_no: { id: 'settings.rewrite_mentions_no', defaultMessage: 'Do not rewrite mentions' }, + rewrite_mentions_acct: { id: 'settings.rewrite_mentions_acct', defaultMessage: 'Rewrite with username and domain (when the account is remote)' }, + rewrite_mentions_username: { id: 'settings.rewrite_mentions_username', defaultMessage: 'Rewrite with username' }, }); -@injectIntl -export default class LocalSettingsPage extends React.PureComponent { +export default @injectIntl +class LocalSettingsPage extends React.PureComponent { static propTypes = { index : PropTypes.number, @@ -62,6 +69,28 @@ export default class LocalSettingsPage extends React.PureComponent { > <FormattedMessage id='settings.confirm_boost_missing_media_description' defaultMessage='Show confirmation dialog before boosting toots lacking media descriptions' /> </LocalSettingsPageItem> + <LocalSettingsPageItem + settings={settings} + item={['tag_misleading_links']} + id='mastodon-settings--tag_misleading_links' + onChange={onChange} + > + <FormattedMessage id='settings.tag_misleading_links' defaultMessage='Tag misleading links' /> + <span className='hint'><FormattedMessage id='settings.tag_misleading_links.hint' defaultMessage="Add a visual indication with the link target host to every link not mentioning it explicitly" /></span> + </LocalSettingsPageItem> + <LocalSettingsPageItem + settings={settings} + item={['rewrite_mentions']} + id='mastodon-settings--rewrite_mentions' + options={[ + { value: 'no', message: intl.formatMessage(messages.rewrite_mentions_no) }, + { value: 'acct', message: intl.formatMessage(messages.rewrite_mentions_acct) }, + { value: 'username', message: intl.formatMessage(messages.rewrite_mentions_username) }, + ]} + onChange={onChange} + > + <FormattedMessage id='settings.rewrite_mentions' defaultMessage='Rewrite mentions in displayed statuses' /> + </LocalSettingsPageItem> <section> <h2><FormattedMessage id='settings.notifications_opts' defaultMessage='Notifications options' /></h2> <LocalSettingsPageItem @@ -223,6 +252,25 @@ export default class LocalSettingsPage extends React.PureComponent { </LocalSettingsPageItem> </div> ), + ({ intl, onChange, settings }) => ( + <div className='glitch local-settings__page filters'> + <h1><FormattedMessage id='settings.filters' defaultMessage='Filters' /></h1> + <LocalSettingsPageItem + settings={settings} + item={['filtering_behavior']} + id='mastodon-settings--filters-behavior' + onChange={onChange} + options={[ + { value: 'drop', message: intl.formatMessage(messages.filters_drop) }, + { value: 'upstream', message: intl.formatMessage(messages.filters_upstream) }, + { value: 'hide', message: intl.formatMessage(messages.filters_hide) }, + { value: 'content_warning', message: intl.formatMessage(messages.filters_cw) } + ]} + > + <FormattedMessage id='settings.filtering_behavior' defaultMessage='Filtering behavior' /> + </LocalSettingsPageItem> + </div> + ), ({ onChange, settings }) => ( <div className='glitch local-settings__page collapsed'> <h1><FormattedMessage id='settings.collapsed_statuses' defaultMessage='Collapsed toots' /></h1> diff --git a/app/javascript/flavours/glitch/features/local_settings/page/item/index.js b/app/javascript/flavours/glitch/features/local_settings/page/item/index.js index 66b937365..5a68523f6 100644 --- a/app/javascript/flavours/glitch/features/local_settings/page/item/index.js +++ b/app/javascript/flavours/glitch/features/local_settings/page/item/index.js @@ -8,7 +8,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; export default class LocalSettingsPageItem extends React.PureComponent { static propTypes = { - children: PropTypes.element.isRequired, + children: PropTypes.node.isRequired, dependsOn: PropTypes.array, dependsOnNot: PropTypes.array, id: PropTypes.string.isRequired, @@ -63,12 +63,12 @@ export default class LocalSettingsPageItem extends React.PureComponent { disabled={!enabled} /> {opt.message} - {opt.hint && <span class='hint'>{opt.hint}</span>} + {opt.hint && <span className='hint'>{opt.hint}</span>} </label> ); }); return ( - <div class='glitch local-settings__page__item radio_buttons'> + <div className='glitch local-settings__page__item radio_buttons'> <fieldset> <legend>{children}</legend> {optionElems} diff --git a/app/javascript/flavours/glitch/features/mutes/index.js b/app/javascript/flavours/glitch/features/mutes/index.js index bbcbea701..c27a530d5 100644 --- a/app/javascript/flavours/glitch/features/mutes/index.js +++ b/app/javascript/flavours/glitch/features/mutes/index.js @@ -1,15 +1,16 @@ import React from 'react'; import { connect } from 'react-redux'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { debounce } from 'lodash'; import LoadingIndicator from 'flavours/glitch/components/loading_indicator'; -import { ScrollContainer } from 'react-router-scroll-4'; import Column from 'flavours/glitch/features/ui/components/column'; import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim'; import AccountContainer from 'flavours/glitch/containers/account_container'; import { fetchMutes, expandMutes } from 'flavours/glitch/actions/mutes'; -import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; const messages = defineMessages({ heading: { id: 'column.mutes', defaultMessage: 'Muted users' }, @@ -17,38 +18,32 @@ const messages = defineMessages({ const mapStateToProps = state => ({ accountIds: state.getIn(['user_lists', 'mutes', 'items']), + hasMore: !!state.getIn(['user_lists', 'mutes', 'next']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class Mutes extends ImmutablePureComponent { +class Mutes extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, + hasMore: PropTypes.bool, accountIds: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { this.props.dispatch(fetchMutes()); } - handleScroll = (e) => { - const { scrollTop, scrollHeight, clientHeight } = e.target; - - if (scrollTop === scrollHeight - clientHeight) { - this.props.dispatch(expandMutes()); - } - } - - shouldUpdateScroll = (prevRouterProps, { location }) => { - if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false; - return !(location.state && location.state.mastodonModalOpen); - } + handleLoadMore = debounce(() => { + this.props.dispatch(expandMutes()); + }, 300, { leading: true }); render () { - const { intl, accountIds } = this.props; + const { intl, accountIds, hasMore, multiColumn } = this.props; if (!accountIds) { return ( @@ -58,16 +53,22 @@ export default class Mutes extends ImmutablePureComponent { ); } + const emptyMessage = <FormattedMessage id='empty_column.mutes' defaultMessage="You haven't muted any users yet." />; + return ( - <Column name='mutes' icon='volume-off' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} name='mutes' icon='volume-off' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> - <ScrollContainer scrollKey='mutes' shouldUpdateScroll={this.shouldUpdateScroll}> - <div className='scrollable mutes' onScroll={this.handleScroll}> - {accountIds.map(id => - <AccountContainer key={id} id={id} /> - )} - </div> - </ScrollContainer> + <ScrollableList + scrollKey='mutes' + onLoadMore={this.handleLoadMore} + hasMore={hasMore} + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + > + {accountIds.map(id => + <AccountContainer key={id} id={id} /> + )} + </ScrollableList> </Column> ); } diff --git a/app/javascript/flavours/glitch/features/notifications/components/clear_column_button.js b/app/javascript/flavours/glitch/features/notifications/components/clear_column_button.js index 22a10753f..ee77cfb8e 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/clear_column_button.js +++ b/app/javascript/flavours/glitch/features/notifications/components/clear_column_button.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; +import Icon from 'flavours/glitch/components/icon'; export default class ClearColumnButton extends React.Component { @@ -10,7 +11,7 @@ export default class ClearColumnButton extends React.Component { render () { return ( - <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.props.onClick}><i className='fa fa-eraser' /> <FormattedMessage id='notifications.clear' defaultMessage='Clear notifications' /></button> + <button className='text-btn column-header__setting-btn' tabIndex='0' onClick={this.props.onClick}><Icon id='eraser' /> <FormattedMessage id='notifications.clear' defaultMessage='Clear notifications' /></button> ); } diff --git a/app/javascript/flavours/glitch/features/notifications/components/column_settings.js b/app/javascript/flavours/glitch/features/notifications/components/column_settings.js index e29bd61f5..e4d5d0eda 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/column_settings.js +++ b/app/javascript/flavours/glitch/features/notifications/components/column_settings.js @@ -58,6 +58,17 @@ export default class ColumnSettings extends React.PureComponent { </div> </div> + <div role='group' aria-labelledby='notifications-follow-request'> + <span id='notifications-follow-request' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow_request' defaultMessage='New follow requests:' /></span> + + <div className='column-settings__row'> + <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow_request']} onChange={onChange} label={alertStr} /> + {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow_request']} onChange={this.onPushChange} label={pushStr} />} + <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow_request']} onChange={onChange} label={showStr} /> + <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow_request']} onChange={onChange} label={soundStr} /> + </div> + </div> + <div role='group' aria-labelledby='notifications-favourite'> <span id='notifications-favourite' className='column-settings__section'><FormattedMessage id='notifications.column_settings.favourite' defaultMessage='Favourites:' /></span> diff --git a/app/javascript/flavours/glitch/features/notifications/components/filter_bar.js b/app/javascript/flavours/glitch/features/notifications/components/filter_bar.js index 3457b7598..6118305d6 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/filter_bar.js +++ b/app/javascript/flavours/glitch/features/notifications/components/filter_bar.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import Icon from 'flavours/glitch/components/icon'; const tooltips = defineMessages({ mentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' }, @@ -63,35 +64,35 @@ class FilterBar extends React.PureComponent { onClick={this.onClick('mention')} title={intl.formatMessage(tooltips.mentions)} > - <i className='fa fa-fw fa-at' /> + <Icon id='reply-all' fixedWidth /> </button> <button className={selectedFilter === 'favourite' ? 'active' : ''} onClick={this.onClick('favourite')} title={intl.formatMessage(tooltips.favourites)} > - <i className='fa fa-fw fa-star' /> + <Icon id='star' fixedWidth /> </button> <button className={selectedFilter === 'reblog' ? 'active' : ''} onClick={this.onClick('reblog')} title={intl.formatMessage(tooltips.boosts)} > - <i className='fa fa-fw fa-retweet' /> + <Icon id='retweet' fixedWidth /> </button> <button className={selectedFilter === 'poll' ? 'active' : ''} onClick={this.onClick('poll')} title={intl.formatMessage(tooltips.polls)} > - <i className='fa fa-fw fa-tasks' /> + <Icon id='tasks' fixedWidth /> </button> <button className={selectedFilter === 'follow' ? 'active' : ''} onClick={this.onClick('follow')} title={intl.formatMessage(tooltips.follows)} > - <i className='fa fa-fw fa-user-plus' /> + <Icon id='user-plus' fixedWidth /> </button> </div> ); diff --git a/app/javascript/flavours/glitch/features/notifications/components/follow.js b/app/javascript/flavours/glitch/features/notifications/components/follow.js index ea81d9ab4..2b71f3107 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/follow.js +++ b/app/javascript/flavours/glitch/features/notifications/components/follow.js @@ -10,6 +10,7 @@ import { HotKeys } from 'react-hotkeys'; import Permalink from 'flavours/glitch/components/permalink'; import AccountContainer from 'flavours/glitch/containers/account_container'; import NotificationOverlayContainer from '../containers/overlay_container'; +import Icon from 'flavours/glitch/components/icon'; export default class NotificationFollow extends ImmutablePureComponent { @@ -78,7 +79,7 @@ export default class NotificationFollow extends ImmutablePureComponent { <div className='notification notification-follow focusable' tabIndex='0'> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> - <i className='fa fa-fw fa-user-plus' /> + <Icon fixedWidth id='user-plus' /> </div> <FormattedMessage diff --git a/app/javascript/flavours/glitch/features/notifications/components/follow_request.js b/app/javascript/flavours/glitch/features/notifications/components/follow_request.js new file mode 100644 index 000000000..d73dac434 --- /dev/null +++ b/app/javascript/flavours/glitch/features/notifications/components/follow_request.js @@ -0,0 +1,130 @@ +import React, { Fragment } from 'react'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import Avatar from 'flavours/glitch/components/avatar'; +import DisplayName from 'flavours/glitch/components/display_name'; +import Permalink from 'flavours/glitch/components/permalink'; +import IconButton from 'flavours/glitch/components/icon_button'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import NotificationOverlayContainer from '../containers/overlay_container'; +import { HotKeys } from 'react-hotkeys'; +import Icon from 'flavours/glitch/components/icon'; + +const messages = defineMessages({ + authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' }, + reject: { id: 'follow_request.reject', defaultMessage: 'Reject' }, +}); + +export default @injectIntl +class FollowRequest extends ImmutablePureComponent { + + static propTypes = { + account: ImmutablePropTypes.map.isRequired, + onAuthorize: PropTypes.func.isRequired, + onReject: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + notification: ImmutablePropTypes.map.isRequired, + }; + + handleMoveUp = () => { + const { notification, onMoveUp } = this.props; + onMoveUp(notification.get('id')); + } + + handleMoveDown = () => { + const { notification, onMoveDown } = this.props; + onMoveDown(notification.get('id')); + } + + handleOpen = () => { + this.handleOpenProfile(); + } + + handleOpenProfile = () => { + const { notification } = this.props; + this.context.router.history.push(`/accounts/${notification.getIn(['account', 'id'])}`); + } + + handleMention = e => { + e.preventDefault(); + + const { notification, onMention } = this.props; + onMention(notification.get('account'), this.context.router.history); + } + + getHandlers () { + return { + moveUp: this.handleMoveUp, + moveDown: this.handleMoveDown, + open: this.handleOpen, + openProfile: this.handleOpenProfile, + mention: this.handleMention, + reply: this.handleMention, + }; + } + + render () { + const { intl, hidden, account, onAuthorize, onReject, notification } = this.props; + + if (!account) { + return <div />; + } + + if (hidden) { + return ( + <Fragment> + {account.get('display_name')} + {account.get('username')} + </Fragment> + ); + } + + // Links to the display name. + const displayName = account.get('display_name_html') || account.get('username'); + const link = ( + <bdi><Permalink + className='notification__display-name' + href={account.get('url')} + title={account.get('acct')} + to={`/accounts/${account.get('id')}`} + dangerouslySetInnerHTML={{ __html: displayName }} + /></bdi> + ); + + return ( + <HotKeys handlers={this.getHandlers()}> + <div className='notification notification-follow-request focusable' tabIndex='0'> + <div className='notification__message'> + <div className='notification__favourite-icon-wrapper'> + <Icon id='user' fixedWidth /> + </div> + + <FormattedMessage + id='notification.follow_request' + defaultMessage='{name} has requested to follow you' + values={{ name: link }} + /> + </div> + + <div className='account'> + <div className='account__wrapper'> + <Permalink key={account.get('id')} className='account__display-name' title={account.get('acct')} href={account.get('url')} to={`/accounts/${account.get('id')}`}> + <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div> + <DisplayName account={account} /> + </Permalink> + + <div className='account__relationship'> + <IconButton title={intl.formatMessage(messages.authorize)} icon='check' onClick={onAuthorize} /> + <IconButton title={intl.formatMessage(messages.reject)} icon='times' onClick={onReject} /> + </div> + </div> + </div> + + <NotificationOverlayContainer notification={notification} /> + </div> + </HotKeys> + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/notifications/components/notification.js b/app/javascript/flavours/glitch/features/notifications/components/notification.js index 5c5bbf604..62fc28386 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/notification.js +++ b/app/javascript/flavours/glitch/features/notifications/components/notification.js @@ -7,6 +7,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; // Our imports, import StatusContainer from 'flavours/glitch/containers/status_container'; import NotificationFollow from './follow'; +import NotificationFollowRequestContainer from '../containers/follow_request_container'; export default class Notification extends ImmutablePureComponent { @@ -47,6 +48,18 @@ export default class Notification extends ImmutablePureComponent { onMention={onMention} /> ); + case 'follow_request': + return ( + <NotificationFollowRequestContainer + hidden={hidden} + id={notification.get('id')} + account={notification.get('account')} + notification={notification} + onMoveDown={onMoveDown} + onMoveUp={onMoveUp} + onMention={onMention} + /> + ); case 'mention': return ( <StatusContainer diff --git a/app/javascript/flavours/glitch/features/notifications/components/overlay.js b/app/javascript/flavours/glitch/features/notifications/components/overlay.js index e56f9c628..f3ccafc06 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/overlay.js +++ b/app/javascript/flavours/glitch/features/notifications/components/overlay.js @@ -9,13 +9,14 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { defineMessages, injectIntl } from 'react-intl'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ markForDeletion: { id: 'notification.markForDeletion', defaultMessage: 'Mark for deletion' }, }); -@injectIntl -export default class NotificationOverlay extends ImmutablePureComponent { +export default @injectIntl +class NotificationOverlay extends ImmutablePureComponent { static propTypes = { notification : ImmutablePropTypes.map.isRequired, @@ -47,7 +48,7 @@ export default class NotificationOverlay extends ImmutablePureComponent { > <div className='wrappy'> <div className='ckbox' aria-hidden='true' title={label}> - {active ? (<i className='fa fa-check' />) : ''} + {active ? (<Icon id='check' />) : ''} </div> </div> </div> diff --git a/app/javascript/flavours/glitch/features/notifications/components/setting_toggle.js b/app/javascript/flavours/glitch/features/notifications/components/setting_toggle.js index ac2211e48..0264b6815 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/setting_toggle.js +++ b/app/javascript/flavours/glitch/features/notifications/components/setting_toggle.js @@ -12,6 +12,7 @@ export default class SettingToggle extends React.PureComponent { label: PropTypes.node.isRequired, meta: PropTypes.node, onChange: PropTypes.func.isRequired, + defaultValue: PropTypes.bool, } onChange = ({ target }) => { @@ -19,12 +20,12 @@ export default class SettingToggle extends React.PureComponent { } render () { - const { prefix, settings, settingPath, label, meta } = this.props; + const { prefix, settings, settingPath, label, meta, defaultValue } = this.props; const id = ['setting-toggle', prefix, ...settingPath].filter(Boolean).join('-'); return ( <div className='setting-toggle'> - <Toggle id={id} checked={settings.getIn(settingPath)} onChange={this.onChange} onKeyDown={this.onKeyDown} /> + <Toggle id={id} checked={settings.getIn(settingPath, defaultValue)} onChange={this.onChange} onKeyDown={this.onKeyDown} /> <label htmlFor={id} className='setting-toggle__label'>{label}</label> {meta && <span className='setting-meta__label'>{meta}</span>} </div> diff --git a/app/javascript/flavours/glitch/features/notifications/containers/follow_request_container.js b/app/javascript/flavours/glitch/features/notifications/containers/follow_request_container.js new file mode 100644 index 000000000..82357adfb --- /dev/null +++ b/app/javascript/flavours/glitch/features/notifications/containers/follow_request_container.js @@ -0,0 +1,16 @@ +import { connect } from 'react-redux'; +import { makeGetAccount } from 'flavours/glitch/selectors'; +import FollowRequest from '../components/follow_request'; +import { authorizeFollowRequest, rejectFollowRequest } from 'flavours/glitch/actions/accounts'; + +const mapDispatchToProps = (dispatch, { account }) => ({ + onAuthorize () { + dispatch(authorizeFollowRequest(account.get('id'))); + }, + + onReject () { + dispatch(rejectFollowRequest(account.get('id'))); + }, +}); + +export default connect(null, mapDispatchToProps)(FollowRequest); diff --git a/app/javascript/flavours/glitch/features/notifications/index.js b/app/javascript/flavours/glitch/features/notifications/index.js index f2a1ccc3b..7f06d70c5 100644 --- a/app/javascript/flavours/glitch/features/notifications/index.js +++ b/app/javascript/flavours/glitch/features/notifications/index.js @@ -10,6 +10,7 @@ import { scrollTopNotifications, mountNotifications, unmountNotifications, + loadPending, } from 'flavours/glitch/actions/notifications'; import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns'; import NotificationContainer from './containers/notification_container'; @@ -46,8 +47,9 @@ const mapStateToProps = state => ({ notifications: getNotifications(state), localSettings: state.get('local_settings'), isLoading: state.getIn(['notifications', 'isLoading'], true), - isUnread: state.getIn(['notifications', 'unread']) > 0, + isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0, hasMore: state.getIn(['notifications', 'hasMore']), + numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size, notifCleaningActive: state.getIn(['notifications', 'cleaningMode']), }); @@ -65,9 +67,9 @@ const mapDispatchToProps = dispatch => ({ dispatch, }); -@connect(mapStateToProps, mapDispatchToProps) +export default @connect(mapStateToProps, mapDispatchToProps) @injectIntl -export default class Notifications extends React.PureComponent { +class Notifications extends React.PureComponent { static propTypes = { columnId: PropTypes.string, @@ -80,6 +82,7 @@ export default class Notifications extends React.PureComponent { isUnread: PropTypes.bool, multiColumn: PropTypes.bool, hasMore: PropTypes.bool, + numPending: PropTypes.number, localSettings: ImmutablePropTypes.map, notifCleaningActive: PropTypes.bool, onEnterCleaningMode: PropTypes.func, @@ -100,6 +103,10 @@ export default class Notifications extends React.PureComponent { this.props.dispatch(expandNotifications({ maxId: last && last.get('id') })); }, 300, { leading: true }); + handleLoadPending = () => { + this.props.dispatch(loadPending()); + }; + handleScrollToTop = debounce(() => { this.props.dispatch(scrollTopNotifications(true)); }, 100); @@ -170,7 +177,7 @@ export default class Notifications extends React.PureComponent { } render () { - const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, showFilterBar } = this.props; + const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar } = this.props; const pinned = !!columnId; const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. Interact with others to start the conversation." />; @@ -212,11 +219,14 @@ export default class Notifications extends React.PureComponent { isLoading={isLoading} showLoading={isLoading && notifications.size === 0} hasMore={hasMore} + numPending={numPending} emptyMessage={emptyMessage} onLoadMore={this.handleLoadOlder} + onLoadPending={this.handleLoadPending} onScrollToTop={this.handleScrollToTop} onScroll={this.handleScroll} shouldUpdateScroll={shouldUpdateScroll} + bindToDocument={!multiColumn} > {scrollableContent} </ScrollableList> @@ -224,6 +234,7 @@ export default class Notifications extends React.PureComponent { return ( <Column + bindToDocument={!multiColumn} ref={this.setColumnRef} name='notifications' extraClasses={this.props.notifCleaningActive ? 'notif-cleaning' : null} diff --git a/app/javascript/flavours/glitch/features/pinned_accounts_editor/index.js b/app/javascript/flavours/glitch/features/pinned_accounts_editor/index.js index 7484e458e..5f03c7e93 100644 --- a/app/javascript/flavours/glitch/features/pinned_accounts_editor/index.js +++ b/app/javascript/flavours/glitch/features/pinned_accounts_editor/index.js @@ -21,9 +21,9 @@ const mapDispatchToProps = dispatch => ({ onReset: () => dispatch(resetPinnedAccountsEditor()), }); -@connect(mapStateToProps, mapDispatchToProps) +export default @connect(mapStateToProps, mapDispatchToProps) @injectIntl -export default class PinnedAccountsEditor extends ImmutablePureComponent { +class PinnedAccountsEditor extends ImmutablePureComponent { static propTypes = { onClose: PropTypes.func.isRequired, diff --git a/app/javascript/flavours/glitch/features/pinned_statuses/index.js b/app/javascript/flavours/glitch/features/pinned_statuses/index.js index f56d70176..34d8e465f 100644 --- a/app/javascript/flavours/glitch/features/pinned_statuses/index.js +++ b/app/javascript/flavours/glitch/features/pinned_statuses/index.js @@ -18,15 +18,16 @@ const mapStateToProps = state => ({ hasMore: !!state.getIn(['status_lists', 'pins', 'next']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class PinnedStatuses extends ImmutablePureComponent { +class PinnedStatuses extends ImmutablePureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, statusIds: ImmutablePropTypes.list.isRequired, intl: PropTypes.object.isRequired, hasMore: PropTypes.bool.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -42,15 +43,16 @@ export default class PinnedStatuses extends ImmutablePureComponent { } render () { - const { intl, statusIds, hasMore } = this.props; + const { intl, statusIds, hasMore, multiColumn } = this.props; return ( - <Column icon='thumb-tack' heading={intl.formatMessage(messages.heading)} ref={this.setRef}> + <Column bindToDocument={!multiColumn} icon='thumb-tack' heading={intl.formatMessage(messages.heading)} ref={this.setRef}> <ColumnBackButtonSlim /> <StatusList statusIds={statusIds} scrollKey='pinned_statuses' hasMore={hasMore} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/public_timeline/index.js b/app/javascript/flavours/glitch/features/public_timeline/index.js index 7fe472202..4d139a326 100644 --- a/app/javascript/flavours/glitch/features/public_timeline/index.js +++ b/app/javascript/flavours/glitch/features/public_timeline/index.js @@ -14,20 +14,22 @@ const messages = defineMessages({ title: { id: 'column.public', defaultMessage: 'Federated timeline' }, }); -const mapStateToProps = (state, { onlyMedia, columnId }) => { +const mapStateToProps = (state, { columnId }) => { const uuid = columnId; const columns = state.getIn(['settings', 'columns']); const index = columns.findIndex(c => c.get('uuid') === uuid); + const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'public', 'other', 'onlyMedia']); + const timelineState = state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`]); return { - hasUnread: state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`, 'unread']) > 0, - onlyMedia: (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'public', 'other', 'onlyMedia']), + hasUnread: !!timelineState && timelineState.get('unread') > 0, + onlyMedia, }; }; -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class PublicTimeline extends React.PureComponent { +class PublicTimeline extends React.PureComponent { static defaultProps = { onlyMedia: false, @@ -99,16 +101,12 @@ export default class PublicTimeline extends React.PureComponent { dispatch(expandPublicTimeline({ maxId, onlyMedia })); } - shouldUpdateScroll = (prevRouterProps, { location }) => { - return !(location.state && location.state.mastodonModalOpen) - } - render () { const { intl, columnId, hasUnread, multiColumn, onlyMedia } = this.props; const pinned = !!columnId; return ( - <Column ref={this.setRef} name='federated' label={intl.formatMessage(messages.title)}> + <Column bindToDocument={!multiColumn} ref={this.setRef} name='federated' label={intl.formatMessage(messages.title)}> <ColumnHeader icon='globe' active={hasUnread} @@ -128,6 +126,7 @@ export default class PublicTimeline extends React.PureComponent { trackScroll={!pinned} scrollKey={`public_timeline-${columnId}`} emptyMessage={<FormattedMessage id='empty_column.public' defaultMessage='There is nothing here! Write something publicly, or manually follow users from other servers to fill it up' />} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/reblogs/index.js b/app/javascript/flavours/glitch/features/reblogs/index.js index e007506b7..258070358 100644 --- a/app/javascript/flavours/glitch/features/reblogs/index.js +++ b/app/javascript/flavours/glitch/features/reblogs/index.js @@ -4,34 +4,39 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import LoadingIndicator from 'flavours/glitch/components/loading_indicator'; import { fetchReblogs } from 'flavours/glitch/actions/interactions'; -import { ScrollContainer } from 'react-router-scroll-4'; import AccountContainer from 'flavours/glitch/containers/account_container'; import Column from 'flavours/glitch/features/ui/components/column'; +import Icon from 'flavours/glitch/components/icon'; import ColumnHeader from 'flavours/glitch/components/column_header'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; const messages = defineMessages({ heading: { id: 'column.reblogged_by', defaultMessage: 'Boosted by' }, + refresh: { id: 'refresh', defaultMessage: 'Refresh' }, }); const mapStateToProps = (state, props) => ({ accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class Reblogs extends ImmutablePureComponent { +class Reblogs extends ImmutablePureComponent { static propTypes = { params: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, accountIds: ImmutablePropTypes.list, + multiColumn: PropTypes.bool, intl: PropTypes.object.isRequired, }; componentWillMount () { - this.props.dispatch(fetchReblogs(this.props.params.statusId)); + if (!this.props.accountIds) { + this.props.dispatch(fetchReblogs(this.props.params.statusId)); + } } componentWillReceiveProps(nextProps) { @@ -40,11 +45,6 @@ export default class Reblogs extends ImmutablePureComponent { } } - shouldUpdateScroll = (prevRouterProps, { location }) => { - if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false; - return !(location.state && location.state.mastodonModalOpen); - } - handleHeaderClick = () => { this.column.scrollTop(); } @@ -53,8 +53,12 @@ export default class Reblogs extends ImmutablePureComponent { this.column = c; } + handleRefresh = () => { + this.props.dispatch(fetchReblogs(this.props.params.statusId)); + } + render () { - const { intl, accountIds } = this.props; + const { intl, accountIds, multiColumn } = this.props; if (!accountIds) { return ( @@ -64,6 +68,8 @@ export default class Reblogs extends ImmutablePureComponent { ); } + const emptyMessage = <FormattedMessage id='status.reblogs.empty' defaultMessage='No one has boosted this toot yet. When someone does, they will show up here.' />; + return ( <Column ref={this.setRef}> <ColumnHeader @@ -71,13 +77,21 @@ export default class Reblogs extends ImmutablePureComponent { title={intl.formatMessage(messages.heading)} onClick={this.handleHeaderClick} showBackButton + multiColumn={multiColumn} + extraButton={( + <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button> + )} /> - <ScrollContainer scrollKey='reblogs' shouldUpdateScroll={this.shouldUpdateScroll}> - <div className='scrollable reblogs'> - {accountIds.map(id => <AccountContainer key={id} id={id} withNote={false} />)} - </div> - </ScrollContainer> + <ScrollableList + scrollKey='reblogs' + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + > + {accountIds.map(id => + <AccountContainer key={id} id={id} withNote={false} /> + )} + </ScrollableList> </Column> ); } diff --git a/app/javascript/flavours/glitch/features/status/components/action_bar.js b/app/javascript/flavours/glitch/features/status/components/action_bar.js index 8291319c3..c48bfaccd 100644 --- a/app/javascript/flavours/glitch/features/status/components/action_bar.js +++ b/app/javascript/flavours/glitch/features/status/components/action_bar.js @@ -32,8 +32,8 @@ const messages = defineMessages({ copy: { id: 'status.copy', defaultMessage: 'Copy link to status' }, }); -@injectIntl -export default class ActionBar extends React.PureComponent { +export default @injectIntl +class ActionBar extends React.PureComponent { static contextTypes = { router: PropTypes.object, diff --git a/app/javascript/flavours/glitch/features/status/components/card.js b/app/javascript/flavours/glitch/features/status/components/card.js index f974a87a1..7352dc6b4 100644 --- a/app/javascript/flavours/glitch/features/status/components/card.js +++ b/app/javascript/flavours/glitch/features/status/components/card.js @@ -4,15 +4,8 @@ import Immutable from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import punycode from 'punycode'; import classnames from 'classnames'; - -const IDNA_PREFIX = 'xn--'; - -const decodeIDNA = domain => { - return domain - .split('.') - .map(part => part.indexOf(IDNA_PREFIX) === 0 ? punycode.decode(part.slice(IDNA_PREFIX.length)) : part) - .join('.'); -}; +import { decode as decodeIDNA } from 'flavours/glitch/util/idna'; +import Icon from 'flavours/glitch/components/icon'; const getHostname = url => { const parser = document.createElement('a'); @@ -147,7 +140,7 @@ export default class Card extends React.PureComponent { const horizontal = (!compact && card.get('width') > card.get('height') && (card.get('width') + 100 >= width)) || card.get('type') !== 'link' || embedded; const interactive = card.get('type') !== 'link'; const className = classnames('status-card', { horizontal, compact, interactive }); - const title = interactive ? <a className='status-card__title' href={card.get('url')} title={card.get('title')} rel='noopener' target='_blank'><strong>{card.get('title')}</strong></a> : <strong className='status-card__title' title={card.get('title')}>{card.get('title')}</strong>; + const title = interactive ? <a className='status-card__title' href={card.get('url')} title={card.get('title')} rel='noopener noreferrer' target='_blank'><strong>{card.get('title')}</strong></a> : <strong className='status-card__title' title={card.get('title')}>{card.get('title')}</strong>; const ratio = card.get('width') / card.get('height'); const height = (compact && !embedded) ? (width / (16 / 9)) : (width / ratio); @@ -178,8 +171,8 @@ export default class Card extends React.PureComponent { <div className='status-card__actions'> <div> - <button onClick={this.handleEmbedClick}><i className={`fa fa-${iconVariant}`} /></button> - {horizontal && <a href={card.get('url')} target='_blank' rel='noopener'><i className='fa fa-external-link' /></a>} + <button onClick={this.handleEmbedClick}><Icon id={iconVariant} /></button> + {horizontal && <a href={card.get('url')} target='_blank' rel='noopener noreferrer'><Icon id='external-link' /></a>} </div> </div> </div> @@ -201,13 +194,13 @@ export default class Card extends React.PureComponent { } else { embed = ( <div className='status-card__image'> - <i className='fa fa-file-text' /> + <Icon id='file-text' /> </div> ); } return ( - <a href={card.get('url')} className={className} target='_blank' rel='noopener' ref={this.setRef}> + <a href={card.get('url')} className={className} target='_blank' rel='noopener noreferrer' ref={this.setRef}> {embed} {description} </a> diff --git a/app/javascript/flavours/glitch/features/status/components/detailed_status.js b/app/javascript/flavours/glitch/features/status/components/detailed_status.js index ddedac4d4..898011c88 100644 --- a/app/javascript/flavours/glitch/features/status/components/detailed_status.js +++ b/app/javascript/flavours/glitch/features/status/components/detailed_status.js @@ -11,10 +11,12 @@ import { FormattedDate, FormattedNumber } from 'react-intl'; import Card from './card'; import ImmutablePureComponent from 'react-immutable-pure-component'; import Video from 'flavours/glitch/features/video'; +import Audio from 'flavours/glitch/features/audio'; import VisibilityIcon from 'flavours/glitch/components/status_visibility_icon'; import scheduleIdleTask from 'flavours/glitch/util/schedule_idle_task'; import classNames from 'classnames'; import PollContainer from 'flavours/glitch/containers/poll_container'; +import Icon from 'flavours/glitch/components/icon'; export default class DetailedStatus extends ImmutablePureComponent { @@ -131,14 +133,27 @@ export default class DetailedStatus extends ImmutablePureComponent { } else if (status.get('media_attachments').size > 0) { if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) { media = <AttachmentList media={status.get('media_attachments')} />; + } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + const attachment = status.getIn(['media_attachments', 0]); + + media = ( + <Audio + src={attachment.get('url')} + alt={attachment.get('description')} + duration={attachment.getIn(['meta', 'original', 'duration'], 0)} + height={110} + preload + /> + ); + mediaIcon = 'music'; } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { - const video = status.getIn(['media_attachments', 0]); + const attachment = status.getIn(['media_attachments', 0]); media = ( <Video - preview={video.get('preview_url')} - blurhash={video.get('blurhash')} - src={video.get('url')} - alt={video.get('description')} + preview={attachment.get('preview_url')} + blurhash={attachment.get('blurhash')} + src={attachment.get('url')} + alt={attachment.get('description')} inline sensitive={status.get('sensitive')} letterbox={settings.getIn(['media', 'letterbox'])} @@ -173,7 +188,7 @@ export default class DetailedStatus extends ImmutablePureComponent { } if (status.get('application')) { - applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener'>{status.getIn(['application', 'name'])}</a></span>; + applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener noreferrer'>{status.getIn(['application', 'name'])}</a></span>; } if (status.get('visibility') === 'direct') { @@ -183,11 +198,11 @@ export default class DetailedStatus extends ImmutablePureComponent { } if (status.get('visibility') === 'private') { - reblogLink = <i className={`fa fa-${reblogIcon}`} />; + reblogLink = <Icon id={reblogIcon} />; } else if (this.context.router) { reblogLink = ( <Link to={`/statuses/${status.get('id')}/reblogs`} className='detailed-status__link'> - <i className={`fa fa-${reblogIcon}`} /> + <Icon id={reblogIcon} /> <span className='detailed-status__reblogs'> <FormattedNumber value={status.get('reblogs_count')} /> </span> @@ -196,7 +211,7 @@ export default class DetailedStatus extends ImmutablePureComponent { } else { reblogLink = ( <a href={`/interact/${status.get('id')}?type=reblog`} className='detailed-status__link' onClick={this.handleModalLink}> - <i className={`fa fa-${reblogIcon}`} /> + <Icon id={reblogIcon} /> <span className='detailed-status__reblogs'> <FormattedNumber value={status.get('reblogs_count')} /> </span> @@ -207,7 +222,7 @@ export default class DetailedStatus extends ImmutablePureComponent { if (this.context.router) { favouriteLink = ( <Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'> - <i className='fa fa-star' /> + <Icon id='star' /> <span className='detailed-status__favorites'> <FormattedNumber value={status.get('favourites_count')} /> </span> @@ -216,7 +231,7 @@ export default class DetailedStatus extends ImmutablePureComponent { } else { favouriteLink = ( <a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}> - <i className='fa fa-star' /> + <Icon id='star' /> <span className='detailed-status__favorites'> <FormattedNumber value={status.get('favourites_count')} /> </span> @@ -241,11 +256,13 @@ export default class DetailedStatus extends ImmutablePureComponent { onExpandedToggle={onToggleHidden} parseClick={this.parseClick} onUpdate={this.handleChildUpdate} + tagLinks={settings.get('tag_misleading_links')} + rewriteMentions={settings.get('rewrite_mentions')} disabled /> <div className='detailed-status__meta'> - <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener'> + <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'> <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' /> </a>{applicationLink} · {reblogLink} · {favouriteLink} · <VisibilityIcon visibility={status.get('visibility')} /> </div> diff --git a/app/javascript/flavours/glitch/features/status/containers/detailed_status_container.js b/app/javascript/flavours/glitch/features/status/containers/detailed_status_container.js index e6c390537..e71803328 100644 --- a/app/javascript/flavours/glitch/features/status/containers/detailed_status_container.js +++ b/app/javascript/flavours/glitch/features/status/containers/detailed_status_container.js @@ -1,4 +1,3 @@ -import React from 'react'; import { connect } from 'react-redux'; import DetailedStatus from '../components/detailed_status'; import { makeGetStatus } from 'flavours/glitch/selectors'; @@ -15,7 +14,6 @@ import { pin, unpin, } from 'flavours/glitch/actions/interactions'; -import { blockAccount } from 'flavours/glitch/actions/accounts'; import { muteStatus, unmuteStatus, @@ -24,9 +22,10 @@ import { revealStatus, } from 'flavours/glitch/actions/statuses'; import { initMuteModal } from 'flavours/glitch/actions/mutes'; +import { initBlockModal } from 'flavours/glitch/actions/blocks'; import { initReport } from 'flavours/glitch/actions/reports'; import { openModal } from 'flavours/glitch/actions/modal'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { boostModal, deleteModal } from 'flavours/glitch/util/initial_state'; import { showAlertForError } from 'flavours/glitch/actions/alerts'; @@ -35,10 +34,8 @@ const messages = defineMessages({ deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' }, redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' }, redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' }, - blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, - blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, }); const makeMapStateToProps = () => { @@ -139,16 +136,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ onBlock (status) { const account = status.get('account'); - dispatch(openModal('CONFIRM', { - message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, - confirm: intl.formatMessage(messages.blockConfirm), - onConfirm: () => dispatch(blockAccount(account.get('id'))), - secondary: intl.formatMessage(messages.blockAndReport), - onSecondary: () => { - dispatch(blockAccount(account.get('id'))); - dispatch(initReport(account, status)); - }, - })); + dispatch(initBlockModal(account)); }, onReport (status) { diff --git a/app/javascript/flavours/glitch/features/status/index.js b/app/javascript/flavours/glitch/features/status/index.js index 76bfaaffa..322f92477 100644 --- a/app/javascript/flavours/glitch/features/status/index.js +++ b/app/javascript/flavours/glitch/features/status/index.js @@ -4,6 +4,7 @@ import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { createSelector } from 'reselect'; import { fetchStatus } from 'flavours/glitch/actions/statuses'; import MissingIndicator from 'flavours/glitch/components/missing_indicator'; import DetailedStatus from './components/detailed_status'; @@ -25,9 +26,9 @@ import { directCompose, } from 'flavours/glitch/actions/compose'; import { changeLocalSetting } from 'flavours/glitch/actions/local_settings'; -import { blockAccount } from 'flavours/glitch/actions/accounts'; import { muteStatus, unmuteStatus, deleteStatus } from 'flavours/glitch/actions/statuses'; import { initMuteModal } from 'flavours/glitch/actions/mutes'; +import { initBlockModal } from 'flavours/glitch/actions/blocks'; import { initReport } from 'flavours/glitch/actions/reports'; import { makeGetStatus } from 'flavours/glitch/selectors'; import { ScrollContainer } from 'react-router-scroll-4'; @@ -35,67 +36,95 @@ import ColumnBackButton from 'flavours/glitch/components/column_back_button'; import ColumnHeader from '../../components/column_header'; import StatusContainer from 'flavours/glitch/containers/status_container'; import { openModal } from 'flavours/glitch/actions/modal'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { HotKeys } from 'react-hotkeys'; import { boostModal, favouriteModal, deleteModal } from 'flavours/glitch/util/initial_state'; import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from 'flavours/glitch/util/fullscreen'; import { autoUnfoldCW } from 'flavours/glitch/util/content_warning'; import { textForScreenReader, defaultMediaVisibility } from 'flavours/glitch/components/status'; +import Icon from 'flavours/glitch/components/icon'; const messages = defineMessages({ deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' }, deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' }, redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' }, redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.' }, - blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' }, hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' }, detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' }, replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, - blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, tootHeading: { id: 'column.toot', defaultMessage: 'Toots and replies' }, }); const makeMapStateToProps = () => { const getStatus = makeGetStatus(); - const mapStateToProps = (state, props) => { - const status = getStatus(state, { id: props.params.statusId }); + const getAncestorsIds = createSelector([ + (_, { id }) => id, + state => state.getIn(['contexts', 'inReplyTos']), + ], (statusId, inReplyTos) => { let ancestorsIds = Immutable.List(); - let descendantsIds = Immutable.List(); + ancestorsIds = ancestorsIds.withMutations(mutable => { + let id = statusId; - if (status) { - ancestorsIds = ancestorsIds.withMutations(mutable => { - let id = status.get('in_reply_to_id'); + while (id) { + mutable.unshift(id); + id = inReplyTos.get(id); + } + }); - while (id) { - mutable.unshift(id); - id = state.getIn(['contexts', 'inReplyTos', id]); - } - }); + return ancestorsIds; + }); + + const getDescendantsIds = createSelector([ + (_, { id }) => id, + state => state.getIn(['contexts', 'replies']), + state => state.get('statuses'), + ], (statusId, contextReplies, statuses) => { + let descendantsIds = []; + const ids = [statusId]; - descendantsIds = descendantsIds.withMutations(mutable => { - const ids = [status.get('id')]; + while (ids.length > 0) { + let id = ids.shift(); + const replies = contextReplies.get(id); - while (ids.length > 0) { - let id = ids.shift(); - const replies = state.getIn(['contexts', 'replies', id]); + if (statusId !== id) { + descendantsIds.push(id); + } - if (status.get('id') !== id) { - mutable.push(id); - } + if (replies) { + replies.reverse().forEach(reply => { + ids.unshift(reply); + }); + } + } - if (replies) { - replies.reverse().forEach(reply => { - ids.unshift(reply); - }); - } + let insertAt = descendantsIds.findIndex((id) => statuses.get(id).get('in_reply_to_account_id') !== statuses.get(id).get('account')); + if (insertAt !== -1) { + descendantsIds.forEach((id, idx) => { + if (idx > insertAt && statuses.get(id).get('in_reply_to_account_id') === statuses.get(id).get('account')) { + descendantsIds.splice(idx, 1); + descendantsIds.splice(insertAt, 0, id); + insertAt += 1; } }); } + return Immutable.List(descendantsIds); + }); + + const mapStateToProps = (state, props) => { + const status = getStatus(state, { id: props.params.statusId }); + let ancestorsIds = Immutable.List(); + let descendantsIds = Immutable.List(); + + if (status) { + ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') }); + descendantsIds = getDescendantsIds(state, { id: status.get('id') }); + } + return { status, ancestorsIds, @@ -109,9 +138,9 @@ const makeMapStateToProps = () => { return mapStateToProps; }; -@injectIntl +export default @injectIntl @connect(makeMapStateToProps) -export default class Status extends ImmutablePureComponent { +class Status extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -126,6 +155,7 @@ export default class Status extends ImmutablePureComponent { descendantsIds: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, askReplyConfirmation: PropTypes.bool, + multiColumn: PropTypes.bool, domain: PropTypes.string.isRequired, }; @@ -290,6 +320,22 @@ export default class Status extends ImmutablePureComponent { this.props.dispatch(openModal('VIDEO', { media, time })); } + handleHotkeyOpenMedia = e => { + const { status } = this.props; + + e.preventDefault(); + + if (status.get('media_attachments').size > 0) { + if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + // TODO: toggle play/paused? + } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + this.handleOpenVideo(status.getIn(['media_attachments', 0]), 0); + } else { + this.handleOpenMedia(status.get('media_attachments'), 0); + } + } + } + handleMuteClick = (account) => { this.props.dispatch(initMuteModal(account)); } @@ -308,19 +354,9 @@ export default class Status extends ImmutablePureComponent { } handleBlockClick = (status) => { - const { dispatch, intl } = this.props; + const { dispatch } = this.props; const account = status.get('account'); - - dispatch(openModal('CONFIRM', { - message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, - confirm: intl.formatMessage(messages.blockConfirm), - onConfirm: () => dispatch(blockAccount(account.get('id'))), - secondary: intl.formatMessage(messages.blockAndReport), - onSecondary: () => { - dispatch(blockAccount(account.get('id'))); - dispatch(initReport(account, status)); - }, - })); + dispatch(initBlockModal(account)); } handleReport = (status) => { @@ -478,13 +514,13 @@ export default class Status extends ImmutablePureComponent { render () { let ancestors, descendants; const { setExpansion } = this; - const { status, settings, ancestorsIds, descendantsIds, intl, domain } = this.props; + const { status, settings, ancestorsIds, descendantsIds, intl, domain, multiColumn } = this.props; const { fullscreen, isExpanded } = this.state; if (status === null) { return ( <Column> - <ColumnBackButton /> + <ColumnBackButton multiColumn={multiColumn} /> <MissingIndicator /> </Column> ); @@ -509,17 +545,19 @@ export default class Status extends ImmutablePureComponent { openProfile: this.handleHotkeyOpenProfile, toggleSpoiler: this.handleExpandedToggle, toggleSensitive: this.handleHotkeyToggleSensitive, + openMedia: this.handleHotkeyOpenMedia, }; return ( - <Column ref={this.setColumnRef} label={intl.formatMessage(messages.detailedStatus)}> + <Column bindToDocument={!multiColumn} ref={this.setColumnRef} label={intl.formatMessage(messages.detailedStatus)}> <ColumnHeader icon='comment' title={intl.formatMessage(messages.tootHeading)} onClick={this.handleHeaderClick} showBackButton + multiColumn={multiColumn} extraButton={( - <button className='column-header__button' title={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={!isExpanded ? 'false' : 'true'}><i className={`fa fa-${!isExpanded ? 'eye-slash' : 'eye'}`} /></button> + <button className='column-header__button' title={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(!isExpanded ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={!isExpanded ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button> )} /> diff --git a/app/javascript/flavours/glitch/features/ui/components/actions_modal.js b/app/javascript/flavours/glitch/features/ui/components/actions_modal.js index 724f1c764..24169036c 100644 --- a/app/javascript/flavours/glitch/features/ui/components/actions_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/actions_modal.js @@ -68,8 +68,8 @@ export default class ActionsModal extends ImmutablePureComponent { return ( <Icon className='icon' - fullwidth - icon={icon} + fixedWidth + id={icon} /> ); default: @@ -92,12 +92,12 @@ export default class ActionsModal extends ImmutablePureComponent { <div className='status light'> <div className='boost-modal__status-header'> <div className='boost-modal__status-time'> - <a href={this.props.status.get('url')} className='status__relative-time' target='_blank' rel='noopener'> + <a href={this.props.status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'> <RelativeTimestamp timestamp={this.props.status.get('created_at')} /> </a> </div> - <a href={this.props.status.getIn(['account', 'url'])} className='status__display-name'> + <a href={this.props.status.getIn(['account', 'url'])} className='status__display-name' rel='noopener noreferrer'> <div className='status__avatar'> <Avatar account={this.props.status.get('account')} size={48} /> </div> diff --git a/app/javascript/flavours/glitch/features/ui/components/audio_modal.js b/app/javascript/flavours/glitch/features/ui/components/audio_modal.js new file mode 100644 index 000000000..08fbddc91 --- /dev/null +++ b/app/javascript/flavours/glitch/features/ui/components/audio_modal.js @@ -0,0 +1,53 @@ +import React from 'react'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import Audio from 'flavours/glitch/features/audio'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import { FormattedMessage } from 'react-intl'; +import classNames from 'classnames'; +import Icon from 'flavours/glitch/components/icon'; + +export default class AudioModal extends ImmutablePureComponent { + + static propTypes = { + media: ImmutablePropTypes.map.isRequired, + status: ImmutablePropTypes.map, + onClose: PropTypes.func.isRequired, + }; + + static contextTypes = { + router: PropTypes.object, + }; + + handleStatusClick = e => { + if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { + e.preventDefault(); + this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); + } + } + + render () { + const { media, status } = this.props; + + return ( + <div className='modal-root__modal audio-modal'> + <div className='audio-modal__container'> + <Audio + src={media.get('url')} + alt={media.get('description')} + duration={media.getIn(['meta', 'original', 'duration'], 0)} + height={135} + preload + /> + </div> + + {status && ( + <div className={classNames('media-modal__meta')}> + <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> + </div> + )} + </div> + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/ui/components/block_modal.js b/app/javascript/flavours/glitch/features/ui/components/block_modal.js new file mode 100644 index 000000000..a07baeaa6 --- /dev/null +++ b/app/javascript/flavours/glitch/features/ui/components/block_modal.js @@ -0,0 +1,103 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { injectIntl, FormattedMessage } from 'react-intl'; +import { makeGetAccount } from '../../../selectors'; +import Button from '../../../components/button'; +import { closeModal } from '../../../actions/modal'; +import { blockAccount } from '../../../actions/accounts'; +import { initReport } from '../../../actions/reports'; + + +const makeMapStateToProps = () => { + const getAccount = makeGetAccount(); + + const mapStateToProps = state => ({ + account: getAccount(state, state.getIn(['blocks', 'new', 'account_id'])), + }); + + return mapStateToProps; +}; + +const mapDispatchToProps = dispatch => { + return { + onConfirm(account) { + dispatch(blockAccount(account.get('id'))); + }, + + onBlockAndReport(account) { + dispatch(blockAccount(account.get('id'))); + dispatch(initReport(account)); + }, + + onClose() { + dispatch(closeModal()); + }, + }; +}; + +export default @connect(makeMapStateToProps, mapDispatchToProps) +@injectIntl +class BlockModal extends React.PureComponent { + + static propTypes = { + account: PropTypes.object.isRequired, + onClose: PropTypes.func.isRequired, + onBlockAndReport: PropTypes.func.isRequired, + onConfirm: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; + + componentDidMount() { + this.button.focus(); + } + + handleClick = () => { + this.props.onClose(); + this.props.onConfirm(this.props.account); + } + + handleSecondary = () => { + this.props.onClose(); + this.props.onBlockAndReport(this.props.account); + } + + handleCancel = () => { + this.props.onClose(); + } + + setRef = (c) => { + this.button = c; + } + + render () { + const { account } = this.props; + + return ( + <div className='modal-root__modal block-modal'> + <div className='block-modal__container'> + <p> + <FormattedMessage + id='confirmations.block.message' + defaultMessage='Are you sure you want to block {name}?' + values={{ name: <strong>@{account.get('acct')}</strong> }} + /> + </p> + </div> + + <div className='block-modal__action-bar'> + <Button onClick={this.handleCancel} className='block-modal__cancel-button'> + <FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' /> + </Button> + <Button onClick={this.handleSecondary} className='confirmation-modal__secondary-button'> + <FormattedMessage id='confirmations.block.block_and_report' defaultMessage='Block & Report' /> + </Button> + <Button onClick={this.handleClick} ref={this.setRef}> + <FormattedMessage id='confirmations.block.confirm' defaultMessage='Block' /> + </Button> + </div> + </div> + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/ui/components/boost_modal.js b/app/javascript/flavours/glitch/features/ui/components/boost_modal.js index 600e4422f..cd2929fdb 100644 --- a/app/javascript/flavours/glitch/features/ui/components/boost_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/boost_modal.js @@ -8,6 +8,7 @@ import Avatar from 'flavours/glitch/components/avatar'; import RelativeTimestamp from 'flavours/glitch/components/relative_timestamp'; import DisplayName from 'flavours/glitch/components/display_name'; import AttachmentList from 'flavours/glitch/components/attachment_list'; +import Icon from 'flavours/glitch/components/icon'; import ImmutablePureComponent from 'react-immutable-pure-component'; const messages = defineMessages({ @@ -15,8 +16,8 @@ const messages = defineMessages({ reblog: { id: 'status.reblog', defaultMessage: 'Boost' }, }); -@injectIntl -export default class BoostModal extends ImmutablePureComponent { +export default @injectIntl +class BoostModal extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -63,7 +64,7 @@ export default class BoostModal extends ImmutablePureComponent { <div className='status light'> <div className='boost-modal__status-header'> <div className='boost-modal__status-time'> - <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener'><RelativeTimestamp timestamp={status.get('created_at')} /></a> + <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'><RelativeTimestamp timestamp={status.get('created_at')} /></a> </div> <a onClick={this.handleAccountClick} href={status.getIn(['account', 'url'])} className='status__display-name'> @@ -91,7 +92,7 @@ export default class BoostModal extends ImmutablePureComponent { { missingMediaDescription ? <FormattedMessage id='boost_modal.missing_description' defaultMessage='This toot contains some media without description' /> : - <FormattedMessage id='boost_modal.combo' defaultMessage='You can press {combo} to skip this next time' values={{ combo: <span>Shift + <i className='fa fa-retweet' /></span> }} /> + <FormattedMessage id='boost_modal.combo' defaultMessage='You can press {combo} to skip this next time' values={{ combo: <span>Shift + <Icon id='retweet' /></span> }} /> } </div> <Button text={intl.formatMessage(buttonText)} onClick={this.handleReblog} ref={this.setRef} /> diff --git a/app/javascript/flavours/glitch/features/ui/components/column_header.js b/app/javascript/flavours/glitch/features/ui/components/column_header.js index e8bdd8054..528ff73a6 100644 --- a/app/javascript/flavours/glitch/features/ui/components/column_header.js +++ b/app/javascript/flavours/glitch/features/ui/components/column_header.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; +import Icon from 'flavours/glitch/components/icon'; export default class ColumnHeader extends React.PureComponent { @@ -21,7 +22,7 @@ export default class ColumnHeader extends React.PureComponent { let iconElement = ''; if (icon) { - iconElement = <i className={`fa fa-fw fa-${icon} column-header__icon`} />; + iconElement = <Icon id={icon} fixedWidth className='column-header__icon' />; } return ( diff --git a/app/javascript/flavours/glitch/features/ui/components/column_link.js b/app/javascript/flavours/glitch/features/ui/components/column_link.js index 1b6d7d09e..d04b869b6 100644 --- a/app/javascript/flavours/glitch/features/ui/components/column_link.js +++ b/app/javascript/flavours/glitch/features/ui/components/column_link.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; +import Icon from 'flavours/glitch/components/icon'; const ColumnLink = ({ icon, text, to, onClick, href, method, badge }) => { const badgeElement = typeof badge !== 'undefined' ? <span className='column-link__badge'>{badge}</span> : null; @@ -8,7 +9,7 @@ const ColumnLink = ({ icon, text, to, onClick, href, method, badge }) => { if (href) { return ( <a href={href} className='column-link' data-method={method}> - <i className={`fa fa-fw fa-${icon} column-link__icon`} /> + <Icon id={icon} fixedWidth className='column-link__icon' /> {text} {badgeElement} </a> @@ -16,7 +17,7 @@ const ColumnLink = ({ icon, text, to, onClick, href, method, badge }) => { } else if (to) { return ( <Link to={to} className='column-link'> - <i className={`fa fa-fw fa-${icon} column-link__icon`} /> + <Icon id={icon} fixedWidth className='column-link__icon' /> {text} {badgeElement} </Link> @@ -29,7 +30,7 @@ const ColumnLink = ({ icon, text, to, onClick, href, method, badge }) => { } return ( <a href='#' onClick={onClick && handleOnClick} className='column-link' tabIndex='0'> - <i className={`fa fa-fw fa-${icon} column-link__icon`} /> + <Icon id={icon} fixedWidth className='column-link__icon' /> {text} {badgeElement} </a> diff --git a/app/javascript/flavours/glitch/features/ui/components/column_loading.js b/app/javascript/flavours/glitch/features/ui/components/column_loading.js index ba2d0824e..22c00c915 100644 --- a/app/javascript/flavours/glitch/features/ui/components/column_loading.js +++ b/app/javascript/flavours/glitch/features/ui/components/column_loading.js @@ -21,7 +21,7 @@ export default class ColumnLoading extends ImmutablePureComponent { let { title, icon } = this.props; return ( <Column> - <ColumnHeader icon={icon} title={title} multiColumn={false} focusable={false} /> + <ColumnHeader icon={icon} title={title} multiColumn={false} focusable={false} placeholder /> <div className='scrollable' /> </Column> ); diff --git a/app/javascript/flavours/glitch/features/ui/components/columns_area.js b/app/javascript/flavours/glitch/features/ui/components/columns_area.js index 3a188ca87..431909c72 100644 --- a/app/javascript/flavours/glitch/features/ui/components/columns_area.js +++ b/app/javascript/flavours/glitch/features/ui/components/columns_area.js @@ -12,7 +12,20 @@ import BundleContainer from '../containers/bundle_container'; import ColumnLoading from './column_loading'; import DrawerLoading from './drawer_loading'; import BundleColumnError from './bundle_column_error'; -import { Compose, Notifications, HomeTimeline, CommunityTimeline, PublicTimeline, HashtagTimeline, DirectTimeline, FavouritedStatuses, BookmarkedStatuses, ListTimeline } from 'flavours/glitch/util/async-components'; +import { + Compose, + Notifications, + HomeTimeline, + CommunityTimeline, + PublicTimeline, + HashtagTimeline, + DirectTimeline, + FavouritedStatuses, + BookmarkedStatuses, + ListTimeline, + Directory, +} from 'flavours/glitch/util/async-components'; +import Icon from 'flavours/glitch/components/icon'; import ComposePanel from './compose_panel'; import NavigationPanel from './navigation_panel'; @@ -30,6 +43,7 @@ const componentMap = { 'FAVOURITES': FavouritedStatuses, 'BOOKMARKS': BookmarkedStatuses, 'LIST': ListTimeline, + 'DIRECTORY': Directory, }; const shouldHideFAB = path => path.match(/^\/statuses\/|^\/search|^\/getting-started/); @@ -38,8 +52,8 @@ const messages = defineMessages({ publish: { id: 'compose_form.publish', defaultMessage: 'Toot' }, }); -@component => injectIntl(component, { withRef: true }) -export default class ColumnsArea extends ImmutablePureComponent { +export default @(component => injectIntl(component, { withRef: true })) +class ColumnsArea extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object.isRequired, @@ -112,6 +126,11 @@ export default class ColumnsArea extends ImmutablePureComponent { // React-router does this for us, but too late, feeling laggy. document.querySelector(currentLinkSelector).classList.remove('active'); document.querySelector(nextLinkSelector).classList.add('active'); + + if (!this.state.shouldAnimate && typeof this.pendingIndex === 'number') { + this.context.router.history.push(getLink(this.pendingIndex)); + this.pendingIndex = null; + } } handleAnimationEnd = () => { @@ -162,13 +181,12 @@ export default class ColumnsArea extends ImmutablePureComponent { const { shouldAnimate } = this.state; const columnIndex = getIndex(this.context.router.history.location.pathname); - this.pendingIndex = null; if (singleColumn) { - const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : <Link key='floating-action-button' to='/statuses/new' className='floating-action-button' aria-label={intl.formatMessage(messages.publish)}><i className='fa fa-pencil' /></Link>; + const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : <Link key='floating-action-button' to='/statuses/new' className='floating-action-button' aria-label={intl.formatMessage(messages.publish)}><Icon id='pencil' /></Link>; const content = columnIndex !== -1 ? ( - <ReactSwipeableViews key='content' index={columnIndex} onChangeIndex={this.handleSwipe} onTransitionEnd={this.handleAnimationEnd} animateTransitions={shouldAnimate} springConfig={{ duration: '400ms', delay: '0s', easeFunction: 'ease' }} style={{ height: '100%' }} disabled={!swipeToChangeColumns}> + <ReactSwipeableViews key='content' hysteresis={0.2} threshold={15} index={columnIndex} onChangeIndex={this.handleSwipe} onTransitionEnd={this.handleAnimationEnd} animateTransitions={shouldAnimate} springConfig={{ duration: '400ms', delay: '0s', easeFunction: 'ease' }} style={{ height: '100%' }} disabled={!swipeToChangeColumns}> {links.map(this.renderView)} </ReactSwipeableViews> ) : ( diff --git a/app/javascript/flavours/glitch/features/ui/components/confirmation_modal.js b/app/javascript/flavours/glitch/features/ui/components/confirmation_modal.js index 970df30b6..47a49c0c7 100644 --- a/app/javascript/flavours/glitch/features/ui/components/confirmation_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/confirmation_modal.js @@ -3,8 +3,8 @@ import PropTypes from 'prop-types'; import { injectIntl, FormattedMessage } from 'react-intl'; import Button from 'flavours/glitch/components/button'; -@injectIntl -export default class ConfirmationModal extends React.PureComponent { +export default @injectIntl +class ConfirmationModal extends React.PureComponent { static propTypes = { message: PropTypes.node.isRequired, diff --git a/app/javascript/flavours/glitch/features/ui/components/doodle_modal.js b/app/javascript/flavours/glitch/features/ui/components/doodle_modal.js index 72f7f30b9..0d10204fc 100644 --- a/app/javascript/flavours/glitch/features/ui/components/doodle_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/doodle_modal.js @@ -145,8 +145,8 @@ const mapDispatchToProps = dispatch => ({ * - Ctrl + left mouse button: pick background * - Right mouse button: pick background */ -@connect(mapStateToProps, mapDispatchToProps) -export default class DoodleModal extends ImmutablePureComponent { +export default @connect(mapStateToProps, mapDispatchToProps) +class DoodleModal extends ImmutablePureComponent { static propTypes = { options: ImmutablePropTypes.map, diff --git a/app/javascript/flavours/glitch/features/ui/components/embed_modal.js b/app/javascript/flavours/glitch/features/ui/components/embed_modal.js index b1643df1c..b6f5e628d 100644 --- a/app/javascript/flavours/glitch/features/ui/components/embed_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/embed_modal.js @@ -1,11 +1,16 @@ import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { FormattedMessage, injectIntl } from 'react-intl'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import api from 'flavours/glitch/util/api'; +import IconButton from 'flavours/glitch/components/icon_button'; -@injectIntl -export default class EmbedModal extends ImmutablePureComponent { +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +export default @injectIntl +class EmbedModal extends ImmutablePureComponent { static propTypes = { url: PropTypes.string.isRequired, @@ -50,13 +55,17 @@ export default class EmbedModal extends ImmutablePureComponent { } render () { + const { intl, onClose } = this.props; const { oembed } = this.state; return ( - <div className='modal-root__modal embed-modal'> - <h4><FormattedMessage id='status.embed' defaultMessage='Embed' /></h4> + <div className='modal-root__modal report-modal embed-modal'> + <div className='report-modal__target'> + <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} /> + <FormattedMessage id='status.embed' defaultMessage='Embed' /> + </div> - <div className='embed-modal__container'> + <div className='report-modal__container embed-modal__container' style={{ display: 'block' }}> <p className='hint'> <FormattedMessage id='embed.instructions' defaultMessage='Embed this status on your website by copying the code below.' /> </p> diff --git a/app/javascript/flavours/glitch/features/ui/components/favourite_modal.js b/app/javascript/flavours/glitch/features/ui/components/favourite_modal.js index e0037a15f..176e7c487 100644 --- a/app/javascript/flavours/glitch/features/ui/components/favourite_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/favourite_modal.js @@ -7,14 +7,15 @@ import StatusContent from 'flavours/glitch/components/status_content'; import Avatar from 'flavours/glitch/components/avatar'; import RelativeTimestamp from 'flavours/glitch/components/relative_timestamp'; import DisplayName from 'flavours/glitch/components/display_name'; +import Icon from 'flavours/glitch/components/icon'; import ImmutablePureComponent from 'react-immutable-pure-component'; const messages = defineMessages({ favourite: { id: 'status.favourite', defaultMessage: 'Favourite' }, }); -@injectIntl -export default class FavouriteModal extends ImmutablePureComponent { +export default @injectIntl +class FavouriteModal extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -76,7 +77,7 @@ export default class FavouriteModal extends ImmutablePureComponent { </div> <div className='favourite-modal__action-bar'> - <div><FormattedMessage id='favourite_modal.combo' defaultMessage='You can press {combo} to skip this next time' values={{ combo: <span>Shift + <i className='fa fa-star' /></span> }} /></div> + <div><FormattedMessage id='favourite_modal.combo' defaultMessage='You can press {combo} to skip this next time' values={{ combo: <span>Shift + <Icon id='star' /></span> }} /></div> <Button text={intl.formatMessage(messages.favourite)} onClick={this.handleFavourite} ref={this.setRef} /> </div> </div> diff --git a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.js b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.js index 57c92cc66..77e4bbfa5 100644 --- a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.js @@ -1,11 +1,28 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import ImageLoader from './image_loader'; import classNames from 'classnames'; import { changeUploadCompose } from 'flavours/glitch/actions/compose'; import { getPointerPosition } from 'flavours/glitch/features/video'; +import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; +import IconButton from 'flavours/glitch/components/icon_button'; +import Button from 'flavours/glitch/components/button'; +import Video from 'flavours/glitch/features/video'; +import Audio from 'flavours/glitch/features/audio'; +import Textarea from 'react-textarea-autosize'; +import UploadProgress from 'flavours/glitch/features/compose/components/upload_progress'; +import CharacterCounter from 'flavours/glitch/features/compose/components/character_counter'; +import { length } from 'stringz'; +import { Tesseract as fetchTesseract } from 'flavours/glitch/util/async-components'; +import GIFV from 'flavours/glitch/components/gifv'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, + apply: { id: 'upload_modal.apply', defaultMessage: 'Apply' }, + placeholder: { id: 'upload_modal.description_placeholder', defaultMessage: 'A quick brown fox jumps over the lazy dog' }, +}); const mapStateToProps = (state, { id }) => ({ media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id), @@ -13,17 +30,56 @@ const mapStateToProps = (state, { id }) => ({ const mapDispatchToProps = (dispatch, { id }) => ({ - onSave: (x, y) => { - dispatch(changeUploadCompose(id, { focus: `${x.toFixed(2)},${y.toFixed(2)}` })); + onSave: (description, x, y) => { + dispatch(changeUploadCompose(id, { description, focus: `${x.toFixed(2)},${y.toFixed(2)}` })); }, }); -@connect(mapStateToProps, mapDispatchToProps) -export default class FocalPointModal extends ImmutablePureComponent { +const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******') + .replace(/\n/g, ' ') + .replace(/\*\*\*\*\*\*/g, '\n\n'); + +const assetHost = process.env.CDN_HOST || ''; + +class ImageLoader extends React.PureComponent { + + static propTypes = { + src: PropTypes.string.isRequired, + width: PropTypes.number, + height: PropTypes.number, + }; + + state = { + loading: true, + }; + + componentDidMount() { + const image = new Image(); + image.addEventListener('load', () => this.setState({ loading: false })); + image.src = this.props.src; + } + + render () { + const { loading } = this.state; + + if (loading) { + return <canvas width={this.props.width} height={this.props.height} />; + } else { + return <img {...this.props} alt='' />; + } + } + +} + +export default @connect(mapStateToProps, mapDispatchToProps) +@injectIntl +class FocalPointModal extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.map.isRequired, + onClose: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, }; state = { @@ -32,6 +88,10 @@ export default class FocalPointModal extends ImmutablePureComponent { focusX: 0, focusY: 0, dragging: false, + description: '', + dirty: false, + progress: 0, + loading: true, }; componentWillMount () { @@ -57,6 +117,14 @@ export default class FocalPointModal extends ImmutablePureComponent { this.setState({ dragging: true }); } + handleTouchStart = e => { + document.addEventListener('touchmove', this.handleMouseMove); + document.addEventListener('touchend', this.handleTouchEnd); + + this.updatePosition(e); + this.setState({ dragging: true }); + } + handleMouseMove = e => { this.updatePosition(e); } @@ -66,7 +134,13 @@ export default class FocalPointModal extends ImmutablePureComponent { document.removeEventListener('mouseup', this.handleMouseUp); this.setState({ dragging: false }); - this.props.onSave(this.state.focusX, this.state.focusY); + } + + handleTouchEnd = () => { + document.removeEventListener('touchmove', this.handleMouseMove); + document.removeEventListener('touchend', this.handleTouchEnd); + + this.setState({ dragging: false }); } updatePosition = e => { @@ -74,46 +148,188 @@ export default class FocalPointModal extends ImmutablePureComponent { const focusX = (x - .5) * 2; const focusY = (y - .5) * -2; - this.setState({ x, y, focusX, focusY }); + this.setState({ x, y, focusX, focusY, dirty: true }); } updatePositionFromMedia = media => { - const focusX = media.getIn(['meta', 'focus', 'x']); - const focusY = media.getIn(['meta', 'focus', 'y']); + const focusX = media.getIn(['meta', 'focus', 'x']); + const focusY = media.getIn(['meta', 'focus', 'y']); + const description = media.get('description') || ''; if (focusX && focusY) { const x = (focusX / 2) + .5; const y = (focusY / -2) + .5; - this.setState({ x, y, focusX, focusY }); + this.setState({ + x, + y, + focusX, + focusY, + description, + dirty: false, + }); } else { - this.setState({ x: 0.5, y: 0.5, focusX: 0, focusY: 0 }); + this.setState({ + x: 0.5, + y: 0.5, + focusX: 0, + focusY: 0, + description, + dirty: false, + }); } } + handleChange = e => { + this.setState({ description: e.target.value, dirty: true }); + } + + handleKeyDown = (e) => { + if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) { + e.preventDefault(); + e.stopPropagation(); + this.setState({ description: e.target.value, dirty: true }); + this.handleSubmit(); + } + } + + handleSubmit = () => { + this.props.onSave(this.state.description, this.state.focusX, this.state.focusY); + this.props.onClose(); + } + setRef = c => { this.node = c; } - render () { + handleTextDetection = () => { const { media } = this.props; - const { x, y, dragging } = this.state; + + this.setState({ detecting: true }); + + fetchTesseract().then(({ TesseractWorker }) => { + const worker = new TesseractWorker({ + workerPath: `${assetHost}/packs/ocr/worker.min.js`, + corePath: `${assetHost}/packs/ocr/tesseract-core.wasm.js`, + langPath: `${assetHost}/ocr/lang-data`, + }); + + let media_url = media.get('url'); + + if (window.URL && URL.createObjectURL) { + try { + media_url = URL.createObjectURL(media.get('file')); + } catch (error) { + console.error(error); + } + } + + worker.recognize(media_url) + .progress(({ progress }) => this.setState({ progress })) + .finally(() => worker.terminate()) + .then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false })) + .catch(() => this.setState({ detecting: false })); + }).catch(() => this.setState({ detecting: false })); + } + + render () { + const { media, intl, onClose } = this.props; + const { x, y, dragging, description, dirty, detecting, progress } = this.state; const width = media.getIn(['meta', 'original', 'width']) || null; const height = media.getIn(['meta', 'original', 'height']) || null; + const focals = ['image', 'gifv'].includes(media.get('type')); + + const previewRatio = 16/9; + const previewWidth = 200; + const previewHeight = previewWidth / previewRatio; + + let descriptionLabel = null; + + if (media.get('type') === 'audio') { + descriptionLabel = <FormattedMessage id='upload_form.audio_description' defaultMessage='Describe for people with hearing loss' />; + } else if (media.get('type') === 'video') { + descriptionLabel = <FormattedMessage id='upload_form.video_description' defaultMessage='Describe for people with hearing loss or visual impairment' />; + } else { + descriptionLabel = <FormattedMessage id='upload_form.description' defaultMessage='Describe for the visually impaired' />; + } return ( - <div className='modal-root__modal video-modal focal-point-modal'> - <div className={classNames('focal-point', { dragging })} ref={this.setRef}> - <ImageLoader - previewSrc={media.get('preview_url')} - src={media.get('url')} - width={width} - height={height} - /> - - <div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} /> - <div className='focal-point__overlay' onMouseDown={this.handleMouseDown} /> + <div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}> + <div className='report-modal__target'> + <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} /> + <FormattedMessage id='upload_modal.edit_media' defaultMessage='Edit media' /> + </div> + + <div className='report-modal__container'> + <div className='report-modal__comment'> + {focals && <p><FormattedMessage id='upload_modal.hint' defaultMessage='Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.' /></p>} + + <label className='setting-text-label' htmlFor='upload-modal__description'> + {descriptionLabel} + </label> + + <div className='setting-text__wrapper'> + <Textarea + id='upload-modal__description' + className='setting-text light' + value={detecting ? '…' : description} + onChange={this.handleChange} + onKeyDown={this.handleKeyDown} + disabled={detecting} + autoFocus + /> + + <div className='setting-text__modifiers'> + <UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={<FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />} /> + </div> + </div> + + <div className='setting-text__toolbar'> + <button disabled={detecting || media.get('type') !== 'image'} className='link-button' onClick={this.handleTextDetection}><FormattedMessage id='upload_modal.detect_text' defaultMessage='Detect text from picture' /></button> + <CharacterCounter max={1500} text={detecting ? '' : description} /> + </div> + + <Button disabled={!dirty || detecting || length(description) > 1500} text={intl.formatMessage(messages.apply)} onClick={this.handleSubmit} /> + </div> + + <div className='focal-point-modal__content'> + {focals && ( + <div className={classNames('focal-point', { dragging })} ref={this.setRef} onMouseDown={this.handleMouseDown} onTouchStart={this.handleTouchStart}> + {media.get('type') === 'image' && <ImageLoader src={media.get('url')} width={width} height={height} alt='' />} + {media.get('type') === 'gifv' && <GIFV src={media.get('url')} width={width} height={height} />} + + <div className='focal-point__preview'> + <strong><FormattedMessage id='upload_modal.preview_label' defaultMessage='Preview ({ratio})' values={{ ratio: '16:9' }} /></strong> + <div style={{ width: previewWidth, height: previewHeight, backgroundImage: `url(${media.get('preview_url')})`, backgroundSize: 'cover', backgroundPosition: `${x * 100}% ${y * 100}%` }} /> + </div> + + <div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} /> + <div className='focal-point__overlay' /> + </div> + )} + + {media.get('type') === 'video' && ( + <Video + preview={media.get('preview_url')} + blurhash={media.get('blurhash')} + src={media.get('url')} + detailed + inline + editable + /> + )} + + {media.get('type') === 'audio' && ( + <Audio + src={media.get('url')} + duration={media.getIn(['meta', 'original', 'duration'], 0)} + height={150} + preload + editable + /> + )} + </div> </div> </div> ); diff --git a/app/javascript/flavours/glitch/features/ui/components/follow_requests_nav_link.js b/app/javascript/flavours/glitch/features/ui/components/follow_requests_nav_link.js index 189f403bd..c30427896 100644 --- a/app/javascript/flavours/glitch/features/ui/components/follow_requests_nav_link.js +++ b/app/javascript/flavours/glitch/features/ui/components/follow_requests_nav_link.js @@ -4,12 +4,10 @@ import { fetchFollowRequests } from 'flavours/glitch/actions/accounts'; import { connect } from 'react-redux'; import { NavLink, withRouter } from 'react-router-dom'; import IconWithBadge from 'flavours/glitch/components/icon_with_badge'; -import { me } from 'flavours/glitch/util/initial_state'; import { List as ImmutableList } from 'immutable'; import { FormattedMessage } from 'react-intl'; const mapStateToProps = state => ({ - locked: state.getIn(['accounts', me, 'locked']), count: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size, }); @@ -19,22 +17,19 @@ class FollowRequestsNavLink extends React.Component { static propTypes = { dispatch: PropTypes.func.isRequired, - locked: PropTypes.bool, count: PropTypes.number.isRequired, }; componentDidMount () { - const { dispatch, locked } = this.props; + const { dispatch } = this.props; - if (locked) { - dispatch(fetchFollowRequests()); - } + dispatch(fetchFollowRequests()); } render () { - const { locked, count } = this.props; + const { count } = this.props; - if (!locked || count === 0) { + if (count === 0) { return null; } diff --git a/app/javascript/flavours/glitch/features/ui/components/link_footer.js b/app/javascript/flavours/glitch/features/ui/components/link_footer.js index e63ed274e..f8d0d528d 100644 --- a/app/javascript/flavours/glitch/features/ui/components/link_footer.js +++ b/app/javascript/flavours/glitch/features/ui/components/link_footer.js @@ -1,37 +1,72 @@ +import { connect } from 'react-redux'; import React from 'react'; import PropTypes from 'prop-types'; -import { FormattedMessage } from 'react-intl'; +import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router-dom'; import { invitesEnabled, version, repository, source_url } from 'flavours/glitch/util/initial_state'; -import { signOutLink } from 'flavours/glitch/util/backend_links'; - -const LinkFooter = () => ( - <div className='getting-started__footer'> - <ul> - {invitesEnabled && <li><a href='/invites' target='_blank'><FormattedMessage id='getting_started.invite' defaultMessage='Invite people' /></a> · </li>} - <li><a href='/auth/edit'><FormattedMessage id='getting_started.security' defaultMessage='Security' /></a> · </li> - <li><a href='/about/more' target='_blank'><FormattedMessage id='navigation_bar.info' defaultMessage='About this server' /></a> · </li> - <li><a href='https://joinmastodon.org/apps' target='_blank'><FormattedMessage id='navigation_bar.apps' defaultMessage='Mobile apps' /></a> · </li> - <li><a href='/terms' target='_blank'><FormattedMessage id='getting_started.terms' defaultMessage='Terms of service' /></a> · </li> - <li><a href='/settings/applications' target='_blank'><FormattedMessage id='getting_started.developers' defaultMessage='Developers' /></a> · </li> - <li><a href='https://docs.joinmastodon.org' target='_blank'><FormattedMessage id='getting_started.documentation' defaultMessage='Documentation' /></a> · </li> - <li><a href={signOutLink} data-method='delete'><FormattedMessage id='navigation_bar.logout' defaultMessage='Logout' /></a></li> - </ul> - - <p> - <FormattedMessage - id='getting_started.open_source_notice' - defaultMessage='GlitchCafe is open source software, based on {Glitchsoc} which is a friendly fork of {Mastodon}. You can contribute or report issues on GitHub at {github}.' - values={{ - github: <span><a href='https://github.com/pluralcafe/mastodon' rel='noopener' target='_blank'>pluralcafe/mastodon</a> (v{version})</span>, - Glitchsoc: <a href='https://github.com/glitch-soc/mastodon' rel='noopener' target='_blank'>glitch-soc/mastodon</a>, - Mastodon: <a href='https://github.com/tootsuite/mastodon' rel='noopener' target='_blank'>Mastodon</a> }} - /> - </p> - </div> -); - -LinkFooter.propTypes = { -}; +import { signOutLink, securityLink } from 'flavours/glitch/util/backend_links'; +import { logOut } from 'flavours/glitch/util/log_out'; +import { openModal } from 'flavours/glitch/actions/modal'; + +const messages = defineMessages({ + logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' }, + logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' }, +}); + +const mapDispatchToProps = (dispatch, { intl }) => ({ + onLogout () { + dispatch(openModal('CONFIRM', { + message: intl.formatMessage(messages.logoutMessage), + confirm: intl.formatMessage(messages.logoutConfirm), + onConfirm: () => logOut(), + })); + }, +}); + +export default @injectIntl +@connect(null, mapDispatchToProps) +class LinkFooter extends React.PureComponent { + + static propTypes = { + onLogout: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; -export default LinkFooter; + handleLogoutClick = e => { + e.preventDefault(); + e.stopPropagation(); + + this.props.onLogout(); + + return false; + } + + render () { + return ( + <div className='getting-started__footer'> + <ul> + {invitesEnabled && <li><a href='/invites' target='_blank'><FormattedMessage id='getting_started.invite' defaultMessage='Invite people' /></a> · </li>} + {!!securityLink && <li><a href='/auth/edit'><FormattedMessage id='getting_started.security' defaultMessage='Security' /></a> · </li>} + <li><a href='/about/more' target='_blank'><FormattedMessage id='navigation_bar.info' defaultMessage='About this server' /></a> · </li> + <li><a href='https://joinmastodon.org/apps' target='_blank'><FormattedMessage id='navigation_bar.apps' defaultMessage='Mobile apps' /></a> · </li> + <li><a href='/terms' target='_blank'><FormattedMessage id='getting_started.terms' defaultMessage='Terms of service' /></a> · </li> + <li><a href='/settings/applications' target='_blank'><FormattedMessage id='getting_started.developers' defaultMessage='Developers' /></a> · </li> + <li><a href='https://docs.joinmastodon.org' target='_blank'><FormattedMessage id='getting_started.documentation' defaultMessage='Documentation' /></a> · </li> + <li><a href={signOutLink} onClick={this.handleLogoutClick}><FormattedMessage id='navigation_bar.logout' defaultMessage='Logout' /></a></li> + </ul> + + <p> + <FormattedMessage + id='getting_started.open_source_notice' + defaultMessage='GlitchCafe is open source software, based on {Glitchsoc} which is a friendly fork of {Mastodon}. You can contribute or report issues on GitHub at {github}.' + values={{ + github: <span><a href='https://github.com/pluralcafe/mastodon' rel='noopener' target='_blank'>pluralcafe/mastodon</a> (v{version})</span>, + Glitchsoc: <a href='https://github.com/glitch-soc/mastodon' rel='noopener' target='_blank'>glitch-soc/mastodon</a>, + Mastodon: <a href='https://github.com/tootsuite/mastodon' rel='noopener' target='_blank'>Mastodon</a> }} + /> + </p> + </div> + ); + } + +}; diff --git a/app/javascript/flavours/glitch/features/ui/components/list_panel.js b/app/javascript/flavours/glitch/features/ui/components/list_panel.js index b2e6925b7..354e35027 100644 --- a/app/javascript/flavours/glitch/features/ui/components/list_panel.js +++ b/app/javascript/flavours/glitch/features/ui/components/list_panel.js @@ -46,7 +46,7 @@ class ListPanel extends ImmutablePureComponent { <hr /> {lists.map(list => ( - <NavLink key={list.get('id')} className='column-link column-link--transparent' strict to={`/timelines/list/${list.get('id')}`}><Icon className='column-link__icon' icon='list-ul' fixedWidth />{list.get('title')}</NavLink> + <NavLink key={list.get('id')} className='column-link column-link--transparent' strict to={`/timelines/list/${list.get('id')}`}><Icon className='column-link__icon' id='list-ul' fixedWidth />{list.get('title')}</NavLink> ))} </div> ); diff --git a/app/javascript/flavours/glitch/features/ui/components/media_modal.js b/app/javascript/flavours/glitch/features/ui/components/media_modal.js index ce6660480..c7d6c374c 100644 --- a/app/javascript/flavours/glitch/features/ui/components/media_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/media_modal.js @@ -3,12 +3,13 @@ import ReactSwipeableViews from 'react-swipeable-views'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import Video from 'flavours/glitch/features/video'; -import ExtendedVideoPlayer from 'flavours/glitch/components/extended_video_player'; import classNames from 'classnames'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import IconButton from 'flavours/glitch/components/icon_button'; import ImmutablePureComponent from 'react-immutable-pure-component'; import ImageLoader from './image_loader'; +import Icon from 'flavours/glitch/components/icon'; +import GIFV from 'flavours/glitch/components/gifv'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -16,8 +17,8 @@ const messages = defineMessages({ next: { id: 'lightbox.next', defaultMessage: 'Next' }, }); -@injectIntl -export default class MediaModal extends ImmutablePureComponent { +export default @injectIntl +class MediaModal extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -100,8 +101,8 @@ export default class MediaModal extends ImmutablePureComponent { const index = this.getIndex(); let pagination = []; - const leftNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><i className='fa fa-fw fa-chevron-left' /></button>; - const rightNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><i className='fa fa-fw fa-chevron-right' /></button>; + const leftNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='chevron-left' fixedWidth /></button>; + const rightNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='chevron-right' fixedWidth /></button>; if (media.size > 1) { pagination = media.map((item, i) => { @@ -148,10 +149,8 @@ export default class MediaModal extends ImmutablePureComponent { ); } else if (image.get('type') === 'gifv') { return ( - <ExtendedVideoPlayer + <GIFV src={image.get('url')} - muted - controls={false} width={width} height={height} key={image.get('preview_url')} @@ -207,7 +206,7 @@ export default class MediaModal extends ImmutablePureComponent { {status && ( <div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}> - <a href={status.get('url')} onClick={this.handleStatusClick}><FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> + <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> </div> )} diff --git a/app/javascript/flavours/glitch/features/ui/components/modal_root.js b/app/javascript/flavours/glitch/features/ui/components/modal_root.js index 303e05db6..488daf0cc 100644 --- a/app/javascript/flavours/glitch/features/ui/components/modal_root.js +++ b/app/javascript/flavours/glitch/features/ui/components/modal_root.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Base from '../../../components/modal_root'; +import { getScrollbarWidth } from 'flavours/glitch/util/scrollbar'; +import Base from 'flavours/glitch/components/modal_root'; import BundleContainer from '../containers/bundle_container'; import BundleModalError from './bundle_modal_error'; import ModalLoading from './modal_loading'; @@ -9,12 +10,14 @@ import MediaModal from './media_modal'; import VideoModal from './video_modal'; import BoostModal from './boost_modal'; import FavouriteModal from './favourite_modal'; +import AudioModal from './audio_modal'; import DoodleModal from './doodle_modal'; import ConfirmationModal from './confirmation_modal'; import FocalPointModal from './focal_point_modal'; import { OnboardingModal, MuteModal, + BlockModal, ReportModal, SettingsModal, EmbedModal, @@ -27,11 +30,13 @@ const MODAL_COMPONENTS = { 'MEDIA': () => Promise.resolve({ default: MediaModal }), 'ONBOARDING': OnboardingModal, 'VIDEO': () => Promise.resolve({ default: VideoModal }), + 'AUDIO': () => Promise.resolve({ default: AudioModal }), 'BOOST': () => Promise.resolve({ default: BoostModal }), 'FAVOURITE': () => Promise.resolve({ default: FavouriteModal }), 'DOODLE': () => Promise.resolve({ default: DoodleModal }), 'CONFIRM': () => Promise.resolve({ default: ConfirmationModal }), 'MUTE': MuteModal, + 'BLOCK': BlockModal, 'REPORT': ReportModal, 'SETTINGS': SettingsModal, 'ACTIONS': () => Promise.resolve({ default: ActionsModal }), @@ -57,8 +62,10 @@ export default class ModalRoot extends React.PureComponent { componentDidUpdate (prevProps, prevState, { visible }) { if (visible) { document.body.classList.add('with-modals--active'); + document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; } else { document.body.classList.remove('with-modals--active'); + document.documentElement.style.marginRight = 0; } } diff --git a/app/javascript/flavours/glitch/features/ui/components/mute_modal.js b/app/javascript/flavours/glitch/features/ui/components/mute_modal.js index 0202b1ab1..2aab82751 100644 --- a/app/javascript/flavours/glitch/features/ui/components/mute_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/mute_modal.js @@ -11,7 +11,6 @@ import { toggleHideNotifications } from 'flavours/glitch/actions/mutes'; const mapStateToProps = state => { return { - isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), account: state.getIn(['mutes', 'new', 'account']), notifications: state.getIn(['mutes', 'new', 'notifications']), }; @@ -33,12 +32,11 @@ const mapDispatchToProps = dispatch => { }; }; -@connect(mapStateToProps, mapDispatchToProps) +export default @connect(mapStateToProps, mapDispatchToProps) @injectIntl -export default class MuteModal extends React.PureComponent { +class MuteModal extends React.PureComponent { static propTypes = { - isSubmitting: PropTypes.bool.isRequired, account: PropTypes.object.isRequired, notifications: PropTypes.bool.isRequired, onClose: PropTypes.func.isRequired, @@ -81,11 +79,16 @@ export default class MuteModal extends React.PureComponent { values={{ name: <strong>@{account.get('acct')}</strong> }} /> </p> - <div> - <label htmlFor='mute-modal__hide-notifications-checkbox'> + <p className='mute-modal__explanation'> + <FormattedMessage + id='confirmations.mute.explanation' + defaultMessage='This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.' + /> + </p> + <div className='setting-toggle'> + <Toggle id='mute-modal__hide-notifications-checkbox' checked={notifications} onChange={this.toggleNotifications} /> + <label className='setting-toggle__label' htmlFor='mute-modal__hide-notifications-checkbox'> <FormattedMessage id='mute_modal.hide_notifications' defaultMessage='Hide notifications from this user?' /> - {' '} - <Toggle id='mute-modal__hide-notifications-checkbox' checked={notifications} onChange={this.toggleNotifications} /> </label> </div> </div> diff --git a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.js b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.js index 4688c7766..50e7d5c48 100644 --- a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.js +++ b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.js @@ -2,30 +2,35 @@ import React from 'react'; import { NavLink, withRouter } from 'react-router-dom'; import { FormattedMessage } from 'react-intl'; import Icon from 'flavours/glitch/components/icon'; -import { profile_directory } from 'flavours/glitch/util/initial_state'; +import { profile_directory, showTrends } from 'flavours/glitch/util/initial_state'; +import { preferencesLink, relationshipsLink } from 'flavours/glitch/util/backend_links'; import NotificationsCounterIcon from './notifications_counter_icon'; import FollowRequestsNavLink from './follow_requests_nav_link'; import ListPanel from './list_panel'; +import TrendsContainer from 'flavours/glitch/features/getting_started/containers/trends_container'; const NavigationPanel = ({ onOpenSettings }) => ( <div className='navigation-panel'> - <NavLink className='column-link column-link--transparent' to='/timelines/home' data-preview-title-id='column.home' data-preview-icon='home' ><Icon className='column-link__icon' icon='home' fixedWidth /><FormattedMessage id='tabs_bar.home' defaultMessage='Home' /></NavLink> + <NavLink className='column-link column-link--transparent' to='/timelines/home' data-preview-title-id='column.home' data-preview-icon='home' ><Icon className='column-link__icon' id='home' fixedWidth /><FormattedMessage id='tabs_bar.home' defaultMessage='Home' /></NavLink> <NavLink className='column-link column-link--transparent' to='/notifications' data-preview-title-id='column.notifications' data-preview-icon='bell' ><NotificationsCounterIcon className='column-link__icon' /><FormattedMessage id='tabs_bar.notifications' defaultMessage='Notifications' /></NavLink> <FollowRequestsNavLink /> - <NavLink className='column-link column-link--transparent' to='/timelines/public/local' data-preview-title-id='column.community' data-preview-icon='users' ><Icon className='column-link__icon' icon='users' fixedWidth /><FormattedMessage id='tabs_bar.local_timeline' defaultMessage='Local' /></NavLink> - <NavLink className='column-link column-link--transparent' exact to='/timelines/public' data-preview-title-id='column.public' data-preview-icon='globe' ><Icon className='column-link__icon' icon='globe' fixedWidth /><FormattedMessage id='tabs_bar.federated_timeline' defaultMessage='Federated' /></NavLink> - <NavLink className='column-link column-link--transparent' to='/timelines/direct'><Icon className='column-link__icon' icon='envelope' fixedWidth /><FormattedMessage id='navigation_bar.direct' defaultMessage='Direct messages' /></NavLink> - <NavLink className='column-link column-link--transparent' to='/bookmarks'><Icon className='column-link__icon' icon='bookmark' fixedWidth /><FormattedMessage id='navigation_bar.bookmarks' defaultMessage='Bookmarks' /></NavLink> - <NavLink className='column-link column-link--transparent' to='/lists'><Icon className='column-link__icon' icon='list-ul' fixedWidth /><FormattedMessage id='navigation_bar.lists' defaultMessage='Lists' /></NavLink> + <NavLink className='column-link column-link--transparent' to='/timelines/public/local' data-preview-title-id='column.community' data-preview-icon='users' ><Icon className='column-link__icon' id='users' fixedWidth /><FormattedMessage id='tabs_bar.local_timeline' defaultMessage='Local' /></NavLink> + <NavLink className='column-link column-link--transparent' exact to='/timelines/public' data-preview-title-id='column.public' data-preview-icon='globe' ><Icon className='column-link__icon' id='globe' fixedWidth /><FormattedMessage id='tabs_bar.federated_timeline' defaultMessage='Federated' /></NavLink> + <NavLink className='column-link column-link--transparent' to='/timelines/direct'><Icon className='column-link__icon' id='envelope' fixedWidth /><FormattedMessage id='navigation_bar.direct' defaultMessage='Direct messages' /></NavLink> + <NavLink className='column-link column-link--transparent' to='/bookmarks'><Icon className='column-link__icon' id='bookmark' fixedWidth /><FormattedMessage id='navigation_bar.bookmarks' defaultMessage='Bookmarks' /></NavLink> + {profile_directory && <NavLink className='column-link column-link--transparent' to='/directory'><Icon className='column-link__icon' id='address-book-o' fixedWidth /><FormattedMessage id='getting_started.directory' defaultMessage='Profile directory' /></NavLink>} + <NavLink className='column-link column-link--transparent' to='/lists'><Icon className='column-link__icon' id='list-ul' fixedWidth /><FormattedMessage id='navigation_bar.lists' defaultMessage='Lists' /></NavLink> <ListPanel /> <hr /> - <a className='column-link column-link--transparent' href='/settings/preferences' target='_blank'><Icon className='column-link__icon' icon='cog' fixedWidth /><FormattedMessage id='navigation_bar.preferences' defaultMessage='Preferences' /></a> - <a className='column-link column-link--transparent' href='#' onClick={onOpenSettings}><Icon className='column-link__icon' icon='cogs' fixedWidth /><FormattedMessage id='navigation_bar.app_settings' defaultMessage='App settings' /></a> - <a className='column-link column-link--transparent' href='/relationships' target='_blank'><Icon className='column-link__icon' icon='users' fixedWidth /><FormattedMessage id='navigation_bar.follows_and_followers' defaultMessage='Follows and followers' /></a> - {!!profile_directory && <a className='column-link column-link--transparent' href='/explore'><Icon className='column-link__icon' id='address-book-o' fixedWidth /><FormattedMessage id='navigation_bar.profile_directory' defaultMessage='Profile directory' /></a>} + {!!preferencesLink && <a className='column-link column-link--transparent' href={preferencesLink} target='_blank'><Icon className='column-link__icon' id='cog' fixedWidth /><FormattedMessage id='navigation_bar.preferences' defaultMessage='Preferences' /></a>} + <a className='column-link column-link--transparent' href='#' onClick={onOpenSettings}><Icon className='column-link__icon' id='cogs' fixedWidth /><FormattedMessage id='navigation_bar.app_settings' defaultMessage='App settings' /></a> + {!!relationshipsLink && <a className='column-link column-link--transparent' href={relationshipsLink} target='_blank'><Icon className='column-link__icon' id='users' fixedWidth /><FormattedMessage id='navigation_bar.follows_and_followers' defaultMessage='Follows and followers' /></a>} + + {showTrends && <div className='flex-spacer' />} + {showTrends && <TrendsContainer />} </div> ); diff --git a/app/javascript/flavours/glitch/features/ui/components/onboarding_modal.js b/app/javascript/flavours/glitch/features/ui/components/onboarding_modal.js index 3db9ec77d..7419e2cd9 100644 --- a/app/javascript/flavours/glitch/features/ui/components/onboarding_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/onboarding_modal.js @@ -159,9 +159,9 @@ const mapStateToProps = state => ({ domain: state.getIn(['meta', 'domain']), }); -@connect(mapStateToProps) +export default @connect(mapStateToProps) @injectIntl -export default class OnboardingModal extends React.PureComponent { +class OnboardingModal extends React.PureComponent { static propTypes = { onClose: PropTypes.func.isRequired, diff --git a/app/javascript/flavours/glitch/features/ui/components/report_modal.js b/app/javascript/flavours/glitch/features/ui/components/report_modal.js index 8be1d5856..9016b08d7 100644 --- a/app/javascript/flavours/glitch/features/ui/components/report_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/report_modal.js @@ -37,9 +37,9 @@ const makeMapStateToProps = () => { return mapStateToProps; }; -@connect(makeMapStateToProps) +export default @connect(makeMapStateToProps) @injectIntl -export default class ReportModal extends ImmutablePureComponent { +class ReportModal extends ImmutablePureComponent { static propTypes = { isSubmitting: PropTypes.bool, diff --git a/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js b/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js index dbd08aa2b..a67405215 100644 --- a/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js +++ b/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js @@ -4,16 +4,16 @@ import { NavLink, withRouter } from 'react-router-dom'; import { FormattedMessage, injectIntl } from 'react-intl'; import { debounce } from 'lodash'; import { isUserTouching } from 'flavours/glitch/util/is_mobile'; +import Icon from 'flavours/glitch/components/icon'; import NotificationsCounterIcon from './notifications_counter_icon'; export const links = [ - <NavLink className='tabs-bar__link' to='/timelines/home' data-preview-title-id='column.home' data-preview-icon='home' ><i className='fa fa-fw fa-home' /><FormattedMessage id='tabs_bar.home' defaultMessage='Home' /></NavLink>, + <NavLink className='tabs-bar__link' to='/timelines/home' data-preview-title-id='column.home' data-preview-icon='home' ><Icon id='home' fixedWidth /><FormattedMessage id='tabs_bar.home' defaultMessage='Home' /></NavLink>, <NavLink className='tabs-bar__link' to='/notifications' data-preview-title-id='column.notifications' data-preview-icon='bell' ><NotificationsCounterIcon /><FormattedMessage id='tabs_bar.notifications' defaultMessage='Notifications' /></NavLink>, - - <NavLink className='tabs-bar__link' to='/timelines/public/local' data-preview-title-id='column.community' data-preview-icon='users' ><i className='fa fa-fw fa-users' /><FormattedMessage id='tabs_bar.local_timeline' defaultMessage='Local' /></NavLink>, - <NavLink className='tabs-bar__link' exact to='/timelines/public' data-preview-title-id='column.public' data-preview-icon='globe' ><i className='fa fa-fw fa-globe' /><FormattedMessage id='tabs_bar.federated_timeline' defaultMessage='Federated' /></NavLink>, - <NavLink className='tabs-bar__link optional' to='/search' data-preview-title-id='tabs_bar.search' data-preview-icon='bell' ><i className='fa fa-fw fa-search' /><FormattedMessage id='tabs_bar.search' defaultMessage='Search' /></NavLink>, - <NavLink className='tabs-bar__link' style={{ flexGrow: '0', flexBasis: '30px' }} to='/getting-started' data-preview-title-id='getting_started.heading' data-preview-icon='bars' ><i className='fa fa-fw fa-bars' /></NavLink>, + <NavLink className='tabs-bar__link' to='/timelines/public/local' data-preview-title-id='column.community' data-preview-icon='users' ><Icon id='users' fixedWidth /><FormattedMessage id='tabs_bar.local_timeline' defaultMessage='Local' /></NavLink>, + <NavLink className='tabs-bar__link' exact to='/timelines/public' data-preview-title-id='column.public' data-preview-icon='globe' ><Icon id='globe' fixedWidth /><FormattedMessage id='tabs_bar.federated_timeline' defaultMessage='Federated' /></NavLink>, + <NavLink className='tabs-bar__link optional' to='/search' data-preview-title-id='tabs_bar.search' data-preview-icon='bell' ><Icon id='search' fixedWidth /><FormattedMessage id='tabs_bar.search' defaultMessage='Search' /></NavLink>, + <NavLink className='tabs-bar__link' style={{ flexGrow: '0', flexBasis: '30px' }} to='/getting-started' data-preview-title-id='getting_started.heading' data-preview-icon='bars' ><Icon id='bars' fixedWidth /></NavLink>, ]; export function getIndex (path) { @@ -24,9 +24,9 @@ export function getLink (index) { return links[index].props.to; } -@injectIntl +export default @injectIntl @withRouter -export default class TabsBar extends React.PureComponent { +class TabsBar extends React.PureComponent { static propTypes = { intl: PropTypes.object.isRequired, @@ -73,9 +73,13 @@ export default class TabsBar extends React.PureComponent { const { intl: { formatMessage } } = this.props; return ( - <nav className='tabs-bar' ref={this.setRef}> - {links.map(link => React.cloneElement(link, { key: link.props.to, onClick: this.handleClick, 'aria-label': formatMessage({ id: link.props['data-preview-title-id'] }) }))} - </nav> + <div className='tabs-bar__wrapper'> + <nav className='tabs-bar' ref={this.setRef}> + {links.map(link => React.cloneElement(link, { key: link.props.to, onClick: this.handleClick, 'aria-label': formatMessage({ id: link.props['data-preview-title-id'] }) }))} + </nav> + + <div id='tabs-bar__portal' /> + </div> ); } diff --git a/app/javascript/flavours/glitch/features/ui/components/video_modal.js b/app/javascript/flavours/glitch/features/ui/components/video_modal.js index 3f742c260..e7309021e 100644 --- a/app/javascript/flavours/glitch/features/ui/components/video_modal.js +++ b/app/javascript/flavours/glitch/features/ui/components/video_modal.js @@ -4,6 +4,8 @@ import PropTypes from 'prop-types'; import Video from 'flavours/glitch/features/video'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { FormattedMessage } from 'react-intl'; +import classNames from 'classnames'; +import Icon from 'flavours/glitch/components/icon'; export default class VideoModal extends ImmutablePureComponent { @@ -28,22 +30,25 @@ export default class VideoModal extends ImmutablePureComponent { render () { const { media, status, time, onClose } = this.props; - const link = status && <a href={status.get('url')} onClick={this.handleStatusClick}><FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>; - return ( <div className='modal-root__modal video-modal'> - <div> + <div className='video-modal__container'> <Video preview={media.get('preview_url')} blurhash={media.get('blurhash')} src={media.get('url')} startTime={time} onCloseVideo={onClose} - link={link} detailed alt={media.get('description')} /> </div> + + {status && ( + <div className={classNames('media-modal__meta')}> + <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> + </div> + )} </div> ); } diff --git a/app/javascript/flavours/glitch/features/ui/containers/notifications_container.js b/app/javascript/flavours/glitch/features/ui/containers/notifications_container.js index 283aa2373..82278a3be 100644 --- a/app/javascript/flavours/glitch/features/ui/containers/notifications_container.js +++ b/app/javascript/flavours/glitch/features/ui/containers/notifications_container.js @@ -11,7 +11,7 @@ const mapStateToProps = (state, { intl }) => { const value = notification[key]; if (typeof value === 'object') { - notification[key] = intl.formatMessage(value); + notification[key] = intl.formatMessage(value, notification[`${key}_values`]); } })); diff --git a/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js b/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js index e0c017f82..c01d0e5bc 100644 --- a/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js +++ b/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js @@ -1,24 +1,31 @@ import { connect } from 'react-redux'; import StatusList from 'flavours/glitch/components/status_list'; -import { scrollTopTimeline } from 'flavours/glitch/actions/timelines'; +import { scrollTopTimeline, loadPending } from 'flavours/glitch/actions/timelines'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import { createSelector } from 'reselect'; import { debounce } from 'lodash'; import { me } from 'flavours/glitch/util/initial_state'; -const makeGetStatusIds = () => createSelector([ - (state, { type }) => state.getIn(['settings', type], ImmutableMap()), - (state, { type }) => state.getIn(['timelines', type, 'items'], ImmutableList()), - (state) => state.get('statuses'), -], (columnSettings, statusIds, statuses) => { - const rawRegex = columnSettings.getIn(['regex', 'body'], '').trim(); - let regex = null; +const getRegex = createSelector([ + (state, { type }) => state.getIn(['settings', type, 'regex', 'body']), +], (rawRegex) => { + let regex = null; try { - regex = rawRegex && new RegExp(rawRegex, 'i'); + regex = rawRegex && new RegExp(rawRegex.trim(), 'i'); } catch (e) { // Bad regex, don't affect filters } + return regex; +}); + +const makeGetStatusIds = (pending = false) => createSelector([ + (state, { type }) => state.getIn(['settings', type], ImmutableMap()), + (state, { type }) => state.getIn(['timelines', type, pending ? 'pendingItems' : 'items'], ImmutableList()), + (state) => state.get('statuses'), + getRegex, +], (columnSettings, statusIds, statuses, regex) => { + const rawRegex = columnSettings.getIn(['regex', 'body'], '').trim(); return statusIds.filter(id => { if (id === null) return true; @@ -49,12 +56,14 @@ const makeGetStatusIds = () => createSelector([ const makeMapStateToProps = () => { const getStatusIds = makeGetStatusIds(); + const getPendingStatusIds = makeGetStatusIds(true); const mapStateToProps = (state, { timelineId }) => ({ statusIds: getStatusIds(state, { type: timelineId }), isLoading: state.getIn(['timelines', timelineId, 'isLoading'], true), isPartial: state.getIn(['timelines', timelineId, 'isPartial'], false), hasMore: state.getIn(['timelines', timelineId, 'hasMore']), + numPending: getPendingStatusIds(state, { type: timelineId }).size, }); return mapStateToProps; @@ -70,6 +79,8 @@ const mapDispatchToProps = (dispatch, { timelineId }) => ({ dispatch(scrollTopTimeline(timelineId, false)); }, 100), + onLoadPending: () => dispatch(loadPending(timelineId)), + }); export default connect(makeMapStateToProps, mapDispatchToProps)(StatusList); diff --git a/app/javascript/flavours/glitch/features/ui/index.js b/app/javascript/flavours/glitch/features/ui/index.js index 787488db4..5c861fdee 100644 --- a/app/javascript/flavours/glitch/features/ui/index.js +++ b/app/javascript/flavours/glitch/features/ui/index.js @@ -12,8 +12,10 @@ import { expandHomeTimeline } from 'flavours/glitch/actions/timelines'; import { expandNotifications, notificationsSetVisibility } from 'flavours/glitch/actions/notifications'; import { fetchFilters } from 'flavours/glitch/actions/filters'; import { clearHeight } from 'flavours/glitch/actions/height_cache'; +import { submitMarkers } from 'flavours/glitch/actions/markers'; import { WrappedSwitch, WrappedRoute } from 'flavours/glitch/util/react_router_helpers'; import UploadArea from './components/upload_area'; +import PermaLink from 'flavours/glitch/components/permalink'; import ColumnsAreaContainer from './containers/columns_area_container'; import classNames from 'classnames'; import Favico from 'favico.js'; @@ -46,10 +48,11 @@ import { Lists, Search, GettingStartedMisc, + Directory, } from 'flavours/glitch/util/async-components'; import { HotKeys } from 'react-hotkeys'; import { me } from 'flavours/glitch/util/initial_state'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; // Dummy import, to make sure that <Status /> ends up in the application bundle. // Without this it ends up in ~8 very commonly used bundles. @@ -62,6 +65,7 @@ const messages = defineMessages({ const mapStateToProps = state => ({ hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0, hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0, + canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4, layout: state.getIn(['local_settings', 'layout']), isWide: state.getIn(['local_settings', 'stretch']), navbarUnder: state.getIn(['local_settings', 'navbar_under']), @@ -69,6 +73,7 @@ const mapStateToProps = state => ({ unreadNotifications: state.getIn(['notifications', 'unread']), showFaviconBadge: state.getIn(['local_settings', 'notifications', 'favicon_badge']), hicolorPrivacyIcons: state.getIn(['local_settings', 'hicolor_privacy_icons']), + moved: state.getIn(['accounts', me, 'moved']) && state.getIn(['accounts', state.getIn(['accounts', me, 'moved'])]), }); const keyMap = { @@ -102,12 +107,137 @@ const keyMap = { bookmark: 'd', toggleCollapse: 'shift+x', toggleSensitive: 'h', + openMedia: 'e', }; -@connect(mapStateToProps) +class SwitchingColumnsArea extends React.PureComponent { + + static propTypes = { + children: PropTypes.node, + layout: PropTypes.string, + location: PropTypes.object, + navbarUnder: PropTypes.bool, + onLayoutChange: PropTypes.func.isRequired, + }; + + state = { + mobile: isMobile(window.innerWidth, this.props.layout), + }; + + componentWillReceiveProps (nextProps) { + if (nextProps.layout !== this.props.layout) { + this.setState({ mobile: isMobile(window.innerWidth, nextProps.layout) }); + } + } + + componentWillMount () { + window.addEventListener('resize', this.handleResize, { passive: true }); + + if (this.state.mobile) { + document.body.classList.toggle('layout-single-column', true); + document.body.classList.toggle('layout-multiple-columns', false); + } else { + document.body.classList.toggle('layout-single-column', false); + document.body.classList.toggle('layout-multiple-columns', true); + } + } + + componentDidUpdate (prevProps, prevState) { + if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) { + this.node.handleChildrenContentChange(); + } + + if (prevState.mobile !== this.state.mobile) { + document.body.classList.toggle('layout-single-column', this.state.mobile); + document.body.classList.toggle('layout-multiple-columns', !this.state.mobile); + } + } + + componentWillUnmount () { + window.removeEventListener('resize', this.handleResize); + } + + handleLayoutChange = debounce(() => { + // The cached heights are no longer accurate, invalidate + this.props.onLayoutChange(); + }, 500, { + trailing: true, + }) + + handleResize = () => { + const mobile = isMobile(window.innerWidth, this.props.layout); + + if (mobile !== this.state.mobile) { + this.handleLayoutChange.cancel(); + this.props.onLayoutChange(); + this.setState({ mobile }); + } else { + this.handleLayoutChange(); + } + } + + setRef = c => { + if (c) { + this.node = c.getWrappedInstance(); + } + } + + render () { + const { children, navbarUnder } = this.props; + const singleColumn = this.state.mobile; + const redirect = singleColumn ? <Redirect from='/' to='/timelines/home' exact /> : <Redirect from='/' to='/getting-started' exact />; + + return ( + <ColumnsAreaContainer ref={this.setRef} singleColumn={singleColumn} navbarUnder={navbarUnder}> + <WrappedSwitch> + {redirect} + <WrappedRoute path='/getting-started' component={GettingStarted} content={children} /> + <WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} /> + <WrappedRoute path='/timelines/home' component={HomeTimeline} content={children} /> + <WrappedRoute path='/timelines/public' exact component={PublicTimeline} content={children} /> + <WrappedRoute path='/timelines/public/local' exact component={CommunityTimeline} content={children} /> + <WrappedRoute path='/timelines/direct' component={DirectTimeline} content={children} /> + <WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} /> + <WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} /> + + <WrappedRoute path='/notifications' component={Notifications} content={children} /> + <WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} /> + <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} /> + <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} /> + + <WrappedRoute path='/search' component={Search} content={children} /> + <WrappedRoute path='/directory' component={Directory} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} /> + + <WrappedRoute path='/statuses/new' component={Compose} content={children} /> + <WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} /> + <WrappedRoute path='/statuses/:statusId/reblogs' component={Reblogs} content={children} /> + <WrappedRoute path='/statuses/:statusId/favourites' component={Favourites} content={children} /> + + <WrappedRoute path='/accounts/:accountId' exact component={AccountTimeline} content={children} /> + <WrappedRoute path='/accounts/:accountId/with_replies' component={AccountTimeline} content={children} componentParams={{ withReplies: true }} /> + <WrappedRoute path='/accounts/:accountId/followers' component={Followers} content={children} /> + <WrappedRoute path='/accounts/:accountId/following' component={Following} content={children} /> + <WrappedRoute path='/accounts/:accountId/media' component={AccountGallery} content={children} /> + + <WrappedRoute path='/follow_requests' component={FollowRequests} content={children} /> + <WrappedRoute path='/blocks' component={Blocks} content={children} /> + <WrappedRoute path='/domain_blocks' component={DomainBlocks} content={children} /> + <WrappedRoute path='/mutes' component={Mutes} content={children} /> + <WrappedRoute path='/lists' component={Lists} content={children} /> + <WrappedRoute path='/getting-started-misc' component={GettingStartedMisc} content={children} /> + + <WrappedRoute component={GenericNotFound} content={children} /> + </WrappedSwitch> + </ColumnsAreaContainer> + ); + }; + +} + +export default @connect(mapStateToProps) @injectIntl @withRouter -export default class UI extends React.Component { +class UI extends React.Component { static propTypes = { dispatch: PropTypes.func.isRequired, @@ -119,6 +249,7 @@ export default class UI extends React.Component { isComposing: PropTypes.bool, hasComposingText: PropTypes.bool, hasMediaAttachments: PropTypes.bool, + canUploadMore: PropTypes.bool, match: PropTypes.object.isRequired, location: PropTypes.object.isRequired, history: PropTypes.object.isRequired, @@ -126,15 +257,17 @@ export default class UI extends React.Component { dropdownMenuIsOpen: PropTypes.bool, unreadNotifications: PropTypes.number, showFaviconBadge: PropTypes.bool, + moved: PropTypes.map, }; state = { - width: window.innerWidth, draggingOver: false, }; handleBeforeUnload = (e) => { - const { intl, hasComposingText, hasMediaAttachments } = this.props; + const { intl, dispatch, hasComposingText, hasMediaAttachments } = this.props; + + dispatch(submitMarkers()); if (hasComposingText || hasMediaAttachments) { // Setting returnValue to any string causes confirmation dialog. @@ -144,14 +277,10 @@ export default class UI extends React.Component { } } - handleResize = debounce(() => { + handleLayoutChange = () => { // The cached heights are no longer accurate, invalidate this.props.dispatch(clearHeight()); - - this.setState({ width: window.innerWidth }); - }, 500, { - trailing: true, - }); + } handleDragEnter = (e) => { e.preventDefault(); @@ -164,7 +293,7 @@ export default class UI extends React.Component { this.dragTargets.push(e.target); } - if (e.dataTransfer && e.dataTransfer.types.includes('Files')) { + if (e.dataTransfer && e.dataTransfer.types.includes('Files') && this.props.canUploadMore) { this.setState({ draggingOver: true }); } } @@ -185,12 +314,13 @@ export default class UI extends React.Component { handleDrop = (e) => { if (this.dataTransferIsText(e.dataTransfer)) return; + e.preventDefault(); this.setState({ draggingOver: false }); this.dragTargets = []; - if (e.dataTransfer && e.dataTransfer.files.length >= 1) { + if (e.dataTransfer && e.dataTransfer.files.length >= 1 && this.props.canUploadMore) { this.props.dispatch(uploadCompose(e.dataTransfer.files)); } } @@ -209,7 +339,7 @@ export default class UI extends React.Component { } dataTransferIsText = (dataTransfer) => { - return (dataTransfer && Array.from(dataTransfer.types).includes('text/plain') && dataTransfer.items.length === 1); + return (dataTransfer && Array.from(dataTransfer.types).filter((type) => type === 'text/plain').length === 1); } closeUploadModal = () => { @@ -246,7 +376,6 @@ export default class UI extends React.Component { } window.addEventListener('beforeunload', this.handleBeforeUnload, false); - window.addEventListener('resize', this.handleResize, { passive: true }); document.addEventListener('dragenter', this.handleDragEnter, false); document.addEventListener('dragover', this.handleDragOver, false); document.addEventListener('drop', this.handleDrop, false); @@ -271,13 +400,14 @@ export default class UI extends React.Component { } componentDidUpdate (prevProps) { - if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) { - this.columnsAreaNode.handleChildrenContentChange(); - } if (this.props.unreadNotifications != prevProps.unreadNotifications || this.props.showFaviconBadge != prevProps.showFaviconBadge) { if (this.favicon) { - this.favicon.badge(this.props.showFaviconBadge ? this.props.unreadNotifications : 0); + try { + this.favicon.badge(this.props.showFaviconBadge ? this.props.unreadNotifications : 0); + } catch (err) { + console.error(err); + } } } } @@ -288,7 +418,6 @@ export default class UI extends React.Component { } window.removeEventListener('beforeunload', this.handleBeforeUnload); - window.removeEventListener('resize', this.handleResize); document.removeEventListener('dragenter', this.handleDragEnter); document.removeEventListener('dragover', this.handleDragOver); document.removeEventListener('drop', this.handleDrop); @@ -300,10 +429,6 @@ export default class UI extends React.Component { this.node = c; } - setColumnsAreaRef = c => { - this.columnsAreaNode = c.getWrappedInstance(); - } - handleHotkeyNew = e => { e.preventDefault(); @@ -317,7 +442,7 @@ export default class UI extends React.Component { handleHotkeySearch = e => { e.preventDefault(); - const element = this.node.querySelector('.drawer--search input'); + const element = this.node.querySelector('.search__input'); if (element) { element.focus(); @@ -417,10 +542,8 @@ export default class UI extends React.Component { } render () { - const { width, draggingOver } = this.state; - const { children, layout, isWide, navbarUnder, dropdownMenuIsOpen } = this.props; - const singleColumn = isMobile(width, layout); - const redirect = singleColumn ? <Redirect from='/' to='/timelines/home' exact /> : <Redirect from='/' to='/getting-started' exact />; + const { draggingOver } = this.state; + const { children, layout, isWide, navbarUnder, location, dropdownMenuIsOpen, moved } = this.props; const columnsClass = layout => { switch (layout) { @@ -464,45 +587,20 @@ export default class UI extends React.Component { return ( <HotKeys keyMap={keyMap} handlers={handlers} ref={this.setHotkeysRef} attach={window} focused> <div className={className} ref={this.setRef} style={{ pointerEvents: dropdownMenuIsOpen ? 'none' : null }}> - <ColumnsAreaContainer ref={this.setColumnsAreaRef} singleColumn={singleColumn} navbarUnder={navbarUnder}> - <WrappedSwitch> - {redirect} - <WrappedRoute path='/getting-started' component={GettingStarted} content={children} /> - <WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} /> - <WrappedRoute path='/timelines/home' component={HomeTimeline} content={children} /> - <WrappedRoute path='/timelines/public' exact component={PublicTimeline} content={children} /> - <WrappedRoute path='/timelines/public/local' exact component={CommunityTimeline} content={children} /> - <WrappedRoute path='/timelines/direct' component={DirectTimeline} content={children} /> - <WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} /> - <WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} /> - <WrappedRoute path='/notifications' component={Notifications} content={children} /> - <WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} /> - <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} /> - <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} /> - - <WrappedRoute path='/search' component={Search} content={children} /> - - <WrappedRoute path='/statuses/new' component={Compose} content={children} /> - <WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} /> - <WrappedRoute path='/statuses/:statusId/reblogs' component={Reblogs} content={children} /> - <WrappedRoute path='/statuses/:statusId/favourites' component={Favourites} content={children} /> - - <WrappedRoute path='/accounts/:accountId' exact component={AccountTimeline} content={children} /> - <WrappedRoute path='/accounts/:accountId/with_replies' component={AccountTimeline} content={children} componentParams={{ withReplies: true }} /> - <WrappedRoute path='/accounts/:accountId/followers' component={Followers} content={children} /> - <WrappedRoute path='/accounts/:accountId/following' component={Following} content={children} /> - <WrappedRoute path='/accounts/:accountId/media' component={AccountGallery} content={children} /> - - <WrappedRoute path='/follow_requests' component={FollowRequests} content={children} /> - <WrappedRoute path='/blocks' component={Blocks} content={children} /> - <WrappedRoute path='/domain_blocks' component={DomainBlocks} content={children} /> - <WrappedRoute path='/mutes' component={Mutes} content={children} /> - <WrappedRoute path='/lists' component={Lists} content={children} /> - <WrappedRoute path='/getting-started-misc' component={GettingStartedMisc} content={children} /> - - <WrappedRoute component={GenericNotFound} content={children} /> - </WrappedSwitch> - </ColumnsAreaContainer> + {moved && (<div className='flash-message alert'> + <FormattedMessage + id='moved_to_warning' + defaultMessage='This account is marked as moved to {moved_to_link}, and may thus not accept new follows.' + values={{ moved_to_link: ( + <PermaLink href={moved.get('url')} to={`/accounts/${moved.get('id')}`}> + @{moved.get('acct')} + </PermaLink> + )}} + /> + </div>)} + <SwitchingColumnsArea location={location} layout={layout} navbarUnder={navbarUnder} onLayoutChange={this.handleLayoutChange}> + {children} + </SwitchingColumnsArea> <NotificationsContainer /> <LoadingBarContainer className='loading-bar' /> diff --git a/app/javascript/flavours/glitch/features/video/index.js b/app/javascript/flavours/glitch/features/video/index.js index b73ea0b07..049baaee7 100644 --- a/app/javascript/flavours/glitch/features/video/index.js +++ b/app/javascript/flavours/glitch/features/video/index.js @@ -5,7 +5,8 @@ import { fromJS, is } from 'immutable'; import { throttle } from 'lodash'; import classNames from 'classnames'; import { isFullscreen, requestFullscreen, exitFullscreen } from 'flavours/glitch/util/fullscreen'; -import { displayMedia } from 'flavours/glitch/util/initial_state'; +import { displayMedia, useBlurhash } from 'flavours/glitch/util/initial_state'; +import Icon from 'flavours/glitch/components/icon'; import { decode } from 'blurhash'; const messages = defineMessages({ @@ -18,9 +19,10 @@ const messages = defineMessages({ close: { id: 'video.close', defaultMessage: 'Close video' }, fullscreen: { id: 'video.fullscreen', defaultMessage: 'Full screen' }, exit_fullscreen: { id: 'video.exit_fullscreen', defaultMessage: 'Exit full screen' }, + download: { id: 'video.download', defaultMessage: 'Download file' }, }); -const formatTime = secondsNum => { +export const formatTime = secondsNum => { let hours = Math.floor(secondsNum / 3600); let minutes = Math.floor((secondsNum - (hours * 3600)) / 60); let seconds = secondsNum - (hours * 3600) - (minutes * 60); @@ -84,8 +86,8 @@ export const getPointerPosition = (el, event) => { return position; }; -@injectIntl -export default class Video extends React.PureComponent { +export default @injectIntl +class Video extends React.PureComponent { static propTypes = { preview: PropTypes.string, @@ -101,6 +103,7 @@ export default class Video extends React.PureComponent { fullwidth: PropTypes.bool, detailed: PropTypes.bool, inline: PropTypes.bool, + editable: PropTypes.bool, cacheWidth: PropTypes.func, intl: PropTypes.object.isRequired, visible: PropTypes.bool, @@ -312,7 +315,7 @@ export default class Video extends React.PureComponent { } _decode () { - if (!this.canvas) return; + if (!this.canvas || !useBlurhash) return; const hash = this.props.blurhash; const pixels = decode(hash, 32, 32); @@ -393,7 +396,7 @@ export default class Video extends React.PureComponent { } render () { - const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, letterbox, fullwidth, detailed, sensitive, link } = this.props; + const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, letterbox, fullwidth, detailed, sensitive, link, editable } = this.props; const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; const progress = (currentTime / duration) * 100; const playerStyle = {}; @@ -401,7 +404,7 @@ export default class Video extends React.PureComponent { const volumeWidth = (muted) ? 0 : volume * this.volWidth; const volumeHandleLoc = (muted) ? this.volHandleOffset(0) : this.volHandleOffset(volume); - const computedClass = classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen, letterbox, 'full-width': fullwidth }); + const computedClass = classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen, editable, letterbox, 'full-width': fullwidth }); let { width, height } = this.props; @@ -443,7 +446,7 @@ export default class Video extends React.PureComponent { > <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': revealed })} /> - {revealed && <video + {(revealed || editable) && <video ref={this.setVideoRef} src={src} poster={preview} @@ -465,7 +468,7 @@ export default class Video extends React.PureComponent { onVolumeChange={this.handleVolumeChange} />} - <div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed })}> + <div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed || editable })}> <button type='button' className='spoiler-button__overlay' onClick={this.toggleReveal}> <span className='spoiler-button__overlay__label'>{warning}</span> </button> @@ -485,9 +488,10 @@ export default class Video extends React.PureComponent { <div className='video-player__buttons-bar'> <div className='video-player__buttons left'> - <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><i className={classNames('fa fa-fw', { 'fa-play': paused, 'fa-pause': !paused })} /></button> - <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><i className={classNames('fa fa-fw', { 'fa-volume-off': muted, 'fa-volume-up': !muted })} /></button> + <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay} autoFocus={detailed}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button> + <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button> <div className='video-player__volume' onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> + <div className='video-player__volume__current' style={{ width: `${volumeWidth}px` }} /> <span className={classNames('video-player__volume__handle')} @@ -508,10 +512,16 @@ export default class Video extends React.PureComponent { </div> <div className='video-player__buttons right'> - {!onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><i className='fa fa-fw fa-eye-slash' /></button>} - {(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><i className='fa fa-fw fa-expand' /></button>} - {onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><i className='fa fa-fw fa-compress' /></button>} - <button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><i className={classNames('fa fa-fw', { 'fa-arrows-alt': !fullscreen, 'fa-compress': fullscreen })} /></button> + {(!onCloseVideo && !editable) && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>} + {(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>} + {onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>} + <button type='button' aria-label={intl.formatMessage(messages.download)}> + <a className='video-player__download__icon' href={this.props.src} download> + <Icon id={'download'} fixedWidth /> + </a> + </button> + <button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button> + </div> </div> </div> diff --git a/app/javascript/flavours/glitch/locales/pt.js b/app/javascript/flavours/glitch/locales/pt-PT.js index 0156f55ff..cf7afd17a 100644 --- a/app/javascript/flavours/glitch/locales/pt.js +++ b/app/javascript/flavours/glitch/locales/pt-PT.js @@ -1,4 +1,4 @@ -import inherited from 'mastodon/locales/pt.json'; +import inherited from 'mastodon/locales/pt-PT.json'; const messages = { // No translations available. diff --git a/app/javascript/flavours/glitch/packs/public.js b/app/javascript/flavours/glitch/packs/public.js index da0b4c8e0..973d6ee46 100644 --- a/app/javascript/flavours/glitch/packs/public.js +++ b/app/javascript/flavours/glitch/packs/public.js @@ -1,19 +1,21 @@ import loadPolyfills from 'flavours/glitch/util/load_polyfills'; import ready from 'flavours/glitch/util/ready'; +import loadKeyboardExtensions from 'flavours/glitch/util/load_keyboard_extensions'; function main() { const IntlMessageFormat = require('intl-messageformat').default; const { timeAgoString } = require('flavours/glitch/components/relative_timestamp'); + const { delegate } = require('rails-ujs'); const emojify = require('flavours/glitch/util/emoji').default; const { getLocale } = require('locales'); const { messages } = getLocale(); const React = require('react'); const ReactDOM = require('react-dom'); const Rellax = require('rellax'); - const createHistory = require('history').createBrowserHistory; + const { createBrowserHistory } = require('history'); const scrollToDetailedStatus = () => { - const history = createHistory(); + const history = createBrowserHistory(); const detailedStatuses = document.querySelectorAll('.public-layout .detailed-status'); const location = history.location; @@ -23,6 +25,12 @@ function main() { } }; + const getEmojiAnimationHandler = (swapTo) => { + return ({ target }) => { + target.src = target.getAttribute(swapTo); + }; + }; + ready(() => { const locale = document.documentElement.lang; @@ -87,16 +95,33 @@ function main() { new Rellax('.parallax', { speed: -1 }); } - if (document.body.classList.contains('with-modals')) { - const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; - const scrollbarWidthStyle = document.createElement('style'); - scrollbarWidthStyle.id = 'scrollbar-width'; - document.head.appendChild(scrollbarWidthStyle); - scrollbarWidthStyle.sheet.insertRule(`body.with-modals--active { margin-right: ${scrollbarWidth}px; }`, 0); + delegate(document, '.custom-emoji', 'mouseover', getEmojiAnimationHandler('data-original')); + delegate(document, '.custom-emoji', 'mouseout', getEmojiAnimationHandler('data-static')); + + delegate(document, '.blocks-table button.icon-button', 'click', function(e) { + e.preventDefault(); + + const classList = this.firstElementChild.classList; + classList.toggle('fa-chevron-down'); + classList.toggle('fa-chevron-up'); + this.parentElement.parentElement.nextElementSibling.classList.toggle('hidden'); + }); + }); + + delegate(document, '.sidebar__toggle__icon', 'click', () => { + const target = document.querySelector('.sidebar ul'); + + if (target.style.display === 'block') { + target.style.display = 'none'; + } else { + target.style.display = 'block'; } }); } -loadPolyfills().then(main).catch(error => { - console.error(error); -}); +loadPolyfills() + .then(main) + .then(loadKeyboardExtensions) + .catch(error => { + console.error(error); + }); diff --git a/app/javascript/flavours/glitch/packs/settings.js b/app/javascript/flavours/glitch/packs/settings.js new file mode 100644 index 000000000..edf1b82e0 --- /dev/null +++ b/app/javascript/flavours/glitch/packs/settings.js @@ -0,0 +1,24 @@ +import loadPolyfills from 'flavours/glitch/util/load_polyfills'; +import ready from 'flavours/glitch/util/ready'; +import loadKeyboardExtensions from 'flavours/glitch/util/load_keyboard_extensions'; + +function main() { + const { delegate } = require('rails-ujs'); + + delegate(document, '.sidebar__toggle__icon', 'click', () => { + const target = document.querySelector('.sidebar ul'); + + if (target.style.display === 'block') { + target.style.display = 'none'; + } else { + target.style.display = 'block'; + } + }); +} + +loadPolyfills() + .then(main) + .then(loadKeyboardExtensions) + .catch(error => { + console.error(error); + }); diff --git a/app/javascript/flavours/glitch/reducers/alerts.js b/app/javascript/flavours/glitch/reducers/alerts.js index 50f8d30f7..ee3d54ab0 100644 --- a/app/javascript/flavours/glitch/reducers/alerts.js +++ b/app/javascript/flavours/glitch/reducers/alerts.js @@ -14,6 +14,7 @@ export default function alerts(state = initialState, action) { key: state.size > 0 ? state.last().get('key') + 1 : 0, title: action.title, message: action.message, + message_values: action.message_values, })); case ALERT_DISMISS: return state.filterNot(item => item.get('key') === action.alert.key); diff --git a/app/javascript/flavours/glitch/reducers/blocks.js b/app/javascript/flavours/glitch/reducers/blocks.js new file mode 100644 index 000000000..1b6507163 --- /dev/null +++ b/app/javascript/flavours/glitch/reducers/blocks.js @@ -0,0 +1,22 @@ +import Immutable from 'immutable'; + +import { + BLOCKS_INIT_MODAL, +} from '../actions/blocks'; + +const initialState = Immutable.Map({ + new: Immutable.Map({ + account_id: null, + }), +}); + +export default function mutes(state = initialState, action) { + switch (action.type) { + case BLOCKS_INIT_MODAL: + return state.withMutations((state) => { + state.setIn(['new', 'account_id'], action.account.get('id')); + }); + default: + return state; + } +} diff --git a/app/javascript/flavours/glitch/reducers/compose.js b/app/javascript/flavours/glitch/reducers/compose.js index 36dfb8f15..0f807790b 100644 --- a/app/javascript/flavours/glitch/reducers/compose.js +++ b/app/javascript/flavours/glitch/reducers/compose.js @@ -78,6 +78,7 @@ const initialState = ImmutableMap({ is_changing_upload: false, progress: 0, media_attachments: ImmutableList(), + pending_media_attachments: 0, poll: null, suggestion_token: null, suggestions: ImmutableList(), @@ -182,6 +183,7 @@ function continueThread (state, status) { map.set('privacy', status.visibility); map.set('sensitive', false); map.update('media_attachments', list => list.clear()); + map.set('poll', null); map.set('idempotencyKey', uuid()); map.set('focusDate', new Date()); map.set('caretPosition', null); @@ -189,14 +191,18 @@ function continueThread (state, status) { }); } -function appendMedia(state, media) { +function appendMedia(state, media, file) { const prevSize = state.get('media_attachments').size; return state.withMutations(map => { + if (media.get('type') === 'image') { + media = media.set('file', file); + } map.update('media_attachments', list => list.push(media)); map.set('is_uploading', false); map.set('resetFileKey', Math.floor((Math.random() * 0x10000))); map.set('idempotencyKey', uuid()); + map.update('pending_media_attachments', n => n - 1); if (prevSize === 0 && (state.get('default_sensitive') || state.get('spoiler'))) { map.set('sensitive', true); @@ -230,15 +236,20 @@ const insertSuggestion = (state, position, token, completion, path) => { }); }; -const updateSuggestionTags = (state, token) => { - const prefix = token.slice(1); +const sortHashtagsByUse = (state, tags) => { + const personalHistory = state.get('tagHistory'); - return state.merge({ - suggestions: state.get('tagHistory') - .filter(tag => tag.toLowerCase().startsWith(prefix.toLowerCase())) - .slice(0, 4) - .map(tag => '#' + tag), - suggestion_token: token, + return tags.sort((a, b) => { + const usedA = personalHistory.includes(a.name); + const usedB = personalHistory.includes(b.name); + + if (usedA === usedB) { + return 0; + } else if (usedA && !usedB) { + return 1; + } else { + return -1; + } }); }; @@ -275,6 +286,42 @@ const expandMentions = status => { return fragment.innerHTML; }; +const expiresInFromExpiresAt = expires_at => { + if (!expires_at) return 24 * 3600; + const delta = (new Date(expires_at).getTime() - Date.now()) / 1000; + return [300, 1800, 3600, 21600, 86400, 259200, 604800].find(expires_in => expires_in >= delta) || 24 * 3600; +}; + +const mergeLocalHashtagResults = (suggestions, prefix, tagHistory) => { + prefix = prefix.toLowerCase(); + if (suggestions.length < 4) { + const localTags = tagHistory.filter(tag => tag.toLowerCase().startsWith(prefix) && !suggestions.some(suggestion => suggestion.type === 'hashtag' && suggestion.name.toLowerCase() === tag.toLowerCase())); + return suggestions.concat(localTags.slice(0, 4 - suggestions.length).toJS().map(tag => ({ type: 'hashtag', name: tag }))); + } else { + return suggestions; + } +}; + +const normalizeSuggestions = (state, { accounts, emojis, tags, token }) => { + if (accounts) { + return accounts.map(item => ({ id: item.id, type: 'account' })); + } else if (emojis) { + return emojis.map(item => ({ ...item, type: 'emoji' })); + } else { + return mergeLocalHashtagResults(sortHashtagsByUse(state, tags.map(item => ({ ...item, type: 'hashtag' }))), token.slice(1), state.get('tagHistory')); + } +}; + +const updateSuggestionTags = (state, token) => { + const prefix = token.slice(1); + + const suggestions = state.get('suggestions').toJS(); + return state.merge({ + suggestions: ImmutableList(mergeLocalHashtagResults(suggestions, prefix, state.get('tagHistory'))), + suggestion_token: token, + }); +}; + export default function compose(state = initialState, action) { switch(action.type) { case STORE_HYDRATE: @@ -378,11 +425,11 @@ export default function compose(state = initialState, action) { case COMPOSE_UPLOAD_CHANGE_FAIL: return state.set('is_changing_upload', false); case COMPOSE_UPLOAD_REQUEST: - return state.set('is_uploading', true); + return state.set('is_uploading', true).update('pending_media_attachments', n => n + 1); case COMPOSE_UPLOAD_SUCCESS: - return appendMedia(state, fromJS(action.media)); + return appendMedia(state, fromJS(action.media), action.file); case COMPOSE_UPLOAD_FAIL: - return state.set('is_uploading', false); + return state.set('is_uploading', false).update('pending_media_attachments', n => n - 1); case COMPOSE_UPLOAD_UNDO: return removeMedia(state, action.media_id); case COMPOSE_UPLOAD_PROGRESS: @@ -405,7 +452,7 @@ export default function compose(state = initialState, action) { case COMPOSE_SUGGESTIONS_CLEAR: return state.update('suggestions', ImmutableList(), list => list.clear()).set('suggestion_token', null); case COMPOSE_SUGGESTIONS_READY: - return state.set('suggestions', ImmutableList(action.accounts ? action.accounts.map(item => item.id) : action.emojis)).set('suggestion_token', action.token); + return state.set('suggestions', ImmutableList(normalizeSuggestions(state, action))).set('suggestion_token', action.token); case COMPOSE_SUGGESTION_SELECT: return insertSuggestion(state, action.position, action.token, action.completion, action.path); case COMPOSE_SUGGESTION_TAGS_UPDATE: @@ -456,7 +503,7 @@ export default function compose(state = initialState, action) { map.set('poll', ImmutableMap({ options: action.status.getIn(['poll', 'options']).map(x => x.get('title')), multiple: action.status.getIn(['poll', 'multiple']), - expires_in: 24 * 3600, + expires_in: expiresInFromExpiresAt(action.status.getIn(['poll', 'expires_at'])), })); } }); diff --git a/app/javascript/flavours/glitch/reducers/conversations.js b/app/javascript/flavours/glitch/reducers/conversations.js index c01659da5..fba0308bc 100644 --- a/app/javascript/flavours/glitch/reducers/conversations.js +++ b/app/javascript/flavours/glitch/reducers/conversations.js @@ -7,7 +7,10 @@ import { CONVERSATIONS_FETCH_FAIL, CONVERSATIONS_UPDATE, CONVERSATIONS_READ, + CONVERSATIONS_DELETE_SUCCESS, } from '../actions/conversations'; +import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS } from 'flavours/glitch/actions/accounts'; +import { DOMAIN_BLOCK_SUCCESS } from 'flavours/glitch/actions/domain_blocks'; import compareId from 'flavours/glitch/util/compare_id'; const initialState = ImmutableMap({ @@ -74,6 +77,10 @@ const expandNormalizedConversations = (state, conversations, next, isLoadingRece }); }; +const filterConversations = (state, accountIds) => { + return state.update('items', list => list.filterNot(item => item.get('accounts').some(accountId => accountIds.includes(accountId)))); +}; + export default function conversations(state = initialState, action) { switch (action.type) { case CONVERSATIONS_FETCH_REQUEST: @@ -96,6 +103,13 @@ export default function conversations(state = initialState, action) { return item; })); + case ACCOUNT_BLOCK_SUCCESS: + case ACCOUNT_MUTE_SUCCESS: + return filterConversations(state, [action.relationship.id]); + case DOMAIN_BLOCK_SUCCESS: + return filterConversations(state, action.accounts); + case CONVERSATIONS_DELETE_SUCCESS: + return state.update('items', list => list.filterNot(item => item.get('id') === action.id)); default: return state; } diff --git a/app/javascript/flavours/glitch/reducers/index.js b/app/javascript/flavours/glitch/reducers/index.js index 266d87dc1..7dbca3a29 100644 --- a/app/javascript/flavours/glitch/reducers/index.js +++ b/app/javascript/flavours/glitch/reducers/index.js @@ -16,6 +16,7 @@ import local_settings from './local_settings'; import push_notifications from './push_notifications'; import status_lists from './status_lists'; import mutes from './mutes'; +import blocks from './blocks'; import reports from './reports'; import contexts from './contexts'; import compose from './compose'; @@ -33,6 +34,7 @@ import suggestions from './suggestions'; import pinnedAccountsEditor from './pinned_accounts_editor'; import polls from './polls'; import identity_proofs from './identity_proofs'; +import trends from './trends'; const reducers = { dropdown_menu, @@ -52,6 +54,7 @@ const reducers = { local_settings, push_notifications, mutes, + blocks, reports, contexts, compose, @@ -69,6 +72,7 @@ const reducers = { suggestions, pinnedAccountsEditor, polls, + trends, }; export default combineReducers(reducers); diff --git a/app/javascript/flavours/glitch/reducers/local_settings.js b/app/javascript/flavours/glitch/reducers/local_settings.js index 68e1c8424..ad94ea243 100644 --- a/app/javascript/flavours/glitch/reducers/local_settings.js +++ b/app/javascript/flavours/glitch/reducers/local_settings.js @@ -21,6 +21,9 @@ const initialState = ImmutableMap({ inline_preview_cards: true, hicolor_privacy_icons: false, show_content_type_choice: false, + filtering_behavior: 'hide', + tag_misleading_links: true, + rewrite_mentions: 'no', content_warnings : ImmutableMap({ auto_unfold : false, filter : null, diff --git a/app/javascript/flavours/glitch/reducers/modal.js b/app/javascript/flavours/glitch/reducers/modal.js index 80bc11dda..7bd9d4b32 100644 --- a/app/javascript/flavours/glitch/reducers/modal.js +++ b/app/javascript/flavours/glitch/reducers/modal.js @@ -10,7 +10,7 @@ export default function modal(state = initialState, action) { case MODAL_OPEN: return { modalType: action.modalType, modalProps: action.modalProps }; case MODAL_CLOSE: - return initialState; + return (action.modalType === undefined || action.modalType === state.modalType) ? initialState : state; default: return state; } diff --git a/app/javascript/flavours/glitch/reducers/mutes.js b/app/javascript/flavours/glitch/reducers/mutes.js index 8f52a7704..7111bb710 100644 --- a/app/javascript/flavours/glitch/reducers/mutes.js +++ b/app/javascript/flavours/glitch/reducers/mutes.js @@ -7,7 +7,6 @@ import { const initialState = Immutable.Map({ new: Immutable.Map({ - isSubmitting: false, account: null, notifications: true, }), @@ -17,7 +16,6 @@ export default function mutes(state = initialState, action) { switch (action.type) { case MUTES_INIT_MODAL: return state.withMutations((state) => { - state.setIn(['new', 'isSubmitting'], false); state.setIn(['new', 'account'], action.account); state.setIn(['new', 'notifications'], true); }); diff --git a/app/javascript/flavours/glitch/reducers/notifications.js b/app/javascript/flavours/glitch/reducers/notifications.js index 5bbf9c822..3623e90da 100644 --- a/app/javascript/flavours/glitch/reducers/notifications.js +++ b/app/javascript/flavours/glitch/reducers/notifications.js @@ -9,6 +9,7 @@ import { NOTIFICATIONS_FILTER_SET, NOTIFICATIONS_CLEAR, NOTIFICATIONS_SCROLL_TOP, + NOTIFICATIONS_LOAD_PENDING, NOTIFICATIONS_DELETE_MARKED_REQUEST, NOTIFICATIONS_DELETE_MARKED_SUCCESS, NOTIFICATION_MARK_FOR_DELETE, @@ -19,12 +20,16 @@ import { import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS, + FOLLOW_REQUEST_AUTHORIZE_SUCCESS, + FOLLOW_REQUEST_REJECT_SUCCESS, } from 'flavours/glitch/actions/accounts'; +import { DOMAIN_BLOCK_SUCCESS } from 'flavours/glitch/actions/domain_blocks'; import { TIMELINE_DELETE, TIMELINE_DISCONNECT } from 'flavours/glitch/actions/timelines'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import compareId from 'flavours/glitch/util/compare_id'; const initialState = ImmutableMap({ + pendingItems: ImmutableList(), items: ImmutableList(), hasMore: true, top: false, @@ -46,9 +51,13 @@ const notificationToMap = (state, notification) => ImmutableMap({ status: notification.status ? notification.status.id : null, }); -const normalizeNotification = (state, notification) => { +const normalizeNotification = (state, notification, usePendingItems) => { const top = !shouldCountUnreadNotifications(state); + if (usePendingItems || !state.get('pendingItems').isEmpty()) { + return state.update('pendingItems', list => list.unshift(notificationToMap(state, notification))).update('unread', unread => unread + 1); + } + if (top) { state = state.set('lastReadId', notification.id); } else { @@ -64,7 +73,7 @@ const normalizeNotification = (state, notification) => { }); }; -const expandNormalizedNotifications = (state, notifications, next) => { +const expandNormalizedNotifications = (state, notifications, next, isLoadingRecent, usePendingItems) => { const top = !(shouldCountUnreadNotifications(state)); const lastReadId = state.get('lastReadId'); let items = ImmutableList(); @@ -75,7 +84,9 @@ const expandNormalizedNotifications = (state, notifications, next) => { return state.withMutations(mutable => { if (!items.isEmpty()) { - mutable.update('items', list => { + usePendingItems = isLoadingRecent && (usePendingItems || !mutable.get('pendingItems').isEmpty()); + + mutable.update(usePendingItems ? 'pendingItems' : 'items', list => { const lastIndex = 1 + list.findLastIndex( item => item !== null && (compareId(item.get('id'), items.last().get('id')) > 0 || item.get('id') === items.last().get('id')) ); @@ -104,12 +115,13 @@ const expandNormalizedNotifications = (state, notifications, next) => { }); }; -const filterNotifications = (state, relationship) => { - return state.update('items', list => list.filterNot(item => item !== null && item.get('account') === relationship.id)); +const filterNotifications = (state, accountIds, type) => { + const helper = list => list.filterNot(item => item !== null && accountIds.includes(item.get('account')) && (type === undefined || type === item.get('type'))); + return state.update('items', helper).update('pendingItems', helper); }; const clearUnread = (state) => { - state = state.set('unread', 0); + state = state.set('unread', state.get('pendingItems').size); const lastNotification = state.get('items').find(item => item !== null); return state.set('lastReadId', lastNotification ? lastNotification.get('id') : '0'); } @@ -131,7 +143,10 @@ const deleteByStatus = (state, statusId) => { const deletedUnread = state.get('items').filter(item => item !== null && item.get('status') === statusId && compareId(item.get('id'), lastReadId) > 0); state = state.update('unread', unread => unread - deletedUnread.size); } - return state.update('items', list => list.filterNot(item => item !== null && item.get('status') === statusId)); + const helper = list => list.filterNot(item => item !== null && item.get('status') === statusId); + const deletedUnread = state.get('pendingItems').filter(item => item !== null && item.get('status') === statusId && compareId(item.get('id'), lastReadId) > 0); + state = state.update('unread', unread => unread - deletedUnread.size); + return state.update('items', helper).update('pendingItems', helper); }; const markForDelete = (state, notificationId, yes) => { @@ -192,6 +207,8 @@ export default function notifications(state = initialState, action) { return state.update('mounted', count => count - 1); case NOTIFICATIONS_SET_VISIBILITY: return updateVisibility(state, action.visibility); + case NOTIFICATIONS_LOAD_PENDING: + return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0); case NOTIFICATIONS_EXPAND_REQUEST: case NOTIFICATIONS_DELETE_MARKED_REQUEST: return state.set('isLoading', true); @@ -203,20 +220,27 @@ export default function notifications(state = initialState, action) { case NOTIFICATIONS_SCROLL_TOP: return updateTop(state, action.top); case NOTIFICATIONS_UPDATE: - return normalizeNotification(state, action.notification); + return normalizeNotification(state, action.notification, action.usePendingItems); case NOTIFICATIONS_EXPAND_SUCCESS: - return expandNormalizedNotifications(state, action.notifications, action.next); + return expandNormalizedNotifications(state, action.notifications, action.next, action.isLoadingRecent, action.usePendingItems); case ACCOUNT_BLOCK_SUCCESS: - return filterNotifications(state, action.relationship); + return filterNotifications(state, [action.relationship.id]); + case ACCOUNT_MUTE_SUCCESS: + return action.relationship.muting_notifications ? filterNotifications(state, [action.relationship.id]) : state; + case DOMAIN_BLOCK_SUCCESS: + return filterNotifications(state, action.accounts); + case FOLLOW_REQUEST_AUTHORIZE_SUCCESS: + case FOLLOW_REQUEST_REJECT_SUCCESS: + return filterNotifications(state, [action.id], 'follow_request'); case ACCOUNT_MUTE_SUCCESS: - return action.relationship.muting_notifications ? filterNotifications(state, action.relationship) : state; + return action.relationship.muting_notifications ? filterNotifications(state, [action.relationship.id]) : state; case NOTIFICATIONS_CLEAR: - return state.set('items', ImmutableList()).set('hasMore', false); + return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', false); case TIMELINE_DELETE: return deleteByStatus(state, action.id); case TIMELINE_DISCONNECT: return action.timeline === 'home' ? - state.update('items', items => items.first() ? items.unshift(null) : items) : + state.update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items) : state; case NOTIFICATION_MARK_FOR_DELETE: diff --git a/app/javascript/flavours/glitch/reducers/polls.js b/app/javascript/flavours/glitch/reducers/polls.js index 9956cf83f..595f340bc 100644 --- a/app/javascript/flavours/glitch/reducers/polls.js +++ b/app/javascript/flavours/glitch/reducers/polls.js @@ -1,4 +1,4 @@ -import { POLLS_IMPORT } from 'mastodon/actions/importer'; +import { POLLS_IMPORT } from 'flavours/glitch/actions/importer'; import { Map as ImmutableMap, fromJS } from 'immutable'; const importPolls = (state, polls) => state.withMutations(map => polls.forEach(poll => map.set(poll.id, fromJS(poll)))); diff --git a/app/javascript/flavours/glitch/reducers/push_notifications.js b/app/javascript/flavours/glitch/reducers/push_notifications.js index e87e8fc1a..117fb5167 100644 --- a/app/javascript/flavours/glitch/reducers/push_notifications.js +++ b/app/javascript/flavours/glitch/reducers/push_notifications.js @@ -6,6 +6,7 @@ const initialState = Immutable.Map({ subscription: null, alerts: new Immutable.Map({ follow: false, + follow_request: false, favourite: false, reblog: false, mention: false, diff --git a/app/javascript/flavours/glitch/reducers/reports.js b/app/javascript/flavours/glitch/reducers/reports.js index fdcfb14a0..1f7f3f273 100644 --- a/app/javascript/flavours/glitch/reducers/reports.js +++ b/app/javascript/flavours/glitch/reducers/reports.js @@ -8,6 +8,9 @@ import { REPORT_COMMENT_CHANGE, REPORT_FORWARD_CHANGE, } from 'flavours/glitch/actions/reports'; +import { + TIMELINE_DELETE, +} from 'flavours/glitch/actions/timelines'; import { Map as ImmutableMap, Set as ImmutableSet } from 'immutable'; const initialState = ImmutableMap({ @@ -20,6 +23,14 @@ const initialState = ImmutableMap({ }), }); +const deleteStatus = (state, id, references) => { + references.forEach(ref => { + state = deleteStatus(state, ref[0], []); + }); + + return state.updateIn(['new', 'status_ids'], ImmutableSet(), set => set.remove(id)); +}; + export default function reports(state = initialState, action) { switch(action.type) { case REPORT_INIT: @@ -58,6 +69,8 @@ export default function reports(state = initialState, action) { map.setIn(['new', 'comment'], ''); map.setIn(['new', 'isSubmitting'], false); }); + case TIMELINE_DELETE: + return deleteStatus(state, action.id, action.references); default: return state; } diff --git a/app/javascript/flavours/glitch/reducers/search.js b/app/javascript/flavours/glitch/reducers/search.js index 9a525bf47..c346e958b 100644 --- a/app/javascript/flavours/glitch/reducers/search.js +++ b/app/javascript/flavours/glitch/reducers/search.js @@ -3,6 +3,7 @@ import { SEARCH_CLEAR, SEARCH_FETCH_SUCCESS, SEARCH_SHOW, + SEARCH_EXPAND_SUCCESS, } from 'flavours/glitch/actions/search'; import { COMPOSE_MENTION, @@ -16,6 +17,7 @@ const initialState = ImmutableMap({ submitted: false, hidden: false, results: ImmutableMap(), + searchTerm: '', }); export default function search(state = initialState, action) { @@ -40,7 +42,10 @@ export default function search(state = initialState, action) { accounts: ImmutableList(action.results.accounts.map(item => item.id)), statuses: ImmutableList(action.results.statuses.map(item => item.id)), hashtags: fromJS(action.results.hashtags), - })).set('submitted', true); + })).set('submitted', true).set('searchTerm', action.searchTerm); + case SEARCH_EXPAND_SUCCESS: + const results = action.searchType === 'hashtags' ? fromJS(action.results.hashtags) : action.results[action.searchType].map(item => item.id); + return state.updateIn(['results', action.searchType], list => list.concat(results)); default: return state; } diff --git a/app/javascript/flavours/glitch/reducers/settings.js b/app/javascript/flavours/glitch/reducers/settings.js index a37863a69..ef99ad552 100644 --- a/app/javascript/flavours/glitch/reducers/settings.js +++ b/app/javascript/flavours/glitch/reducers/settings.js @@ -15,6 +15,10 @@ const initialState = ImmutableMap({ skinTone: 1, + trends: ImmutableMap({ + show: true, + }), + home: ImmutableMap({ shows: ImmutableMap({ reblog: true, @@ -30,6 +34,7 @@ const initialState = ImmutableMap({ notifications: ImmutableMap({ alerts: ImmutableMap({ follow: true, + follow_request: false, favourite: true, reblog: true, mention: true, @@ -44,6 +49,7 @@ const initialState = ImmutableMap({ shows: ImmutableMap({ follow: true, + follow_request: false, favourite: true, reblog: true, mention: true, @@ -52,6 +58,7 @@ const initialState = ImmutableMap({ sounds: ImmutableMap({ follow: true, + follow_request: false, favourite: true, reblog: true, mention: true, diff --git a/app/javascript/flavours/glitch/reducers/statuses.js b/app/javascript/flavours/glitch/reducers/statuses.js index 96c9c6d04..ee8ac929d 100644 --- a/app/javascript/flavours/glitch/reducers/statuses.js +++ b/app/javascript/flavours/glitch/reducers/statuses.js @@ -3,6 +3,7 @@ import { REBLOG_FAIL, FAVOURITE_REQUEST, FAVOURITE_FAIL, + UNFAVOURITE_SUCCESS, BOOKMARK_REQUEST, BOOKMARK_FAIL, } from 'flavours/glitch/actions/interactions'; @@ -39,6 +40,9 @@ export default function statuses(state = initialState, action) { return importStatuses(state, action.statuses); case FAVOURITE_REQUEST: return state.setIn([action.status.get('id'), 'favourited'], true); + case UNFAVOURITE_SUCCESS: + const favouritesCount = action.status.get('favourites_count'); + return state.setIn([action.status.get('id'), 'favourites_count'], favouritesCount - 1); case FAVOURITE_FAIL: return state.get(action.status.get('id')) === undefined ? state : state.setIn([action.status.get('id'), 'favourited'], false); case BOOKMARK_REQUEST: diff --git a/app/javascript/flavours/glitch/reducers/suggestions.js b/app/javascript/flavours/glitch/reducers/suggestions.js index 9f4b89d58..a08fedc25 100644 --- a/app/javascript/flavours/glitch/reducers/suggestions.js +++ b/app/javascript/flavours/glitch/reducers/suggestions.js @@ -4,6 +4,8 @@ import { SUGGESTIONS_FETCH_FAIL, SUGGESTIONS_DISMISS, } from '../actions/suggestions'; +import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS } from 'flavours/glitch/actions/accounts'; +import { DOMAIN_BLOCK_SUCCESS } from 'flavours/glitch/actions/domain_blocks'; import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; const initialState = ImmutableMap({ @@ -24,6 +26,11 @@ export default function suggestionsReducer(state = initialState, action) { return state.set('isLoading', false); case SUGGESTIONS_DISMISS: return state.update('items', list => list.filterNot(id => id === action.id)); + case ACCOUNT_BLOCK_SUCCESS: + case ACCOUNT_MUTE_SUCCESS: + return state.update('items', list => list.filterNot(id => id === action.relationship.id)); + case DOMAIN_BLOCK_SUCCESS: + return state.update('items', list => list.filterNot(id => action.accounts.includes(id))); default: return state; } diff --git a/app/javascript/flavours/glitch/reducers/timelines.js b/app/javascript/flavours/glitch/reducers/timelines.js index 440b370e6..d3318f8d3 100644 --- a/app/javascript/flavours/glitch/reducers/timelines.js +++ b/app/javascript/flavours/glitch/reducers/timelines.js @@ -8,6 +8,7 @@ import { TIMELINE_SCROLL_TOP, TIMELINE_CONNECT, TIMELINE_DISCONNECT, + TIMELINE_LOAD_PENDING, } from 'flavours/glitch/actions/timelines'; import { ACCOUNT_BLOCK_SUCCESS, @@ -25,10 +26,11 @@ const initialTimeline = ImmutableMap({ top: true, isLoading: false, hasMore: true, + pendingItems: ImmutableList(), items: ImmutableList(), }); -const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, isLoadingRecent) => { +const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, isLoadingRecent, usePendingItems) => { return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { mMap.set('isLoading', false); mMap.set('isPartial', isPartial); @@ -38,7 +40,9 @@ const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, is if (timeline.endsWith(':pinned')) { mMap.set('items', statuses.map(status => status.get('id'))); } else if (!statuses.isEmpty()) { - mMap.update('items', ImmutableList(), oldIds => { + usePendingItems = isLoadingRecent && (usePendingItems || !mMap.get('pendingItems').isEmpty()); + + mMap.update(usePendingItems ? 'pendingItems' : 'items', ImmutableList(), oldIds => { const newIds = statuses.map(status => status.get('id')); const lastIndex = oldIds.findLastIndex(id => id !== null && compareId(id, newIds.last()) >= 0) + 1; const firstIndex = oldIds.take(lastIndex).findLastIndex(id => id !== null && compareId(id, newIds.first()) > 0); @@ -56,8 +60,23 @@ const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, is })); }; -const updateTimeline = (state, timeline, status) => { - const top = state.getIn([timeline, 'top']); +const updateTimeline = (state, timeline, status, usePendingItems, filtered) => { + const top = state.getIn([timeline, 'top']); + + if (usePendingItems || !state.getIn([timeline, 'pendingItems']).isEmpty()) { + if (state.getIn([timeline, 'pendingItems'], ImmutableList()).includes(status.get('id')) || state.getIn([timeline, 'items'], ImmutableList()).includes(status.get('id'))) { + return state; + } + + state = state.update(timeline, initialTimeline, map => map.update('pendingItems', list => list.unshift(status.get('id')))); + + if (!filtered) { + state = state.update('unread', unread => unread + 1); + } + + return state; + } + const ids = state.getIn([timeline, 'items'], ImmutableList()); const includesId = ids.includes(status.get('id')); const unread = state.getIn([timeline, 'unread'], 0); @@ -69,7 +88,7 @@ const updateTimeline = (state, timeline, status) => { let newIds = ids; return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { - if (!top) mMap.set('unread', unread + 1); + if (!top && !filtered) mMap.set('unread', unread + 1); if (top && ids.size > 40) newIds = newIds.take(20); mMap.set('items', newIds.unshift(status.get('id'))); })); @@ -77,8 +96,10 @@ const updateTimeline = (state, timeline, status) => { const deleteStatus = (state, id, accountId, references, exclude_account = null) => { state.keySeq().forEach(timeline => { - if (exclude_account === null || (timeline !== `account:${exclude_account}` && !timeline.startsWith(`account:${exclude_account}:`))) - state = state.updateIn([timeline, 'items'], list => list.filterNot(item => item === id)); + if (exclude_account === null || (timeline !== `account:${exclude_account}` && !timeline.startsWith(`account:${exclude_account}:`))) { + const helper = list => list.filterNot(item => item === id); + state = state.updateIn([timeline, 'items'], helper).updateIn([timeline, 'pendingItems'], helper); + } }); // Remove reblogs of deleted status @@ -108,29 +129,31 @@ const filterTimelines = (state, relationship, statuses) => { return state; }; -const filterTimeline = (timeline, state, relationship, statuses) => - state.updateIn([timeline, 'items'], ImmutableList(), list => - list.filterNot(statusId => - statuses.getIn([statusId, 'account']) === relationship.id - )); +const filterTimeline = (timeline, state, relationship, statuses) => { + const helper = list => list.filterNot(statusId => statuses.getIn([statusId, 'account']) === relationship.id); + return state.updateIn([timeline, 'items'], ImmutableList(), helper).updateIn([timeline, 'pendingItems'], ImmutableList(), helper); +}; const updateTop = (state, timeline, top) => { return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { - if (top) mMap.set('unread', 0); + if (top) mMap.set('unread', mMap.get('pendingItems').size); mMap.set('top', top); })); }; export default function timelines(state = initialState, action) { switch(action.type) { + case TIMELINE_LOAD_PENDING: + return state.update(action.timeline, initialTimeline, map => + map.update('items', list => map.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0)); case TIMELINE_EXPAND_REQUEST: return state.update(action.timeline, initialTimeline, map => map.set('isLoading', true)); case TIMELINE_EXPAND_FAIL: return state.update(action.timeline, initialTimeline, map => map.set('isLoading', false)); case TIMELINE_EXPAND_SUCCESS: - return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial, action.isLoadingRecent); + return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial, action.isLoadingRecent, action.usePendingItems); case TIMELINE_UPDATE: - return updateTimeline(state, action.timeline, fromJS(action.status)); + return updateTimeline(state, action.timeline, fromJS(action.status), action.usePendingItems, action.filtered); case TIMELINE_DELETE: return deleteStatus(state, action.id, action.accountId, action.references, action.reblogOf); case TIMELINE_CLEAR: @@ -148,7 +171,7 @@ export default function timelines(state = initialState, action) { return state.update( action.timeline, initialTimeline, - map => map.set('online', false).update('items', items => items.first() ? items.unshift(null) : items) + map => map.set('online', false).update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items) ); default: return state; diff --git a/app/javascript/flavours/glitch/reducers/trends.js b/app/javascript/flavours/glitch/reducers/trends.js new file mode 100644 index 000000000..5cecc8fca --- /dev/null +++ b/app/javascript/flavours/glitch/reducers/trends.js @@ -0,0 +1,23 @@ +import { TRENDS_FETCH_REQUEST, TRENDS_FETCH_SUCCESS, TRENDS_FETCH_FAIL } from '../actions/trends'; +import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; + +const initialState = ImmutableMap({ + items: ImmutableList(), + isLoading: false, +}); + +export default function trendsReducer(state = initialState, action) { + switch(action.type) { + case TRENDS_FETCH_REQUEST: + return state.set('isLoading', true); + case TRENDS_FETCH_SUCCESS: + return state.withMutations(map => { + map.set('items', fromJS(action.trends)); + map.set('isLoading', false); + }); + case TRENDS_FETCH_FAIL: + return state.set('isLoading', false); + default: + return state; + } +}; diff --git a/app/javascript/flavours/glitch/reducers/user_lists.js b/app/javascript/flavours/glitch/reducers/user_lists.js index a4df9ec8d..c8a6f524e 100644 --- a/app/javascript/flavours/glitch/reducers/user_lists.js +++ b/app/javascript/flavours/glitch/reducers/user_lists.js @@ -1,4 +1,7 @@ import { + NOTIFICATIONS_UPDATE, +} from '../actions/notifications'; +import { FOLLOWERS_FETCH_SUCCESS, FOLLOWERS_EXPAND_SUCCESS, FOLLOWING_FETCH_SUCCESS, @@ -20,6 +23,14 @@ import { MUTES_FETCH_SUCCESS, MUTES_EXPAND_SUCCESS, } from 'flavours/glitch/actions/mutes'; +import { + DIRECTORY_FETCH_REQUEST, + DIRECTORY_FETCH_SUCCESS, + DIRECTORY_FETCH_FAIL, + DIRECTORY_EXPAND_REQUEST, + DIRECTORY_EXPAND_SUCCESS, + DIRECTORY_EXPAND_FAIL, +} from 'flavours/glitch/actions/directory'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; const initialState = ImmutableMap({ @@ -45,6 +56,12 @@ const appendToList = (state, type, id, accounts, next) => { }); }; +const normalizeFollowRequest = (state, notification) => { + return state.updateIn(['follow_requests', 'items'], list => { + return list.filterNot(item => item === notification.account.id).unshift(notification.account.id); + }); +}; + export default function userLists(state = initialState, action) { switch(action.type) { case FOLLOWERS_FETCH_SUCCESS: @@ -59,6 +76,8 @@ export default function userLists(state = initialState, action) { return state.setIn(['reblogged_by', action.id], ImmutableList(action.accounts.map(item => item.id))); case FAVOURITES_FETCH_SUCCESS: return state.setIn(['favourited_by', action.id], ImmutableList(action.accounts.map(item => item.id))); + case NOTIFICATIONS_UPDATE: + return action.notification.type === 'follow_request' ? normalizeFollowRequest(state, action.notification) : state; case FOLLOW_REQUESTS_FETCH_SUCCESS: return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next); case FOLLOW_REQUESTS_EXPAND_SUCCESS: @@ -74,6 +93,16 @@ export default function userLists(state = initialState, action) { return state.setIn(['mutes', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next); case MUTES_EXPAND_SUCCESS: return state.updateIn(['mutes', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next); + case DIRECTORY_FETCH_SUCCESS: + return state.setIn(['directory', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['directory', 'isLoading'], false); + case DIRECTORY_EXPAND_SUCCESS: + return state.updateIn(['directory', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['directory', 'isLoading'], false); + case DIRECTORY_FETCH_REQUEST: + case DIRECTORY_EXPAND_REQUEST: + return state.setIn(['directory', 'isLoading'], true); + case DIRECTORY_FETCH_FAIL: + case DIRECTORY_EXPAND_FAIL: + return state.setIn(['directory', 'isLoading'], false); default: return state; } diff --git a/app/javascript/flavours/glitch/selectors/index.js b/app/javascript/flavours/glitch/selectors/index.js index d1a88a2fc..8ceb71d03 100644 --- a/app/javascript/flavours/glitch/selectors/index.js +++ b/app/javascript/flavours/glitch/selectors/index.js @@ -1,5 +1,6 @@ +import escapeTextContentForBrowser from 'escape-html'; import { createSelector } from 'reselect'; -import { List as ImmutableList } from 'immutable'; +import { List as ImmutableList, is } from 'immutable'; import { me } from 'flavours/glitch/util/initial_state'; const getAccountBase = (state, id) => state.getIn(['accounts', id], null); @@ -20,7 +21,7 @@ export const makeGetAccount = () => { }); }; -const toServerSideType = columnType => { +export const toServerSideType = columnType => { switch (columnType) { case 'home': case 'notifications': @@ -36,8 +37,6 @@ const toServerSideType = columnType => { } }; -export const getFilters = (state, { contextType }) => state.get('filters', ImmutableList()).filter(filter => contextType && filter.get('context').includes(toServerSideType(contextType)) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))); - const escapeRegExp = string => string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string @@ -63,6 +62,27 @@ export const regexFromFilters = filters => { }).join('|'), 'i'); }; +// Memoize the filter regexps for each valid server contextType +const makeGetFiltersRegex = () => { + let memo = {}; + + return (state, { contextType }) => { + if (!contextType) return ImmutableList(); + + const serverSideType = toServerSideType(contextType); + const filters = state.get('filters', ImmutableList()).filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))); + + if (!memo[serverSideType] || !is(memo[serverSideType].filters, filters)) { + const dropRegex = regexFromFilters(filters.filter(filter => filter.get('irreversible'))); + const regex = regexFromFilters(filters); + memo[serverSideType] = { filters: filters, results: [dropRegex, regex] }; + } + return memo[serverSideType].results; + }; +}; + +export const getFiltersRegex = makeGetFiltersRegex(); + export const makeGetStatus = () => { return createSelector( [ @@ -70,15 +90,24 @@ export const makeGetStatus = () => { (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'reblog'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]), - getFilters, + (state, _) => state.getIn(['local_settings', 'filtering_behavior']), + (state, _) => state.get('filters', ImmutableList()), + (_, { contextType }) => contextType, + getFiltersRegex, ], - (statusBase, statusReblog, accountBase, accountReblog, filters) => { + (statusBase, statusReblog, accountBase, accountReblog, filteringBehavior, filters, contextType, filtersRegex) => { if (!statusBase) { return null; } - const regex = (accountReblog || accountBase).get('id') !== me && regexFromFilters(filters); + const dropRegex = (accountReblog || accountBase).get('id') !== me && filtersRegex[0]; + + if (dropRegex && dropRegex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index'))) { + return null; + } + + const regex = (accountReblog || accountBase).get('id') !== me && filtersRegex[1]; let filtered = false; if (statusReblog) { @@ -91,6 +120,26 @@ export const makeGetStatus = () => { filtered = filtered || regex && regex.test(statusBase.get('search_index')); + if (filtered && filteringBehavior === 'drop') { + return null; + } else if (filtered && filteringBehavior === 'content_warning') { + let spoilerText = (statusReblog || statusBase).get('spoiler_text', ''); + const searchIndex = (statusReblog || statusBase).get('search_index'); + const serverSideType = toServerSideType(contextType); + const enabledFilters = filters.filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))).toArray(); + const matchingFilters = enabledFilters.filter(filter => { + const regexp = regexFromFilters([filter]); + return regexp.test(searchIndex) && !regexp.test(spoilerText); + }); + if (statusReblog) { + statusReblog = statusReblog.set('spoiler_text', matchingFilters.map(filter => filter.get('phrase')).concat([spoilerText]).filter(cw => !!cw).join(', ')); + statusReblog = statusReblog.update('spoilerHtml', '', spoilerText => matchingFilters.map(filter => escapeTextContentForBrowser(filter.get('phrase'))).concat([spoilerText]).filter(cw => !!cw).join(', ')); + } else { + statusBase = statusBase.set('spoiler_text', matchingFilters.map(filter => filter.get('phrase')).concat([spoilerText]).filter(cw => !!cw).join(', ')); + statusBase = statusBase.update('spoilerHtml', '', spoilerText => matchingFilters.map(filter => escapeTextContentForBrowser(filter.get('phrase'))).concat([spoilerText]).filter(cw => !!cw).join(', ')); + } + } + return statusBase.withMutations(map => { map.set('reblog', statusReblog); map.set('account', accountBase); @@ -108,6 +157,7 @@ export const getAlerts = createSelector([getAlertsBase], (base) => { base.forEach(item => { arr.push({ message: item.get('message'), + message_values: item.get('message_values'), title: item.get('title'), key: item.get('key'), dismissAfter: 5000, diff --git a/app/javascript/flavours/glitch/styles/_mixins.scss b/app/javascript/flavours/glitch/styles/_mixins.scss index d542b1083..088b41e76 100644 --- a/app/javascript/flavours/glitch/styles/_mixins.scss +++ b/app/javascript/flavours/glitch/styles/_mixins.scss @@ -62,24 +62,6 @@ color: $darker-text-color; font-size: 14px; margin: 0; - - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus, - &:active { - outline: 0 !important; - } - - &:focus { - background: lighten($ui-base-color, 4%); - } - - @media screen and (max-width: 600px) { - font-size: 16px; - } } @mixin search-popout() { diff --git a/app/javascript/flavours/glitch/styles/about.scss b/app/javascript/flavours/glitch/styles/about.scss index 0e910693d..a38ca99b4 100644 --- a/app/javascript/flavours/glitch/styles/about.scss +++ b/app/javascript/flavours/glitch/styles/about.scss @@ -17,109 +17,102 @@ $small-breakpoint: 960px; .rich-formatting { font-family: $font-sans-serif, sans-serif; - font-size: 16px; + font-size: 14px; font-weight: 400; - font-size: 16px; - line-height: 30px; + line-height: 1.7; + word-wrap: break-word; color: $darker-text-color; - padding-right: 10px; a { color: $highlight-text-color; text-decoration: underline; + + &:hover, + &:focus, + &:active { + text-decoration: none; + } } p, li { - font-family: $font-sans-serif, sans-serif; - font-size: 16px; - font-weight: 400; - font-size: 16px; - line-height: 30px; - margin-bottom: 12px; color: $darker-text-color; + } - a { - color: $highlight-text-color; - text-decoration: underline; - } + p { + margin-top: 0; + margin-bottom: .85em; &:last-child { margin-bottom: 0; } } - strong, - em { + strong { font-weight: 700; - color: lighten($darker-text-color, 10%); + color: $secondary-text-color; } - h1 { - font-family: $font-display, sans-serif; - font-size: 26px; - line-height: 30px; - font-weight: 500; - margin-bottom: 20px; + em { + font-style: italic; color: $secondary-text-color; + } - small { - font-family: $font-sans-serif, sans-serif; - display: block; - font-size: 18px; - font-weight: 400; - color: lighten($darker-text-color, 10%); - } + code { + font-size: 0.85em; + background: darken($ui-base-color, 8%); + border-radius: 4px; + padding: 0.2em 0.3em; } - h2 { + h1, + h2, + h3, + h4, + h5, + h6 { font-family: $font-display, sans-serif; - font-size: 22px; - line-height: 26px; + margin-top: 1.275em; + margin-bottom: .85em; font-weight: 500; - margin-bottom: 20px; color: $secondary-text-color; } + h1 { + font-size: 2em; + } + + h2 { + font-size: 1.75em; + } + h3 { - font-family: $font-display, sans-serif; - font-size: 18px; - line-height: 24px; - font-weight: 500; - margin-bottom: 20px; - color: $secondary-text-color; + font-size: 1.5em; } h4 { - font-family: $font-display, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 500; - margin-bottom: 20px; - color: $secondary-text-color; + font-size: 1.25em; } - h5 { - font-family: $font-display, sans-serif; - font-size: 14px; - line-height: 24px; - font-weight: 500; - margin-bottom: 20px; - color: $secondary-text-color; + h5, + h6 { + font-size: 1em; } - h6 { - font-family: $font-display, sans-serif; - font-size: 12px; - line-height: 24px; - font-weight: 500; - margin-bottom: 20px; - color: $secondary-text-color; + ul { + list-style: disc; + } + + ol { + list-style: decimal; } ul, ol { - margin-left: 20px; + margin: 0; + padding: 0; + padding-left: 2em; + margin-bottom: 0.85em; &[type='a'] { list-style-type: lower-alpha; @@ -130,31 +123,74 @@ $small-breakpoint: 960px; } } - ul { - list-style: disc; - } - - ol { - list-style: decimal; - } - - li > ol, - li > ul { - margin-top: 6px; - } - hr { width: 100%; height: 0; border: 0; - border-bottom: 1px solid rgba($ui-base-lighter-color, .6); - margin: 20px 0; + border-bottom: 1px solid lighten($ui-base-color, 4%); + margin: 1.7em 0; &.spacer { height: 1px; border: 0; } } + + table { + width: 100%; + border-collapse: collapse; + break-inside: auto; + margin-top: 24px; + margin-bottom: 32px; + + thead tr, + tbody tr { + border-bottom: 1px solid lighten($ui-base-color, 4%); + font-size: 1em; + line-height: 1.625; + font-weight: 400; + text-align: left; + color: $darker-text-color; + } + + thead tr { + border-bottom-width: 2px; + line-height: 1.5; + font-weight: 500; + color: $dark-text-color; + } + + th, + td { + padding: 8px; + align-self: start; + align-items: start; + word-break: break-all; + + &.nowrap { + width: 25%; + position: relative; + + &::before { + content: ' '; + visibility: hidden; + } + + span { + position: absolute; + left: 8px; + right: 8px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + } + + & > :first-child { + margin-top: 0; + } } .information-board { @@ -418,7 +454,7 @@ $small-breakpoint: 960px; } &__call-to-action { - background: darken($ui-base-color, 4%); + background: $ui-base-color; border-radius: 4px; padding: 25px 40px; overflow: hidden; diff --git a/app/javascript/flavours/glitch/styles/accounts.scss b/app/javascript/flavours/glitch/styles/accounts.scss index 0fae137f0..a827d271a 100644 --- a/app/javascript/flavours/glitch/styles/accounts.scss +++ b/app/javascript/flavours/glitch/styles/accounts.scss @@ -226,6 +226,7 @@ } .account__header__fields { + max-width: 100vw; padding: 0; margin: 15px -15px -15px; border: 0 none; diff --git a/app/javascript/flavours/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss index 74f91599a..1d25d0129 100644 --- a/app/javascript/flavours/glitch/styles/admin.scss +++ b/app/javascript/flavours/glitch/styles/admin.scss @@ -5,21 +5,66 @@ $content-width: 840px; .admin-wrapper { display: flex; justify-content: center; - height: 100%; + width: 100%; + min-height: 100vh; .sidebar-wrapper { - flex: 1 1 $sidebar-width; - height: 100%; - background: $ui-base-color; - display: flex; - justify-content: flex-end; + min-height: 100vh; + overflow: hidden; + pointer-events: none; + flex: 1 1 auto; + + &__inner { + display: flex; + justify-content: flex-end; + background: $ui-base-color; + height: 100%; + } } .sidebar { width: $sidebar-width; - height: 100%; padding: 0; - overflow-y: auto; + pointer-events: auto; + + &__toggle { + display: none; + background: lighten($ui-base-color, 8%); + height: 48px; + + &__logo { + flex: 1 1 auto; + + a { + display: inline-block; + padding: 15px; + } + + svg { + fill: $primary-text-color; + height: 20px; + position: relative; + bottom: -2px; + } + } + + &__icon { + display: block; + color: $darker-text-color; + text-decoration: none; + flex: 0 0 auto; + font-size: 20px; + padding: 15px; + } + + a { + &:hover, + &:focus, + &:active { + background: lighten($ui-base-color, 12%); + } + } + } .logo { display: block; @@ -52,6 +97,9 @@ $content-width: 840px; transition: all 200ms linear; transition-property: color, background-color; border-radius: 4px 0 0 4px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; i.fa { margin-right: 5px; @@ -99,12 +147,30 @@ $content-width: 840px; } .content-wrapper { - flex: 2 1 $content-width; - overflow: auto; + box-sizing: border-box; + width: 100%; + max-width: $content-width; + flex: 1 1 auto; + } + + @media screen and (max-width: $content-width + $sidebar-width) { + .sidebar-wrapper--empty { + display: none; + } + + .sidebar-wrapper { + width: $sidebar-width; + flex: 0 0 auto; + } + } + + @media screen and (max-width: $no-columns-breakpoint) { + .sidebar-wrapper { + width: 100%; + } } .content { - max-width: $content-width; padding: 20px 15px; padding-top: 60px; padding-left: 25px; @@ -123,6 +189,12 @@ $content-width: 840px; padding-bottom: 40px; border-bottom: 1px solid lighten($ui-base-color, 8%); margin-bottom: 40px; + + @media screen and (max-width: $no-columns-breakpoint) { + border-bottom: 0; + padding-bottom: 0; + font-weight: 700; + } } h3 { @@ -147,7 +219,7 @@ $content-width: 840px; font-size: 16px; color: $secondary-text-color; line-height: 28px; - font-weight: 400; + font-weight: 500; } .fields-group h6 { @@ -176,7 +248,7 @@ $content-width: 840px; & > p { font-size: 14px; - line-height: 18px; + line-height: 21px; color: $secondary-text-color; margin-bottom: 20px; @@ -204,61 +276,98 @@ $content-width: 840px; border: 0; } } - - .muted-hint { - color: $darker-text-color; - - a { - color: $highlight-text-color; - } - } - - .positive-hint { - color: $valid-value-color; - font-weight: 500; - } - - .negative-hint { - color: $error-value-color; - font-weight: 500; - } - - .neutral-hint { - color: $dark-text-color; - font-weight: 500; - } } @media screen and (max-width: $no-columns-breakpoint) { display: block; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - .sidebar-wrapper, - .content-wrapper { - flex: 0 0 auto; - height: auto; - overflow: initial; + .sidebar-wrapper { + min-height: 0; } .sidebar { width: 100%; padding: 0; height: auto; + + &__toggle { + display: flex; + } + + & > ul { + display: none; + } + + ul a, + ul ul a { + border-radius: 0; + border-bottom: 1px solid lighten($ui-base-color, 4%); + transition: none; + + &:hover { + transition: none; + } + } + + ul ul { + border-radius: 0; + } + + ul .simple-navigation-active-leaf a { + border-bottom-color: $ui-highlight-color; + } } } } +hr.spacer { + width: 100%; + border: 0; + margin: 20px 0; + height: 1px; +} + +body, +.admin-wrapper .content { + .muted-hint { + color: $darker-text-color; + + a { + color: $highlight-text-color; + } + } + + .positive-hint { + color: $valid-value-color; + font-weight: 500; + } + + .negative-hint { + color: $error-value-color; + font-weight: 500; + } + + .neutral-hint { + color: $dark-text-color; + font-weight: 500; + } + + .warning-hint { + color: $gold-star; + font-weight: 500; + } +} + .filters { display: flex; flex-wrap: wrap; .filter-subset { flex: 0 0 auto; - margin: 0 40px 10px 0; + margin: 0 40px 20px 0; &:last-child { - margin-bottom: 20px; + margin-bottom: 30px; } ul { @@ -720,3 +829,47 @@ a.name-tag, text-overflow: ellipsis; vertical-align: middle; } + +.admin-account-bio { + display: flex; + flex-wrap: wrap; + margin: 0 -5px; + margin-top: 20px; + + > div { + box-sizing: border-box; + padding: 0 5px; + margin-bottom: 10px; + flex: 1 0 50%; + } + + .account__header__fields, + .account__header__content { + background: lighten($ui-base-color, 8%); + border-radius: 4px; + height: 100%; + } + + .account__header__fields { + margin: 0; + border: 0; + + a { + color: lighten($ui-highlight-color, 8%); + } + + dl:first-child .verified { + border-radius: 0 4px 0 0; + } + + .verified a { + color: $valid-value-color; + } + } + + .account__header__content { + box-sizing: border-box; + padding: 20px; + color: $primary-text-color; + } +} diff --git a/app/javascript/flavours/glitch/styles/basics.scss b/app/javascript/flavours/glitch/styles/basics.scss index 550b7fdfc..77631097a 100644 --- a/app/javascript/flavours/glitch/styles/basics.scss +++ b/app/javascript/flavours/glitch/styles/basics.scss @@ -7,7 +7,7 @@ body { font-family: $font-sans-serif, sans-serif; - background: darken($ui-base-color, 8%); + background: darken($ui-base-color, 7%); font-size: 13px; line-height: 18px; font-weight: 400; @@ -34,11 +34,19 @@ body { } &.app-body { - position: absolute; - width: 100%; - height: 100%; padding: 0; - background: $ui-base-color; + + &.layout-single-column { + height: auto; + min-height: 100vh; + overflow-y: scroll; + } + + &.layout-multiple-columns { + position: absolute; + width: 100%; + height: 100%; + } &.with-modals--active { overflow-y: hidden; @@ -55,7 +63,6 @@ body { &--active { overflow-y: hidden; - margin-right: 13px; } } @@ -74,9 +81,6 @@ body { &.admin { background: darken($ui-base-color, 4%); - position: fixed; - width: 100%; - height: 100%; padding: 0; } @@ -127,9 +131,22 @@ button { & > div { display: flex; width: 100%; - height: 100%; align-items: center; justify-content: center; outline: 0 !important; } } + +.layout-single-column .app-holder { + &, + & > div { + min-height: 100vh; + } +} + +.layout-multiple-columns .app-holder { + &, + & > div { + height: 100%; + } +} diff --git a/app/javascript/flavours/glitch/styles/components/accounts.scss b/app/javascript/flavours/glitch/styles/components/accounts.scss index d2233207d..5be4da48a 100644 --- a/app/javascript/flavours/glitch/styles/components/accounts.scss +++ b/app/javascript/flavours/glitch/styles/components/accounts.scss @@ -50,6 +50,8 @@ &-composite { @include avatar-radius; overflow: hidden; + position: relative; + cursor: default; & div { @include avatar-radius; @@ -57,6 +59,18 @@ position: relative; box-sizing: border-box; } + + &__label { + display: block; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: $primary-text-color; + text-shadow: 1px 1px 2px $base-shadow-color; + font-weight: 700; + font-size: 15px; + } } } @@ -245,6 +259,28 @@ .column-select { &__control { @include search-input(); + + &::placeholder { + color: lighten($darker-text-color, 4%); + } + + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus, + &:active { + outline: 0 !important; + } + + &:focus { + background: lighten($ui-base-color, 4%); + } + + @media screen and (max-width: 600px) { + font-size: 16px; + } } &__placeholder { @@ -415,6 +451,24 @@ } } } + + &.directory__section-headline { + background: darken($ui-base-color, 2%); + border-bottom-color: transparent; + + a, + button { + &.active { + &::before { + display: none; + } + + &::after { + border-color: transparent transparent darken($ui-base-color, 7%); + } + } + } + } } .account__moved-note { diff --git a/app/javascript/flavours/glitch/styles/components/columns.scss b/app/javascript/flavours/glitch/styles/components/columns.scss index b354e7acf..6ba9698c5 100644 --- a/app/javascript/flavours/glitch/styles/components/columns.scss +++ b/app/javascript/flavours/glitch/styles/components/columns.scss @@ -17,6 +17,7 @@ justify-content: center; width: 100%; height: 100%; + min-height: 100vh; &__pane { height: 100%; @@ -24,12 +25,14 @@ pointer-events: none; display: flex; justify-content: flex-end; + min-width: 285px; &--start { justify-content: flex-start; } &__inner { + position: fixed; width: 285px; pointer-events: auto; height: 100%; @@ -40,16 +43,37 @@ box-sizing: border-box; width: 100%; max-width: 600px; + flex: 0 0 auto; display: flex; flex-direction: column; - @media screen and (min-width: 360px) { + @media screen and (min-width: $no-gap-breakpoint) { padding: 0 10px; } } } } +.tabs-bar__wrapper { + background: darken($ui-base-color, 8%); + position: sticky; + top: 0; + z-index: 2; + padding-top: 0; + + @media screen and (min-width: $no-gap-breakpoint) { + padding-top: 10px; + } + + .tabs-bar { + margin-bottom: 0; + + @media screen and (min-width: $no-gap-breakpoint) { + margin-bottom: 10px; + } + } +} + .react-swipeable-view-container { &, .columns-area, @@ -83,7 +107,6 @@ flex-direction: column; width: 100%; height: 100%; - background: darken($ui-base-color, 7%); } .column { @@ -91,6 +114,8 @@ } .column-back-button { + box-sizing: border-box; + width: 100%; background: lighten($ui-base-color, 4%); color: $highlight-text-color; cursor: pointer; @@ -466,14 +491,14 @@ } .auto-columns.navbar-under { - @media screen and (max-width: 360px) { + @media screen and (max-width: $no-gap-breakpoint) { @include fix-margins-for-navbar-under; } } .auto-columns.navbar-under .react-swipeable-view-container .columns-area, .single-column.navbar-under .react-swipeable-view-container .columns-area { - @media screen and (max-width: 360px) { + @media screen and (max-width: $no-gap-breakpoint) { height: 100% !important; } } diff --git a/app/javascript/flavours/glitch/styles/components/composer.scss b/app/javascript/flavours/glitch/styles/components/composer.scss index c06d79ffc..51287f62e 100644 --- a/app/javascript/flavours/glitch/styles/components/composer.scss +++ b/app/javascript/flavours/glitch/styles/components/composer.scss @@ -2,6 +2,18 @@ padding: 10px; } +.character-counter { + cursor: default; + font-family: $font-sans-serif, sans-serif; + font-size: 14px; + font-weight: 600; + color: $lighter-text-color; + + &.character-counter--over { + color: $warning-red; + } +} + .no-reduce-motion .composer--spoiler { transition: height 0.4s ease, opacity 0.4s ease; } @@ -32,6 +44,10 @@ font-family: inherit; resize: vertical; + &::placeholder { + color: $dark-text-color; + } + &:focus { outline: 0 } @include single-column('screen and (max-width: 630px)') { font-size: 16px } } @@ -127,6 +143,7 @@ overflow: visible; white-space: pre-wrap; padding-top: 5px; + overflow: hidden; p, pre, blockquote { margin-bottom: 20px; @@ -232,6 +249,7 @@ .compose-form__autosuggest-wrapper, .autosuggest-input { position: relative; + width: 100%; label { .autosuggest-textarea__textarea { @@ -251,6 +269,10 @@ resize: none; scrollbar-color: initial; + &::placeholder { + color: $dark-text-color; + } + &::-webkit-scrollbar { all: unset; } @@ -314,29 +336,46 @@ } .autosuggest-textarea__suggestions__item { - display: flex; - flex-direction: row; - align-items: center; - justify-content: flex-start; - border-radius: 4px; padding: 10px; - font-size: 14px; - line-height: 18px; - overflow: hidden; cursor: pointer; + border-radius: 4px; &:hover, &:focus, &:active, &.selected { background: darken($ui-secondary-color, 10%) } - & > .emoji { - img { - display: block; - float: left; - margin-right: 8px; - width: 18px; - height: 18px; + > .account, + > .emoji, + > .autosuggest-hashtag { + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + line-height: 18px; + font-size: 14px; + } + + .autosuggest-hashtag { + justify-content: space-between; + + &__name { + flex: 1 1 auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + strong { + font-weight: 500; + } + + &__uses { + flex: 0 0 auto; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } } @@ -370,6 +409,7 @@ border-radius: 4px; height: 140px; width: 100%; + background-color: $base-shadow-color; background-position: center; background-size: cover; background-repeat: no-repeat; @@ -488,12 +528,18 @@ background: $simple-background-color; } -.composer--options { +.composer--options-wrapper { padding: 10px; background: darken($simple-background-color, 8%); - box-shadow: inset 0 5px 5px rgba($base-shadow-color, 0.05); border-radius: 0 0 4px 4px; height: 27px; + display: flex; + justify-content: space-between; + flex: 0 0 auto; +} + +.composer--options { + display: flex; flex: 0 0 auto; & > * { @@ -518,6 +564,11 @@ } } +.compose--counter-wrapper { + align-self: center; + margin-right: 4px; +} + .composer--options--dropdown { &.open { & > .value { @@ -588,13 +639,6 @@ justify-content: flex-end; flex: 0 0 auto; - & > .count { - display: inline-block; - margin: 0 16px 0 8px; - font-size: 16px; - line-height: 36px; - } - & > .primary { display: inline-block; margin: 0; @@ -604,7 +648,7 @@ & > .side_arm { display: inline-block; - margin: 0 2px 0 0; + margin: 0 2px; padding: 0; width: 36px; text-align: center; diff --git a/app/javascript/flavours/glitch/styles/components/directory.scss b/app/javascript/flavours/glitch/styles/components/directory.scss new file mode 100644 index 000000000..b0ad5a88a --- /dev/null +++ b/app/javascript/flavours/glitch/styles/components/directory.scss @@ -0,0 +1,180 @@ +.directory { + &__list { + width: 100%; + margin: 10px 0; + transition: opacity 100ms ease-in; + + &.loading { + opacity: 0.7; + } + + @media screen and (max-width: $no-gap-breakpoint) { + margin: 0; + } + } + + &__card { + box-sizing: border-box; + margin-bottom: 10px; + + &__img { + height: 125px; + position: relative; + background: darken($ui-base-color, 12%); + overflow: hidden; + + img { + display: block; + width: 100%; + height: 100%; + margin: 0; + object-fit: cover; + } + } + + &__bar { + display: flex; + align-items: center; + background: lighten($ui-base-color, 4%); + padding: 10px; + + &__name { + flex: 1 1 auto; + display: flex; + align-items: center; + text-decoration: none; + overflow: hidden; + } + + &__relationship { + width: 23px; + min-height: 1px; + flex: 0 0 auto; + } + + .avatar { + flex: 0 0 auto; + width: 48px; + height: 48px; + padding-top: 2px; + + img { + width: 100%; + height: 100%; + display: block; + margin: 0; + border-radius: 4px; + background: darken($ui-base-color, 8%); + object-fit: cover; + } + } + + .display-name { + margin-left: 15px; + text-align: left; + + strong { + font-size: 15px; + color: $primary-text-color; + font-weight: 500; + overflow: hidden; + text-overflow: ellipsis; + } + + span { + display: block; + font-size: 14px; + color: $darker-text-color; + font-weight: 400; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + + &__extra { + background: $ui-base-color; + display: flex; + align-items: center; + justify-content: center; + + .accounts-table__count { + width: 33.33%; + flex: 0 0 auto; + padding: 15px 0; + } + + .account__header__content { + box-sizing: border-box; + padding: 15px 10px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + width: 100%; + min-height: 18px + 30px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + p { + display: none; + + &:first-child { + display: inline; + } + } + + br { + display: none; + } + } + } + } +} + +.filter-form { + background: $ui-base-color; + + &__column { + padding: 10px 15px; + } + + .radio-button { + display: block; + } +} + +.radio-button { + font-size: 14px; + position: relative; + display: inline-block; + padding: 6px 0; + line-height: 18px; + cursor: default; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; + + input[type=radio], + input[type=checkbox] { + display: none; + } + + &__input { + display: inline-block; + position: relative; + border: 1px solid $ui-primary-color; + box-sizing: border-box; + width: 18px; + height: 18px; + flex: 0 0 auto; + margin-right: 10px; + top: -1px; + border-radius: 50%; + vertical-align: middle; + + &.checked { + border-color: lighten($ui-highlight-color, 8%); + background: lighten($ui-highlight-color, 8%); + } + } +} diff --git a/app/javascript/flavours/glitch/styles/components/drawer.scss b/app/javascript/flavours/glitch/styles/components/drawer.scss index f054ddbc0..93a3f62ed 100644 --- a/app/javascript/flavours/glitch/styles/components/drawer.scss +++ b/app/javascript/flavours/glitch/styles/components/drawer.scss @@ -73,108 +73,31 @@ } } -.drawer--search { +.search { position: relative; margin-bottom: 10px; flex: none; - @include limited-single-column('screen and (max-width: 360px)') { margin-bottom: 0 } + @include limited-single-column('screen and (max-width: #{$no-gap-breakpoint})') { margin-bottom: 0 } @include single-column('screen and (max-width: 630px)') { font-size: 16px } - - input { - display: block; - box-sizing: border-box; - margin: 0; - border: none; - padding: 15px 30px 15px 15px; - width: 100%; - outline: 0; - color: $darker-text-color; - background: $ui-base-color; - font-size: 14px; - font-family: inherit; - line-height: 16px; - - &:focus { - outline: 0; - background: lighten($ui-base-color, 4%); - } - } - - & > .icon { - display: block; - position: absolute; - top: 10px; - right: 10px; - width: 18px; - height: 18px; - color: $secondary-text-color; - font-size: 18px; - line-height: 18px; - z-index: 2; - - .fa { - display: inline-block; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - opacity: 0; - cursor: default; - pointer-events: none; - transition: all 100ms linear; - transition-property: color, transform, opacity; - } - - .fa-search { - opacity: 0.3; - transform: rotate(0deg); - } - - .fa-times-circle { - transform: rotate(-90deg); - cursor: pointer; - - &:hover { color: $primary-text-color } - } - } - - &.active { - & > .icon { - .fa-search { - opacity: 0; - transform: rotate(90deg); - } - - .fa-times-circle { - opacity: 0.3; - pointer-events: auto; - transform: rotate(0deg); - } - } - } } -.drawer--search--popout { +.search-popout { @include search-popout(); } .drawer--account { padding: 10px; color: $darker-text-color; + display: flex; + align-items: center; - & > a { + a { color: inherit; text-decoration: none; } - & > .avatar { - float: left; - margin-right: 10px; - } - - & > .acct { + .acct { display: block; color: $secondary-text-color; font-weight: 500; @@ -184,6 +107,12 @@ } } +.navigation-bar__profile { + flex: 1 1 auto; + margin-left: 8px; + overflow: hidden; +} + .drawer--results { background: $ui-base-color; overflow-x: hidden; diff --git a/app/javascript/flavours/glitch/styles/components/error_boundary.scss b/app/javascript/flavours/glitch/styles/components/error_boundary.scss index f9bf425f8..3176690e2 100644 --- a/app/javascript/flavours/glitch/styles/components/error_boundary.scss +++ b/app/javascript/flavours/glitch/styles/components/error_boundary.scss @@ -1,4 +1,8 @@ .error-boundary { + color: $primary-text-color; + font-size: 15px; + line-height: 20px; + h1 { font-size: 26px; line-height: 36px; @@ -6,27 +10,21 @@ margin-bottom: 8px; } - p { + a { color: $primary-text-color; - font-size: 15px; - line-height: 20px; - - a { - color: $primary-text-color; - text-decoration: underline; - } + text-decoration: underline; + } - ul { - list-style: disc; - margin-left: 0; - padding-left: 1em; - } + ul { + list-style: disc; + margin-left: 0; + padding-left: 1em; + } - textarea.web_app_crash-stacktrace { - width: 100%; - resize: none; - white-space: pre; - font-family: $font-monospace, monospace; - } + textarea.web_app_crash-stacktrace { + width: 100%; + resize: none; + white-space: pre; + font-family: $font-monospace, monospace; } } diff --git a/app/javascript/flavours/glitch/styles/components/index.scss b/app/javascript/flavours/glitch/styles/components/index.scss index 9f96a3154..febc95513 100644 --- a/app/javascript/flavours/glitch/styles/components/index.scss +++ b/app/javascript/flavours/glitch/styles/components/index.scss @@ -3,6 +3,27 @@ -ms-overflow-style: -ms-autohiding-scrollbar; } +.link-button { + display: block; + font-size: 15px; + line-height: 20px; + color: $ui-highlight-color; + border: 0; + background: transparent; + padding: 0; + cursor: pointer; + + &:hover, + &:active { + text-decoration: underline; + } + + &:disabled { + color: $ui-primary-color; + cursor: default; + } +} + .button { background-color: darken($ui-highlight-color, 3%); border: 10px none; @@ -118,20 +139,29 @@ display: inline-block; padding: 0; color: $action-button-color; - border: none; + border: 0; + border-radius: 4px; background: transparent; cursor: pointer; - transition: color 100ms ease-in; + transition: all 100ms ease-in; + transition-property: background-color, color; &:hover, &:active, &:focus { color: lighten($action-button-color, 7%); - transition: color 200ms ease-out; + background-color: rgba($action-button-color, 0.15); + transition: all 200ms ease-out; + transition-property: background-color, color; + } + + &:focus { + background-color: rgba($action-button-color, 0.3); } &.disabled { color: darken($action-button-color, 13%); + background-color: transparent; cursor: default; } @@ -156,10 +186,16 @@ &:active, &:focus { color: darken($lighter-text-color, 7%); + background-color: rgba($lighter-text-color, 0.15); + } + + &:focus { + background-color: rgba($lighter-text-color, 0.3); } &.disabled { color: lighten($lighter-text-color, 7%); + background-color: transparent; } &.active { @@ -186,7 +222,8 @@ .text-icon-button { color: $lighter-text-color; - border: none; + border: 0; + border-radius: 4px; background: transparent; cursor: pointer; font-weight: 600; @@ -194,17 +231,25 @@ padding: 0 3px; line-height: 27px; outline: 0; - transition: color 100ms ease-in; + transition: all 100ms ease-in; + transition-property: background-color, color; &:hover, &:active, &:focus { color: darken($lighter-text-color, 7%); - transition: color 200ms ease-out; + background-color: rgba($lighter-text-color, 0.15); + transition: all 200ms ease-out; + transition-property: background-color, color; + } + + &:focus { + background-color: rgba($lighter-text-color, 0.3); } &.disabled { color: lighten($lighter-text-color, 20%); + background-color: transparent; cursor: default; } @@ -269,6 +314,20 @@ color: $red-bookmark; } +.no-reduce-motion .icon-button.star-icon { + &.activate { + & > .fa-star { + animation: spring-rotate-in 1s linear; + } + } + + &.deactivate { + & > .fa-star { + animation: spring-rotate-out 1s linear; + } + } +} + .notification__display-name { color: inherit; font-weight: 500; @@ -802,7 +861,8 @@ } .getting-started__wrapper, -.getting_started { +.getting_started, +.flex-spacer { background: $ui-base-color; } @@ -811,6 +871,10 @@ overflow-y: auto; } +.flex-spacer { + flex: 1 1 auto; +} + .getting-started { background: $ui-base-color; flex: 1 0 auto; @@ -858,6 +922,47 @@ } } } + + &__trends { + flex: 0 1 auto; + opacity: 1; + animation: fade 150ms linear; + margin-top: 10px; + + h4 { + font-size: 12px; + text-transform: uppercase; + color: $darker-text-color; + padding: 10px; + font-weight: 500; + border-bottom: 1px solid lighten($ui-base-color, 8%); + } + + @media screen and (max-height: 810px) { + .trends__item:nth-child(3) { + display: none; + } + } + + @media screen and (max-height: 720px) { + .trends__item:nth-child(2) { + display: none; + } + } + + @media screen and (max-height: 670px) { + display: none; + } + + .trends__item { + border-bottom: 0; + padding: 10px; + + &__current { + color: $darker-text-color; + } + } + } } .column-link__badge { @@ -1097,6 +1202,50 @@ animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.610, 0.355, 1.000); } +@keyframes spring-rotate-in { + 0% { + transform: rotate(0deg); + } + + 30% { + transform: rotate(-484.8deg); + } + + 60% { + transform: rotate(-316.7deg); + } + + 90% { + transform: rotate(-375deg); + } + + 100% { + transform: rotate(-360deg); + } +} + +@keyframes spring-rotate-out { + 0% { + transform: rotate(-360deg); + } + + 30% { + transform: rotate(124.8deg); + } + + 60% { + transform: rotate(-43.27deg); + } + + 90% { + transform: rotate(15deg); + } + + 100% { + transform: rotate(0deg); + } +} + @keyframes loader-figure { 0% { width: 0; @@ -1148,6 +1297,10 @@ align-items: center; } + &--click-thru { + pointer-events: none; + } + &--hidden { display: none; } @@ -1176,6 +1329,12 @@ background: rgba($base-overlay-background, 0.8); } } + + &:disabled { + .spoiler-button__overlay__label { + background: rgba($base-overlay-background, 0.5); + } + } } } @@ -1314,6 +1473,7 @@ position: absolute; top: 0; left: 0; + z-index: 9999; } .icon-badge-wrapper { @@ -1332,52 +1492,104 @@ height: 1em; } -.layout-toggle { +.conversation { display: flex; + border-bottom: 1px solid lighten($ui-base-color, 8%); padding: 5px; + padding-bottom: 0; - button { - box-sizing: border-box; - flex: 0 0 50%; - background: transparent; - padding: 5px; - border: 0; + &:focus { + background: lighten($ui-base-color, 2%); + outline: 0; + } + + &__avatar { + flex: 0 0 auto; + padding: 10px; + padding-top: 12px; position: relative; + } - &:hover, - &:focus, - &:active { - svg path:first-child { - fill: lighten($ui-base-color, 16%); + &__unread { + display: inline-block; + background: $highlight-text-color; + border-radius: 50%; + width: 0.625rem; + height: 0.625rem; + margin: -.1ex .15em .1ex; + } + + &__content { + flex: 1 1 auto; + padding: 10px 5px; + padding-right: 15px; + overflow: hidden; + + &__info { + overflow: hidden; + display: flex; + flex-direction: row-reverse; + justify-content: space-between; + } + + &__relative-time { + font-size: 15px; + color: $darker-text-color; + padding-left: 15px; + } + + &__names { + color: $darker-text-color; + font-size: 15px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-bottom: 4px; + flex-basis: 90px; + flex-grow: 1; + + a { + color: $primary-text-color; + text-decoration: none; + + &:hover, + &:focus, + &:active { + text-decoration: underline; + } } } + + .status__content { + margin: 0; + } } - svg { - width: 100%; - height: auto; + &--unread { + background: lighten($ui-base-color, 2%); - path:first-child { - fill: lighten($ui-base-color, 12%); + &:focus { + background: lighten($ui-base-color, 4%); } - path:last-child { - fill: darken($ui-base-color, 14%); + .conversation__content__info { + font-weight: 700; } - } - &__active { - color: $ui-highlight-color; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - background: lighten($ui-base-color, 12%); - border-radius: 50%; - padding: 0.35rem; + .conversation__content__relative-time { + color: $primary-text-color; + } } } +.ui .flash-message { + margin-top: 10px; + margin-left: auto; + margin-right: auto; + margin-bottom: 0; + min-width: 75%; +} + ::-webkit-scrollbar-thumb { border-radius: 0; } @@ -1405,6 +1617,10 @@ noscript { text-decoration: none; } } + + a { + word-break: break-word; + } } } @@ -1422,6 +1638,7 @@ noscript { @import 'composer'; @import 'columns'; @import 'regeneration_indicator'; +@import 'directory'; @import 'search'; @import 'emoji'; @import 'doodle'; diff --git a/app/javascript/flavours/glitch/styles/components/media.scss b/app/javascript/flavours/glitch/styles/components/media.scss index 8b5d0486d..39bfaae9a 100644 --- a/app/javascript/flavours/glitch/styles/components/media.scss +++ b/app/javascript/flavours/glitch/styles/components/media.scss @@ -179,10 +179,13 @@ position: absolute; } -.video-modal { +.video-modal__container { max-width: 100vw; max-height: 100vh; - position: relative; +} + +.audio-modal__container { + width: 50vw; } .media-modal { @@ -282,6 +285,7 @@ } a { + pointer-events: auto; text-decoration: none; font-weight: 500; color: $ui-secondary-color; @@ -333,11 +337,66 @@ } +.audio-player { + box-sizing: border-box; + position: relative; + background: darken($ui-base-color, 8%); + border-radius: 4px; + padding-bottom: 44px; + direction: ltr; + + &.editable { + border-radius: 0; + height: 100%; + } + + &__waveform { + padding: 15px 0; + position: relative; + overflow: hidden; + + &::before { + content: ""; + display: block; + position: absolute; + border-top: 1px solid lighten($ui-base-color, 4%); + width: 100%; + height: 0; + left: 0; + top: calc(50% + 1px); + } + } + + &__progress-placeholder { + background-color: rgba(lighten($ui-highlight-color, 8%), 0.5); + } + + &__wave-placeholder { + background-color: lighten($ui-base-color, 16%); + } + + .video-player__controls { + padding: 0 15px; + padding-top: 10px; + background: darken($ui-base-color, 8%); + border-top: 1px solid lighten($ui-base-color, 4%); + border-radius: 0 0 4px 4px; + } +} + .video-player { overflow: hidden; position: relative; background: $base-shadow-color; max-width: 100%; + border-radius: 4px; + box-sizing: border-box; + direction: ltr; + + &.editable { + border-radius: 0; + height: 100% !important; + } &:focus { outline: 0; @@ -367,6 +426,7 @@ max-height: 100% !important; width: 100% !important; height: 100% !important; + outline: 0; } } @@ -444,6 +504,17 @@ display: flex; justify-content: space-between; padding-bottom: 10px; + + .video-player__download__icon { + color: inherit; + + .fa, + &:active .fa, + &:hover .fa, + &:focus .fa { + color: inherit; + } + } } &__buttons { @@ -616,38 +687,13 @@ } } -&.detailed, -&.fullscreen { - .video-player__buttons { - button { - padding-top: 10px; - padding-bottom: 10px; + &.detailed, + &.fullscreen { + .video-player__buttons { + button { + padding-top: 10px; + padding-bottom: 10px; + } } } } -} - -.media-spoiler-video { - background-size: cover; - background-repeat: no-repeat; - background-position: center; - cursor: pointer; - margin-top: 8px; - position: relative; - - @include fullwidth-gallery; - - border: 0; - display: block; -} - -.media-spoiler-video-play-icon { - border-radius: 100px; - color: rgba($primary-text-color, 0.8); - font-size: 36px; - left: 50%; - padding: 5px; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); -} diff --git a/app/javascript/flavours/glitch/styles/components/modal.scss b/app/javascript/flavours/glitch/styles/components/modal.scss index 65b2e75f0..75bddeefc 100644 --- a/app/javascript/flavours/glitch/styles/components/modal.scss +++ b/app/javascript/flavours/glitch/styles/components/modal.scss @@ -405,7 +405,8 @@ .confirmation-modal, .report-modal, .actions-modal, -.mute-modal { +.mute-modal, +.block-modal { background: lighten($ui-secondary-color, 8%); color: $inverted-text-color; border-radius: 8px; @@ -465,7 +466,8 @@ .boost-modal__action-bar, .favourite-modal__action-bar, .confirmation-modal__action-bar, -.mute-modal__action-bar { +.mute-modal__action-bar, +.block-modal__action-bar { display: flex; justify-content: space-between; background: $ui-secondary-color; @@ -495,11 +497,13 @@ font-size: 14px; } -.mute-modal { +.mute-modal, +.block-modal { line-height: 24px; } -.mute-modal .react-toggle { +.mute-modal .react-toggle, +.block-modal .react-toggle { vertical-align: middle; } @@ -528,7 +532,8 @@ } } -.report-modal__statuses { +.report-modal__statuses, +.focal-point-modal__content { flex: 1 1 auto; min-height: 20vh; max-height: 80vh; @@ -544,6 +549,12 @@ } } +.focal-point-modal__content { + @media screen and (max-width: 480px) { + max-height: 40vh; + } +} + .report-modal__comment { padding: 20px; border-right: 1px solid $ui-secondary-color; @@ -565,16 +576,56 @@ padding: 10px; font-family: inherit; font-size: 14px; - resize: vertical; + resize: none; border: 0; outline: 0; border-radius: 4px; border: 1px solid $ui-secondary-color; - margin-bottom: 20px; + min-height: 100px; + max-height: 50vh; + margin-bottom: 10px; &:focus { border: 1px solid darken($ui-secondary-color, 8%); } + + &__wrapper { + background: $white; + border: 1px solid $ui-secondary-color; + margin-bottom: 10px; + border-radius: 4px; + + .setting-text { + border: 0; + margin-bottom: 0; + border-radius: 0; + + &:focus { + border: 0; + } + } + + &__modifiers { + color: $inverted-text-color; + font-family: inherit; + font-size: 14px; + background: $white; + } + } + + &__toolbar { + display: flex; + justify-content: space-between; + margin-bottom: 20px; + } + } + + .setting-text-label { + display: block; + color: $inverted-text-color; + font-size: 14px; + font-weight: 500; + margin-bottom: 10px; } .setting-toggle { @@ -598,15 +649,6 @@ } } -.report-modal__target { - padding: 20px; - - .media-modal__close { - top: 19px; - right: 15px; - } -} - .actions-modal { .status { overflow-y: auto; @@ -674,27 +716,30 @@ } .confirmation-modal__action-bar, -.mute-modal__action-bar { - .confirmation-modal__secondary-button, - .confirmation-modal__cancel-button, - .mute-modal__cancel-button { - background-color: transparent; - color: $lighter-text-color; - font-size: 14px; - font-weight: 500; - - &:hover, - &:focus, - &:active { - color: darken($lighter-text-color, 4%); - } - } - +.mute-modal__action-bar, +.block-modal__action-bar { .confirmation-modal__secondary-button { flex-shrink: 1; } } +.confirmation-modal__secondary-button, +.confirmation-modal__cancel-button, +.mute-modal__cancel-button, +.block-modal__cancel-button { + background-color: transparent; + color: $lighter-text-color; + font-size: 14px; + font-weight: 500; + + &:hover, + &:focus, + &:active { + color: darken($lighter-text-color, 4%); + background-color: transparent; + } +} + .confirmation-modal__do_not_ask_again { padding-left: 20px; padding-right: 20px; @@ -709,10 +754,10 @@ .confirmation-modal__container, .mute-modal__container, +.block-modal__container, .report-modal__target { padding: 30px; font-size: 16px; - text-align: center; strong { font-weight: 500; @@ -725,7 +770,42 @@ } } +.confirmation-modal__container, +.report-modal__target { + text-align: center; +} + +.block-modal, +.mute-modal { + &__explanation { + margin-top: 20px; + } + + .setting-toggle { + margin-top: 20px; + margin-bottom: 24px; + display: flex; + align-items: center; + + &__label { + color: $inverted-text-color; + margin: 0; + margin-left: 8px; + } + } +} + +.report-modal__target { + padding: 15px; + + .media-modal__close { + top: 14px; + right: 15px; + } +} + .embed-modal { + width: auto; max-width: 80vw; max-height: 80vh; @@ -756,6 +836,7 @@ font-size: 14px; margin: 0; margin-bottom: 15px; + border-radius: 4px; &::-moz-focus-inner { border: 0; @@ -781,25 +862,31 @@ max-width: 100%; overflow: hidden; border: 0; + border-radius: 4px; } } } .focal-point { position: relative; - cursor: pointer; + cursor: move; overflow: hidden; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + background: $base-shadow-color; - &.dragging { - cursor: move; - } - - img { - max-width: 80vw; + img, + video, + canvas { + display: block; max-height: 80vh; - width: auto; + width: 100%; height: auto; - margin: auto; + margin: 0; + object-fit: contain; + background: $base-shadow-color; } &__reticle { @@ -819,4 +906,80 @@ top: 0; left: 0; } + + &__preview { + position: absolute; + bottom: 10px; + right: 10px; + z-index: 2; + cursor: move; + transition: opacity 0.1s ease; + + &:hover { + opacity: 0.5; + } + + strong { + color: $primary-text-color; + font-size: 14px; + font-weight: 500; + display: block; + margin-bottom: 5px; + } + + div { + border-radius: 4px; + box-shadow: 0 0 14px rgba($base-shadow-color, 0.2); + } + } + + @media screen and (max-width: 480px) { + img, + video { + max-height: 100%; + } + + &__preview { + display: none; + } + } +} + +.filtered-status-info { + text-align: start; + + .spoiler__text { + margin-top: 20px; + } + + .account { + border-bottom: 0; + } + + .account__display-name strong { + color: $inverted-text-color; + } + + .status__content__spoiler { + display: none; + + &--visible { + display: flex; + } + } + + ul { + padding: 10px; + margin-left: 12px; + list-style: disc inside; + } + + .filtered-status-edit-link { + color: $action-button-color; + text-decoration: none; + + &:hover { + text-decoration: underline + } + } } diff --git a/app/javascript/flavours/glitch/styles/components/regeneration_indicator.scss b/app/javascript/flavours/glitch/styles/components/regeneration_indicator.scss index 178df6652..c65e6a9af 100644 --- a/app/javascript/flavours/glitch/styles/components/regeneration_indicator.scss +++ b/app/javascript/flavours/glitch/styles/components/regeneration_indicator.scss @@ -7,37 +7,27 @@ cursor: default; display: flex; flex: 1 1 auto; + flex-direction: column; align-items: center; justify-content: center; padding: 20px; - & > div { - width: 100%; - background: transparent; - padding-top: 0; - } - &__figure { - background: url('~flavours/glitch/images/elephant_ui_working.svg') no-repeat center 0; - width: 100%; - height: 160px; - background-size: contain; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); + &, + img { + display: block; + width: auto; + height: 160px; + margin: 0; + } } - &.missing-indicator { + &--without-header { padding-top: 20px + 48px; - - .regeneration-indicator__figure { - background-image: url('~flavours/glitch/images/elephant_ui_disappointed.svg'); - } } &__label { - margin-top: 200px; + margin-top: 30px; strong { display: block; diff --git a/app/javascript/flavours/glitch/styles/components/search.scss b/app/javascript/flavours/glitch/styles/components/search.scss index 3ef141133..30d69d05c 100644 --- a/app/javascript/flavours/glitch/styles/components/search.scss +++ b/app/javascript/flavours/glitch/styles/components/search.scss @@ -3,13 +3,47 @@ } .search__input { + @include search-input(); + display: block; - padding: 10px; + padding: 15px; padding-right: 30px; - @include search-input(); + line-height: 18px; + font-size: 16px; + + &::placeholder { + color: lighten($darker-text-color, 4%); + } + + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus, + &:active { + outline: 0 !important; + } + + &:focus { + background: lighten($ui-base-color, 4%); + } + + @media screen and (max-width: 600px) { + font-size: 16px; + } } .search__icon { + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus { + outline: 0 !important; + } + .fa { position: absolute; top: 16px; @@ -18,7 +52,7 @@ display: inline-block; opacity: 0; transition: all 100ms linear; - transition-property: transform, opacity; + transition-property: color, transform, opacity; font-size: 18px; width: 18px; height: 18px; @@ -33,17 +67,18 @@ } .fa-search { - transform: rotate(90deg); + transform: rotate(0deg); &.active { - pointer-events: none; - transform: rotate(0deg); + pointer-events: auto; + opacity: 0.3; } } .fa-times-circle { top: 17px; transform: rotate(0deg); + color: $action-button-color; cursor: pointer; &.active { @@ -51,7 +86,7 @@ } &:hover { - color: $primary-text-color; + color: lighten($action-button-color, 7%); } } } @@ -65,6 +100,12 @@ font-weight: 500; } +.search-results__info { + padding: 20px; + color: $darker-text-color; + text-align: center; +} + .trends { &__header { color: $dark-text-color; @@ -124,11 +165,12 @@ &__current { flex: 0 0 auto; - width: 100px; font-size: 24px; line-height: 36px; font-weight: 500; - text-align: center; + text-align: right; + padding-right: 15px; + margin-left: 5px; color: $secondary-text-color; } @@ -136,7 +178,12 @@ flex: 0 0 auto; width: 50px; - path { + path:first-child { + fill: rgba($highlight-text-color, 0.25) !important; + fill-opacity: 1 !important; + } + + path:last-child { stroke: lighten($highlight-text-color, 6%) !important; } } diff --git a/app/javascript/flavours/glitch/styles/components/single_column.scss b/app/javascript/flavours/glitch/styles/components/single_column.scss index ca962abd2..edf705b5f 100644 --- a/app/javascript/flavours/glitch/styles/components/single_column.scss +++ b/app/javascript/flavours/glitch/styles/components/single_column.scss @@ -6,7 +6,7 @@ height: calc(100% - 10px); overflow-y: hidden; - .drawer--search input { + .search__input { line-height: 18px; font-size: 16px; padding: 15px; @@ -54,13 +54,24 @@ margin-bottom: 10px; height: calc(100% - 20px); overflow-y: auto; + display: flex; + flex-direction: column; + + & > a { + flex: 0 0 auto; + } hr { + flex: 0 0 auto; border: 0; background: transparent; border-top: 1px solid lighten($ui-base-color, 4%); margin: 10px 0; } + + .flex-spacer { + background: transparent; + } } @media screen and (min-width: 600px) { @@ -83,6 +94,24 @@ padding: 0; } + .directory__list { + display: grid; + grid-gap: 10px; + grid-template-columns: minmax(0, 50%) minmax(0, 50%); + + @media screen and (max-width: $no-gap-breakpoint) { + display: block; + } + } + + .directory__card { + margin-bottom: 0; + } + + .filter-form { + display: flex; + } + .autosuggest-textarea__textarea { font-size: 16px; } @@ -98,8 +127,17 @@ top: 15px; } - @media screen and (min-width: 360px) { + .scrollable { + overflow: visible; + + @supports(display: grid) { + contain: content; + } + } + + @media screen and (min-width: $no-gap-breakpoint) { padding: 10px 0; + padding-top: 0; } @media screen and (min-width: 630px) { @@ -107,7 +145,8 @@ padding: 15px; .media-gallery, - .video-player { + .video-player, + .audio-player { margin-top: 15px; } } @@ -131,7 +170,8 @@ .media-gallery, &__action-bar, - .video-player { + .video-player, + .audio-player { margin-top: 10px; } } @@ -184,19 +224,16 @@ } } -@media screen and (min-width: 360px) { +@media screen and (min-width: $no-gap-breakpoint) { .tabs-bar { - margin: 10px auto; - margin-bottom: 0; width: 100%; } .react-swipeable-view-container .columns-area--mobile { - height: calc(100% - 20px) !important; + height: calc(100% - 10px) !important; } .getting-started__wrapper, - .getting-started__trends, .search { margin-bottom: 10px; } diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index ee4440e89..00f947cdc 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -1,3 +1,47 @@ +@keyframes spring-flip-in { + 0% { + transform: rotate(0deg); + } + + 30% { + transform: rotate(-242.4deg); + } + + 60% { + transform: rotate(-158.35deg); + } + + 90% { + transform: rotate(-187.5deg); + } + + 100% { + transform: rotate(-180deg); + } +} + +@keyframes spring-flip-out { + 0% { + transform: rotate(-180deg); + } + + 30% { + transform: rotate(62.4deg); + } + + 60% { + transform: rotate(-21.635deg); + } + + 90% { + transform: rotate(7.5deg); + } + + 100% { + transform: rotate(0deg); + } +} + .status__content--with-action { cursor: pointer; } @@ -33,6 +77,13 @@ .status__content__text, .e-content { + overflow: hidden; + + & > ul, + & > ol { + margin-bottom: 20px; + } + h1, h2, h3, h4, h5 { margin-top: 20px; margin-bottom: 20px; @@ -75,6 +126,11 @@ text-align: sub; } + sup { + font-size: smaller; + vertical-align: super; + } + ul, ol { margin-left: 1em; @@ -127,6 +183,15 @@ } } + a.unhandled-link { + color: lighten($ui-highlight-color, 8%); + + .link-origin-tag { + color: $gold-star; + font-size: 0.8em; + } + } + .status__content__spoiler-link { background: lighten($ui-base-color, 30%); @@ -167,7 +232,9 @@ } .notif-cleaning { - .status, .notification-follow { + .status, + .notification-follow, + .notification-follow-request { padding-right: ($dismiss-overlay-width + 0.5rem); } } @@ -187,13 +254,12 @@ } .status__prepend-icon-wrapper { - float: left; - margin: 0 10px 0 -58px; - width: 48px; - text-align: right; + left: -26px; + position: absolute; } -.notification-follow { +.notification-follow, +.notification-follow-request { position: relative; // same like Status @@ -245,7 +311,8 @@ opacity: 1; animation: fade 150ms linear; - .video-player { + .video-player, + .audio-player { margin-top: 8px; } @@ -364,9 +431,7 @@ .status__relative-time { display: inline-block; - margin-left: auto; - padding-left: 18px; - width: 120px; + flex-grow: 1; color: $dark-text-color; font-size: 14px; text-align: right; @@ -376,7 +441,6 @@ } .status__display-name { - margin: 0 auto 0 0; color: $dark-text-color; overflow: hidden; } @@ -388,6 +452,7 @@ .status__info { display: flex; + justify-content: space-between; font-size: 15px; > span { @@ -401,25 +466,41 @@ } .status__info__icons { - margin-left: auto; display: flex; align-items: center; height: 1em; color: $action-button-color; - .status__media-icon { - padding-left: 6px; - padding-right: 1px; + .status__media-icon, + .status__visibility-icon, + .status__reply-icon { + padding-left: 2px; + padding-right: 2px; + } + + .status__collapse-button.active > .fa-angle-double-up { + transform: rotate(-180deg); + } +} + +.no-reduce-motion .status__collapse-button { + &.activate { + & > .fa-angle-double-up { + animation: spring-flip-in 1s linear; + } } - .status__visibility-icon { - padding-left: 4px; + &.deactivate { + & > .fa-angle-double-up { + animation: spring-flip-out 1s linear; + } } } .status__info__account { display: flex; align-items: center; + justify-content: flex-start; } .status-check-box { @@ -439,7 +520,8 @@ white-space: normal; } - .video-player { + .video-player, + .audio-player { margin-top: 8px; max-width: 250px; } @@ -459,9 +541,12 @@ } .status__prepend { - margin: -10px -10px 10px; + margin-top: -10px; + margin-bottom: 10px; + margin-left: 58px; color: $dark-text-color; - padding: 8px 10px 0 68px; + padding: 8px 0; + padding-bottom: 2px; font-size: 14px; position: relative; @@ -544,7 +629,8 @@ } } - .video-player { + .video-player, + .audio-player { margin-top: 8px; } } @@ -620,6 +706,10 @@ a.status__display-name, color: inherit; } +.detailed-status .button.logo-button { + margin-bottom: 15px; +} + .detailed-status__display-name { color: $secondary-text-color; display: block; @@ -653,6 +743,7 @@ a.status__display-name, } .muted { + .status__content, .status__content p, .status__content a, .status__content__text { @@ -866,67 +957,6 @@ a.status-card.compact:hover { background-position: center center; } -.status__video-player { - display: flex; - align-items: center; - background: $base-shadow-color; - box-sizing: border-box; - cursor: default; /* May not be needed */ - margin-top: 8px; - overflow: hidden; - position: relative; - - @include fullwidth-gallery; -} - -.status__video-player-video { - height: 100%; - object-fit: contain; - position: relative; - top: 50%; - transform: translateY(-50%); - width: 100%; - z-index: 1; - - &:not(.letterbox) { - height: 100%; - object-fit: cover; - } -} - -.status__video-player-expand, -.status__video-player-mute { - color: $primary-text-color; - opacity: 0.8; - position: absolute; - right: 4px; - text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color; -} - -.status__video-player-spoiler { - display: none; - color: $primary-text-color; - left: 4px; - position: absolute; - text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color; - top: 4px; - z-index: 100; - - &.status__video-player-spoiler--visible { - display: block; - } -} - -.status__video-player-expand { - bottom: 4px; - z-index: 100; -} - -.status__video-player-mute { - top: 4px; - z-index: 5; -} - .attachment-list { display: flex; font-size: 14px; @@ -990,3 +1020,18 @@ a.status-card.compact:hover { } } } + +.status__wrapper--filtered__button { + display: inline; + color: lighten($ui-highlight-color, 8%); + border: 0; + background: transparent; + padding: 0; + font-size: inherit; + line-height: inherit; + + &:hover, + &:active { + text-decoration: underline; + } +} diff --git a/app/javascript/flavours/glitch/styles/containers.scss b/app/javascript/flavours/glitch/styles/containers.scss index dc60dd14b..d1c6c33d7 100644 --- a/app/javascript/flavours/glitch/styles/containers.scss +++ b/app/javascript/flavours/glitch/styles/containers.scss @@ -143,10 +143,71 @@ grid-row: 3; } + @media screen and (max-width: $no-gap-breakpoint) { + grid-gap: 0; + grid-template-columns: minmax(0, 100%); + + .column-0 { + grid-column: 1; + } + + .column-1 { + grid-column: 1; + grid-row: 3; + } + + .column-2 { + grid-column: 1; + grid-row: 2; + } + + .column-3 { + grid-column: 1; + grid-row: 4; + } + } +} + +.grid-4 { + display: grid; + grid-gap: 10px; + grid-template-columns: repeat(4, minmax(0, 1fr)); + grid-auto-columns: 25%; + grid-auto-rows: max-content; + + .column-0 { + grid-column: 1 / 5; + grid-row: 1; + } + + .column-1 { + grid-column: 1 / 4; + grid-row: 2; + } + + .column-2 { + grid-column: 4; + grid-row: 2; + } + + .column-3 { + grid-column: 2 / 5; + grid-row: 3; + } + + .column-4 { + grid-column: 1; + grid-row: 3; + } + .landing-page__call-to-action { min-height: 100%; } + .flash-message { + margin-bottom: 10px; + } + @media screen and (max-width: 738px) { grid-template-columns: minmax(0, 50%) minmax(0, 50%); @@ -188,6 +249,11 @@ .column-3 { grid-column: 1; + grid-row: 5; + } + + .column-4 { + grid-column: 1; grid-row: 4; } } @@ -348,6 +414,20 @@ } } + .directory__card { + border-radius: 4px; + + @media screen and (max-width: $no-gap-breakpoint) { + border-radius: 0; + } + } + + .page-header { + @media screen and (max-width: $no-gap-breakpoint) { + border-bottom: 0; + } + } + .public-account-header { overflow: hidden; margin-bottom: 10px; @@ -572,7 +652,7 @@ } .counter { - width: 33.3%; + min-width: 33.3%; box-sizing: border-box; flex: 0 0 auto; color: $darker-text-color; @@ -755,14 +835,22 @@ } } - .static-icon-button { - color: $action-button-color; - font-size: 18px; + .directory__list { + display: grid; + grid-gap: 10px; + grid-template-columns: minmax(0, 50%) minmax(0, 50%); - & > span { - font-size: 14px; - font-weight: 500; + @media screen and (max-width: $no-gap-breakpoint) { + display: block; } + + .icon-button { + font-size: 18px; + } + } + + .directory__card { + margin-bottom: 0; } .card-grid { diff --git a/app/javascript/flavours/glitch/styles/dashboard.scss b/app/javascript/flavours/glitch/styles/dashboard.scss index e4564f062..c0944d417 100644 --- a/app/javascript/flavours/glitch/styles/dashboard.scss +++ b/app/javascript/flavours/glitch/styles/dashboard.scss @@ -15,6 +15,8 @@ padding: 20px; background: lighten($ui-base-color, 4%); border-radius: 4px; + box-sizing: border-box; + height: 100%; } & > a { diff --git a/app/javascript/flavours/glitch/styles/footer.scss b/app/javascript/flavours/glitch/styles/footer.scss index f74c004e9..00d290883 100644 --- a/app/javascript/flavours/glitch/styles/footer.scss +++ b/app/javascript/flavours/glitch/styles/footer.scss @@ -128,7 +128,7 @@ &:hover, &:focus, &:active { - svg path { + svg { fill: lighten($ui-base-color, 38%); } } diff --git a/app/javascript/flavours/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss index dae29a003..1920c33ea 100644 --- a/app/javascript/flavours/glitch/styles/forms.scss +++ b/app/javascript/flavours/glitch/styles/forms.scss @@ -245,6 +245,10 @@ code { &-6 { max-width: 50%; } + + .actions { + margin-top: 27px; + } } .fields-group:last-child, @@ -300,6 +304,13 @@ code { } } + .input.static .label_input__wrapper { + font-size: 16px; + padding: 10px; + border: 1px solid $dark-text-color; + border-radius: 4px; + } + input[type=text], input[type=number], input[type=email], @@ -318,6 +329,10 @@ code { border-radius: 4px; padding: 10px; + &::placeholder { + color: lighten($darker-text-color, 4%); + } + &:invalid { box-shadow: none; } @@ -489,6 +504,10 @@ code { &__overlay-area { position: relative; + &__blurred form { + filter: blur(2px); + } + &__overlay { position: absolute; top: 0; @@ -499,8 +518,10 @@ code { justify-content: center; align-items: center; background: rgba($ui-base-color, 0.65); - backdrop-filter: blur(2px); border-radius: 4px; + margin-left: -4px; + margin-top: -4px; + padding: 4px; &__content { text-align: center; diff --git a/app/javascript/flavours/glitch/styles/index.scss b/app/javascript/flavours/glitch/styles/index.scss index 323b2e7fe..af73feb89 100644 --- a/app/javascript/flavours/glitch/styles/index.scss +++ b/app/javascript/flavours/glitch/styles/index.scss @@ -14,7 +14,7 @@ @import 'widgets'; @import 'forms'; @import 'accounts'; -@import 'stream_entries'; +@import 'statuses'; @import 'components/index'; @import 'polls'; @import 'about'; diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss index 7da8edbde..3b4ffdf3c 100644 --- a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss +++ b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss @@ -135,13 +135,12 @@ } } - .composer--options { + .composer--options-wrapper { background: lighten($ui-base-color, 10%); - box-shadow: unset; + } - & > hr { - display: none; - } + .composer--options > hr { + display: none; } .composer--options--dropdown--content--item { @@ -227,16 +226,29 @@ .boost-modal, .confirmation-modal, .mute-modal, +.block-modal, .report-modal, .embed-modal, .error-modal, -.onboarding-modal { - background: $ui-base-color; +.onboarding-modal, +.report-modal__comment .setting-text__wrapper, +.report-modal__comment .setting-text { + background: $white; + border: 1px solid lighten($ui-base-color, 8%); +} + +.report-modal__comment { + border-right-color: lighten($ui-base-color, 8%); +} + +.report-modal__container { + border-top-color: lighten($ui-base-color, 8%); } .boost-modal__action-bar, .confirmation-modal__action-bar, .mute-modal__action-bar, +.block-modal__action-bar, .onboarding-modal__paginator, .error-modal__footer { background: darken($ui-base-color, 6%); @@ -373,3 +385,10 @@ .directory__tag > div { box-shadow: none; } + +.audio-player .video-player__controls button, +.audio-player .video-player__time-sep, +.audio-player .video-player__time-current, +.audio-player .video-player__time-total { + color: $primary-text-color; +} diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss b/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss index 1b060b58d..312f5e314 100644 --- a/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss +++ b/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss @@ -18,6 +18,8 @@ $darker-text-color: $classic-base-color !default; $dark-text-color: #444b5d; $action-button-color: #606984; +$success-green: lighten(#3c754d, 8%); + $base-overlay-background: $white !default; $inverted-text-color: $black !default; diff --git a/app/javascript/flavours/glitch/styles/polls.scss b/app/javascript/flavours/glitch/styles/polls.scss index 5261f17f4..49d0e7f71 100644 --- a/app/javascript/flavours/glitch/styles/polls.scss +++ b/app/javascript/flavours/glitch/styles/polls.scss @@ -11,7 +11,6 @@ li { margin-bottom: 10px; position: relative; - height: 18px + 12px; } &__chart { @@ -30,13 +29,11 @@ &__text { position: relative; - display: inline-block; + display: flex; padding: 6px 0; line-height: 18px; cursor: default; - white-space: nowrap; overflow: hidden; - text-overflow: ellipsis; input[type=radio], input[type=checkbox] { @@ -89,6 +86,9 @@ top: -1px; border-radius: 50%; vertical-align: middle; + margin-top: auto; + margin-bottom: auto; + flex: 0 0 18px; &.checkbox { border-radius: 4px; @@ -98,14 +98,40 @@ border-color: $valid-value-color; background: $valid-value-color; } + + &:active, + &:focus, + &:hover { + border-width: 4px; + background: none; + } + + &::-moz-focus-inner { + outline: 0 !important; + border: 0; + } + + &:focus, + &:active { + outline: 0 !important; + } } &__number { display: inline-block; - width: 36px; + width: 52px; font-weight: 700; padding: 0 10px; + padding-left: 8px; text-align: right; + margin-top: auto; + margin-bottom: auto; + flex: 0 0 52px; + } + + &__vote__mark { + float: left; + line-height: 18px; } &__footer { @@ -159,6 +185,10 @@ select { width: 100%; flex: 1 1 50%; + + &:focus { + border-color: $highlight-text-color; + } } } diff --git a/app/javascript/flavours/glitch/styles/rtl.scss b/app/javascript/flavours/glitch/styles/rtl.scss index 11fae3121..2375bac90 100644 --- a/app/javascript/flavours/glitch/styles/rtl.scss +++ b/app/javascript/flavours/glitch/styles/rtl.scss @@ -7,6 +7,34 @@ body.rtl { padding-right: 15px; } + .radio-button__input { + margin-right: 0; + margin-left: 10px; + } + + .directory__card__bar .display-name { + margin-left: 0; + margin-right: 15px; + } + + .display-name { + text-align: right; + } + + .notification__message { + margin-left: 0; + margin-right: 68px; + } + + .drawer__inner__mastodon > img { + transform: scaleX(-1); + } + + .notification__favourite-icon-wrapper { + left: auto; + right: -26px; + } + .landing-page__logo { margin-right: 0; margin-left: 20px; @@ -28,6 +56,15 @@ body.rtl { margin-left: 4px; } + .composer--publisher { + text-align: left; + } + + .boost-modal__status-time, + .favourite-modal__status-time { + float: left; + } + .navigation-bar__profile { margin-left: 0; margin-right: 8px; @@ -50,8 +87,8 @@ body.rtl { .column-header__buttons { left: 0; right: auto; - margin-left: -15px; - margin-right: 0; + margin-left: 0; + margin-right: -15px; } .column-inline-form .icon-button { @@ -87,11 +124,14 @@ body.rtl { } .status__avatar { + margin-left: 10px; + margin-right: 0; + + // Those are used for public pages left: auto; right: 10px; } - .status, .activity-stream .status.light { padding-left: 10px; padding-right: 68px; @@ -110,7 +150,7 @@ body.rtl { .status__prepend { margin-left: 0; - margin-right: 68px; + margin-right: 58px; } .status__prepend-icon-wrapper { @@ -136,21 +176,10 @@ body.rtl { .status__relative-time, .activity-stream .status.light .status__header .status__meta { float: left; - } - - .activity-stream .detailed-status.light .detailed-status__display-name > div { - float: right; - margin-right: 0; - margin-left: 10px; - } - - .activity-stream .detailed-status.light .detailed-status__meta span > span { - margin-left: 0; - margin-right: 6px; + text-align: left; } .status__action-bar { - &__counter { margin-right: 0; margin-left: 11px; @@ -182,6 +211,10 @@ body.rtl { margin-right: 0; } + .detailed-status__display-name .display-name { + text-align: right; + } + .detailed-status__display-avatar { margin-right: 0; margin-left: 10px; @@ -195,7 +228,6 @@ body.rtl { } .fa-ul { - margin-left: 0; margin-left: 2.14285714em; } @@ -340,6 +372,12 @@ body.rtl { } } + .columns-area--mobile .column, + .columns-area--mobile .drawer { + padding-left: 0; + padding-right: 0; + } + .public-layout { .header { .nav-button { diff --git a/app/javascript/flavours/glitch/styles/stream_entries.scss b/app/javascript/flavours/glitch/styles/statuses.scss index de9c2612c..611d5185b 100644 --- a/app/javascript/flavours/glitch/styles/stream_entries.scss +++ b/app/javascript/flavours/glitch/styles/statuses.scss @@ -205,9 +205,20 @@ } .rtl { - .embed, .public-layout { - .status .status__relative-time { - float: left; + .embed, + .public-layout { + .status { + padding-left: 10px; + padding-right: 68px; + + .status__info .status__display-name { + padding-left: 25px; + padding-right: 0; + } + + .status__relative-time { + float: left; + } } } } diff --git a/app/javascript/flavours/glitch/styles/tables.scss b/app/javascript/flavours/glitch/styles/tables.scss index 154844665..ec2ee7c1c 100644 --- a/app/javascript/flavours/glitch/styles/tables.scss +++ b/app/javascript/flavours/glitch/styles/tables.scss @@ -149,10 +149,6 @@ a.table-action-link { margin-top: 0; } } - - @media screen and (max-width: $no-gap-breakpoint) { - display: none; - } } &__actions, @@ -174,9 +170,17 @@ a.table-action-link { text-align: right; padding-right: 16px - 5px; } + } - @media screen and (max-width: $no-gap-breakpoint) { - display: none; + &__form { + padding: 16px; + border: 1px solid darken($ui-base-color, 8%); + border-top: 0; + background: $ui-base-color; + + .fields-row { + padding-top: 0; + margin-bottom: 0; } } @@ -186,7 +190,7 @@ a.table-action-link { background: darken($ui-base-color, 4%); @media screen and (max-width: $no-gap-breakpoint) { - &:first-child { + .optional &:first-child { border-top: 1px solid darken($ui-base-color, 8%); } } @@ -210,6 +214,52 @@ a.table-action-link { &--unpadded { padding: 0; } + + &--with-image { + display: flex; + align-items: center; + } + + &__image { + flex: 0 0 auto; + display: flex; + justify-content: center; + align-items: center; + margin-right: 10px; + + .emojione { + width: 32px; + height: 32px; + } + } + + &__text { + flex: 1 1 auto; + } + + &__extra { + flex: 0 0 auto; + text-align: right; + color: $darker-text-color; + font-weight: 500; + } + } + + .directory__tag { + margin: 0; + width: 100%; + + a { + background: transparent; + border-radius: 0; + } + } + } + + &.optional .batch-table__toolbar, + &.optional .batch-table__row__select { + @media screen and (max-width: $no-gap-breakpoint) { + display: none; } } diff --git a/app/javascript/flavours/glitch/styles/widgets.scss b/app/javascript/flavours/glitch/styles/widgets.scss index acaf5b024..a6f7fc0be 100644 --- a/app/javascript/flavours/glitch/styles/widgets.scss +++ b/app/javascript/flavours/glitch/styles/widgets.scss @@ -100,6 +100,16 @@ background-size: 44px 44px; } } + + .trends__item { + padding: 10px; + } +} + +.trends-widget { + h4 { + color: $darker-text-color; + } } .box-widget { @@ -109,41 +119,52 @@ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); } -.contact-widget, -.landing-page__information.contact-widget { - box-sizing: border-box; - padding: 20px; - min-height: 100%; +.placeholder-widget { + padding: 16px; border-radius: 4px; - background: $ui-base-color; - box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); + border: 2px dashed $dark-text-color; + text-align: center; + color: $darker-text-color; + margin-bottom: 10px; } .contact-widget { + min-height: 100%; font-size: 15px; color: $darker-text-color; line-height: 20px; word-wrap: break-word; font-weight: 400; + padding: 0; - strong { - font-weight: 500; + h4 { + padding: 10px; + text-transform: uppercase; + font-weight: 700; + font-size: 13px; + color: $darker-text-color; } - p { - margin-bottom: 10px; - - &:last-child { - margin-bottom: 0; - } + .account { + border-bottom: 0; + padding: 10px 0; + padding-top: 5px; } - &__mail { - margin-top: 10px; + & > a { + display: inline-block; + padding: 10px; + padding-top: 0; + color: $darker-text-color; + text-decoration: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; - a { - color: $primary-text-color; - text-decoration: none; + &:hover, + &:focus, + &:active { + text-decoration: underline; } } } @@ -521,6 +542,12 @@ $fluid-breakpoint: $maximum-width + 20px; a { font-size: 14px; line-height: 20px; + } +} + +.notice-widget, +.placeholder-widget { + a { text-decoration: none; font-weight: 500; color: $ui-highlight-color; @@ -532,3 +559,38 @@ $fluid-breakpoint: $maximum-width + 20px; } } } + +.table-of-contents { + background: darken($ui-base-color, 4%); + min-height: 100%; + font-size: 14px; + border-radius: 4px; + + li a { + display: block; + font-weight: 500; + padding: 15px; + overflow: hidden; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-decoration: none; + color: $primary-text-color; + border-bottom: 1px solid lighten($ui-base-color, 4%); + + &:hover, + &:focus, + &:active { + text-decoration: underline; + } + } + + li:last-child a { + border-bottom: 0; + } + + li ul { + padding-left: 20px; + border-bottom: 1px solid lighten($ui-base-color, 4%); + } +} diff --git a/app/javascript/flavours/glitch/theme.yml b/app/javascript/flavours/glitch/theme.yml index 06e26ade2..0fd627f19 100644 --- a/app/javascript/flavours/glitch/theme.yml +++ b/app/javascript/flavours/glitch/theme.yml @@ -18,7 +18,7 @@ pack: mailer: modal: public: packs/public.js - settings: + settings: packs/settings.js share: packs/share.js # (OPTIONAL) The directory which contains localization files for diff --git a/app/javascript/flavours/glitch/util/async-components.js b/app/javascript/flavours/glitch/util/async-components.js index f2aeda834..26255bbb7 100644 --- a/app/javascript/flavours/glitch/util/async-components.js +++ b/app/javascript/flavours/glitch/util/async-components.js @@ -122,6 +122,10 @@ export function MuteModal () { return import(/* webpackChunkName: "flavours/glitch/async/mute_modal" */'flavours/glitch/features/ui/components/mute_modal'); } +export function BlockModal () { + return import(/* webpackChunkName: "flavours/glitch/async/block_modal" */'flavours/glitch/features/ui/components/block_modal'); +} + export function ReportModal () { return import(/* webpackChunkName: "flavours/glitch/async/report_modal" */'flavours/glitch/features/ui/components/report_modal'); } @@ -138,6 +142,10 @@ export function Video () { return import(/* webpackChunkName: "flavours/glitch/async/video" */'flavours/glitch/features/video'); } +export function Audio () { + return import(/* webpackChunkName: "features/glitch/async/audio" */'flavours/glitch/features/audio'); +} + export function EmbedModal () { return import(/* webpackChunkName: "flavours/glitch/async/embed_modal" */'flavours/glitch/features/ui/components/embed_modal'); } @@ -153,3 +161,11 @@ export function ListAdder () { export function Search () { return import(/*webpackChunkName: "features/glitch/async/search" */'flavours/glitch/features/search'); } + +export function Tesseract () { + return import(/*webpackChunkName: "tesseract" */'tesseract.js'); +} + +export function Directory () { + return import(/* webpackChunkName: "features/glitch/async/directory" */'flavours/glitch/features/directory'); +} diff --git a/app/javascript/flavours/glitch/util/backend_links.js b/app/javascript/flavours/glitch/util/backend_links.js index 4fc03f919..0fb378cc1 100644 --- a/app/javascript/flavours/glitch/util/backend_links.js +++ b/app/javascript/flavours/glitch/util/backend_links.js @@ -4,3 +4,6 @@ export const signOutLink = '/auth/sign_out'; export const termsLink = '/terms'; export const accountAdminLink = (id) => `/admin/accounts/${id}`; export const statusAdminLink = (account_id, status_id) => `/admin/accounts/${account_id}/statuses/${status_id}`; +export const filterEditLink = (id) => `/filters/${id}/edit`; +export const relationshipsLink = '/relationships'; +export const securityLink = '/auth/edit'; diff --git a/app/javascript/flavours/glitch/util/compare_id.js b/app/javascript/flavours/glitch/util/compare_id.js index aaff66481..66cf51c4b 100644 --- a/app/javascript/flavours/glitch/util/compare_id.js +++ b/app/javascript/flavours/glitch/util/compare_id.js @@ -1,10 +1,11 @@ -export default function compareId(id1, id2) { +export default function compareId (id1, id2) { if (id1 === id2) { return 0; } + if (id1.length === id2.length) { return id1 > id2 ? 1 : -1; } else { return id1.length > id2.length ? 1 : -1; } -} +}; diff --git a/app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js b/app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js index 164fdcc0b..e4519a13e 100644 --- a/app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js +++ b/app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js @@ -74,7 +74,7 @@ function search(value, { emojisToShowFilter, maxResults, include, exclude, custo return [emojisList['-1']]; } - let values = value.toLowerCase().split(/[\s|,|\-|_]+/), + let values = value.toLowerCase().split(/[\s|,\-_]+/), allResults = []; if (values.length > 2) { diff --git a/app/javascript/flavours/glitch/util/emoji/index.js b/app/javascript/flavours/glitch/util/emoji/index.js index 82a1ef89c..e1a244127 100644 --- a/app/javascript/flavours/glitch/util/emoji/index.js +++ b/app/javascript/flavours/glitch/util/emoji/index.js @@ -1,4 +1,4 @@ -import { autoPlayGif } from 'flavours/glitch/util/initial_state'; +import { autoPlayGif, useSystemEmojiFont } from 'flavours/glitch/util/initial_state'; import unicodeMapping from './emoji_unicode_mapping_light'; import Trie from 'substring-trie'; @@ -12,7 +12,7 @@ const emojify = (str, customEmojis = {}) => { let rtn = '', tagChars = tagCharsWithEmojis, invisible = 0; for (;;) { let match, i = 0, tag; - while (i < str.length && (tag = tagChars.indexOf(str[i])) === -1 && (invisible || !(match = trie.search(str.slice(i))))) { + while (i < str.length && (tag = tagChars.indexOf(str[i])) === -1 && (invisible || useSystemEmojiFont || !(match = trie.search(str.slice(i))))) { i += str.codePointAt(i) < 65536 ? 1 : 2; } let rend, replacement = ''; @@ -29,7 +29,7 @@ const emojify = (str, customEmojis = {}) => { // if you want additional emoji handler, add statements below which set replacement and return true. if (shortname in customEmojis) { const filename = autoPlayGif ? customEmojis[shortname].url : customEmojis[shortname].static_url; - replacement = `<img draggable="false" class="emojione" alt="${shortname}" title="${shortname}" src="${filename}" />`; + replacement = `<img draggable="false" class="emojione custom-emoji" alt="${shortname}" title="${shortname}" src="${filename}" data-original="${customEmojis[shortname].url}" data-static="${customEmojis[shortname].static_url}" />`; return true; } return false; @@ -57,7 +57,7 @@ const emojify = (str, customEmojis = {}) => { } } i = rend; - } else { // matched to unicode emoji + } else if (!useSystemEmojiFont) { // matched to unicode emoji const { filename, shortCode } = unicodeMapping[match]; const title = shortCode ? `:${shortCode}:` : ''; replacement = `<img draggable="false" class="emojione" alt="${match}" title="${title}" src="${assetHost}/emoji/${filename}.svg" />`; @@ -93,8 +93,11 @@ export const buildCustomEmojis = (customEmojis) => { keywords: [name], imageUrl: url, custom: true, + customCategory: emoji.get('category'), }); }); return emojis; }; + +export const categoriesFromEmojis = customEmojis => customEmojis.reduce((set, emoji) => set.add(emoji.get('category') ? `custom-${emoji.get('category')}` : 'custom'), new Set(['custom'])); diff --git a/app/javascript/flavours/glitch/util/idna.js b/app/javascript/flavours/glitch/util/idna.js new file mode 100644 index 000000000..efab5bacf --- /dev/null +++ b/app/javascript/flavours/glitch/util/idna.js @@ -0,0 +1,10 @@ +import punycode from 'punycode'; + +const IDNA_PREFIX = 'xn--'; + +export const decode = domain => { + return domain + .split('.') + .map(part => part.indexOf(IDNA_PREFIX) === 0 ? punycode.decode(part.slice(IDNA_PREFIX.length)) : part) + .join('.'); +}; diff --git a/app/javascript/flavours/glitch/util/initial_state.js b/app/javascript/flavours/glitch/util/initial_state.js index f42c06a3a..911468e6f 100644 --- a/app/javascript/flavours/glitch/util/initial_state.js +++ b/app/javascript/flavours/glitch/util/initial_state.js @@ -26,8 +26,13 @@ export const pollLimits = (initialState && initialState.poll_limits); export const invitesEnabled = getMeta('invites_enabled'); export const version = getMeta('version'); export const mascot = getMeta('mascot'); +export const profile_directory = getMeta('profile_directory'); export const isStaff = getMeta('is_staff'); export const defaultContentType = getMeta('default_content_type'); export const forceSingleColumn = getMeta('advanced_layout') === false; +export const useBlurhash = getMeta('use_blurhash'); +export const usePendingItems = getMeta('use_pending_items'); +export const useSystemEmojiFont = getMeta('system_emoji_font'); +export const showTrends = getMeta('trends'); export default initialState; diff --git a/app/javascript/flavours/glitch/util/load_keyboard_extensions.js b/app/javascript/flavours/glitch/util/load_keyboard_extensions.js new file mode 100644 index 000000000..2dd0e45fa --- /dev/null +++ b/app/javascript/flavours/glitch/util/load_keyboard_extensions.js @@ -0,0 +1,16 @@ +// On KaiOS, we may not be able to use a mouse cursor or navigate using Tab-based focus, so we install +// special left/right focus navigation keyboard listeners, at least on public pages (i.e. so folks +// can at least log in using KaiOS devices). + +function importArrowKeyNavigation() { + return import(/* webpackChunkName: "arrow-key-navigation" */ 'arrow-key-navigation'); +} + +export default function loadKeyboardExtensions() { + if (/KAIOS/.test(navigator.userAgent)) { + return importArrowKeyNavigation().then(arrowKeyNav => { + arrowKeyNav.register(); + }); + } + return Promise.resolve(); +} diff --git a/app/javascript/flavours/glitch/util/log_out.js b/app/javascript/flavours/glitch/util/log_out.js new file mode 100644 index 000000000..8e1659293 --- /dev/null +++ b/app/javascript/flavours/glitch/util/log_out.js @@ -0,0 +1,34 @@ +import Rails from 'rails-ujs'; +import { signOutLink } from 'flavours/glitch/util/backend_links'; + +export const logOut = () => { + const form = document.createElement('form'); + + const methodInput = document.createElement('input'); + methodInput.setAttribute('name', '_method'); + methodInput.setAttribute('value', 'delete'); + methodInput.setAttribute('type', 'hidden'); + form.appendChild(methodInput); + + const csrfToken = Rails.csrfToken(); + const csrfParam = Rails.csrfParam(); + + if (csrfParam && csrfToken) { + const csrfInput = document.createElement('input'); + csrfInput.setAttribute('name', csrfParam); + csrfInput.setAttribute('value', csrfToken); + csrfInput.setAttribute('type', 'hidden'); + form.appendChild(csrfInput); + } + + const submitButton = document.createElement('input'); + submitButton.setAttribute('type', 'submit'); + form.appendChild(submitButton); + + form.method = 'post'; + form.action = signOutLink; + form.style.display = 'none'; + + document.body.appendChild(form); + submitButton.click(); +}; diff --git a/app/javascript/flavours/glitch/util/numbers.js b/app/javascript/flavours/glitch/util/numbers.js index fdd8269ae..f7e4ceb93 100644 --- a/app/javascript/flavours/glitch/util/numbers.js +++ b/app/javascript/flavours/glitch/util/numbers.js @@ -4,7 +4,9 @@ import { FormattedNumber } from 'react-intl'; export const shortNumberFormat = number => { if (number < 1000) { return <FormattedNumber value={number} />; - } else { + } else if (number < 1000000) { return <Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</Fragment>; + } else { + return <Fragment><FormattedNumber value={number / 1000000} maximumFractionDigits={1} />M</Fragment>; } }; diff --git a/app/javascript/flavours/glitch/util/resize_image.js b/app/javascript/flavours/glitch/util/resize_image.js index bbdbc865e..d566edb03 100644 --- a/app/javascript/flavours/glitch/util/resize_image.js +++ b/app/javascript/flavours/glitch/util/resize_image.js @@ -67,6 +67,14 @@ const processImage = (img, { width, height, orientation, type = 'image/png' }) = context.drawImage(img, 0, 0, width, height); + // The Tor Browser and maybe other browsers may prevent reading from canvas + // and return an all-white image instead. Assume reading failed if the resized + // image is perfectly white. + const imageData = context.getImageData(0, 0, width, height); + if (imageData.data.every(value => value === 255)) { + throw 'Failed to read from canvas'; + } + canvas.toBlob(resolve, type); }); diff --git a/app/javascript/flavours/glitch/util/rtl.js b/app/javascript/flavours/glitch/util/rtl.js index 00870a15d..89bed6de8 100644 --- a/app/javascript/flavours/glitch/util/rtl.js +++ b/app/javascript/flavours/glitch/util/rtl.js @@ -20,6 +20,7 @@ export function isRtl(text) { text = text.replace(/(?:^|[^\/\w])@([a-z0-9_]+(@[a-z0-9\.\-]+)?)/ig, ''); text = text.replace(/(?:^|[^\/\w])#([\S]+)/ig, ''); text = text.replace(/\s+/g, ''); + text = text.replace(/(\w\S+\.\w{2,}\S*)/g, ''); const matches = text.match(rtlChars); diff --git a/app/javascript/flavours/glitch/util/scroll.js b/app/javascript/flavours/glitch/util/scroll.js index 2af07e0fb..84fe58269 100644 --- a/app/javascript/flavours/glitch/util/scroll.js +++ b/app/javascript/flavours/glitch/util/scroll.js @@ -26,5 +26,7 @@ const scroll = (node, key, target) => { }; }; -export const scrollRight = (node, position) => scroll(node, 'scrollLeft', position); -export const scrollTop = (node) => scroll(node, 'scrollTop', 0); +const isScrollBehaviorSupported = 'scrollBehavior' in document.documentElement.style; + +export const scrollRight = (node, position) => isScrollBehaviorSupported ? node.scrollTo({ left: position, behavior: 'smooth' }) : scroll(node, 'scrollLeft', position); +export const scrollTop = (node) => isScrollBehaviorSupported ? node.scrollTo({ top: 0, behavior: 'smooth' }) : scroll(node, 'scrollTop', 0); diff --git a/app/javascript/flavours/glitch/util/scrollbar.js b/app/javascript/flavours/glitch/util/scrollbar.js new file mode 100644 index 000000000..929b036d6 --- /dev/null +++ b/app/javascript/flavours/glitch/util/scrollbar.js @@ -0,0 +1,34 @@ +/** @type {number | null} */ +let cachedScrollbarWidth = null; + +/** + * @return {number} + */ +const getActualScrollbarWidth = () => { + const outer = document.createElement('div'); + outer.style.visibility = 'hidden'; + outer.style.overflow = 'scroll'; + document.body.appendChild(outer); + + const inner = document.createElement('div'); + outer.appendChild(inner); + + const scrollbarWidth = outer.offsetWidth - inner.offsetWidth; + outer.parentNode.removeChild(outer); + + return scrollbarWidth; +}; + +/** + * @return {number} + */ +export const getScrollbarWidth = () => { + if (cachedScrollbarWidth !== null) { + return cachedScrollbarWidth; + } + + const scrollbarWidth = getActualScrollbarWidth(); + cachedScrollbarWidth = scrollbarWidth; + + return scrollbarWidth; +}; diff --git a/app/javascript/flavours/glitch/util/stream.js b/app/javascript/flavours/glitch/util/stream.js index c4642344f..50f90d44c 100644 --- a/app/javascript/flavours/glitch/util/stream.js +++ b/app/javascript/flavours/glitch/util/stream.js @@ -1,4 +1,4 @@ -import WebSocketClient from 'websocket.js'; +import WebSocketClient from '@gamestdio/websocket'; const randomIntUpTo = max => Math.floor(Math.random() * Math.floor(max)); diff --git a/app/javascript/mastodon/actions/alerts.js b/app/javascript/mastodon/actions/alerts.js index ef2500e7b..cd36d8007 100644 --- a/app/javascript/mastodon/actions/alerts.js +++ b/app/javascript/mastodon/actions/alerts.js @@ -3,6 +3,8 @@ import { defineMessages } from 'react-intl'; const messages = defineMessages({ unexpectedTitle: { id: 'alert.unexpected.title', defaultMessage: 'Oops!' }, unexpectedMessage: { id: 'alert.unexpected.message', defaultMessage: 'An unexpected error occurred.' }, + rateLimitedTitle: { id: 'alert.rate_limited.title', defaultMessage: 'Rate limited' }, + rateLimitedMessage: { id: 'alert.rate_limited.message', defaultMessage: 'Please retry after {retry_time, time, medium}.' }, }); export const ALERT_SHOW = 'ALERT_SHOW'; @@ -23,23 +25,29 @@ export function clearAlert() { }; }; -export function showAlert(title = messages.unexpectedTitle, message = messages.unexpectedMessage) { +export function showAlert(title = messages.unexpectedTitle, message = messages.unexpectedMessage, message_values = undefined) { return { type: ALERT_SHOW, title, message, + message_values, }; }; export function showAlertForError(error) { if (error.response) { - const { data, status, statusText } = error.response; + const { data, status, statusText, headers } = error.response; if (status === 404 || status === 410) { // Skip these errors as they are reflected in the UI return { type: ALERT_NOOP }; } + if (status === 429 && headers['x-ratelimit-reset']) { + const reset_date = new Date(headers['x-ratelimit-reset']); + return showAlert(messages.rateLimitedTitle, messages.rateLimitedMessage, { 'retry_time': reset_date }); + } + let message = statusText; let title = `${status}`; diff --git a/app/javascript/mastodon/actions/app.js b/app/javascript/mastodon/actions/app.js new file mode 100644 index 000000000..414968f7d --- /dev/null +++ b/app/javascript/mastodon/actions/app.js @@ -0,0 +1,10 @@ +export const APP_FOCUS = 'APP_FOCUS'; +export const APP_UNFOCUS = 'APP_UNFOCUS'; + +export const focusApp = () => ({ + type: APP_FOCUS, +}); + +export const unfocusApp = () => ({ + type: APP_UNFOCUS, +}); diff --git a/app/javascript/mastodon/actions/blocks.js b/app/javascript/mastodon/actions/blocks.js index 7000f5a71..fd9881302 100644 --- a/app/javascript/mastodon/actions/blocks.js +++ b/app/javascript/mastodon/actions/blocks.js @@ -1,6 +1,7 @@ import api, { getLinks } from '../api'; import { fetchRelationships } from './accounts'; import { importFetchedAccounts } from './importer'; +import { openModal } from './modal'; export const BLOCKS_FETCH_REQUEST = 'BLOCKS_FETCH_REQUEST'; export const BLOCKS_FETCH_SUCCESS = 'BLOCKS_FETCH_SUCCESS'; @@ -10,6 +11,8 @@ export const BLOCKS_EXPAND_REQUEST = 'BLOCKS_EXPAND_REQUEST'; export const BLOCKS_EXPAND_SUCCESS = 'BLOCKS_EXPAND_SUCCESS'; export const BLOCKS_EXPAND_FAIL = 'BLOCKS_EXPAND_FAIL'; +export const BLOCKS_INIT_MODAL = 'BLOCKS_INIT_MODAL'; + export function fetchBlocks() { return (dispatch, getState) => { dispatch(fetchBlocksRequest()); @@ -83,3 +86,14 @@ export function expandBlocksFail(error) { error, }; }; + +export function initBlockModal(account) { + return dispatch => { + dispatch({ + type: BLOCKS_INIT_MODAL, + account, + }); + + dispatch(openModal('BLOCK')); + }; +} diff --git a/app/javascript/mastodon/actions/bookmarks.js b/app/javascript/mastodon/actions/bookmarks.js new file mode 100644 index 000000000..544ed2ff2 --- /dev/null +++ b/app/javascript/mastodon/actions/bookmarks.js @@ -0,0 +1,90 @@ +import api, { getLinks } from '../api'; +import { importFetchedStatuses } from './importer'; + +export const BOOKMARKED_STATUSES_FETCH_REQUEST = 'BOOKMARKED_STATUSES_FETCH_REQUEST'; +export const BOOKMARKED_STATUSES_FETCH_SUCCESS = 'BOOKMARKED_STATUSES_FETCH_SUCCESS'; +export const BOOKMARKED_STATUSES_FETCH_FAIL = 'BOOKMARKED_STATUSES_FETCH_FAIL'; + +export const BOOKMARKED_STATUSES_EXPAND_REQUEST = 'BOOKMARKED_STATUSES_EXPAND_REQUEST'; +export const BOOKMARKED_STATUSES_EXPAND_SUCCESS = 'BOOKMARKED_STATUSES_EXPAND_SUCCESS'; +export const BOOKMARKED_STATUSES_EXPAND_FAIL = 'BOOKMARKED_STATUSES_EXPAND_FAIL'; + +export function fetchBookmarkedStatuses() { + return (dispatch, getState) => { + if (getState().getIn(['status_lists', 'bookmarks', 'isLoading'])) { + return; + } + + dispatch(fetchBookmarkedStatusesRequest()); + + api(getState).get('/api/v1/bookmarks').then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data)); + dispatch(fetchBookmarkedStatusesSuccess(response.data, next ? next.uri : null)); + }).catch(error => { + dispatch(fetchBookmarkedStatusesFail(error)); + }); + }; +}; + +export function fetchBookmarkedStatusesRequest() { + return { + type: BOOKMARKED_STATUSES_FETCH_REQUEST, + }; +}; + +export function fetchBookmarkedStatusesSuccess(statuses, next) { + return { + type: BOOKMARKED_STATUSES_FETCH_SUCCESS, + statuses, + next, + }; +}; + +export function fetchBookmarkedStatusesFail(error) { + return { + type: BOOKMARKED_STATUSES_FETCH_FAIL, + error, + }; +}; + +export function expandBookmarkedStatuses() { + return (dispatch, getState) => { + const url = getState().getIn(['status_lists', 'bookmarks', 'next'], null); + + if (url === null || getState().getIn(['status_lists', 'bookmarks', 'isLoading'])) { + return; + } + + dispatch(expandBookmarkedStatusesRequest()); + + api(getState).get(url).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data)); + dispatch(expandBookmarkedStatusesSuccess(response.data, next ? next.uri : null)); + }).catch(error => { + dispatch(expandBookmarkedStatusesFail(error)); + }); + }; +}; + +export function expandBookmarkedStatusesRequest() { + return { + type: BOOKMARKED_STATUSES_EXPAND_REQUEST, + }; +}; + +export function expandBookmarkedStatusesSuccess(statuses, next) { + return { + type: BOOKMARKED_STATUSES_EXPAND_SUCCESS, + statuses, + next, + }; +}; + +export function expandBookmarkedStatusesFail(error) { + return { + type: BOOKMARKED_STATUSES_EXPAND_FAIL, + error, + }; +}; diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js index 300fb48a9..c3c6ff1a1 100644 --- a/app/javascript/mastodon/actions/compose.js +++ b/app/javascript/mastodon/actions/compose.js @@ -11,7 +11,7 @@ import { showAlertForError } from './alerts'; import { showAlert } from './alerts'; import { defineMessages } from 'react-intl'; -let cancelFetchComposeSuggestionsAccounts; +let cancelFetchComposeSuggestionsAccounts, cancelFetchComposeSuggestionsTags; export const COMPOSE_CHANGE = 'COMPOSE_CHANGE'; export const COMPOSE_SUBMIT_REQUEST = 'COMPOSE_SUBMIT_REQUEST'; @@ -139,7 +139,7 @@ export function submitCompose(routerHistory) { in_reply_to_id: getState().getIn(['compose', 'in_reply_to'], null), media_ids: media.map(item => item.get('id')), sensitive: getState().getIn(['compose', 'sensitive']), - spoiler_text: getState().getIn(['compose', 'spoiler_text'], ''), + spoiler_text: getState().getIn(['compose', 'spoiler']) ? getState().getIn(['compose', 'spoiler_text'], '') : '', visibility: getState().getIn(['compose', 'privacy']), poll: getState().getIn(['compose', 'poll'], null), }, { @@ -205,10 +205,11 @@ export function uploadCompose(files) { return function (dispatch, getState) { const uploadLimit = 4; const media = getState().getIn(['compose', 'media_attachments']); + const pending = getState().getIn(['compose', 'pending_media_attachments']); const progress = new Array(files.length).fill(0); let total = Array.from(files).reduce((a, v) => a + v.size, 0); - if (files.length + media.size > uploadLimit) { + if (files.length + media.size + pending > uploadLimit) { dispatch(showAlert(undefined, messages.uploadErrorLimit)); return; } @@ -234,7 +235,7 @@ export function uploadCompose(files) { progress[i] = loaded; dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total)); }, - }).then(({ data }) => dispatch(uploadComposeSuccess(data))); + }).then(({ data }) => dispatch(uploadComposeSuccess(data, f))); }).catch(error => dispatch(uploadComposeFail(error))); }; }; @@ -289,10 +290,11 @@ export function uploadComposeProgress(loaded, total) { }; }; -export function uploadComposeSuccess(media) { +export function uploadComposeSuccess(media, file) { return { type: COMPOSE_UPLOAD_SUCCESS, media: media, + file: file, skipLoading: true, }; }; @@ -325,10 +327,12 @@ const fetchComposeSuggestionsAccounts = throttle((dispatch, getState, token) => if (cancelFetchComposeSuggestionsAccounts) { cancelFetchComposeSuggestionsAccounts(); } + api(getState).get('/api/v1/accounts/search', { cancelToken: new CancelToken(cancel => { cancelFetchComposeSuggestionsAccounts = cancel; }), + params: { q: token.slice(1), resolve: false, @@ -349,9 +353,33 @@ const fetchComposeSuggestionsEmojis = (dispatch, getState, token) => { dispatch(readyComposeSuggestionsEmojis(token, results)); }; -const fetchComposeSuggestionsTags = (dispatch, getState, token) => { +const fetchComposeSuggestionsTags = throttle((dispatch, getState, token) => { + if (cancelFetchComposeSuggestionsTags) { + cancelFetchComposeSuggestionsTags(); + } + dispatch(updateSuggestionTags(token)); -}; + + api(getState).get('/api/v2/search', { + cancelToken: new CancelToken(cancel => { + cancelFetchComposeSuggestionsTags = cancel; + }), + + params: { + type: 'hashtags', + q: token.slice(1), + resolve: false, + limit: 4, + exclude_unreviewed: true, + }, + }).then(({ data }) => { + dispatch(readyComposeSuggestionsTags(token, data.hashtags)); + }).catch(error => { + if (!isCancel(error)) { + dispatch(showAlertForError(error)); + } + }); +}, 200, { leading: true, trailing: true }); export function fetchComposeSuggestions(token) { return (dispatch, getState) => { @@ -385,20 +413,26 @@ export function readyComposeSuggestionsAccounts(token, accounts) { }; }; +export const readyComposeSuggestionsTags = (token, tags) => ({ + type: COMPOSE_SUGGESTIONS_READY, + token, + tags, +}); + export function selectComposeSuggestion(position, token, suggestion, path) { return (dispatch, getState) => { let completion, startPosition; - if (typeof suggestion === 'object' && suggestion.id) { + if (suggestion.type === 'emoji') { completion = suggestion.native || suggestion.colons; startPosition = position - 1; dispatch(useEmoji(suggestion)); - } else if (suggestion[0] === '#') { - completion = suggestion; + } else if (suggestion.type === 'hashtag') { + completion = `#${suggestion.name}`; startPosition = position - 1; - } else { - completion = getState().getIn(['accounts', suggestion, 'acct']); + } else if (suggestion.type === 'account') { + completion = getState().getIn(['accounts', suggestion.id, 'acct']); startPosition = position; } diff --git a/app/javascript/mastodon/actions/conversations.js b/app/javascript/mastodon/actions/conversations.js index c6e062ef7..4ef654b1f 100644 --- a/app/javascript/mastodon/actions/conversations.js +++ b/app/javascript/mastodon/actions/conversations.js @@ -15,6 +15,10 @@ export const CONVERSATIONS_UPDATE = 'CONVERSATIONS_UPDATE'; export const CONVERSATIONS_READ = 'CONVERSATIONS_READ'; +export const CONVERSATIONS_DELETE_REQUEST = 'CONVERSATIONS_DELETE_REQUEST'; +export const CONVERSATIONS_DELETE_SUCCESS = 'CONVERSATIONS_DELETE_SUCCESS'; +export const CONVERSATIONS_DELETE_FAIL = 'CONVERSATIONS_DELETE_FAIL'; + export const mountConversations = () => ({ type: CONVERSATIONS_MOUNT, }); @@ -82,3 +86,27 @@ export const updateConversations = conversation => dispatch => { conversation, }); }; + +export const deleteConversation = conversationId => (dispatch, getState) => { + dispatch(deleteConversationRequest(conversationId)); + + api(getState).delete(`/api/v1/conversations/${conversationId}`) + .then(() => dispatch(deleteConversationSuccess(conversationId))) + .catch(error => dispatch(deleteConversationFail(conversationId, error))); +}; + +export const deleteConversationRequest = id => ({ + type: CONVERSATIONS_DELETE_REQUEST, + id, +}); + +export const deleteConversationSuccess = id => ({ + type: CONVERSATIONS_DELETE_SUCCESS, + id, +}); + +export const deleteConversationFail = (id, error) => ({ + type: CONVERSATIONS_DELETE_FAIL, + id, + error, +}); diff --git a/app/javascript/mastodon/actions/directory.js b/app/javascript/mastodon/actions/directory.js new file mode 100644 index 000000000..4b2b6dd56 --- /dev/null +++ b/app/javascript/mastodon/actions/directory.js @@ -0,0 +1,61 @@ +import api from '../api'; +import { importFetchedAccounts } from './importer'; +import { fetchRelationships } from './accounts'; + +export const DIRECTORY_FETCH_REQUEST = 'DIRECTORY_FETCH_REQUEST'; +export const DIRECTORY_FETCH_SUCCESS = 'DIRECTORY_FETCH_SUCCESS'; +export const DIRECTORY_FETCH_FAIL = 'DIRECTORY_FETCH_FAIL'; + +export const DIRECTORY_EXPAND_REQUEST = 'DIRECTORY_EXPAND_REQUEST'; +export const DIRECTORY_EXPAND_SUCCESS = 'DIRECTORY_EXPAND_SUCCESS'; +export const DIRECTORY_EXPAND_FAIL = 'DIRECTORY_EXPAND_FAIL'; + +export const fetchDirectory = params => (dispatch, getState) => { + dispatch(fetchDirectoryRequest()); + + api(getState).get('/api/v1/directory', { params: { ...params, limit: 20 } }).then(({ data }) => { + dispatch(importFetchedAccounts(data)); + dispatch(fetchDirectorySuccess(data)); + dispatch(fetchRelationships(data.map(x => x.id))); + }).catch(error => dispatch(fetchDirectoryFail(error))); +}; + +export const fetchDirectoryRequest = () => ({ + type: DIRECTORY_FETCH_REQUEST, +}); + +export const fetchDirectorySuccess = accounts => ({ + type: DIRECTORY_FETCH_SUCCESS, + accounts, +}); + +export const fetchDirectoryFail = error => ({ + type: DIRECTORY_FETCH_FAIL, + error, +}); + +export const expandDirectory = params => (dispatch, getState) => { + dispatch(expandDirectoryRequest()); + + const loadedItems = getState().getIn(['user_lists', 'directory', 'items']).size; + + api(getState).get('/api/v1/directory', { params: { ...params, offset: loadedItems, limit: 20 } }).then(({ data }) => { + dispatch(importFetchedAccounts(data)); + dispatch(expandDirectorySuccess(data)); + dispatch(fetchRelationships(data.map(x => x.id))); + }).catch(error => dispatch(expandDirectoryFail(error))); +}; + +export const expandDirectoryRequest = () => ({ + type: DIRECTORY_EXPAND_REQUEST, +}); + +export const expandDirectorySuccess = accounts => ({ + type: DIRECTORY_EXPAND_SUCCESS, + accounts, +}); + +export const expandDirectoryFail = error => ({ + type: DIRECTORY_EXPAND_FAIL, + error, +}); diff --git a/app/javascript/mastodon/actions/domain_blocks.js b/app/javascript/mastodon/actions/domain_blocks.js index 0445a5e10..34a33a654 100644 --- a/app/javascript/mastodon/actions/domain_blocks.js +++ b/app/javascript/mastodon/actions/domain_blocks.js @@ -23,6 +23,7 @@ export function blockDomain(domain) { api(getState).post('/api/v1/domain_blocks', { domain }).then(() => { const at_domain = '@' + domain; const accounts = getState().get('accounts').filter(item => item.get('acct').endsWith(at_domain)).valueSeq().map(item => item.get('id')); + dispatch(blockDomainSuccess(domain, accounts)); }).catch(err => { dispatch(blockDomainFail(domain, err)); diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index 5badb0c49..78f321da4 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -10,6 +10,12 @@ const makeEmojiMap = record => record.emojis.reduce((obj, emoji) => { return obj; }, {}); +export function searchTextFromRawStatus (status) { + const spoilerText = status.spoiler_text || ''; + const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n'); + return domParser.parseFromString(searchContent, 'text/html').documentElement.textContent; +} + export function normalizeAccount(account) { account = { ...account }; @@ -22,7 +28,7 @@ export function normalizeAccount(account) { if (account.fields) { account.fields = account.fields.map(pair => ({ ...pair, - name_emojified: emojify(escapeTextContentForBrowser(pair.name)), + name_emojified: emojify(escapeTextContentForBrowser(pair.name), emojiMap), value_emojified: emojify(pair.value, emojiMap), value_plain: unescapeHTML(pair.value), })); @@ -56,7 +62,7 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.hidden = normalOldStatus.get('hidden'); } else { const spoilerText = normalStatus.spoiler_text || ''; - const searchContent = [spoilerText, status.content].join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n'); + const searchContent = ([spoilerText, status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n'); const emojiMap = makeEmojiMap(normalStatus); normalStatus.search_index = domParser.parseFromString(searchContent, 'text/html').documentElement.textContent; @@ -73,8 +79,9 @@ export function normalizePoll(poll) { const emojiMap = makeEmojiMap(normalPoll); - normalPoll.options = poll.options.map(option => ({ + normalPoll.options = poll.options.map((option, index) => ({ ...option, + voted: poll.own_votes && poll.own_votes.includes(index), title_emojified: emojify(escapeTextContentForBrowser(option.title), emojiMap), })); diff --git a/app/javascript/mastodon/actions/interactions.js b/app/javascript/mastodon/actions/interactions.js index 2dc4c574c..28c6b1a62 100644 --- a/app/javascript/mastodon/actions/interactions.js +++ b/app/javascript/mastodon/actions/interactions.js @@ -33,6 +33,14 @@ export const UNPIN_REQUEST = 'UNPIN_REQUEST'; export const UNPIN_SUCCESS = 'UNPIN_SUCCESS'; export const UNPIN_FAIL = 'UNPIN_FAIL'; +export const BOOKMARK_REQUEST = 'BOOKMARK_REQUEST'; +export const BOOKMARK_SUCCESS = 'BOOKMARKED_SUCCESS'; +export const BOOKMARK_FAIL = 'BOOKMARKED_FAIL'; + +export const UNBOOKMARK_REQUEST = 'UNBOOKMARKED_REQUEST'; +export const UNBOOKMARK_SUCCESS = 'UNBOOKMARKED_SUCCESS'; +export const UNBOOKMARK_FAIL = 'UNBOOKMARKED_FAIL'; + export function reblog(status) { return function (dispatch, getState) { dispatch(reblogRequest(status)); @@ -187,6 +195,78 @@ export function unfavouriteFail(status, error) { }; }; +export function bookmark(status) { + return function (dispatch, getState) { + dispatch(bookmarkRequest(status)); + + api(getState).post(`/api/v1/statuses/${status.get('id')}/bookmark`).then(function (response) { + dispatch(importFetchedStatus(response.data)); + dispatch(bookmarkSuccess(status, response.data)); + }).catch(function (error) { + dispatch(bookmarkFail(status, error)); + }); + }; +}; + +export function unbookmark(status) { + return (dispatch, getState) => { + dispatch(unbookmarkRequest(status)); + + api(getState).post(`/api/v1/statuses/${status.get('id')}/unbookmark`).then(response => { + dispatch(importFetchedStatus(response.data)); + dispatch(unbookmarkSuccess(status, response.data)); + }).catch(error => { + dispatch(unbookmarkFail(status, error)); + }); + }; +}; + +export function bookmarkRequest(status) { + return { + type: BOOKMARK_REQUEST, + status: status, + }; +}; + +export function bookmarkSuccess(status, response) { + return { + type: BOOKMARK_SUCCESS, + status: status, + response: response, + }; +}; + +export function bookmarkFail(status, error) { + return { + type: BOOKMARK_FAIL, + status: status, + error: error, + }; +}; + +export function unbookmarkRequest(status) { + return { + type: UNBOOKMARK_REQUEST, + status: status, + }; +}; + +export function unbookmarkSuccess(status, response) { + return { + type: UNBOOKMARK_SUCCESS, + status: status, + response: response, + }; +}; + +export function unbookmarkFail(status, error) { + return { + type: UNBOOKMARK_FAIL, + status: status, + error: error, + }; +}; + export function fetchReblogs(id) { return (dispatch, getState) => { dispatch(fetchReblogsRequest(id)); diff --git a/app/javascript/mastodon/actions/markers.js b/app/javascript/mastodon/actions/markers.js new file mode 100644 index 000000000..c3a5fe86f --- /dev/null +++ b/app/javascript/mastodon/actions/markers.js @@ -0,0 +1,30 @@ +export const submitMarkers = () => (dispatch, getState) => { + const accessToken = getState().getIn(['meta', 'access_token'], ''); + const params = {}; + + const lastHomeId = getState().getIn(['timelines', 'home', 'items', 0]); + const lastNotificationId = getState().getIn(['notifications', 'items', 0, 'id']); + + if (lastHomeId) { + params.home = { + last_read_id: lastHomeId, + }; + } + + if (lastNotificationId) { + params.notifications = { + last_read_id: lastNotificationId, + }; + } + + if (Object.keys(params).length === 0) { + return; + } + + const client = new XMLHttpRequest(); + + client.open('POST', '/api/v1/markers', false); + client.setRequestHeader('Content-Type', 'application/json'); + client.setRequestHeader('Authorization', `Bearer ${accessToken}`); + client.send(JSON.stringify(params)); +}; diff --git a/app/javascript/mastodon/actions/modal.js b/app/javascript/mastodon/actions/modal.js index 80e15c28e..3d0299db5 100644 --- a/app/javascript/mastodon/actions/modal.js +++ b/app/javascript/mastodon/actions/modal.js @@ -9,8 +9,9 @@ export function openModal(type, props) { }; }; -export function closeModal() { +export function closeModal(type) { return { type: MODAL_CLOSE, + modalType: type, }; }; diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index b0861fc6b..798f9b37e 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -11,7 +11,10 @@ import { saveSettings } from './settings'; import { defineMessages } from 'react-intl'; import { List as ImmutableList } from 'immutable'; import { unescapeHTML } from '../utils/html'; -import { getFilters, regexFromFilters } from '../selectors'; +import { getFiltersRegex } from '../selectors'; +import { usePendingItems as preferPendingItems } from 'mastodon/initial_state'; +import compareId from 'mastodon/compare_id'; +import { searchTextFromRawStatus } from 'mastodon/actions/importer/normalizer'; export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE'; export const NOTIFICATIONS_UPDATE_NOOP = 'NOTIFICATIONS_UPDATE_NOOP'; @@ -22,8 +25,12 @@ export const NOTIFICATIONS_EXPAND_FAIL = 'NOTIFICATIONS_EXPAND_FAIL'; export const NOTIFICATIONS_FILTER_SET = 'NOTIFICATIONS_FILTER_SET'; -export const NOTIFICATIONS_CLEAR = 'NOTIFICATIONS_CLEAR'; -export const NOTIFICATIONS_SCROLL_TOP = 'NOTIFICATIONS_SCROLL_TOP'; +export const NOTIFICATIONS_CLEAR = 'NOTIFICATIONS_CLEAR'; +export const NOTIFICATIONS_SCROLL_TOP = 'NOTIFICATIONS_SCROLL_TOP'; +export const NOTIFICATIONS_LOAD_PENDING = 'NOTIFICATIONS_LOAD_PENDING'; + +export const NOTIFICATIONS_MOUNT = 'NOTIFICATIONS_MOUNT'; +export const NOTIFICATIONS_UNMOUNT = 'NOTIFICATIONS_UNMOUNT'; defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, @@ -38,18 +45,27 @@ const fetchRelatedRelationships = (dispatch, notifications) => { } }; +export const loadPending = () => ({ + type: NOTIFICATIONS_LOAD_PENDING, +}); + export function updateNotifications(notification, intlMessages, intlLocale) { return (dispatch, getState) => { const showInColumn = getState().getIn(['settings', 'notifications', 'shows', notification.type], true); const showAlert = getState().getIn(['settings', 'notifications', 'alerts', notification.type], true); const playSound = getState().getIn(['settings', 'notifications', 'sounds', notification.type], true); - const filters = getFilters(getState(), { contextType: 'notifications' }); + const filters = getFiltersRegex(getState(), { contextType: 'notifications' }); let filtered = false; if (notification.type === 'mention') { - const regex = regexFromFilters(filters); - const searchIndex = notification.status.spoiler_text + '\n' + unescapeHTML(notification.status.content); + const dropRegex = filters[0]; + const regex = filters[1]; + const searchIndex = searchTextFromRawStatus(notification.status); + + if (dropRegex && dropRegex.test(searchIndex)) { + return; + } filtered = regex && regex.test(searchIndex); } @@ -64,6 +80,7 @@ export function updateNotifications(notification, intlMessages, intlLocale) { dispatch({ type: NOTIFICATIONS_UPDATE, notification, + usePendingItems: preferPendingItems, meta: (playSound && !filtered) ? { sound: 'boop' } : undefined, }); @@ -93,7 +110,7 @@ export function updateNotifications(notification, intlMessages, intlLocale) { const excludeTypesFromSettings = state => state.getIn(['settings', 'notifications', 'shows']).filter(enabled => !enabled).keySeq().toJS(); const excludeTypesFromFilter = filter => { - const allTypes = ImmutableList(['follow', 'favourite', 'reblog', 'mention', 'poll']); + const allTypes = ImmutableList(['follow', 'follow_request', 'favourite', 'reblog', 'mention', 'poll']); return allTypes.filterNot(item => item === filter).toJS(); }; @@ -117,10 +134,19 @@ export function expandNotifications({ maxId } = {}, done = noOp) { : excludeTypesFromFilter(activeFilter), }; - if (!maxId && notifications.get('items').size > 0) { - params.since_id = notifications.getIn(['items', 0, 'id']); + if (!params.max_id && (notifications.get('items', ImmutableList()).size + notifications.get('pendingItems', ImmutableList()).size) > 0) { + const a = notifications.getIn(['pendingItems', 0, 'id']); + const b = notifications.getIn(['items', 0, 'id']); + + if (a && b && compareId(a, b) > 0) { + params.since_id = a; + } else { + params.since_id = b || a; + } } + const isLoadingRecent = !!params.since_id; + dispatch(expandNotificationsRequest(isLoadingMore)); api(getState).get('/api/v1/notifications', { params }).then(response => { @@ -129,7 +155,7 @@ export function expandNotifications({ maxId } = {}, done = noOp) { dispatch(importFetchedAccounts(response.data.map(item => item.account))); dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); - dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore)); + dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems)); fetchRelatedRelationships(dispatch, response.data); done(); }).catch(error => { @@ -146,11 +172,13 @@ export function expandNotificationsRequest(isLoadingMore) { }; }; -export function expandNotificationsSuccess(notifications, next, isLoadingMore) { +export function expandNotificationsSuccess(notifications, next, isLoadingMore, isLoadingRecent, usePendingItems) { return { type: NOTIFICATIONS_EXPAND_SUCCESS, notifications, next, + isLoadingRecent: isLoadingRecent, + usePendingItems, skipLoading: !isLoadingMore, }; }; @@ -191,3 +219,11 @@ export function setFilter (filterType) { dispatch(saveSettings()); }; }; + +export const mountNotifications = () => ({ + type: NOTIFICATIONS_MOUNT, +}); + +export const unmountNotifications = () => ({ + type: NOTIFICATIONS_UNMOUNT, +}); diff --git a/app/javascript/mastodon/actions/search.js b/app/javascript/mastodon/actions/search.js index 7c06670eb..a178faead 100644 --- a/app/javascript/mastodon/actions/search.js +++ b/app/javascript/mastodon/actions/search.js @@ -10,6 +10,10 @@ export const SEARCH_FETCH_REQUEST = 'SEARCH_FETCH_REQUEST'; export const SEARCH_FETCH_SUCCESS = 'SEARCH_FETCH_SUCCESS'; export const SEARCH_FETCH_FAIL = 'SEARCH_FETCH_FAIL'; +export const SEARCH_EXPAND_REQUEST = 'SEARCH_EXPAND_REQUEST'; +export const SEARCH_EXPAND_SUCCESS = 'SEARCH_EXPAND_SUCCESS'; +export const SEARCH_EXPAND_FAIL = 'SEARCH_EXPAND_FAIL'; + export function changeSearch(value) { return { type: SEARCH_CHANGE, @@ -48,7 +52,7 @@ export function submitSearch() { dispatch(importFetchedStatuses(response.data.statuses)); } - dispatch(fetchSearchSuccess(response.data)); + dispatch(fetchSearchSuccess(response.data, value)); dispatch(fetchRelationships(response.data.accounts.map(item => item.id))); }).catch(error => { dispatch(fetchSearchFail(error)); @@ -62,10 +66,11 @@ export function fetchSearchRequest() { }; }; -export function fetchSearchSuccess(results) { +export function fetchSearchSuccess(results, searchTerm) { return { type: SEARCH_FETCH_SUCCESS, results, + searchTerm, }; }; @@ -76,8 +81,50 @@ export function fetchSearchFail(error) { }; }; -export function showSearch() { - return { - type: SEARCH_SHOW, - }; +export const expandSearch = type => (dispatch, getState) => { + const value = getState().getIn(['search', 'value']); + const offset = getState().getIn(['search', 'results', type]).size; + + dispatch(expandSearchRequest()); + + api(getState).get('/api/v2/search', { + params: { + q: value, + type, + offset, + }, + }).then(({ data }) => { + if (data.accounts) { + dispatch(importFetchedAccounts(data.accounts)); + } + + if (data.statuses) { + dispatch(importFetchedStatuses(data.statuses)); + } + + dispatch(expandSearchSuccess(data, value, type)); + dispatch(fetchRelationships(data.accounts.map(item => item.id))); + }).catch(error => { + dispatch(expandSearchFail(error)); + }); }; + +export const expandSearchRequest = () => ({ + type: SEARCH_EXPAND_REQUEST, +}); + +export const expandSearchSuccess = (results, searchTerm, searchType) => ({ + type: SEARCH_EXPAND_SUCCESS, + results, + searchTerm, + searchType, +}); + +export const expandSearchFail = error => ({ + type: SEARCH_EXPAND_FAIL, + error, +}); + +export const showSearch = () => ({ + type: SEARCH_SHOW, +}); diff --git a/app/javascript/mastodon/actions/timelines.js b/app/javascript/mastodon/actions/timelines.js index 06c21b96b..bc2ac5e82 100644 --- a/app/javascript/mastodon/actions/timelines.js +++ b/app/javascript/mastodon/actions/timelines.js @@ -1,6 +1,8 @@ import { importFetchedStatus, importFetchedStatuses } from './importer'; -import api, { getLinks } from '../api'; +import api, { getLinks } from 'mastodon/api'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; +import compareId from 'mastodon/compare_id'; +import { usePendingItems as preferPendingItems } from 'mastodon/initial_state'; export const TIMELINE_UPDATE = 'TIMELINE_UPDATE'; export const TIMELINE_DELETE = 'TIMELINE_DELETE'; @@ -10,10 +12,15 @@ export const TIMELINE_EXPAND_REQUEST = 'TIMELINE_EXPAND_REQUEST'; export const TIMELINE_EXPAND_SUCCESS = 'TIMELINE_EXPAND_SUCCESS'; export const TIMELINE_EXPAND_FAIL = 'TIMELINE_EXPAND_FAIL'; -export const TIMELINE_SCROLL_TOP = 'TIMELINE_SCROLL_TOP'; +export const TIMELINE_SCROLL_TOP = 'TIMELINE_SCROLL_TOP'; +export const TIMELINE_LOAD_PENDING = 'TIMELINE_LOAD_PENDING'; +export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT'; +export const TIMELINE_CONNECT = 'TIMELINE_CONNECT'; -export const TIMELINE_CONNECT = 'TIMELINE_CONNECT'; -export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT'; +export const loadPending = timeline => ({ + type: TIMELINE_LOAD_PENDING, + timeline, +}); export function updateTimeline(timeline, status, accept) { return dispatch => { @@ -27,6 +34,7 @@ export function updateTimeline(timeline, status, accept) { type: TIMELINE_UPDATE, timeline, status, + usePendingItems: preferPendingItems, }); }; }; @@ -71,8 +79,15 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { return; } - if (!params.max_id && !params.pinned && timeline.get('items', ImmutableList()).size > 0) { - params.since_id = timeline.getIn(['items', 0]); + if (!params.max_id && !params.pinned && (timeline.get('items', ImmutableList()).size + timeline.get('pendingItems', ImmutableList()).size) > 0) { + const a = timeline.getIn(['pendingItems', 0]); + const b = timeline.getIn(['items', 0]); + + if (a && b && compareId(a, b) > 0) { + params.since_id = a; + } else { + params.since_id = b || a; + } } const isLoadingRecent = !!params.since_id; @@ -82,7 +97,7 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) { api(getState).get(path, { params }).then(response => { const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedStatuses(response.data)); - dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.code === 206, isLoadingRecent, isLoadingMore)); + dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.status === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems)); done(); }).catch(error => { dispatch(expandTimelineFail(timelineId, error, isLoadingMore)); @@ -115,7 +130,7 @@ export function expandTimelineRequest(timeline, isLoadingMore) { }; }; -export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadingRecent, isLoadingMore) { +export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadingRecent, isLoadingMore, usePendingItems) { return { type: TIMELINE_EXPAND_SUCCESS, timeline, @@ -123,6 +138,7 @@ export function expandTimelineSuccess(timeline, statuses, next, partial, isLoadi next, partial, isLoadingRecent, + usePendingItems, skipLoading: !isLoadingMore, }; }; @@ -151,9 +167,8 @@ export function connectTimeline(timeline) { }; }; -export function disconnectTimeline(timeline) { - return { - type: TIMELINE_DISCONNECT, - timeline, - }; -}; +export const disconnectTimeline = timeline => ({ + type: TIMELINE_DISCONNECT, + timeline, + usePendingItems: preferPendingItems, +}); diff --git a/app/javascript/mastodon/actions/trends.js b/app/javascript/mastodon/actions/trends.js new file mode 100644 index 000000000..853e4f60a --- /dev/null +++ b/app/javascript/mastodon/actions/trends.js @@ -0,0 +1,32 @@ +import api from '../api'; + +export const TRENDS_FETCH_REQUEST = 'TRENDS_FETCH_REQUEST'; +export const TRENDS_FETCH_SUCCESS = 'TRENDS_FETCH_SUCCESS'; +export const TRENDS_FETCH_FAIL = 'TRENDS_FETCH_FAIL'; + +export const fetchTrends = () => (dispatch, getState) => { + dispatch(fetchTrendsRequest()); + + api(getState) + .get('/api/v1/trends') + .then(({ data }) => dispatch(fetchTrendsSuccess(data))) + .catch(err => dispatch(fetchTrendsFail(err))); +}; + +export const fetchTrendsRequest = () => ({ + type: TRENDS_FETCH_REQUEST, + skipLoading: true, +}); + +export const fetchTrendsSuccess = trends => ({ + type: TRENDS_FETCH_SUCCESS, + trends, + skipLoading: true, +}); + +export const fetchTrendsFail = error => ({ + type: TRENDS_FETCH_FAIL, + error, + skipLoading: true, + skipAlert: true, +}); diff --git a/app/javascript/mastodon/compare_id.js b/app/javascript/mastodon/compare_id.js index aaff66481..66cf51c4b 100644 --- a/app/javascript/mastodon/compare_id.js +++ b/app/javascript/mastodon/compare_id.js @@ -1,10 +1,11 @@ -export default function compareId(id1, id2) { +export default function compareId (id1, id2) { if (id1 === id2) { return 0; } + if (id1.length === id2.length) { return id1 > id2 ? 1 : -1; } else { return id1.length > id2.length ? 1 : -1; } -} +}; diff --git a/app/javascript/mastodon/components/attachment_list.js b/app/javascript/mastodon/components/attachment_list.js index 5dfa1464c..ebd696583 100644 --- a/app/javascript/mastodon/components/attachment_list.js +++ b/app/javascript/mastodon/components/attachment_list.js @@ -25,7 +25,7 @@ export default class AttachmentList extends ImmutablePureComponent { return ( <li key={attachment.get('id')}> - <a href={displayUrl} target='_blank' rel='noopener'><Icon id='link' /> {filename(displayUrl)}</a> + <a href={displayUrl} target='_blank' rel='noopener noreferrer'><Icon id='link' /> {filename(displayUrl)}</a> </li> ); })} @@ -46,7 +46,7 @@ export default class AttachmentList extends ImmutablePureComponent { return ( <li key={attachment.get('id')}> - <a href={displayUrl} target='_blank' rel='noopener'>{filename(displayUrl)}</a> + <a href={displayUrl} target='_blank' rel='noopener noreferrer'>{filename(displayUrl)}</a> </li> ); })} diff --git a/app/javascript/mastodon/components/autosuggest_hashtag.js b/app/javascript/mastodon/components/autosuggest_hashtag.js new file mode 100644 index 000000000..e2f4e320d --- /dev/null +++ b/app/javascript/mastodon/components/autosuggest_hashtag.js @@ -0,0 +1,28 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { shortNumberFormat } from 'mastodon/utils/numbers'; +import { FormattedMessage } from 'react-intl'; + +export default class AutosuggestHashtag extends React.PureComponent { + + static propTypes = { + tag: PropTypes.shape({ + name: PropTypes.string.isRequired, + url: PropTypes.string, + history: PropTypes.array, + }).isRequired, + }; + + render () { + const { tag } = this.props; + const weeklyUses = tag.history && shortNumberFormat(tag.history.reduce((total, day) => total + (day.uses * 1), 0)); + + return ( + <div className='autosuggest-hashtag'> + <div className='autosuggest-hashtag__name'>#<strong>{tag.name}</strong></div> + {tag.history !== undefined && <div className='autosuggest-hashtag__uses'><FormattedMessage id='autosuggest_hashtag.per_week' defaultMessage='{count} per week' values={{ count: weeklyUses }} /></div>} + </div> + ); + } + +} diff --git a/app/javascript/mastodon/components/autosuggest_input.js b/app/javascript/mastodon/components/autosuggest_input.js index c7d965b53..6d2035add 100644 --- a/app/javascript/mastodon/components/autosuggest_input.js +++ b/app/javascript/mastodon/components/autosuggest_input.js @@ -1,6 +1,7 @@ import React from 'react'; import AutosuggestAccountContainer from '../features/compose/containers/autosuggest_account_container'; import AutosuggestEmoji from './autosuggest_emoji'; +import AutosuggestHashtag from './autosuggest_hashtag'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import { isRtl } from '../rtl'; @@ -167,15 +168,15 @@ export default class AutosuggestInput extends ImmutablePureComponent { const { selectedSuggestion } = this.state; let inner, key; - if (typeof suggestion === 'object') { + if (suggestion.type === 'emoji') { inner = <AutosuggestEmoji emoji={suggestion} />; key = suggestion.id; - } else if (suggestion[0] === '#') { - inner = suggestion; - key = suggestion; - } else { - inner = <AutosuggestAccountContainer id={suggestion} />; - key = suggestion; + } else if (suggestion.type ==='hashtag') { + inner = <AutosuggestHashtag tag={suggestion} />; + key = suggestion.name; + } else if (suggestion.type === 'account') { + inner = <AutosuggestAccountContainer id={suggestion.id} />; + key = suggestion.id; } return ( diff --git a/app/javascript/mastodon/components/autosuggest_textarea.js b/app/javascript/mastodon/components/autosuggest_textarea.js index b070fe3e5..ac2a6366a 100644 --- a/app/javascript/mastodon/components/autosuggest_textarea.js +++ b/app/javascript/mastodon/components/autosuggest_textarea.js @@ -1,6 +1,7 @@ import React from 'react'; import AutosuggestAccountContainer from '../features/compose/containers/autosuggest_account_container'; import AutosuggestEmoji from './autosuggest_emoji'; +import AutosuggestHashtag from './autosuggest_hashtag'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import { isRtl } from '../rtl'; @@ -173,15 +174,15 @@ export default class AutosuggestTextarea extends ImmutablePureComponent { const { selectedSuggestion } = this.state; let inner, key; - if (typeof suggestion === 'object') { + if (suggestion.type === 'emoji') { inner = <AutosuggestEmoji emoji={suggestion} />; key = suggestion.id; - } else if (suggestion[0] === '#') { - inner = suggestion; - key = suggestion; - } else { - inner = <AutosuggestAccountContainer id={suggestion} />; - key = suggestion; + } else if (suggestion.type === 'hashtag') { + inner = <AutosuggestHashtag tag={suggestion} />; + key = suggestion.name; + } else if (suggestion.type === 'account') { + inner = <AutosuggestAccountContainer id={suggestion.id} />; + key = suggestion.id; } return ( diff --git a/app/javascript/mastodon/components/avatar_composite.js b/app/javascript/mastodon/components/avatar_composite.js index 4a9a73c51..5d5b89749 100644 --- a/app/javascript/mastodon/components/avatar_composite.js +++ b/app/javascript/mastodon/components/avatar_composite.js @@ -35,35 +35,35 @@ export default class AvatarComposite extends React.PureComponent { if (size === 2) { if (index === 0) { - right = '2px'; + right = '1px'; } else { - left = '2px'; + left = '1px'; } } else if (size === 3) { if (index === 0) { - right = '2px'; + right = '1px'; } else if (index > 0) { - left = '2px'; + left = '1px'; } if (index === 1) { - bottom = '2px'; + bottom = '1px'; } else if (index > 1) { - top = '2px'; + top = '1px'; } } else if (size === 4) { if (index === 0 || index === 2) { - right = '2px'; + right = '1px'; } if (index === 1 || index === 3) { - left = '2px'; + left = '1px'; } if (index < 2) { - bottom = '2px'; + bottom = '1px'; } else { - top = '2px'; + top = '1px'; } } @@ -88,7 +88,13 @@ export default class AvatarComposite extends React.PureComponent { return ( <div className='account__avatar-composite' style={{ width: `${size}px`, height: `${size}px` }}> - {accounts.take(4).map((account, i) => this.renderItem(account, accounts.size, i))} + {accounts.take(4).map((account, i) => this.renderItem(account, Math.min(accounts.size, 4), i))} + + {accounts.size > 4 && ( + <span className='account__avatar-composite__label'> + +{accounts.size - 4} + </span> + )} </div> ); } diff --git a/app/javascript/mastodon/components/button.js b/app/javascript/mastodon/components/button.js index 51e2e6a7a..eb8dd7dc8 100644 --- a/app/javascript/mastodon/components/button.js +++ b/app/javascript/mastodon/components/button.js @@ -12,6 +12,7 @@ export default class Button extends React.PureComponent { secondary: PropTypes.bool, size: PropTypes.number, className: PropTypes.string, + title: PropTypes.string, style: PropTypes.object, children: PropTypes.node, }; @@ -54,6 +55,7 @@ export default class Button extends React.PureComponent { onClick={this.handleClick} ref={this.setRef} style={style} + title={this.props.title} > {this.props.text || this.props.children} </button> diff --git a/app/javascript/mastodon/components/column.js b/app/javascript/mastodon/components/column.js index d45387463..55e3bfd5e 100644 --- a/app/javascript/mastodon/components/column.js +++ b/app/javascript/mastodon/components/column.js @@ -8,10 +8,11 @@ export default class Column extends React.PureComponent { static propTypes = { children: PropTypes.node, label: PropTypes.string, + bindToDocument: PropTypes.bool, }; scrollTop () { - const scrollable = this.node.querySelector('.scrollable'); + const scrollable = this.props.bindToDocument ? document.scrollingElement : this.node.querySelector('.scrollable'); if (!scrollable) { return; @@ -33,11 +34,19 @@ export default class Column extends React.PureComponent { } componentDidMount () { - this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + if (this.props.bindToDocument) { + document.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + } else { + this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false); + } } componentWillUnmount () { - this.node.removeEventListener('wheel', this.handleWheel); + if (this.props.bindToDocument) { + document.removeEventListener('wheel', this.handleWheel); + } else { + this.node.removeEventListener('wheel', this.handleWheel); + } } render () { diff --git a/app/javascript/mastodon/components/column_back_button.js b/app/javascript/mastodon/components/column_back_button.js index f41045787..d97622705 100644 --- a/app/javascript/mastodon/components/column_back_button.js +++ b/app/javascript/mastodon/components/column_back_button.js @@ -2,6 +2,7 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; import PropTypes from 'prop-types'; import Icon from 'mastodon/components/icon'; +import { createPortal } from 'react-dom'; export default class ColumnBackButton extends React.PureComponent { @@ -9,6 +10,10 @@ export default class ColumnBackButton extends React.PureComponent { router: PropTypes.object, }; + static propTypes = { + multiColumn: PropTypes.bool, + }; + handleClick = () => { if (window.history && window.history.length === 1) { this.context.router.history.push('/'); @@ -18,12 +23,32 @@ export default class ColumnBackButton extends React.PureComponent { } render () { - return ( + const { multiColumn } = this.props; + + const component = ( <button onClick={this.handleClick} className='column-back-button'> <Icon id='chevron-left' className='column-back-button__icon' fixedWidth /> <FormattedMessage id='column_back_button.label' defaultMessage='Back' /> </button> ); + + if (multiColumn) { + return component; + } else { + // The portal container and the component may be rendered to the DOM in + // the same React render pass, so the container might not be available at + // the time `render()` is called. + const container = document.getElementById('tabs-bar__portal'); + if (container === null) { + // The container wasn't available, force a re-render so that the + // component can eventually be inserted in the container and not scroll + // with the rest of the area. + this.forceUpdate(); + return component; + } else { + return createPortal(component, container); + } + } } } diff --git a/app/javascript/mastodon/components/column_header.js b/app/javascript/mastodon/components/column_header.js index f33c689e7..0038995c8 100644 --- a/app/javascript/mastodon/components/column_header.js +++ b/app/javascript/mastodon/components/column_header.js @@ -1,5 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { createPortal } from 'react-dom'; import classNames from 'classnames'; import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; import Icon from 'mastodon/components/icon'; @@ -28,6 +29,7 @@ class ColumnHeader extends React.PureComponent { showBackButton: PropTypes.bool, children: PropTypes.node, pinned: PropTypes.bool, + placeholder: PropTypes.bool, onPin: PropTypes.func, onMove: PropTypes.func, onClick: PropTypes.func, @@ -79,7 +81,7 @@ class ColumnHeader extends React.PureComponent { } render () { - const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage } } = this.props; + const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder } = this.props; const { collapsed, animating } = this.state; const wrapperClassName = classNames('column-header__wrapper', { @@ -118,7 +120,7 @@ class ColumnHeader extends React.PureComponent { <button title={formatMessage(messages.moveRight)} aria-label={formatMessage(messages.moveRight)} className='text-btn column-header__setting-btn' onClick={this.handleMoveRight}><Icon id='chevron-right' /></button> </div> ); - } else if (multiColumn) { + } else if (multiColumn && this.props.onPin) { pinButton = <button key='pin-button' className='text-btn column-header__setting-btn' onClick={this.handlePin}><Icon id='plus' /> <FormattedMessage id='column_header.pin' defaultMessage='Pin' /></button>; } @@ -140,13 +142,13 @@ class ColumnHeader extends React.PureComponent { collapsedContent.push(pinButton); } - if (children || multiColumn) { + if (children || (multiColumn && this.props.onPin)) { collapseButton = <button className={collapsibleButtonClassName} title={formatMessage(collapsed ? messages.show : messages.hide)} aria-label={formatMessage(collapsed ? messages.show : messages.hide)} aria-pressed={collapsed ? 'false' : 'true'} onClick={this.handleToggleClick}><Icon id='sliders' /></button>; } const hasTitle = icon && title; - return ( + const component = ( <div className={wrapperClassName}> <h1 className={buttonClassName}> {hasTitle && ( @@ -172,6 +174,24 @@ class ColumnHeader extends React.PureComponent { </div> </div> ); + + if (multiColumn || placeholder) { + return component; + } else { + // The portal container and the component may be rendered to the DOM in + // the same React render pass, so the container might not be available at + // the time `render()` is called. + const container = document.getElementById('tabs-bar__portal'); + if (container === null) { + // The container wasn't available, force a re-render so that the + // component can eventually be inserted in the container and not scroll + // with the rest of the area. + this.forceUpdate(); + return component; + } else { + return createPortal(component, container); + } + } } } diff --git a/app/javascript/mastodon/components/display_name.js b/app/javascript/mastodon/components/display_name.js index 6b9dd6f81..70ef82789 100644 --- a/app/javascript/mastodon/components/display_name.js +++ b/app/javascript/mastodon/components/display_name.js @@ -1,6 +1,7 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; +import { autoPlayGif } from 'mastodon/initial_state'; export default class DisplayName extends React.PureComponent { @@ -10,6 +11,47 @@ export default class DisplayName extends React.PureComponent { localDomain: PropTypes.string, }; + _updateEmojis () { + const node = this.node; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); + } + } + + componentDidMount () { + this._updateEmojis(); + } + + componentDidUpdate () { + this._updateEmojis(); + } + + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } + + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } + + setRef = (c) => { + this.node = c; + } + render () { const { others, localDomain } = this.props; @@ -39,7 +81,7 @@ export default class DisplayName extends React.PureComponent { } return ( - <span className='display-name'> + <span className='display-name' ref={this.setRef}> {displayName} {suffix} </span> ); diff --git a/app/javascript/mastodon/components/dropdown_menu.js b/app/javascript/mastodon/components/dropdown_menu.js index 91b65a02f..a4f262285 100644 --- a/app/javascript/mastodon/components/dropdown_menu.js +++ b/app/javascript/mastodon/components/dropdown_menu.js @@ -45,7 +45,9 @@ class DropdownMenu extends React.PureComponent { document.addEventListener('click', this.handleDocumentClick, false); document.addEventListener('keydown', this.handleKeyDown, false); document.addEventListener('touchend', this.handleDocumentClick, listenerOptions); - if (this.focusedItem && this.props.openedViaKeyboard) this.focusedItem.focus(); + if (this.focusedItem && this.props.openedViaKeyboard) { + this.focusedItem.focus(); + } this.setState({ mounted: true }); } @@ -81,6 +83,18 @@ class DropdownMenu extends React.PureComponent { element.focus(); } break; + case 'Tab': + if (e.shiftKey) { + element = items[index-1] || items[items.length-1]; + } else { + element = items[index+1] || items[0]; + } + if (element) { + element.focus(); + e.preventDefault(); + e.stopPropagation(); + } + break; case 'Home': element = items[0]; if (element) { @@ -93,11 +107,14 @@ class DropdownMenu extends React.PureComponent { element.focus(); } break; + case 'Escape': + this.props.onClose(); + break; } } - handleItemKeyDown = e => { - if (e.key === 'Enter') { + handleItemKeyPress = e => { + if (e.key === 'Enter' || e.key === ' ') { this.handleClick(e); } } @@ -122,11 +139,11 @@ class DropdownMenu extends React.PureComponent { return <li key={`sep-${i}`} className='dropdown-menu__separator' />; } - const { text, href = '#' } = option; + const { text, href = '#', target = '_blank', method } = option; return ( <li className='dropdown-menu__item' key={`${text}-${i}`}> - <a href={href} target='_blank' rel='noopener' role='button' tabIndex='0' ref={i === 0 ? this.setFocusRef : null} onClick={this.handleClick} onKeyDown={this.handleItemKeyDown} data-index={i}> + <a href={href} target={target} data-method={method} rel='noopener noreferrer' role='button' tabIndex='0' ref={i === 0 ? this.setFocusRef : null} onClick={this.handleClick} onKeyPress={this.handleItemKeyPress} data-index={i}> {text} </a> </li> @@ -193,25 +210,41 @@ export default class Dropdown extends React.PureComponent { } else { const { top } = target.getBoundingClientRect(); const placement = top * 2 < innerHeight ? 'bottom' : 'top'; - this.props.onOpen(this.state.id, this.handleItemClick, placement, type !== 'click'); } } handleClose = () => { + if (this.activeElement) { + this.activeElement.focus(); + this.activeElement = null; + } this.props.onClose(this.state.id); } - handleKeyDown = e => { + handleMouseDown = () => { + if (!this.state.open) { + this.activeElement = document.activeElement; + } + } + + handleButtonKeyDown = (e) => { + switch(e.key) { + case ' ': + case 'Enter': + this.handleMouseDown(); + break; + } + } + + handleKeyPress = (e) => { switch(e.key) { case ' ': case 'Enter': this.handleClick(e); + e.stopPropagation(); e.preventDefault(); break; - case 'Escape': - this.handleClose(); - break; } } @@ -249,7 +282,7 @@ export default class Dropdown extends React.PureComponent { const open = this.state.id === openDropdownId; return ( - <div onKeyDown={this.handleKeyDown}> + <div> <IconButton icon={icon} title={title} @@ -258,6 +291,9 @@ export default class Dropdown extends React.PureComponent { size={size} ref={this.setTargetRef} onClick={this.handleClick} + onMouseDown={this.handleMouseDown} + onKeyDown={this.handleButtonKeyDown} + onKeyPress={this.handleKeyPress} /> <Overlay show={open} placement={dropdownPlacement} target={this.findTarget}> diff --git a/app/javascript/mastodon/components/error_boundary.js b/app/javascript/mastodon/components/error_boundary.js index d1ca5bf75..800b1c270 100644 --- a/app/javascript/mastodon/components/error_boundary.js +++ b/app/javascript/mastodon/components/error_boundary.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import illustration from '../../images/elephant_ui_disappointed.svg'; +import { FormattedMessage } from 'react-intl'; +import { version, source_url } from 'mastodon/initial_state'; export default class ErrorBoundary extends React.PureComponent { @@ -12,26 +13,53 @@ export default class ErrorBoundary extends React.PureComponent { hasError: false, stackTrace: undefined, componentStack: undefined, - } + }; - componentDidCatch(error, info) { + componentDidCatch (error, info) { this.setState({ hasError: true, stackTrace: error.stack, componentStack: info && info.componentStack, + copied: false, }); } + handleCopyStackTrace = () => { + const { stackTrace } = this.state; + const textarea = document.createElement('textarea'); + + textarea.textContent = stackTrace; + textarea.style.position = 'fixed'; + + document.body.appendChild(textarea); + + try { + textarea.select(); + document.execCommand('copy'); + } catch (e) { + + } finally { + document.body.removeChild(textarea); + } + + this.setState({ copied: true }); + setTimeout(() => this.setState({ copied: false }), 700); + } + render() { - const { hasError } = this.state; + const { hasError, copied } = this.state; if (!hasError) { return this.props.children; } return ( - <div> - <img src={illustration} alt='' /> + <div className='error-boundary'> + <div> + <p className='error-boundary__error'><FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' /></p> + <p><FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' /></p> + <p className='error-boundary__footer'>Mastodon v{version} · <a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='errors.unexpected_crash.report_issue' defaultMessage='Report issue' /></a> · <button onClick={this.handleCopyStackTrace} className={copied && 'copied'}><FormattedMessage id='errors.unexpected_crash.copy_stacktrace' defaultMessage='Copy stacktrace to clipboard' /></button></p> + </div> </div> ); } diff --git a/app/javascript/mastodon/components/extended_video_player.js b/app/javascript/mastodon/components/extended_video_player.js deleted file mode 100644 index 009c0d559..000000000 --- a/app/javascript/mastodon/components/extended_video_player.js +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -export default class ExtendedVideoPlayer extends React.PureComponent { - - static propTypes = { - src: PropTypes.string.isRequired, - alt: PropTypes.string, - width: PropTypes.number, - height: PropTypes.number, - time: PropTypes.number, - controls: PropTypes.bool.isRequired, - muted: PropTypes.bool.isRequired, - onClick: PropTypes.func, - }; - - handleLoadedData = () => { - if (this.props.time) { - this.video.currentTime = this.props.time; - } - } - - componentDidMount () { - this.video.addEventListener('loadeddata', this.handleLoadedData); - } - - componentWillUnmount () { - this.video.removeEventListener('loadeddata', this.handleLoadedData); - } - - setRef = (c) => { - this.video = c; - } - - handleClick = e => { - e.stopPropagation(); - const handler = this.props.onClick; - if (handler) handler(); - } - - render () { - const { src, muted, controls, alt } = this.props; - - return ( - <div className='extended-video-player'> - <video - ref={this.setRef} - src={src} - autoPlay - role='button' - tabIndex='0' - aria-label={alt} - title={alt} - muted={muted} - controls={controls} - loop={!controls} - onClick={this.handleClick} - /> - </div> - ); - } - -} diff --git a/app/javascript/mastodon/components/gifv.js b/app/javascript/mastodon/components/gifv.js new file mode 100644 index 000000000..83cfae49c --- /dev/null +++ b/app/javascript/mastodon/components/gifv.js @@ -0,0 +1,75 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +export default class GIFV extends React.PureComponent { + + static propTypes = { + src: PropTypes.string.isRequired, + alt: PropTypes.string, + width: PropTypes.number, + height: PropTypes.number, + onClick: PropTypes.func, + }; + + state = { + loading: true, + }; + + handleLoadedData = () => { + this.setState({ loading: false }); + } + + componentWillReceiveProps (nextProps) { + if (nextProps.src !== this.props.src) { + this.setState({ loading: true }); + } + } + + handleClick = e => { + const { onClick } = this.props; + + if (onClick) { + e.stopPropagation(); + onClick(); + } + } + + render () { + const { src, width, height, alt } = this.props; + const { loading } = this.state; + + return ( + <div className='gifv' style={{ position: 'relative' }}> + {loading && ( + <canvas + width={width} + height={height} + role='button' + tabIndex='0' + aria-label={alt} + title={alt} + onClick={this.handleClick} + /> + )} + + <video + src={src} + width={width} + height={height} + role='button' + tabIndex='0' + aria-label={alt} + title={alt} + muted + loop + autoPlay + playsInline + onClick={this.handleClick} + onLoadedData={this.handleLoadedData} + style={{ position: loading ? 'absolute' : 'static', top: 0, left: 0 }} + /> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/components/hashtag.js b/app/javascript/mastodon/components/hashtag.js index f091d7893..62d613262 100644 --- a/app/javascript/mastodon/components/hashtag.js +++ b/app/javascript/mastodon/components/hashtag.js @@ -12,11 +12,11 @@ const Hashtag = ({ hashtag }) => ( #<span>{hashtag.get('name')}</span> </Permalink> - <FormattedMessage id='trends.count_by_accounts' defaultMessage='{count} {rawCount, plural, one {person} other {people}} talking' values={{ rawCount: hashtag.getIn(['history', 0, 'accounts']), count: <strong>{shortNumberFormat(hashtag.getIn(['history', 0, 'accounts']))}</strong> }} /> + <FormattedMessage id='trends.count_by_accounts' defaultMessage='{count} {rawCount, plural, one {person} other {people}} talking' values={{ rawCount: hashtag.getIn(['history', 0, 'accounts']) * 1 + hashtag.getIn(['history', 1, 'accounts']) * 1, count: <strong>{shortNumberFormat(hashtag.getIn(['history', 0, 'accounts']) * 1 + hashtag.getIn(['history', 1, 'accounts']) * 1)}</strong> }} /> </div> <div className='trends__item__current'> - {shortNumberFormat(hashtag.getIn(['history', 0, 'uses']))} + {shortNumberFormat(hashtag.getIn(['history', 0, 'uses']) * 1 + hashtag.getIn(['history', 1, 'uses']) * 1)} </div> <div className='trends__item__sparkline'> diff --git a/app/javascript/mastodon/components/icon_button.js b/app/javascript/mastodon/components/icon_button.js index 9d8a8d06b..fd715bc3c 100644 --- a/app/javascript/mastodon/components/icon_button.js +++ b/app/javascript/mastodon/components/icon_button.js @@ -1,6 +1,4 @@ import React from 'react'; -import Motion from '../features/ui/util/optional_motion'; -import spring from 'react-motion/lib/spring'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; @@ -12,6 +10,9 @@ export default class IconButton extends React.PureComponent { title: PropTypes.string.isRequired, icon: PropTypes.string.isRequired, onClick: PropTypes.func, + onMouseDown: PropTypes.func, + onKeyDown: PropTypes.func, + onKeyPress: PropTypes.func, size: PropTypes.number, active: PropTypes.bool, pressed: PropTypes.bool, @@ -34,6 +35,21 @@ export default class IconButton extends React.PureComponent { tabIndex: '0', }; + state = { + activate: false, + deactivate: false, + } + + componentWillReceiveProps (nextProps) { + if (!nextProps.animate) return; + + if (this.props.active && !nextProps.active) { + this.setState({ activate: false, deactivate: true }); + } else if (!this.props.active && nextProps.active) { + this.setState({ activate: true, deactivate: false }); + } + } + handleClick = (e) => { e.preventDefault(); @@ -42,6 +58,24 @@ export default class IconButton extends React.PureComponent { } } + handleKeyPress = (e) => { + if (this.props.onKeyPress && !this.props.disabled) { + this.props.onKeyPress(e); + } + } + + handleMouseDown = (e) => { + if (!this.props.disabled && this.props.onMouseDown) { + this.props.onMouseDown(e); + } + } + + handleKeyDown = (e) => { + if (!this.props.disabled && this.props.onKeyDown) { + this.props.onKeyDown(e); + } + } + render () { const style = { fontSize: `${this.props.size}px`, @@ -54,7 +88,6 @@ export default class IconButton extends React.PureComponent { const { active, - animate, className, disabled, expanded, @@ -66,51 +99,37 @@ export default class IconButton extends React.PureComponent { title, } = this.props; + const { + activate, + deactivate, + } = this.state; + const classes = classNames(className, 'icon-button', { active, disabled, inverted, + activate, + deactivate, overlayed: overlay, }); - if (!animate) { - // Perf optimization: avoid unnecessary <Motion> components unless - // we actually need to animate. - return ( - <button - aria-label={title} - aria-pressed={pressed} - aria-expanded={expanded} - title={title} - className={classes} - onClick={this.handleClick} - style={style} - tabIndex={tabIndex} - disabled={disabled} - > - <Icon id={icon} fixedWidth aria-hidden='true' /> - </button> - ); - } - return ( - <Motion defaultStyle={{ rotate: active ? -360 : 0 }} style={{ rotate: animate ? spring(active ? -360 : 0, { stiffness: 120, damping: 7 }) : 0 }}> - {({ rotate }) => ( - <button - aria-label={title} - aria-pressed={pressed} - aria-expanded={expanded} - title={title} - className={classes} - onClick={this.handleClick} - style={style} - tabIndex={tabIndex} - disabled={disabled} - > - <Icon id={icon} style={{ transform: `rotate(${rotate}deg)` }} fixedWidth aria-hidden='true' /> - </button> - )} - </Motion> + <button + aria-label={title} + aria-pressed={pressed} + aria-expanded={expanded} + title={title} + className={classes} + onClick={this.handleClick} + onMouseDown={this.handleMouseDown} + onKeyDown={this.handleKeyDown} + onKeyPress={this.handleKeyPress} + style={style} + tabIndex={tabIndex} + disabled={disabled} + > + <Icon id={icon} fixedWidth aria-hidden='true' /> + </button> ); } diff --git a/app/javascript/mastodon/components/load_pending.js b/app/javascript/mastodon/components/load_pending.js new file mode 100644 index 000000000..7e2702403 --- /dev/null +++ b/app/javascript/mastodon/components/load_pending.js @@ -0,0 +1,22 @@ +import React from 'react'; +import { FormattedMessage } from 'react-intl'; +import PropTypes from 'prop-types'; + +export default class LoadPending extends React.PureComponent { + + static propTypes = { + onClick: PropTypes.func, + count: PropTypes.number, + } + + render() { + const { count } = this.props; + + return ( + <button className='load-more load-gap' onClick={this.props.onClick}> + <FormattedMessage id='load_pending' defaultMessage='{count, plural, one {# new item} other {# new items}}' values={{ count }} /> + </button> + ); + } + +} diff --git a/app/javascript/mastodon/components/media_gallery.js b/app/javascript/mastodon/components/media_gallery.js index 56618462b..12b7e5b66 100644 --- a/app/javascript/mastodon/components/media_gallery.js +++ b/app/javascript/mastodon/components/media_gallery.js @@ -6,7 +6,7 @@ import IconButton from './icon_button'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { isIOS } from '../is_mobile'; import classNames from 'classnames'; -import { autoPlayGif, displayMedia } from '../initial_state'; +import { autoPlayGif, cropImages, displayMedia, useBlurhash } from '../initial_state'; import { decode } from 'blurhash'; const messages = defineMessages({ @@ -81,6 +81,8 @@ class Item extends React.PureComponent { } _decode () { + if (!useBlurhash) return; + const hash = this.props.attachment.get('blurhash'); const pixels = decode(hash, 32, 32); @@ -157,7 +159,7 @@ class Item extends React.PureComponent { if (attachment.get('type') === 'unknown') { return ( <div className={classNames('media-gallery__item', { standalone })} key={attachment.get('id')} style={{ left: left, top: top, right: right, bottom: bottom, width: `${width}%`, height: `${height}%` }}> - <a className='media-gallery__item-thumbnail' href={attachment.get('remote_url')} target='_blank' style={{ cursor: 'pointer' }}> + <a className='media-gallery__item-thumbnail' href={attachment.get('remote_url') || attachment.get('url')} style={{ cursor: 'pointer' }} title={attachment.get('description')} target='_blank' rel='noopener noreferrer'> <canvas width={32} height={32} ref={this.setCanvasRef} className='media-gallery__preview' /> </a> </div> @@ -185,6 +187,7 @@ class Item extends React.PureComponent { href={attachment.get('remote_url') || originalUrl} onClick={this.handleClick} target='_blank' + rel='noopener noreferrer' > <img src={previewUrl} @@ -278,7 +281,7 @@ class MediaGallery extends React.PureComponent { } handleRef = (node) => { - if (node /*&& this.isStandaloneEligible()*/) { + if (node) { // offsetWidth triggers a layout, so only calculate when we need to if (this.props.cacheWidth) this.props.cacheWidth(node.offsetWidth); @@ -288,13 +291,13 @@ class MediaGallery extends React.PureComponent { } } - isStandaloneEligible() { - const { media, standalone } = this.props; - return standalone && media.size === 1 && media.getIn([0, 'meta', 'small', 'aspect']); + isFullSizeEligible() { + const { media } = this.props; + return media.size === 1 && media.getIn([0, 'meta', 'small', 'aspect']); } render () { - const { media, intl, sensitive, height, defaultWidth } = this.props; + const { media, intl, sensitive, height, defaultWidth, standalone } = this.props; const { visible } = this.state; const width = this.state.width || defaultWidth; @@ -303,7 +306,7 @@ class MediaGallery extends React.PureComponent { const style = {}; - if (this.isStandaloneEligible()) { + if (this.isFullSizeEligible() && (standalone || !cropImages)) { if (width) { style.height = width / this.props.media.getIn([0, 'meta', 'small', 'aspect']); } @@ -313,15 +316,22 @@ class MediaGallery extends React.PureComponent { style.height = height; } - const size = media.take(4).size; + const size = media.take(4).size; + const uncached = media.every(attachment => attachment.get('type') === 'unknown'); - if (this.isStandaloneEligible()) { + if (standalone && this.isFullSizeEligible()) { children = <Item standalone onClick={this.handleClick} attachment={media.get(0)} displayWidth={width} visible={visible} />; } else { - children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} onClick={this.handleClick} attachment={attachment} index={i} size={size} displayWidth={width} visible={visible} />); + children = media.take(4).map((attachment, i) => <Item key={attachment.get('id')} onClick={this.handleClick} attachment={attachment} index={i} size={size} displayWidth={width} visible={visible || uncached} />); } - if (visible) { + if (uncached) { + spoilerButton = ( + <button type='button' disabled className='spoiler-button__overlay'> + <span className='spoiler-button__overlay__label'><FormattedMessage id='status.uncached_media_warning' defaultMessage='Not available' /></span> + </button> + ); + } else if (visible) { spoilerButton = <IconButton title={intl.formatMessage(messages.toggle_visible)} icon='eye-slash' overlay onClick={this.handleOpen} />; } else { spoilerButton = ( @@ -333,7 +343,7 @@ class MediaGallery extends React.PureComponent { return ( <div className='media-gallery' style={style} ref={this.handleRef}> - <div className={classNames('spoiler-button', { 'spoiler-button--minified': visible })}> + <div className={classNames('spoiler-button', { 'spoiler-button--minified': visible && !uncached, 'spoiler-button--click-thru': uncached })}> {spoilerButton} </div> diff --git a/app/javascript/mastodon/components/missing_indicator.js b/app/javascript/mastodon/components/missing_indicator.js index 70d8c3b98..7b0101bab 100644 --- a/app/javascript/mastodon/components/missing_indicator.js +++ b/app/javascript/mastodon/components/missing_indicator.js @@ -1,17 +1,24 @@ import React from 'react'; +import PropTypes from 'prop-types'; import { FormattedMessage } from 'react-intl'; +import illustration from 'mastodon/../images/elephant_ui_disappointed.svg'; +import classNames from 'classnames'; -const MissingIndicator = () => ( - <div className='regeneration-indicator missing-indicator'> - <div> - <div className='regeneration-indicator__figure' /> +const MissingIndicator = ({ fullPage }) => ( + <div className={classNames('regeneration-indicator', { 'regeneration-indicator--without-header': fullPage })}> + <div className='regeneration-indicator__figure'> + <img src={illustration} alt='' /> + </div> - <div className='regeneration-indicator__label'> - <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' /> - <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' /> - </div> + <div className='regeneration-indicator__label'> + <FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' /> + <FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' /> </div> </div> ); +MissingIndicator.propTypes = { + fullPage: PropTypes.bool, +}; + export default MissingIndicator; diff --git a/app/javascript/mastodon/components/modal_root.js b/app/javascript/mastodon/components/modal_root.js index ef1156571..fa4e59192 100644 --- a/app/javascript/mastodon/components/modal_root.js +++ b/app/javascript/mastodon/components/modal_root.js @@ -1,5 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; +import 'wicg-inert'; export default class ModalRoot extends React.PureComponent { @@ -21,8 +22,30 @@ export default class ModalRoot extends React.PureComponent { } } + handleKeyDown = (e) => { + if (e.key === 'Tab') { + const focusable = Array.from(this.node.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter((x) => window.getComputedStyle(x).display !== 'none'); + const index = focusable.indexOf(e.target); + + let element; + + if (e.shiftKey) { + element = focusable[index - 1] || focusable[focusable.length - 1]; + } else { + element = focusable[index + 1] || focusable[0]; + } + + if (element) { + element.focus(); + e.stopPropagation(); + e.preventDefault(); + } + } + } + componentDidMount () { window.addEventListener('keyup', this.handleKeyUp, false); + window.addEventListener('keydown', this.handleKeyDown, false); } componentWillReceiveProps (nextProps) { @@ -33,15 +56,21 @@ export default class ModalRoot extends React.PureComponent { } else if (!nextProps.children) { this.setState({ revealed: false }); } - if (!nextProps.children && !!this.props.children) { - this.activeElement.focus(); - this.activeElement = null; - } } componentDidUpdate (prevProps) { if (!this.props.children && !!prevProps.children) { this.getSiblings().forEach(sibling => sibling.removeAttribute('inert')); + + // Because of the wicg-inert polyfill, the activeElement may not be + // immediately selectable, we have to wait for observers to run, as + // described in https://github.com/WICG/inert#performance-and-gotchas + Promise.resolve().then(() => { + this.activeElement.focus(); + this.activeElement = null; + }).catch((error) => { + console.error(error); + }); } if (this.props.children) { requestAnimationFrame(() => { @@ -52,6 +81,7 @@ export default class ModalRoot extends React.PureComponent { componentWillUnmount () { window.removeEventListener('keyup', this.handleKeyUp); + window.removeEventListener('keydown', this.handleKeyDown); } getSiblings = () => { diff --git a/app/javascript/mastodon/components/poll.js b/app/javascript/mastodon/components/poll.js index 690f9ae5a..3a17e80e7 100644 --- a/app/javascript/mastodon/components/poll.js +++ b/app/javascript/mastodon/components/poll.js @@ -10,9 +10,11 @@ import spring from 'react-motion/lib/spring'; import escapeTextContentForBrowser from 'escape-html'; import emojify from 'mastodon/features/emoji/emoji'; import RelativeTimestamp from './relative_timestamp'; +import Icon from 'mastodon/components/icon'; const messages = defineMessages({ closed: { id: 'poll.closed', defaultMessage: 'Closed' }, + voted: { id: 'poll.voted', defaultMessage: 'You voted for this answer', description: 'Tooltip of the "voted" checkmark in polls' }, }); const makeEmojiMap = record => record.get('emojis').reduce((obj, emoji) => { @@ -32,11 +34,40 @@ class Poll extends ImmutablePureComponent { state = { selected: {}, + expired: null, }; - handleOptionChange = e => { - const { target: { value } } = e; + static getDerivedStateFromProps (props, state) { + const { poll, intl } = props; + const expires_at = poll.get('expires_at'); + const expired = poll.get('expired') || expires_at !== null && (new Date(expires_at)).getTime() < intl.now(); + return (expired === state.expired) ? null : { expired }; + } + + componentDidMount () { + this._setupTimer(); + } + + componentDidUpdate () { + this._setupTimer(); + } + + componentWillUnmount () { + clearTimeout(this._timer); + } + + _setupTimer () { + const { poll, intl } = this.props; + clearTimeout(this._timer); + if (!this.state.expired) { + const delay = (new Date(poll.get('expires_at'))).getTime() - intl.now(); + this._timer = setTimeout(() => { + this.setState({ expired: true }); + }, delay); + } + } + _toggleOption = value => { if (this.props.poll.get('multiple')) { const tmp = { ...this.state.selected }; if (tmp[value]) { @@ -50,8 +81,20 @@ class Poll extends ImmutablePureComponent { tmp[value] = true; this.setState({ selected: tmp }); } + } + + handleOptionChange = ({ target: { value } }) => { + this._toggleOption(value); }; + handleOptionKeyPress = (e) => { + if (e.key === 'Enter' || e.key === ' ') { + this._toggleOption(e.target.getAttribute('data-index')); + e.stopPropagation(); + e.preventDefault(); + } + } + handleVote = () => { if (this.props.disabled) { return; @@ -68,12 +111,13 @@ class Poll extends ImmutablePureComponent { this.props.dispatch(fetchPoll(this.props.poll.get('id'))); }; - renderOption (option, optionIndex) { - const { poll, disabled } = this.props; - const percent = poll.get('votes_count') === 0 ? 0 : (option.get('votes_count') / poll.get('votes_count')) * 100; - const leading = poll.get('options').filterNot(other => other.get('title') === option.get('title')).every(other => option.get('votes_count') > other.get('votes_count')); - const active = !!this.state.selected[`${optionIndex}`]; - const showResults = poll.get('voted') || poll.get('expired'); + renderOption (option, optionIndex, showResults) { + const { poll, disabled, intl } = this.props; + const pollVotesCount = poll.get('voters_count') || poll.get('votes_count'); + const percent = pollVotesCount === 0 ? 0 : (option.get('votes_count') / pollVotesCount) * 100; + const leading = poll.get('options').filterNot(other => other.get('title') === option.get('title')).every(other => option.get('votes_count') >= other.get('votes_count')); + const active = !!this.state.selected[`${optionIndex}`]; + const voted = option.get('voted') || (poll.get('own_votes') && poll.get('own_votes').includes(optionIndex)); let titleEmojified = option.get('title_emojified'); if (!titleEmojified) { @@ -101,8 +145,21 @@ class Poll extends ImmutablePureComponent { disabled={disabled} /> - {!showResults && <span className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} />} - {showResults && <span className='poll__number'>{Math.round(percent)}%</span>} + {!showResults && ( + <span + className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} + tabIndex='0' + role={poll.get('multiple') ? 'checkbox' : 'radio'} + onKeyPress={this.handleOptionKeyPress} + aria-checked={active} + aria-label={option.get('title')} + data-index={optionIndex} + /> + )} + {showResults && <span className='poll__number'> + {!!voted && <Icon id='check' className='poll__vote__mark' title={intl.formatMessage(messages.voted)} />} + {Math.round(percent)}% + </span>} <span dangerouslySetInnerHTML={{ __html: titleEmojified }} /> </label> @@ -112,25 +169,34 @@ class Poll extends ImmutablePureComponent { render () { const { poll, intl } = this.props; + const { expired } = this.state; if (!poll) { return null; } - const timeRemaining = poll.get('expired') ? intl.formatMessage(messages.closed) : <RelativeTimestamp timestamp={poll.get('expires_at')} futureDate />; - const showResults = poll.get('voted') || poll.get('expired'); + const timeRemaining = expired ? intl.formatMessage(messages.closed) : <RelativeTimestamp timestamp={poll.get('expires_at')} futureDate />; + const showResults = poll.get('voted') || expired; const disabled = this.props.disabled || Object.entries(this.state.selected).every(item => !item); + let votesCount = null; + + if (poll.get('voters_count') !== null && poll.get('voters_count') !== undefined) { + votesCount = <FormattedMessage id='poll.total_people' defaultMessage='{count, plural, one {# person} other {# people}}' values={{ count: poll.get('voters_count') }} />; + } else { + votesCount = <FormattedMessage id='poll.total_votes' defaultMessage='{count, plural, one {# vote} other {# votes}}' values={{ count: poll.get('votes_count') }} />; + } + return ( <div className='poll'> <ul> - {poll.get('options').map((option, i) => this.renderOption(option, i))} + {poll.get('options').map((option, i) => this.renderOption(option, i, showResults))} </ul> <div className='poll__footer'> {!showResults && <button className='button button-secondary' disabled={disabled} onClick={this.handleVote}><FormattedMessage id='poll.vote' defaultMessage='Vote' /></button>} {showResults && !this.props.disabled && <span><button className='poll__link' onClick={this.handleRefresh}><FormattedMessage id='poll.refresh' defaultMessage='Refresh' /></button> · </span>} - <FormattedMessage id='poll.total_votes' defaultMessage='{count, plural, one {# vote} other {# votes}}' values={{ count: poll.get('votes_count') }} /> + {votesCount} {poll.get('expires_at') && <span> · {timeRemaining}</span>} </div> </div> diff --git a/app/javascript/mastodon/components/radio_button.js b/app/javascript/mastodon/components/radio_button.js new file mode 100644 index 000000000..0496fa286 --- /dev/null +++ b/app/javascript/mastodon/components/radio_button.js @@ -0,0 +1,35 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; + +export default class RadioButton extends React.PureComponent { + + static propTypes = { + value: PropTypes.string.isRequired, + checked: PropTypes.bool, + name: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, + label: PropTypes.node.isRequired, + }; + + render () { + const { name, value, checked, onChange, label } = this.props; + + return ( + <label className='radio-button'> + <input + name={name} + type='radio' + value={value} + checked={checked} + onChange={onChange} + /> + + <span className={classNames('radio-button__input', { checked })} /> + + <span>{label}</span> + </label> + ); + } + +} diff --git a/app/javascript/mastodon/components/regeneration_indicator.js b/app/javascript/mastodon/components/regeneration_indicator.js new file mode 100644 index 000000000..faf88c6b5 --- /dev/null +++ b/app/javascript/mastodon/components/regeneration_indicator.js @@ -0,0 +1,18 @@ +import React from 'react'; +import { FormattedMessage } from 'react-intl'; +import illustration from 'mastodon/../images/elephant_ui_working.svg'; + +const MissingIndicator = () => ( + <div className='regeneration-indicator'> + <div className='regeneration-indicator__figure'> + <img src={illustration} alt='' /> + </div> + + <div className='regeneration-indicator__label'> + <FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading…' /> + <FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' /> + </div> + </div> +); + +export default MissingIndicator; diff --git a/app/javascript/mastodon/components/scrollable_list.js b/app/javascript/mastodon/components/scrollable_list.js index 0376cf85a..421756803 100644 --- a/app/javascript/mastodon/components/scrollable_list.js +++ b/app/javascript/mastodon/components/scrollable_list.js @@ -3,6 +3,7 @@ import { ScrollContainer } from 'react-router-scroll-4'; import PropTypes from 'prop-types'; import IntersectionObserverArticleContainer from '../containers/intersection_observer_article_container'; import LoadMore from './load_more'; +import LoadPending from './load_pending'; import IntersectionObserverWrapper from '../features/ui/util/intersection_observer_wrapper'; import { throttle } from 'lodash'; import { List as ImmutableList } from 'immutable'; @@ -21,6 +22,7 @@ export default class ScrollableList extends PureComponent { static propTypes = { scrollKey: PropTypes.string.isRequired, onLoadMore: PropTypes.func, + onLoadPending: PropTypes.func, onScrollToTop: PropTypes.func, onScroll: PropTypes.func, trackScroll: PropTypes.bool, @@ -28,10 +30,12 @@ export default class ScrollableList extends PureComponent { isLoading: PropTypes.bool, showLoading: PropTypes.bool, hasMore: PropTypes.bool, + numPending: PropTypes.number, prepend: PropTypes.node, alwaysPrepend: PropTypes.bool, emptyMessage: PropTypes.node, children: PropTypes.node, + bindToDocument: PropTypes.bool, }; static defaultProps = { @@ -47,7 +51,9 @@ export default class ScrollableList extends PureComponent { handleScroll = throttle(() => { if (this.node) { - const { scrollTop, scrollHeight, clientHeight } = this.node; + const scrollTop = this.getScrollTop(); + const scrollHeight = this.getScrollHeight(); + const clientHeight = this.getClientHeight(); const offset = scrollHeight - scrollTop - clientHeight; if (400 > offset && this.props.onLoadMore && this.props.hasMore && !this.props.isLoading) { @@ -77,9 +83,14 @@ export default class ScrollableList extends PureComponent { scrollToTopOnMouseIdle = false; setScrollTop = newScrollTop => { - if (this.node.scrollTop !== newScrollTop) { + if (this.getScrollTop() !== newScrollTop) { this.lastScrollWasSynthetic = true; - this.node.scrollTop = newScrollTop; + + if (this.props.bindToDocument) { + document.scrollingElement.scrollTop = newScrollTop; + } else { + this.node.scrollTop = newScrollTop; + } } }; @@ -97,7 +108,7 @@ export default class ScrollableList extends PureComponent { this.clearMouseIdleTimer(); this.mouseIdleTimer = setTimeout(this.handleMouseIdle, MOUSE_IDLE_DELAY); - if (!this.mouseMovedRecently && this.node.scrollTop === 0) { + if (!this.mouseMovedRecently && this.getScrollTop() === 0) { // Only set if we just started moving and are scrolled to the top. this.scrollToTopOnMouseIdle = true; } @@ -132,15 +143,27 @@ export default class ScrollableList extends PureComponent { } getScrollPosition = () => { - if (this.node && (this.node.scrollTop > 0 || this.mouseMovedRecently)) { - return { height: this.node.scrollHeight, top: this.node.scrollTop }; + if (this.node && (this.getScrollTop() > 0 || this.mouseMovedRecently)) { + return { height: this.getScrollHeight(), top: this.getScrollTop() }; } else { return null; } } + getScrollTop = () => { + return this.props.bindToDocument ? document.scrollingElement.scrollTop : this.node.scrollTop; + } + + getScrollHeight = () => { + return this.props.bindToDocument ? document.scrollingElement.scrollHeight : this.node.scrollHeight; + } + + getClientHeight = () => { + return this.props.bindToDocument ? document.scrollingElement.clientHeight : this.node.clientHeight; + } + updateScrollBottom = (snapshot) => { - const newScrollTop = this.node.scrollHeight - snapshot; + const newScrollTop = this.getScrollHeight() - snapshot; this.setScrollTop(newScrollTop); } @@ -149,9 +172,10 @@ export default class ScrollableList extends PureComponent { const someItemInserted = React.Children.count(prevProps.children) > 0 && React.Children.count(prevProps.children) < React.Children.count(this.props.children) && this.getFirstChildKey(prevProps) !== this.getFirstChildKey(this.props); + const pendingChanged = (prevProps.numPending > 0) !== (this.props.numPending > 0); - if (someItemInserted && (this.node.scrollTop > 0 || this.mouseMovedRecently)) { - return this.node.scrollHeight - this.node.scrollTop; + if (pendingChanged || someItemInserted && (this.getScrollTop() > 0 || this.mouseMovedRecently)) { + return this.getScrollHeight() - this.getScrollTop(); } else { return null; } @@ -161,7 +185,7 @@ export default class ScrollableList extends PureComponent { // Reset the scroll position when a new child comes in in order not to // jerk the scrollbar around if you're already scrolled down the page. if (snapshot !== null) { - this.setScrollTop(this.node.scrollHeight - snapshot); + this.setScrollTop(this.getScrollHeight() - snapshot); } } @@ -175,6 +199,7 @@ export default class ScrollableList extends PureComponent { this.clearMouseIdleTimer(); this.detachScrollListener(); this.detachIntersectionObserver(); + detachFullscreenListener(this.onFullScreenChange); } @@ -194,13 +219,23 @@ export default class ScrollableList extends PureComponent { } attachScrollListener () { - this.node.addEventListener('scroll', this.handleScroll); - this.node.addEventListener('wheel', this.handleWheel); + if (this.props.bindToDocument) { + document.addEventListener('scroll', this.handleScroll); + document.addEventListener('wheel', this.handleWheel); + } else { + this.node.addEventListener('scroll', this.handleScroll); + this.node.addEventListener('wheel', this.handleWheel); + } } detachScrollListener () { - this.node.removeEventListener('scroll', this.handleScroll); - this.node.removeEventListener('wheel', this.handleWheel); + if (this.props.bindToDocument) { + document.removeEventListener('scroll', this.handleScroll); + document.removeEventListener('wheel', this.handleWheel); + } else { + this.node.removeEventListener('scroll', this.handleScroll); + this.node.removeEventListener('wheel', this.handleWheel); + } } getFirstChildKey (props) { @@ -225,12 +260,25 @@ export default class ScrollableList extends PureComponent { this.props.onLoadMore(); } + handleLoadPending = e => { + e.preventDefault(); + this.props.onLoadPending(); + // Prevent the weird scroll-jumping behavior, as we explicitly don't want to + // scroll to top, and we know the scroll height is going to change + this.scrollToTopOnMouseIdle = false; + this.lastScrollWasSynthetic = false; + this.clearMouseIdleTimer(); + this.mouseIdleTimer = setTimeout(this.handleMouseIdle, MOUSE_IDLE_DELAY); + this.mouseMovedRecently = true; + } + render () { - const { children, scrollKey, trackScroll, shouldUpdateScroll, showLoading, isLoading, hasMore, prepend, alwaysPrepend, emptyMessage, onLoadMore } = this.props; + const { children, scrollKey, trackScroll, shouldUpdateScroll, showLoading, isLoading, hasMore, numPending, prepend, alwaysPrepend, emptyMessage, onLoadMore } = this.props; const { fullscreen } = this.state; const childrenCount = React.Children.count(children); const loadMore = (hasMore && onLoadMore) ? <LoadMore visible={!isLoading} onClick={this.handleLoadMore} /> : null; + const loadPending = (numPending > 0) ? <LoadPending count={numPending} onClick={this.handleLoadPending} /> : null; let scrollableArea = null; if (showLoading) { @@ -251,6 +299,8 @@ export default class ScrollableList extends PureComponent { <div role='feed' className='item-list'> {prepend} + {loadPending} + {React.Children.map(this.props.children, (child, index) => ( <IntersectionObserverArticleContainer key={child.key} diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index aa5e870dc..e120278a0 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -12,7 +12,7 @@ import AttachmentList from './attachment_list'; import Card from '../features/status/components/card'; import { injectIntl, FormattedMessage } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { MediaGallery, Video } from '../features/ui/util/async-components'; +import { MediaGallery, Video, Audio } from '../features/ui/util/async-components'; import { HotKeys } from 'react-hotkeys'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; @@ -199,17 +199,38 @@ class Status extends ImmutablePureComponent { }; renderLoadingMediaGallery () { - return <div className='media_gallery' style={{ height: '110px' }} />; + return <div className='media-gallery' style={{ height: '110px' }} />; } renderLoadingVideoPlayer () { - return <div className='media-spoiler-video' style={{ height: '110px' }} />; + return <div className='video-player' style={{ height: '110px' }} />; + } + + renderLoadingAudioPlayer () { + return <div className='audio-player' style={{ height: '110px' }} />; } handleOpenVideo = (media, startTime) => { this.props.onOpenVideo(media, startTime); } + handleHotkeyOpenMedia = e => { + const { onOpenMedia, onOpenVideo } = this.props; + const status = this._properStatus(); + + e.preventDefault(); + + if (status.get('media_attachments').size > 0) { + if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + // TODO: toggle play/paused? + } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + onOpenVideo(status.getIn(['media_attachments', 0]), 0); + } else { + onOpenMedia(status.get('media_attachments'), 0); + } + } + } + handleHotkeyReply = e => { e.preventDefault(); this.props.onReply(this._properStatus(), this.context.router.history); @@ -278,12 +299,28 @@ class Status extends ImmutablePureComponent { return null; } + const handlers = this.props.muted ? {} : { + reply: this.handleHotkeyReply, + favourite: this.handleHotkeyFavourite, + boost: this.handleHotkeyBoost, + mention: this.handleHotkeyMention, + open: this.handleHotkeyOpen, + openProfile: this.handleHotkeyOpenProfile, + moveUp: this.handleHotkeyMoveUp, + moveDown: this.handleHotkeyMoveDown, + toggleHidden: this.handleHotkeyToggleHidden, + toggleSensitive: this.handleHotkeyToggleSensitive, + openMedia: this.handleHotkeyOpenMedia, + }; + if (hidden) { return ( - <div ref={this.handleRef}> - {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} - {status.get('content')} - </div> + <HotKeys handlers={handlers}> + <div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex='0'> + {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])} + {status.get('content')} + </div> + </HotKeys> ); } @@ -333,17 +370,33 @@ class Status extends ImmutablePureComponent { media={status.get('media_attachments')} /> ); + } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + const attachment = status.getIn(['media_attachments', 0]); + + media = ( + <Bundle fetchComponent={Audio} loading={this.renderLoadingAudioPlayer} > + {Component => ( + <Component + src={attachment.get('url')} + alt={attachment.get('description')} + duration={attachment.getIn(['meta', 'original', 'duration'], 0)} + peaks={[0]} + height={70} + /> + )} + </Bundle> + ); } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { - const video = status.getIn(['media_attachments', 0]); + const attachment = status.getIn(['media_attachments', 0]); media = ( <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} > {Component => ( <Component - preview={video.get('preview_url')} - blurhash={video.get('blurhash')} - src={video.get('url')} - alt={video.get('description')} + preview={attachment.get('preview_url')} + blurhash={attachment.get('blurhash')} + src={attachment.get('url')} + alt={attachment.get('description')} width={this.props.cachedMediaWidth} height={110} inline @@ -394,19 +447,6 @@ class Status extends ImmutablePureComponent { statusAvatar = <AvatarOverlay account={status.get('account')} friend={account} />; } - const handlers = this.props.muted ? {} : { - reply: this.handleHotkeyReply, - favourite: this.handleHotkeyFavourite, - boost: this.handleHotkeyBoost, - mention: this.handleHotkeyMention, - open: this.handleHotkeyOpen, - openProfile: this.handleHotkeyOpenProfile, - moveUp: this.handleHotkeyMoveUp, - moveDown: this.handleHotkeyMoveDown, - toggleHidden: this.handleHotkeyToggleHidden, - toggleSensitive: this.handleHotkeyToggleSensitive, - }; - return ( <HotKeys handlers={handlers}> <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}> @@ -415,9 +455,9 @@ class Status extends ImmutablePureComponent { <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted, read: unread === false })} data-id={status.get('id')}> <div className='status__expand' onClick={this.handleExpandClick} role='presentation' /> <div className='status__info'> - <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener'><RelativeTimestamp timestamp={status.get('created_at')} /></a> + <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'><RelativeTimestamp timestamp={status.get('created_at')} /></a> - <a onClick={this.handleAccountClick} target='_blank' data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name'> + <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'> <div className='status__avatar'> {statusAvatar} </div> diff --git a/app/javascript/mastodon/components/status_action_bar.js b/app/javascript/mastodon/components/status_action_bar.js index 0bfbd8879..4b3c79d0d 100644 --- a/app/javascript/mastodon/components/status_action_bar.js +++ b/app/javascript/mastodon/components/status_action_bar.js @@ -1,5 +1,6 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import IconButton from './icon_button'; import DropdownMenuContainer from '../containers/dropdown_menu_container'; @@ -23,6 +24,8 @@ const messages = defineMessages({ cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' }, cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' }, favourite: { id: 'status.favourite', defaultMessage: 'Favourite' }, + bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' }, + removeBookmark: { id: 'status.remove_bookmark', defaultMessage: 'Remove bookmark' }, open: { id: 'status.open', defaultMessage: 'Expand this status' }, report: { id: 'status.report', defaultMessage: 'Report @{name}' }, muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' }, @@ -33,6 +36,10 @@ const messages = defineMessages({ admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' }, admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' }, copy: { id: 'status.copy', defaultMessage: 'Copy link to status' }, + blockDomain: { id: 'account.block_domain', defaultMessage: 'Hide everything from {domain}' }, + unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' }, + unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' }, + unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, }); const obfuscatedCount = count => { @@ -45,7 +52,12 @@ const obfuscatedCount = count => { } }; -export default @injectIntl +const mapStateToProps = (state, { status }) => ({ + relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]), +}); + +export default @connect(mapStateToProps) +@injectIntl class StatusActionBar extends ImmutablePureComponent { static contextTypes = { @@ -54,6 +66,7 @@ class StatusActionBar extends ImmutablePureComponent { static propTypes = { status: ImmutablePropTypes.map.isRequired, + relationship: ImmutablePropTypes.map, onReply: PropTypes.func, onFavourite: PropTypes.func, onReblog: PropTypes.func, @@ -61,11 +74,16 @@ class StatusActionBar extends ImmutablePureComponent { onDirect: PropTypes.func, onMention: PropTypes.func, onMute: PropTypes.func, + onUnmute: PropTypes.func, onBlock: PropTypes.func, + onUnblock: PropTypes.func, + onBlockDomain: PropTypes.func, + onUnblockDomain: PropTypes.func, onReport: PropTypes.func, onEmbed: PropTypes.func, onMuteConversation: PropTypes.func, onPin: PropTypes.func, + onBookmark: PropTypes.func, withDismiss: PropTypes.bool, intl: PropTypes.object.isRequired, }; @@ -74,6 +92,7 @@ class StatusActionBar extends ImmutablePureComponent { // evaluate to false. See react-immutable-pure-component for usage. updateOnProps = [ 'status', + 'relationship', 'withDismiss', ] @@ -114,6 +133,10 @@ class StatusActionBar extends ImmutablePureComponent { window.open(`/interact/${this.props.status.get('id')}?type=${type}`, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes'); } + handleBookmarkClick = () => { + this.props.onBookmark(this.props.status); + } + handleDeleteClick = () => { this.props.onDelete(this.props.status, this.context.router.history); } @@ -135,11 +158,39 @@ class StatusActionBar extends ImmutablePureComponent { } handleMuteClick = () => { - this.props.onMute(this.props.status.get('account')); + const { status, relationship, onMute, onUnmute } = this.props; + const account = status.get('account'); + + if (relationship && relationship.get('muting')) { + onUnmute(account); + } else { + onMute(account); + } } handleBlockClick = () => { - this.props.onBlock(this.props.status); + const { status, relationship, onBlock, onUnblock } = this.props; + const account = status.get('account'); + + if (relationship && relationship.get('blocking')) { + onUnblock(account); + } else { + onBlock(status); + } + } + + handleBlockDomain = () => { + const { status, onBlockDomain } = this.props; + const account = status.get('account'); + + onBlockDomain(account.get('acct').split('@')[1]); + } + + handleUnblockDomain = () => { + const { status, onUnblockDomain } = this.props; + const account = status.get('account'); + + onUnblockDomain(account.get('acct').split('@')[1]); } handleOpen = () => { @@ -178,11 +229,12 @@ class StatusActionBar extends ImmutablePureComponent { } render () { - const { status, intl, withDismiss } = this.props; + const { status, relationship, intl, withDismiss } = this.props; const mutingConversation = status.get('muted'); const anonymousAccess = !me; const publicStatus = ['public', 'unlisted'].includes(status.get('visibility')); + const account = status.get('account'); let menu = []; let reblogIcon = 'retweet'; @@ -196,6 +248,7 @@ class StatusActionBar extends ImmutablePureComponent { menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed }); } + menu.push({ text: intl.formatMessage(status.get('bookmarked') ? messages.removeBookmark : messages.bookmark), action: this.handleBookmarkClick }); menu.push(null); if (status.getIn(['account', 'id']) === me || withDismiss) { @@ -215,16 +268,39 @@ class StatusActionBar extends ImmutablePureComponent { menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick }); menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick }); } else { - menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick }); - menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick }); + menu.push({ text: intl.formatMessage(messages.mention, { name: account.get('username') }), action: this.handleMentionClick }); + menu.push({ text: intl.formatMessage(messages.direct, { name: account.get('username') }), action: this.handleDirectClick }); menu.push(null); - menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick }); - menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick }); - menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport }); + + if (relationship && relationship.get('muting')) { + menu.push({ text: intl.formatMessage(messages.unmute, { name: account.get('username') }), action: this.handleMuteClick }); + } else { + menu.push({ text: intl.formatMessage(messages.mute, { name: account.get('username') }), action: this.handleMuteClick }); + } + + if (relationship && relationship.get('blocking')) { + menu.push({ text: intl.formatMessage(messages.unblock, { name: account.get('username') }), action: this.handleBlockClick }); + } else { + menu.push({ text: intl.formatMessage(messages.block, { name: account.get('username') }), action: this.handleBlockClick }); + } + + menu.push({ text: intl.formatMessage(messages.report, { name: account.get('username') }), action: this.handleReport }); + + if (account.get('acct') !== account.get('username')) { + const domain = account.get('acct').split('@')[1]; + + menu.push(null); + + if (relationship && relationship.get('domain_blocking')) { + menu.push({ text: intl.formatMessage(messages.unblockDomain, { domain }), action: this.handleUnblockDomain }); + } else { + menu.push({ text: intl.formatMessage(messages.blockDomain, { domain }), action: this.handleBlockDomain }); + } + } if (isStaff) { menu.push(null); - menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` }); + menu.push({ text: intl.formatMessage(messages.admin_account, { name: account.get('username') }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` }); menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` }); } } diff --git a/app/javascript/mastodon/components/status_content.js b/app/javascript/mastodon/components/status_content.js index 06f5b4aad..d13091325 100644 --- a/app/javascript/mastodon/components/status_content.js +++ b/app/javascript/mastodon/components/status_content.js @@ -7,6 +7,7 @@ import Permalink from './permalink'; import classnames from 'classnames'; import PollContainer from 'mastodon/containers/poll_container'; import Icon from 'mastodon/components/icon'; +import { autoPlayGif } from 'mastodon/initial_state'; const MAX_HEIGHT = 642; // 20px * 32 (+ 2px padding at the top) @@ -54,10 +55,11 @@ export default class StatusContent extends React.PureComponent { link.addEventListener('click', this.onHashtagClick.bind(this, link.text), false); } else { link.setAttribute('title', link.href); + link.classList.add('unhandled-link'); } link.setAttribute('target', '_blank'); - link.setAttribute('rel', 'noopener'); + link.setAttribute('rel', 'noopener noreferrer'); } if ( @@ -71,12 +73,35 @@ export default class StatusContent extends React.PureComponent { } } + _updateStatusEmojis () { + const node = this.node; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); + } + } + componentDidMount () { this._updateStatusLinks(); + this._updateStatusEmojis(); } componentDidUpdate () { this._updateStatusLinks(); + this._updateStatusEmojis(); } onMentionClick = (mention, e) => { @@ -87,7 +112,7 @@ export default class StatusContent extends React.PureComponent { } onHashtagClick = (hashtag, e) => { - hashtag = hashtag.replace(/^#/, '').toLowerCase(); + hashtag = hashtag.replace(/^#/, ''); if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) { e.preventDefault(); @@ -95,6 +120,14 @@ export default class StatusContent extends React.PureComponent { } } + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } + + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } + handleMouseDown = (e) => { this.startXY = [e.clientX, e.clientY]; } @@ -133,11 +166,6 @@ export default class StatusContent extends React.PureComponent { } } - handleCollapsedClick = (e) => { - e.preventDefault(); - this.setState({ collapsed: !this.state.collapsed }); - } - setRef = (c) => { this.node = c; } @@ -188,59 +216,40 @@ export default class StatusContent extends React.PureComponent { return ( <div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}> <p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}> - <span dangerouslySetInnerHTML={spoilerContent} lang={status.get('language')} /> + <span dangerouslySetInnerHTML={spoilerContent} /> {' '} <button tabIndex='0' className={`status__content__spoiler-link ${hidden ? 'status__content__spoiler-link--show-more' : 'status__content__spoiler-link--show-less'}`} onClick={this.handleSpoilerClick}>{toggleText}</button> </p> {mentionsPlaceholder} - <div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} lang={status.get('language')} /> + <div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} /> {!hidden && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />} </div> ); } else if (this.props.onClick) { const output = [ - <div - ref={this.setRef} - tabIndex='0' - key='content' - className={classNames} - style={directionStyle} - dangerouslySetInnerHTML={content} - lang={status.get('language')} - onMouseDown={this.handleMouseDown} - onMouseUp={this.handleMouseUp} - />, + <div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content'> + <div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} /> + + {!!status.get('poll') && <PollContainer pollId={status.get('poll')} />} + </div>, ]; if (this.state.collapsed) { output.push(readMoreButton); } - if (status.get('poll')) { - output.push(<PollContainer pollId={status.get('poll')} />); - } - return output; } else { - const output = [ - <div - tabIndex='0' - ref={this.setRef} - className='status__content' - style={directionStyle} - dangerouslySetInnerHTML={content} - lang={status.get('language')} - />, - ]; - - if (status.get('poll')) { - output.push(<PollContainer pollId={status.get('poll')} />); - } + return ( + <div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle}> + <div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} /> - return output; + {!!status.get('poll') && <PollContainer pollId={status.get('poll')} />} + </div> + ); } } diff --git a/app/javascript/mastodon/components/status_list.js b/app/javascript/mastodon/components/status_list.js index 745e6422d..e1b370c91 100644 --- a/app/javascript/mastodon/components/status_list.js +++ b/app/javascript/mastodon/components/status_list.js @@ -1,12 +1,12 @@ import { debounce } from 'lodash'; import React from 'react'; -import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import StatusContainer from '../containers/status_container'; import ImmutablePureComponent from 'react-immutable-pure-component'; import LoadGap from './load_gap'; import ScrollableList from './scrollable_list'; +import RegenerationIndicator from 'mastodon/components/regeneration_indicator'; export default class StatusList extends ImmutablePureComponent { @@ -81,18 +81,7 @@ export default class StatusList extends ImmutablePureComponent { const { isLoading, isPartial } = other; if (isPartial) { - return ( - <div className='regeneration-indicator'> - <div> - <div className='regeneration-indicator__figure' /> - - <div className='regeneration-indicator__label'> - <FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading…' /> - <FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' /> - </div> - </div> - </div> - ); + return <RegenerationIndicator />; } let scrollableContent = (isLoading || statusIds.size > 0) ? ( diff --git a/app/javascript/mastodon/containers/dropdown_menu_container.js b/app/javascript/mastodon/containers/dropdown_menu_container.js index 73c8a1e53..ab1823194 100644 --- a/app/javascript/mastodon/containers/dropdown_menu_container.js +++ b/app/javascript/mastodon/containers/dropdown_menu_container.js @@ -1,4 +1,5 @@ import { openDropdownMenu, closeDropdownMenu } from '../actions/dropdown_menu'; +import { fetchRelationships } from 'mastodon/actions/accounts'; import { openModal, closeModal } from '../actions/modal'; import { connect } from 'react-redux'; import DropdownMenu from '../components/dropdown_menu'; @@ -13,14 +14,19 @@ const mapStateToProps = state => ({ const mapDispatchToProps = (dispatch, { status, items }) => ({ onOpen(id, onItemClick, dropdownPlacement, keyboard) { + if (status) { + dispatch(fetchRelationships([status.getIn(['account', 'id'])])); + } + dispatch(isUserTouching() ? openModal('ACTIONS', { status, actions: items, onClick: onItemClick, }) : openDropdownMenu(id, dropdownPlacement, keyboard)); }, + onClose(id) { - dispatch(closeModal()); + dispatch(closeModal('ACTIONS')); dispatch(closeDropdownMenu(id)); }, }); diff --git a/app/javascript/mastodon/containers/mastodon.js b/app/javascript/mastodon/containers/mastodon.js index 542b68282..3ac58cf7c 100644 --- a/app/javascript/mastodon/containers/mastodon.js +++ b/app/javascript/mastodon/containers/mastodon.js @@ -12,6 +12,8 @@ import { hydrateStore } from '../actions/store'; import { connectUserStream } from '../actions/streaming'; import { IntlProvider, addLocaleData } from 'react-intl'; import { getLocale } from '../locales'; +import { previewState as previewMediaState } from 'mastodon/features/ui/components/media_modal'; +import { previewState as previewVideoState } from 'mastodon/features/ui/components/video_modal'; import initialState from '../initial_state'; import ErrorBoundary from '../components/error_boundary'; @@ -35,6 +37,10 @@ class MastodonMount extends React.PureComponent { showIntroduction: PropTypes.bool, }; + shouldUpdateScroll (_, { location }) { + return location.state !== previewMediaState && location.state !== previewVideoState; + } + render () { const { showIntroduction } = this.props; @@ -44,7 +50,7 @@ class MastodonMount extends React.PureComponent { return ( <BrowserRouter basename='/web'> - <ScrollContext> + <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}> <Route path='/' component={UI} /> </ScrollContext> </BrowserRouter> diff --git a/app/javascript/mastodon/containers/media_container.js b/app/javascript/mastodon/containers/media_container.js index 51d4f0fed..ba55ecbc7 100644 --- a/app/javascript/mastodon/containers/media_container.js +++ b/app/javascript/mastodon/containers/media_container.js @@ -2,19 +2,22 @@ import React, { PureComponent, Fragment } from 'react'; import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; import { IntlProvider, addLocaleData } from 'react-intl'; -import { getLocale } from '../locales'; -import MediaGallery from '../components/media_gallery'; -import Video from '../features/video'; -import Card from '../features/status/components/card'; -import Poll from 'mastodon/components/poll'; -import ModalRoot from '../components/modal_root'; -import MediaModal from '../features/ui/components/media_modal'; import { List as ImmutableList, fromJS } from 'immutable'; +import { getLocale } from 'mastodon/locales'; +import { getScrollbarWidth } from 'mastodon/utils/scrollbar'; +import MediaGallery from 'mastodon/components/media_gallery'; +import Poll from 'mastodon/components/poll'; +import Hashtag from 'mastodon/components/hashtag'; +import ModalRoot from 'mastodon/components/modal_root'; +import MediaModal from 'mastodon/features/ui/components/media_modal'; +import Video from 'mastodon/features/video'; +import Card from 'mastodon/features/status/components/card'; +import Audio from 'mastodon/features/audio'; const { localeData, messages } = getLocale(); addLocaleData(localeData); -const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll }; +const MEDIA_COMPONENTS = { MediaGallery, Video, Card, Poll, Hashtag, Audio }; export default class MediaContainer extends PureComponent { @@ -31,6 +34,8 @@ export default class MediaContainer extends PureComponent { handleOpenMedia = (media, index) => { document.body.classList.add('with-modals--active'); + document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; + this.setState({ media, index }); } @@ -38,11 +43,15 @@ export default class MediaContainer extends PureComponent { const media = ImmutableList([video]); document.body.classList.add('with-modals--active'); + document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; + this.setState({ media, time }); } handleCloseMedia = () => { document.body.classList.remove('with-modals--active'); + document.documentElement.style.marginRight = 0; + this.setState({ media: null, index: null, time: null }); } @@ -55,12 +64,13 @@ export default class MediaContainer extends PureComponent { {[].map.call(components, (component, i) => { const componentName = component.getAttribute('data-component'); const Component = MEDIA_COMPONENTS[componentName]; - const { media, card, poll, ...props } = JSON.parse(component.getAttribute('data-props')); + const { media, card, poll, hashtag, ...props } = JSON.parse(component.getAttribute('data-props')); Object.assign(props, { - ...(media ? { media: fromJS(media) } : {}), - ...(card ? { card: fromJS(card) } : {}), - ...(poll ? { poll: fromJS(poll) } : {}), + ...(media ? { media: fromJS(media) } : {}), + ...(card ? { card: fromJS(card) } : {}), + ...(poll ? { poll: fromJS(poll) } : {}), + ...(hashtag ? { hashtag: fromJS(hashtag) } : {}), ...(componentName === 'Video' ? { onOpenVideo: this.handleOpenVideo, @@ -74,6 +84,7 @@ export default class MediaContainer extends PureComponent { component, ); })} + <ModalRoot onClose={this.handleCloseMedia}> {this.state.media && ( <MediaModal diff --git a/app/javascript/mastodon/containers/status_container.js b/app/javascript/mastodon/containers/status_container.js index 86324b846..35c16a20c 100644 --- a/app/javascript/mastodon/containers/status_container.js +++ b/app/javascript/mastodon/containers/status_container.js @@ -10,12 +10,13 @@ import { import { reblog, favourite, + bookmark, unreblog, unfavourite, + unbookmark, pin, unpin, } from '../actions/interactions'; -import { blockAccount } from '../actions/accounts'; import { muteStatus, unmuteStatus, @@ -23,7 +24,16 @@ import { hideStatus, revealStatus, } from '../actions/statuses'; +import { + unmuteAccount, + unblockAccount, +} from '../actions/accounts'; +import { + blockDomain, + unblockDomain, +} from '../actions/domain_blocks'; import { initMuteModal } from '../actions/mutes'; +import { initBlockModal } from '../actions/blocks'; import { initReport } from '../actions/reports'; import { openModal } from '../actions/modal'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; @@ -35,10 +45,9 @@ const messages = defineMessages({ deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' }, redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' }, redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' }, - blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, - blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, + blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Hide entire domain' }, }); const makeMapStateToProps = () => { @@ -56,6 +65,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ onReply (status, router) { dispatch((_, getState) => { let state = getState(); + if (state.getIn(['compose', 'text']).trim().length !== 0) { dispatch(openModal('CONFIRM', { message: intl.formatMessage(messages.replyMessage), @@ -77,7 +87,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ }, onReblog (status, e) { - if (e.shiftKey || !boostModal) { + if ((e && e.shiftKey) || !boostModal) { this.onModalReblog(status); } else { dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog })); @@ -92,6 +102,14 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ } }, + onBookmark (status) { + if (status.get('bookmarked')) { + dispatch(unbookmark(status)); + } else { + dispatch(bookmark(status)); + } + }, + onPin (status) { if (status.get('pinned')) { dispatch(unpin(status)); @@ -137,16 +155,11 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ onBlock (status) { const account = status.get('account'); - dispatch(openModal('CONFIRM', { - message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, - confirm: intl.formatMessage(messages.blockConfirm), - onConfirm: () => dispatch(blockAccount(account.get('id'))), - secondary: intl.formatMessage(messages.blockAndReport), - onSecondary: () => { - dispatch(blockAccount(account.get('id'))); - dispatch(initReport(account, status)); - }, - })); + dispatch(initBlockModal(account)); + }, + + onUnblock (account) { + dispatch(unblockAccount(account.get('id'))); }, onReport (status) { @@ -157,6 +170,10 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(initMuteModal(account)); }, + onUnmute (account) { + dispatch(unmuteAccount(account.get('id'))); + }, + onMuteConversation (status) { if (status.get('muted')) { dispatch(unmuteStatus(status.get('id'))); @@ -173,6 +190,18 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ } }, + onBlockDomain (domain) { + dispatch(openModal('CONFIRM', { + message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.' values={{ domain: <strong>{domain}</strong> }} />, + confirm: intl.formatMessage(messages.blockDomainConfirm), + onConfirm: () => dispatch(blockDomain(domain)), + })); + }, + + onUnblockDomain (domain) { + dispatch(unblockDomain(domain)); + }, + }); export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Status)); diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index e5b60e33e..8bd7f2db5 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -15,6 +15,7 @@ import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; const messages = defineMessages({ unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, follow: { id: 'account.follow', defaultMessage: 'Follow' }, + cancel_follow_request: { id: 'account.cancel_follow_request', defaultMessage: 'Cancel follow request' }, requested: { id: 'account.requested', defaultMessage: 'Awaiting approval. Click to cancel follow request' }, unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' }, @@ -79,6 +80,47 @@ class Header extends ImmutablePureComponent { return !location.pathname.match(/\/(followers|following)\/?$/); } + _updateEmojis () { + const node = this.node; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); + } + } + + componentDidMount () { + this._updateEmojis(); + } + + componentDidUpdate () { + this._updateEmojis(); + } + + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } + + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } + + setRef = (c) => { + this.node = c; + } + render () { const { account, intl, domain, identity_proofs } = this.props; @@ -107,7 +149,7 @@ class Header extends ImmutablePureComponent { if (!account.get('relationship')) { // Wait until the relationship is loaded actionBtn = ''; } else if (account.getIn(['relationship', 'requested'])) { - actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />; + actionBtn = <Button className='logo-button' text={intl.formatMessage(messages.cancel_follow_request)} title={intl.formatMessage(messages.requested)} onClick={this.props.onFollow} />; } else if (!account.getIn(['relationship', 'blocking'])) { actionBtn = <Button disabled={account.getIn(['relationship', 'blocked_by'])} className={classNames('logo-button', { 'button--destructive': account.getIn(['relationship', 'following']) })} text={intl.formatMessage(account.getIn(['relationship', 'following']) ? messages.unfollow : messages.follow)} onClick={this.props.onFollow} />; } else if (account.getIn(['relationship', 'blocking'])) { @@ -196,11 +238,20 @@ class Header extends ImmutablePureComponent { const content = { __html: account.get('note_emojified') }; const displayNameHtml = { __html: account.get('display_name_html') }; const fields = account.get('fields'); - const badge = account.get('bot') ? (<div className='account-role bot'><FormattedMessage id='account.badges.bot' defaultMessage='Bot' /></div>) : null; const acct = account.get('acct').indexOf('@') === -1 && domain ? `${account.get('acct')}@${domain}` : account.get('acct'); + let badge; + + if (account.get('bot')) { + badge = (<div className='account-role bot'><FormattedMessage id='account.badges.bot' defaultMessage='Bot' /></div>); + } else if (account.get('group')) { + badge = (<div className='account-role group'><FormattedMessage id='account.badges.group' defaultMessage='Group' /></div>); + } else { + badge = null; + } + return ( - <div className={classNames('account__header', { inactive: !!account.get('moved') })}> + <div className={classNames('account__header', { inactive: !!account.get('moved') })} ref={this.setRef}> <div className='account__header__image'> <div className='account__header__info'> {info} @@ -211,7 +262,7 @@ class Header extends ImmutablePureComponent { <div className='account__header__bar'> <div className='account__header__tabs'> - <a className='avatar' href={account.get('url')} rel='noopener' target='_blank'> + <a className='avatar' href={account.get('url')} rel='noopener noreferrer' target='_blank'> <Avatar account={account} size={90} /> </a> @@ -240,10 +291,10 @@ class Header extends ImmutablePureComponent { <dt dangerouslySetInnerHTML={{ __html: proof.get('provider') }} /> <dd className='verified'> - <a href={proof.get('proof_url')} target='_blank' rel='noopener'><span title={intl.formatMessage(messages.linkVerifiedOn, { date: intl.formatDate(proof.get('updated_at'), dateFormatOptions) })}> + <a href={proof.get('proof_url')} target='_blank' rel='noopener noreferrer'><span title={intl.formatMessage(messages.linkVerifiedOn, { date: intl.formatDate(proof.get('updated_at'), dateFormatOptions) })}> <Icon id='check' className='verified__mark' /> </span></a> - <a href={proof.get('profile_url')} target='_blank' rel='noopener'><span dangerouslySetInnerHTML={{ __html: ' '+proof.get('provider_username') }} /></a> + <a href={proof.get('profile_url')} target='_blank' rel='noopener noreferrer'><span dangerouslySetInnerHTML={{ __html: ' '+proof.get('provider_username') }} /></a> </dd> </dl> ))} diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.js b/app/javascript/mastodon/features/account_gallery/components/media_item.js index 2609b96ff..617a45d16 100644 --- a/app/javascript/mastodon/features/account_gallery/components/media_item.js +++ b/app/javascript/mastodon/features/account_gallery/components/media_item.js @@ -1,12 +1,12 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; +import { decode } from 'blurhash'; +import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; import { autoPlayGif, displayMedia } from 'mastodon/initial_state'; -import classNames from 'classnames'; -import { decode } from 'blurhash'; import { isIOS } from 'mastodon/is_mobile'; +import PropTypes from 'prop-types'; +import React from 'react'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import ImmutablePureComponent from 'react-immutable-pure-component'; export default class MediaItem extends ImmutablePureComponent { @@ -96,6 +96,12 @@ export default class MediaItem extends ImmutablePureComponent { if (attachment.get('type') === 'unknown') { // Skip + } else if (attachment.get('type') === 'audio') { + thumbnail = ( + <span className='account-gallery__item__icons'> + <Icon id='music' /> + </span> + ); } else if (attachment.get('type') === 'image') { const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0; const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0; @@ -113,6 +119,7 @@ export default class MediaItem extends ImmutablePureComponent { ); } else if (['gifv', 'video'].indexOf(attachment.get('type')) !== -1) { const autoPlay = !isIOS() && autoPlayGif; + const label = attachment.get('type') === 'video' ? <Icon id='play' /> : 'GIF'; thumbnail = ( <div className={classNames('media-gallery__gifv', { autoplay: autoPlay })}> @@ -129,7 +136,7 @@ export default class MediaItem extends ImmutablePureComponent { muted /> - <span className='media-gallery__gifv__label'>GIF</span> + <span className='media-gallery__gifv__label'>{label}</span> </div> ); } @@ -144,7 +151,7 @@ export default class MediaItem extends ImmutablePureComponent { return ( <div className='account-gallery__item' style={{ width, height }}> - <a className='media-gallery__item-thumbnail' href={status.get('url')} target='_blank' onClick={this.handleClick} title={title}> + <a className='media-gallery__item-thumbnail' href={status.get('url')} onClick={this.handleClick} title={title} target='_blank' rel='noopener noreferrer'> <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': visible && loaded })} /> {visible && thumbnail} {!visible && icon} diff --git a/app/javascript/mastodon/features/account_gallery/index.js b/app/javascript/mastodon/features/account_gallery/index.js index 5d6a53e18..de481075c 100644 --- a/app/javascript/mastodon/features/account_gallery/index.js +++ b/app/javascript/mastodon/features/account_gallery/index.js @@ -56,6 +56,7 @@ class AccountGallery extends ImmutablePureComponent { isLoading: PropTypes.bool, hasMore: PropTypes.bool, isAccount: PropTypes.bool, + multiColumn: PropTypes.bool, }; state = { @@ -101,6 +102,8 @@ class AccountGallery extends ImmutablePureComponent { handleOpenMedia = attachment => { if (attachment.get('type') === 'video') { this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status') })); + } else if (attachment.get('type') === 'audio') { + this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status') })); } else { const media = attachment.getIn(['status', 'media_attachments']); const index = media.findIndex(x => x.get('id') === attachment.get('id')); @@ -116,7 +119,7 @@ class AccountGallery extends ImmutablePureComponent { } render () { - const { attachments, shouldUpdateScroll, isLoading, hasMore, isAccount } = this.props; + const { attachments, shouldUpdateScroll, isLoading, hasMore, isAccount, multiColumn } = this.props; const { width } = this.state; if (!isAccount) { @@ -143,7 +146,7 @@ class AccountGallery extends ImmutablePureComponent { return ( <Column> - <ColumnBackButton /> + <ColumnBackButton multiColumn={multiColumn} /> <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={shouldUpdateScroll}> <div className='scrollable scrollable--flex' onScroll={this.handleScroll}> diff --git a/app/javascript/mastodon/features/account_timeline/containers/header_container.js b/app/javascript/mastodon/features/account_timeline/containers/header_container.js index 4d4ae6e82..8728b4806 100644 --- a/app/javascript/mastodon/features/account_timeline/containers/header_container.js +++ b/app/javascript/mastodon/features/account_timeline/containers/header_container.js @@ -5,7 +5,6 @@ import Header from '../components/header'; import { followAccount, unfollowAccount, - blockAccount, unblockAccount, unmuteAccount, pinAccount, @@ -16,6 +15,7 @@ import { directCompose, } from '../../../actions/compose'; import { initMuteModal } from '../../../actions/mutes'; +import { initBlockModal } from '../../../actions/blocks'; import { initReport } from '../../../actions/reports'; import { openModal } from '../../../actions/modal'; import { blockDomain, unblockDomain } from '../../../actions/domain_blocks'; @@ -25,9 +25,7 @@ import { List as ImmutableList } from 'immutable'; const messages = defineMessages({ unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' }, - blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Hide entire domain' }, - blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, }); const makeMapStateToProps = () => { @@ -64,16 +62,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ if (account.getIn(['relationship', 'blocking'])) { dispatch(unblockAccount(account.get('id'))); } else { - dispatch(openModal('CONFIRM', { - message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, - confirm: intl.formatMessage(messages.blockConfirm), - onConfirm: () => dispatch(blockAccount(account.get('id'))), - secondary: intl.formatMessage(messages.blockAndReport), - onSecondary: () => { - dispatch(blockAccount(account.get('id'))); - dispatch(initReport(account)); - }, - })); + dispatch(initBlockModal(account)); } }, diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js index 27581bfdc..8d0cbe5a1 100644 --- a/app/javascript/mastodon/features/account_timeline/index.js +++ b/app/javascript/mastodon/features/account_timeline/index.js @@ -44,6 +44,7 @@ class AccountTimeline extends ImmutablePureComponent { withReplies: PropTypes.bool, blockedBy: PropTypes.bool, isAccount: PropTypes.bool, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -77,11 +78,12 @@ class AccountTimeline extends ImmutablePureComponent { } render () { - const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, isAccount } = this.props; + const { shouldUpdateScroll, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, isAccount, multiColumn } = this.props; if (!isAccount) { return ( <Column> + <ColumnBackButton multiColumn={multiColumn} /> <MissingIndicator /> </Column> ); @@ -99,7 +101,7 @@ class AccountTimeline extends ImmutablePureComponent { return ( <Column> - <ColumnBackButton /> + <ColumnBackButton multiColumn={multiColumn} /> <StatusList prepend={<HeaderContainer accountId={this.props.params.accountId} />} @@ -112,6 +114,7 @@ class AccountTimeline extends ImmutablePureComponent { onLoadMore={this.handleLoadMore} shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/mastodon/features/audio/index.js b/app/javascript/mastodon/features/audio/index.js new file mode 100644 index 000000000..1b4cdbb4f --- /dev/null +++ b/app/javascript/mastodon/features/audio/index.js @@ -0,0 +1,236 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import WaveSurfer from 'wavesurfer.js'; +import { defineMessages, injectIntl } from 'react-intl'; +import { formatTime } from 'mastodon/features/video'; +import Icon from 'mastodon/components/icon'; +import classNames from 'classnames'; +import { throttle } from 'lodash'; + +const messages = defineMessages({ + play: { id: 'video.play', defaultMessage: 'Play' }, + pause: { id: 'video.pause', defaultMessage: 'Pause' }, + mute: { id: 'video.mute', defaultMessage: 'Mute sound' }, + unmute: { id: 'video.unmute', defaultMessage: 'Unmute sound' }, + download: { id: 'video.download', defaultMessage: 'Download file' }, +}); + +export default @injectIntl +class Audio extends React.PureComponent { + + static propTypes = { + src: PropTypes.string.isRequired, + alt: PropTypes.string, + duration: PropTypes.number, + peaks: PropTypes.arrayOf(PropTypes.number), + height: PropTypes.number, + preload: PropTypes.bool, + editable: PropTypes.bool, + intl: PropTypes.object.isRequired, + }; + + state = { + currentTime: 0, + duration: null, + paused: true, + muted: false, + volume: 0.5, + }; + + // hard coded in components.scss + // any way to get ::before values programatically? + + volWidth = 50; + + volOffset = 70; + + volHandleOffset = v => { + const offset = v * this.volWidth + this.volOffset; + return (offset > 110) ? 110 : offset; + } + + setVolumeRef = c => { + this.volume = c; + } + + setWaveformRef = c => { + this.waveform = c; + } + + componentDidMount () { + if (this.waveform) { + this._updateWaveform(); + } + } + + componentDidUpdate (prevProps) { + if (this.waveform && prevProps.src !== this.props.src) { + this._updateWaveform(); + } + } + + componentWillUnmount () { + if (this.wavesurfer) { + this.wavesurfer.destroy(); + this.wavesurfer = null; + } + } + + _updateWaveform () { + const { src, height, duration, peaks, preload } = this.props; + + const progressColor = window.getComputedStyle(document.querySelector('.audio-player__progress-placeholder')).getPropertyValue('background-color'); + const waveColor = window.getComputedStyle(document.querySelector('.audio-player__wave-placeholder')).getPropertyValue('background-color'); + + if (this.wavesurfer) { + this.wavesurfer.destroy(); + this.loaded = false; + } + + const wavesurfer = WaveSurfer.create({ + container: this.waveform, + height, + barWidth: 3, + cursorWidth: 0, + progressColor, + waveColor, + backend: 'MediaElement', + interact: preload, + }); + + wavesurfer.setVolume(this.state.volume); + + if (preload) { + wavesurfer.load(src); + this.loaded = true; + } else { + wavesurfer.load(src, peaks, 'none', duration); + this.loaded = false; + } + + wavesurfer.on('ready', () => this.setState({ duration: Math.floor(wavesurfer.getDuration()) })); + wavesurfer.on('audioprocess', () => this.setState({ currentTime: Math.floor(wavesurfer.getCurrentTime()) })); + wavesurfer.on('pause', () => this.setState({ paused: true })); + wavesurfer.on('play', () => this.setState({ paused: false })); + wavesurfer.on('volume', volume => this.setState({ volume })); + wavesurfer.on('mute', muted => this.setState({ muted })); + + this.wavesurfer = wavesurfer; + } + + togglePlay = () => { + if (this.state.paused) { + if (!this.props.preload && !this.loaded) { + this.wavesurfer.createBackend(); + this.wavesurfer.createPeakCache(); + this.wavesurfer.load(this.props.src); + this.wavesurfer.toggleInteraction(); + this.loaded = true; + } + + this.wavesurfer.play(); + this.setState({ paused: false }); + } else { + this.wavesurfer.pause(); + this.setState({ paused: true }); + } + } + + toggleMute = () => { + this.wavesurfer.setMute(!this.state.muted); + } + + handleVolumeMouseDown = e => { + document.addEventListener('mousemove', this.handleMouseVolSlide, true); + document.addEventListener('mouseup', this.handleVolumeMouseUp, true); + document.addEventListener('touchmove', this.handleMouseVolSlide, true); + document.addEventListener('touchend', this.handleVolumeMouseUp, true); + + this.handleMouseVolSlide(e); + + e.preventDefault(); + e.stopPropagation(); + } + + handleVolumeMouseUp = () => { + document.removeEventListener('mousemove', this.handleMouseVolSlide, true); + document.removeEventListener('mouseup', this.handleVolumeMouseUp, true); + document.removeEventListener('touchmove', this.handleMouseVolSlide, true); + document.removeEventListener('touchend', this.handleVolumeMouseUp, true); + } + + handleMouseVolSlide = throttle(e => { + const rect = this.volume.getBoundingClientRect(); + const x = (e.clientX - rect.left) / this.volWidth; // x position within the element. + + if(!isNaN(x)) { + let slideamt = x; + + if (x > 1) { + slideamt = 1; + } else if(x < 0) { + slideamt = 0; + } + + this.wavesurfer.setVolume(slideamt); + } + }, 60); + + render () { + const { height, intl, alt, editable } = this.props; + const { paused, muted, volume, currentTime } = this.state; + + const volumeWidth = muted ? 0 : volume * this.volWidth; + const volumeHandleLoc = muted ? this.volHandleOffset(0) : this.volHandleOffset(volume); + + return ( + <div className={classNames('audio-player', { editable })}> + <div className='audio-player__progress-placeholder' style={{ display: 'none' }} /> + <div className='audio-player__wave-placeholder' style={{ display: 'none' }} /> + + <div + className='audio-player__waveform' + aria-label={alt} + title={alt} + style={{ height }} + ref={this.setWaveformRef} + /> + + <div className='video-player__controls active'> + <div className='video-player__buttons-bar'> + <div className='video-player__buttons left'> + <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button> + <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button> + + <div className='video-player__volume' onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> + + <div className='video-player__volume__current' style={{ width: `${volumeWidth}px` }} /> + + <span + className={classNames('video-player__volume__handle')} + tabIndex='0' + style={{ left: `${volumeHandleLoc}px` }} + /> + </div> + + <span> + <span className='video-player__time-current'>{formatTime(currentTime)}</span> + <span className='video-player__time-sep'>/</span> + <span className='video-player__time-total'>{formatTime(this.state.duration || Math.floor(this.props.duration))}</span> + </span> + </div> + + <div className='video-player__buttons right'> + <button type='button' aria-label={intl.formatMessage(messages.download)}> + <a className='video-player__download__icon' href={this.props.src} download> + <Icon id={'download'} fixedWidth /> + </a> + </button> + </div> + </div> + </div> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/blocks/index.js b/app/javascript/mastodon/features/blocks/index.js index 96a219c94..051431ed2 100644 --- a/app/javascript/mastodon/features/blocks/index.js +++ b/app/javascript/mastodon/features/blocks/index.js @@ -32,6 +32,7 @@ class Blocks extends ImmutablePureComponent { accountIds: ImmutablePropTypes.list, hasMore: PropTypes.bool, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -43,7 +44,7 @@ class Blocks extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { intl, accountIds, shouldUpdateScroll, hasMore } = this.props; + const { intl, accountIds, shouldUpdateScroll, hasMore, multiColumn } = this.props; if (!accountIds) { return ( @@ -56,7 +57,7 @@ class Blocks extends ImmutablePureComponent { const emptyMessage = <FormattedMessage id='empty_column.blocks' defaultMessage="You haven't blocked any users yet." />; return ( - <Column icon='ban' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} icon='ban' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> <ScrollableList scrollKey='blocks' @@ -64,6 +65,7 @@ class Blocks extends ImmutablePureComponent { hasMore={hasMore} shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} + bindToDocument={!multiColumn} > {accountIds.map(id => <AccountContainer key={id} id={id} /> diff --git a/app/javascript/mastodon/features/bookmarked_statuses/index.js b/app/javascript/mastodon/features/bookmarked_statuses/index.js new file mode 100644 index 000000000..c37cb9176 --- /dev/null +++ b/app/javascript/mastodon/features/bookmarked_statuses/index.js @@ -0,0 +1,104 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import { fetchBookmarkedStatuses, expandBookmarkedStatuses } from '../../actions/bookmarks'; +import Column from '../ui/components/column'; +import ColumnHeader from '../../components/column_header'; +import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; +import StatusList from '../../components/status_list'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import { debounce } from 'lodash'; + +const messages = defineMessages({ + heading: { id: 'column.bookmarks', defaultMessage: 'Bookmarks' }, +}); + +const mapStateToProps = state => ({ + statusIds: state.getIn(['status_lists', 'bookmarks', 'items']), + isLoading: state.getIn(['status_lists', 'bookmarks', 'isLoading'], true), + hasMore: !!state.getIn(['status_lists', 'bookmarks', 'next']), +}); + +export default @connect(mapStateToProps) +@injectIntl +class Bookmarks extends ImmutablePureComponent { + + static propTypes = { + dispatch: PropTypes.func.isRequired, + shouldUpdateScroll: PropTypes.func, + statusIds: ImmutablePropTypes.list.isRequired, + intl: PropTypes.object.isRequired, + columnId: PropTypes.string, + multiColumn: PropTypes.bool, + hasMore: PropTypes.bool, + isLoading: PropTypes.bool, + }; + + componentWillMount () { + this.props.dispatch(fetchBookmarkedStatuses()); + } + + handlePin = () => { + const { columnId, dispatch } = this.props; + + if (columnId) { + dispatch(removeColumn(columnId)); + } else { + dispatch(addColumn('BOOKMARKS', {})); + } + } + + handleMove = (dir) => { + const { columnId, dispatch } = this.props; + dispatch(moveColumn(columnId, dir)); + } + + handleHeaderClick = () => { + this.column.scrollTop(); + } + + setRef = c => { + this.column = c; + } + + handleLoadMore = debounce(() => { + this.props.dispatch(expandBookmarkedStatuses()); + }, 300, { leading: true }) + + render () { + const { intl, shouldUpdateScroll, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props; + const pinned = !!columnId; + + const emptyMessage = <FormattedMessage id='empty_column.bookmarked_statuses' defaultMessage="You don't have any bookmarked toots yet. When you bookmark one, it will show up here." />; + + return ( + <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.heading)}> + <ColumnHeader + icon='bookmark' + title={intl.formatMessage(messages.heading)} + onPin={this.handlePin} + onMove={this.handleMove} + onClick={this.handleHeaderClick} + pinned={pinned} + multiColumn={multiColumn} + showBackButton + /> + + <StatusList + trackScroll={!pinned} + statusIds={statusIds} + scrollKey={`bookmarked_statuses-${columnId}`} + hasMore={hasMore} + isLoading={isLoading} + onLoadMore={this.handleLoadMore} + shouldUpdateScroll={shouldUpdateScroll} + emptyMessage={emptyMessage} + bindToDocument={!multiColumn} + /> + </Column> + ); + } + +} diff --git a/app/javascript/mastodon/features/community_timeline/components/column_settings.js b/app/javascript/mastodon/features/community_timeline/components/column_settings.js index 8250190a7..0cb6db883 100644 --- a/app/javascript/mastodon/features/community_timeline/components/column_settings.js +++ b/app/javascript/mastodon/features/community_timeline/components/column_settings.js @@ -20,7 +20,7 @@ class ColumnSettings extends React.PureComponent { return ( <div> <div className='column-settings__row'> - <SettingToggle settings={settings} settingPath={['other', 'onlyMedia']} onChange={onChange} label={<FormattedMessage id='community.column_settings.media_only' defaultMessage='Media Only' />} /> + <SettingToggle settings={settings} settingPath={['other', 'onlyMedia']} onChange={onChange} label={<FormattedMessage id='community.column_settings.media_only' defaultMessage='Media only' />} /> </div> </div> ); diff --git a/app/javascript/mastodon/features/community_timeline/index.js b/app/javascript/mastodon/features/community_timeline/index.js index 7d26c98b0..b3cd39685 100644 --- a/app/javascript/mastodon/features/community_timeline/index.js +++ b/app/javascript/mastodon/features/community_timeline/index.js @@ -14,14 +14,16 @@ const messages = defineMessages({ title: { id: 'column.community', defaultMessage: 'Local timeline' }, }); -const mapStateToProps = (state, { onlyMedia, columnId }) => { +const mapStateToProps = (state, { columnId }) => { const uuid = columnId; const columns = state.getIn(['settings', 'columns']); const index = columns.findIndex(c => c.get('uuid') === uuid); + const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']); + const timelineState = state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`]); return { - hasUnread: state.getIn(['timelines', `community${onlyMedia ? ':media' : ''}`, 'unread']) > 0, - onlyMedia: (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'community', 'other', 'onlyMedia']), + hasUnread: !!timelineState && timelineState.get('unread') > 0, + onlyMedia, }; }; @@ -105,7 +107,7 @@ class CommunityTimeline extends React.PureComponent { const pinned = !!columnId; return ( - <Column ref={this.setRef} label={intl.formatMessage(messages.title)}> + <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}> <ColumnHeader icon='users' active={hasUnread} @@ -126,6 +128,7 @@ class CommunityTimeline extends React.PureComponent { onLoadMore={this.handleLoadMore} emptyMessage={<FormattedMessage id='empty_column.community' defaultMessage='The local timeline is empty. Write something publicly to get the ball rolling!' />} shouldUpdateScroll={shouldUpdateScroll} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/mastodon/features/compose/components/action_bar.js b/app/javascript/mastodon/features/compose/components/action_bar.js index 077226d70..dd2632796 100644 --- a/app/javascript/mastodon/features/compose/components/action_bar.js +++ b/app/javascript/mastodon/features/compose/components/action_bar.js @@ -15,6 +15,7 @@ const messages = defineMessages({ domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' }, mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' }, filters: { id: 'navigation_bar.filters', defaultMessage: 'Muted words' }, + logout: { id: 'navigation_bar.logout', defaultMessage: 'Logout' }, }); export default @injectIntl @@ -22,9 +23,14 @@ class ActionBar extends React.PureComponent { static propTypes = { account: ImmutablePropTypes.map.isRequired, + onLogout: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, }; + handleLogout = () => { + this.props.onLogout(); + } + render () { const { intl } = this.props; @@ -42,6 +48,8 @@ class ActionBar extends React.PureComponent { menu.push({ text: intl.formatMessage(messages.blocks), to: '/blocks' }); menu.push({ text: intl.formatMessage(messages.domain_blocks), to: '/domain_blocks' }); menu.push({ text: intl.formatMessage(messages.filters), href: '/filters' }); + menu.push(null); + menu.push({ text: intl.formatMessage(messages.logout), action: this.handleLogout }); return ( <div className='compose__action-bar'> diff --git a/app/javascript/mastodon/features/compose/components/compose_form.js b/app/javascript/mastodon/features/compose/components/compose_form.js index b3a04e421..46c52d9e4 100644 --- a/app/javascript/mastodon/features/compose/components/compose_form.js +++ b/app/javascript/mastodon/features/compose/components/compose_form.js @@ -118,7 +118,10 @@ class ComposeForm extends ImmutablePureComponent { handleFocus = () => { if (this.composeForm && !this.props.singleColumn) { - this.composeForm.scrollIntoView(); + const { left, right } = this.composeForm.getBoundingClientRect(); + if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) { + this.composeForm.scrollIntoView(); + } } } @@ -189,12 +192,12 @@ class ComposeForm extends ImmutablePureComponent { } return ( - <div className='compose-form' ref={this.setRef}> + <div className='compose-form'> <WarningContainer /> <ReplyIndicatorContainer /> - <div className={`spoiler-input ${this.props.spoiler ? 'spoiler-input--visible' : ''}`}> + <div className={`spoiler-input ${this.props.spoiler ? 'spoiler-input--visible' : ''}`} ref={this.setRef}> <AutosuggestInput placeholder={intl.formatMessage(messages.spoiler_placeholder)} value={this.props.spoilerText} diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js index c1429c756..e57c3c20c 100644 --- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js @@ -6,7 +6,7 @@ import Overlay from 'react-overlays/lib/Overlay'; import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; import detectPassiveEvents from 'detect-passive-events'; -import { buildCustomEmojis } from '../../emoji/emoji'; +import { buildCustomEmojis, categoriesFromEmojis } from '../../emoji/emoji'; const messages = defineMessages({ emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' }, @@ -31,19 +31,6 @@ let EmojiPicker, Emoji; // load asynchronously const backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`; const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false; -const categoriesSort = [ - 'recent', - 'custom', - 'people', - 'nature', - 'foods', - 'activity', - 'places', - 'objects', - 'symbols', - 'flags', -]; - class ModifierPickerMenu extends React.PureComponent { static propTypes = { @@ -241,8 +228,23 @@ class EmojiPickerMenu extends React.PureComponent { } const title = intl.formatMessage(messages.emoji); + const { modifierOpen } = this.state; + const categoriesSort = [ + 'recent', + 'people', + 'nature', + 'foods', + 'activity', + 'places', + 'objects', + 'symbols', + 'flags', + ]; + + categoriesSort.splice(1, 0, ...Array.from(categoriesFromEmojis(custom_emojis)).sort()); + return ( <div className={classNames('emoji-picker-dropdown__menu', { selecting: modifierOpen })} style={style} ref={this.setRef}> <EmojiPicker diff --git a/app/javascript/mastodon/features/compose/components/navigation_bar.js b/app/javascript/mastodon/features/compose/components/navigation_bar.js index d8d49cb95..840d0a3da 100644 --- a/app/javascript/mastodon/features/compose/components/navigation_bar.js +++ b/app/javascript/mastodon/features/compose/components/navigation_bar.js @@ -12,6 +12,7 @@ export default class NavigationBar extends ImmutablePureComponent { static propTypes = { account: ImmutablePropTypes.map.isRequired, + onLogout: PropTypes.func.isRequired, onClose: PropTypes.func, }; @@ -33,7 +34,7 @@ export default class NavigationBar extends ImmutablePureComponent { <div className='navigation-bar__actions'> <IconButton className='close' title='' icon='close' onClick={this.props.onClose} /> - <ActionBar account={this.props.account} /> + <ActionBar account={this.props.account} onLogout={this.props.onLogout} /> </div> </div> ); diff --git a/app/javascript/mastodon/features/compose/components/poll_form.js b/app/javascript/mastodon/features/compose/components/poll_form.js index 211601d52..791a4b1ad 100644 --- a/app/javascript/mastodon/features/compose/components/poll_form.js +++ b/app/javascript/mastodon/features/compose/components/poll_form.js @@ -13,6 +13,8 @@ const messages = defineMessages({ add_option: { id: 'compose_form.poll.add_option', defaultMessage: 'Add a choice' }, remove_option: { id: 'compose_form.poll.remove_option', defaultMessage: 'Remove this choice' }, poll_duration: { id: 'compose_form.poll.duration', defaultMessage: 'Poll duration' }, + switchToMultiple: { id: 'compose_form.poll.switch_to_multiple', defaultMessage: 'Change poll to allow multiple choices' }, + switchToSingle: { id: 'compose_form.poll.switch_to_single', defaultMessage: 'Change poll to allow for a single choice' }, minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' }, hours: { id: 'intervals.full.hours', defaultMessage: '{number, plural, one {# hour} other {# hours}}' }, days: { id: 'intervals.full.days', defaultMessage: '{number, plural, one {# day} other {# days}}' }, @@ -50,6 +52,12 @@ class Option extends React.PureComponent { e.stopPropagation(); }; + handleCheckboxKeypress = e => { + if (e.key === 'Enter' || e.key === ' ') { + this.handleToggleMultiple(e); + } + } + onSuggestionsClearRequested = () => { this.props.onClearSuggestions(); } @@ -71,13 +79,16 @@ class Option extends React.PureComponent { <span className={classNames('poll__input', { checkbox: isPollMultiple })} onClick={this.handleToggleMultiple} + onKeyPress={this.handleCheckboxKeypress} role='button' tabIndex='0' + title={intl.formatMessage(isPollMultiple ? messages.switchToMultiple : messages.switchToSingle)} + aria-label={intl.formatMessage(isPollMultiple ? messages.switchToMultiple : messages.switchToSingle)} /> <AutosuggestInput placeholder={intl.formatMessage(messages.option_placeholder, { number: index + 1 })} - maxLength={25} + maxLength={100} value={title} onChange={this.handleOptionTitleChange} suggestions={this.props.suggestions} @@ -142,11 +153,9 @@ class PollForm extends ImmutablePureComponent { </ul> <div className='poll__footer'> - {options.size < 4 && ( - <button className='button button-secondary' onClick={this.handleAddOption}><Icon id='plus' /> <FormattedMessage {...messages.add_option} /></button> - )} + <button disabled={options.size >= 5} className='button button-secondary' onClick={this.handleAddOption}><Icon id='plus' /> <FormattedMessage {...messages.add_option} /></button> - <select value={expiresIn} onChange={this.handleSelectDuration}> + <select value={expiresIn} onBlur={this.handleSelectDuration}> <option value={300}>{intl.formatMessage(messages.minutes, { number: 5 })}</option> <option value={1800}>{intl.formatMessage(messages.minutes, { number: 30 })}</option> <option value={3600}>{intl.formatMessage(messages.hours, { number: 1 })}</option> diff --git a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js index d02a55be0..7cbfe463a 100644 --- a/app/javascript/mastodon/features/compose/components/privacy_dropdown.js +++ b/app/javascript/mastodon/features/compose/components/privacy_dropdown.js @@ -73,6 +73,19 @@ class PrivacyDropdownMenu extends React.PureComponent { this.props.onChange(element.getAttribute('data-index')); } break; + case 'Tab': + if (e.shiftKey) { + element = this.node.childNodes[index - 1] || this.node.lastChild; + } else { + element = this.node.childNodes[index + 1] || this.node.firstChild; + } + if (element) { + element.focus(); + this.props.onChange(element.getAttribute('data-index')); + e.preventDefault(); + e.stopPropagation(); + } + break; case 'Home': element = this.node.firstChild; if (element) { @@ -180,6 +193,9 @@ class PrivacyDropdown extends React.PureComponent { } } else { const { top } = target.getBoundingClientRect(); + if (this.state.open && this.activeElement) { + this.activeElement.focus(); + } this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' }); this.setState({ open: !this.state.open }); } @@ -202,7 +218,25 @@ class PrivacyDropdown extends React.PureComponent { } } + handleMouseDown = () => { + if (!this.state.open) { + this.activeElement = document.activeElement; + } + } + + handleButtonKeyDown = (e) => { + switch(e.key) { + case ' ': + case 'Enter': + this.handleMouseDown(); + break; + } + } + handleClose = () => { + if (this.state.open && this.activeElement) { + this.activeElement.focus(); + } this.setState({ open: false }); } @@ -229,7 +263,7 @@ class PrivacyDropdown extends React.PureComponent { return ( <div className={classNames('privacy-dropdown', placement, { active: open })} onKeyDown={this.handleKeyDown}> - <div className={classNames('privacy-dropdown__value', { active: this.options.indexOf(valueOption) === 0 })}> + <div className={classNames('privacy-dropdown__value', { active: this.options.indexOf(valueOption) === (placement === 'bottom' ? 0 : (this.options.length - 1)) })}> <IconButton className='privacy-dropdown__value-icon' icon={valueOption.icon} @@ -239,6 +273,8 @@ class PrivacyDropdown extends React.PureComponent { active={open} inverted onClick={this.handleToggle} + onMouseDown={this.handleMouseDown} + onKeyDown={this.handleButtonKeyDown} style={{ height: null, lineHeight: '27px' }} /> </div> diff --git a/app/javascript/mastodon/features/compose/components/search.js b/app/javascript/mastodon/features/compose/components/search.js index 7f9edfeee..3e36a922b 100644 --- a/app/javascript/mastodon/features/compose/components/search.js +++ b/app/javascript/mastodon/features/compose/components/search.js @@ -60,12 +60,17 @@ class Search extends React.PureComponent { onShow: PropTypes.func.isRequired, openInRoute: PropTypes.bool, intl: PropTypes.object.isRequired, + singleColumn: PropTypes.bool, }; state = { expanded: false, }; + setRef = c => { + this.searchForm = c; + } + handleChange = (e) => { this.props.onChange(e.target.value); } @@ -95,6 +100,13 @@ class Search extends React.PureComponent { handleFocus = () => { this.setState({ expanded: true }); this.props.onShow(); + + if (this.searchForm && !this.props.singleColumn) { + const { left, right } = this.searchForm.getBoundingClientRect(); + if (left < 0 || right > (window.innerWidth || document.documentElement.clientWidth)) { + this.searchForm.scrollIntoView(); + } + } } handleBlur = () => { @@ -111,6 +123,7 @@ class Search extends React.PureComponent { <label> <span style={{ display: 'none' }}>{intl.formatMessage(messages.placeholder)}</span> <input + ref={this.setRef} className='search__input' type='text' placeholder={intl.formatMessage(messages.placeholder)} diff --git a/app/javascript/mastodon/features/compose/components/search_results.js b/app/javascript/mastodon/features/compose/components/search_results.js index e0966f52c..4b4cdff74 100644 --- a/app/javascript/mastodon/features/compose/components/search_results.js +++ b/app/javascript/mastodon/features/compose/components/search_results.js @@ -7,6 +7,8 @@ import StatusContainer from '../../../containers/status_container'; import ImmutablePureComponent from 'react-immutable-pure-component'; import Hashtag from '../../../components/hashtag'; import Icon from 'mastodon/components/icon'; +import { searchEnabled } from '../../../initial_state'; +import LoadMore from 'mastodon/components/load_more'; const messages = defineMessages({ dismissSuggestion: { id: 'suggestions.dismiss', defaultMessage: 'Dismiss suggestion' }, @@ -19,16 +21,26 @@ class SearchResults extends ImmutablePureComponent { results: ImmutablePropTypes.map.isRequired, suggestions: ImmutablePropTypes.list.isRequired, fetchSuggestions: PropTypes.func.isRequired, + expandSearch: PropTypes.func.isRequired, dismissSuggestion: PropTypes.func.isRequired, + searchTerm: PropTypes.string, intl: PropTypes.object.isRequired, }; componentDidMount () { - this.props.fetchSuggestions(); + if (this.props.searchTerm === '') { + this.props.fetchSuggestions(); + } } + handleLoadMoreAccounts = () => this.props.expandSearch('accounts'); + + handleLoadMoreStatuses = () => this.props.expandSearch('statuses'); + + handleLoadMoreHashtags = () => this.props.expandSearch('hashtags'); + render () { - const { intl, results, suggestions, dismissSuggestion } = this.props; + const { intl, results, suggestions, dismissSuggestion, searchTerm } = this.props; if (results.isEmpty() && !suggestions.isEmpty()) { return ( @@ -63,6 +75,8 @@ class SearchResults extends ImmutablePureComponent { <h5><Icon id='users' fixedWidth /><FormattedMessage id='search_results.accounts' defaultMessage='People' /></h5> {results.get('accounts').map(accountId => <AccountContainer key={accountId} id={accountId} />)} + + {results.get('accounts').size >= 5 && <LoadMore visible onClick={this.handleLoadMoreAccounts} />} </div> ); } @@ -74,6 +88,18 @@ class SearchResults extends ImmutablePureComponent { <h5><Icon id='quote-right' fixedWidth /><FormattedMessage id='search_results.statuses' defaultMessage='Toots' /></h5> {results.get('statuses').map(statusId => <StatusContainer key={statusId} id={statusId} />)} + + {results.get('statuses').size >= 5 && <LoadMore visible onClick={this.handleLoadMoreStatuses} />} + </div> + ); + } else if(results.get('statuses') && results.get('statuses').size === 0 && !searchEnabled && !(searchTerm.startsWith('@') || searchTerm.startsWith('#') || searchTerm.includes(' '))) { + statuses = ( + <div className='search-results__section'> + <h5><Icon id='quote-right' fixedWidth /><FormattedMessage id='search_results.statuses' defaultMessage='Toots' /></h5> + + <div className='search-results__info'> + <FormattedMessage id='search_results.statuses_fts_disabled' defaultMessage='Searching toots by their content is not enabled on this Mastodon server.' /> + </div> </div> ); } @@ -85,6 +111,8 @@ class SearchResults extends ImmutablePureComponent { <h5><Icon id='hashtag' fixedWidth /><FormattedMessage id='search_results.hashtags' defaultMessage='Hashtags' /></h5> {results.get('hashtags').map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)} + + {results.get('hashtags').size >= 5 && <LoadMore visible onClick={this.handleLoadMoreHashtags} />} </div> ); } diff --git a/app/javascript/mastodon/features/compose/components/text_icon_button.js b/app/javascript/mastodon/features/compose/components/text_icon_button.js index 9c8ffab1f..f0b133538 100644 --- a/app/javascript/mastodon/features/compose/components/text_icon_button.js +++ b/app/javascript/mastodon/features/compose/components/text_icon_button.js @@ -1,6 +1,12 @@ import React from 'react'; import PropTypes from 'prop-types'; +const iconStyle = { + height: null, + lineHeight: '27px', + width: `${18 * 1.28571429}px`, +}; + export default class TextIconButton extends React.PureComponent { static propTypes = { @@ -20,7 +26,14 @@ export default class TextIconButton extends React.PureComponent { const { label, title, active, ariaControls } = this.props; return ( - <button title={title} aria-label={title} className={`text-icon-button ${active ? 'active' : ''}`} aria-expanded={active} onClick={this.handleClick} aria-controls={ariaControls}> + <button + title={title} + aria-label={title} + className={`text-icon-button ${active ? 'active' : ''}`} + aria-expanded={active} + onClick={this.handleClick} + aria-controls={ariaControls} style={iconStyle} + > {label} </button> ); diff --git a/app/javascript/mastodon/features/compose/components/upload.js b/app/javascript/mastodon/features/compose/components/upload.js index 629cbc36a..b9f0fbe3a 100644 --- a/app/javascript/mastodon/features/compose/components/upload.js +++ b/app/javascript/mastodon/features/compose/components/upload.js @@ -4,16 +4,11 @@ import PropTypes from 'prop-types'; import Motion from '../../ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { FormattedMessage } from 'react-intl'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; -const messages = defineMessages({ - description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' }, -}); - -export default @injectIntl -class Upload extends ImmutablePureComponent { +export default class Upload extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -21,30 +16,10 @@ class Upload extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.map.isRequired, - intl: PropTypes.object.isRequired, onUndo: PropTypes.func.isRequired, - onDescriptionChange: PropTypes.func.isRequired, onOpenFocalPoint: PropTypes.func.isRequired, - onSubmit: PropTypes.func.isRequired, - }; - - state = { - hovered: false, - focused: false, - dirtyDescription: null, }; - handleKeyDown = (e) => { - if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) { - this.handleSubmit(); - } - } - - handleSubmit = () => { - this.handleInputBlur(); - this.props.onSubmit(this.context.router.history); - } - handleUndoClick = e => { e.stopPropagation(); this.props.onUndo(this.props.media.get('id')); @@ -55,69 +30,21 @@ class Upload extends ImmutablePureComponent { this.props.onOpenFocalPoint(this.props.media.get('id')); } - handleInputChange = e => { - this.setState({ dirtyDescription: e.target.value }); - } - - handleMouseEnter = () => { - this.setState({ hovered: true }); - } - - handleMouseLeave = () => { - this.setState({ hovered: false }); - } - - handleInputFocus = () => { - this.setState({ focused: true }); - } - - handleClick = () => { - this.setState({ focused: true }); - } - - handleInputBlur = () => { - const { dirtyDescription } = this.state; - - this.setState({ focused: false, dirtyDescription: null }); - - if (dirtyDescription !== null) { - this.props.onDescriptionChange(this.props.media.get('id'), dirtyDescription); - } - } - render () { - const { intl, media } = this.props; - const active = this.state.hovered || this.state.focused; - const description = this.state.dirtyDescription || (this.state.dirtyDescription !== '' && media.get('description')) || ''; + const { media } = this.props; const focusX = media.getIn(['meta', 'focus', 'x']); const focusY = media.getIn(['meta', 'focus', 'y']); const x = ((focusX / 2) + .5) * 100; const y = ((focusY / -2) + .5) * 100; return ( - <div className='compose-form__upload' tabIndex='0' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClick} role='button'> + <div className='compose-form__upload' tabIndex='0' role='button'> <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}> {({ scale }) => ( <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}> - <div className={classNames('compose-form__upload__actions', { active })}> + <div className={classNames('compose-form__upload__actions', { active: true })}> <button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button> - {media.get('type') === 'image' && <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='crosshairs' /> <FormattedMessage id='upload_form.focus' defaultMessage='Crop' /></button>} - </div> - - <div className={classNames('compose-form__upload-description', { active })}> - <label> - <span style={{ display: 'none' }}>{intl.formatMessage(messages.description)}</span> - - <textarea - placeholder={intl.formatMessage(messages.description)} - value={description} - maxLength={420} - onFocus={this.handleInputFocus} - onChange={this.handleInputChange} - onBlur={this.handleInputBlur} - onKeyDown={this.handleKeyDown} - /> - </label> + <button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button> </div> </div> )} diff --git a/app/javascript/mastodon/features/compose/components/upload_button.js b/app/javascript/mastodon/features/compose/components/upload_button.js index 90e2769f3..d550019f4 100644 --- a/app/javascript/mastodon/features/compose/components/upload_button.js +++ b/app/javascript/mastodon/features/compose/components/upload_button.js @@ -7,9 +7,11 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePropTypes from 'react-immutable-proptypes'; const messages = defineMessages({ - upload: { id: 'upload_button.label', defaultMessage: 'Add media (JPEG, PNG, GIF, WebM, MP4, MOV)' }, + upload: { id: 'upload_button.label', defaultMessage: 'Add media ({formats})' }, }); +const SUPPORTED_FORMATS = 'JPEG, PNG, GIF, WebM, MP4, MOV, OGG, WAV, MP3, FLAC'; + const makeMapStateToProps = () => { const mapStateToProps = state => ({ acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']), @@ -60,9 +62,9 @@ class UploadButton extends ImmutablePureComponent { return ( <div className='compose-form__upload-button'> - <IconButton icon='camera' title={intl.formatMessage(messages.upload)} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} /> + <IconButton icon='paperclip' title={intl.formatMessage(messages.upload, { formats: SUPPORTED_FORMATS })} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} /> <label> - <span style={{ display: 'none' }}>{intl.formatMessage(messages.upload)}</span> + <span style={{ display: 'none' }}>{intl.formatMessage(messages.upload, { formats: SUPPORTED_FORMATS })}</span> <input key={resetFileKey} ref={this.setRef} diff --git a/app/javascript/mastodon/features/compose/components/upload_form.js b/app/javascript/mastodon/features/compose/components/upload_form.js index 9ff2aa0fa..c6eac554e 100644 --- a/app/javascript/mastodon/features/compose/components/upload_form.js +++ b/app/javascript/mastodon/features/compose/components/upload_form.js @@ -4,6 +4,7 @@ import UploadProgressContainer from '../containers/upload_progress_container'; import ImmutablePureComponent from 'react-immutable-pure-component'; import UploadContainer from '../containers/upload_container'; import SensitiveButtonContainer from '../containers/sensitive_button_container'; +import { FormattedMessage } from 'react-intl'; export default class UploadForm extends ImmutablePureComponent { @@ -16,7 +17,7 @@ export default class UploadForm extends ImmutablePureComponent { return ( <div className='compose-form__upload-wrapper'> - <UploadProgressContainer /> + <UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} /> <div className='compose-form__uploads-wrapper'> {mediaIds.map(id => ( diff --git a/app/javascript/mastodon/features/compose/components/upload_progress.js b/app/javascript/mastodon/features/compose/components/upload_progress.js index cbe58f573..b0bfe0c9a 100644 --- a/app/javascript/mastodon/features/compose/components/upload_progress.js +++ b/app/javascript/mastodon/features/compose/components/upload_progress.js @@ -2,7 +2,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import Motion from '../../ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; -import { FormattedMessage } from 'react-intl'; import Icon from 'mastodon/components/icon'; export default class UploadProgress extends React.PureComponent { @@ -10,10 +9,12 @@ export default class UploadProgress extends React.PureComponent { static propTypes = { active: PropTypes.bool, progress: PropTypes.number, + icon: PropTypes.string.isRequired, + message: PropTypes.node.isRequired, }; render () { - const { active, progress } = this.props; + const { active, progress, icon, message } = this.props; if (!active) { return null; @@ -22,11 +23,11 @@ export default class UploadProgress extends React.PureComponent { return ( <div className='upload-progress'> <div className='upload-progress__icon'> - <Icon id='upload' /> + <Icon id={icon} /> </div> <div className='upload-progress__message'> - <FormattedMessage id='upload_progress.label' defaultMessage='Uploading...' /> + {message} <div className='upload-progress__backdrop'> <Motion defaultStyle={{ width: 0 }} style={{ width: spring(progress) }}> diff --git a/app/javascript/mastodon/features/compose/containers/navigation_container.js b/app/javascript/mastodon/features/compose/containers/navigation_container.js index eb9f3ea45..8606a642e 100644 --- a/app/javascript/mastodon/features/compose/containers/navigation_container.js +++ b/app/javascript/mastodon/features/compose/containers/navigation_container.js @@ -1,11 +1,29 @@ import { connect } from 'react-redux'; +import { defineMessages, injectIntl } from 'react-intl'; import NavigationBar from '../components/navigation_bar'; +import { logOut } from 'mastodon/utils/log_out'; +import { openModal } from 'mastodon/actions/modal'; import { me } from '../../../initial_state'; +const messages = defineMessages({ + logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' }, + logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' }, +}); + const mapStateToProps = state => { return { account: state.getIn(['accounts', me]), }; }; -export default connect(mapStateToProps)(NavigationBar); +const mapDispatchToProps = (dispatch, { intl }) => ({ + onLogout () { + dispatch(openModal('CONFIRM', { + message: intl.formatMessage(messages.logoutMessage), + confirm: intl.formatMessage(messages.logoutConfirm), + onConfirm: () => logOut(), + })); + }, +}); + +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(NavigationBar)); diff --git a/app/javascript/mastodon/features/compose/containers/search_results_container.js b/app/javascript/mastodon/features/compose/containers/search_results_container.js index f9637861a..1f714ff83 100644 --- a/app/javascript/mastodon/features/compose/containers/search_results_container.js +++ b/app/javascript/mastodon/features/compose/containers/search_results_container.js @@ -1,14 +1,17 @@ import { connect } from 'react-redux'; import SearchResults from '../components/search_results'; -import { fetchSuggestions, dismissSuggestion } from '../../../actions/suggestions'; +import { fetchSuggestions, dismissSuggestion } from 'mastodon/actions/suggestions'; +import { expandSearch } from 'mastodon/actions/search'; const mapStateToProps = state => ({ results: state.getIn(['search', 'results']), suggestions: state.getIn(['suggestions', 'items']), + searchTerm: state.getIn(['search', 'searchTerm']), }); const mapDispatchToProps = dispatch => ({ fetchSuggestions: () => dispatch(fetchSuggestions()), + expandSearch: type => dispatch(expandSearch(type)), dismissSuggestion: account => dispatch(dismissSuggestion(account.get('id'))), }); diff --git a/app/javascript/mastodon/features/compose/containers/upload_button_container.js b/app/javascript/mastodon/features/compose/containers/upload_button_container.js index d8b8c4b6e..221b98e31 100644 --- a/app/javascript/mastodon/features/compose/containers/upload_button_container.js +++ b/app/javascript/mastodon/features/compose/containers/upload_button_container.js @@ -3,7 +3,7 @@ import UploadButton from '../components/upload_button'; import { uploadCompose } from '../../../actions/compose'; const mapStateToProps = state => ({ - disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')), + disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size + state.getIn(['compose', 'pending_media_attachments']) > 3 || state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')))), unavailable: state.getIn(['compose', 'poll']) !== null, resetFileKey: state.getIn(['compose', 'resetFileKey']), }); diff --git a/app/javascript/mastodon/features/compose/containers/upload_container.js b/app/javascript/mastodon/features/compose/containers/upload_container.js index b6d81f03a..342b0c2a9 100644 --- a/app/javascript/mastodon/features/compose/containers/upload_container.js +++ b/app/javascript/mastodon/features/compose/containers/upload_container.js @@ -1,6 +1,6 @@ import { connect } from 'react-redux'; import Upload from '../components/upload'; -import { undoUploadCompose, changeUploadCompose } from '../../../actions/compose'; +import { undoUploadCompose } from '../../../actions/compose'; import { openModal } from '../../../actions/modal'; import { submitCompose } from '../../../actions/compose'; @@ -14,10 +14,6 @@ const mapDispatchToProps = dispatch => ({ dispatch(undoUploadCompose(id)); }, - onDescriptionChange: (id, description) => { - dispatch(changeUploadCompose(id, { description })); - }, - onOpenFocalPoint: id => { dispatch(openModal('FOCAL_POINT', { id })); }, diff --git a/app/javascript/mastodon/features/compose/index.js b/app/javascript/mastodon/features/compose/index.js index 0731abcf4..e2de8b0e6 100644 --- a/app/javascript/mastodon/features/compose/index.js +++ b/app/javascript/mastodon/features/compose/index.js @@ -12,9 +12,11 @@ import Motion from '../ui/util/optional_motion'; import spring from 'react-motion/lib/spring'; import SearchResultsContainer from './containers/search_results_container'; import { changeComposing } from '../../actions/compose'; +import { openModal } from 'mastodon/actions/modal'; import elephantUIPlane from '../../../images/elephant_ui_plane.svg'; import { mascot } from '../../initial_state'; import Icon from 'mastodon/components/icon'; +import { logOut } from 'mastodon/utils/log_out'; const messages = defineMessages({ start: { id: 'getting_started.heading', defaultMessage: 'Getting started' }, @@ -25,6 +27,8 @@ const messages = defineMessages({ preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, logout: { id: 'navigation_bar.logout', defaultMessage: 'Logout' }, compose: { id: 'navigation_bar.compose', defaultMessage: 'Compose new toot' }, + logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' }, + logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' }, }); const mapStateToProps = (state, ownProps) => ({ @@ -61,6 +65,21 @@ class Compose extends React.PureComponent { } } + handleLogoutClick = e => { + const { dispatch, intl } = this.props; + + e.preventDefault(); + e.stopPropagation(); + + dispatch(openModal('CONFIRM', { + message: intl.formatMessage(messages.logoutMessage), + confirm: intl.formatMessage(messages.logoutConfirm), + onConfirm: () => logOut(), + })); + + return false; + } + onFocus = () => { this.props.dispatch(changeComposing(true)); } @@ -92,7 +111,7 @@ class Compose extends React.PureComponent { <Link to='/timelines/public' className='drawer__tab' title={intl.formatMessage(messages.public)} aria-label={intl.formatMessage(messages.public)}><Icon id='globe' fixedWidth /></Link> )} <a href='/settings/preferences' className='drawer__tab' title={intl.formatMessage(messages.preferences)} aria-label={intl.formatMessage(messages.preferences)}><Icon id='cog' fixedWidth /></a> - <a href='/auth/sign_out' className='drawer__tab' data-method='delete' title={intl.formatMessage(messages.logout)} aria-label={intl.formatMessage(messages.logout)}><Icon id='sign-out' fixedWidth /></a> + <a href='/auth/sign_out' className='drawer__tab' title={intl.formatMessage(messages.logout)} aria-label={intl.formatMessage(messages.logout)} onClick={this.handleLogoutClick}><Icon id='sign-out' fixedWidth /></a> </nav> ); } diff --git a/app/javascript/mastodon/features/direct_timeline/components/conversation.js b/app/javascript/mastodon/features/direct_timeline/components/conversation.js index ffcd6d281..235cb7ad8 100644 --- a/app/javascript/mastodon/features/direct_timeline/components/conversation.js +++ b/app/javascript/mastodon/features/direct_timeline/components/conversation.js @@ -2,9 +2,30 @@ import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import StatusContainer from '../../../containers/status_container'; +import StatusContent from 'mastodon/components/status_content'; +import AttachmentList from 'mastodon/components/attachment_list'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; +import AvatarComposite from 'mastodon/components/avatar_composite'; +import Permalink from 'mastodon/components/permalink'; +import IconButton from 'mastodon/components/icon_button'; +import RelativeTimestamp from 'mastodon/components/relative_timestamp'; +import { HotKeys } from 'react-hotkeys'; +import { autoPlayGif } from 'mastodon/initial_state'; +import classNames from 'classnames'; -export default class Conversation extends ImmutablePureComponent { +const messages = defineMessages({ + more: { id: 'status.more', defaultMessage: 'More' }, + open: { id: 'conversation.open', defaultMessage: 'View conversation' }, + reply: { id: 'status.reply', defaultMessage: 'Reply' }, + markAsRead: { id: 'conversation.mark_as_read', defaultMessage: 'Mark as read' }, + delete: { id: 'conversation.delete', defaultMessage: 'Delete conversation' }, + muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' }, + unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' }, +}); + +export default @injectIntl +class Conversation extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object, @@ -13,25 +34,76 @@ export default class Conversation extends ImmutablePureComponent { static propTypes = { conversationId: PropTypes.string.isRequired, accounts: ImmutablePropTypes.list.isRequired, - lastStatusId: PropTypes.string, + lastStatus: ImmutablePropTypes.map, unread:PropTypes.bool.isRequired, onMoveUp: PropTypes.func, onMoveDown: PropTypes.func, markRead: PropTypes.func.isRequired, + delete: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, }; + _updateEmojis () { + const node = this.namesNode; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); + } + } + + componentDidMount () { + this._updateEmojis(); + } + + componentDidUpdate () { + this._updateEmojis(); + } + + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } + + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } + handleClick = () => { if (!this.context.router) { return; } - const { lastStatusId, unread, markRead } = this.props; + const { lastStatus, unread, markRead } = this.props; if (unread) { markRead(); } - this.context.router.history.push(`/statuses/${lastStatusId}`); + this.context.router.history.push(`/statuses/${lastStatus.get('id')}`); + } + + handleMarkAsRead = () => { + this.props.markRead(); + } + + handleReply = () => { + this.props.reply(this.props.lastStatus, this.context.router.history); + } + + handleDelete = () => { + this.props.delete(); } handleHotkeyMoveUp = () => { @@ -42,22 +114,92 @@ export default class Conversation extends ImmutablePureComponent { this.props.onMoveDown(this.props.conversationId); } + handleConversationMute = () => { + this.props.onMute(this.props.lastStatus); + } + + handleShowMore = () => { + this.props.onToggleHidden(this.props.lastStatus); + } + + setNamesRef = (c) => { + this.namesNode = c; + } + render () { - const { accounts, lastStatusId, unread } = this.props; + const { accounts, lastStatus, unread, intl } = this.props; - if (lastStatusId === null) { + if (lastStatus === null) { return null; } + const menu = [ + { text: intl.formatMessage(messages.open), action: this.handleClick }, + null, + ]; + + menu.push({ text: intl.formatMessage(lastStatus.get('muted') ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMute }); + + if (unread) { + menu.push({ text: intl.formatMessage(messages.markAsRead), action: this.handleMarkAsRead }); + menu.push(null); + } + + menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDelete }); + + const names = accounts.map(a => <Permalink to={`/accounts/${a.get('id')}`} href={a.get('url')} key={a.get('id')} title={a.get('acct')}><bdi><strong className='display-name__html' dangerouslySetInnerHTML={{ __html: a.get('display_name_html') }} /></bdi></Permalink>).reduce((prev, cur) => [prev, ', ', cur]); + + const handlers = { + reply: this.handleReply, + open: this.handleClick, + moveUp: this.handleHotkeyMoveUp, + moveDown: this.handleHotkeyMoveDown, + toggleHidden: this.handleShowMore, + }; + return ( - <StatusContainer - id={lastStatusId} - unread={unread} - otherAccounts={accounts} - onMoveUp={this.handleHotkeyMoveUp} - onMoveDown={this.handleHotkeyMoveDown} - onClick={this.handleClick} - /> + <HotKeys handlers={handlers}> + <div className={classNames('conversation focusable muted', { 'conversation--unread': unread })} tabIndex='0'> + <div className='conversation__avatar'> + <AvatarComposite accounts={accounts} size={48} /> + </div> + + <div className='conversation__content'> + <div className='conversation__content__info'> + <div className='conversation__content__relative-time'> + {unread && <span className='conversation__unread' />} <RelativeTimestamp timestamp={lastStatus.get('created_at')} /> + </div> + + <div className='conversation__content__names' ref={this.setNamesRef}> + <FormattedMessage id='conversation.with' defaultMessage='With {names}' values={{ names: <span>{names}</span> }} /> + </div> + </div> + + <StatusContent + status={lastStatus} + onClick={this.handleClick} + expanded={!lastStatus.get('hidden')} + onExpandedToggle={this.handleShowMore} + collapsable + /> + + {lastStatus.get('media_attachments').size > 0 && ( + <AttachmentList + compact + media={lastStatus.get('media_attachments')} + /> + )} + + <div className='status__action-bar'> + <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.reply)} icon='reply' onClick={this.handleReply} /> + + <div className='status__action-bar-dropdown'> + <DropdownMenuContainer status={lastStatus} items={menu} icon='ellipsis-h' size={18} direction='right' title={intl.formatMessage(messages.more)} /> + </div> + </div> + </div> + </div> + </HotKeys> ); } diff --git a/app/javascript/mastodon/features/direct_timeline/containers/conversation_container.js b/app/javascript/mastodon/features/direct_timeline/containers/conversation_container.js index bd6f6bfb0..94cef81a7 100644 --- a/app/javascript/mastodon/features/direct_timeline/containers/conversation_container.js +++ b/app/javascript/mastodon/features/direct_timeline/containers/conversation_container.js @@ -1,19 +1,74 @@ import { connect } from 'react-redux'; import Conversation from '../components/conversation'; -import { markConversationRead } from '../../../actions/conversations'; +import { markConversationRead, deleteConversation } from 'mastodon/actions/conversations'; +import { makeGetStatus } from 'mastodon/selectors'; +import { replyCompose } from 'mastodon/actions/compose'; +import { openModal } from 'mastodon/actions/modal'; +import { muteStatus, unmuteStatus, hideStatus, revealStatus } from 'mastodon/actions/statuses'; +import { defineMessages, injectIntl } from 'react-intl'; -const mapStateToProps = (state, { conversationId }) => { - const conversation = state.getIn(['conversations', 'items']).find(x => x.get('id') === conversationId); +const messages = defineMessages({ + replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, + replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, +}); + +const mapStateToProps = () => { + const getStatus = makeGetStatus(); + + return (state, { conversationId }) => { + const conversation = state.getIn(['conversations', 'items']).find(x => x.get('id') === conversationId); + const lastStatusId = conversation.get('last_status', null); - return { - accounts: conversation.get('accounts').map(accountId => state.getIn(['accounts', accountId], null)), - unread: conversation.get('unread'), - lastStatusId: conversation.get('last_status', null), + return { + accounts: conversation.get('accounts').map(accountId => state.getIn(['accounts', accountId], null)), + unread: conversation.get('unread'), + lastStatus: lastStatusId && getStatus(state, { id: lastStatusId }), + }; }; }; -const mapDispatchToProps = (dispatch, { conversationId }) => ({ - markRead: () => dispatch(markConversationRead(conversationId)), +const mapDispatchToProps = (dispatch, { intl, conversationId }) => ({ + + markRead () { + dispatch(markConversationRead(conversationId)); + }, + + reply (status, router) { + dispatch((_, getState) => { + let state = getState(); + + if (state.getIn(['compose', 'text']).trim().length !== 0) { + dispatch(openModal('CONFIRM', { + message: intl.formatMessage(messages.replyMessage), + confirm: intl.formatMessage(messages.replyConfirm), + onConfirm: () => dispatch(replyCompose(status, router)), + })); + } else { + dispatch(replyCompose(status, router)); + } + }); + }, + + delete () { + dispatch(deleteConversation(conversationId)); + }, + + onMute (status) { + if (status.get('muted')) { + dispatch(unmuteStatus(status.get('id'))); + } else { + dispatch(muteStatus(status.get('id'))); + } + }, + + onToggleHidden (status) { + if (status.get('hidden')) { + dispatch(revealStatus(status.get('id'))); + } else { + dispatch(hideStatus(status.get('id'))); + } + }, + }); -export default connect(mapStateToProps, mapDispatchToProps)(Conversation); +export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Conversation)); diff --git a/app/javascript/mastodon/features/direct_timeline/index.js b/app/javascript/mastodon/features/direct_timeline/index.js index d202f3bfd..5ce795760 100644 --- a/app/javascript/mastodon/features/direct_timeline/index.js +++ b/app/javascript/mastodon/features/direct_timeline/index.js @@ -75,7 +75,7 @@ class DirectTimeline extends React.PureComponent { const pinned = !!columnId; return ( - <Column ref={this.setRef} label={intl.formatMessage(messages.title)}> + <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}> <ColumnHeader icon='envelope' active={hasUnread} diff --git a/app/javascript/mastodon/features/directory/components/account_card.js b/app/javascript/mastodon/features/directory/components/account_card.js new file mode 100644 index 000000000..50ad74450 --- /dev/null +++ b/app/javascript/mastodon/features/directory/components/account_card.js @@ -0,0 +1,190 @@ +import React from 'react'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { makeGetAccount } from 'mastodon/selectors'; +import Avatar from 'mastodon/components/avatar'; +import DisplayName from 'mastodon/components/display_name'; +import Permalink from 'mastodon/components/permalink'; +import RelativeTimestamp from 'mastodon/components/relative_timestamp'; +import IconButton from 'mastodon/components/icon_button'; +import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; +import { autoPlayGif, me, unfollowModal } from 'mastodon/initial_state'; +import { shortNumberFormat } from 'mastodon/utils/numbers'; +import { followAccount, unfollowAccount, blockAccount, unblockAccount, unmuteAccount } from 'mastodon/actions/accounts'; +import { openModal } from 'mastodon/actions/modal'; +import { initMuteModal } from 'mastodon/actions/mutes'; + +const messages = defineMessages({ + follow: { id: 'account.follow', defaultMessage: 'Follow' }, + unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, + requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' }, + unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, + unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' }, +}); + +const makeMapStateToProps = () => { + const getAccount = makeGetAccount(); + + const mapStateToProps = (state, { id }) => ({ + account: getAccount(state, id), + }); + + return mapStateToProps; +}; + +const mapDispatchToProps = (dispatch, { intl }) => ({ + + onFollow (account) { + if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) { + if (unfollowModal) { + dispatch(openModal('CONFIRM', { + message: <FormattedMessage id='confirmations.unfollow.message' defaultMessage='Are you sure you want to unfollow {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, + confirm: intl.formatMessage(messages.unfollowConfirm), + onConfirm: () => dispatch(unfollowAccount(account.get('id'))), + })); + } else { + dispatch(unfollowAccount(account.get('id'))); + } + } else { + dispatch(followAccount(account.get('id'))); + } + }, + + onBlock (account) { + if (account.getIn(['relationship', 'blocking'])) { + dispatch(unblockAccount(account.get('id'))); + } else { + dispatch(blockAccount(account.get('id'))); + } + }, + + onMute (account) { + if (account.getIn(['relationship', 'muting'])) { + dispatch(unmuteAccount(account.get('id'))); + } else { + dispatch(initMuteModal(account)); + } + }, + +}); + +export default @injectIntl +@connect(makeMapStateToProps, mapDispatchToProps) +class AccountCard extends ImmutablePureComponent { + + static propTypes = { + account: ImmutablePropTypes.map.isRequired, + intl: PropTypes.object.isRequired, + onFollow: PropTypes.func.isRequired, + onBlock: PropTypes.func.isRequired, + onMute: PropTypes.func.isRequired, + }; + + _updateEmojis () { + const node = this.node; + + if (!node || autoPlayGif) { + return; + } + + const emojis = node.querySelectorAll('.custom-emoji'); + + for (var i = 0; i < emojis.length; i++) { + let emoji = emojis[i]; + if (emoji.classList.contains('status-emoji')) { + continue; + } + emoji.classList.add('status-emoji'); + + emoji.addEventListener('mouseenter', this.handleEmojiMouseEnter, false); + emoji.addEventListener('mouseleave', this.handleEmojiMouseLeave, false); + } + } + + componentDidMount () { + this._updateEmojis(); + } + + componentDidUpdate () { + this._updateEmojis(); + } + + handleEmojiMouseEnter = ({ target }) => { + target.src = target.getAttribute('data-original'); + } + + handleEmojiMouseLeave = ({ target }) => { + target.src = target.getAttribute('data-static'); + } + + handleFollow = () => { + this.props.onFollow(this.props.account); + } + + handleBlock = () => { + this.props.onBlock(this.props.account); + } + + handleMute = () => { + this.props.onMute(this.props.account); + } + + setRef = (c) => { + this.node = c; + } + + render () { + const { account, intl } = this.props; + + let buttons; + + if (account.get('id') !== me && account.get('relationship', null) !== null) { + const following = account.getIn(['relationship', 'following']); + const requested = account.getIn(['relationship', 'requested']); + const blocking = account.getIn(['relationship', 'blocking']); + const muting = account.getIn(['relationship', 'muting']); + + if (requested) { + buttons = <IconButton disabled icon='hourglass' title={intl.formatMessage(messages.requested)} />; + } else if (blocking) { + buttons = <IconButton active icon='unlock' title={intl.formatMessage(messages.unblock, { name: account.get('username') })} onClick={this.handleBlock} />; + } else if (muting) { + buttons = <IconButton active icon='volume-up' title={intl.formatMessage(messages.unmute, { name: account.get('username') })} onClick={this.handleMute} />; + } else if (!account.get('moved') || following) { + buttons = <IconButton icon={following ? 'user-times' : 'user-plus'} title={intl.formatMessage(following ? messages.unfollow : messages.follow)} onClick={this.handleFollow} active={following} />; + } + } + + return ( + <div className='directory__card'> + <div className='directory__card__img'> + <img src={autoPlayGif ? account.get('header') : account.get('header_static')} alt='' /> + </div> + + <div className='directory__card__bar'> + <Permalink className='directory__card__bar__name' href={account.get('url')} to={`/accounts/${account.get('id')}`}> + <Avatar account={account} size={48} /> + <DisplayName account={account} /> + </Permalink> + + <div className='directory__card__bar__relationship account__relationship'> + {buttons} + </div> + </div> + + <div className='directory__card__extra' ref={this.setRef}> + <div className='account__header__content' dangerouslySetInnerHTML={{ __html: account.get('note_emojified') }} /> + </div> + + <div className='directory__card__extra'> + <div className='accounts-table__count'>{shortNumberFormat(account.get('statuses_count'))} <small><FormattedMessage id='account.posts' defaultMessage='Toots' /></small></div> + <div className='accounts-table__count'>{shortNumberFormat(account.get('followers_count'))} <small><FormattedMessage id='account.followers' defaultMessage='Followers' /></small></div> + <div className='accounts-table__count'>{account.get('last_status_at') === null ? <FormattedMessage id='account.never_active' defaultMessage='Never' /> : <RelativeTimestamp timestamp={account.get('last_status_at')} />} <small><FormattedMessage id='account.last_status' defaultMessage='Last active' /></small></div> + </div> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/directory/index.js b/app/javascript/mastodon/features/directory/index.js new file mode 100644 index 000000000..2f91e759b --- /dev/null +++ b/app/javascript/mastodon/features/directory/index.js @@ -0,0 +1,171 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { defineMessages, injectIntl } from 'react-intl'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import Column from 'mastodon/components/column'; +import ColumnHeader from 'mastodon/components/column_header'; +import { addColumn, removeColumn, moveColumn, changeColumnParams } from 'mastodon/actions/columns'; +import { fetchDirectory, expandDirectory } from 'mastodon/actions/directory'; +import { List as ImmutableList } from 'immutable'; +import AccountCard from './components/account_card'; +import RadioButton from 'mastodon/components/radio_button'; +import classNames from 'classnames'; +import LoadMore from 'mastodon/components/load_more'; +import { ScrollContainer } from 'react-router-scroll-4'; + +const messages = defineMessages({ + title: { id: 'column.directory', defaultMessage: 'Browse profiles' }, + recentlyActive: { id: 'directory.recently_active', defaultMessage: 'Recently active' }, + newArrivals: { id: 'directory.new_arrivals', defaultMessage: 'New arrivals' }, + local: { id: 'directory.local', defaultMessage: 'From {domain} only' }, + federated: { id: 'directory.federated', defaultMessage: 'From known fediverse' }, +}); + +const mapStateToProps = state => ({ + accountIds: state.getIn(['user_lists', 'directory', 'items'], ImmutableList()), + isLoading: state.getIn(['user_lists', 'directory', 'isLoading'], true), + domain: state.getIn(['meta', 'domain']), +}); + +export default @connect(mapStateToProps) +@injectIntl +class Directory extends React.PureComponent { + + static contextTypes = { + router: PropTypes.object, + }; + + static propTypes = { + isLoading: PropTypes.bool, + accountIds: ImmutablePropTypes.list.isRequired, + dispatch: PropTypes.func.isRequired, + shouldUpdateScroll: PropTypes.func, + columnId: PropTypes.string, + intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, + domain: PropTypes.string.isRequired, + params: PropTypes.shape({ + order: PropTypes.string, + local: PropTypes.bool, + }), + }; + + state = { + order: null, + local: null, + }; + + handlePin = () => { + const { columnId, dispatch } = this.props; + + if (columnId) { + dispatch(removeColumn(columnId)); + } else { + dispatch(addColumn('DIRECTORY', this.getParams(this.props, this.state))); + } + } + + getParams = (props, state) => ({ + order: state.order === null ? (props.params.order || 'active') : state.order, + local: state.local === null ? (props.params.local || false) : state.local, + }); + + handleMove = dir => { + const { columnId, dispatch } = this.props; + dispatch(moveColumn(columnId, dir)); + } + + handleHeaderClick = () => { + this.column.scrollTop(); + } + + componentDidMount () { + const { dispatch } = this.props; + dispatch(fetchDirectory(this.getParams(this.props, this.state))); + } + + componentDidUpdate (prevProps, prevState) { + const { dispatch } = this.props; + const paramsOld = this.getParams(prevProps, prevState); + const paramsNew = this.getParams(this.props, this.state); + + if (paramsOld.order !== paramsNew.order || paramsOld.local !== paramsNew.local) { + dispatch(fetchDirectory(paramsNew)); + } + } + + setRef = c => { + this.column = c; + } + + handleChangeOrder = e => { + const { dispatch, columnId } = this.props; + + if (columnId) { + dispatch(changeColumnParams(columnId, ['order'], e.target.value)); + } else { + this.setState({ order: e.target.value }); + } + } + + handleChangeLocal = e => { + const { dispatch, columnId } = this.props; + + if (columnId) { + dispatch(changeColumnParams(columnId, ['local'], e.target.value === '1')); + } else { + this.setState({ local: e.target.value === '1' }); + } + } + + handleLoadMore = () => { + const { dispatch } = this.props; + dispatch(expandDirectory(this.getParams(this.props, this.state))); + } + + render () { + const { isLoading, accountIds, intl, columnId, multiColumn, domain, shouldUpdateScroll } = this.props; + const { order, local } = this.getParams(this.props, this.state); + const pinned = !!columnId; + + const scrollableArea = ( + <div className='scrollable' style={{ background: 'transparent' }}> + <div className='filter-form'> + <div className='filter-form__column' role='group'> + <RadioButton name='order' value='active' label={intl.formatMessage(messages.recentlyActive)} checked={order === 'active'} onChange={this.handleChangeOrder} /> + <RadioButton name='order' value='new' label={intl.formatMessage(messages.newArrivals)} checked={order === 'new'} onChange={this.handleChangeOrder} /> + </div> + + <div className='filter-form__column' role='group'> + <RadioButton name='local' value='1' label={intl.formatMessage(messages.local, { domain })} checked={local} onChange={this.handleChangeLocal} /> + <RadioButton name='local' value='0' label={intl.formatMessage(messages.federated)} checked={!local} onChange={this.handleChangeLocal} /> + </div> + </div> + + <div className={classNames('directory__list', { loading: isLoading })}> + {accountIds.map(accountId => <AccountCard id={accountId} key={accountId} />)} + </div> + + <LoadMore onClick={this.handleLoadMore} visible={!isLoading} /> + </div> + ); + + return ( + <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}> + <ColumnHeader + icon='address-book-o' + title={intl.formatMessage(messages.title)} + onPin={this.handlePin} + onMove={this.handleMove} + onClick={this.handleHeaderClick} + pinned={pinned} + multiColumn={multiColumn} + /> + + {multiColumn && !pinned ? <ScrollContainer scrollKey='directory' shouldUpdateScroll={shouldUpdateScroll}>{scrollableArea}</ScrollContainer> : scrollableArea} + </Column> + ); + } + +} diff --git a/app/javascript/mastodon/features/domain_blocks/index.js b/app/javascript/mastodon/features/domain_blocks/index.js index 7c075f5a5..482245c86 100644 --- a/app/javascript/mastodon/features/domain_blocks/index.js +++ b/app/javascript/mastodon/features/domain_blocks/index.js @@ -33,6 +33,7 @@ class Blocks extends ImmutablePureComponent { hasMore: PropTypes.bool, domains: ImmutablePropTypes.orderedSet, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -44,7 +45,7 @@ class Blocks extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { intl, domains, shouldUpdateScroll, hasMore } = this.props; + const { intl, domains, shouldUpdateScroll, hasMore, multiColumn } = this.props; if (!domains) { return ( @@ -57,7 +58,7 @@ class Blocks extends ImmutablePureComponent { const emptyMessage = <FormattedMessage id='empty_column.domain_blocks' defaultMessage='There are no hidden domains yet.' />; return ( - <Column icon='minus-circle' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} icon='minus-circle' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> <ScrollableList scrollKey='domain_blocks' @@ -65,6 +66,7 @@ class Blocks extends ImmutablePureComponent { hasMore={hasMore} shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} + bindToDocument={!multiColumn} > {domains.map(domain => <DomainContainer key={domain} domain={domain} /> diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js index 988cea253..cd10e20b7 100644 --- a/app/javascript/mastodon/features/emoji/emoji.js +++ b/app/javascript/mastodon/features/emoji/emoji.js @@ -29,7 +29,7 @@ const emojify = (str, customEmojis = {}) => { // if you want additional emoji handler, add statements below which set replacement and return true. if (shortname in customEmojis) { const filename = autoPlayGif ? customEmojis[shortname].url : customEmojis[shortname].static_url; - replacement = `<img draggable="false" class="emojione" alt="${shortname}" title="${shortname}" src="${filename}" />`; + replacement = `<img draggable="false" class="emojione custom-emoji" alt="${shortname}" title="${shortname}" src="${filename}" data-original="${customEmojis[shortname].url}" data-static="${customEmojis[shortname].static_url}" />`; return true; } return false; @@ -92,8 +92,11 @@ export const buildCustomEmojis = (customEmojis) => { keywords: [name], imageUrl: url, custom: true, + customCategory: emoji.get('category'), }); }); return emojis; }; + +export const categoriesFromEmojis = customEmojis => customEmojis.reduce((set, emoji) => set.add(emoji.get('category') ? `custom-${emoji.get('category')}` : 'custom'), new Set(['custom'])); diff --git a/app/javascript/mastodon/features/emoji/emoji_mart_search_light.js b/app/javascript/mastodon/features/emoji/emoji_mart_search_light.js index 164fdcc0b..e4519a13e 100644 --- a/app/javascript/mastodon/features/emoji/emoji_mart_search_light.js +++ b/app/javascript/mastodon/features/emoji/emoji_mart_search_light.js @@ -74,7 +74,7 @@ function search(value, { emojisToShowFilter, maxResults, include, exclude, custo return [emojisList['-1']]; } - let values = value.toLowerCase().split(/[\s|,|\-|_]+/), + let values = value.toLowerCase().split(/[\s|,\-_]+/), allResults = []; if (values.length > 2) { diff --git a/app/javascript/mastodon/features/favourited_statuses/index.js b/app/javascript/mastodon/features/favourited_statuses/index.js index fa9401b90..db8a3f815 100644 --- a/app/javascript/mastodon/features/favourited_statuses/index.js +++ b/app/javascript/mastodon/features/favourited_statuses/index.js @@ -74,7 +74,7 @@ class Favourites extends ImmutablePureComponent { const emptyMessage = <FormattedMessage id='empty_column.favourited_statuses' defaultMessage="You don't have any favourite toots yet. When you favourite one, it will show up here." />; return ( - <Column ref={this.setRef} label={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.heading)}> <ColumnHeader icon='star' title={intl.formatMessage(messages.heading)} @@ -95,6 +95,7 @@ class Favourites extends ImmutablePureComponent { onLoadMore={this.handleLoadMore} shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/mastodon/features/favourites/index.js b/app/javascript/mastodon/features/favourites/index.js index d1ac229a2..249e6a044 100644 --- a/app/javascript/mastodon/features/favourites/index.js +++ b/app/javascript/mastodon/features/favourites/index.js @@ -5,17 +5,23 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import LoadingIndicator from '../../components/loading_indicator'; import { fetchFavourites } from '../../actions/interactions'; -import { FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import AccountContainer from '../../containers/account_container'; import Column from '../ui/components/column'; -import ColumnBackButton from '../../components/column_back_button'; import ScrollableList from '../../components/scrollable_list'; +import Icon from 'mastodon/components/icon'; +import ColumnHeader from '../../components/column_header'; + +const messages = defineMessages({ + refresh: { id: 'refresh', defaultMessage: 'Refresh' }, +}); const mapStateToProps = (state, props) => ({ accountIds: state.getIn(['user_lists', 'favourited_by', props.params.statusId]), }); export default @connect(mapStateToProps) +@injectIntl class Favourites extends ImmutablePureComponent { static propTypes = { @@ -23,10 +29,14 @@ class Favourites extends ImmutablePureComponent { dispatch: PropTypes.func.isRequired, shouldUpdateScroll: PropTypes.func, accountIds: ImmutablePropTypes.list, + multiColumn: PropTypes.bool, + intl: PropTypes.object.isRequired, }; componentWillMount () { - this.props.dispatch(fetchFavourites(this.props.params.statusId)); + if (!this.props.accountIds) { + this.props.dispatch(fetchFavourites(this.props.params.statusId)); + } } componentWillReceiveProps (nextProps) { @@ -35,8 +45,12 @@ class Favourites extends ImmutablePureComponent { } } + handleRefresh = () => { + this.props.dispatch(fetchFavourites(this.props.params.statusId)); + } + render () { - const { shouldUpdateScroll, accountIds } = this.props; + const { intl, shouldUpdateScroll, accountIds, multiColumn } = this.props; if (!accountIds) { return ( @@ -49,13 +63,20 @@ class Favourites extends ImmutablePureComponent { const emptyMessage = <FormattedMessage id='empty_column.favourites' defaultMessage='No one has favourited this toot yet. When someone does, they will show up here.' />; return ( - <Column> - <ColumnBackButton /> + <Column bindToDocument={!multiColumn}> + <ColumnHeader + showBackButton + multiColumn={multiColumn} + extraButton={( + <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button> + )} + /> <ScrollableList scrollKey='favourites' shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} + bindToDocument={!multiColumn} > {accountIds.map(id => <AccountContainer key={id} id={id} withNote={false} /> diff --git a/app/javascript/mastodon/features/follow_requests/index.js b/app/javascript/mastodon/features/follow_requests/index.js index 44624cb40..57ef44145 100644 --- a/app/javascript/mastodon/features/follow_requests/index.js +++ b/app/javascript/mastodon/features/follow_requests/index.js @@ -32,6 +32,7 @@ class FollowRequests extends ImmutablePureComponent { hasMore: PropTypes.bool, accountIds: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -43,7 +44,7 @@ class FollowRequests extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { intl, shouldUpdateScroll, accountIds, hasMore } = this.props; + const { intl, shouldUpdateScroll, accountIds, hasMore, multiColumn } = this.props; if (!accountIds) { return ( @@ -56,7 +57,7 @@ class FollowRequests extends ImmutablePureComponent { const emptyMessage = <FormattedMessage id='empty_column.follow_requests' defaultMessage="You don't have any follow requests yet. When you receive one, it will show up here." />; return ( - <Column icon='user-plus' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} icon='user-plus' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> <ScrollableList scrollKey='follow_requests' @@ -64,6 +65,7 @@ class FollowRequests extends ImmutablePureComponent { hasMore={hasMore} shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} + bindToDocument={!multiColumn} > {accountIds.map(id => <AccountAuthorizeContainer key={id} id={id} /> diff --git a/app/javascript/mastodon/features/followers/index.js b/app/javascript/mastodon/features/followers/index.js index e3387e1be..9e635d250 100644 --- a/app/javascript/mastodon/features/followers/index.js +++ b/app/javascript/mastodon/features/followers/index.js @@ -36,11 +36,14 @@ class Followers extends ImmutablePureComponent { hasMore: PropTypes.bool, blockedBy: PropTypes.bool, isAccount: PropTypes.bool, + multiColumn: PropTypes.bool, }; componentWillMount () { - this.props.dispatch(fetchAccount(this.props.params.accountId)); - this.props.dispatch(fetchFollowers(this.props.params.accountId)); + if (!this.props.accountIds) { + this.props.dispatch(fetchAccount(this.props.params.accountId)); + this.props.dispatch(fetchFollowers(this.props.params.accountId)); + } } componentWillReceiveProps (nextProps) { @@ -55,7 +58,7 @@ class Followers extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount } = this.props; + const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn } = this.props; if (!isAccount) { return ( @@ -77,7 +80,7 @@ class Followers extends ImmutablePureComponent { return ( <Column> - <ColumnBackButton /> + <ColumnBackButton multiColumn={multiColumn} /> <ScrollableList scrollKey='followers' @@ -87,6 +90,7 @@ class Followers extends ImmutablePureComponent { prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />} alwaysPrepend emptyMessage={emptyMessage} + bindToDocument={!multiColumn} > {blockedBy ? [] : accountIds.map(id => <AccountContainer key={id} id={id} withNote={false} /> diff --git a/app/javascript/mastodon/features/following/index.js b/app/javascript/mastodon/features/following/index.js index 3bf89fb2b..284ae2c11 100644 --- a/app/javascript/mastodon/features/following/index.js +++ b/app/javascript/mastodon/features/following/index.js @@ -36,11 +36,14 @@ class Following extends ImmutablePureComponent { hasMore: PropTypes.bool, blockedBy: PropTypes.bool, isAccount: PropTypes.bool, + multiColumn: PropTypes.bool, }; componentWillMount () { - this.props.dispatch(fetchAccount(this.props.params.accountId)); - this.props.dispatch(fetchFollowing(this.props.params.accountId)); + if (!this.props.accountIds) { + this.props.dispatch(fetchAccount(this.props.params.accountId)); + this.props.dispatch(fetchFollowing(this.props.params.accountId)); + } } componentWillReceiveProps (nextProps) { @@ -55,7 +58,7 @@ class Following extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount } = this.props; + const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn } = this.props; if (!isAccount) { return ( @@ -77,7 +80,7 @@ class Following extends ImmutablePureComponent { return ( <Column> - <ColumnBackButton /> + <ColumnBackButton multiColumn={multiColumn} /> <ScrollableList scrollKey='following' @@ -87,6 +90,7 @@ class Following extends ImmutablePureComponent { prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />} alwaysPrepend emptyMessage={emptyMessage} + bindToDocument={!multiColumn} > {blockedBy ? [] : accountIds.map(id => <AccountContainer key={id} id={id} withNote={false} /> diff --git a/app/javascript/mastodon/features/generic_not_found/index.js b/app/javascript/mastodon/features/generic_not_found/index.js index 0290be47f..41cd61a5f 100644 --- a/app/javascript/mastodon/features/generic_not_found/index.js +++ b/app/javascript/mastodon/features/generic_not_found/index.js @@ -4,7 +4,7 @@ import MissingIndicator from '../../components/missing_indicator'; const GenericNotFound = () => ( <Column> - <MissingIndicator /> + <MissingIndicator fullPage /> </Column> ); diff --git a/app/javascript/mastodon/features/getting_started/components/trends.js b/app/javascript/mastodon/features/getting_started/components/trends.js new file mode 100644 index 000000000..3b9a3075f --- /dev/null +++ b/app/javascript/mastodon/features/getting_started/components/trends.js @@ -0,0 +1,46 @@ +import React from 'react'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import Hashtag from 'mastodon/components/hashtag'; +import { FormattedMessage } from 'react-intl'; + +export default class Trends extends ImmutablePureComponent { + + static defaultProps = { + loading: false, + }; + + static propTypes = { + trends: ImmutablePropTypes.list, + fetchTrends: PropTypes.func.isRequired, + }; + + componentDidMount () { + this.props.fetchTrends(); + this.refreshInterval = setInterval(() => this.props.fetchTrends(), 900 * 1000); + } + + componentWillUnmount () { + if (this.refreshInterval) { + clearInterval(this.refreshInterval); + } + } + + render () { + const { trends } = this.props; + + if (!trends || trends.isEmpty()) { + return null; + } + + return ( + <div className='getting-started__trends'> + <h4><FormattedMessage id='trends.trending_now' defaultMessage='Trending now' /></h4> + + {trends.take(3).map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)} + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/getting_started/containers/trends_container.js b/app/javascript/mastodon/features/getting_started/containers/trends_container.js new file mode 100644 index 000000000..1df3fb4fe --- /dev/null +++ b/app/javascript/mastodon/features/getting_started/containers/trends_container.js @@ -0,0 +1,13 @@ +import { connect } from 'react-redux'; +import { fetchTrends } from '../../../actions/trends'; +import Trends from '../components/trends'; + +const mapStateToProps = state => ({ + trends: state.getIn(['trends', 'items']), +}); + +const mapDispatchToProps = dispatch => ({ + fetchTrends: () => dispatch(fetchTrends()), +}); + +export default connect(mapStateToProps, mapDispatchToProps)(Trends); diff --git a/app/javascript/mastodon/features/getting_started/index.js b/app/javascript/mastodon/features/getting_started/index.js index fc7840ec1..adbc147d1 100644 --- a/app/javascript/mastodon/features/getting_started/index.js +++ b/app/javascript/mastodon/features/getting_started/index.js @@ -7,12 +7,13 @@ import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { me, profile_directory } from '../../initial_state'; +import { me, profile_directory, showTrends } from '../../initial_state'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import { List as ImmutableList } from 'immutable'; import NavigationBar from '../compose/components/navigation_bar'; import Icon from 'mastodon/components/icon'; import LinkFooter from 'mastodon/features/ui/components/link_footer'; +import TrendsContainer from './containers/trends_container'; const messages = defineMessages({ home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' }, @@ -21,6 +22,7 @@ const messages = defineMessages({ settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' }, community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' }, direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' }, + bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' }, preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' }, @@ -76,16 +78,14 @@ class GettingStarted extends ImmutablePureComponent { }; componentDidMount () { - const { myAccount, fetchFollowRequests, multiColumn } = this.props; + const { fetchFollowRequests, multiColumn } = this.props; if (!multiColumn && window.innerWidth >= NAVIGATION_PANEL_BREAKPOINT) { this.context.router.history.replace('/timelines/home'); return; } - if (myAccount.get('locked')) { - fetchFollowRequests(); - } + fetchFollowRequests(); } render () { @@ -106,7 +106,7 @@ class GettingStarted extends ImmutablePureComponent { if (profile_directory) { navItems.push( - <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} href='/explore' /> + <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' /> ); height += 48; @@ -119,7 +119,7 @@ class GettingStarted extends ImmutablePureComponent { height += 34; } else if (profile_directory) { navItems.push( - <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} href='/explore' /> + <ColumnLink key={i++} icon='address-book' text={intl.formatMessage(messages.profile_directory)} to='/directory' /> ); height += 48; @@ -127,13 +127,14 @@ class GettingStarted extends ImmutablePureComponent { navItems.push( <ColumnLink key={i++} icon='envelope' text={intl.formatMessage(messages.direct)} to='/timelines/direct' />, + <ColumnLink key={i++} icon='bookmark' text={intl.formatMessage(messages.bookmarks)} to='/bookmarks' />, <ColumnLink key={i++} icon='star' text={intl.formatMessage(messages.favourites)} to='/favourites' />, <ColumnLink key={i++} icon='list-ul' text={intl.formatMessage(messages.lists)} to='/lists' /> ); - height += 48*3; + height += 48*4; - if (myAccount.get('locked')) { + if (myAccount.get('locked') || unreadFollowRequests > 0) { navItems.push(<ColumnLink key={i++} icon='user-plus' text={intl.formatMessage(messages.follow_requests)} badge={badgeDisplay(unreadFollowRequests, 40)} to='/follow_requests' />); height += 48; } @@ -148,7 +149,7 @@ class GettingStarted extends ImmutablePureComponent { } return ( - <Column label={intl.formatMessage(messages.menu)}> + <Column bindToDocument={!multiColumn} label={intl.formatMessage(messages.menu)}> {multiColumn && <div className='column-header__wrapper'> <h1 className='column-header'> <button> @@ -168,6 +169,8 @@ class GettingStarted extends ImmutablePureComponent { <LinkFooter withHotkeys={multiColumn} /> </div> + + {multiColumn && showTrends && <TrendsContainer />} </Column> ); } diff --git a/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.js b/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.js index cdc138c8b..9c39b158a 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.js +++ b/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import Toggle from 'react-toggle'; -import AsyncSelect from 'react-select/lib/Async'; +import AsyncSelect from 'react-select/async'; const messages = defineMessages({ placeholder: { id: 'hashtag.column_settings.select.placeholder', defaultMessage: 'Enter hashtags…' }, diff --git a/app/javascript/mastodon/features/hashtag_timeline/containers/column_settings_container.js b/app/javascript/mastodon/features/hashtag_timeline/containers/column_settings_container.js index c5098052c..5914bbeaf 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/containers/column_settings_container.js +++ b/app/javascript/mastodon/features/hashtag_timeline/containers/column_settings_container.js @@ -20,7 +20,7 @@ const mapDispatchToProps = (dispatch, { columnId }) => ({ }, onLoad (value) { - return api().get('/api/v2/search', { params: { q: value } }).then(response => { + return api().get('/api/v2/search', { params: { q: value, type: 'hashtags' } }).then(response => { return (response.data.hashtags || []).map((tag) => { return { value: tag.name, label: `#${tag.name}` }; }); diff --git a/app/javascript/mastodon/features/hashtag_timeline/index.js b/app/javascript/mastodon/features/hashtag_timeline/index.js index 0d3c97a64..28200e6c2 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/index.js +++ b/app/javascript/mastodon/features/hashtag_timeline/index.js @@ -135,7 +135,7 @@ class HashtagTimeline extends React.PureComponent { const pinned = !!columnId; return ( - <Column ref={this.setRef} label={`#${id}`}> + <Column bindToDocument={!multiColumn} ref={this.setRef} label={`#${id}`}> <ColumnHeader icon='hashtag' active={hasUnread} @@ -157,6 +157,7 @@ class HashtagTimeline extends React.PureComponent { onLoadMore={this.handleLoadMore} emptyMessage={<FormattedMessage id='empty_column.hashtag' defaultMessage='There is nothing in this hashtag yet.' />} shouldUpdateScroll={shouldUpdateScroll} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/mastodon/features/home_timeline/index.js b/app/javascript/mastodon/features/home_timeline/index.js index 097f91c16..1cafb88ed 100644 --- a/app/javascript/mastodon/features/home_timeline/index.js +++ b/app/javascript/mastodon/features/home_timeline/index.js @@ -98,7 +98,7 @@ class HomeTimeline extends React.PureComponent { const pinned = !!columnId; return ( - <Column ref={this.setRef} label={intl.formatMessage(messages.title)}> + <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}> <ColumnHeader icon='home' active={hasUnread} @@ -119,6 +119,7 @@ class HomeTimeline extends React.PureComponent { timelineId='home' emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Visit {public} or use search to get started and meet other users.' values={{ public: <Link to='/timelines/public'><FormattedMessage id='empty_column.home.public_timeline' defaultMessage='the public timeline' /></Link> }} />} shouldUpdateScroll={shouldUpdateScroll} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/mastodon/features/keyboard_shortcuts/index.js b/app/javascript/mastodon/features/keyboard_shortcuts/index.js index 01b45652c..666baf621 100644 --- a/app/javascript/mastodon/features/keyboard_shortcuts/index.js +++ b/app/javascript/mastodon/features/keyboard_shortcuts/index.js @@ -18,10 +18,10 @@ class KeyboardShortcuts extends ImmutablePureComponent { }; render () { - const { intl } = this.props; + const { intl, multiColumn } = this.props; return ( - <Column icon='question' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} icon='question' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> <div className='keyboard-shortcuts scrollable optionally-scrollable'> <table> @@ -57,6 +57,10 @@ class KeyboardShortcuts extends ImmutablePureComponent { <td><FormattedMessage id='keyboard_shortcuts.enter' defaultMessage='to open status' /></td> </tr> <tr> + <td><kbd>e</kbd></td> + <td><FormattedMessage id='keyboard_shortcuts.open_media' defaultMessage='to open media' /></td> + </tr> + <tr> <td><kbd>x</kbd></td> <td><FormattedMessage id='keyboard_shortcuts.toggle_hidden' defaultMessage='to show/hide text behind CW' /></td> </tr> diff --git a/app/javascript/mastodon/features/list_editor/components/edit_list_form.js b/app/javascript/mastodon/features/list_editor/components/edit_list_form.js index 3dc59c12e..3ccab12a8 100644 --- a/app/javascript/mastodon/features/list_editor/components/edit_list_form.js +++ b/app/javascript/mastodon/features/list_editor/components/edit_list_form.js @@ -11,7 +11,7 @@ const messages = defineMessages({ const mapStateToProps = state => ({ value: state.getIn(['listEditor', 'title']), - disabled: !state.getIn(['listEditor', 'isChanged']), + disabled: !state.getIn(['listEditor', 'isChanged']) || !state.getIn(['listEditor', 'title']), }); const mapDispatchToProps = dispatch => ({ diff --git a/app/javascript/mastodon/features/list_timeline/index.js b/app/javascript/mastodon/features/list_timeline/index.js index 0db6d2228..f3205b2bf 100644 --- a/app/javascript/mastodon/features/list_timeline/index.js +++ b/app/javascript/mastodon/features/list_timeline/index.js @@ -148,14 +148,14 @@ class ListTimeline extends React.PureComponent { } else if (list === false) { return ( <Column> - <ColumnBackButton /> + <ColumnBackButton multiColumn={multiColumn} /> <MissingIndicator /> </Column> ); } return ( - <Column ref={this.setRef} label={title}> + <Column bindToDocument={!multiColumn} ref={this.setRef} label={title}> <ColumnHeader icon='list-ul' active={hasUnread} @@ -184,6 +184,7 @@ class ListTimeline extends React.PureComponent { onLoadMore={this.handleLoadMore} emptyMessage={<FormattedMessage id='empty_column.list' defaultMessage='There is nothing in this list yet. When members of this list post new statuses, they will appear here.' />} shouldUpdateScroll={shouldUpdateScroll} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/mastodon/features/lists/components/new_list_form.js b/app/javascript/mastodon/features/lists/components/new_list_form.js index 739246640..7faf50be8 100644 --- a/app/javascript/mastodon/features/lists/components/new_list_form.js +++ b/app/javascript/mastodon/features/lists/components/new_list_form.js @@ -66,7 +66,7 @@ class NewListForm extends React.PureComponent { </label> <IconButton - disabled={disabled} + disabled={disabled || !value} icon='plus' title={title} onClick={this.handleClick} diff --git a/app/javascript/mastodon/features/lists/index.js b/app/javascript/mastodon/features/lists/index.js index 015e21b68..7f7f5009c 100644 --- a/app/javascript/mastodon/features/lists/index.js +++ b/app/javascript/mastodon/features/lists/index.js @@ -40,6 +40,7 @@ class Lists extends ImmutablePureComponent { dispatch: PropTypes.func.isRequired, lists: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -47,7 +48,7 @@ class Lists extends ImmutablePureComponent { } render () { - const { intl, shouldUpdateScroll, lists } = this.props; + const { intl, shouldUpdateScroll, lists, multiColumn } = this.props; if (!lists) { return ( @@ -60,7 +61,7 @@ class Lists extends ImmutablePureComponent { const emptyMessage = <FormattedMessage id='empty_column.lists' defaultMessage="You don't have any lists yet. When you create one, it will show up here." />; return ( - <Column icon='list-ul' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} icon='list-ul' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> <NewListForm /> @@ -70,6 +71,7 @@ class Lists extends ImmutablePureComponent { shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} prepend={<ColumnSubheading text={intl.formatMessage(messages.subheading)} />} + bindToDocument={!multiColumn} > {lists.map(list => <ColumnLink key={list.get('id')} to={`/timelines/list/${list.get('id')}`} icon='list-ul' text={list.get('title')} /> diff --git a/app/javascript/mastodon/features/mutes/index.js b/app/javascript/mastodon/features/mutes/index.js index 4ed29a1ce..91dd268c1 100644 --- a/app/javascript/mastodon/features/mutes/index.js +++ b/app/javascript/mastodon/features/mutes/index.js @@ -32,6 +32,7 @@ class Mutes extends ImmutablePureComponent { hasMore: PropTypes.bool, accountIds: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -43,7 +44,7 @@ class Mutes extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { intl, shouldUpdateScroll, hasMore, accountIds } = this.props; + const { intl, shouldUpdateScroll, hasMore, accountIds, multiColumn } = this.props; if (!accountIds) { return ( @@ -56,7 +57,7 @@ class Mutes extends ImmutablePureComponent { const emptyMessage = <FormattedMessage id='empty_column.mutes' defaultMessage="You haven't muted any users yet." />; return ( - <Column icon='volume-off' heading={intl.formatMessage(messages.heading)}> + <Column bindToDocument={!multiColumn} icon='volume-off' heading={intl.formatMessage(messages.heading)}> <ColumnBackButtonSlim /> <ScrollableList scrollKey='mutes' @@ -64,6 +65,7 @@ class Mutes extends ImmutablePureComponent { hasMore={hasMore} shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} + bindToDocument={!multiColumn} > {accountIds.map(id => <AccountContainer key={id} id={id} /> diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.js b/app/javascript/mastodon/features/notifications/components/column_settings.js index 60a86312a..8bd03fbda 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.js +++ b/app/javascript/mastodon/features/notifications/components/column_settings.js @@ -57,6 +57,17 @@ export default class ColumnSettings extends React.PureComponent { </div> </div> + <div role='group' aria-labelledby='notifications-follow-request'> + <span id='notifications-follow-request' className='column-settings__section'><FormattedMessage id='notifications.column_settings.follow_request' defaultMessage='New follow requests:' /></span> + + <div className='column-settings__row'> + <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow_request']} onChange={onChange} label={alertStr} /> + {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow_request']} onChange={this.onPushChange} label={pushStr} />} + <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow_request']} onChange={onChange} label={showStr} /> + <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow_request']} onChange={onChange} label={soundStr} /> + </div> + </div> + <div role='group' aria-labelledby='notifications-favourite'> <span id='notifications-favourite' className='column-settings__section'><FormattedMessage id='notifications.column_settings.favourite' defaultMessage='Favourites:' /></span> diff --git a/app/javascript/mastodon/features/notifications/components/filter_bar.js b/app/javascript/mastodon/features/notifications/components/filter_bar.js index 3f3e6ab7d..2fd28d832 100644 --- a/app/javascript/mastodon/features/notifications/components/filter_bar.js +++ b/app/javascript/mastodon/features/notifications/components/filter_bar.js @@ -64,7 +64,7 @@ class FilterBar extends React.PureComponent { onClick={this.onClick('mention')} title={intl.formatMessage(tooltips.mentions)} > - <Icon id='at' fixedWidth /> + <Icon id='reply-all' fixedWidth /> </button> <button className={selectedFilter === 'favourite' ? 'active' : ''} diff --git a/app/javascript/mastodon/features/notifications/components/follow_request.js b/app/javascript/mastodon/features/notifications/components/follow_request.js new file mode 100644 index 000000000..a80cfb2fa --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/follow_request.js @@ -0,0 +1,59 @@ +import React, { Fragment } from 'react'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import Avatar from 'mastodon/components/avatar'; +import DisplayName from 'mastodon/components/display_name'; +import Permalink from 'mastodon/components/permalink'; +import IconButton from 'mastodon/components/icon_button'; +import { defineMessages, injectIntl } from 'react-intl'; +import ImmutablePureComponent from 'react-immutable-pure-component'; + +const messages = defineMessages({ + authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' }, + reject: { id: 'follow_request.reject', defaultMessage: 'Reject' }, +}); + +export default @injectIntl +class FollowRequest extends ImmutablePureComponent { + + static propTypes = { + account: ImmutablePropTypes.map.isRequired, + onAuthorize: PropTypes.func.isRequired, + onReject: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; + + render () { + const { intl, hidden, account, onAuthorize, onReject } = this.props; + + if (!account) { + return <div />; + } + + if (hidden) { + return ( + <Fragment> + {account.get('display_name')} + {account.get('username')} + </Fragment> + ); + } + + return ( + <div className='account'> + <div className='account__wrapper'> + <Permalink key={account.get('id')} className='account__display-name' title={account.get('acct')} href={account.get('url')} to={`/accounts/${account.get('id')}`}> + <div className='account__avatar-wrapper'><Avatar account={account} size={36} /></div> + <DisplayName account={account} /> + </Permalink> + + <div className='account__relationship'> + <IconButton title={intl.formatMessage(messages.authorize)} icon='check' onClick={onAuthorize} /> + <IconButton title={intl.formatMessage(messages.reject)} icon='times' onClick={onReject} /> + </div> + </div> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/notifications/components/notification.js b/app/javascript/mastodon/features/notifications/components/notification.js index 41e9324e6..74065e5e2 100644 --- a/app/javascript/mastodon/features/notifications/components/notification.js +++ b/app/javascript/mastodon/features/notifications/components/notification.js @@ -1,13 +1,23 @@ import React from 'react'; -import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import StatusContainer from '../../../containers/status_container'; -import AccountContainer from '../../../containers/account_container'; -import { injectIntl, FormattedMessage } from 'react-intl'; -import Permalink from '../../../components/permalink'; -import ImmutablePureComponent from 'react-immutable-pure-component'; +import { injectIntl, FormattedMessage, defineMessages } from 'react-intl'; import { HotKeys } from 'react-hotkeys'; +import PropTypes from 'prop-types'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import { me } from 'mastodon/initial_state'; +import StatusContainer from 'mastodon/containers/status_container'; +import AccountContainer from 'mastodon/containers/account_container'; +import FollowRequestContainer from '../containers/follow_request_container'; import Icon from 'mastodon/components/icon'; +import Permalink from 'mastodon/components/permalink'; + +const messages = defineMessages({ + favourite: { id: 'notification.favourite', defaultMessage: '{name} favourited your status' }, + follow: { id: 'notification.follow', defaultMessage: '{name} followed you' }, + ownPoll: { id: 'notification.own_poll', defaultMessage: 'Your poll has ended' }, + poll: { id: 'notification.poll', defaultMessage: 'A poll you have voted in has ended' }, + reblog: { id: 'notification.reblog', defaultMessage: '{name} boosted your status' }, +}); const notificationForScreenReader = (intl, message, timestamp) => { const output = [message]; @@ -107,7 +117,7 @@ class Notification extends ImmutablePureComponent { return ( <HotKeys handlers={this.getHandlers()}> - <div className='notification notification-follow focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.follow', defaultMessage: '{name} followed you' }, { name: account.get('acct') }), notification.get('created_at'))}> + <div className='notification notification-follow focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.follow, { name: account.get('acct') }), notification.get('created_at'))}> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> <Icon id='user-plus' fixedWidth /> @@ -118,7 +128,29 @@ class Notification extends ImmutablePureComponent { </span> </div> - <AccountContainer id={account.get('id')} withNote={false} hidden={this.props.hidden} /> + <AccountContainer id={account.get('id')} hidden={this.props.hidden} /> + </div> + </HotKeys> + ); + } + + renderFollowRequest (notification, account, link) { + const { intl } = this.props; + + return ( + <HotKeys handlers={this.getHandlers()}> + <div className='notification notification-follow-request focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.follow_request', defaultMessage: '{name} has requested to follow you' }, { name: account.get('acct') }), notification.get('created_at'))}> + <div className='notification__message'> + <div className='notification__favourite-icon-wrapper'> + <Icon id='user' fixedWidth /> + </div> + + <span title={notification.get('created_at')}> + <FormattedMessage id='notification.follow_request' defaultMessage='{name} has requested to follow you' values={{ name: link }} /> + </span> + </div> + + <FollowRequestContainer id={account.get('id')} withNote={false} hidden={this.props.hidden} /> </div> </HotKeys> ); @@ -146,7 +178,7 @@ class Notification extends ImmutablePureComponent { return ( <HotKeys handlers={this.getHandlers()}> - <div className='notification notification-favourite focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.favourite', defaultMessage: '{name} favourited your status' }, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> + <div className='notification notification-favourite focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.favourite, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> <Icon id='star' className='star-icon' fixedWidth /> @@ -178,7 +210,7 @@ class Notification extends ImmutablePureComponent { return ( <HotKeys handlers={this.getHandlers()}> - <div className='notification notification-reblog focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.reblog', defaultMessage: '{name} boosted your status' }, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> + <div className='notification notification-reblog focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.reblog, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> <Icon id='retweet' fixedWidth /> @@ -205,25 +237,31 @@ class Notification extends ImmutablePureComponent { ); } - renderPoll (notification) { + renderPoll (notification, account) { const { intl } = this.props; + const ownPoll = me === account.get('id'); + const message = ownPoll ? intl.formatMessage(messages.ownPoll) : intl.formatMessage(messages.poll); return ( <HotKeys handlers={this.getHandlers()}> - <div className='notification notification-poll focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage({ id: 'notification.poll', defaultMessage: 'A poll you have voted in has ended' }), notification.get('created_at'))}> + <div className='notification notification-poll focusable' tabIndex='0' aria-label={notificationForScreenReader(intl, message, notification.get('created_at'))}> <div className='notification__message'> <div className='notification__favourite-icon-wrapper'> <Icon id='tasks' fixedWidth /> </div> <span title={notification.get('created_at')}> - <FormattedMessage id='notification.poll' defaultMessage='A poll you have voted in has ended' /> + {ownPoll ? ( + <FormattedMessage id='notification.own_poll' defaultMessage='Your poll has ended' /> + ) : ( + <FormattedMessage id='notification.poll' defaultMessage='A poll you have voted in has ended' /> + )} </span> </div> <StatusContainer id={notification.get('status')} - account={notification.get('account')} + account={account} muted withDismiss hidden={this.props.hidden} @@ -246,6 +284,8 @@ class Notification extends ImmutablePureComponent { switch(notification.get('type')) { case 'follow': return this.renderFollow(notification, account, link); + case 'follow_request': + return this.renderFollowRequest(notification, account, link); case 'mention': return this.renderMention(notification); case 'favourite': @@ -253,7 +293,7 @@ class Notification extends ImmutablePureComponent { case 'reblog': return this.renderReblog(notification, link); case 'poll': - return this.renderPoll(notification); + return this.renderPoll(notification, account); } return null; diff --git a/app/javascript/mastodon/features/notifications/components/setting_toggle.js b/app/javascript/mastodon/features/notifications/components/setting_toggle.js index 7aec16d2e..e6f593ef8 100644 --- a/app/javascript/mastodon/features/notifications/components/setting_toggle.js +++ b/app/javascript/mastodon/features/notifications/components/setting_toggle.js @@ -11,6 +11,7 @@ export default class SettingToggle extends React.PureComponent { settingPath: PropTypes.array.isRequired, label: PropTypes.node.isRequired, onChange: PropTypes.func.isRequired, + defaultValue: PropTypes.bool, } onChange = ({ target }) => { @@ -18,12 +19,12 @@ export default class SettingToggle extends React.PureComponent { } render () { - const { prefix, settings, settingPath, label } = this.props; + const { prefix, settings, settingPath, label, defaultValue } = this.props; const id = ['setting-toggle', prefix, ...settingPath].filter(Boolean).join('-'); return ( <div className='setting-toggle'> - <Toggle id={id} checked={settings.getIn(settingPath)} onChange={this.onChange} onKeyDown={this.onKeyDown} /> + <Toggle id={id} checked={settings.getIn(settingPath, defaultValue)} onChange={this.onChange} onKeyDown={this.onKeyDown} /> <label htmlFor={id} className='setting-toggle__label'>{label}</label> </div> ); diff --git a/app/javascript/mastodon/features/notifications/containers/follow_request_container.js b/app/javascript/mastodon/features/notifications/containers/follow_request_container.js new file mode 100644 index 000000000..f9f6c577e --- /dev/null +++ b/app/javascript/mastodon/features/notifications/containers/follow_request_container.js @@ -0,0 +1,26 @@ +import { connect } from 'react-redux'; +import { makeGetAccount } from 'mastodon/selectors'; +import FollowRequest from '../components/follow_request'; +import { authorizeFollowRequest, rejectFollowRequest } from 'mastodon/actions/accounts'; + +const makeMapStateToProps = () => { + const getAccount = makeGetAccount(); + + const mapStateToProps = (state, props) => ({ + account: getAccount(state, props.id), + }); + + return mapStateToProps; +}; + +const mapDispatchToProps = (dispatch, { id }) => ({ + onAuthorize () { + dispatch(authorizeFollowRequest(id)); + }, + + onReject () { + dispatch(rejectFollowRequest(id)); + }, +}); + +export default connect(makeMapStateToProps, mapDispatchToProps)(FollowRequest); diff --git a/app/javascript/mastodon/features/notifications/index.js b/app/javascript/mastodon/features/notifications/index.js index 006c45657..d16a0f33a 100644 --- a/app/javascript/mastodon/features/notifications/index.js +++ b/app/javascript/mastodon/features/notifications/index.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import Column from '../../components/column'; import ColumnHeader from '../../components/column_header'; -import { expandNotifications, scrollTopNotifications } from '../../actions/notifications'; +import { expandNotifications, scrollTopNotifications, loadPending, mountNotifications, unmountNotifications } from '../../actions/notifications'; import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; import NotificationContainer from './containers/notification_container'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; @@ -39,8 +39,9 @@ const mapStateToProps = state => ({ showFilterBar: state.getIn(['settings', 'notifications', 'quickFilter', 'show']), notifications: getNotifications(state), isLoading: state.getIn(['notifications', 'isLoading'], true), - isUnread: state.getIn(['notifications', 'unread']) > 0, + isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0, hasMore: state.getIn(['notifications', 'hasMore']), + numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size, }); export default @connect(mapStateToProps) @@ -58,17 +59,23 @@ class Notifications extends React.PureComponent { isUnread: PropTypes.bool, multiColumn: PropTypes.bool, hasMore: PropTypes.bool, + numPending: PropTypes.number, }; static defaultProps = { trackScroll: true, }; + componentWillMount() { + this.props.dispatch(mountNotifications()); + } + componentWillUnmount () { this.handleLoadOlder.cancel(); this.handleScrollToTop.cancel(); this.handleScroll.cancel(); this.props.dispatch(scrollTopNotifications(false)); + this.props.dispatch(unmountNotifications()); } handleLoadGap = (maxId) => { @@ -80,6 +87,10 @@ class Notifications extends React.PureComponent { this.props.dispatch(expandNotifications({ maxId: last && last.get('id') })); }, 300, { leading: true }); + handleLoadPending = () => { + this.props.dispatch(loadPending()); + }; + handleScrollToTop = debounce(() => { this.props.dispatch(scrollTopNotifications(true)); }, 100); @@ -136,7 +147,7 @@ class Notifications extends React.PureComponent { } render () { - const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, showFilterBar } = this.props; + const { intl, notifications, shouldUpdateScroll, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar } = this.props; const pinned = !!columnId; const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. Interact with others to start the conversation." />; @@ -178,18 +189,21 @@ class Notifications extends React.PureComponent { isLoading={isLoading} showLoading={isLoading && notifications.size === 0} hasMore={hasMore} + numPending={numPending} emptyMessage={emptyMessage} onLoadMore={this.handleLoadOlder} + onLoadPending={this.handleLoadPending} onScrollToTop={this.handleScrollToTop} onScroll={this.handleScroll} shouldUpdateScroll={shouldUpdateScroll} + bindToDocument={!multiColumn} > {scrollableContent} </ScrollableList> ); return ( - <Column ref={this.setColumnRef} label={intl.formatMessage(messages.title)}> + <Column bindToDocument={!multiColumn} ref={this.setColumnRef} label={intl.formatMessage(messages.title)}> <ColumnHeader icon='bell' active={isUnread} diff --git a/app/javascript/mastodon/features/pinned_statuses/index.js b/app/javascript/mastodon/features/pinned_statuses/index.js index 98cdbda3c..ad5c9cafc 100644 --- a/app/javascript/mastodon/features/pinned_statuses/index.js +++ b/app/javascript/mastodon/features/pinned_statuses/index.js @@ -28,6 +28,7 @@ class PinnedStatuses extends ImmutablePureComponent { statusIds: ImmutablePropTypes.list.isRequired, intl: PropTypes.object.isRequired, hasMore: PropTypes.bool.isRequired, + multiColumn: PropTypes.bool, }; componentWillMount () { @@ -43,16 +44,17 @@ class PinnedStatuses extends ImmutablePureComponent { } render () { - const { intl, shouldUpdateScroll, statusIds, hasMore } = this.props; + const { intl, shouldUpdateScroll, statusIds, hasMore, multiColumn } = this.props; return ( - <Column icon='thumb-tack' heading={intl.formatMessage(messages.heading)} ref={this.setRef}> + <Column bindToDocument={!multiColumn} icon='thumb-tack' heading={intl.formatMessage(messages.heading)} ref={this.setRef}> <ColumnBackButtonSlim /> <StatusList statusIds={statusIds} scrollKey='pinned_statuses' hasMore={hasMore} shouldUpdateScroll={shouldUpdateScroll} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/mastodon/features/public_timeline/index.js b/app/javascript/mastodon/features/public_timeline/index.js index 2b7d9c56f..7aabd7f6e 100644 --- a/app/javascript/mastodon/features/public_timeline/index.js +++ b/app/javascript/mastodon/features/public_timeline/index.js @@ -14,14 +14,16 @@ const messages = defineMessages({ title: { id: 'column.public', defaultMessage: 'Federated timeline' }, }); -const mapStateToProps = (state, { onlyMedia, columnId }) => { +const mapStateToProps = (state, { columnId }) => { const uuid = columnId; const columns = state.getIn(['settings', 'columns']); const index = columns.findIndex(c => c.get('uuid') === uuid); + const onlyMedia = (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'public', 'other', 'onlyMedia']); + const timelineState = state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`]); return { - hasUnread: state.getIn(['timelines', `public${onlyMedia ? ':media' : ''}`, 'unread']) > 0, - onlyMedia: (columnId && index >= 0) ? columns.get(index).getIn(['params', 'other', 'onlyMedia']) : state.getIn(['settings', 'public', 'other', 'onlyMedia']), + hasUnread: !!timelineState && timelineState.get('unread') > 0, + onlyMedia, }; }; @@ -105,7 +107,7 @@ class PublicTimeline extends React.PureComponent { const pinned = !!columnId; return ( - <Column ref={this.setRef} label={intl.formatMessage(messages.title)}> + <Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}> <ColumnHeader icon='globe' active={hasUnread} @@ -126,6 +128,7 @@ class PublicTimeline extends React.PureComponent { scrollKey={`public_timeline-${columnId}`} emptyMessage={<FormattedMessage id='empty_column.public' defaultMessage='There is nothing here! Write something publicly, or manually follow users from other servers to fill it up' />} shouldUpdateScroll={shouldUpdateScroll} + bindToDocument={!multiColumn} /> </Column> ); diff --git a/app/javascript/mastodon/features/reblogs/index.js b/app/javascript/mastodon/features/reblogs/index.js index c05d21c74..9179e51db 100644 --- a/app/javascript/mastodon/features/reblogs/index.js +++ b/app/javascript/mastodon/features/reblogs/index.js @@ -5,17 +5,23 @@ import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import LoadingIndicator from '../../components/loading_indicator'; import { fetchReblogs } from '../../actions/interactions'; -import { FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import AccountContainer from '../../containers/account_container'; import Column from '../ui/components/column'; -import ColumnBackButton from '../../components/column_back_button'; import ScrollableList from '../../components/scrollable_list'; +import Icon from 'mastodon/components/icon'; +import ColumnHeader from '../../components/column_header'; + +const messages = defineMessages({ + refresh: { id: 'refresh', defaultMessage: 'Refresh' }, +}); const mapStateToProps = (state, props) => ({ accountIds: state.getIn(['user_lists', 'reblogged_by', props.params.statusId]), }); export default @connect(mapStateToProps) +@injectIntl class Reblogs extends ImmutablePureComponent { static propTypes = { @@ -23,10 +29,14 @@ class Reblogs extends ImmutablePureComponent { dispatch: PropTypes.func.isRequired, shouldUpdateScroll: PropTypes.func, accountIds: ImmutablePropTypes.list, + multiColumn: PropTypes.bool, + intl: PropTypes.object.isRequired, }; componentWillMount () { - this.props.dispatch(fetchReblogs(this.props.params.statusId)); + if (!this.props.accountIds) { + this.props.dispatch(fetchReblogs(this.props.params.statusId)); + } } componentWillReceiveProps(nextProps) { @@ -35,8 +45,12 @@ class Reblogs extends ImmutablePureComponent { } } + handleRefresh = () => { + this.props.dispatch(fetchReblogs(this.props.params.statusId)); + } + render () { - const { shouldUpdateScroll, accountIds } = this.props; + const { intl, shouldUpdateScroll, accountIds, multiColumn } = this.props; if (!accountIds) { return ( @@ -49,13 +63,20 @@ class Reblogs extends ImmutablePureComponent { const emptyMessage = <FormattedMessage id='status.reblogs.empty' defaultMessage='No one has boosted this toot yet. When someone does, they will show up here.' />; return ( - <Column> - <ColumnBackButton /> + <Column bindToDocument={!multiColumn}> + <ColumnHeader + showBackButton + multiColumn={multiColumn} + extraButton={( + <button className='column-header__button' title={intl.formatMessage(messages.refresh)} aria-label={intl.formatMessage(messages.refresh)} onClick={this.handleRefresh}><Icon id='refresh' /></button> + )} + /> <ScrollableList scrollKey='reblogs' shouldUpdateScroll={shouldUpdateScroll} emptyMessage={emptyMessage} + bindToDocument={!multiColumn} > {accountIds.map(id => <AccountContainer key={id} id={id} withNote={false} /> diff --git a/app/javascript/mastodon/features/status/components/action_bar.js b/app/javascript/mastodon/features/status/components/action_bar.js index 3e511b7a6..bf6469f2f 100644 --- a/app/javascript/mastodon/features/status/components/action_bar.js +++ b/app/javascript/mastodon/features/status/components/action_bar.js @@ -1,5 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; import IconButton from '../../../components/icon_button'; import ImmutablePropTypes from 'react-immutable-proptypes'; import DropdownMenuContainer from '../../../containers/dropdown_menu_container'; @@ -17,6 +18,7 @@ const messages = defineMessages({ cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' }, cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' }, favourite: { id: 'status.favourite', defaultMessage: 'Favourite' }, + bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' }, mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' }, muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' }, unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' }, @@ -29,9 +31,18 @@ const messages = defineMessages({ admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' }, admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' }, copy: { id: 'status.copy', defaultMessage: 'Copy link to status' }, + blockDomain: { id: 'account.block_domain', defaultMessage: 'Hide everything from {domain}' }, + unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' }, + unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' }, + unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, }); -export default @injectIntl +const mapStateToProps = (state, { status }) => ({ + relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]), +}); + +export default @connect(mapStateToProps) +@injectIntl class ActionBar extends React.PureComponent { static contextTypes = { @@ -40,15 +51,21 @@ class ActionBar extends React.PureComponent { static propTypes = { status: ImmutablePropTypes.map.isRequired, + relationship: ImmutablePropTypes.map, onReply: PropTypes.func.isRequired, onReblog: PropTypes.func.isRequired, onFavourite: PropTypes.func.isRequired, + onBookmark: PropTypes.func.isRequired, onDelete: PropTypes.func.isRequired, onDirect: PropTypes.func.isRequired, onMention: PropTypes.func.isRequired, onMute: PropTypes.func, - onMuteConversation: PropTypes.func, + onUnmute: PropTypes.func, onBlock: PropTypes.func, + onUnblock: PropTypes.func, + onBlockDomain: PropTypes.func, + onUnblockDomain: PropTypes.func, + onMuteConversation: PropTypes.func, onReport: PropTypes.func, onPin: PropTypes.func, onEmbed: PropTypes.func, @@ -67,6 +84,10 @@ class ActionBar extends React.PureComponent { this.props.onFavourite(this.props.status); } + handleBookmarkClick = (e) => { + this.props.onBookmark(this.props.status, e); + } + handleDeleteClick = () => { this.props.onDelete(this.props.status, this.context.router.history); } @@ -84,15 +105,43 @@ class ActionBar extends React.PureComponent { } handleMuteClick = () => { - this.props.onMute(this.props.status.get('account')); - } + const { status, relationship, onMute, onUnmute } = this.props; + const account = status.get('account'); - handleConversationMuteClick = () => { - this.props.onMuteConversation(this.props.status); + if (relationship && relationship.get('muting')) { + onUnmute(account); + } else { + onMute(account); + } } handleBlockClick = () => { - this.props.onBlock(this.props.status); + const { status, relationship, onBlock, onUnblock } = this.props; + const account = status.get('account'); + + if (relationship && relationship.get('blocking')) { + onUnblock(account); + } else { + onBlock(status); + } + } + + handleBlockDomain = () => { + const { status, onBlockDomain } = this.props; + const account = status.get('account'); + + onBlockDomain(account.get('acct').split('@')[1]); + } + + handleUnblockDomain = () => { + const { status, onUnblockDomain } = this.props; + const account = status.get('account'); + + onUnblockDomain(account.get('acct').split('@')[1]); + } + + handleConversationMuteClick = () => { + this.props.onMuteConversation(this.props.status); } handleReport = () => { @@ -134,10 +183,11 @@ class ActionBar extends React.PureComponent { } render () { - const { status, intl } = this.props; + const { status, relationship, intl } = this.props; const publicStatus = ['public', 'unlisted'].includes(status.get('visibility')); const mutingConversation = status.get('muted'); + const account = status.get('account'); let menu = []; @@ -165,9 +215,33 @@ class ActionBar extends React.PureComponent { menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick }); menu.push({ text: intl.formatMessage(messages.direct, { name: status.getIn(['account', 'username']) }), action: this.handleDirectClick }); menu.push(null); - menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick }); - menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick }); + + if (relationship && relationship.get('muting')) { + menu.push({ text: intl.formatMessage(messages.unmute, { name: account.get('username') }), action: this.handleMuteClick }); + } else { + menu.push({ text: intl.formatMessage(messages.mute, { name: account.get('username') }), action: this.handleMuteClick }); + } + + if (relationship && relationship.get('blocking')) { + menu.push({ text: intl.formatMessage(messages.unblock, { name: account.get('username') }), action: this.handleBlockClick }); + } else { + menu.push({ text: intl.formatMessage(messages.block, { name: account.get('username') }), action: this.handleBlockClick }); + } + menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport }); + + if (account.get('acct') !== account.get('username')) { + const domain = account.get('acct').split('@')[1]; + + menu.push(null); + + if (relationship && relationship.get('domain_blocking')) { + menu.push({ text: intl.formatMessage(messages.unblockDomain, { domain }), action: this.handleUnblockDomain }); + } else { + menu.push({ text: intl.formatMessage(messages.blockDomain, { domain }), action: this.handleBlockDomain }); + } + } + if (isStaff) { menu.push(null); menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` }); @@ -198,9 +272,10 @@ class ActionBar extends React.PureComponent { <div className='detailed-status__button'><IconButton disabled={reblog_disabled} active={status.get('reblogged')} title={reblog_disabled ? intl.formatMessage(messages.cannot_reblog) : intl.formatMessage(messages.reblog)} icon={reblogIcon} onClick={this.handleReblogClick} /></div> <div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /></div> {shareButton} + <div className='detailed-status__button'><IconButton className='bookmark-icon' active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div> <div className='detailed-status__action-bar-dropdown'> - <DropdownMenuContainer size={18} icon='ellipsis-h' items={menu} direction='left' title='More' /> + <DropdownMenuContainer size={18} icon='ellipsis-h' status={status} items={menu} direction='left' title='More' /> </div> </div> ); diff --git a/app/javascript/mastodon/features/status/components/card.js b/app/javascript/mastodon/features/status/components/card.js index 0eff54411..2993fe29a 100644 --- a/app/javascript/mastodon/features/status/components/card.js +++ b/app/javascript/mastodon/features/status/components/card.js @@ -148,7 +148,7 @@ export default class Card extends React.PureComponent { const horizontal = (!compact && card.get('width') > card.get('height') && (card.get('width') + 100 >= width)) || card.get('type') !== 'link' || embedded; const interactive = card.get('type') !== 'link'; const className = classnames('status-card', { horizontal, compact, interactive }); - const title = interactive ? <a className='status-card__title' href={card.get('url')} title={card.get('title')} rel='noopener' target='_blank'><strong>{card.get('title')}</strong></a> : <strong className='status-card__title' title={card.get('title')}>{card.get('title')}</strong>; + const title = interactive ? <a className='status-card__title' href={card.get('url')} title={card.get('title')} rel='noopener noreferrer' target='_blank'><strong>{card.get('title')}</strong></a> : <strong className='status-card__title' title={card.get('title')}>{card.get('title')}</strong>; const ratio = card.get('width') / card.get('height'); const height = (compact && !embedded) ? (width / (16 / 9)) : (width / ratio); @@ -180,7 +180,7 @@ export default class Card extends React.PureComponent { <div className='status-card__actions'> <div> <button onClick={this.handleEmbedClick}><Icon id={iconVariant} /></button> - {horizontal && <a href={card.get('url')} target='_blank' rel='noopener'><Icon id='external-link' /></a>} + {horizontal && <a href={card.get('url')} target='_blank' rel='noopener noreferrer'><Icon id='external-link' /></a>} </div> </div> </div> @@ -208,7 +208,7 @@ export default class Card extends React.PureComponent { } return ( - <a href={card.get('url')} className={className} target='_blank' rel='noopener' ref={this.setRef}> + <a href={card.get('url')} className={className} target='_blank' rel='noopener noreferrer' ref={this.setRef}> {embed} {description} </a> diff --git a/app/javascript/mastodon/features/status/components/detailed_status.js b/app/javascript/mastodon/features/status/components/detailed_status.js index c7aa4d033..d5bc82735 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.js +++ b/app/javascript/mastodon/features/status/components/detailed_status.js @@ -10,6 +10,7 @@ import { FormattedDate, FormattedNumber } from 'react-intl'; import Card from './card'; import ImmutablePureComponent from 'react-immutable-pure-component'; import Video from '../../video'; +import Audio from '../../audio'; import scheduleIdleTask from '../../ui/util/schedule_idle_task'; import classNames from 'classnames'; import Icon from 'mastodon/components/icon'; @@ -107,15 +108,27 @@ export default class DetailedStatus extends ImmutablePureComponent { } if (status.get('media_attachments').size > 0) { - if (status.getIn(['media_attachments', 0, 'type']) === 'video') { - const video = status.getIn(['media_attachments', 0]); + if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + const attachment = status.getIn(['media_attachments', 0]); + + media = ( + <Audio + src={attachment.get('url')} + alt={attachment.get('description')} + duration={attachment.getIn(['meta', 'original', 'duration'], 0)} + height={110} + preload + /> + ); + } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + const attachment = status.getIn(['media_attachments', 0]); media = ( <Video - preview={video.get('preview_url')} - blurhash={video.get('blurhash')} - src={video.get('url')} - alt={video.get('description')} + preview={attachment.get('preview_url')} + blurhash={attachment.get('blurhash')} + src={attachment.get('url')} + alt={attachment.get('description')} width={300} height={150} inline @@ -143,7 +156,7 @@ export default class DetailedStatus extends ImmutablePureComponent { } if (status.get('application')) { - applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener'>{status.getIn(['application', 'name'])}</a></span>; + applicationLink = <span> · <a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener noreferrer'>{status.getIn(['application', 'name'])}</a></span>; } if (status.get('visibility') === 'direct') { @@ -207,7 +220,7 @@ export default class DetailedStatus extends ImmutablePureComponent { {media} <div className='detailed-status__meta'> - <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener'> + <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'> <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' /> </a>{applicationLink} · {reblogLink} · {favouriteLink} </div> diff --git a/app/javascript/mastodon/features/status/containers/detailed_status_container.js b/app/javascript/mastodon/features/status/containers/detailed_status_container.js index 61e0c428a..333c295dc 100644 --- a/app/javascript/mastodon/features/status/containers/detailed_status_container.js +++ b/app/javascript/mastodon/features/status/containers/detailed_status_container.js @@ -1,4 +1,3 @@ -import React from 'react'; import { connect } from 'react-redux'; import DetailedStatus from '../components/detailed_status'; import { makeGetStatus } from '../../../selectors'; @@ -15,7 +14,6 @@ import { pin, unpin, } from '../../../actions/interactions'; -import { blockAccount } from '../../../actions/accounts'; import { muteStatus, unmuteStatus, @@ -24,9 +22,10 @@ import { revealStatus, } from '../../../actions/statuses'; import { initMuteModal } from '../../../actions/mutes'; +import { initBlockModal } from '../../../actions/blocks'; import { initReport } from '../../../actions/reports'; import { openModal } from '../../../actions/modal'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl'; import { boostModal, deleteModal } from '../../../initial_state'; import { showAlertForError } from '../../../actions/alerts'; @@ -35,10 +34,8 @@ const messages = defineMessages({ deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' }, redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' }, redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' }, - blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, - blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, }); const makeMapStateToProps = () => { @@ -138,16 +135,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ onBlock (status) { const account = status.get('account'); - dispatch(openModal('CONFIRM', { - message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, - confirm: intl.formatMessage(messages.blockConfirm), - onConfirm: () => dispatch(blockAccount(account.get('id'))), - secondary: intl.formatMessage(messages.blockAndReport), - onSecondary: () => { - dispatch(blockAccount(account.get('id'))); - dispatch(initReport(account, status)); - }, - })); + dispatch(initBlockModal(account)); }, onReport (status) { diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index 981eb9d58..6b18f34d1 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -4,6 +4,7 @@ import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { createSelector } from 'reselect'; import { fetchStatus } from '../../actions/statuses'; import MissingIndicator from '../../components/missing_indicator'; import DetailedStatus from './components/detailed_status'; @@ -12,6 +13,8 @@ import Column from '../ui/components/column'; import { favourite, unfavourite, + bookmark, + unbookmark, reblog, unreblog, pin, @@ -22,7 +25,6 @@ import { mentionCompose, directCompose, } from '../../actions/compose'; -import { blockAccount } from '../../actions/accounts'; import { muteStatus, unmuteStatus, @@ -30,7 +32,16 @@ import { hideStatus, revealStatus, } from '../../actions/statuses'; +import { + unblockAccount, + unmuteAccount, +} from '../../actions/accounts'; +import { + blockDomain, + unblockDomain, +} from '../../actions/domain_blocks'; import { initMuteModal } from '../../actions/mutes'; +import { initBlockModal } from '../../actions/blocks'; import { initReport } from '../../actions/reports'; import { makeGetStatus } from '../../selectors'; import { ScrollContainer } from 'react-router-scroll-4'; @@ -51,53 +62,81 @@ const messages = defineMessages({ deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' }, redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' }, redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' }, - blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' }, revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' }, hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' }, detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' }, replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' }, - blockAndReport: { id: 'confirmations.block.block_and_report', defaultMessage: 'Block & Report' }, + blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Hide entire domain' }, }); const makeMapStateToProps = () => { const getStatus = makeGetStatus(); - const mapStateToProps = (state, props) => { - const status = getStatus(state, { id: props.params.statusId }); + const getAncestorsIds = createSelector([ + (_, { id }) => id, + state => state.getIn(['contexts', 'inReplyTos']), + ], (statusId, inReplyTos) => { let ancestorsIds = Immutable.List(); - let descendantsIds = Immutable.List(); + ancestorsIds = ancestorsIds.withMutations(mutable => { + let id = statusId; - if (status) { - ancestorsIds = ancestorsIds.withMutations(mutable => { - let id = status.get('in_reply_to_id'); + while (id) { + mutable.unshift(id); + id = inReplyTos.get(id); + } + }); - while (id) { - mutable.unshift(id); - id = state.getIn(['contexts', 'inReplyTos', id]); - } - }); + return ancestorsIds; + }); - descendantsIds = descendantsIds.withMutations(mutable => { - const ids = [status.get('id')]; + const getDescendantsIds = createSelector([ + (_, { id }) => id, + state => state.getIn(['contexts', 'replies']), + state => state.get('statuses'), + ], (statusId, contextReplies, statuses) => { + let descendantsIds = []; + const ids = [statusId]; - while (ids.length > 0) { - let id = ids.shift(); - const replies = state.getIn(['contexts', 'replies', id]); + while (ids.length > 0) { + let id = ids.shift(); + const replies = contextReplies.get(id); - if (status.get('id') !== id) { - mutable.push(id); - } + if (statusId !== id) { + descendantsIds.push(id); + } + + if (replies) { + replies.reverse().forEach(reply => { + ids.unshift(reply); + }); + } + } - if (replies) { - replies.reverse().forEach(reply => { - ids.unshift(reply); - }); - } + let insertAt = descendantsIds.findIndex((id) => statuses.get(id).get('in_reply_to_account_id') !== statuses.get(id).get('account')); + if (insertAt !== -1) { + descendantsIds.forEach((id, idx) => { + if (idx > insertAt && statuses.get(id).get('in_reply_to_account_id') === statuses.get(id).get('account')) { + descendantsIds.splice(idx, 1); + descendantsIds.splice(insertAt, 0, id); + insertAt += 1; } }); } + return Immutable.List(descendantsIds); + }); + + const mapStateToProps = (state, props) => { + const status = getStatus(state, { id: props.params.statusId }); + let ancestorsIds = Immutable.List(); + let descendantsIds = Immutable.List(); + + if (status) { + ancestorsIds = getAncestorsIds(state, { id: status.get('in_reply_to_id') }); + descendantsIds = getDescendantsIds(state, { id: status.get('id') }); + } + return { status, ancestorsIds, @@ -126,6 +165,7 @@ class Status extends ImmutablePureComponent { descendantsIds: ImmutablePropTypes.list, intl: PropTypes.object.isRequired, askReplyConfirmation: PropTypes.bool, + multiColumn: PropTypes.bool, domain: PropTypes.string.isRequired, }; @@ -203,6 +243,14 @@ class Status extends ImmutablePureComponent { } } + handleBookmarkClick = (status) => { + if (status.get('bookmarked')) { + this.props.dispatch(unbookmark(status)); + } else { + this.props.dispatch(bookmark(status)); + } + } + handleDeleteClick = (status, history, withRedraft = false) => { const { dispatch, intl } = this.props; @@ -233,6 +281,22 @@ class Status extends ImmutablePureComponent { this.props.dispatch(openModal('VIDEO', { media, time })); } + handleHotkeyOpenMedia = e => { + const status = this._properStatus(); + + e.preventDefault(); + + if (status.get('media_attachments').size > 0) { + if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + // TODO: toggle play/paused? + } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + this.handleOpenVideo(status.getIn(['media_attachments', 0]), 0); + } else { + this.handleOpenMedia(status.get('media_attachments'), 0); + } + } + } + handleMuteClick = (account) => { this.props.dispatch(initMuteModal(account)); } @@ -265,19 +329,9 @@ class Status extends ImmutablePureComponent { } handleBlockClick = (status) => { - const { dispatch, intl } = this.props; + const { dispatch } = this.props; const account = status.get('account'); - - dispatch(openModal('CONFIRM', { - message: <FormattedMessage id='confirmations.block.message' defaultMessage='Are you sure you want to block {name}?' values={{ name: <strong>@{account.get('acct')}</strong> }} />, - confirm: intl.formatMessage(messages.blockConfirm), - onConfirm: () => dispatch(blockAccount(account.get('id'))), - secondary: intl.formatMessage(messages.blockAndReport), - onSecondary: () => { - dispatch(blockAccount(account.get('id'))); - dispatch(initReport(account, status)); - }, - })); + dispatch(initBlockModal(account)); } handleReport = (status) => { @@ -288,6 +342,27 @@ class Status extends ImmutablePureComponent { this.props.dispatch(openModal('EMBED', { url: status.get('url') })); } + handleUnmuteClick = account => { + this.props.dispatch(unmuteAccount(account.get('id'))); + } + + handleUnblockClick = account => { + this.props.dispatch(unblockAccount(account.get('id'))); + } + + handleBlockDomainClick = domain => { + this.props.dispatch(openModal('CONFIRM', { + message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.' values={{ domain: <strong>{domain}</strong> }} />, + confirm: this.props.intl.formatMessage(messages.blockDomainConfirm), + onConfirm: () => this.props.dispatch(blockDomain(domain)), + })); + } + + handleUnblockDomainClick = domain => { + this.props.dispatch(unblockDomain(domain)); + } + + handleHotkeyMoveUp = () => { this.handleMoveUp(this.props.status.get('id')); } @@ -417,13 +492,13 @@ class Status extends ImmutablePureComponent { render () { let ancestors, descendants; - const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain } = this.props; + const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn } = this.props; const { fullscreen } = this.state; if (status === null) { return ( <Column> - <ColumnBackButton /> + <ColumnBackButton multiColumn={multiColumn} /> <MissingIndicator /> </Column> ); @@ -447,12 +522,14 @@ class Status extends ImmutablePureComponent { openProfile: this.handleHotkeyOpenProfile, toggleHidden: this.handleHotkeyToggleHidden, toggleSensitive: this.handleHotkeyToggleSensitive, + openMedia: this.handleHotkeyOpenMedia, }; return ( - <Column label={intl.formatMessage(messages.detailedStatus)}> + <Column bindToDocument={!multiColumn} label={intl.formatMessage(messages.detailedStatus)}> <ColumnHeader showBackButton + multiColumn={multiColumn} extraButton={( <button className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={status.get('hidden') ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button> )} @@ -479,12 +556,17 @@ class Status extends ImmutablePureComponent { onReply={this.handleReplyClick} onFavourite={this.handleFavouriteClick} onReblog={this.handleReblogClick} + onBookmark={this.handleBookmarkClick} onDelete={this.handleDeleteClick} onDirect={this.handleDirectClick} onMention={this.handleMentionClick} onMute={this.handleMuteClick} + onUnmute={this.handleUnmuteClick} onMuteConversation={this.handleConversationMuteClick} onBlock={this.handleBlockClick} + onUnblock={this.handleUnblockClick} + onBlockDomain={this.handleBlockDomainClick} + onUnblockDomain={this.handleUnblockDomainClick} onReport={this.handleReport} onPin={this.handlePin} onEmbed={this.handleEmbed} diff --git a/app/javascript/mastodon/features/ui/components/actions_modal.js b/app/javascript/mastodon/features/ui/components/actions_modal.js index 00280f7a6..875b2b75d 100644 --- a/app/javascript/mastodon/features/ui/components/actions_modal.js +++ b/app/javascript/mastodon/features/ui/components/actions_modal.js @@ -26,7 +26,7 @@ export default class ActionsModal extends ImmutablePureComponent { return ( <li key={`${text}-${i}`}> - <a href={href} target='_blank' rel='noopener' onClick={this.props.onClick} data-index={i} className={classNames({ active })}> + <a href={href} target='_blank' rel='noopener noreferrer' onClick={this.props.onClick} data-index={i} className={classNames({ active })}> {icon && <IconButton title={text} icon={icon} role='presentation' tabIndex='-1' inverted />} <div> <div className={classNames({ 'actions-modal__item-label': !!meta })}>{text}</div> @@ -42,7 +42,7 @@ export default class ActionsModal extends ImmutablePureComponent { <div className='status light'> <div className='boost-modal__status-header'> <div className='boost-modal__status-time'> - <a href={this.props.status.get('url')} className='status__relative-time' target='_blank' rel='noopener'> + <a href={this.props.status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'> <RelativeTimestamp timestamp={this.props.status.get('created_at')} /> </a> </div> diff --git a/app/javascript/mastodon/features/ui/components/audio_modal.js b/app/javascript/mastodon/features/ui/components/audio_modal.js new file mode 100644 index 000000000..2300453d7 --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/audio_modal.js @@ -0,0 +1,76 @@ +import React from 'react'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; +import Audio from 'mastodon/features/audio'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import { FormattedMessage } from 'react-intl'; +import { previewState } from './video_modal'; +import classNames from 'classnames'; +import Icon from 'mastodon/components/icon'; + +export default class AudioModal extends ImmutablePureComponent { + + static propTypes = { + media: ImmutablePropTypes.map.isRequired, + status: ImmutablePropTypes.map, + onClose: PropTypes.func.isRequired, + }; + + static contextTypes = { + router: PropTypes.object, + }; + + componentDidMount () { + if (this.context.router) { + const history = this.context.router.history; + + history.push(history.location.pathname, previewState); + + this.unlistenHistory = history.listen(() => { + this.props.onClose(); + }); + } + } + + componentWillUnmount () { + if (this.context.router) { + this.unlistenHistory(); + + if (this.context.router.history.location.state === previewState) { + this.context.router.history.goBack(); + } + } + } + + handleStatusClick = e => { + if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { + e.preventDefault(); + this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); + } + } + + render () { + const { media, status } = this.props; + + return ( + <div className='modal-root__modal audio-modal'> + <div className='audio-modal__container'> + <Audio + src={media.get('url')} + alt={media.get('description')} + duration={media.getIn(['meta', 'original', 'duration'], 0)} + height={135} + preload + /> + </div> + + {status && ( + <div className={classNames('media-modal__meta')}> + <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> + </div> + )} + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/ui/components/block_modal.js b/app/javascript/mastodon/features/ui/components/block_modal.js new file mode 100644 index 000000000..a07baeaa6 --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/block_modal.js @@ -0,0 +1,103 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { injectIntl, FormattedMessage } from 'react-intl'; +import { makeGetAccount } from '../../../selectors'; +import Button from '../../../components/button'; +import { closeModal } from '../../../actions/modal'; +import { blockAccount } from '../../../actions/accounts'; +import { initReport } from '../../../actions/reports'; + + +const makeMapStateToProps = () => { + const getAccount = makeGetAccount(); + + const mapStateToProps = state => ({ + account: getAccount(state, state.getIn(['blocks', 'new', 'account_id'])), + }); + + return mapStateToProps; +}; + +const mapDispatchToProps = dispatch => { + return { + onConfirm(account) { + dispatch(blockAccount(account.get('id'))); + }, + + onBlockAndReport(account) { + dispatch(blockAccount(account.get('id'))); + dispatch(initReport(account)); + }, + + onClose() { + dispatch(closeModal()); + }, + }; +}; + +export default @connect(makeMapStateToProps, mapDispatchToProps) +@injectIntl +class BlockModal extends React.PureComponent { + + static propTypes = { + account: PropTypes.object.isRequired, + onClose: PropTypes.func.isRequired, + onBlockAndReport: PropTypes.func.isRequired, + onConfirm: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; + + componentDidMount() { + this.button.focus(); + } + + handleClick = () => { + this.props.onClose(); + this.props.onConfirm(this.props.account); + } + + handleSecondary = () => { + this.props.onClose(); + this.props.onBlockAndReport(this.props.account); + } + + handleCancel = () => { + this.props.onClose(); + } + + setRef = (c) => { + this.button = c; + } + + render () { + const { account } = this.props; + + return ( + <div className='modal-root__modal block-modal'> + <div className='block-modal__container'> + <p> + <FormattedMessage + id='confirmations.block.message' + defaultMessage='Are you sure you want to block {name}?' + values={{ name: <strong>@{account.get('acct')}</strong> }} + /> + </p> + </div> + + <div className='block-modal__action-bar'> + <Button onClick={this.handleCancel} className='block-modal__cancel-button'> + <FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' /> + </Button> + <Button onClick={this.handleSecondary} className='confirmation-modal__secondary-button'> + <FormattedMessage id='confirmations.block.block_and_report' defaultMessage='Block & Report' /> + </Button> + <Button onClick={this.handleClick} ref={this.setRef}> + <FormattedMessage id='confirmations.block.confirm' defaultMessage='Block' /> + </Button> + </div> + </div> + ); + } + +} diff --git a/app/javascript/mastodon/features/ui/components/boost_modal.js b/app/javascript/mastodon/features/ui/components/boost_modal.js index 70f4a1282..0e79005f0 100644 --- a/app/javascript/mastodon/features/ui/components/boost_modal.js +++ b/app/javascript/mastodon/features/ui/components/boost_modal.js @@ -61,7 +61,7 @@ class BoostModal extends ImmutablePureComponent { <div className='status light'> <div className='boost-modal__status-header'> <div className='boost-modal__status-time'> - <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener'><RelativeTimestamp timestamp={status.get('created_at')} /></a> + <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'><RelativeTimestamp timestamp={status.get('created_at')} /></a> </div> <a onClick={this.handleAccountClick} href={status.getIn(['account', 'url'])} className='status__display-name'> diff --git a/app/javascript/mastodon/features/ui/components/column_loading.js b/app/javascript/mastodon/features/ui/components/column_loading.js index 9503a7a1a..0cdfd05d8 100644 --- a/app/javascript/mastodon/features/ui/components/column_loading.js +++ b/app/javascript/mastodon/features/ui/components/column_loading.js @@ -21,7 +21,7 @@ export default class ColumnLoading extends ImmutablePureComponent { let { title, icon } = this.props; return ( <Column> - <ColumnHeader icon={icon} title={title} multiColumn={false} focusable={false} /> + <ColumnHeader icon={icon} title={title} multiColumn={false} focusable={false} placeholder /> <div className='scrollable' /> </Column> ); diff --git a/app/javascript/mastodon/features/ui/components/columns_area.js b/app/javascript/mastodon/features/ui/components/columns_area.js index 756db3c61..8bc4bfc0e 100644 --- a/app/javascript/mastodon/features/ui/components/columns_area.js +++ b/app/javascript/mastodon/features/ui/components/columns_area.js @@ -12,7 +12,19 @@ import BundleContainer from '../containers/bundle_container'; import ColumnLoading from './column_loading'; import DrawerLoading from './drawer_loading'; import BundleColumnError from './bundle_column_error'; -import { Compose, Notifications, HomeTimeline, CommunityTimeline, PublicTimeline, HashtagTimeline, DirectTimeline, FavouritedStatuses, ListTimeline } from '../../ui/util/async-components'; +import { + Compose, + Notifications, + HomeTimeline, + CommunityTimeline, + PublicTimeline, + HashtagTimeline, + DirectTimeline, + FavouritedStatuses, + BookmarkedStatuses, + ListTimeline, + Directory, +} from '../../ui/util/async-components'; import Icon from 'mastodon/components/icon'; import ComposePanel from './compose_panel'; import NavigationPanel from './navigation_panel'; @@ -29,7 +41,9 @@ const componentMap = { 'HASHTAG': HashtagTimeline, 'DIRECT': DirectTimeline, 'FAVOURITES': FavouritedStatuses, + 'BOOKMARKS': BookmarkedStatuses, 'LIST': ListTimeline, + 'DIRECTORY': Directory, }; const messages = defineMessages({ @@ -110,6 +124,11 @@ class ColumnsArea extends ImmutablePureComponent { // React-router does this for us, but too late, feeling laggy. document.querySelector(currentLinkSelector).classList.remove('active'); document.querySelector(nextLinkSelector).classList.add('active'); + + if (!this.state.shouldAnimate && typeof this.pendingIndex === 'number') { + this.context.router.history.push(getLink(this.pendingIndex)); + this.pendingIndex = null; + } } handleAnimationEnd = () => { @@ -160,13 +179,12 @@ class ColumnsArea extends ImmutablePureComponent { const { shouldAnimate } = this.state; const columnIndex = getIndex(this.context.router.history.location.pathname); - this.pendingIndex = null; if (singleColumn) { const floatingActionButton = shouldHideFAB(this.context.router.history.location.pathname) ? null : <Link key='floating-action-button' to='/statuses/new' className='floating-action-button' aria-label={intl.formatMessage(messages.publish)}><Icon id='pencil' /></Link>; const content = columnIndex !== -1 ? ( - <ReactSwipeableViews key='content' index={columnIndex} onChangeIndex={this.handleSwipe} onTransitionEnd={this.handleAnimationEnd} animateTransitions={shouldAnimate} springConfig={{ duration: '400ms', delay: '0s', easeFunction: 'ease' }} style={{ height: '100%' }}> + <ReactSwipeableViews key='content' hysteresis={0.2} threshold={15} index={columnIndex} onChangeIndex={this.handleSwipe} onTransitionEnd={this.handleAnimationEnd} animateTransitions={shouldAnimate} springConfig={{ duration: '400ms', delay: '0s', easeFunction: 'ease' }} style={{ height: '100%' }}> {links.map(this.renderView)} </ReactSwipeableViews> ) : ( diff --git a/app/javascript/mastodon/features/ui/components/document_title.js b/app/javascript/mastodon/features/ui/components/document_title.js new file mode 100644 index 000000000..cd081b20c --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/document_title.js @@ -0,0 +1,41 @@ +import { PureComponent } from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import { title } from 'mastodon/initial_state'; + +const mapStateToProps = state => ({ + unread: state.getIn(['missed_updates', 'unread']), +}); + +export default @connect(mapStateToProps) +class DocumentTitle extends PureComponent { + + static propTypes = { + unread: PropTypes.number.isRequired, + }; + + componentDidMount () { + this._sideEffects(); + } + + componentDidUpdate() { + this._sideEffects(); + } + + _sideEffects () { + const { unread } = this.props; + + if (unread > 99) { + document.title = `(*) ${title}`; + } else if (unread > 0) { + document.title = `(${unread}) ${title}`; + } else { + document.title = title; + } + } + + render () { + return null; + } + +} diff --git a/app/javascript/mastodon/features/ui/components/embed_modal.js b/app/javascript/mastodon/features/ui/components/embed_modal.js index 982781db0..4679c9650 100644 --- a/app/javascript/mastodon/features/ui/components/embed_modal.js +++ b/app/javascript/mastodon/features/ui/components/embed_modal.js @@ -1,8 +1,13 @@ import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { FormattedMessage, injectIntl } from 'react-intl'; -import api from '../../../api'; +import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; +import api from 'mastodon/api'; +import IconButton from 'mastodon/components/icon_button'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); export default @injectIntl class EmbedModal extends ImmutablePureComponent { @@ -50,13 +55,17 @@ class EmbedModal extends ImmutablePureComponent { } render () { + const { intl, onClose } = this.props; const { oembed } = this.state; return ( - <div className='modal-root__modal embed-modal'> - <h4><FormattedMessage id='status.embed' defaultMessage='Embed' /></h4> + <div className='modal-root__modal report-modal embed-modal'> + <div className='report-modal__target'> + <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} /> + <FormattedMessage id='status.embed' defaultMessage='Embed' /> + </div> - <div className='embed-modal__container'> + <div className='report-modal__container embed-modal__container' style={{ display: 'block' }}> <p className='hint'> <FormattedMessage id='embed.instructions' defaultMessage='Embed this status on your website by copying the code below.' /> </p> diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.js b/app/javascript/mastodon/features/ui/components/focal_point_modal.js index 7488a3598..7d1509f71 100644 --- a/app/javascript/mastodon/features/ui/components/focal_point_modal.js +++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.js @@ -1,11 +1,28 @@ import React from 'react'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import PropTypes from 'prop-types'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import ImageLoader from './image_loader'; import classNames from 'classnames'; import { changeUploadCompose } from '../../../actions/compose'; import { getPointerPosition } from '../../video'; +import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; +import IconButton from 'mastodon/components/icon_button'; +import Button from 'mastodon/components/button'; +import Video from 'mastodon/features/video'; +import Audio from 'mastodon/features/audio'; +import Textarea from 'react-textarea-autosize'; +import UploadProgress from 'mastodon/features/compose/components/upload_progress'; +import CharacterCounter from 'mastodon/features/compose/components/character_counter'; +import { length } from 'stringz'; +import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components'; +import GIFV from 'mastodon/components/gifv'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, + apply: { id: 'upload_modal.apply', defaultMessage: 'Apply' }, + placeholder: { id: 'upload_modal.description_placeholder', defaultMessage: 'A quick brown fox jumps over the lazy dog' }, +}); const mapStateToProps = (state, { id }) => ({ media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id), @@ -13,17 +30,56 @@ const mapStateToProps = (state, { id }) => ({ const mapDispatchToProps = (dispatch, { id }) => ({ - onSave: (x, y) => { - dispatch(changeUploadCompose(id, { focus: `${x.toFixed(2)},${y.toFixed(2)}` })); + onSave: (description, x, y) => { + dispatch(changeUploadCompose(id, { description, focus: `${x.toFixed(2)},${y.toFixed(2)}` })); }, }); +const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******') + .replace(/\n/g, ' ') + .replace(/\*\*\*\*\*\*/g, '\n\n'); + +const assetHost = process.env.CDN_HOST || ''; + +class ImageLoader extends React.PureComponent { + + static propTypes = { + src: PropTypes.string.isRequired, + width: PropTypes.number, + height: PropTypes.number, + }; + + state = { + loading: true, + }; + + componentDidMount() { + const image = new Image(); + image.addEventListener('load', () => this.setState({ loading: false })); + image.src = this.props.src; + } + + render () { + const { loading } = this.state; + + if (loading) { + return <canvas width={this.props.width} height={this.props.height} />; + } else { + return <img {...this.props} alt='' />; + } + } + +} + export default @connect(mapStateToProps, mapDispatchToProps) +@injectIntl class FocalPointModal extends ImmutablePureComponent { static propTypes = { media: ImmutablePropTypes.map.isRequired, + onClose: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, }; state = { @@ -32,6 +88,10 @@ class FocalPointModal extends ImmutablePureComponent { focusX: 0, focusY: 0, dragging: false, + description: '', + dirty: false, + progress: 0, + loading: true, }; componentWillMount () { @@ -57,6 +117,14 @@ class FocalPointModal extends ImmutablePureComponent { this.setState({ dragging: true }); } + handleTouchStart = e => { + document.addEventListener('touchmove', this.handleMouseMove); + document.addEventListener('touchend', this.handleTouchEnd); + + this.updatePosition(e); + this.setState({ dragging: true }); + } + handleMouseMove = e => { this.updatePosition(e); } @@ -66,7 +134,13 @@ class FocalPointModal extends ImmutablePureComponent { document.removeEventListener('mouseup', this.handleMouseUp); this.setState({ dragging: false }); - this.props.onSave(this.state.focusX, this.state.focusY); + } + + handleTouchEnd = () => { + document.removeEventListener('touchmove', this.handleMouseMove); + document.removeEventListener('touchend', this.handleTouchEnd); + + this.setState({ dragging: false }); } updatePosition = e => { @@ -74,46 +148,188 @@ class FocalPointModal extends ImmutablePureComponent { const focusX = (x - .5) * 2; const focusY = (y - .5) * -2; - this.setState({ x, y, focusX, focusY }); + this.setState({ x, y, focusX, focusY, dirty: true }); } updatePositionFromMedia = media => { - const focusX = media.getIn(['meta', 'focus', 'x']); - const focusY = media.getIn(['meta', 'focus', 'y']); + const focusX = media.getIn(['meta', 'focus', 'x']); + const focusY = media.getIn(['meta', 'focus', 'y']); + const description = media.get('description') || ''; if (focusX && focusY) { const x = (focusX / 2) + .5; const y = (focusY / -2) + .5; - this.setState({ x, y, focusX, focusY }); + this.setState({ + x, + y, + focusX, + focusY, + description, + dirty: false, + }); } else { - this.setState({ x: 0.5, y: 0.5, focusX: 0, focusY: 0 }); + this.setState({ + x: 0.5, + y: 0.5, + focusX: 0, + focusY: 0, + description, + dirty: false, + }); } } + handleChange = e => { + this.setState({ description: e.target.value, dirty: true }); + } + + handleKeyDown = (e) => { + if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) { + e.preventDefault(); + e.stopPropagation(); + this.setState({ description: e.target.value, dirty: true }); + this.handleSubmit(); + } + } + + handleSubmit = () => { + this.props.onSave(this.state.description, this.state.focusX, this.state.focusY); + this.props.onClose(); + } + setRef = c => { this.node = c; } - render () { + handleTextDetection = () => { const { media } = this.props; - const { x, y, dragging } = this.state; + + this.setState({ detecting: true }); + + fetchTesseract().then(({ TesseractWorker }) => { + const worker = new TesseractWorker({ + workerPath: `${assetHost}/packs/ocr/worker.min.js`, + corePath: `${assetHost}/packs/ocr/tesseract-core.wasm.js`, + langPath: `${assetHost}/ocr/lang-data`, + }); + + let media_url = media.get('url'); + + if (window.URL && URL.createObjectURL) { + try { + media_url = URL.createObjectURL(media.get('file')); + } catch (error) { + console.error(error); + } + } + + worker.recognize(media_url) + .progress(({ progress }) => this.setState({ progress })) + .finally(() => worker.terminate()) + .then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false })) + .catch(() => this.setState({ detecting: false })); + }).catch(() => this.setState({ detecting: false })); + } + + render () { + const { media, intl, onClose } = this.props; + const { x, y, dragging, description, dirty, detecting, progress } = this.state; const width = media.getIn(['meta', 'original', 'width']) || null; const height = media.getIn(['meta', 'original', 'height']) || null; + const focals = ['image', 'gifv'].includes(media.get('type')); + + const previewRatio = 16/9; + const previewWidth = 200; + const previewHeight = previewWidth / previewRatio; + + let descriptionLabel = null; + + if (media.get('type') === 'audio') { + descriptionLabel = <FormattedMessage id='upload_form.audio_description' defaultMessage='Describe for people with hearing loss' />; + } else if (media.get('type') === 'video') { + descriptionLabel = <FormattedMessage id='upload_form.video_description' defaultMessage='Describe for people with hearing loss or visual impairment' />; + } else { + descriptionLabel = <FormattedMessage id='upload_form.description' defaultMessage='Describe for the visually impaired' />; + } return ( - <div className='modal-root__modal video-modal focal-point-modal'> - <div className={classNames('focal-point', { dragging })} ref={this.setRef}> - <ImageLoader - previewSrc={media.get('preview_url')} - src={media.get('url')} - width={width} - height={height} - /> - - <div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} /> - <div className='focal-point__overlay' onMouseDown={this.handleMouseDown} /> + <div className='modal-root__modal report-modal' style={{ maxWidth: 960 }}> + <div className='report-modal__target'> + <IconButton className='media-modal__close' title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} /> + <FormattedMessage id='upload_modal.edit_media' defaultMessage='Edit media' /> + </div> + + <div className='report-modal__container'> + <div className='report-modal__comment'> + {focals && <p><FormattedMessage id='upload_modal.hint' defaultMessage='Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.' /></p>} + + <label className='setting-text-label' htmlFor='upload-modal__description'> + {descriptionLabel} + </label> + + <div className='setting-text__wrapper'> + <Textarea + id='upload-modal__description' + className='setting-text light' + value={detecting ? '…' : description} + onChange={this.handleChange} + onKeyDown={this.handleKeyDown} + disabled={detecting} + autoFocus + /> + + <div className='setting-text__modifiers'> + <UploadProgress progress={progress * 100} active={detecting} icon='file-text-o' message={<FormattedMessage id='upload_modal.analyzing_picture' defaultMessage='Analyzing picture…' />} /> + </div> + </div> + + <div className='setting-text__toolbar'> + <button disabled={detecting || media.get('type') !== 'image'} className='link-button' onClick={this.handleTextDetection}><FormattedMessage id='upload_modal.detect_text' defaultMessage='Detect text from picture' /></button> + <CharacterCounter max={1500} text={detecting ? '' : description} /> + </div> + + <Button disabled={!dirty || detecting || length(description) > 1500} text={intl.formatMessage(messages.apply)} onClick={this.handleSubmit} /> + </div> + + <div className='focal-point-modal__content'> + {focals && ( + <div className={classNames('focal-point', { dragging })} ref={this.setRef} onMouseDown={this.handleMouseDown} onTouchStart={this.handleTouchStart}> + {media.get('type') === 'image' && <ImageLoader src={media.get('url')} width={width} height={height} alt='' />} + {media.get('type') === 'gifv' && <GIFV src={media.get('url')} width={width} height={height} />} + + <div className='focal-point__preview'> + <strong><FormattedMessage id='upload_modal.preview_label' defaultMessage='Preview ({ratio})' values={{ ratio: '16:9' }} /></strong> + <div style={{ width: previewWidth, height: previewHeight, backgroundImage: `url(${media.get('preview_url')})`, backgroundSize: 'cover', backgroundPosition: `${x * 100}% ${y * 100}%` }} /> + </div> + + <div className='focal-point__reticle' style={{ top: `${y * 100}%`, left: `${x * 100}%` }} /> + <div className='focal-point__overlay' /> + </div> + )} + + {media.get('type') === 'video' && ( + <Video + preview={media.get('preview_url')} + blurhash={media.get('blurhash')} + src={media.get('url')} + detailed + inline + editable + /> + )} + + {media.get('type') === 'audio' && ( + <Audio + src={media.get('url')} + duration={media.getIn(['meta', 'original', 'duration'], 0)} + height={150} + preload + editable + /> + )} + </div> </div> </div> ); diff --git a/app/javascript/mastodon/features/ui/components/follow_requests_nav_link.js b/app/javascript/mastodon/features/ui/components/follow_requests_nav_link.js index 90c953893..950ed7b27 100644 --- a/app/javascript/mastodon/features/ui/components/follow_requests_nav_link.js +++ b/app/javascript/mastodon/features/ui/components/follow_requests_nav_link.js @@ -4,12 +4,10 @@ import { fetchFollowRequests } from 'mastodon/actions/accounts'; import { connect } from 'react-redux'; import { NavLink, withRouter } from 'react-router-dom'; import IconWithBadge from 'mastodon/components/icon_with_badge'; -import { me } from 'mastodon/initial_state'; import { List as ImmutableList } from 'immutable'; import { FormattedMessage } from 'react-intl'; const mapStateToProps = state => ({ - locked: state.getIn(['accounts', me, 'locked']), count: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size, }); @@ -19,22 +17,19 @@ class FollowRequestsNavLink extends React.Component { static propTypes = { dispatch: PropTypes.func.isRequired, - locked: PropTypes.bool, count: PropTypes.number.isRequired, }; componentDidMount () { - const { dispatch, locked } = this.props; + const { dispatch } = this.props; - if (locked) { - dispatch(fetchFollowRequests()); - } + dispatch(fetchFollowRequests()); } render () { - const { locked, count } = this.props; + const { count } = this.props; - if (!locked || count === 0) { + if (count === 0) { return null; } diff --git a/app/javascript/mastodon/features/ui/components/link_footer.js b/app/javascript/mastodon/features/ui/components/link_footer.js index b481983dc..3c4cff9f9 100644 --- a/app/javascript/mastodon/features/ui/components/link_footer.js +++ b/app/javascript/mastodon/features/ui/components/link_footer.js @@ -1,35 +1,72 @@ +import { connect } from 'react-redux'; import React from 'react'; import PropTypes from 'prop-types'; -import { FormattedMessage } from 'react-intl'; +import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; import { Link } from 'react-router-dom'; import { invitesEnabled, version, repository, source_url } from 'mastodon/initial_state'; +import { logOut } from 'mastodon/utils/log_out'; +import { openModal } from 'mastodon/actions/modal'; -const LinkFooter = ({ withHotkeys }) => ( - <div className='getting-started__footer'> - <ul> - {invitesEnabled && <li><a href='/invites' target='_blank'><FormattedMessage id='getting_started.invite' defaultMessage='Invite people' /></a> · </li>} - {withHotkeys && <li><Link to='/keyboard-shortcuts'><FormattedMessage id='navigation_bar.keyboard_shortcuts' defaultMessage='Hotkeys' /></Link> · </li>} - <li><a href='/auth/edit'><FormattedMessage id='getting_started.security' defaultMessage='Security' /></a> · </li> - <li><a href='/about/more' target='_blank'><FormattedMessage id='navigation_bar.info' defaultMessage='About this server' /></a> · </li> - <li><a href='https://joinmastodon.org/apps' target='_blank'><FormattedMessage id='navigation_bar.apps' defaultMessage='Mobile apps' /></a> · </li> - <li><a href='/terms' target='_blank'><FormattedMessage id='getting_started.terms' defaultMessage='Terms of service' /></a> · </li> - <li><a href='/settings/applications' target='_blank'><FormattedMessage id='getting_started.developers' defaultMessage='Developers' /></a> · </li> - <li><a href='https://docs.joinmastodon.org' target='_blank'><FormattedMessage id='getting_started.documentation' defaultMessage='Documentation' /></a> · </li> - <li><a href='/auth/sign_out' data-method='delete'><FormattedMessage id='navigation_bar.logout' defaultMessage='Logout' /></a></li> - </ul> - - <p> - <FormattedMessage - id='getting_started.open_source_notice' - defaultMessage='Mastodon is open source software. You can contribute or report issues on GitHub at {github}.' - values={{ github: <span><a href={source_url} rel='noopener' target='_blank'>{repository}</a> (v{version})</span> }} - /> - </p> - </div> -); - -LinkFooter.propTypes = { - withHotkeys: PropTypes.bool, -}; +const messages = defineMessages({ + logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' }, + logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' }, +}); + +const mapDispatchToProps = (dispatch, { intl }) => ({ + onLogout () { + dispatch(openModal('CONFIRM', { + message: intl.formatMessage(messages.logoutMessage), + confirm: intl.formatMessage(messages.logoutConfirm), + onConfirm: () => logOut(), + })); + }, +}); + +export default @injectIntl +@connect(null, mapDispatchToProps) +class LinkFooter extends React.PureComponent { + + static propTypes = { + withHotkeys: PropTypes.bool, + onLogout: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, + }; + + handleLogoutClick = e => { + e.preventDefault(); + e.stopPropagation(); + + this.props.onLogout(); -export default LinkFooter; + return false; + } + + render () { + const { withHotkeys } = this.props; + + return ( + <div className='getting-started__footer'> + <ul> + {invitesEnabled && <li><a href='/invites' target='_blank'><FormattedMessage id='getting_started.invite' defaultMessage='Invite people' /></a> · </li>} + {withHotkeys && <li><Link to='/keyboard-shortcuts'><FormattedMessage id='navigation_bar.keyboard_shortcuts' defaultMessage='Hotkeys' /></Link> · </li>} + <li><a href='/auth/edit'><FormattedMessage id='getting_started.security' defaultMessage='Security' /></a> · </li> + <li><a href='/about/more' target='_blank'><FormattedMessage id='navigation_bar.info' defaultMessage='About this server' /></a> · </li> + <li><a href='https://joinmastodon.org/apps' target='_blank'><FormattedMessage id='navigation_bar.apps' defaultMessage='Mobile apps' /></a> · </li> + <li><a href='/terms' target='_blank'><FormattedMessage id='getting_started.terms' defaultMessage='Terms of service' /></a> · </li> + <li><a href='/settings/applications' target='_blank'><FormattedMessage id='getting_started.developers' defaultMessage='Developers' /></a> · </li> + <li><a href='https://docs.joinmastodon.org' target='_blank'><FormattedMessage id='getting_started.documentation' defaultMessage='Documentation' /></a> · </li> + <li><a href='/auth/sign_out' onClick={this.handleLogoutClick}><FormattedMessage id='navigation_bar.logout' defaultMessage='Logout' /></a></li> + </ul> + + <p> + <FormattedMessage + id='getting_started.open_source_notice' + defaultMessage='Mastodon is open source software. You can contribute or report issues on GitHub at {github}.' + values={{ github: <span><a href={source_url} rel='noopener noreferrer' target='_blank'>{repository}</a> (v{version})</span> }} + /> + </p> + </div> + ); + } + +}; diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js index da2ac5f26..a785551c0 100644 --- a/app/javascript/mastodon/features/ui/components/media_modal.js +++ b/app/javascript/mastodon/features/ui/components/media_modal.js @@ -3,13 +3,13 @@ import ReactSwipeableViews from 'react-swipeable-views'; import ImmutablePropTypes from 'react-immutable-proptypes'; import PropTypes from 'prop-types'; import Video from 'mastodon/features/video'; -import ExtendedVideoPlayer from 'mastodon/components/extended_video_player'; import classNames from 'classnames'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import IconButton from 'mastodon/components/icon_button'; import ImmutablePureComponent from 'react-immutable-pure-component'; import ImageLoader from './image_loader'; import Icon from 'mastodon/components/icon'; +import GIFV from 'mastodon/components/gifv'; const messages = defineMessages({ close: { id: 'lightbox.close', defaultMessage: 'Close' }, @@ -169,10 +169,8 @@ class MediaModal extends ImmutablePureComponent { ); } else if (image.get('type') === 'gifv') { return ( - <ExtendedVideoPlayer + <GIFV src={image.get('url')} - muted - controls={false} width={width} height={height} key={image.get('preview_url')} @@ -228,7 +226,7 @@ class MediaModal extends ImmutablePureComponent { {status && ( <div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}> - <a href={status.get('url')} onClick={this.handleStatusClick}><FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> + <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> </div> )} diff --git a/app/javascript/mastodon/features/ui/components/modal_root.js b/app/javascript/mastodon/features/ui/components/modal_root.js index cc2ab6c8c..5cf70a0cc 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.js +++ b/app/javascript/mastodon/features/ui/components/modal_root.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Base from '../../../components/modal_root'; +import { getScrollbarWidth } from 'mastodon/utils/scrollbar'; +import Base from 'mastodon/components/modal_root'; import BundleContainer from '../containers/bundle_container'; import BundleModalError from './bundle_modal_error'; import ModalLoading from './modal_loading'; @@ -8,10 +9,12 @@ import ActionsModal from './actions_modal'; import MediaModal from './media_modal'; import VideoModal from './video_modal'; import BoostModal from './boost_modal'; +import AudioModal from './audio_modal'; import ConfirmationModal from './confirmation_modal'; import FocalPointModal from './focal_point_modal'; import { MuteModal, + BlockModal, ReportModal, EmbedModal, ListEditor, @@ -21,9 +24,11 @@ import { const MODAL_COMPONENTS = { 'MEDIA': () => Promise.resolve({ default: MediaModal }), 'VIDEO': () => Promise.resolve({ default: VideoModal }), + 'AUDIO': () => Promise.resolve({ default: AudioModal }), 'BOOST': () => Promise.resolve({ default: BoostModal }), 'CONFIRM': () => Promise.resolve({ default: ConfirmationModal }), 'MUTE': MuteModal, + 'BLOCK': BlockModal, 'REPORT': ReportModal, 'ACTIONS': () => Promise.resolve({ default: ActionsModal }), 'EMBED': EmbedModal, @@ -47,8 +52,10 @@ export default class ModalRoot extends React.PureComponent { componentDidUpdate (prevProps, prevState, { visible }) { if (visible) { document.body.classList.add('with-modals--active'); + document.documentElement.style.marginRight = `${getScrollbarWidth()}px`; } else { document.body.classList.remove('with-modals--active'); + document.documentElement.style.marginRight = 0; } } diff --git a/app/javascript/mastodon/features/ui/components/mute_modal.js b/app/javascript/mastodon/features/ui/components/mute_modal.js index ac356b42a..852830c3c 100644 --- a/app/javascript/mastodon/features/ui/components/mute_modal.js +++ b/app/javascript/mastodon/features/ui/components/mute_modal.js @@ -11,7 +11,6 @@ import { toggleHideNotifications } from '../../../actions/mutes'; const mapStateToProps = state => { return { - isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), account: state.getIn(['mutes', 'new', 'account']), notifications: state.getIn(['mutes', 'new', 'notifications']), }; @@ -38,7 +37,6 @@ export default @connect(mapStateToProps, mapDispatchToProps) class MuteModal extends React.PureComponent { static propTypes = { - isSubmitting: PropTypes.bool.isRequired, account: PropTypes.object.isRequired, notifications: PropTypes.bool.isRequired, onClose: PropTypes.func.isRequired, @@ -81,11 +79,16 @@ class MuteModal extends React.PureComponent { values={{ name: <strong>@{account.get('acct')}</strong> }} /> </p> - <div> - <label htmlFor='mute-modal__hide-notifications-checkbox'> + <p className='mute-modal__explanation'> + <FormattedMessage + id='confirmations.mute.explanation' + defaultMessage='This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.' + /> + </p> + <div className='setting-toggle'> + <Toggle id='mute-modal__hide-notifications-checkbox' checked={notifications} onChange={this.toggleNotifications} /> + <label className='setting-toggle__label' htmlFor='mute-modal__hide-notifications-checkbox'> <FormattedMessage id='mute_modal.hide_notifications' defaultMessage='Hide notifications from this user?' /> - {' '} - <Toggle id='mute-modal__hide-notifications-checkbox' checked={notifications} onChange={this.toggleNotifications} /> </label> </div> </div> diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.js b/app/javascript/mastodon/features/ui/components/navigation_panel.js index ef3ad2e09..0c12852f5 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.js +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.js @@ -2,10 +2,11 @@ import React from 'react'; import { NavLink, withRouter } from 'react-router-dom'; import { FormattedMessage } from 'react-intl'; import Icon from 'mastodon/components/icon'; -import { profile_directory } from 'mastodon/initial_state'; +import { profile_directory, showTrends } from 'mastodon/initial_state'; import NotificationsCounterIcon from './notifications_counter_icon'; import FollowRequestsNavLink from './follow_requests_nav_link'; import ListPanel from './list_panel'; +import TrendsContainer from 'mastodon/features/getting_started/containers/trends_container'; const NavigationPanel = () => ( <div className='navigation-panel'> @@ -16,7 +17,9 @@ const NavigationPanel = () => ( <NavLink className='column-link column-link--transparent' exact to='/timelines/public' data-preview-title-id='column.public' data-preview-icon='globe' ><Icon className='column-link__icon' id='globe' fixedWidth /><FormattedMessage id='tabs_bar.federated_timeline' defaultMessage='Federated' /></NavLink> <NavLink className='column-link column-link--transparent' to='/timelines/direct'><Icon className='column-link__icon' id='envelope' fixedWidth /><FormattedMessage id='navigation_bar.direct' defaultMessage='Direct messages' /></NavLink> <NavLink className='column-link column-link--transparent' to='/favourites'><Icon className='column-link__icon' id='star' fixedWidth /><FormattedMessage id='navigation_bar.favourites' defaultMessage='Favourites' /></NavLink> + <NavLink className='column-link column-link--transparent' to='/bookmarks'><Icon className='column-link__icon' id='bookmark' fixedWidth /><FormattedMessage id='navigation_bar.bookmarks' defaultMessage='Bookmarks' /></NavLink> <NavLink className='column-link column-link--transparent' to='/lists'><Icon className='column-link__icon' id='list-ul' fixedWidth /><FormattedMessage id='navigation_bar.lists' defaultMessage='Lists' /></NavLink> + {profile_directory && <NavLink className='column-link column-link--transparent' to='/directory'><Icon className='column-link__icon' id='address-book-o' fixedWidth /><FormattedMessage id='getting_started.directory' defaultMessage='Profile directory' /></NavLink>} <ListPanel /> @@ -24,7 +27,9 @@ const NavigationPanel = () => ( <a className='column-link column-link--transparent' href='/settings/preferences'><Icon className='column-link__icon' id='cog' fixedWidth /><FormattedMessage id='navigation_bar.preferences' defaultMessage='Preferences' /></a> <a className='column-link column-link--transparent' href='/relationships'><Icon className='column-link__icon' id='users' fixedWidth /><FormattedMessage id='navigation_bar.follows_and_followers' defaultMessage='Follows and followers' /></a> - {!!profile_directory && <a className='column-link column-link--transparent' href='/explore'><Icon className='column-link__icon' id='address-book-o' fixedWidth /><FormattedMessage id='navigation_bar.profile_directory' defaultMessage='Profile directory' /></a>} + + {showTrends && <div className='flex-spacer' />} + {showTrends && <TrendsContainer />} </div> ); diff --git a/app/javascript/mastodon/features/ui/components/tabs_bar.js b/app/javascript/mastodon/features/ui/components/tabs_bar.js index 29583d3d7..1911da8ba 100644 --- a/app/javascript/mastodon/features/ui/components/tabs_bar.js +++ b/app/javascript/mastodon/features/ui/components/tabs_bar.js @@ -73,9 +73,13 @@ class TabsBar extends React.PureComponent { const { intl: { formatMessage } } = this.props; return ( - <nav className='tabs-bar' ref={this.setRef}> - {links.map(link => React.cloneElement(link, { key: link.props.to, onClick: this.handleClick, 'aria-label': formatMessage({ id: link.props['data-preview-title-id'] }) }))} - </nav> + <div className='tabs-bar__wrapper'> + <nav className='tabs-bar' ref={this.setRef}> + {links.map(link => React.cloneElement(link, { key: link.props.to, onClick: this.handleClick, 'aria-label': formatMessage({ id: link.props['data-preview-title-id'] }) }))} + </nav> + + <div id='tabs-bar__portal' /> + </div> ); } diff --git a/app/javascript/mastodon/features/ui/components/video_modal.js b/app/javascript/mastodon/features/ui/components/video_modal.js index 213d31316..f37fc796f 100644 --- a/app/javascript/mastodon/features/ui/components/video_modal.js +++ b/app/javascript/mastodon/features/ui/components/video_modal.js @@ -4,6 +4,8 @@ import PropTypes from 'prop-types'; import Video from 'mastodon/features/video'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { FormattedMessage } from 'react-intl'; +import classNames from 'classnames'; +import Icon from 'mastodon/components/icon'; export const previewState = 'previewVideoModal'; @@ -52,22 +54,25 @@ export default class VideoModal extends ImmutablePureComponent { render () { const { media, status, time, onClose } = this.props; - const link = status && <a href={status.get('url')} onClick={this.handleStatusClick}><FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>; - return ( <div className='modal-root__modal video-modal'> - <div> + <div className='video-modal__container'> <Video preview={media.get('preview_url')} blurhash={media.get('blurhash')} src={media.get('url')} startTime={time} onCloseVideo={onClose} - link={link} detailed alt={media.get('description')} /> </div> + + {status && ( + <div className={classNames('media-modal__meta')}> + <a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a> + </div> + )} </div> ); } diff --git a/app/javascript/mastodon/features/ui/containers/notifications_container.js b/app/javascript/mastodon/features/ui/containers/notifications_container.js index b60a0216f..3819da3d8 100644 --- a/app/javascript/mastodon/features/ui/containers/notifications_container.js +++ b/app/javascript/mastodon/features/ui/containers/notifications_container.js @@ -11,7 +11,7 @@ const mapStateToProps = (state, { intl }) => { const value = notification[key]; if (typeof value === 'object') { - notification[key] = intl.formatMessage(value); + notification[key] = intl.formatMessage(value, notification[`${key}_values`]); } })); diff --git a/app/javascript/mastodon/features/ui/containers/status_list_container.js b/app/javascript/mastodon/features/ui/containers/status_list_container.js index 3df5b7bea..9f6cbf988 100644 --- a/app/javascript/mastodon/features/ui/containers/status_list_container.js +++ b/app/javascript/mastodon/features/ui/containers/status_list_container.js @@ -1,14 +1,14 @@ import { connect } from 'react-redux'; import StatusList from '../../../components/status_list'; -import { scrollTopTimeline } from '../../../actions/timelines'; +import { scrollTopTimeline, loadPending } from '../../../actions/timelines'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import { createSelector } from 'reselect'; import { debounce } from 'lodash'; import { me } from '../../../initial_state'; -const makeGetStatusIds = () => createSelector([ +const makeGetStatusIds = (pending = false) => createSelector([ (state, { type }) => state.getIn(['settings', type], ImmutableMap()), - (state, { type }) => state.getIn(['timelines', type, 'items'], ImmutableList()), + (state, { type }) => state.getIn(['timelines', type, pending ? 'pendingItems' : 'items'], ImmutableList()), (state) => state.get('statuses'), ], (columnSettings, statusIds, statuses) => { return statusIds.filter(id => { @@ -31,12 +31,14 @@ const makeGetStatusIds = () => createSelector([ const makeMapStateToProps = () => { const getStatusIds = makeGetStatusIds(); + const getPendingStatusIds = makeGetStatusIds(true); const mapStateToProps = (state, { timelineId }) => ({ statusIds: getStatusIds(state, { type: timelineId }), isLoading: state.getIn(['timelines', timelineId, 'isLoading'], true), isPartial: state.getIn(['timelines', timelineId, 'isPartial'], false), hasMore: state.getIn(['timelines', timelineId, 'hasMore']), + numPending: getPendingStatusIds(state, { type: timelineId }).size, }); return mapStateToProps; @@ -52,6 +54,8 @@ const mapDispatchToProps = (dispatch, { timelineId }) => ({ dispatch(scrollTopTimeline(timelineId, false)); }, 100), + onLoadPending: () => dispatch(loadPending(timelineId)), + }); export default connect(makeMapStateToProps, mapDispatchToProps)(StatusList); diff --git a/app/javascript/mastodon/features/ui/index.js b/app/javascript/mastodon/features/ui/index.js index 791133afd..957e80737 100644 --- a/app/javascript/mastodon/features/ui/index.js +++ b/app/javascript/mastodon/features/ui/index.js @@ -15,9 +15,12 @@ import { expandHomeTimeline } from '../../actions/timelines'; import { expandNotifications } from '../../actions/notifications'; import { fetchFilters } from '../../actions/filters'; import { clearHeight } from '../../actions/height_cache'; +import { focusApp, unfocusApp } from 'mastodon/actions/app'; +import { submitMarkers } from 'mastodon/actions/markers'; import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers'; import UploadArea from './components/upload_area'; import ColumnsAreaContainer from './containers/columns_area_container'; +import DocumentTitle from './components/document_title'; import { Compose, Status, @@ -38,6 +41,7 @@ import { FollowRequests, GenericNotFound, FavouritedStatuses, + BookmarkedStatuses, ListTimeline, Blocks, DomainBlocks, @@ -45,6 +49,7 @@ import { PinnedStatuses, Lists, Search, + Directory, } from './util/async-components'; import { me, forceSingleColumn } from '../../initial_state'; import { previewState as previewMediaState } from './components/media_modal'; @@ -62,6 +67,7 @@ const mapStateToProps = state => ({ isComposing: state.getIn(['compose', 'is_composing']), hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0, hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0, + canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4, dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null, }); @@ -94,6 +100,7 @@ const keyMap = { goToRequests: 'g r', toggleHidden: 'x', toggleSensitive: 'h', + openMedia: 'e', }; class SwitchingColumnsArea extends React.PureComponent { @@ -110,12 +117,25 @@ class SwitchingColumnsArea extends React.PureComponent { componentWillMount () { window.addEventListener('resize', this.handleResize, { passive: true }); + + if (this.state.mobile || forceSingleColumn) { + document.body.classList.toggle('layout-single-column', true); + document.body.classList.toggle('layout-multiple-columns', false); + } else { + document.body.classList.toggle('layout-single-column', false); + document.body.classList.toggle('layout-multiple-columns', true); + } } - componentDidUpdate (prevProps) { + componentDidUpdate (prevProps, prevState) { if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) { this.node.handleChildrenContentChange(); } + + if (prevState.mobile !== this.state.mobile && !forceSingleColumn) { + document.body.classList.toggle('layout-single-column', this.state.mobile); + document.body.classList.toggle('layout-multiple-columns', !this.state.mobile); + } } componentWillUnmount () { @@ -126,17 +146,29 @@ class SwitchingColumnsArea extends React.PureComponent { return location.state !== previewMediaState && location.state !== previewVideoState; } - handleResize = debounce(() => { + handleLayoutChange = debounce(() => { // The cached heights are no longer accurate, invalidate this.props.onLayoutChange(); - - this.setState({ mobile: isMobile(window.innerWidth) }); }, 500, { trailing: true, - }); + }) + + handleResize = () => { + const mobile = isMobile(window.innerWidth); + + if (mobile !== this.state.mobile) { + this.handleLayoutChange.cancel(); + this.props.onLayoutChange(); + this.setState({ mobile }); + } else { + this.handleLayoutChange(); + } + } setRef = c => { - this.node = c.getWrappedInstance(); + if (c) { + this.node = c.getWrappedInstance(); + } } render () { @@ -160,9 +192,11 @@ class SwitchingColumnsArea extends React.PureComponent { <WrappedRoute path='/notifications' component={Notifications} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} /> <WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} /> + <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} /> <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} /> <WrappedRoute path='/search' component={Search} content={children} /> + <WrappedRoute path='/directory' component={Directory} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} /> <WrappedRoute path='/statuses/new' component={Compose} content={children} /> <WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} componentParams={{ shouldUpdateScroll: this.shouldUpdateScroll }} /> @@ -204,6 +238,7 @@ class UI extends React.PureComponent { isComposing: PropTypes.bool, hasComposingText: PropTypes.bool, hasMediaAttachments: PropTypes.bool, + canUploadMore: PropTypes.bool, location: PropTypes.object, intl: PropTypes.object.isRequired, dropdownMenuIsOpen: PropTypes.bool, @@ -213,8 +248,10 @@ class UI extends React.PureComponent { draggingOver: false, }; - handleBeforeUnload = (e) => { - const { intl, isComposing, hasComposingText, hasMediaAttachments } = this.props; + handleBeforeUnload = e => { + const { intl, dispatch, isComposing, hasComposingText, hasMediaAttachments } = this.props; + + dispatch(submitMarkers()); if (isComposing && (hasComposingText || hasMediaAttachments)) { // Setting returnValue to any string causes confirmation dialog. @@ -224,6 +261,14 @@ class UI extends React.PureComponent { } } + handleWindowFocus = () => { + this.props.dispatch(focusApp()); + } + + handleWindowBlur = () => { + this.props.dispatch(unfocusApp()); + } + handleLayoutChange = () => { // The cached heights are no longer accurate, invalidate this.props.dispatch(clearHeight()); @@ -240,13 +285,14 @@ class UI extends React.PureComponent { this.dragTargets.push(e.target); } - if (e.dataTransfer && Array.from(e.dataTransfer.types).includes('Files')) { + if (e.dataTransfer && Array.from(e.dataTransfer.types).includes('Files') && this.props.canUploadMore) { this.setState({ draggingOver: true }); } } handleDragOver = (e) => { if (this.dataTransferIsText(e.dataTransfer)) return false; + e.preventDefault(); e.stopPropagation(); @@ -261,12 +307,13 @@ class UI extends React.PureComponent { handleDrop = (e) => { if (this.dataTransferIsText(e.dataTransfer)) return; + e.preventDefault(); this.setState({ draggingOver: false }); this.dragTargets = []; - if (e.dataTransfer && e.dataTransfer.files.length >= 1) { + if (e.dataTransfer && e.dataTransfer.files.length >= 1 && this.props.canUploadMore) { this.props.dispatch(uploadCompose(e.dataTransfer.files)); } } @@ -285,7 +332,7 @@ class UI extends React.PureComponent { } dataTransferIsText = (dataTransfer) => { - return (dataTransfer && Array.from(dataTransfer.types).includes('text/plain') && dataTransfer.items.length === 1); + return (dataTransfer && Array.from(dataTransfer.types).filter((type) => type === 'text/plain').length === 1); } closeUploadModal = () => { @@ -301,6 +348,8 @@ class UI extends React.PureComponent { } componentWillMount () { + window.addEventListener('focus', this.handleWindowFocus, false); + window.addEventListener('blur', this.handleWindowBlur, false); window.addEventListener('beforeunload', this.handleBeforeUnload, false); document.addEventListener('dragenter', this.handleDragEnter, false); @@ -330,7 +379,10 @@ class UI extends React.PureComponent { } componentWillUnmount () { + window.removeEventListener('focus', this.handleWindowFocus); + window.removeEventListener('blur', this.handleWindowBlur); window.removeEventListener('beforeunload', this.handleBeforeUnload); + document.removeEventListener('dragenter', this.handleDragEnter); document.removeEventListener('dragover', this.handleDragOver); document.removeEventListener('drop', this.handleDrop); @@ -489,6 +541,7 @@ class UI extends React.PureComponent { <LoadingBarContainer className='loading-bar' /> <ModalContainer /> <UploadArea active={draggingOver} onClose={this.closeUploadModal} /> + <DocumentTitle /> </div> </HotKeys> ); diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index 6e8ed163a..986efda1e 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -90,6 +90,10 @@ export function FavouritedStatuses () { return import(/* webpackChunkName: "features/favourited_statuses" */'../../favourited_statuses'); } +export function BookmarkedStatuses () { + return import(/* webpackChunkName: "features/bookmarked_statuses" */'../../bookmarked_statuses'); +} + export function Blocks () { return import(/* webpackChunkName: "features/blocks" */'../../blocks'); } @@ -106,6 +110,10 @@ export function MuteModal () { return import(/* webpackChunkName: "modals/mute_modal" */'../components/mute_modal'); } +export function BlockModal () { + return import(/* webpackChunkName: "modals/block_modal" */'../components/block_modal'); +} + export function ReportModal () { return import(/* webpackChunkName: "modals/report_modal" */'../components/report_modal'); } @@ -133,3 +141,15 @@ export function ListAdder () { export function Search () { return import(/*webpackChunkName: "features/search" */'../../search'); } + +export function Tesseract () { + return import(/*webpackChunkName: "tesseract" */'tesseract.js'); +} + +export function Audio () { + return import(/* webpackChunkName: "features/audio" */'../../audio'); +} + +export function Directory () { + return import(/* webpackChunkName: "features/directory" */'../../directory'); +} diff --git a/app/javascript/mastodon/features/video/index.js b/app/javascript/mastodon/features/video/index.js index b0c408527..f6aeb8c9a 100644 --- a/app/javascript/mastodon/features/video/index.js +++ b/app/javascript/mastodon/features/video/index.js @@ -5,7 +5,7 @@ import { fromJS, is } from 'immutable'; import { throttle } from 'lodash'; import classNames from 'classnames'; import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen'; -import { displayMedia } from '../../initial_state'; +import { displayMedia, useBlurhash } from '../../initial_state'; import Icon from 'mastodon/components/icon'; import { decode } from 'blurhash'; @@ -19,9 +19,10 @@ const messages = defineMessages({ close: { id: 'video.close', defaultMessage: 'Close video' }, fullscreen: { id: 'video.fullscreen', defaultMessage: 'Full screen' }, exit_fullscreen: { id: 'video.exit_fullscreen', defaultMessage: 'Exit full screen' }, + download: { id: 'video.download', defaultMessage: 'Download file' }, }); -const formatTime = secondsNum => { +export const formatTime = secondsNum => { let hours = Math.floor(secondsNum / 3600); let minutes = Math.floor((secondsNum - (hours * 3600)) / 60); let seconds = secondsNum - (hours * 3600) - (minutes * 60); @@ -101,6 +102,7 @@ class Video extends React.PureComponent { onCloseVideo: PropTypes.func, detailed: PropTypes.bool, inline: PropTypes.bool, + editable: PropTypes.bool, cacheWidth: PropTypes.func, visible: PropTypes.bool, onToggleVisibility: PropTypes.func, @@ -298,6 +300,8 @@ class Video extends React.PureComponent { } _decode () { + if (!useBlurhash) return; + const hash = this.props.blurhash; const pixels = decode(hash, 32, 32); @@ -373,7 +377,7 @@ class Video extends React.PureComponent { } render () { - const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, link } = this.props; + const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, link, editable } = this.props; const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; const progress = (currentTime / duration) * 100; @@ -411,7 +415,7 @@ class Video extends React.PureComponent { return ( <div role='menuitem' - className={classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen })} + className={classNames('video-player', { inactive: !revealed, detailed, inline: inline && !fullscreen, fullscreen, editable })} style={playerStyle} ref={this.setPlayerRef} onMouseEnter={this.handleMouseEnter} @@ -421,7 +425,7 @@ class Video extends React.PureComponent { > <canvas width={32} height={32} ref={this.setCanvasRef} className={classNames('media-gallery__preview', { 'media-gallery__preview--hidden': revealed })} /> - {revealed && <video + {(revealed || editable) && <video ref={this.setVideoRef} src={src} poster={preview} @@ -443,7 +447,7 @@ class Video extends React.PureComponent { onVolumeChange={this.handleVolumeChange} />} - <div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed })}> + <div className={classNames('spoiler-button', { 'spoiler-button--hidden': revealed || editable })}> <button type='button' className='spoiler-button__overlay' onClick={this.toggleReveal}> <span className='spoiler-button__overlay__label'>{warning}</span> </button> @@ -463,10 +467,11 @@ class Video extends React.PureComponent { <div className='video-player__buttons-bar'> <div className='video-player__buttons left'> - <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button> + <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay} autoFocus={detailed}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button> <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button> <div className='video-player__volume' onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> + <div className='video-player__volume__current' style={{ width: `${volumeWidth}px` }} /> <span className={classNames('video-player__volume__handle')} @@ -487,10 +492,16 @@ class Video extends React.PureComponent { </div> <div className='video-player__buttons right'> - {!onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>} + {(!onCloseVideo && !editable) && <button type='button' aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>} {(!fullscreen && onOpenVideo) && <button type='button' aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>} {onCloseVideo && <button type='button' aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>} + <button type='button' aria-label={intl.formatMessage(messages.download)}> + <a className='video-player__download__icon' href={this.props.src} download> + <Icon id={'download'} fixedWidth /> + </a> + </button> <button type='button' aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button> + </div> </div> </div> diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 4e0ecef94..847d29dea 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -21,5 +21,10 @@ export const mascot = getMeta('mascot'); export const profile_directory = getMeta('profile_directory'); export const isStaff = getMeta('is_staff'); export const forceSingleColumn = !getMeta('advanced_layout'); +export const useBlurhash = getMeta('use_blurhash'); +export const usePendingItems = getMeta('use_pending_items'); +export const showTrends = getMeta('trends'); +export const title = getMeta('title'); +export const cropImages = getMeta('crop_images'); export default initialState; diff --git a/app/javascript/mastodon/load_keyboard_extensions.js b/app/javascript/mastodon/load_keyboard_extensions.js new file mode 100644 index 000000000..2dd0e45fa --- /dev/null +++ b/app/javascript/mastodon/load_keyboard_extensions.js @@ -0,0 +1,16 @@ +// On KaiOS, we may not be able to use a mouse cursor or navigate using Tab-based focus, so we install +// special left/right focus navigation keyboard listeners, at least on public pages (i.e. so folks +// can at least log in using KaiOS devices). + +function importArrowKeyNavigation() { + return import(/* webpackChunkName: "arrow-key-navigation" */ 'arrow-key-navigation'); +} + +export default function loadKeyboardExtensions() { + if (/KAIOS/.test(navigator.userAgent)) { + return importArrowKeyNavigation().then(arrowKeyNav => { + arrowKeyNav.register(); + }); + } + return Promise.resolve(); +} diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 28a18c92d..e65c81e64 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -4,39 +4,45 @@ "account.block": "حظر @{name}", "account.block_domain": "إخفاء كل شيئ قادم من اسم النطاق {domain}", "account.blocked": "محظور", + "account.cancel_follow_request": "إلغاء طلب المتابَعة", "account.direct": "رسالة خاصة إلى @{name}", "account.domain_blocked": "النطاق مخفي", - "account.edit_profile": "تعديل الملف الشخصي", - "account.endorse": "خاصّية على الملف الشخصي", + "account.edit_profile": "تعديل الملف التعريفي", + "account.endorse": "أوصِ به على صفحتك", "account.follow": "تابِع", - "account.followers": "متابعون", + "account.followers": "مُتابِعون", "account.followers.empty": "لا أحد يتبع هذا الحساب بعد.", "account.follows": "يتبع", "account.follows.empty": "هذا الحساب لا يتبع أحدًا بعد.", "account.follows_you": "يتابعك", "account.hide_reblogs": "إخفاء ترقيات @{name}", + "account.last_status": "آخر نشاط", "account.link_verified_on": "تم التحقق مِن مِلْكية هذا الرابط بتاريخ {date}", "account.locked_info": "تم تأمين خصوصية هذا الحساب عبر قفل. صاحب الحساب يُراجِع يدويا طلبات المتابَعة و الاشتراك بحسابه.", "account.media": "وسائط", - "account.mention": "أُذكُر/ي @{name}", + "account.mention": "أذكُر @{name}", "account.moved_to": "{name} انتقل إلى:", - "account.mute": "كتم @{name}", + "account.mute": "أكتم @{name}", "account.mute_notifications": "كتم الإخطارات من @{name}", "account.muted": "مكتوم", - "account.posts": "التبويقات", - "account.posts_with_replies": "التبويقات و الردود", - "account.report": "أبلغ/ي عن @{name}", + "account.never_active": "أبدا", + "account.posts": "تبويقات", + "account.posts_with_replies": "التبويقات والردود", + "account.report": "ابلِغ عن @{name}", "account.requested": "في انتظار الموافقة. اضْغَطْ/ي لإلغاء طلب المتابعة", - "account.share": "مشاركة حساب @{name}", - "account.show_reblogs": "عرض ترقيات @{name}", + "account.share": "شارك ملف تعريف @{name}", + "account.show_reblogs": "اعرض ترقيات @{name}", "account.unblock": "إلغاء الحظر عن @{name}", "account.unblock_domain": "فك الخْفى عن {domain}", - "account.unendorse": "إزالة ترويجه مِن الملف الشخصي", + "account.unendorse": "أزل ترويجه مِن الملف التعريفي", "account.unfollow": "إلغاء المتابعة", "account.unmute": "إلغاء الكتم عن @{name}", "account.unmute_notifications": "إلغاء كتم إخطارات @{name}", + "alert.rate_limited.message": "يرجى إعادة المحاولة بعد {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "لقد طرأ هناك خطأ غير متوقّع.", "alert.unexpected.title": "المعذرة!", + "autosuggest_hashtag.per_week": "{count} في الأسبوع", "boost_modal.combo": "يمكنك/ي ضغط {combo} لتخطّي هذه في المرّة القادمة", "bundle_column_error.body": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", "bundle_column_error.retry": "إعادة المحاولة", @@ -45,8 +51,9 @@ "bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.", "bundle_modal_error.retry": "إعادة المحاولة", "column.blocks": "الحسابات المحجوبة", - "column.community": "التَسَلْسُل الزَمني المحلي", + "column.community": "الخيط العام المحلي", "column.direct": "الرسائل المباشرة", + "column.directory": "استعراض الملفات التعريفية", "column.domain_blocks": "النطاقات المخفية", "column.favourites": "المفضلة", "column.follow_requests": "طلبات المتابعة", @@ -93,14 +100,25 @@ "confirmations.delete_list.message": "هل تود حقا حذف هذه القائمة ؟", "confirmations.domain_block.confirm": "إخفاء اسم النطاق كاملا", "confirmations.domain_block.message": "متأكد من أنك تود حظر اسم النطاق {domain} بالكامل ؟ في غالب الأحيان يُستَحسَن كتم أو حظر بعض الحسابات بدلا من حظر نطاق بالكامل.\nلن تتمكن مِن رؤية محتوى هذا النطاق لا على خيوطك العمومية و لا في إشعاراتك. سوف يتم كذلك إزالة كافة متابعيك المنتمين إلى هذا النطاق.", + "confirmations.logout.confirm": "خروج", + "confirmations.logout.message": "متأكد من أنك تريد الخروج؟", "confirmations.mute.confirm": "أكتم", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "هل أنت متأكد أنك تريد كتم {name} ؟", "confirmations.redraft.confirm": "إزالة و إعادة الصياغة", - "confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته ؟ سوف تفقد جميع الإعجابات و الترقيات أما الردود المتصلة به فستُصبِح يتيمة.", + "confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته؟ سوف تفقد جميع الإعجابات و الترقيات أما الردود المتصلة به فستُصبِح يتيمة.", "confirmations.reply.confirm": "رد", "confirmations.reply.message": "الرد في الحين سوف يُعيد كتابة الرسالة التي أنت بصدد كتابتها. متأكد من أنك تريد المواصلة؟", "confirmations.unfollow.confirm": "إلغاء المتابعة", "confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟", + "conversation.delete": "احذف المحادثة", + "conversation.mark_as_read": "اعتبرها كمقروءة", + "conversation.open": "اعرض المحادثة", + "conversation.with": "بـ {names}", + "directory.federated": "مِن الفديفرس المعروف", + "directory.local": "مِن {domain} فقط", + "directory.new_arrivals": "الوافدون الجُدد", + "directory.recently_active": "نشط مؤخرا", "embed.instructions": "يمكنكم إدماج هذا المنشور على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.", "embed.preview": "هكذا ما سوف يبدو عليه:", "emoji_button.activity": "الأنشطة", @@ -109,18 +127,18 @@ "emoji_button.food": "الطعام والشراب", "emoji_button.label": "أدرج إيموجي", "emoji_button.nature": "الطبيعة", - "emoji_button.not_found": "لا إيموجو !! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "لا إيموجو!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "أشياء", "emoji_button.people": "الناس", "emoji_button.recent": "الشائعة الاستخدام", "emoji_button.search": "ابحث...", "emoji_button.search_results": "نتائج البحث", "emoji_button.symbols": "رموز", - "emoji_button.travel": "أماكن و أسفار", + "emoji_button.travel": "الأماكن والسفر", "empty_column.account_timeline": "ليس هناك تبويقات!", - "empty_column.account_unavailable": "الملف الشخصي غير متوفر", + "empty_column.account_unavailable": "الملف التعريفي غير متوفر", "empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.", - "empty_column.community": "الخط الزمني المحلي فارغ. أكتب شيئا ما للعامة كبداية!", + "empty_column.community": "الخط العام المحلي فارغ. أكتب شيئا ما للعامة كبداية!", "empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.", "empty_column.domain_blocks": "ليس هناك نطاقات مخفية بعد.", "empty_column.favourited_statuses": "ليس لديك أية تبويقات مفضلة بعد. عندما ستقوم بالإعجاب بواحد، سيظهر هنا.", @@ -134,10 +152,14 @@ "empty_column.mutes": "لم تقم بكتم أي مستخدم بعد.", "empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.", "empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "الإبلاغ عن خلل", "follow_request.authorize": "ترخيص", "follow_request.reject": "رفض", "getting_started.developers": "المُطوِّرون", - "getting_started.directory": "دليل المستخدِمين والمستخدِمات", + "getting_started.directory": "دليل الصفحات التعريفية", "getting_started.documentation": "الدليل", "getting_started.heading": "استعدّ للبدء", "getting_started.invite": "دعوة أشخاص", @@ -153,9 +175,9 @@ "hashtag.column_settings.tag_mode.any": "أي كان مِن هذه", "hashtag.column_settings.tag_mode.none": "لا شيء مِن هذه", "hashtag.column_settings.tag_toggle": "إدراج الوسوم الإضافية لهذا العمود", - "home.column_settings.basic": "أساسية", - "home.column_settings.show_reblogs": "عرض الترقيات", - "home.column_settings.show_replies": "عرض الردود", + "home.column_settings.basic": "الأساسية", + "home.column_settings.show_reblogs": "اعرض الترقيات", + "home.column_settings.show_replies": "اعرض الردود", "intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}", "intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}", "intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}", @@ -164,8 +186,8 @@ "introduction.federation.federated.text": "كافة المنشورات التي نُشِرت إلى العامة على الخوادم الأخرى للفديفرس سوف يتم عرضها على الخيط المُوحَّد.", "introduction.federation.home.headline": "الرئيسي", "introduction.federation.home.text": "سوف تُعرَض منشورات الأشخاص الذين تُتابِعهم على الخيط الرئيسي. بإمكانك متابعة أي حساب أيا كان الخادم الذي هو عليه!", - "introduction.federation.local.headline": "المحلي", - "introduction.federation.local.text": "المنشورات المُوجّهة للعامة على نفس الخادم الذي أنتم عليه ستظهر على الخيط الزمني المحلي.", + "introduction.federation.local.headline": "الخيط العام المحلي", + "introduction.federation.local.text": "المنشورات المُوجّهة للعامة على نفس الخادم الذي أنتم عليه ستظهر على الخيط العام المحلي.", "introduction.interactions.action": "إنهاء العرض التوضيحي!", "introduction.interactions.favourite.headline": "الإضافة إلى المفضلة", "introduction.interactions.favourite.text": "يمكِنك إضافة أي تبويق إلى المفضلة و إعلام صاحبه أنك أعجِبت بذاك التبويق.", @@ -175,7 +197,7 @@ "introduction.interactions.reply.text": "يمكنكم الرد على تبويقاتكم و تبويقات الآخرين على شكل سلسلة محادثة.", "introduction.welcome.action": "هيا بنا!", "introduction.welcome.headline": "الخطوات الأولى", - "introduction.welcome.text": "مرحبا بكم على الفديفرس! بعد لحظات قليلة ، سيكون بمقدوركم بث رسائل والتحدث إلى أصدقائكم عبر تشكيلة واسعة من الخوادم المختلفة. هذا الخادم ، {domain} ، يستضيف ملفكم الشخصي ، لذا يجب تذكر اسمه جيدا.", + "introduction.welcome.text": "مرحبا بكم على الفديفرس! بعد لحظات قليلة ، سيكون بمقدوركم بث رسائل والتحدث إلى أصدقائكم عبر تشكيلة واسعة من الخوادم المختلفة. هذا الخادم ، {domain} ، يستضيف صفحتكم التعريفية ، لذا يجب تذكر اسمه جيدا.", "keyboard_shortcuts.back": "للعودة", "keyboard_shortcuts.blocked": "لفتح قائمة المستخدمين المحظورين", "keyboard_shortcuts.boost": "للترقية", @@ -192,13 +214,13 @@ "keyboard_shortcuts.home": "لفتح الخيط الرئيسي", "keyboard_shortcuts.hotkey": "مفتاح الاختصار", "keyboard_shortcuts.legend": "لعرض هذا المفتاح", - "keyboard_shortcuts.local": "لفتح الخيط الزمني المحلي", + "keyboard_shortcuts.local": "لفتح الخيط العام المحلي", "keyboard_shortcuts.mention": "لذِكر الناشر", "keyboard_shortcuts.muted": "لفتح قائمة المستخدِمين المكتومين", - "keyboard_shortcuts.my_profile": "لفتح ملفك الشخصي", + "keyboard_shortcuts.my_profile": "لفتح ملفك التعريفي", "keyboard_shortcuts.notifications": "لفتح عمود الإشعارات", "keyboard_shortcuts.pinned": "لفتح قائمة التبويقات المدبسة", - "keyboard_shortcuts.profile": "لفتح رابط الناشر", + "keyboard_shortcuts.profile": "لفتح الملف التعريفي للناشر", "keyboard_shortcuts.reply": "للردّ", "keyboard_shortcuts.requests": "لفتح قائمة طلبات المتابعة", "keyboard_shortcuts.search": "للتركيز على البحث", @@ -215,15 +237,16 @@ "lists.account.add": "أضف إلى القائمة", "lists.account.remove": "احذف من القائمة", "lists.delete": "احذف القائمة", - "lists.edit": "تعديل القائمة", + "lists.edit": "عدّل القائمة", "lists.edit.submit": "تعديل العنوان", "lists.new.create": "إنشاء قائمة", "lists.new.title_placeholder": "عنوان القائمة الجديدة", "lists.search": "إبحث في قائمة الحسابات التي تُتابِعها", "lists.subheading": "قوائمك", - "loading_indicator.label": "تحميل ...", + "load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}", + "loading_indicator.label": "تحميل...", "media_gallery.toggle_visible": "عرض / إخفاء", - "missing_indicator.label": "تعذر العثور عليه", + "missing_indicator.label": "غير موجود", "missing_indicator.sublabel": "تعذر العثور على هذا المورد", "mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟", "navigation_bar.apps": "تطبيقات الأجهزة المحمولة", @@ -233,7 +256,7 @@ "navigation_bar.direct": "الرسائل المباشِرة", "navigation_bar.discover": "اكتشف", "navigation_bar.domain_blocks": "النطاقات المخفية", - "navigation_bar.edit_profile": "تعديل الملف الشخصي", + "navigation_bar.edit_profile": "عدّل الملف التعريفي", "navigation_bar.favourites": "المفضلة", "navigation_bar.filters": "الكلمات المكتومة", "navigation_bar.follow_requests": "طلبات المتابعة", @@ -246,21 +269,20 @@ "navigation_bar.personal": "شخصي", "navigation_bar.pins": "التبويقات المثبتة", "navigation_bar.preferences": "التفضيلات", - "navigation_bar.profile_directory": "دليل المستخدِمين", "navigation_bar.public_timeline": "الخيط العام الموحد", "navigation_bar.security": "الأمان", "notification.favourite": "أُعجِب {name} بمنشورك", "notification.follow": "{name} يتابعك", "notification.mention": "{name} ذكرك", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "لقد إنتها تصويت شاركت فيه", "notification.reblog": "{name} قام بترقية تبويقك", "notifications.clear": "امسح الإخطارات", "notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟", "notifications.column_settings.alert": "إشعارات سطح المكتب", "notifications.column_settings.favourite": "المُفَضَّلة:", - "notifications.column_settings.filter_bar.advanced": "عرض كافة الفئات", + "notifications.column_settings.filter_bar.advanced": "اعرض كافة الفئات", "notifications.column_settings.filter_bar.category": "شريط الفلترة السريعة", - "notifications.column_settings.filter_bar.show": "عرض", + "notifications.column_settings.filter_bar.show": "اظهِره", "notifications.column_settings.follow": "متابعُون جُدُد:", "notifications.column_settings.mention": "الإشارات:", "notifications.column_settings.poll": "نتائج استطلاع الرأي:", @@ -277,8 +299,10 @@ "notifications.group": "{count} إشعارات", "poll.closed": "انتهى", "poll.refresh": "تحديث", + "poll.total_people": "{count, plural, one {# شخص} two {# شخصين} few {# أشخاص} many {# أشخاص} other {# أشخاص}}", "poll.total_votes": "{count, plural, one {# صوت} other {# أصوات}}", "poll.vote": "صَوّت", + "poll.voted": "لقد صوّتت على هذه الإجابة", "poll_button.add_poll": "إضافة استطلاع للرأي", "poll_button.remove_poll": "إزالة استطلاع الرأي", "privacy.change": "اضبط خصوصية المنشور", @@ -290,6 +314,7 @@ "privacy.public.short": "للعامة", "privacy.unlisted.long": "لا تقم بإدراجه على الخيوط العامة", "privacy.unlisted.short": "غير مدرج", + "refresh": "أنعِش", "regeneration_indicator.label": "جارٍ التحميل…", "regeneration_indicator.sublabel": "جارٍ تجهيز تغذية صفحتك الرئيسية!", "relative_time.days": "{number}ي", @@ -314,7 +339,8 @@ "search_results.accounts": "أشخاص", "search_results.hashtags": "الوُسوم", "search_results.statuses": "التبويقات", - "search_results.total": "{count, number} {count, plural, one {result} و {results}}", + "search_results.statuses_fts_disabled": "البحث في التبويقات عن طريق المحتوى ليس مفعل في خادم ماستدون هذا.", + "search_results.total": "{count, number} {count, plural, zero {} one {نتيجة} two {نتيجتين} few {نتائج} many {نتائج} other {نتائج}}", "status.admin_account": "افتح الواجهة الإدارية لـ @{name}", "status.admin_status": "افتح هذا المنشور على واجهة الإشراف", "status.block": "احجب @{name}", @@ -334,7 +360,7 @@ "status.mute": "أكتم @{name}", "status.mute_conversation": "كتم المحادثة", "status.open": "وسع هذه المشاركة", - "status.pin": "تدبيس على الملف الشخصي", + "status.pin": "دبّسه على الصفحة التعريفية", "status.pinned": "تبويق مثبَّت", "status.read_more": "اقرأ المزيد", "status.reblog": "رَقِّي", @@ -352,29 +378,38 @@ "status.show_more": "أظهر المزيد", "status.show_more_all": "توسيع الكل", "status.show_thread": "الكشف عن المحادثة", + "status.uncached_media_warning": "غير متوفر", "status.unmute_conversation": "فك الكتم عن المحادثة", - "status.unpin": "فك التدبيس من الملف الشخصي", + "status.unpin": "فك التدبيس من الصفحة التعريفية", "suggestions.dismiss": "إلغاء الاقتراح", "suggestions.header": "يمكن أن يهمك…", "tabs_bar.federated_timeline": "الموحَّد", "tabs_bar.home": "الرئيسية", - "tabs_bar.local_timeline": "المحلي", + "tabs_bar.local_timeline": "الخيط العام المحلي", "tabs_bar.notifications": "الإخطارات", "tabs_bar.search": "البحث", "time_remaining.days": "{number, plural, one {# يوم} other {# أيام}} متبقية", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.hours": "{number, plural, one {# ساعة} other {# ساعات}} متبقية", + "time_remaining.minutes": "{number, plural, one {# دقيقة} other {# دقائق}} متبقية", "time_remaining.moments": "لحظات متبقية", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} آخرون {people}} يتحدثون", + "time_remaining.seconds": "{number, plural, one {# ثانية} other {# ثوانٍ}} متبقية", + "trends.count_by_accounts": "{count} {rawCount, plural, zero {} one {شخص واحد} two {شخصين} few {أشخاص} many {أشخاص} other {أشخاص}} تتحدّث", + "trends.trending_now": "المتداولة الآن", "ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.", "upload_area.title": "اسحب ثم أفلت للرفع", - "upload_button.label": "إضافة وسائط (JPEG، PNG، GIF، WebM، MP4، MOV)", + "upload_button.label": "إضافة وسائط ({formats})", "upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.", "upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.", "upload_form.description": "وصف للمعاقين بصريا", - "upload_form.focus": "قص", + "upload_form.edit": "تعديل", "upload_form.undo": "حذف", + "upload_modal.analyzing_picture": "جارٍ فحص الصورة…", + "upload_modal.apply": "طبّق", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "اكتشف النص مِن الصورة", + "upload_modal.edit_media": "تعديل الوسائط", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "معاينة ({ratio})", "upload_progress.label": "يرفع...", "video.close": "إغلاق الفيديو", "video.exit_fullscreen": "الخروج من وضع الشاشة المليئة", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index b911848ee..5145a6579 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -4,6 +4,7 @@ "account.block": "Bloquiar a @{name}", "account.block_domain": "Anubrir tolo de {domain}", "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Unviar un mensaxe direutu a @{name}", "account.domain_blocked": "Dominiu anubríu", "account.edit_profile": "Editar el perfil", @@ -15,6 +16,7 @@ "account.follows.empty": "Esti usuariu entá nun sigue a naide.", "account.follows_you": "Síguete", "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -23,10 +25,11 @@ "account.mute": "Silenciar a @{name}", "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "Toots", "account.posts_with_replies": "Toots y rempuestes", "account.report": "Report @{name}", - "account.requested": "Awaiting approval. Click to cancel follow request", + "account.requested": "Awaiting approval", "account.share": "Share @{name}'s profile", "account.show_reblogs": "Show boosts from @{name}", "account.unblock": "Desbloquiar a @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Asocedió un fallu inesperáu.", "alert.unexpected.title": "¡Ups!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Pues primir {combo} pa saltar esto la próxima vegada", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", @@ -47,6 +53,7 @@ "column.blocks": "Usuarios bloquiaos", "column.community": "Llinia temporal llocal", "column.direct": "Mensaxes direutos", + "column.directory": "Browse profiles", "column.domain_blocks": "Dominios anubríos", "column.favourites": "Favoritos", "column.follow_requests": "Solicitúes de siguimientu", @@ -64,7 +71,7 @@ "column_header.show_settings": "Show settings", "column_header.unpin": "Desfixar", "column_subheading.settings": "Axustes", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "Esti toot namái va unviase a los usuarios mentaos.", "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "¿De xuru que quies desaniciar dafechu esta llista?", "confirmations.domain_block.confirm": "Anubrir tol dominiu", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "¿De xuru que quies silenciar a {name}?", "confirmations.redraft.confirm": "Desaniciar y reeditar", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.message": "¿De xuru que quies dexar de siguir a {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Empotra esti estáu nun sitiu web copiando'l códigu d'embaxo.", "embed.preview": "Asina ye como va vese:", "emoji_button.activity": "Actividaes", @@ -134,6 +152,10 @@ "empty_column.mutes": "Entá nun silenciesti a dengún usuariu.", "empty_column.notifications": "Entá nun tienes dengún avisu. Interactua con otros p'aniciar la conversación.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autorizar", "follow_request.reject": "Refugar", "getting_started.developers": "Desendolcadores", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Títulu nuevu de la llista", "lists.search": "Guetar ente la xente que sigues", "lists.subheading": "Les tos llistes", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Cargando...", "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Nun s'alcontró", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Toots fixaos", "navigation_bar.preferences": "Preferencies", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Llinia temporal federada", "navigation_bar.security": "Seguranza", "notification.favourite": "{name} favourited your status", @@ -277,8 +299,10 @@ "notifications.group": "{count} avisos", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -290,6 +314,7 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", "regeneration_indicator.label": "Cargando…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "Xente", "search_results.hashtags": "Etiquetes", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Amosar más", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Desfixar del perfil", "suggestions.dismiss": "Dismiss suggestion", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "El borrador va perdese si coles de Mastodon.", "upload_area.title": "Drag & drop to upload", "upload_button.label": "Add media", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Descripción pa discapacitaos visuales", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Desaniciar", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Xubiendo...", "video.close": "Zarrar el videu", "video.exit_fullscreen": "Colar de la pantalla completa", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 783f9eb68..2ec155362 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -1,20 +1,22 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", - "account.badges.bot": "Bot", + "account.add_or_remove_from_list": "Добави или премахни от списъците", + "account.badges.bot": "бот", "account.block": "Блокирай", - "account.block_domain": "Hide everything from {domain}", - "account.blocked": "Blocked", + "account.block_domain": "скрий всичко от (домейн)", + "account.blocked": "Блокирани", + "account.cancel_follow_request": "Откажи искането за следване", "account.direct": "Direct Message @{name}", - "account.domain_blocked": "Domain hidden", + "account.domain_blocked": "Скрит домейн", "account.edit_profile": "Редактирай профила си", - "account.endorse": "Feature on profile", + "account.endorse": "Характеристика на профила", "account.follow": "Последвай", "account.followers": "Последователи", - "account.followers.empty": "No one follows this user yet.", + "account.followers.empty": "Все още никой не следва този потребител.", "account.follows": "Следвам", - "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows.empty": "Този потребител все още не следва никого.", "account.follows_you": "Твой последовател", "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Последно активен/а", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Mute @{name}", "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "Публикации", "account.posts_with_replies": "Toots with replies", "account.report": "Report @{name}", @@ -35,11 +38,14 @@ "account.unfollow": "Не следвай", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", - "bundle_column_error.retry": "Try again", + "bundle_column_error.retry": "Опитай отново", "bundle_column_error.title": "Network error", "bundle_modal_error.close": "Close", "bundle_modal_error.message": "Something went wrong while loading this component.", @@ -47,11 +53,12 @@ "column.blocks": "Blocked users", "column.community": "Local timeline", "column.direct": "Direct messages", + "column.directory": "Browse profiles", "column.domain_blocks": "Hidden domains", "column.favourites": "Favourites", "column.follow_requests": "Follow requests", "column.home": "Начало", - "column.lists": "Lists", + "column.lists": "Списъци", "column.mutes": "Muted users", "column.notifications": "Известия", "column.pins": "Pinned toot", @@ -64,7 +71,7 @@ "column_header.show_settings": "Show settings", "column_header.unpin": "Unpin", "column_subheading.settings": "Settings", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Here is what it will look like:", "emoji_button.activity": "Activity", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "getting_started.developers": "Developers", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "New list title", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Зареждане...", "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Not found", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "Предпочитания", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Публичен канал", "navigation_bar.security": "Security", "notification.favourite": "{name} хареса твоята публикация", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -290,6 +314,7 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Show more", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", @@ -367,15 +394,23 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "upload_area.title": "Drag & drop to upload", "upload_button.label": "Добави медия", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Отмяна", - "upload_progress.label": "Uploading...", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", "video.close": "Close video", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 93e7eedf9..5cf5f7a76 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -1,12 +1,13 @@ { - "account.add_or_remove_from_list": "তালিকাতে আরো যুক্ত বা মুছে ফেলুন", - "account.badges.bot": "রোবট", - "account.block": "@{name} বন্ধ করুন", - "account.block_domain": "{domain} থেকে সব সরিয়ে ফেলুন", - "account.blocked": "বন্ধ করা হয়েছে", - "account.direct": "@{name}কে সরকারি লিখুন", - "account.domain_blocked": "ওয়েবসাইট সরিয়ে ফেলা হয়েছে", - "account.edit_profile": "নিজের পাতা সম্পাদনা করুন", + "account.add_or_remove_from_list": "তালিকা হতে মুছুন অথবা যুক্ত করুন", + "account.badges.bot": "বট", + "account.block": "@{name} কে ব্লক করুন", + "account.block_domain": "{domain} থেকে সব লুকান", + "account.blocked": "ব্লককৃত", + "account.cancel_follow_request": "অসুসারণ অনুরোধ বাতিল করুন", + "account.direct": "@{name} কে সরাসরি বার্তা", + "account.domain_blocked": "ডোমেন লুকানো আছে", + "account.edit_profile": "প্রোফাইল সম্পাদন করুন", "account.endorse": "নিজের পাতায় দেখান", "account.follow": "অনুসরণ করুন", "account.followers": "অনুসরণকারক", @@ -14,40 +15,46 @@ "account.follows": "যাদেরকে অনুসরণ করেন", "account.follows.empty": "এই ব্যবহারকারী কাওকে এখনো অনুসরণ করেন না।", "account.follows_you": "আপনাকে অনুসরণ করে", - "account.hide_reblogs": "@{name}র সমর্থনগুলি সরিয়ে ফেলুন", + "account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন", + "account.last_status": "শেষ সক্রিয় ছিল", "account.link_verified_on": "এই লিংকের মালিকানা চেক করা হয়েছে {date} তারিকে", "account.locked_info": "এই নিবন্ধনের গোপনীয়তার ক্ষেত্র তালা দেওয়া আছে। নিবন্ধনকারী অনুসরণ করার অনুমতি যাদেরকে দেবেন, শুধু তারাই অনুসরণ করতে পারবেন।", - "account.media": "ছবি বা ভিডিও", + "account.media": "মিডিয়া", "account.mention": "@{name} কে উল্লেখ করুন", - "account.moved_to": "{name} চলে গেছে এখানে:", - "account.mute": "@{name}র কার্যক্রম সরিয়ে ফেলুন", + "account.moved_to": "{name} কে এখানে সরানো হয়েছে:", + "account.mute": "@{name} কে নিঃশব্দ করুন", "account.mute_notifications": "@{name}র প্রজ্ঞাপন আপনার কাছ থেকে সরিয়ে ফেলুন", "account.muted": "সরানো আছে", + "account.never_active": "কখনও নয়", "account.posts": "টুট", "account.posts_with_replies": "টুট এবং মতামত", - "account.report": "@{name}কে রিপোর্ট করে দিন", + "account.report": "@{name} কে রিপোর্ট করতে", "account.requested": "অনুমতির অপেক্ষায় আছে। অনুসরণ করার অনুরোধ বাতিল করতে এখানে ক্লিক করুন", "account.share": "@{name}র পাতা অন্যদের দেখান", "account.show_reblogs": "@{name}র সমর্থনগুলো দেখুন", "account.unblock": "@{name}র কার্যকলাপ আবার দেখুন", - "account.unblock_domain": "{domain}থেকে আবার দেখুন", - "account.unendorse": "নিজের পাতায় এটা দেখতে চান না", - "account.unfollow": "অনুসরণ বন্ধ করুন", + "account.unblock_domain": "{domain} থেকে আবার দেখুন", + "account.unendorse": "আপনার নিজের পাতায় এটা না দেখাতে", + "account.unfollow": "অনুসরণ না করতে", "account.unmute": "@{name}র কার্যকলাপ আবার দেখুন", "account.unmute_notifications": "@{name}র প্রজ্ঞাপন দেওয়ার অনুমতি দিন", + "alert.rate_limited.message": "{retry_time, time, medium} -এর পরে আবার প্রচেষ্টা করুন।", + "alert.rate_limited.title": "হার সীমিত", "alert.unexpected.message": "অপ্রত্যাশিত একটি সমস্যা হয়েছে।", "alert.unexpected.title": "ওহো!", + "autosuggest_hashtag.per_week": "প্রতি সপ্তাহে {count}", "boost_modal.combo": "পরেরবার আপনি {combo} চাপ দিলে এটার শেষে চলে যেতে পারবেন", "bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।", "bundle_column_error.retry": "আবার চেষ্টা করুন", "bundle_column_error.title": "নেটওয়ার্কের সমস্যা হচ্ছে", "bundle_modal_error.close": "বন্ধ করুন", - "bundle_modal_error.message": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।", + "bundle_modal_error.message": "এই অংশটি দেখাতে যেয়ে কোনো সমস্যা হয়েছে।", "bundle_modal_error.retry": "আবার চেষ্টা করুন", - "column.blocks": "যাদের বন্ধ করে রাখা হয়েছে", + "column.blocks": "যাদের ব্লক করে রাখা হয়েছে", "column.community": "স্থানীয় সময়সারি", "column.direct": "সরাসরি লেখা", - "column.domain_blocks": "সরিয়ে ফেলা ওয়েবসাইট", + "column.directory": "প্রোফাইল ব্রাউজ করুন", + "column.domain_blocks": "লুকোনো ডোমেনগুলি", "column.favourites": "পছন্দের গুলো", "column.follow_requests": "অনুসরণের অনুমতি চেয়েছে যারা", "column.home": "বাড়ি", @@ -77,30 +84,41 @@ "compose_form.poll.remove_option": "এই বিকল্পটি মুছে ফেলুন", "compose_form.publish": "টুট", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "এই ছবি বা ভিডিওটি সংবেদনশীল হিসেবে চিহ্নিত করতে", "compose_form.sensitive.marked": "এই ছবি বা ভিডিওটি সংবেদনশীল হিসেবে চিহ্নিত করা হয়েছে", "compose_form.sensitive.unmarked": "এই ছবি বা ভিডিওটি সংবেদনশীল হিসেবে চিহ্নিত করা হয়নি", - "compose_form.spoiler.marked": "লেখাটি সাবধানতার পেছনে লুকানো আছে", + "compose_form.spoiler.marked": "সতর্কতার পিছনে লেখানটি লুকানো আছে", "compose_form.spoiler.unmarked": "লেখাটি লুকানো নেই", - "compose_form.spoiler_placeholder": "আপনার সাবধানতা এখানে লিখুন", + "compose_form.spoiler_placeholder": "আপনার লেখা দেখার সাবধানবাণী লিখুন", "confirmation_modal.cancel": "বাতিল করুন", - "confirmations.block.block_and_report": "বন্ধ করুন এবং রিপোর্ট করুন", - "confirmations.block.confirm": "বন্ধ করুন", - "confirmations.block.message": "আপনি কি নিশ্চিত {name} কে বন্ধ করতে চান ?", + "confirmations.block.block_and_report": "ব্লক করুন এবং রিপোর্ট করুন", + "confirmations.block.confirm": "ব্লক করুন", + "confirmations.block.message": "আপনি কি নিশ্চিত {name} কে ব্লক করতে চান?", "confirmations.delete.confirm": "মুছে ফেলুন", "confirmations.delete.message": "আপনি কি নিশ্চিত যে এই লেখাটি মুছে ফেলতে চান ?", "confirmations.delete_list.confirm": "মুছে ফেলুন", "confirmations.delete_list.message": "আপনি কি নিশ্চিত যে আপনি এই তালিকাটি স্থায়িভাবে মুছে ফেলতে চান ?", - "confirmations.domain_block.confirm": "এই ওয়েবসাইট থেকে সব সরান", - "confirmations.domain_block.message": "আপনি কি সত্যি সত্যি নিশ্চিত যে {domain} ওয়েবসাইট থেকে সব সরাতে চান ? সাধারণত কিছু লক্ষ্যবস্তু বন্ধ এবং সরানোযা যথেষ্ট। নিশ্চিত করলে ওই ওয়েবসাইট থেকে কোনোকিছু কোনখানে দেখবেন না। যারা আপনাকে অনুসরণ করে ওই ওয়েবসাইট থেকে তাদেরকেও মুছে ফেলা হবে।", + "confirmations.domain_block.confirm": "এই ডোমেন থেকে সব লুকান", + "confirmations.domain_block.message": "আপনি কি সত্যিই সত্যই নিশ্চিত যে আপনি পুরো {domain}'টি ব্লক করতে চান? বেশিরভাগ ক্ষেত্রে কয়েকটি লক্ষ্যযুক্ত ব্লক বা নীরবতা যথেষ্ট এবং পছন্দসই। আপনি কোনও পাবলিক টাইমলাইন বা আপনার বিজ্ঞপ্তিগুলিতে সেই ডোমেন থেকে সামগ্রী দেখতে পাবেন না। সেই ডোমেন থেকে আপনার অনুসরণকারীদের সরানো হবে।", + "confirmations.logout.confirm": "প্রস্থান", + "confirmations.logout.message": "আপনি লগ আউট করতে চান?", "confirmations.mute.confirm": "সরিয়ে ফেলুন", + "confirmations.mute.explanation": "এটি তাদের কাছ থেকে পোস্ট এবং তাদেরকে মেনশন করা পোস্টগুলি হাইড করবে, তবুও তাদেরকে এটি আপনার পোস্ট গুলো দেখতে দিবে ও তারা আপনাকে অনুসরন করতে পারবে।.", "confirmations.mute.message": "আপনি কি নিশ্চিত {name} সরিয়ে ফেলতে চান ?", "confirmations.redraft.confirm": "মুছে ফেলুন এবং আবার সম্পাদন করুন", "confirmations.redraft.message": "আপনি কি নিশ্চিত এটি মুছে ফেলে এবং আবার সম্পাদন করতে চান ? এটাতে যা পছন্দিত, সমর্থন বা মতামত আছে সেগুলো নতুন লেখার সাথে যুক্ত থাকবে না।", "confirmations.reply.confirm": "মতামত", "confirmations.reply.message": "এখন মতামত লিখতে গেলে আপনার এখন যেটা লিখছেন সেটা মুছে যাবে। আপনি নি নিশ্চিত এটা করতে চান ?", - "confirmations.unfollow.confirm": "অনুসরণ বন্ধ করুন", + "confirmations.unfollow.confirm": "অনুসরণ করা বাতিল করতে", "confirmations.unfollow.message": "আপনি কি নিশ্চিত {name} কে আর অনুসরণ করতে চান না ?", + "conversation.delete": "কথোপকথন মুছে ফেলুন", + "conversation.mark_as_read": "পঠিত হিসেবে চিহ্নিত করুন", + "conversation.open": "কথপোকথন দেখান", + "conversation.with": "{names} এর সঙ্গে", + "directory.federated": "পরিচিত ফেডিভারসের থেকে", + "directory.local": "শুধু {domain} থেকে", + "directory.new_arrivals": "নতুন আগত", + "directory.recently_active": "সম্প্রতি সক্রিয়", "embed.instructions": "এই লেখাটি আপনার ওয়েবসাইটে যুক্ত করতে নিচের কোডটি বেবহার করুন।", "embed.preview": "সেটা দেখতে এরকম হবে:", "emoji_button.activity": "কার্যকলাপ", @@ -119,29 +137,33 @@ "emoji_button.travel": "ভ্রমণ এবং স্থান", "empty_column.account_timeline": "এখানে কোনো টুট নেই!", "empty_column.account_unavailable": "নিজস্ব পাতা নেই", - "empty_column.blocks": "আপনি কোনো ব্যবহারকারীদের বন্ধ করেন নি।", + "empty_column.blocks": "আপনি কোনো ব্যবহারকারীদের ব্লক করেন নি।", "empty_column.community": "স্থানীয় সময়রেখাতে কিছু নেই। প্রকাশ্যভাবে কিছু লিখে লেখালেখির উদ্বোধন করে ফেলুন!", "empty_column.direct": "আপনার কাছে সরাসরি পাঠানো কোনো লেখা নেই। যদি কেও পাঠায়, সেটা এখানে দেখা যাবে।", - "empty_column.domain_blocks": "এখনো কোনো সরানো ওয়েবসাইট নেই।", + "empty_column.domain_blocks": "এখনও কোনও লুকানো ডোমেন নেই।", "empty_column.favourited_statuses": "আপনার পছন্দের কোনো টুট এখনো নেই। আপনি কোনো লেখা পছন্দের হিসেবে চিহ্নিত করলে এখানে পাওয়া যাবে।", "empty_column.favourites": "কেও এখনো এটাকে পছন্দের টুট হিসেবে চিহ্নিত করেনি। যদি করে, তখন তাদের এখানে পাওয়া যাবে।", "empty_column.follow_requests": "আপনার এখনো কোনো অনুসরণের আবেদন পাঠানো নেই। যদি পাঠায়, এখানে পাওয়া যাবে।", "empty_column.hashtag": "এই হেসটাগে এখনো কিছু নেই।", - "empty_column.home": "আপনার বাড়ির সময়রেখা এখনো খালি! {public}এ ঘুরে আসুন অথবা অনুসন্ধান বেবহার করে শুরু করতে পারেন এবং অন্য ব্যবহারকারীদের সাথে সাক্ষাৎ করতে পারেন।", + "empty_column.home": "আপনার বাড়ির সময়রেখা এখনো খালি! {public} এ ঘুরে আসুন অথবা অনুসন্ধান বেবহার করে শুরু করতে পারেন এবং অন্য ব্যবহারকারীদের সাথে সাক্ষাৎ করতে পারেন।", "empty_column.home.public_timeline": "প্রকাশ্য সময়রেখা", "empty_column.list": "এই তালিকাতে এখনো কিছু নেই. যখন এই তালিকায় থাকা ব্যবহারকারী নতুন কিছু লিখবে, সেগুলো এখানে পাওয়া যাবে।", "empty_column.lists": "আপনার এখনো কোনো তালিকা তৈরী নেই। যদি বা যখন তৈরী করেন, সেগুলো এখানে পাওয়া যাবে।", - "empty_column.mutes": "আপনি এখনো কোনো ব্যবহারকারীকে সরাননি।", + "empty_column.mutes": "আপনি এখনো কোনো ব্যবহারকারীকে নিঃশব্দ করেননি।", "empty_column.notifications": "আপনার এখনো কোনো প্রজ্ঞাপন নেই। কথোপকথন শুরু করতে, অন্যদের সাথে মেলামেশা করতে পারেন।", "empty_column.public": "এখানে এখনো কিছু নেই! প্রকাশ্য ভাবে কিছু লিখুন বা অন্য সার্ভার থেকে কাওকে অনুসরণ করে এই জায়গা ভরে ফেলুন", + "error.unexpected_crash.explanation": "আমাদের কোড বা ব্রাউজারের সামঞ্জস্য ইস্যুতে একটি বাগের কারণে এই পৃষ্ঠাটি সঠিকভাবে প্রদর্শিত করা যায় নি।", + "error.unexpected_crash.next_steps": "পাতাটি রিফ্রেশ করে চেষ্টা করুন। তবুও যদি না হয়, তবে আপনি অন্য একটি ব্রাউজার অথবা আপনার ডিভাইসের জন্যে এপের মাধ্যমে মাস্টডন ব্যাবহার করতে পারবেন।.", + "errors.unexpected_crash.copy_stacktrace": "স্টেকট্রেস ক্লিপবোর্ডে কপি করুন", + "errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন", "follow_request.authorize": "অনুমতি দিন", "follow_request.reject": "প্রত্যাখ্যান করুন", "getting_started.developers": "তৈরিকারকদের জন্য", - "getting_started.directory": "নিজস্ব পাতার তালিকা", + "getting_started.directory": "নিজস্ব-পাতাগুলির তালিকা", "getting_started.documentation": "নথিপত্র", "getting_started.heading": "শুরু করা", "getting_started.invite": "অন্যদের আমন্ত্রণ করুন", - "getting_started.open_source_notice": "মাস্টাডন একটি মুক্ত সফটওয়্যার। আপনি তৈরিতে সাহায্য করতে পারেন অথবা সমস্যা রিপোর্ট করতে পারেন গিটহাবে {github}।", + "getting_started.open_source_notice": "মাস্টাডন একটি মুক্ত সফটওয়্যার। তৈরিতে সাহায্য করতে বা কোনো সমস্যা সম্পর্কে জানাতে আমাদের গিটহাবে যেতে পারেন {github}।", "getting_started.security": "নিরাপত্তা", "getting_started.terms": "ব্যবহারের নিয়মাবলী", "hashtag.column_header.tag_mode.all": "এবং {additional}", @@ -152,13 +174,13 @@ "hashtag.column_settings.tag_mode.all": "এগুলো সব", "hashtag.column_settings.tag_mode.any": "এর ভেতরে যেকোনোটা", "hashtag.column_settings.tag_mode.none": "এগুলোর একটাও না", - "hashtag.column_settings.tag_toggle": "আরো ট্যাগ এই কলামে যুক্ত করুন", + "hashtag.column_settings.tag_toggle": "আরো ট্যাগ এই কলামে যুক্ত করতে", "home.column_settings.basic": "সাধারণ", "home.column_settings.show_reblogs": "সমর্থনগুলো দেখান", "home.column_settings.show_replies": "মতামত দেখান", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# ঘটা} other {# ঘটা}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}}", "introduction.federation.action": "পরবর্তী", "introduction.federation.federated.headline": "যুক্তবিশ্ব", "introduction.federation.federated.text": "অন্যান্য যুক্তবিশ্বের সার্ভারের লেখাগুলি যুক্তবিশ্বের সময়রেখাতে আসবে ।", @@ -177,7 +199,7 @@ "introduction.welcome.headline": "প্রথম ধাপ", "introduction.welcome.text": "যুক্তবিশ্বে স্বাগতম! কিছুক্ষনের মধ্যেই আপনি আপনার লেখা বিভিন্ন সার্ভারে সম্প্রচার করতে পারবেন। কিন্তু মনে রাখবে যে এটা একটা বিশেষ সার্ভার, {domain} কারণ এখানে আপনার নিজেস্ব পাতা রাখা হচ্ছে।", "keyboard_shortcuts.back": "পেছনে যেতে", - "keyboard_shortcuts.blocked": "বন্ধ করা ব্যবহারকারীদের তালিকা দেখতে", + "keyboard_shortcuts.blocked": "ব্লক করা ব্যবহারকারীদের তালিকা খুলতে", "keyboard_shortcuts.boost": "সমর্থন করতে", "keyboard_shortcuts.column": "কোনো কলামএ কোনো লেখা ফোকাস করতে", "keyboard_shortcuts.compose": "লেখা সম্পদনার জায়গায় ফোকাস করতে", @@ -195,7 +217,7 @@ "keyboard_shortcuts.local": "স্থানীয় সময়রেখাতে যেতে", "keyboard_shortcuts.mention": "লেখককে উল্লেখ করতে", "keyboard_shortcuts.muted": "বন্ধ করা ব্যবহারকারীদের তালিকা খুলতে", - "keyboard_shortcuts.my_profile": "নিজের পাতা দেখতে", + "keyboard_shortcuts.my_profile": "আপনার নিজের পাতা দেখতে", "keyboard_shortcuts.notifications": "প্রজ্ঞাপনের কলাম খুলতে", "keyboard_shortcuts.pinned": "পিন দেওয়া টুটের তালিকা খুলতে", "keyboard_shortcuts.profile": "লেখকের পাতা দেখতে", @@ -204,14 +226,14 @@ "keyboard_shortcuts.search": "খোঁজার অংশে ফোকাস করতে", "keyboard_shortcuts.start": "\"প্রথম শুরুর\" কলাম বের করতে", "keyboard_shortcuts.toggle_hidden": "CW লেখা দেখতে বা লুকাতে", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "ভিডিও/ছবি দেখতে বা বন্ধ করতে", "keyboard_shortcuts.toot": "নতুন একটা টুট লেখা শুরু করতে", "keyboard_shortcuts.unfocus": "লেখা বা খোঁজার জায়গায় ফোকাস না করতে", "keyboard_shortcuts.up": "তালিকার উপরের দিকে যেতে", "lightbox.close": "বন্ধ", "lightbox.next": "পরবর্তী", "lightbox.previous": "পূর্ববর্তী", - "lightbox.view_context": "View context", + "lightbox.view_context": "প্রসঙ্গটি দেখতে", "lists.account.add": "তালিকাতে যুক্ত করতে", "lists.account.remove": "তালিকা থেকে বাদ দিতে", "lists.delete": "তালিকা মুছে ফেলতে", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "তালিকার নতুন শিরোনাম দিতে", "lists.search": "যাদের অনুসরণ করেন তাদের ভেতরে খুঁজুন", "lists.subheading": "আপনার তালিকা", + "load_pending": "{count, plural, one {# নতুন জিনিস} other {# নতুন জিনিস}}", "loading_indicator.label": "আসছে...", "media_gallery.toggle_visible": "দৃশ্যতার অবস্থা বদলান", "missing_indicator.label": "খুঁজে পাওয়া যায়নি", @@ -230,23 +253,22 @@ "navigation_bar.blocks": "বন্ধ করা ব্যবহারকারী", "navigation_bar.community_timeline": "স্থানীয় সময়রেখা", "navigation_bar.compose": "নতুন টুট লিখুন", - "navigation_bar.direct": "সরাসরি লেখা", + "navigation_bar.direct": "সরাসরি লেখাগুলি", "navigation_bar.discover": "ঘুরে দেখুন", - "navigation_bar.domain_blocks": "বন্ধ করা ওয়েবসাইট", - "navigation_bar.edit_profile": "নিজের পাতা সম্পাদনা করুন", + "navigation_bar.domain_blocks": "লুকানো ডোমেনগুলি", + "navigation_bar.edit_profile": "নিজের পাতা সম্পাদনা করতে", "navigation_bar.favourites": "পছন্দের", "navigation_bar.filters": "বন্ধ করা শব্দ", "navigation_bar.follow_requests": "অনুসরণের অনুরোধগুলি", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "অনুসরণ এবং অনুসরণকারী", "navigation_bar.info": "এই সার্ভার সম্পর্কে", - "navigation_bar.keyboard_shortcuts": "চাবি ব্যবহার", + "navigation_bar.keyboard_shortcuts": "হটকীগুলি", "navigation_bar.lists": "তালিকাগুলো", "navigation_bar.logout": "বাইরে যান", - "navigation_bar.mutes": "যেসব বেভহারকারীদের কার্যক্রম বন্ধ করা আছে", + "navigation_bar.mutes": "যাদের কার্যক্রম দেখা বন্ধ আছে", "navigation_bar.personal": "নিজস্ব", "navigation_bar.pins": "পিন দেওয়া টুট", "navigation_bar.preferences": "পছন্দসমূহ", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "যুক্তবিশ্বের সময়রেখা", "navigation_bar.security": "নিরাপত্তা", "notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন", @@ -256,18 +278,18 @@ "notification.reblog": "{name} আপনার কার্যক্রমে সমর্থন দেখিয়েছেন", "notifications.clear": "প্রজ্ঞাপনগুলো মুছে ফেলতে", "notifications.clear_confirmation": "আপনি কি নির্চিত প্রজ্ঞাপনগুলো মুছে ফেলতে চান ?", - "notifications.column_settings.alert": "কম্পিউটারে প্রজ্ঞাপন", + "notifications.column_settings.alert": "কম্পিউটারে প্রজ্ঞাপনগুলি", "notifications.column_settings.favourite": "পছন্দের:", - "notifications.column_settings.filter_bar.advanced": "সব শ্রেণীগুলো দেখতে", - "notifications.column_settings.filter_bar.category": "দ্রুত ছাঁকনি বার", - "notifications.column_settings.filter_bar.show": "দেখতে", + "notifications.column_settings.filter_bar.advanced": "সব শ্রেণীগুলো দেখানো", + "notifications.column_settings.filter_bar.category": "সংক্ষিপ্ত ছাঁকনি অংশ", + "notifications.column_settings.filter_bar.show": "দেখানো", "notifications.column_settings.follow": "নতুন অনুসরণকারীরা:", "notifications.column_settings.mention": "প্রজ্ঞাপনগুলো:", "notifications.column_settings.poll": "নির্বাচনের ফলাফল:", - "notifications.column_settings.push": "পুশ প্রজ্ঞাপন", + "notifications.column_settings.push": "পুশ প্রজ্ঞাপনগুলি", "notifications.column_settings.reblog": "সমর্থনগুলো:", - "notifications.column_settings.show": "কলামে দেখান", - "notifications.column_settings.sound": "শব্দ বাজাতে", + "notifications.column_settings.show": "কলামে দেখানো", + "notifications.column_settings.sound": "শব্দ বাজানো", "notifications.filter.all": "সব", "notifications.filter.boosts": "সমর্থনগুলো", "notifications.filter.favourites": "পছন্দের গুলো", @@ -276,9 +298,11 @@ "notifications.filter.polls": "নির্বাচনের ফলাফল", "notifications.group": "{count} প্রজ্ঞাপন", "poll.closed": "বন্ধ", - "poll.refresh": "আবার সতেজ করতে", + "poll.refresh": "বদলেছে কিনা দেখতে", + "poll.total_people": "{count, plural, one {# ব্যক্তি} other {# ব্যক্তি}}", "poll.total_votes": "{count, plural, one {# ভোট} other {# ভোট}}", "poll.vote": "ভোট", + "poll.voted": "আপনি এই উত্তরের পক্ষে ভোট দিয়েছেন", "poll_button.add_poll": "একটা নির্বাচন যোগ করতে", "poll_button.remove_poll": "নির্বাচন বাদ দিতে", "privacy.change": "লেখার গোপনীয়তা অবস্থা ঠিক করতে", @@ -290,12 +314,13 @@ "privacy.public.short": "সর্বজনীন প্রকাশ্য", "privacy.unlisted.long": "সর্বজনীন প্রকাশ্য সময়রেখাতে না দেখাতে", "privacy.unlisted.short": "প্রকাশ্য নয়", + "refresh": "সতেজ করা", "regeneration_indicator.label": "আসছে…", "regeneration_indicator.sublabel": "আপনার বাড়ির-সময়রেখা প্রস্তূত করা হচ্ছে!", "relative_time.days": "{number} দিন", "relative_time.hours": "{number} ঘন্টা", "relative_time.just_now": "এখন", - "relative_time.minutes": "{number}ম", + "relative_time.minutes": "{number}মিঃ", "relative_time.seconds": "{number} সেকেন্ড", "reply_indicator.cancel": "বাতিল করতে", "report.forward": "এটা আরো পাঠান {target} তে", @@ -304,7 +329,7 @@ "report.placeholder": "অন্য কোনো মন্তব্য", "report.submit": "জমা দিন", "report.target": "{target} রিপোর্ট করুন", - "search.placeholder": "খুঁজতে", + "search.placeholder": "অনুসন্ধান", "search_popout.search_format": "বিস্তারিতভাবে খোঁজার পদ্ধতি", "search_popout.tips.full_text": "সাধারণ লেখা দিয়ে খুঁজলে বের হবে সেরকম আপনার লেখা, পছন্দের লেখা, সমর্থন করা লেখা, আপনাকে উল্লেখকরা কোনো লেখা, যা খুঁজছেন সেরকম কোনো ব্যবহারকারীর নাম বা কোনো হ্যাশট্যাগগুলো।", "search_popout.tips.hashtag": "হ্যাশট্যাগ", @@ -314,21 +339,22 @@ "search_results.accounts": "মানুষ", "search_results.hashtags": "হ্যাশট্যাগগুলি", "search_results.statuses": "টুট", + "search_results.statuses_fts_disabled": "তাদের সামগ্রী দ্বারা টুটগুলি অনুসন্ধান এই মস্তোডন সার্ভারে সক্ষম নয়।", "search_results.total": "{count, number} {count, plural, one {ফলাফল} other {ফলাফল}}", "status.admin_account": "@{name} র জন্য পরিচালনার ইন্টারফেসে ঢুকুন", "status.admin_status": "যায় লেখাটি পরিচালনার ইন্টারফেসে খুলুন", - "status.block": "@{name}কে বন্ধ করুন", + "status.block": "@{name} কে ব্লক করুন", "status.cancel_reblog_private": "সমর্থন বাতিল করতে", "status.cannot_reblog": "এটিতে সমর্থন দেওয়া যাবেনা", "status.copy": "লেখাটির লিংক কপি করতে", "status.delete": "মুছে ফেলতে", "status.detailed_status": "বিস্তারিত কথোপকথনের হিসেবে দেখতে", - "status.direct": "@{name} কে সরাসরি পাঠান", + "status.direct": "@{name} কে সরাসরি লেখা পাঠাতে", "status.embed": "এমবেড করতে", "status.favourite": "পছন্দের করতে", "status.filtered": "ছাঁকনিদিত", "status.load_more": "আরো দেখুন", - "status.media_hidden": "ছবি বা ভিডিও পেছনে", + "status.media_hidden": "মিডিয়া লুকানো আছে", "status.mention": "@{name}কে উল্লেখ করতে", "status.more": "আরো", "status.mute": "@{name}র কার্যক্রম সরিয়ে ফেলতে", @@ -344,7 +370,7 @@ "status.redraft": "মুছে আবার নতুন করে লিখতে", "status.reply": "মতামত জানাতে", "status.replyAll": "লেখাযুক্ত সবার কাছে মতামত জানাতে", - "status.report": "@{name}কে রিপোর্ট করতে", + "status.report": "@{name} কে রিপোর্ট করতে", "status.sensitive_warning": "সংবেদনশীল কিছু", "status.share": "অন্যদের জানান", "status.show_less": "কম দেখতে", @@ -352,29 +378,38 @@ "status.show_more": "আরো দেখাতে", "status.show_more_all": "সবগুলোতে আরো দেখতে", "status.show_thread": "আলোচনা দেখতে", + "status.uncached_media_warning": "পাওয়া যাচ্ছে না", "status.unmute_conversation": "আলোচনার প্রজ্ঞাপন চালু করতে", "status.unpin": "নিজের পাতা থেকে পিন করে রাখাটির পিন খুলতে", - "suggestions.dismiss": "সাহায্যের জন্য পরামর্শগুলো সরাতে", + "suggestions.dismiss": "সাহায্যের পরামর্শগুলো সরাতে", "suggestions.header": "আপনি হয়তোবা এগুলোতে আগ্রহী হতে পারেন…", "tabs_bar.federated_timeline": "যুক্তবিশ্ব", "tabs_bar.home": "বাড়ি", "tabs_bar.local_timeline": "স্থানীয়", "tabs_bar.notifications": "প্রজ্ঞাপনগুলো", - "tabs_bar.search": "খুঁজতে", + "tabs_bar.search": "অনুসন্ধান", "time_remaining.days": "{number, plural, one {# day} other {# days}} বাকি আছে", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} বাকি আছে", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} বাকি আছে", + "time_remaining.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}} বাকি আছে", "time_remaining.moments": "সময় বাকি আছে", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} কথা বলছে", + "trends.trending_now": "বর্তমানে জনপ্রিয়", "ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।", "upload_area.title": "টেনে এখানে ছেড়ে দিলে এখানে যুক্ত করা যাবে", - "upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।", "upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।", "upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে", - "upload_form.focus": "সাধারণ দেখাটি পরিবর্তন করতে", + "upload_form.edit": "সম্পাদন", "upload_form.undo": "মুছে ফেলতে", + "upload_modal.analyzing_picture": "চিত্র বিশ্লেষণ করা হচ্ছে…", + "upload_modal.apply": "প্রয়োগ করুন", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "ছবি থেকে পাঠ্য সনাক্ত করুন", + "upload_modal.edit_media": "মিডিয়া সম্পাদনা করুন", + "upload_modal.hint": "একটি দৃশ্যমান পয়েন্ট নির্বাচন করুন ক্লিক অথবা টানার মাধ্যমে যেটি সবময় সব থাম্বনেলে দেখা যাবে।", + "upload_modal.preview_label": "পূর্বরূপ({ratio})", "upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...", "video.close": "ভিডিওটি বন্ধ করতে", "video.exit_fullscreen": "পূর্ণ পর্দা থেকে বাইরে বের হতে", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json new file mode 100644 index 000000000..db07f1aba --- /dev/null +++ b/app/javascript/mastodon/locales/br.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "Ouzhpenn pe lemel ag ar listennadoù", + "account.badges.bot": "Robot", + "account.block": "Stankañ @{name}", + "account.block_domain": "Kuzh kement tra a {domain}", + "account.blocked": "Stanket", + "account.cancel_follow_request": "Nullañ ar pedad heuliañ", + "account.direct": "Kas ur c'hemennad da @{name}", + "account.domain_blocked": "Domani kuzhet", + "account.edit_profile": "Aozañ ar profil", + "account.endorse": "Lakaat war-wel war ar profil", + "account.follow": "Heuliañ", + "account.followers": "Heilour·ezed·ion", + "account.followers.empty": "Den na heul an implijour-mañ c'hoazh.", + "account.follows": "Koumanantoù", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Ho heul", + "account.hide_reblogs": "Kuzh toudoù skignet gant @{name}", + "account.last_status": "Oberiantiz zivezhañ", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Menegiñ @{name}", + "account.moved_to": "Dilojet en·he deus {name} da:", + "account.mute": "Kuzhat @{name}", + "account.mute_notifications": "Kuzh kemennoù a @{name}", + "account.muted": "Kuzhet", + "account.never_active": "Birviken", + "account.posts": "Toudoù", + "account.posts_with_replies": "Toudoù ha respontoù", + "account.report": "Disklêriañ @{name}", + "account.requested": "Awaiting approval", + "account.share": "Skignañ profil @{name}", + "account.show_reblogs": "Diskouez toudoù a @{name}", + "account.unblock": "Distankañ @{name}", + "account.unblock_domain": "Diguzh {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Diheuliañ", + "account.unmute": "Diguzhat @{name}", + "account.unmute_notifications": "Diguzhat kemennoù a @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "Ur fazi dic'hortozet zo degouezhet.", + "alert.unexpected.title": "C'hem !", + "autosuggest_hashtag.per_week": "{count} bep sizhun", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Klask endro", + "bundle_column_error.title": "Fazi rouedad", + "bundle_modal_error.close": "Serriñ", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Klask endro", + "column.blocks": "Implijour·ezed·ion stanket", + "column.community": "Red-amzer lec'hel", + "column.direct": "Kemennadoù prevez", + "column.directory": "Mont a-dreuz ar profiloù", + "column.domain_blocks": "Domani kuzhet", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Post to followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Post to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost to original audience", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index acb9709d0..396e4a325 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -4,6 +4,7 @@ "account.block": "Bloqueja @{name}", "account.block_domain": "Amaga-ho tot de {domain}", "account.blocked": "Bloquejat", + "account.cancel_follow_request": "Anul·la la sol·licitud de seguiment", "account.direct": "Missatge directe @{name}", "account.domain_blocked": "Domini ocult", "account.edit_profile": "Editar el perfil", @@ -15,6 +16,7 @@ "account.follows.empty": "Aquest usuari encara no segueix a ningú.", "account.follows_you": "Et segueix", "account.hide_reblogs": "Amaga els impulsos de @{name}", + "account.last_status": "Darrer actiu", "account.link_verified_on": "La propietat d'aquest enllaç es va verificar el dia {date}", "account.locked_info": "Aquest estat de privadesa del compte està definit com a bloquejat. El propietari revisa manualment qui pot seguir-lo.", "account.media": "Mèdia", @@ -23,6 +25,7 @@ "account.mute": "Silencia @{name}", "account.mute_notifications": "Notificacions desactivades de @{name}", "account.muted": "Silenciat", + "account.never_active": "Mai", "account.posts": "Toots", "account.posts_with_replies": "Toots i respostes", "account.report": "Informe @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Deixa de seguir", "account.unmute": "Treure silenci de @{name}", "account.unmute_notifications": "Activar notificacions de @{name}", + "alert.rate_limited.message": "Si us plau torna-ho a provar després de {retry_time, time, medium}.", + "alert.rate_limited.title": "Límit de freqüència", "alert.unexpected.message": "S'ha produït un error inesperat.", "alert.unexpected.title": "Vaja!", + "autosuggest_hashtag.per_week": "{count} per setmana", "boost_modal.combo": "Pots premer {combo} per saltar-te això el proper cop", "bundle_column_error.body": "S'ha produït un error en carregar aquest component.", "bundle_column_error.retry": "Torna-ho a provar", @@ -47,6 +53,7 @@ "column.blocks": "Usuaris bloquejats", "column.community": "Línia de temps local", "column.direct": "Missatges directes", + "column.directory": "Navega els perfils", "column.domain_blocks": "Dominis ocults", "column.favourites": "Favorits", "column.follow_requests": "Peticions per seguir-te", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Estàs segur que vols suprimir permanentment aquesta llista?", "confirmations.domain_block.confirm": "Amaga tot el domini", "confirmations.domain_block.message": "Estàs segur, realment segur que vols bloquejar totalment {domain}? En la majoria dels casos bloquejar o silenciar uns pocs objectius és suficient i preferible. No veuràs contingut d’aquest domini en cap de les línies públiques ni en les notificacions. Els teus seguidors d’aquest domini seran eliminats.", + "confirmations.logout.confirm": "Tancar sessió", + "confirmations.logout.message": "Segur que vols tancar la sessió?", "confirmations.mute.confirm": "Silencia", + "confirmations.mute.explanation": "Això amagarà les seves publicacions i les que els mencionen però encara els permetrà veure les teves i seguir-te.", "confirmations.mute.message": "Estàs segur que vols silenciar {name}?", "confirmations.redraft.confirm": "Esborrar i refer", "confirmations.redraft.message": "Estàs segur que vols esborrar aquest toot i tornar a redactar-lo? Perderàs totes els impulsos i favorits, i les respostes al toot original es quedaran orfes.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Responen ara es sobreescriurà el missatge que estàs editant. Estàs segur que vols continuar?", "confirmations.unfollow.confirm": "Deixa de seguir", "confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?", + "conversation.delete": "Elimina la conversa", + "conversation.mark_as_read": "Marca com a llegida", + "conversation.open": "Veure conversa", + "conversation.with": "Amb {names}", + "directory.federated": "Del fedivers conegut", + "directory.local": "Només de {domain}", + "directory.new_arrivals": "Arribades noves", + "directory.recently_active": "Recentment actius", "embed.instructions": "Incrusta aquest toot al lloc web copiant el codi a continuació.", "embed.preview": "Aquí tenim quin aspecte tindrá:", "emoji_button.activity": "Activitat", @@ -134,6 +152,10 @@ "empty_column.mutes": "Encara no has silenciat cap usuari.", "empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.", "empty_column.public": "No hi ha res aquí! Escriu públicament alguna cosa o manualment segueix usuaris d'altres servidors per omplir-ho", + "error.unexpected_crash.explanation": "A causa d'un bug en el nostre codi o un problema de compatibilitat del navegador, aquesta pàgina no podria ser mostrada correctament.", + "error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda encara pots ser capaç d'utilitzar Mastodont a través d'un navegador diferent o app nativa.", + "errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls", + "errors.unexpected_crash.report_issue": "Informa d'un problema", "follow_request.authorize": "Autoritzar", "follow_request.reject": "Rebutjar", "getting_started.developers": "Desenvolupadors", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Nova llista", "lists.search": "Cercar entre les persones que segueixes", "lists.subheading": "Les teves llistes", + "load_pending": "{count, plural, one {# element nou} other {# elements nous}}", "loading_indicator.label": "Carregant...", "media_gallery.toggle_visible": "Alternar visibilitat", "missing_indicator.label": "No trobat", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Toots fixats", "navigation_bar.preferences": "Preferències", - "navigation_bar.profile_directory": "Directori de perfils", "navigation_bar.public_timeline": "Línia de temps federada", "navigation_bar.security": "Seguretat", "notification.favourite": "{name} ha afavorit el teu estat", @@ -277,8 +299,10 @@ "notifications.group": "{count} notificacions", "poll.closed": "Finalitzada", "poll.refresh": "Actualitza", + "poll.total_people": "{count, plural, one {# persona} other {# persones}}", "poll.total_votes": "{count, plural, one {# vot} other {# vots}}", "poll.vote": "Vota", + "poll.voted": "Vas votar per aquesta resposta", "poll_button.add_poll": "Afegeix una enquesta", "poll_button.remove_poll": "Elimina l'enquesta", "privacy.change": "Ajusta l'estat de privacitat", @@ -290,6 +314,7 @@ "privacy.public.short": "Públic", "privacy.unlisted.long": "No publicar en línies de temps públiques", "privacy.unlisted.short": "No llistat", + "refresh": "Actualitza", "regeneration_indicator.label": "Carregant…", "regeneration_indicator.sublabel": "S'està preparant la línia de temps Inici!", "relative_time.days": "fa {number} dies", @@ -314,7 +339,8 @@ "search_results.accounts": "Gent", "search_results.hashtags": "Etiquetes", "search_results.statuses": "Toots", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "search_results.statuses_fts_disabled": "La cerca de toots pel seu contingut no està habilitada en aquest servidor Mastodon.", + "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", "status.admin_account": "Obre l'interfície de moderació per a @{name}", "status.admin_status": "Obre aquest toot a la interfície de moderació", "status.block": "Bloqueja @{name}", @@ -352,6 +378,7 @@ "status.show_more": "Mostra més", "status.show_more_all": "Mostra més per a tot", "status.show_thread": "Mostra el fil", + "status.uncached_media_warning": "No està disponible", "status.unmute_conversation": "Activar conversació", "status.unpin": "Deslliga del perfil", "suggestions.dismiss": "Descartar suggeriment", @@ -366,15 +393,23 @@ "time_remaining.minutes": "{number, plural, one {# minut} other {# minuts}} restants", "time_remaining.moments": "Moments restants", "time_remaining.seconds": "{number, plural, one {# segon} other {# segons}} restants", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {persones}} parlant-hi", + "trends.trending_now": "Ara en tendència", "ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.", "upload_area.title": "Arrossega i deixa anar per a carregar", "upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "S'ha superat el límit de càrrega d'arxius.", "upload_error.poll": "No es permet l'enviament de fitxers en les enquestes.", "upload_form.description": "Descriure els problemes visuals", - "upload_form.focus": "Modificar la previsualització", + "upload_form.edit": "Edita", "upload_form.undo": "Esborra", + "upload_modal.analyzing_picture": "Analitzant imatge…", + "upload_modal.apply": "Aplica", + "upload_modal.description_placeholder": "Uns salts ràpids de guineu marró sobre el gos gandul", + "upload_modal.detect_text": "Detecta el text de l'imatge", + "upload_modal.edit_media": "Editar multimèdia", + "upload_modal.hint": "Fes clic o arrossega el cercle en la previsualització per escollir el punt focal que sempre serà visible de totes les miniatures.", + "upload_modal.preview_label": "Previsualitza ({ratio})", "upload_progress.label": "Pujant...", "video.close": "Tancar el vídeo", "video.exit_fullscreen": "Sortir de pantalla completa", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 907032bdf..6c680f13f 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -1,9 +1,10 @@ { - "account.add_or_remove_from_list": "Aghjustà o toglie da e liste", + "account.add_or_remove_from_list": "Aghjunghje o toglie da e liste", "account.badges.bot": "Bot", "account.block": "Bluccà @{name}", "account.block_domain": "Piattà tuttu da {domain}", "account.blocked": "Bluccatu", + "account.cancel_follow_request": "Annullà a dumanda d'abbunamentu", "account.direct": "Missaghju direttu @{name}", "account.domain_blocked": "Duminiu piattatu", "account.edit_profile": "Mudificà u prufile", @@ -15,6 +16,7 @@ "account.follows.empty": "St'utilizatore ùn seguita nisunu.", "account.follows_you": "Vi seguita", "account.hide_reblogs": "Piattà spartere da @{name}", + "account.last_status": "Ultima attività", "account.link_verified_on": "A prupietà di stu ligame hè stata verificata u {date}", "account.locked_info": "U statutu di vita privata di u contu hè chjosu. U pruprietariu esamina manualmente e dumande d'abbunamentu.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Piattà @{name}", "account.mute_notifications": "Piattà nutificazione da @{name}", "account.muted": "Piattatu", + "account.never_active": "Mai", "account.posts": "Statuti", "account.posts_with_replies": "Statuti è risposte", "account.report": "Palisà @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Ùn siguità più", "account.unmute": "Ùn piattà più @{name}", "account.unmute_notifications": "Ùn piattà più nutificazione da @{name}", + "alert.rate_limited.message": "Pruvate ancu dop'à {retry_time, time, medium}.", + "alert.rate_limited.title": "Ghjettu limitatu", "alert.unexpected.message": "Un prublemu inaspettatu hè accadutu.", "alert.unexpected.title": "Uups!", + "autosuggest_hashtag.per_week": "{count} per settimana", "boost_modal.combo": "Pudete appughjà nant'à {combo} per saltà quessa a prussima volta", "bundle_column_error.body": "C'hè statu un prublemu caricandu st'elementu.", "bundle_column_error.retry": "Pruvà torna", @@ -47,6 +53,7 @@ "column.blocks": "Utilizatori bluccati", "column.community": "Linea pubblica lucale", "column.direct": "Missaghji diretti", + "column.directory": "Percorre i prufili", "column.domain_blocks": "Duminii piattati", "column.favourites": "Favuriti", "column.follow_requests": "Dumande d'abbunamentu", @@ -71,7 +78,7 @@ "compose_form.lock_disclaimer": "U vostru contu ùn hè micca {locked}. Tuttu u mondu pò seguitavi è vede i vostri statuti privati.", "compose_form.lock_disclaimer.lock": "privatu", "compose_form.placeholder": "À chè pensate?", - "compose_form.poll.add_option": "Aghjustà una scelta", + "compose_form.poll.add_option": "Aghjunghje scelta", "compose_form.poll.duration": "Durata di u scandagliu", "compose_form.poll.option_placeholder": "Scelta {number}", "compose_form.poll.remove_option": "Toglie sta scelta", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Site sicuru·a che vulete supprime sta lista?", "confirmations.domain_block.confirm": "Piattà tuttu u duminiu", "confirmations.domain_block.message": "Site sicuru·a che vulete piattà tuttu à {domain}? Saria forse abbastanza di bluccà ò piattà alcuni conti da quallà. Ùn viderete più nunda da quallà indè e linee pubbliche o e nutificazione. I vostri abbunati da stu duminiu saranu tolti.", + "confirmations.logout.confirm": "Scunnettassi", + "confirmations.logout.message": "Site sicuru·a che vulete scunnettà vi?", "confirmations.mute.confirm": "Piattà", + "confirmations.mute.explanation": "Quessu hà da piattà i statuti da sta persona è i posti chì a mintuvanu, mà ellu·a puderà sempre vede i vostri statuti è siguità vi.", "confirmations.mute.message": "Site sicuru·a che vulete piattà @{name}?", "confirmations.redraft.confirm": "Sguassà è riscrive", "confirmations.redraft.message": "Site sicuru·a chè vulete sguassà stu statutu è riscrivelu? I favuriti è spartere saranu persi, è e risposte diventeranu orfane.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Risponde avà sguasserà u missaghju chì scrivite. Site sicuru·a chì vulete cuntinuà?", "confirmations.unfollow.confirm": "Disabbunassi", "confirmations.unfollow.message": "Site sicuru·a ch'ùn vulete più siguità @{name}?", + "conversation.delete": "Sguassà a cunversazione", + "conversation.mark_as_read": "Marcà cum'è lettu", + "conversation.open": "Vede a cunversazione", + "conversation.with": "Cù {names}", + "directory.federated": "Da u fediverse cunisciutu", + "directory.local": "Solu da {domain}", + "directory.new_arrivals": "Ultimi arrivi", + "directory.recently_active": "Attività ricente", "embed.instructions": "Integrà stu statutu à u vostru situ cù u codice quì sottu.", "embed.preview": "Assumiglierà à qualcosa cusì:", "emoji_button.activity": "Attività", @@ -123,8 +141,8 @@ "empty_column.community": "Ùn c'hè nunda indè a linea lucale. Scrivete puru qualcosa!", "empty_column.direct": "Ùn avete ancu nisun missaghju direttu. S'è voi mandate o ricevete unu, u vidarete quì.", "empty_column.domain_blocks": "Ùn c'hè manc'un duminiu bluccatu avà.", - "empty_column.favourited_statuses": "Ùn avete manc'unu statutu favuritu. Quandu aghjusterate unu à i vostri favuriti, sarà mustratu quì.", - "empty_column.favourites": "Nisunu hà aghjustatu stu statutu à i so favuriti. Quandu qualch'unu farà quessa, u so contu sarà mustratu quì.", + "empty_column.favourited_statuses": "Ùn avete manc'unu statutu favuritu. Quandu aghjunghjerate unu à i vostri favuriti, sarà mustratu quì.", + "empty_column.favourites": "Nisunu hà aghjuntu stu statutu à i so favuriti. Quandu qualch'unu farà quessa, u so contu sarà mustratu quì.", "empty_column.follow_requests": "Ùn avete manc'una dumanda d'abbunamentu. Quandu averete una, sarà mustrata quì.", "empty_column.hashtag": "Ùn c'hè ancu nunda quì.", "empty_column.home": "A vostr'accolta hè viota! Pudete andà nant'à {public} o pruvà a ricerca per truvà parsone da siguità.", @@ -134,6 +152,10 @@ "empty_column.mutes": "Per avà ùn avete manc'un utilizatore piattatu.", "empty_column.notifications": "Ùn avete ancu nisuna nutificazione. Interact with others to start the conversation.", "empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altri servori per empie a linea pubblica", + "error.unexpected_crash.explanation": "In ragione d'un bug indè u nostru codice o un prublemu di cumpatibilità cù quessu navigatore, sta pagina ùn hè micca pussuta esse affissata currettamente.", + "error.unexpected_crash.next_steps": "Pruvate d'attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.", + "errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta", + "errors.unexpected_crash.report_issue": "Palisà prublemu", "follow_request.authorize": "Auturizà", "follow_request.reject": "Righjittà", "getting_started.developers": "Sviluppatori", @@ -161,7 +183,7 @@ "intervals.full.minutes": "{number, plural, one {# minuta} other {# minute}}", "introduction.federation.action": "Cuntinuà", "introduction.federation.federated.headline": "Federata", - "introduction.federation.federated.text": "I statuti pubblichi da l'altri servori di u fediverse saranu mustrati nant'à a linea pubblica federata.", + "introduction.federation.federated.text": "I statuti pubblichi da l'altri servori di u fediverse saranu mustrati nant'à a linea pubblica glubale.", "introduction.federation.home.headline": "Accolta", "introduction.federation.home.text": "I statuti da a ghjente che vo siguitate saranu affissati nant'à a linea d'accolta. Pudete seguità qualvogliasia nant'à tutti i servori!", "introduction.federation.local.headline": "Lucale", @@ -187,7 +209,7 @@ "keyboard_shortcuts.enter": "apre u statutu", "keyboard_shortcuts.favourite": "aghjunghje à i favuriti", "keyboard_shortcuts.favourites": "per apre a lista di i favuriti", - "keyboard_shortcuts.federated": "per apre a linea pubblica federata", + "keyboard_shortcuts.federated": "per apre a linea pubblica glubale", "keyboard_shortcuts.heading": "Accorte cù a tastera", "keyboard_shortcuts.home": "per apre a linea d'accolta", "keyboard_shortcuts.hotkey": "Accorta", @@ -217,10 +239,11 @@ "lists.delete": "Supprime a lista", "lists.edit": "Mudificà a lista", "lists.edit.submit": "Cambià u titulu", - "lists.new.create": "Aghjustà una lista", + "lists.new.create": "Aghjunghje", "lists.new.title_placeholder": "Titulu di a lista", "lists.search": "Circà indè i vostr'abbunamenti", "lists.subheading": "E vo liste", + "load_pending": "{count, plural, one {# entrata nova} other {# entrate nove}}", "loading_indicator.label": "Caricamentu...", "media_gallery.toggle_visible": "Cambià a visibilità", "missing_indicator.label": "Micca trovu", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Persunale", "navigation_bar.pins": "Statuti puntarulati", "navigation_bar.preferences": "Preferenze", - "navigation_bar.profile_directory": "Annuariu di i prufili", "navigation_bar.public_timeline": "Linea pubblica glubale", "navigation_bar.security": "Sicurità", "notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti", @@ -277,19 +299,22 @@ "notifications.group": "{count} nutificazione", "poll.closed": "Chjosu", "poll.refresh": "Attualizà", + "poll.total_people": "{count, plural, one {# persona} other {# persone}}", "poll.total_votes": "{count, plural, one {# votu} other {# voti}}", "poll.vote": "Vutà", - "poll_button.add_poll": "Aghjustà un scandagliu", + "poll.voted": "Avete vutatu per sta risposta", + "poll_button.add_poll": "Aghjunghje", "poll_button.remove_poll": "Toglie u scandagliu", "privacy.change": "Mudificà a cunfidenzialità di u statutu", "privacy.direct.long": "Mandà solu à quelli chì so mintuvati", "privacy.direct.short": "Direttu", "privacy.private.long": "Mustrà solu à l'abbunati", "privacy.private.short": "Privatu", - "privacy.public.long": "Mustrà à tuttu u mondu nant'a linea pubblica", + "privacy.public.long": "Mustrà à tuttu u mondu nant'à e linee pubbliche", "privacy.public.short": "Pubblicu", - "privacy.unlisted.long": "Ùn mette micca nant'a linea pubblica (ma tutt'u mondu pò vede u statutu nant'à u vostru prufile)", + "privacy.unlisted.long": "Ùn mette micca nant'à e linee pubbliche", "privacy.unlisted.short": "Micca listatu", + "refresh": "Attualizà", "regeneration_indicator.label": "Caricamentu…", "regeneration_indicator.sublabel": "Priparazione di a vostra pagina d'accolta!", "relative_time.days": "{number}ghj", @@ -314,6 +339,7 @@ "search_results.accounts": "Ghjente", "search_results.hashtags": "Hashtag", "search_results.statuses": "Statuti", + "search_results.statuses_fts_disabled": "A ricerca di i cuntinuti di i statuti ùn hè micca attivata nant'à stu servore Mastodon.", "search_results.total": "{count, number} {count, plural, one {risultatu} other {risultati}}", "status.admin_account": "Apre l'interfaccia di muderazione per @{name}", "status.admin_status": "Apre stu statutu in l'interfaccia di muderazione", @@ -352,6 +378,7 @@ "status.show_more": "Slibrà", "status.show_more_all": "Slibrà tuttu", "status.show_thread": "Vede u filu", + "status.uncached_media_warning": "Micca dispunibule", "status.unmute_conversation": "Ùn piattà più a cunversazione", "status.unpin": "Spuntarulà da u prufile", "suggestions.dismiss": "Righjittà a pruposta", @@ -367,14 +394,22 @@ "time_remaining.moments": "Ci fermanu qualchi mumentu", "time_remaining.seconds": "{number, plural, one {# siconda ferma} other {# siconde fermanu}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} parlanu", + "trends.trending_now": "Tindenze d'avà", "ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.", "upload_area.title": "Drag & drop per caricà un fugliale", "upload_button.label": "Aghjunghje un media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Limita di caricamentu di fugliali trapassata.", "upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.", "upload_form.description": "Discrive per i malvistosi", - "upload_form.focus": "Cambià a vista", + "upload_form.edit": "Mudificà", "upload_form.undo": "Sguassà", + "upload_modal.analyzing_picture": "Analisi di u ritrattu…", + "upload_modal.apply": "Affettà", + "upload_modal.description_placeholder": "Chì tempi brevi ziu, quandu solfeghji", + "upload_modal.detect_text": "Ditettà testu da u ritrattu", + "upload_modal.edit_media": "Cambià media", + "upload_modal.hint": "Cliccate o sguillate u chjerchju nant'à a vista per sceglie u puntu fucale chì sarà sempre in vista indè tutte e miniature.", + "upload_modal.preview_label": "Vista ({ratio})", "upload_progress.label": "Caricamentu...", "video.close": "Chjudà a video", "video.exit_fullscreen": "Caccià u pienu screnu", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 1bd2ae84d..fc807d45e 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -4,6 +4,7 @@ "account.block": "Zablokovat uživatele @{name}", "account.block_domain": "Skrýt vše z {domain}", "account.blocked": "Blokován/a", + "account.cancel_follow_request": "Zrušit požadavek o sledování", "account.direct": "Poslat přímou zprávu uživateli @{name}", "account.domain_blocked": "Doména skryta", "account.edit_profile": "Upravit profil", @@ -15,6 +16,7 @@ "account.follows.empty": "Tento uživatel ještě nikoho nesleduje.", "account.follows_you": "Sleduje vás", "account.hide_reblogs": "Skrýt boosty od uživatele @{name}", + "account.last_status": "Naposledy aktivní", "account.link_verified_on": "Vlastnictví tohoto odkazu bylo zkontrolováno {date}", "account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.", "account.media": "Média", @@ -23,6 +25,7 @@ "account.mute": "Skrýt uživatele @{name}", "account.mute_notifications": "Skrýt oznámení od uživatele @{name}", "account.muted": "Skryt/a", + "account.never_active": "Nikdy", "account.posts": "Tooty", "account.posts_with_replies": "Tooty a odpovědi", "account.report": "Nahlásit uživatele @{name}", @@ -35,9 +38,12 @@ "account.unfollow": "Přestat sledovat", "account.unmute": "Odkrýt uživatele @{name}", "account.unmute_notifications": "Odkrýt oznámení od uživatele @{name}", + "alert.rate_limited.message": "Prosím zkuste to znovu za {retry_time, time, medium}.", + "alert.rate_limited.title": "Rychlost omezena", "alert.unexpected.message": "Objevila se neočekávaná chyba.", "alert.unexpected.title": "Jejda!", - "boost_modal.combo": "Příště můžete pro přeskočení kliknout na {combo}", + "autosuggest_hashtag.per_week": "{count} za týden", + "boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}", "bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.", "bundle_column_error.retry": "Zkuste to znovu", "bundle_column_error.title": "Chyba sítě", @@ -47,6 +53,7 @@ "column.blocks": "Blokovaní uživatelé", "column.community": "Místní časová osa", "column.direct": "Přímé zprávy", + "column.directory": "Prozkoumat profily", "column.domain_blocks": "Skryté domény", "column.favourites": "Oblíbené", "column.follow_requests": "Požadavky o sledování", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Jste si jistý/á, že chcete tento seznam navždy smazat?", "confirmations.domain_block.confirm": "Skrýt celou doménu", "confirmations.domain_block.message": "Jste si opravdu, opravdu jistý/á, že chcete blokovat celou doménu {domain}? Ve většině případů stačí zablokovat nebo skrýt pár konkrétních uživatelů, což se doporučuje. Z této domény neuvidíte obsah v žádné veřejné časové ose ani v oznámeních. Vaši sledující z této domény budou odstraněni.", + "confirmations.logout.confirm": "Odhlásit", + "confirmations.logout.message": "Jste si jistý/á, že se chcete odhlásit?", "confirmations.mute.confirm": "Skrýt", + "confirmations.mute.explanation": "Tohle skryje jeho příspěvky a příspěvky, které ho zmiňují, ale uživatel pořád bude moci vidět vaše příspěvky a sledovat vás.", "confirmations.mute.message": "Jste si jistý/á, že chcete skrýt uživatele {name}?", "confirmations.redraft.confirm": "Smazat a přepsat", "confirmations.redraft.message": "Jste si jistý/á, že chcete smazat a přepsat tento toot? Oblíbení a boosty budou ztraceny a odpovědi na původní příspěvek budou opuštěny.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Odpovězením nyní přepíšete zprávu, kterou aktuálně píšete. Jste si jistý/á, že chcete pokračovat?", "confirmations.unfollow.confirm": "Přestat sledovat", "confirmations.unfollow.message": "jste si jistý/á, že chcete přestat sledovat uživatele {name}?", + "conversation.delete": "Smazat konverzaci", + "conversation.mark_as_read": "Označit jako přečtenou", + "conversation.open": "Zobrazit konverzaci", + "conversation.with": "S {names}", + "directory.federated": "Ze známého fedivesmíru", + "directory.local": "Pouze z {domain}", + "directory.new_arrivals": "Nově příchozí", + "directory.recently_active": "Nedávno aktivní", "embed.instructions": "Pro přidání tootu na vaši webovou stránku zkopírujte níže uvedený kód.", "embed.preview": "Takhle to bude vypadat:", "emoji_button.activity": "Aktivita", @@ -134,6 +152,10 @@ "empty_column.mutes": "Ještě jste neskryl/a žádné uživatele.", "empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte konverzaci komunikováním s ostatními.", "empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo", + "error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka načtena správně.", + "error.unexpected_crash.next_steps": "Zkuste obnovit stránku. Pokud to nepomůže, budete možná moci dále používat Mastodon pomocí jiného prohlížeče nebo nativní aplikace.", + "errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky", + "errors.unexpected_crash.report_issue": "Nahlásit problém", "follow_request.authorize": "Autorizovat", "follow_request.reject": "Odmítnout", "getting_started.developers": "Vývojáři", @@ -142,7 +164,7 @@ "getting_started.heading": "Začínáme", "getting_started.invite": "Pozvat lidi", "getting_started.open_source_notice": "Mastodon je otevřený software. Na GitHubu k němu můžete přispět nebo nahlásit chyby: {github}.", - "getting_started.security": "Zabezpečení", + "getting_started.security": "Nastavení účtu", "getting_started.terms": "Podmínky používání", "hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.any": "nebo {additional}", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Název nového seznamu", "lists.search": "Hledejte mezi lidmi, které sledujete", "lists.subheading": "Vaše seznamy", + "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}", "loading_indicator.label": "Načítám…", "media_gallery.toggle_visible": "Přepínat viditelnost", "missing_indicator.label": "Nenalezeno", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Osobní", "navigation_bar.pins": "Připnuté tooty", "navigation_bar.preferences": "Předvolby", - "navigation_bar.profile_directory": "Adresář profilů", "navigation_bar.public_timeline": "Federovaná časová osa", "navigation_bar.security": "Zabezpečení", "notification.favourite": "{name} si oblíbil/a váš toot", @@ -277,8 +299,10 @@ "notifications.group": "{count} oznámení", "poll.closed": "Uzavřena", "poll.refresh": "Obnovit", + "poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}", "poll.total_votes": "{count, plural, one {# hlas} few {# hlasy} many {# hlasu} other {# hlasů}}", "poll.vote": "Hlasovat", + "poll.voted": "Pro tuto odpověď jste hlasoval/a", "poll_button.add_poll": "Přidat anketu", "poll_button.remove_poll": "Odstranit anketu", "privacy.change": "Změnit soukromí tootu", @@ -290,6 +314,7 @@ "privacy.public.short": "Veřejný", "privacy.unlisted.long": "Neodeslat na veřejné časové osy", "privacy.unlisted.short": "Neuvedený", + "refresh": "Obnovit", "regeneration_indicator.label": "Načítám…", "regeneration_indicator.sublabel": "Váš domovský proud se připravuje!", "relative_time.days": "{number} d", @@ -300,7 +325,7 @@ "reply_indicator.cancel": "Zrušit", "report.forward": "Přeposlat na {target}", "report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii?", - "report.hint": "Toto nahlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:", + "report.hint": "Nahlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:", "report.placeholder": "Dodatečné komentáře", "report.submit": "Odeslat", "report.target": "Nahlášení uživatele {target}", @@ -314,6 +339,7 @@ "search_results.accounts": "Lidé", "search_results.hashtags": "Hashtagy", "search_results.statuses": "Tooty", + "search_results.statuses_fts_disabled": "Vyhledávání tootů podle jejich obsahu není na tomto serveru Mastodon povoleno.", "search_results.total": "{count, number} {count, plural, one {výsledek} few {výsledky} many {výsledku} other {výsledků}}", "status.admin_account": "Otevřít moderátorské rozhraní pro uživatele @{name}", "status.admin_status": "Otevřít tento toot v moderátorském rozhraní", @@ -352,6 +378,7 @@ "status.show_more": "Zobrazit více", "status.show_more_all": "Zobrazit více pro všechny", "status.show_thread": "Zobrazit vlákno", + "status.uncached_media_warning": "Nedostupné", "status.unmute_conversation": "Odkrýt konverzaci", "status.unpin": "Odepnout z profilu", "suggestions.dismiss": "Odmítnout návrh", @@ -367,14 +394,22 @@ "time_remaining.moments": "Zbývá několik sekund", "time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekundy} other {Zbývá # sekund}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {člověk} few {lidé} many {lidí} other {lidí}} hovoří", + "trends.trending_now": "Aktuální trendy", "ui.beforeunload": "Váš koncept se ztratí, pokud Mastodon opustíte.", "upload_area.title": "Přetažením nahrajete", "upload_button.label": "Přidat média (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Byl překročen limit nahraných souborů.", "upload_error.poll": "Nahrávání souborů není povoleno u anket.", "upload_form.description": "Popis pro zrakově postižené", - "upload_form.focus": "Změnit náhled", + "upload_form.edit": "Upravit", "upload_form.undo": "Smazat", + "upload_modal.analyzing_picture": "Analyzuji obrázek…", + "upload_modal.apply": "Použít", + "upload_modal.description_placeholder": "Příliš žluťoučký kůň úpěl ďábelské ódy", + "upload_modal.detect_text": "Detekovat text z obrázku", + "upload_modal.edit_media": "Upravit média", + "upload_modal.hint": "Kliknutím na nebo přetáhnutím kruhu na náhledu vyberte bod soustředění, který bude vždy zobrazen na všech náhledech.", + "upload_modal.preview_label": "Náhled ({ratio})", "upload_progress.label": "Nahrávám…", "video.close": "Zavřít video", "video.exit_fullscreen": "Ukončit celou obrazovku", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 07067e6b1..a8a952798 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -4,6 +4,7 @@ "account.block": "Blocio @{name}", "account.block_domain": "Cuddio popeth rhag {domain}", "account.blocked": "Blociwyd", + "account.cancel_follow_request": "Canslo cais dilyn", "account.direct": "Neges breifat @{name}", "account.domain_blocked": "Parth wedi ei guddio", "account.edit_profile": "Golygu proffil", @@ -15,6 +16,7 @@ "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.", "account.follows_you": "Yn eich dilyn chi", "account.hide_reblogs": "Cuddio bwstiau o @{name}", + "account.last_status": "Gweithredol olaf", "account.link_verified_on": "Gwiriwyd perchnogaeth y ddolen yma ar {date}", "account.locked_info": "Mae'r statws preifatrwydd cyfrif hwn wedi'i osod i gloi. Mae'r perchennog yn adolygu'r sawl sy'n gallu eu dilyn.", "account.media": "Cyfryngau", @@ -23,6 +25,7 @@ "account.mute": "Tawelu @{name}", "account.mute_notifications": "Cuddio hysbysiadau o @{name}", "account.muted": "Distewyd", + "account.never_active": "Byth", "account.posts": "Tŵtiau", "account.posts_with_replies": "Tŵtiau ac atebion", "account.report": "Adrodd @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Dad-ddilyn", "account.unmute": "Dad-dawelu @{name}", "account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}", + "alert.rate_limited.message": "Ceisiwch eto ar ôl {retry_time, time, medium}.", + "alert.rate_limited.title": "Cyfradd gyfyngedig", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.", "alert.unexpected.title": "Wps!", + "autosuggest_hashtag.per_week": "{count} yr wythnos", "boost_modal.combo": "Mae modd gwasgu {combo} er mwyn sgipio hyn tro nesa", "bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.", "bundle_column_error.retry": "Ceisiwch eto", @@ -47,6 +53,7 @@ "column.blocks": "Defnyddwyr a flociwyd", "column.community": "Ffrwd lleol", "column.direct": "Negeseuon preifat", + "column.directory": "Pori proffiliau", "column.domain_blocks": "Parthau cuddiedig", "column.favourites": "Ffefrynnau", "column.follow_requests": "Ceisiadau dilyn", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Ydych chi'n sicr eich bod eisiau dileu y rhestr hwn am byth?", "confirmations.domain_block.confirm": "Cuddio parth cyfan", "confirmations.domain_block.message": "A ydych yn hollol, hollol sicr eich bod am flocio y {domain} cyfan? Yn y nifer helaeth o achosion mae blocio neu tawelu ambell gyfrif yn ddigonol ac yn well. Ni fyddwch yn gweld cynnwys o'r parth hwnnw mewn unrhyw ffrydiau cyhoeddus na chwaith yn eich hysbysiadau. Bydd hyn yn cael gwared o'ch dilynwyr o'r parth hwnnw.", + "confirmations.logout.confirm": "Allgofnodi", + "confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?", "confirmations.mute.confirm": "Tawelu", + "confirmations.mute.explanation": "Bydd hyn yn cuddio pyst oddi wrthynt a physt sydd yn sôn amdanynt, ond bydd hyn dal yn gadael iddyn nhw gweld eich pyst a'ch dilyn.", "confirmations.mute.message": "Ydych chi'n sicr eich bod am ddistewi {name}?", "confirmations.redraft.confirm": "Dileu & ailddrafftio", "confirmations.redraft.message": "Ydych chi'n siwr eich bod eisiau dileu y tŵt hwn a'i ailddrafftio? Bydd ffefrynnau a bwstiau'n cael ei colli, a bydd ymatebion i'r tŵt gwreiddiol yn cael eu hamddifadu.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Bydd ateb nawr yn cymryd lle y neges yr ydych yn cyfansoddi ar hyn o bryd. Ydych chi'n sicr yr ydych am barhau?", "confirmations.unfollow.confirm": "Dad-ddilynwch", "confirmations.unfollow.message": "Ydych chi'n sicr eich bod am ddad-ddilyn {name}?", + "conversation.delete": "Dileu sgwrs", + "conversation.mark_as_read": "Nodi fel wedi'i ddarllen", + "conversation.open": "Gweld sgwrs", + "conversation.with": "Gyda {names}", + "directory.federated": "O ffedysawd hysbys", + "directory.local": "O {domain} yn unig", + "directory.new_arrivals": "Newydd-ddyfodiaid", + "directory.recently_active": "Yn weithredol yn ddiweddar", "embed.instructions": "Mewnblannwch y tŵt hwn ar eich gwefan drwy gopïo'r côd isod.", "embed.preview": "Dyma sut olwg fydd arno:", "emoji_button.activity": "Gweithgarwch", @@ -134,6 +152,10 @@ "empty_column.mutes": "Nid ydych wedi tawelu unrhyw ddefnyddwyr eto.", "empty_column.notifications": "Nid oes gennych unrhyw hysbysiadau eto. Rhyngweithiwch ac eraill i ddechrau'r sgwrs.", "empty_column.public": "Does dim byd yma! Ysgrifennwch rhywbeth yn gyhoeddus, neu dilynwch ddefnyddwyr o achosion eraill i'w lenwi", + "error.unexpected_crash.explanation": "Oherwydd gwall yn ein cod neu oherwydd problem cysondeb porwr, nid oedd y dudalen hon gallu cael ei dangos yn gywir.", + "error.unexpected_crash.next_steps": "Ceisiwch ail-lwytho y dudalen. Os nad yw hyn yn eich helpu, efallai gallech defnyddio Mastodon trwy borwr neu ap brodorol gwahanol.", + "errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd", + "errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem", "follow_request.authorize": "Caniatau", "follow_request.reject": "Gwrthod", "getting_started.developers": "Datblygwyr", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Teitl rhestr newydd", "lists.search": "Chwilio ymysg pobl yr ydych yn ei ddilyn", "lists.subheading": "Eich rhestrau", + "load_pending": "{count, plural, one {# eitem newydd} other {# eitemau newydd}}", "loading_indicator.label": "Llwytho...", "media_gallery.toggle_visible": "Toglo gwelededd", "missing_indicator.label": "Heb ei ganfod", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personol", "navigation_bar.pins": "Tŵtiau wedi eu pinio", "navigation_bar.preferences": "Dewisiadau", - "navigation_bar.profile_directory": "Cyfeiriadur Proffil", "navigation_bar.public_timeline": "Ffrwd y ffederasiwn", "navigation_bar.security": "Diogelwch", "notification.favourite": "hoffodd {name} eich tŵt", @@ -264,7 +286,7 @@ "notifications.column_settings.follow": "Dilynwyr newydd:", "notifications.column_settings.mention": "Crybwylliadau:", "notifications.column_settings.poll": "Canlyniadau pleidlais:", - "notifications.column_settings.push": "Hysbysiadau push", + "notifications.column_settings.push": "Hysbysiadau gwthiadwy", "notifications.column_settings.reblog": "Hybiadau:", "notifications.column_settings.show": "Dangos yn y golofn", "notifications.column_settings.sound": "Chwarae sain", @@ -277,8 +299,10 @@ "notifications.group": "{count} o hysbysiadau", "poll.closed": "Ar gau", "poll.refresh": "Adnewyddu", + "poll.total_people": "{count, plural, one {# berson} other {# o bobl}}", "poll.total_votes": "{count, plural, one {# bleidlais} other {# o bleidleisiau}}", "poll.vote": "Pleidleisio", + "poll.voted": "Pleidleisioch chi am yr ateb hon", "poll_button.add_poll": "Ychwanegu pleidlais", "poll_button.remove_poll": "Tynnu pleidlais", "privacy.change": "Addasu preifatrwdd y tŵt", @@ -290,6 +314,7 @@ "privacy.public.short": "Cyhoeddus", "privacy.unlisted.long": "Peidio a chyhoeddi i ffrydiau cyhoeddus", "privacy.unlisted.short": "Heb ei restru", + "refresh": "Adnewyddu", "regeneration_indicator.label": "Llwytho…", "regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei baratoi!", "relative_time.days": "{number}dydd", @@ -314,6 +339,7 @@ "search_results.accounts": "Pobl", "search_results.hashtags": "Hanshnodau", "search_results.statuses": "Tŵtiau", + "search_results.statuses_fts_disabled": "Nid yw chwilio Tŵtiau yn ôl eu cynnwys wedi'i alluogi ar y gweinydd Mastodon hwn.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Agor rhyngwyneb goruwchwylio ar gyfer @{name}", "status.admin_status": "Agor y tŵt yn y rhyngwyneb goruwchwylio", @@ -352,6 +378,7 @@ "status.show_more": "Dangos mwy", "status.show_more_all": "Dangos mwy i bawb", "status.show_thread": "Dangos edefyn", + "status.uncached_media_warning": "Dim ar gael", "status.unmute_conversation": "Dad-dawelu sgwrs", "status.unpin": "Dadbinio o'r proffil", "suggestions.dismiss": "Diswyddo", @@ -367,14 +394,22 @@ "time_remaining.moments": "Munudau ar ôl", "time_remaining.seconds": "{number, plural, one {# eiliad} other {# o eiliadau}} ar ôl", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} yn siarad", + "trends.trending_now": "Yn tueddu nawr", "ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.", "upload_area.title": "Llusgwch & gollwing i uwchlwytho", "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.", "upload_error.poll": "Nid oes modd uwchlwytho ffeiliau â phleidleisiau.", "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg", - "upload_form.focus": "Newid rhagolwg", + "upload_form.edit": "Golygu", "upload_form.undo": "Dileu", + "upload_modal.analyzing_picture": "Dadansoddi llun…", + "upload_modal.apply": "Gweithredu", + "upload_modal.description_placeholder": "Mae ei phen bach llawn jocs, 'run peth a fy nghot golff, rhai dyddiau", + "upload_modal.detect_text": "Canfod testun o'r llun", + "upload_modal.edit_media": "Golygu cyfryngau", + "upload_modal.hint": "Cliciwch neu llusgwch y cylch ar y rhagolwg i ddewis y canolbwynt a fydd bob amser i'w weld ar bob mân-lunau.", + "upload_modal.preview_label": "Rhagolwg ({ratio})", "upload_progress.label": "Uwchlwytho...", "video.close": "Cau fideo", "video.exit_fullscreen": "Gadael sgrîn llawn", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index ba8ba7a28..4719d5ca5 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -4,6 +4,7 @@ "account.block": "Bloker @{name}", "account.block_domain": "Skjul alt fra {domain}", "account.blocked": "Blokeret", + "account.cancel_follow_request": "Annullér følgeranmodning", "account.direct": "Send en direkte besked til @{name}", "account.domain_blocked": "Domænet er blevet skjult", "account.edit_profile": "Rediger profil", @@ -15,14 +16,16 @@ "account.follows.empty": "Denne bruger følger endnu ikke nogen.", "account.follows_you": "Følger dig", "account.hide_reblogs": "Skjul fremhævelserne fra @{name}", + "account.last_status": "Sidst aktiv", "account.link_verified_on": "Ejerskabet af dette link blev tjekket den %{date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.locked_info": "Denne kontos privatlivsstatus er sat til låst. Ejeren bedømmer manuelt, hvem der kan følge dem.", "account.media": "Medie", "account.mention": "Nævn @{name}", "account.moved_to": "{name} er flyttet til:", "account.mute": "Dæmp @{name}", "account.mute_notifications": "Dæmp notifikationer fra @{name}", "account.muted": "Dæmpet", + "account.never_active": "Aldrig", "account.posts": "Trut", "account.posts_with_replies": "Trut og svar", "account.report": "Rapporter @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Følg ikke længere", "account.unmute": "Fjern dæmpningen af @{name}", "account.unmute_notifications": "Fjern dæmpningen af notifikationer fra @{name}", + "alert.rate_limited.message": "Prøv venligst igen efter {retry_time, time, medium}.", + "alert.rate_limited.title": "Gradsbegrænset", "alert.unexpected.message": "Der opstod en uventet fejl.", "alert.unexpected.title": "Ups!", + "autosuggest_hashtag.per_week": "{count} per uge", "boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang", "bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.", "bundle_column_error.retry": "Prøv igen", @@ -47,6 +53,7 @@ "column.blocks": "Blokerede brugere", "column.community": "Lokal tidslinje", "column.direct": "Direkte beskeder", + "column.directory": "Gennemse profiler", "column.domain_blocks": "Skjulte domæner", "column.favourites": "Favoritter", "column.follow_requests": "Anmodning om at følge", @@ -71,20 +78,20 @@ "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Alle kan følge dig for at se dine følger-kun indlæg.", "compose_form.lock_disclaimer.lock": "låst", "compose_form.placeholder": "Hvad har du på hjertet?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Tilføj valgmulighed", + "compose_form.poll.duration": "Afstemningens varighed", + "compose_form.poll.option_placeholder": "Valgmulighed {number}", + "compose_form.poll.remove_option": "Fjern denne valgmulighed", "compose_form.publish": "Trut", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Markér medie som følsomt", "compose_form.sensitive.marked": "Medie er markeret som værende følsomt", "compose_form.sensitive.unmarked": "Mediet er ikke markeret som værende følsomt", "compose_form.spoiler.marked": "Teksten er skjult bag en advarsel", "compose_form.spoiler.unmarked": "Teksten er ikke skjult", "compose_form.spoiler_placeholder": "Skriv din advarsel her", "confirmation_modal.cancel": "Annuller", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Blokér og anmeld", "confirmations.block.confirm": "Bloker", "confirmations.block.message": "Er du sikker på, du vil blokere {name}?", "confirmations.delete.confirm": "Slet", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Er du sikker på, du vil slette denne liste?", "confirmations.domain_block.confirm": "Skjul helt domæne", "confirmations.domain_block.message": "Er du helt sikker på du vil blokere hele {domain} domænet? I de fleste tilfælde vil få specifikke blokeringer eller dæmpninger være nok og at fortrække. Du vil ikke se indhold fra det domæne hverken på offentlige tidslinjer eller i dine notifikationer. Dine følgere fra det domæne vil blive fjernet.", + "confirmations.logout.confirm": "Log ud", + "confirmations.logout.message": "Er du sikker på du vil logge ud?", "confirmations.mute.confirm": "Dæmp", + "confirmations.mute.explanation": "Dette vil skjule indlæg fra dem, samt andre indlæg der omtaler dem, men de vil stadig være i stand til at se dine indlæg og følge dig.", "confirmations.mute.message": "Er du sikker på, du vil dæmpe {name}?", "confirmations.redraft.confirm": "Slet & omskriv", "confirmations.redraft.message": "Er du sikker på, du vil slette denne status og omskrive den? Favoritter og fremhævelser vil gå tabt og svar til det oprindelige opslag vil blive forældreløse.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Hvis du svarer nu vil du overskrive den besked du er ved at skrive. Er du sikker på, du vil fortsætte?", "confirmations.unfollow.confirm": "Følg ikke længere", "confirmations.unfollow.message": "Er du sikker på, du ikke længere vil følge {name}?", + "conversation.delete": "Slet samtale", + "conversation.mark_as_read": "Marker som læst", + "conversation.open": "Vis samtale", + "conversation.with": "Med {names}", + "directory.federated": "Fra kendt fedivers", + "directory.local": "Kun fra {domain}", + "directory.new_arrivals": "Nye ankomster", + "directory.recently_active": "Senest aktiv", "embed.instructions": "Indlejre denne status på din side ved at kopiere nedenstående kode.", "embed.preview": "Det kommer til at se således ud:", "emoji_button.activity": "Aktivitet", @@ -111,14 +129,14 @@ "emoji_button.nature": "Natur", "emoji_button.not_found": "Ingen emojos!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Objekter", - "emoji_button.people": "Mennesker", + "emoji_button.people": "Personer", "emoji_button.recent": "Oftest brugt", "emoji_button.search": "Søg...", "emoji_button.search_results": "Søgeresultater", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Rejser & steder", "empty_column.account_timeline": "Ingen bidrag her!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_unavailable": "Profil utilgængelig", "empty_column.blocks": "Du har ikke blokeret nogen endnu.", "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at starte lavinen!", "empty_column.direct": "Du har endnu ingen direkte beskeder. Når du sender eller modtager en, vil den vises her.", @@ -134,10 +152,14 @@ "empty_column.mutes": "Du har endnu ikke dæmpet nogen som helst bruger.", "empty_column.notifications": "Du har endnu ingen notifikationer. Tag ud og bland dig med folkemængden for at starte samtalen.", "empty_column.public": "Der er ikke noget at se her! Skriv noget offentligt eller start ud med manuelt at følge brugere fra andre server for at udfylde tomrummet", + "error.unexpected_crash.explanation": "På grund af en fejl i vores kode, eller en browser kompatibilitetsfejl, så kunne siden ikke vises korrekt.", + "error.unexpected_crash.next_steps": "Prøv at genindlæs siden. Hvis dette ikke hjælper, så forsøg venligst, at tilgå Mastodon via en anden browser eller app.", + "errors.unexpected_crash.copy_stacktrace": "Kopiér stack trace til udklipsholderen", + "errors.unexpected_crash.report_issue": "Rapportér problem", "follow_request.authorize": "Godkend", "follow_request.reject": "Afvis", "getting_started.developers": "Udviklere", - "getting_started.directory": "Profile directory", + "getting_started.directory": "Profilliste", "getting_started.documentation": "Dokumentation", "getting_started.heading": "Kom igang", "getting_started.invite": "Inviter folk", @@ -147,35 +169,35 @@ "hashtag.column_header.tag_mode.all": "og {additional}", "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "uden {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.select.no_options_message": "Ingen forslag fundet", + "hashtag.column_settings.select.placeholder": "Indtast hashtags…", + "hashtag.column_settings.tag_mode.all": "Alle disse", + "hashtag.column_settings.tag_mode.any": "Nogle af disse", + "hashtag.column_settings.tag_mode.none": "Ingen af disse", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Grundlæggende", "home.column_settings.show_reblogs": "Vis fremhævelser", "home.column_settings.show_replies": "Vis svar", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.days": "{number, plural, one {# dag} other {# dage}}", + "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", + "intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}", "introduction.federation.action": "Næste", - "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.headline": "Fælles", "introduction.federation.federated.text": "Offentlige bidrag fra andre servere af fediversen vil komme til syne i den federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.federation.home.headline": "Hjem", + "introduction.federation.home.text": "Statusser fra personer du følger vil blive vist i dit hjemmefeed. Du kan følge alle på enhver server!", + "introduction.federation.local.headline": "Lokal", + "introduction.federation.local.text": "Offentlige statusser fra personer på samme server som dig vil blive vist i det lokale feed.", "introduction.interactions.action": "Slut tutorial!", "introduction.interactions.favourite.headline": "Favorisere", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.favourite.text": "Du kan gemme en status til senere (og vise forfatteren at du kunne lide den) ved at favorisere den.", "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reblog.text": "Du kan delete andres statusser med dine følgere ved at booste dem.", "introduction.interactions.reply.headline": "Svar", "introduction.interactions.reply.text": "Du kan svare andres og din egen bidrag, hvilke vil kæde dem sammen i en konversation.", "introduction.welcome.action": "Læd os gå!", "introduction.welcome.headline": "Første skridt", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "introduction.welcome.text": "Velkommen til fediverset! Om få øjeblikke vil du kunne dele statusser og tale med dine venner på en bred vifte af servere. Men denne server, {domain}, er speciel. Det er på denne server at din profil har hjemme så husk dens navn.", "keyboard_shortcuts.back": "for at navigere dig tilbage", "keyboard_shortcuts.blocked": "for at åbne listen over blokerede brugere", "keyboard_shortcuts.boost": "for at fremhæve", @@ -204,23 +226,24 @@ "keyboard_shortcuts.search": "for at fokusere søgningen", "keyboard_shortcuts.start": "for at åbne \"kom igen\" kolonnen", "keyboard_shortcuts.toggle_hidden": "for at vise/skjule tekst bag CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "for at vise/skjule medier", "keyboard_shortcuts.toot": "for at påbegynde et helt nyt trut", "keyboard_shortcuts.unfocus": "for at fjerne fokus fra skriveområde/søgning", "keyboard_shortcuts.up": "for at bevæge dig op ad listen", "lightbox.close": "Luk", "lightbox.next": "Næste", "lightbox.previous": "Forrige", - "lightbox.view_context": "View context", + "lightbox.view_context": "Vis kontekst", "lists.account.add": "Tilføj til liste", "lists.account.remove": "Fjern fra liste", "lists.delete": "Slet liste", "lists.edit": "Rediger liste", - "lists.edit.submit": "Change title", + "lists.edit.submit": "Skift titel", "lists.new.create": "Tilføj liste", "lists.new.title_placeholder": "Ny liste titel", "lists.search": "Søg iblandt folk du følger", "lists.subheading": "Dine lister", + "load_pending": "{count, plural, one {# nyt punkt} other {# nye punkter}}", "loading_indicator.label": "Indlæser...", "media_gallery.toggle_visible": "Ændre synlighed", "missing_indicator.label": "Ikke fundet", @@ -237,7 +260,7 @@ "navigation_bar.favourites": "Favoritter", "navigation_bar.filters": "Dæmpede ord", "navigation_bar.follow_requests": "Følgeanmodninger", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Følger og følgere", "navigation_bar.info": "Om denne instans", "navigation_bar.keyboard_shortcuts": "Hurtigtast", "navigation_bar.lists": "Lister", @@ -246,50 +269,52 @@ "navigation_bar.personal": "Personligt", "navigation_bar.pins": "Fastgjorte trut", "navigation_bar.preferences": "Præferencer", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Fælles tidslinje", "navigation_bar.security": "Sikkerhed", "notification.favourite": "{name} favoriserede din status", "notification.follow": "{name} fulgte dig", "notification.mention": "{name} nævnte dig", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} fremhævede din status", + "notification.poll": "En afstemning, du stemte i, er slut", + "notification.reblog": "{name} boostede din status", "notifications.clear": "Ryd notifikationer", "notifications.clear_confirmation": "Er du sikker på, du vil rydde alle dine notifikationer permanent?", - "notifications.column_settings.alert": "Skrivebords notifikationer", + "notifications.column_settings.alert": "Skrivebordsnotifikationer", "notifications.column_settings.favourite": "Favoritter:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Vis alle kategorier", + "notifications.column_settings.filter_bar.category": "Hurtigfilter", + "notifications.column_settings.filter_bar.show": "Vis", "notifications.column_settings.follow": "Nye følgere:", - "notifications.column_settings.mention": "Omtale:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifikationer", - "notifications.column_settings.reblog": "Fremhævelser:", + "notifications.column_settings.mention": "Statusser der nævner dig:", + "notifications.column_settings.poll": "Afstemningsresultat:", + "notifications.column_settings.push": "Pushnotifikationer", + "notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Afspil lyd", "notifications.filter.all": "Alle", "notifications.filter.boosts": "Boosts", "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følger", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", + "notifications.filter.mentions": "Statusser der nævner dig", + "notifications.filter.polls": "Afstemningsresultat", "notifications.group": "{count} notifikationer", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Ændre status privatliv", - "privacy.direct.long": "Post til kun de nævnte brugere", + "poll.closed": "Lukket", + "poll.refresh": "Opdatér", + "poll.total_people": "{count, plural, one {# person} other {# personer}}", + "poll.total_votes": "{count, plural, one {# stemme} other {# stemmer}}", + "poll.vote": "Stem", + "poll.voted": "Du stemte for denne valgmulighed", + "poll_button.add_poll": "Tilføj en afstemning", + "poll_button.remove_poll": "Fjern afstemning", + "privacy.change": "Skift status visningsindstillinger", + "privacy.direct.long": "Udgiv kun til nævnte brugere", "privacy.direct.short": "Direkte", - "privacy.private.long": "Post kun til følgere", + "privacy.private.long": "Udgiv kun til følgere", "privacy.private.short": "Kun for følgere", - "privacy.public.long": "Post til offentlige tidslinjer", + "privacy.public.long": "Udgiv på offentlige tidslinjer", "privacy.public.short": "Offentligt", - "privacy.unlisted.long": "Post ikke til offentlige tidslinjer", + "privacy.unlisted.long": "Udgiv ikke på offentlige tidslinjer", "privacy.unlisted.short": "Ikke listet", + "refresh": "Opdatér", "regeneration_indicator.label": "Indlæser…", "regeneration_indicator.sublabel": "Din startside er ved at blive forberedt!", "relative_time.days": "{number}d", @@ -300,31 +325,32 @@ "reply_indicator.cancel": "Annuller", "report.forward": "Videresend til {target}", "report.forward_hint": "Kontoen er fra en anden server. Vil du også sende en anonym kopi af anmeldelsen dertil?", - "report.hint": "Anmeldelsen vil blive sendt til moderatorene af din instans. Du kan give en forklaring for hvorfor du anmelder denne konto nedenfor:", + "report.hint": "Anmeldelsen vil blive sendt til moderatorene af din instans. Du kan give en forklaring på hvorfor du anmelder denne konto nedenfor:", "report.placeholder": "Yderligere kommentarer", "report.submit": "Indsend", "report.target": "Anmelder {target}", "search.placeholder": "Søg", "search_popout.search_format": "Avanceret søgeformat", - "search_popout.tips.full_text": "Simpel tekst returnerer statusser du har skrevet, favoriseret, fremhævet, eller er blevet nævnt i, lige så vel som matchende brugernavne, visningsnavne, og hashtags.", - "search_popout.tips.hashtag": "emnetag", + "search_popout.tips.full_text": "Simpel tekst returnerer statusser du har skrevet, favoriseret, boostet, eller er blevet nævnt i såvel som matchende brugernavne, profilnavne, og hashtags.", + "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "status", - "search_popout.tips.text": "Simpelt tekst returnerer passende visningsnavne, brugernavne og hashtags", + "search_popout.tips.text": "Simpel tekst returnerer matchende profilnavne, brugernavne og hashtags", "search_popout.tips.user": "bruger", - "search_results.accounts": "Folk", - "search_results.hashtags": "Emnetags", + "search_results.accounts": "Personer", + "search_results.hashtags": "Hashtags", "search_results.statuses": "Trut", - "search_results.total": "{count, number} {count, plural, et {result} andre {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "search_results.statuses_fts_disabled": "Denne Mastodonserver har ikke aktiveret for søgning af statusser via deres indhold.", + "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}", + "status.admin_account": "Åben modereringsvisning for @{name}", + "status.admin_status": "Åben denne status i modereringsvisningen", "status.block": "Bloker @{name}", - "status.cancel_reblog_private": "Fremhæv ikke længere", - "status.cannot_reblog": "Denne post kan ikke fremhæves", - "status.copy": "Copy link to status", + "status.cancel_reblog_private": "Fjern boost", + "status.cannot_reblog": "Denne post kan ikke boostes", + "status.copy": "Kopiér link til status", "status.delete": "Slet", "status.detailed_status": "Detaljeret visning af samtale", "status.direct": "Send direkte besked til @{name}", - "status.embed": "Indlejre", + "status.embed": "Integrér", "status.favourite": "Favorit", "status.filtered": "Filtreret", "status.load_more": "Indlæs mere", @@ -337,13 +363,13 @@ "status.pin": "Fastgør til profil", "status.pinned": "Fastgjort trut", "status.read_more": "Læs mere", - "status.reblog": "Fremhæv", - "status.reblog_private": "Fremhæv til oprindeligt publikum", - "status.reblogged_by": "{name} fremhævede", - "status.reblogs.empty": "Der er endnu ingen der har fremhævet dette trut. Når der er nogen der gør, vil det blive vist her.", + "status.reblog": "Boost", + "status.reblog_private": "Boost til det oprindelige publikum", + "status.reblogged_by": "{name} boostede", + "status.reblogs.empty": "Der er endnu ingen der har boostet dette trut. Når der er nogen der gør, vil det blive vist her.", "status.redraft": "Slet og omskriv", - "status.reply": "Svar", - "status.replyAll": "Svar samtale", + "status.reply": "Besvar", + "status.replyAll": "Besvar samtale", "status.report": "Anmeld @{name}", "status.sensitive_warning": "Følsomt indhold", "status.share": "Del", @@ -351,33 +377,42 @@ "status.show_less_all": "Vis mindre for alle", "status.show_more": "Vis mere", "status.show_more_all": "Vis mere for alle", - "status.show_thread": "Show thread", - "status.unmute_conversation": "Fjern dæmpningen fra samtale", - "status.unpin": "Fjern som fastgjort fra profil", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "status.show_thread": "Vis tråd", + "status.uncached_media_warning": "Ikke tilgængelig", + "status.unmute_conversation": "Genaktivér samtale", + "status.unpin": "Frigør fra profil", + "suggestions.dismiss": "Afvis foreslag", + "suggestions.header": "Du er måske interesseret i…", "tabs_bar.federated_timeline": "Fælles", "tabs_bar.home": "Hjem", "tabs_bar.local_timeline": "Lokal", "tabs_bar.notifications": "Notifikationer", "tabs_bar.search": "Søg", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} snakker", + "time_remaining.days": "{number, plural, one {# dag} other {# dage}} tilbage", + "time_remaining.hours": "{number, plural, one {# time} other {# timer}} tilbage", + "time_remaining.minutes": "{number, plural, one {# minut} other {# minutter}} tilbage", + "time_remaining.moments": "Få øjeblikke tilbage", + "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} tilbage", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {personer}} snakker", + "trends.trending_now": "Hot lige nu", "ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.", "upload_area.title": "Træk og slip for at uploade", "upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.description": "Beskriv for de svagtseende", - "upload_form.focus": "Beskær", + "upload_error.limit": "Uploadgrænse overskredet.", + "upload_error.poll": "Filupload ikke tilladt sammen med afstemninger.", + "upload_form.description": "Beskriv for svagtseende", + "upload_form.edit": "Redigér", "upload_form.undo": "Slet", + "upload_modal.analyzing_picture": "Analyserer billede…", + "upload_modal.apply": "Anvend", + "upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund", + "upload_modal.detect_text": "Find tekst i billede på automatisk vis", + "upload_modal.edit_media": "Redigér medie", + "upload_modal.hint": "Klik eller træk cirklen på billedet for at vælge et fokuspunkt.", + "upload_modal.preview_label": "Forhåndsvisning ({ratio})", "upload_progress.label": "Uploader...", "video.close": "Luk video", - "video.exit_fullscreen": "Gå ud af fuldskærm", + "video.exit_fullscreen": "Forlad fuldskærm", "video.expand": "Udvid video", "video.fullscreen": "Fuldskærm", "video.hide": "Skjul video", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 5c63af3b2..c916028be 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -4,17 +4,19 @@ "account.block": "@{name} blockieren", "account.block_domain": "Alles von {domain} verstecken", "account.blocked": "Blockiert", + "account.cancel_follow_request": "Folgeanfrage abbrechen", "account.direct": "Direktnachricht an @{name}", "account.domain_blocked": "Domain versteckt", "account.edit_profile": "Profil bearbeiten", "account.endorse": "Auf Profil hervorheben", "account.follow": "Folgen", - "account.followers": "Folger_innen", + "account.followers": "Folgende", "account.followers.empty": "Diesem Profil folgt noch niemand.", "account.follows": "Folgt", "account.follows.empty": "Dieses Profil folgt noch niemandem.", "account.follows_you": "Folgt dir", "account.hide_reblogs": "Geteilte Beiträge von @{name} verbergen", + "account.last_status": "Zuletzt aktiv", "account.link_verified_on": "Besitz dieses Links wurde geprüft am {date}", "account.locked_info": "Der Privatsphärenstatus dieses Accounts wurde auf gesperrt gesetzt. Die Person bestimmt manuell wer ihm/ihr folgen darf.", "account.media": "Medien", @@ -23,6 +25,7 @@ "account.mute": "@{name} stummschalten", "account.mute_notifications": "Benachrichtigungen von @{name} verbergen", "account.muted": "Stummgeschaltet", + "account.never_active": "Nie", "account.posts": "Beiträge", "account.posts_with_replies": "Beiträge und Antworten", "account.report": "@{name} melden", @@ -35,8 +38,11 @@ "account.unfollow": "Entfolgen", "account.unmute": "@{name} nicht mehr stummschalten", "account.unmute_notifications": "Benachrichtigungen von @{name} einschalten", + "alert.rate_limited.message": "Bitte versuche es nach {retry_time, time, medium}.", + "alert.rate_limited.title": "Anfragelimit überschritten", "alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.", "alert.unexpected.title": "Hoppla!", + "autosuggest_hashtag.per_week": "{count} pro Woche", "boost_modal.combo": "Drücke {combo}, um dieses Fenster zu überspringen", "bundle_column_error.body": "Etwas ist beim Laden schiefgelaufen.", "bundle_column_error.retry": "Erneut versuchen", @@ -47,6 +53,7 @@ "column.blocks": "Blockierte Profile", "column.community": "Lokale Zeitleiste", "column.direct": "Direktnachrichten", + "column.directory": "Profile durchsuchen", "column.domain_blocks": "Versteckte Domains", "column.favourites": "Favoriten", "column.follow_requests": "Folgeanfragen", @@ -92,8 +99,11 @@ "confirmations.delete_list.confirm": "Löschen", "confirmations.delete_list.message": "Bist du dir sicher, dass du diese Liste permanent löschen möchtest?", "confirmations.domain_block.confirm": "Die ganze Domain verbergen", - "confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} blockieren willst? In den meisten Fällen reichen ein paar gezielte Blockierungen oder Stummschaltungen aus. Nach der Blockierung wirst du nichts mehr von dieser Domain in öffentlichen Zeitleisten oder Benachrichtigungen sehen. Deine Folger_innen von dieser Domain werden auch entfernt.", + "confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} blockieren willst? In den meisten Fällen reichen ein paar gezielte Blockierungen oder Stummschaltungen aus. Du wirst den Inhalt von dieser Domain nicht in irgendwelchen öffentlichen Timelines oder den Benachrichtigungen finden. Deine Folgenden von dieser Domain werden entfernt.", + "confirmations.logout.confirm": "Abmelden", + "confirmations.logout.message": "Bist du sicher, dass du dich abmelden möchtest?", "confirmations.mute.confirm": "Stummschalten", + "confirmations.mute.explanation": "Dies wird Beiträge von dieser Person und Beiträge, die diese Person erwähnen, ausblenden, aber es wird der Person trotzdem erlauben, deine Beiträge zu sehen und dir zu folgen.", "confirmations.mute.message": "Bist du dir sicher, dass du {name} stummschalten möchtest?", "confirmations.redraft.confirm": "Löschen und neu erstellen", "confirmations.redraft.message": "Bist du dir sicher, dass du diesen Beitrag löschen und neu erstellen möchtest? Favorisierungen, geteilte Beiträge und Antworten werden verloren gehen.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Wenn du jetzt antwortest wird es die gesamte Nachricht verwerfen, die du gerade schreibst. Möchtest du wirklich fortfahren?", "confirmations.unfollow.confirm": "Entfolgen", "confirmations.unfollow.message": "Bist du dir sicher, dass du {name} entfolgen möchtest?", + "conversation.delete": "Unterhaltung löschen", + "conversation.mark_as_read": "Als gelesen markieren", + "conversation.open": "Unterhaltung anzeigen", + "conversation.with": "Mit {names}", + "directory.federated": "Aus dem Fediverse", + "directory.local": "Nur von {domain}", + "directory.new_arrivals": "Neue Benutzer", + "directory.recently_active": "Kürzlich aktiv", "embed.instructions": "Du kannst diesen Beitrag auf deiner Webseite einbetten, indem du den folgenden Code einfügst.", "embed.preview": "So wird es aussehen:", "emoji_button.activity": "Aktivitäten", @@ -134,6 +152,10 @@ "empty_column.mutes": "Du hast keine Profile stummgeschaltet.", "empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.", "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Zeitleiste aufzufüllen", + "error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browsereinkompatibilität konnte diese Seite nicht korrekt angezeigt werden.", + "error.unexpected_crash.next_steps": "Versuche die Seite zu aktualisieren. Wenn das nicht hilft, kannst du Mastodon über einen anderen Browser oder eine native App verwenden.", + "errors.unexpected_crash.copy_stacktrace": "Fehlerlog in die Zwischenablage kopieren", + "errors.unexpected_crash.report_issue": "Problem melden", "follow_request.authorize": "Erlauben", "follow_request.reject": "Ablehnen", "getting_started.developers": "Entwickler", @@ -168,7 +190,7 @@ "introduction.federation.local.text": "Öffentliche Beiträge von Leuten auf demselben Server wie du erscheinen in der lokalen Zeitleiste.", "introduction.interactions.action": "Tutorial beenden!", "introduction.interactions.favourite.headline": "Favorisieren", - "introduction.interactions.favourite.text": "Du kannst Beitrage für später speichern und ihre Autor_innen wissen lassen, dass sie dir gefallen haben, indem du sie favorisierst.", + "introduction.interactions.favourite.text": "Du kannst Beitrage für später speichern und ihre Autoren wissen lassen, dass sie dir gefallen haben, indem du sie favorisierst.", "introduction.interactions.reblog.headline": "Teilen", "introduction.interactions.reblog.text": "Du kannst Beiträge anderer mit deinen Followern teilen, indem du sie teilst.", "introduction.interactions.reply.headline": "Antworten", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Neuer Titel der Liste", "lists.search": "Suche nach Leuten denen du folgst", "lists.subheading": "Deine Listen", + "load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}", "loading_indicator.label": "Wird geladen …", "media_gallery.toggle_visible": "Sichtbarkeit umschalten", "missing_indicator.label": "Nicht gefunden", @@ -237,7 +260,7 @@ "navigation_bar.favourites": "Favoriten", "navigation_bar.filters": "Stummgeschaltene Wörter", "navigation_bar.follow_requests": "Folgeanfragen", - "navigation_bar.follows_and_followers": "Folger_innen und Gefolgte", + "navigation_bar.follows_and_followers": "Folgende und Gefolgte", "navigation_bar.info": "Über diesen Server", "navigation_bar.keyboard_shortcuts": "Tastenkombinationen", "navigation_bar.lists": "Listen", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Persönlich", "navigation_bar.pins": "Angeheftete Beiträge", "navigation_bar.preferences": "Einstellungen", - "navigation_bar.profile_directory": "Profilverzeichnis", "navigation_bar.public_timeline": "Föderierte Zeitleiste", "navigation_bar.security": "Sicherheit", "notification.favourite": "{name} hat deinen Beitrag favorisiert", @@ -261,7 +283,7 @@ "notifications.column_settings.filter_bar.advanced": "Zeige alle Kategorien an", "notifications.column_settings.filter_bar.category": "Schnellfilterleiste", "notifications.column_settings.filter_bar.show": "Anzeigen", - "notifications.column_settings.follow": "Neue Folger_innen:", + "notifications.column_settings.follow": "Neue Folgende:", "notifications.column_settings.mention": "Erwähnungen:", "notifications.column_settings.poll": "Ergebnisse von Umfragen:", "notifications.column_settings.push": "Push-Benachrichtigungen", @@ -271,25 +293,28 @@ "notifications.filter.all": "Alle", "notifications.filter.boosts": "Geteilte Beiträge", "notifications.filter.favourites": "Favorisierungen", - "notifications.filter.follows": "Folger_innen", + "notifications.filter.follows": "Folgt", "notifications.filter.mentions": "Erwähnungen", "notifications.filter.polls": "Ergebnisse der Umfrage", "notifications.group": "{count} Benachrichtigungen", "poll.closed": "Geschlossen", "poll.refresh": "Aktualisieren", + "poll.total_people": "{count, plural, one {# Person} other {# Personen}}", "poll.total_votes": "{count, plural, one {# Stimme} other {# Stimmen}}", "poll.vote": "Abstimmen", + "poll.voted": "Du hast dafür gestimmt", "poll_button.add_poll": "Eine Umfrage erstellen", "poll_button.remove_poll": "Umfrage entfernen", "privacy.change": "Sichtbarkeit des Beitrags anpassen", "privacy.direct.long": "Wird an erwähnte Profile gesendet", "privacy.direct.short": "Direktnachricht", - "privacy.private.long": "Wird nur für deine Folger_innen sichtbar sein", - "privacy.private.short": "Nur für Folger_innen", + "privacy.private.long": "Wird nur für deine Folgende sichtbar sein", + "privacy.private.short": "Nur für Folgende", "privacy.public.long": "Wird in öffentlichen Zeitleisten erscheinen", "privacy.public.short": "Öffentlich", "privacy.unlisted.long": "Wird in öffentlichen Zeitleisten nicht gezeigt", "privacy.unlisted.short": "Nicht gelistet", + "refresh": "Aktualisieren", "regeneration_indicator.label": "Laden…", "regeneration_indicator.sublabel": "Deine Startseite wird gerade vorbereitet!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "Personen", "search_results.hashtags": "Hashtags", "search_results.statuses": "Beiträge", + "search_results.statuses_fts_disabled": "Die Suche für Beiträge nach ihrem Inhalt ist auf diesem Mastodon-Server deaktiviert.", "search_results.total": "{count, number} {count, plural, one {Ergebnis} other {Ergebnisse}}", "status.admin_account": "Öffne Moderationsoberfläche für @{name}", "status.admin_status": "Öffne Beitrag in der Moderationsoberfläche", @@ -352,6 +378,7 @@ "status.show_more": "Mehr anzeigen", "status.show_more_all": "Alle Inhaltswarnungen aufklappen", "status.show_thread": "Zeige Konversation", + "status.uncached_media_warning": "Nicht verfügbar", "status.unmute_conversation": "Stummschaltung von Konversation aufheben", "status.unpin": "Vom Profil lösen", "suggestions.dismiss": "Empfehlung ausblenden", @@ -367,14 +394,22 @@ "time_remaining.moments": "Schließt in Kürze", "time_remaining.seconds": "{number, plural, one {# Sekunde} other {# Sekunden}} verbleibend", "trends.count_by_accounts": "{count} {rawCount, plural, eine {Person} other {Personen}} reden darüber", + "trends.trending_now": "In den Trends", "ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.", "upload_area.title": "Zum Hochladen hereinziehen", - "upload_button.label": "Mediendatei hinzufügen (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Mediendatei hinzufügen ({formats})", "upload_error.limit": "Dateiupload-Limit erreicht.", "upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.", "upload_form.description": "Für Menschen mit Sehbehinderung beschreiben", - "upload_form.focus": "Vorschaubild bearbeiten", + "upload_form.edit": "Bearbeiten", "upload_form.undo": "Löschen", + "upload_modal.analyzing_picture": "Analysiere Bild…", + "upload_modal.apply": "Übernehmen", + "upload_modal.description_placeholder": "Die heiße Zypernsonne quälte Max und Victoria ja böse auf dem Weg bis zur Küste.", + "upload_modal.detect_text": "Text aus Bild erkennen", + "upload_modal.edit_media": "Medien bearbeiten", + "upload_modal.hint": "Klicke oder ziehe den Kreis auf die Vorschau, um den Brennpunkt auszuwählen, der immer auf allen Vorschaubilder angezeigt wird.", + "upload_modal.preview_label": "Vorschau ({ratio})", "upload_progress.label": "Wird hochgeladen …", "video.close": "Video schließen", "video.exit_fullscreen": "Vollbild verlassen", diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index faca8241d..16e3e402a 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -8,6 +8,14 @@ { "defaultMessage": "An unexpected error occurred.", "id": "alert.unexpected.message" + }, + { + "defaultMessage": "Rate limited", + "id": "alert.rate_limited.title" + }, + { + "defaultMessage": "Please retry after {retry_time, time, medium}.", + "id": "alert.rate_limited.message" } ], "path": "app/javascript/mastodon/actions/alerts.json" @@ -74,6 +82,15 @@ { "descriptors": [ { + "defaultMessage": "{count} per week", + "id": "autosuggest_hashtag.per_week" + } + ], + "path": "app/javascript/mastodon/components/autosuggest_hashtag.json" + }, + { + "descriptors": [ + { "defaultMessage": "Back", "id": "column_back_button.label" } @@ -134,6 +151,27 @@ { "descriptors": [ { + "defaultMessage": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "id": "error.unexpected_crash.explanation" + }, + { + "defaultMessage": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "id": "error.unexpected_crash.next_steps" + }, + { + "defaultMessage": "Report issue", + "id": "errors.unexpected_crash.report_issue" + }, + { + "defaultMessage": "Copy stacktrace to clipboard", + "id": "errors.unexpected_crash.copy_stacktrace" + } + ], + "path": "app/javascript/mastodon/components/error_boundary.json" + }, + { + "descriptors": [ + { "defaultMessage": "{count} {rawCount, plural, one {person} other {people}} talking", "id": "trends.count_by_accounts" } @@ -161,6 +199,15 @@ { "descriptors": [ { + "defaultMessage": "{count, plural, one {# new item} other {# new items}}", + "id": "load_pending" + } + ], + "path": "app/javascript/mastodon/components/load_pending.json" + }, + { + "descriptors": [ + { "defaultMessage": "Loading...", "id": "loading_indicator.label" } @@ -174,6 +221,10 @@ "id": "media_gallery.toggle_visible" }, { + "defaultMessage": "Not available", + "id": "status.uncached_media_warning" + }, + { "defaultMessage": "Sensitive content", "id": "status.sensitive_warning" }, @@ -204,19 +255,41 @@ "id": "poll.closed" }, { + "defaultMessage": "You voted for this answer", + "description": "Tooltip of the \"voted\" checkmark in polls", + "id": "poll.voted" + }, + { + "defaultMessage": "{count, plural, one {# person} other {# people}}", + "id": "poll.total_people" + }, + { + "defaultMessage": "{count, plural, one {# vote} other {# votes}}", + "id": "poll.total_votes" + }, + { "defaultMessage": "Vote", "id": "poll.vote" }, { "defaultMessage": "Refresh", "id": "poll.refresh" + } + ], + "path": "app/javascript/mastodon/components/poll.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Loading…", + "id": "regeneration_indicator.label" }, { - "defaultMessage": "{count, plural, one {# vote} other {# votes}}", - "id": "poll.total_votes" + "defaultMessage": "Your home feed is being prepared!", + "id": "regeneration_indicator.sublabel" } ], - "path": "app/javascript/mastodon/components/poll.json" + "path": "app/javascript/mastodon/components/regeneration_indicator.json" }, { "descriptors": [ @@ -326,6 +399,14 @@ "id": "status.favourite" }, { + "defaultMessage": "Bookmark", + "id": "status.bookmark" + }, + { + "defaultMessage": "Remove bookmark", + "id": "status.remove_bookmark" + }, + { "defaultMessage": "Expand this status", "id": "status.open" }, @@ -364,6 +445,22 @@ { "defaultMessage": "Copy link to status", "id": "status.copy" + }, + { + "defaultMessage": "Hide everything from {domain}", + "id": "account.block_domain" + }, + { + "defaultMessage": "Unhide {domain}", + "id": "account.unblock_domain" + }, + { + "defaultMessage": "Unmute @{name}", + "id": "account.unmute" + }, + { + "defaultMessage": "Unblock @{name}", + "id": "account.unblock" } ], "path": "app/javascript/mastodon/components/status_action_bar.json" @@ -388,19 +485,6 @@ { "descriptors": [ { - "defaultMessage": "Loading…", - "id": "regeneration_indicator.label" - }, - { - "defaultMessage": "Your home feed is being prepared!", - "id": "regeneration_indicator.sublabel" - } - ], - "path": "app/javascript/mastodon/components/status_list.json" - }, - { - "descriptors": [ - { "defaultMessage": "Filtered", "id": "status.filtered" }, @@ -464,10 +548,6 @@ "id": "confirmations.redraft.message" }, { - "defaultMessage": "Block", - "id": "confirmations.block.confirm" - }, - { "defaultMessage": "Reply", "id": "confirmations.reply.confirm" }, @@ -476,12 +556,12 @@ "id": "confirmations.reply.message" }, { - "defaultMessage": "Block & Report", - "id": "confirmations.block.block_and_report" + "defaultMessage": "Hide entire domain", + "id": "confirmations.domain_block.confirm" }, { - "defaultMessage": "Are you sure you want to block {name}?", - "id": "confirmations.block.message" + "defaultMessage": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "id": "confirmations.domain_block.message" } ], "path": "app/javascript/mastodon/containers/status_container.json" @@ -519,26 +599,14 @@ "id": "confirmations.unfollow.confirm" }, { - "defaultMessage": "Block", - "id": "confirmations.block.confirm" - }, - { "defaultMessage": "Hide entire domain", "id": "confirmations.domain_block.confirm" }, { - "defaultMessage": "Block & Report", - "id": "confirmations.block.block_and_report" - }, - { "defaultMessage": "Are you sure you want to unfollow {name}?", "id": "confirmations.unfollow.message" }, { - "defaultMessage": "Are you sure you want to block {name}?", - "id": "confirmations.block.message" - }, - { "defaultMessage": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", "id": "confirmations.domain_block.message" } @@ -569,6 +637,10 @@ "id": "account.follow" }, { + "defaultMessage": "Cancel follow request", + "id": "account.cancel_follow_request" + }, + { "defaultMessage": "Awaiting approval. Click to cancel follow request", "id": "account.requested" }, @@ -722,6 +794,31 @@ { "descriptors": [ { + "defaultMessage": "Play", + "id": "video.play" + }, + { + "defaultMessage": "Pause", + "id": "video.pause" + }, + { + "defaultMessage": "Mute sound", + "id": "video.mute" + }, + { + "defaultMessage": "Unmute sound", + "id": "video.unmute" + }, + { + "defaultMessage": "Download file", + "id": "video.download" + } + ], + "path": "app/javascript/mastodon/features/audio/index.json" + }, + { + "descriptors": [ + { "defaultMessage": "Blocked users", "id": "column.blocks" }, @@ -735,7 +832,20 @@ { "descriptors": [ { - "defaultMessage": "Media Only", + "defaultMessage": "Bookmarks", + "id": "column.bookmarks" + }, + { + "defaultMessage": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "id": "empty_column.bookmarked_statuses" + } + ], + "path": "app/javascript/mastodon/features/bookmarked_statuses/index.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Media only", "id": "community.column_settings.media_only" } ], @@ -795,6 +905,10 @@ { "defaultMessage": "Muted words", "id": "navigation_bar.filters" + }, + { + "defaultMessage": "Logout", + "id": "navigation_bar.logout" } ], "path": "app/javascript/mastodon/features/compose/components/action_bar.json" @@ -1005,6 +1119,10 @@ "id": "search_results.statuses" }, { + "defaultMessage": "Searching toots by their content is not enabled on this Mastodon server.", + "id": "search_results.statuses_fts_disabled" + }, + { "defaultMessage": "Hashtags", "id": "search_results.hashtags" }, @@ -1051,7 +1169,7 @@ { "descriptors": [ { - "defaultMessage": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)", + "defaultMessage": "Add media ({formats})", "id": "upload_button.label" } ], @@ -1060,25 +1178,21 @@ { "descriptors": [ { - "defaultMessage": "Uploading...", + "defaultMessage": "Uploading…", "id": "upload_progress.label" } ], - "path": "app/javascript/mastodon/features/compose/components/upload_progress.json" + "path": "app/javascript/mastodon/features/compose/components/upload_form.json" }, { "descriptors": [ { - "defaultMessage": "Describe for the visually impaired", - "id": "upload_form.description" - }, - { "defaultMessage": "Delete", "id": "upload_form.undo" }, { - "defaultMessage": "Crop", - "id": "upload_form.focus" + "defaultMessage": "Edit", + "id": "upload_form.edit" } ], "path": "app/javascript/mastodon/features/compose/components/upload.json" @@ -1086,6 +1200,19 @@ { "descriptors": [ { + "defaultMessage": "Are you sure you want to log out?", + "id": "confirmations.logout.message" + }, + { + "defaultMessage": "Log out", + "id": "confirmations.logout.confirm" + } + ], + "path": "app/javascript/mastodon/features/compose/containers/navigation_container.json" + }, + { + "descriptors": [ + { "defaultMessage": "Media is marked as sensitive", "id": "compose_form.sensitive.marked" }, @@ -1171,6 +1298,14 @@ { "defaultMessage": "Compose new toot", "id": "navigation_bar.compose" + }, + { + "defaultMessage": "Are you sure you want to log out?", + "id": "confirmations.logout.message" + }, + { + "defaultMessage": "Log out", + "id": "confirmations.logout.confirm" } ], "path": "app/javascript/mastodon/features/compose/index.json" @@ -1178,6 +1313,56 @@ { "descriptors": [ { + "defaultMessage": "More", + "id": "status.more" + }, + { + "defaultMessage": "View conversation", + "id": "conversation.open" + }, + { + "defaultMessage": "Reply", + "id": "status.reply" + }, + { + "defaultMessage": "Mark as read", + "id": "conversation.mark_as_read" + }, + { + "defaultMessage": "Delete conversation", + "id": "conversation.delete" + }, + { + "defaultMessage": "Mute conversation", + "id": "status.mute_conversation" + }, + { + "defaultMessage": "Unmute conversation", + "id": "status.unmute_conversation" + }, + { + "defaultMessage": "With {names}", + "id": "conversation.with" + } + ], + "path": "app/javascript/mastodon/features/direct_timeline/components/conversation.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Reply", + "id": "confirmations.reply.confirm" + }, + { + "defaultMessage": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "id": "confirmations.reply.message" + } + ], + "path": "app/javascript/mastodon/features/direct_timeline/containers/conversation_container.json" + }, + { + "descriptors": [ + { "defaultMessage": "Direct messages", "id": "column.direct" }, @@ -1191,6 +1376,76 @@ { "descriptors": [ { + "defaultMessage": "Follow", + "id": "account.follow" + }, + { + "defaultMessage": "Unfollow", + "id": "account.unfollow" + }, + { + "defaultMessage": "Awaiting approval", + "id": "account.requested" + }, + { + "defaultMessage": "Unblock @{name}", + "id": "account.unblock" + }, + { + "defaultMessage": "Unmute @{name}", + "id": "account.unmute" + }, + { + "defaultMessage": "Are you sure you want to unfollow {name}?", + "id": "confirmations.unfollow.message" + }, + { + "defaultMessage": "Toots", + "id": "account.posts" + }, + { + "defaultMessage": "Followers", + "id": "account.followers" + }, + { + "defaultMessage": "Never", + "id": "account.never_active" + }, + { + "defaultMessage": "Last active", + "id": "account.last_status" + } + ], + "path": "app/javascript/mastodon/features/directory/components/account_card.json" + }, + { + "descriptors": [ + { + "defaultMessage": "Browse profiles", + "id": "column.directory" + }, + { + "defaultMessage": "Recently active", + "id": "directory.recently_active" + }, + { + "defaultMessage": "New arrivals", + "id": "directory.new_arrivals" + }, + { + "defaultMessage": "From {domain} only", + "id": "directory.local" + }, + { + "defaultMessage": "From known fediverse", + "id": "directory.federated" + } + ], + "path": "app/javascript/mastodon/features/directory/index.json" + }, + { + "descriptors": [ + { "defaultMessage": "Hidden domains", "id": "column.domain_blocks" }, @@ -1221,6 +1476,10 @@ { "descriptors": [ { + "defaultMessage": "Refresh", + "id": "refresh" + }, + { "defaultMessage": "No one has favourited this toot yet. When someone does, they will show up here.", "id": "empty_column.favourites" } @@ -1282,6 +1541,15 @@ { "descriptors": [ { + "defaultMessage": "Trending now", + "id": "trends.trending_now" + } + ], + "path": "app/javascript/mastodon/features/getting_started/components/trends.json" + }, + { + "descriptors": [ + { "defaultMessage": "Home", "id": "tabs_bar.home" }, @@ -1306,6 +1574,10 @@ "id": "navigation_bar.direct" }, { + "defaultMessage": "Bookmarks", + "id": "navigation_bar.bookmarks" + }, + { "defaultMessage": "Preferences", "id": "navigation_bar.preferences" }, @@ -1556,6 +1828,10 @@ "id": "keyboard_shortcuts.enter" }, { + "defaultMessage": "to open media", + "id": "keyboard_shortcuts.open_media" + }, + { "defaultMessage": "to show/hide text behind CW", "id": "keyboard_shortcuts.toggle_hidden" }, @@ -1806,6 +2082,10 @@ "id": "notifications.column_settings.follow" }, { + "defaultMessage": "New follow requests:", + "id": "notifications.column_settings.follow_request" + }, + { "defaultMessage": "Favourites:", "id": "notifications.column_settings.favourite" }, @@ -1856,20 +2136,41 @@ { "descriptors": [ { - "defaultMessage": "{name} followed you", - "id": "notification.follow" + "defaultMessage": "Authorize", + "id": "follow_request.authorize" }, { + "defaultMessage": "Reject", + "id": "follow_request.reject" + } + ], + "path": "app/javascript/mastodon/features/notifications/components/follow_request.json" + }, + { + "descriptors": [ + { "defaultMessage": "{name} favourited your status", "id": "notification.favourite" }, { - "defaultMessage": "{name} boosted your status", - "id": "notification.reblog" + "defaultMessage": "{name} followed you", + "id": "notification.follow" + }, + { + "defaultMessage": "Your poll has ended", + "id": "notification.own_poll" }, { "defaultMessage": "A poll you have voted in has ended", "id": "notification.poll" + }, + { + "defaultMessage": "{name} boosted your status", + "id": "notification.reblog" + }, + { + "defaultMessage": "{name} has requested to follow you", + "id": "notification.follow_request" } ], "path": "app/javascript/mastodon/features/notifications/components/notification.json" @@ -1925,6 +2226,10 @@ { "descriptors": [ { + "defaultMessage": "Refresh", + "id": "refresh" + }, + { "defaultMessage": "No one has boosted this toot yet. When someone does, they will show up here.", "id": "status.reblogs.empty" } @@ -1974,6 +2279,10 @@ "id": "status.favourite" }, { + "defaultMessage": "Bookmark", + "id": "status.bookmark" + }, + { "defaultMessage": "Mute @{name}", "id": "status.mute" }, @@ -2020,6 +2329,22 @@ { "defaultMessage": "Copy link to status", "id": "status.copy" + }, + { + "defaultMessage": "Hide everything from {domain}", + "id": "account.block_domain" + }, + { + "defaultMessage": "Unhide {domain}", + "id": "account.unblock_domain" + }, + { + "defaultMessage": "Unmute @{name}", + "id": "account.unmute" + }, + { + "defaultMessage": "Unblock @{name}", + "id": "account.unblock" } ], "path": "app/javascript/mastodon/features/status/components/action_bar.json" @@ -2043,24 +2368,12 @@ "id": "confirmations.redraft.message" }, { - "defaultMessage": "Block", - "id": "confirmations.block.confirm" - }, - { "defaultMessage": "Reply", "id": "confirmations.reply.confirm" }, { "defaultMessage": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "id": "confirmations.reply.message" - }, - { - "defaultMessage": "Block & Report", - "id": "confirmations.block.block_and_report" - }, - { - "defaultMessage": "Are you sure you want to block {name}?", - "id": "confirmations.block.message" } ], "path": "app/javascript/mastodon/features/status/containers/detailed_status_container.json" @@ -2084,10 +2397,6 @@ "id": "confirmations.redraft.message" }, { - "defaultMessage": "Block", - "id": "confirmations.block.confirm" - }, - { "defaultMessage": "Show more for all", "id": "status.show_more_all" }, @@ -2108,15 +2417,45 @@ "id": "confirmations.reply.message" }, { - "defaultMessage": "Block & Report", - "id": "confirmations.block.block_and_report" + "defaultMessage": "Hide entire domain", + "id": "confirmations.domain_block.confirm" }, { + "defaultMessage": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "id": "confirmations.domain_block.message" + } + ], + "path": "app/javascript/mastodon/features/status/index.json" + }, + { + "descriptors": [ + { + "defaultMessage": "View context", + "id": "lightbox.view_context" + } + ], + "path": "app/javascript/mastodon/features/ui/components/audio_modal.json" + }, + { + "descriptors": [ + { "defaultMessage": "Are you sure you want to block {name}?", "id": "confirmations.block.message" + }, + { + "defaultMessage": "Cancel", + "id": "confirmation_modal.cancel" + }, + { + "defaultMessage": "Block & Report", + "id": "confirmations.block.block_and_report" + }, + { + "defaultMessage": "Block", + "id": "confirmations.block.confirm" } ], - "path": "app/javascript/mastodon/features/status/index.json" + "path": "app/javascript/mastodon/features/ui/components/block_modal.json" }, { "descriptors": [ @@ -2203,6 +2542,10 @@ { "descriptors": [ { + "defaultMessage": "Close", + "id": "lightbox.close" + }, + { "defaultMessage": "Embed", "id": "status.embed" }, @@ -2220,6 +2563,55 @@ { "descriptors": [ { + "defaultMessage": "Close", + "id": "lightbox.close" + }, + { + "defaultMessage": "Apply", + "id": "upload_modal.apply" + }, + { + "defaultMessage": "A quick brown fox jumps over the lazy dog", + "id": "upload_modal.description_placeholder" + }, + { + "defaultMessage": "Describe for people with hearing loss", + "id": "upload_form.audio_description" + }, + { + "defaultMessage": "Describe for people with hearing loss or visual impairment", + "id": "upload_form.video_description" + }, + { + "defaultMessage": "Describe for the visually impaired", + "id": "upload_form.description" + }, + { + "defaultMessage": "Edit media", + "id": "upload_modal.edit_media" + }, + { + "defaultMessage": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "id": "upload_modal.hint" + }, + { + "defaultMessage": "Analyzing picture…", + "id": "upload_modal.analyzing_picture" + }, + { + "defaultMessage": "Detect text from picture", + "id": "upload_modal.detect_text" + }, + { + "defaultMessage": "Preview ({ratio})", + "id": "upload_modal.preview_label" + } + ], + "path": "app/javascript/mastodon/features/ui/components/focal_point_modal.json" + }, + { + "descriptors": [ + { "defaultMessage": "Follow requests", "id": "navigation_bar.follow_requests" } @@ -2229,6 +2621,14 @@ { "descriptors": [ { + "defaultMessage": "Are you sure you want to log out?", + "id": "confirmations.logout.message" + }, + { + "defaultMessage": "Log out", + "id": "confirmations.logout.confirm" + }, + { "defaultMessage": "Invite people", "id": "getting_started.invite" }, @@ -2299,6 +2699,10 @@ "id": "confirmations.mute.message" }, { + "defaultMessage": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "id": "confirmations.mute.explanation" + }, + { "defaultMessage": "Hide notifications from this user?", "id": "mute_modal.hide_notifications" }, @@ -2340,20 +2744,24 @@ "id": "navigation_bar.favourites" }, { + "defaultMessage": "Bookmarks", + "id": "navigation_bar.bookmarks" + }, + { "defaultMessage": "Lists", "id": "navigation_bar.lists" }, { + "defaultMessage": "Profile directory", + "id": "getting_started.directory" + }, + { "defaultMessage": "Preferences", "id": "navigation_bar.preferences" }, { "defaultMessage": "Follows and followers", "id": "navigation_bar.follows_and_followers" - }, - { - "defaultMessage": "Profile directory", - "id": "navigation_bar.profile_directory" } ], "path": "app/javascript/mastodon/features/ui/components/navigation_panel.json" @@ -2482,6 +2890,10 @@ "id": "video.exit_fullscreen" }, { + "defaultMessage": "Download file", + "id": "video.download" + }, + { "defaultMessage": "Sensitive content", "id": "status.sensitive_warning" }, diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index ceaa2be4d..ab000fa8d 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -1,9 +1,10 @@ { "account.add_or_remove_from_list": "Προσθήκη ή Αφαίρεση από λίστες", "account.badges.bot": "Μποτ", - "account.block": "Απόκλεισε τον/την @{name}", + "account.block": "Αποκλεισμός @{name}", "account.block_domain": "Απόκρυψε τα πάντα από το {domain}", "account.blocked": "Αποκλεισμένος/η", + "account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης", "account.direct": "Προσωπικό μήνυμα προς @{name}", "account.domain_blocked": "Κρυμμένος τομέας", "account.edit_profile": "Επεξεργασία προφίλ", @@ -15,6 +16,7 @@ "account.follows.empty": "Αυτός ο χρήστης δεν ακολουθεί κανέναν ακόμα.", "account.follows_you": "Σε ακολουθεί", "account.hide_reblogs": "Απόκρυψη προωθήσεων από @{name}", + "account.last_status": "Τελευταία δραστηριότητα", "account.link_verified_on": "Η ιδιοκτησία αυτού του συνδέσμου ελέχθηκε την {date}", "account.locked_info": "Η κατάσταση απορρήτου αυτού του λογαριασμού είναι κλειδωμένη. Ο ιδιοκτήτης επιβεβαιώνει χειροκίνητα ποιος μπορεί να τον ακολουθήσει.", "account.media": "Πολυμέσα", @@ -23,30 +25,35 @@ "account.mute": "Σώπασε @{name}", "account.mute_notifications": "Σώπασε τις ειδοποιήσεις από @{name}", "account.muted": "Αποσιωπημένος/η", + "account.never_active": "Ποτέ", "account.posts": "Τουτ", "account.posts_with_replies": "Τουτ και απαντήσεις", "account.report": "Κατάγγειλε @{name}", "account.requested": "Εκκρεμεί έγκριση. Κάνε κλικ για να ακυρώσεις το αίτημα παρακολούθησης", - "account.share": "Μοιράσου το προφίλ του/της @{name}", - "account.show_reblogs": "Δείξε τις προωθήσεις του/της @{name}", + "account.share": "Μοίρασμα του προφίλ @{name}", + "account.show_reblogs": "Εμφάνιση προωθήσεων από @{name}", "account.unblock": "Ξεμπλόκαρε @{name}", "account.unblock_domain": "Αποκάλυψε το {domain}", "account.unendorse": "Άνευ προβολής στο προφίλ", "account.unfollow": "Διακοπή παρακολούθησης", - "account.unmute": "Διακοπή αποσιώπησης του/της @{name}", + "account.unmute": "Διακοπή αποσιώπησης @{name}", "account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}", + "alert.rate_limited.message": "Παρακαλούμε δοκίμασε ξανά αφού περάσει η {retry_time, time, medium}.", + "alert.rate_limited.title": "Περιορισμός συχνότητας", "alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.", "alert.unexpected.title": "Εεπ!", + "autosuggest_hashtag.per_week": "{count} ανα εβδομάδα", "boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις αυτό την επόμενη φορά", "bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.", "bundle_column_error.retry": "Δοκίμασε ξανά", "bundle_column_error.title": "Σφάλμα δικτύου", - "bundle_modal_error.close": "Κλείσε", - "bundle_modal_error.message": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.", + "bundle_modal_error.close": "Κλείσιμο", + "bundle_modal_error.message": "Κάτι πήγε στραβά κατά τη φόρτωση του στοιχείου.", "bundle_modal_error.retry": "Δοκίμασε ξανά", "column.blocks": "Αποκλεισμένοι χρήστες", "column.community": "Τοπική ροή", "column.direct": "Προσωπικά μηνύματα", + "column.directory": "Δες προφίλ", "column.domain_blocks": "Κρυμμένοι τομείς", "column.favourites": "Αγαπημένα", "column.follow_requests": "Αιτήματα ακολούθησης", @@ -69,7 +76,7 @@ "compose_form.direct_message_warning_learn_more": "Μάθετε περισσότερα", "compose_form.hashtag_warning": "Αυτό το τουτ δεν θα εμφανίζεται κάτω από κανένα hashtag καθώς είναι αφανές. Μόνο τα δημόσια τουτ μπορούν να αναζητηθούν ανά hashtag.", "compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σας προς τους ακολούθους σας.", - "compose_form.lock_disclaimer.lock": "κλειδωμένος", + "compose_form.lock_disclaimer.lock": "κλειδωμένο", "compose_form.placeholder": "Τι σκέφτεσαι;", "compose_form.poll.add_option": "Προσθήκη επιλογής", "compose_form.poll.duration": "Διάρκεια δημοσκόπησης", @@ -88,12 +95,15 @@ "confirmations.block.confirm": "Απόκλεισε", "confirmations.block.message": "Σίγουρα θες να αποκλείσεις {name};", "confirmations.delete.confirm": "Διέγραψε", - "confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή την κατάσταση;", + "confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή τη δημοσίευση;", "confirmations.delete_list.confirm": "Διέγραψε", "confirmations.delete_list.message": "Σίγουρα θες να διαγράψεις οριστικά αυτή τη λίστα;", "confirmations.domain_block.confirm": "Απόκρυψη ολόκληρου του τομέα", "confirmations.domain_block.message": "Σίγουρα θες να μπλοκάρεις ολόκληρο το {domain}; Συνήθως μερικά εστιασμένα μπλοκ ή αποσιωπήσεις επαρκούν και προτιμούνται. Δεν θα βλέπεις περιεχόμενο από αυτό τον κόμβο σε καμία δημόσια ροή, ούτε στις ειδοποιήσεις σου. Όσους ακόλουθους έχεις αυτό αυτό τον κόμβο θα αφαιρεθούν.", + "confirmations.logout.confirm": "Αποσύνδεση", + "confirmations.logout.message": "Σίγουρα θέλεις να αποσυνδεθείς;", "confirmations.mute.confirm": "Αποσιώπηση", + "confirmations.mute.explanation": "Αυτό θα κρύψει τις δημοσιεύσεις τους και τις δημοσιεύσεις που τους αναφέρουν, αλλά θα συνεχίσουν να μπορούν να βλέπουν τις δημοσιεύσεις σου και να σε ακολουθούν.", "confirmations.mute.message": "Σίγουρα θες να αποσιωπήσεις {name};", "confirmations.redraft.confirm": "Διαγραφή & ξαναγράψιμο", "confirmations.redraft.message": "Σίγουρα θέλεις να σβήσεις αυτή την κατάσταση και να την ξαναγράψεις; Οι αναφορές και τα αγαπημένα της θα χαθούν ενώ οι απαντήσεις προς αυτή θα μείνουν ορφανές.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Απαντώντας τώρα θα αντικαταστήσεις το κείμενο που ήδη γράφεις. Σίγουρα θέλεις να συνεχίσεις;", "confirmations.unfollow.confirm": "Διακοπή παρακολούθησης", "confirmations.unfollow.message": "Σίγουρα θες να πάψεις να ακολουθείς τον/την {name};", + "conversation.delete": "Διαγραφή συζήτησης", + "conversation.mark_as_read": "Σήμανση ως αναγνωσμένο", + "conversation.open": "Προβολή συνομιλίας", + "conversation.with": "Με {names}", + "directory.federated": "Από το γνωστό fediverse", + "directory.local": "Μόνο από {domain}", + "directory.new_arrivals": "Νέες αφίξεις", + "directory.recently_active": "Πρόσφατα ενεργοί", "embed.instructions": "Ενσωματώστε αυτή την κατάσταση στην ιστοσελίδα σας αντιγράφοντας τον παρακάτω κώδικα.", "embed.preview": "Ορίστε πως θα φαίνεται:", "emoji_button.activity": "Δραστηριότητα", @@ -113,7 +131,7 @@ "emoji_button.objects": "Αντικείμενα", "emoji_button.people": "Άνθρωποι", "emoji_button.recent": "Δημοφιλή", - "emoji_button.search": "Αναζήτηση…", + "emoji_button.search": "Αναζήτηση...", "emoji_button.search_results": "Αποτελέσματα αναζήτησης", "emoji_button.symbols": "Σύμβολα", "emoji_button.travel": "Ταξίδια & Τοποθεσίες", @@ -134,6 +152,10 @@ "empty_column.mutes": "Δεν έχεις αποσιωπήσει κανένα χρήστη ακόμα.", "empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμα. Αλληλεπίδρασε με άλλους χρήστες για να ξεκινήσεις την κουβέντα.", "empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλους κόμβους για να τη γεμίσεις", + "error.unexpected_crash.explanation": "Είτε λόγω λάθους στον κώδικά μας ή λόγω ασυμβατότητας με τον browser, η σελίδα δε μπόρεσε να εμφανιστεί σωστά.", + "error.unexpected_crash.next_steps": "Δοκίμασε να ανανεώσεις τη σελίδα. Αν αυτό δε βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού browser ή κάποιας εφαρμογής.", + "errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο", + "errors.unexpected_crash.report_issue": "Αναφορά προβλήματος", "follow_request.authorize": "Ενέκρινε", "follow_request.reject": "Απέρριψε", "getting_started.developers": "Ανάπτυξη", @@ -149,11 +171,11 @@ "hashtag.column_header.tag_mode.none": "χωρίς {additional}", "hashtag.column_settings.select.no_options_message": "Δεν βρέθηκαν προτάσεις", "hashtag.column_settings.select.placeholder": "Γράψε μερικές ταμπέλες…", - "hashtag.column_settings.tag_mode.all": "Όλα αυτα", + "hashtag.column_settings.tag_mode.all": "Όλα αυτά", "hashtag.column_settings.tag_mode.any": "Οποιοδήποτε από αυτά", "hashtag.column_settings.tag_mode.none": "Κανένα από αυτά", "hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα", - "home.column_settings.basic": "Βασικά", + "home.column_settings.basic": "Βασικές ρυθμίσεις", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", "home.column_settings.show_replies": "Εμφάνιση απαντήσεων", "intervals.full.days": "{number, plural, one {# μέρα} other {# μέρες}}", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Τίτλος νέας λίστα", "lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς", "lists.subheading": "Οι λίστες σου", + "load_pending": "{count, plural, one {# νέο} other {# νέα}}", "loading_indicator.label": "Φορτώνει...", "media_gallery.toggle_visible": "Εναλλαγή ορατότητας", "missing_indicator.label": "Δε βρέθηκε", @@ -237,7 +260,7 @@ "navigation_bar.favourites": "Αγαπημένα", "navigation_bar.filters": "Αποσιωπημένες λέξεις", "navigation_bar.follow_requests": "Αιτήματα ακολούθησης", - "navigation_bar.follows_and_followers": "Ακολουθεί και ακολουθείται", + "navigation_bar.follows_and_followers": "Ακολουθείς και σε ακολουθούν", "navigation_bar.info": "Πληροφορίες κόμβου", "navigation_bar.keyboard_shortcuts": "Συντομεύσεις", "navigation_bar.lists": "Λίστες", @@ -246,13 +269,12 @@ "navigation_bar.personal": "Προσωπικά", "navigation_bar.pins": "Καρφιτσωμένα τουτ", "navigation_bar.preferences": "Προτιμήσεις", - "navigation_bar.profile_directory": "Κατάλογος λογαριασμών", "navigation_bar.public_timeline": "Ομοσπονδιακή ροή", "navigation_bar.security": "Ασφάλεια", "notification.favourite": "Ο/Η {name} σημείωσε ως αγαπημένη την κατάστασή σου", "notification.follow": "Ο/Η {name} σε ακολούθησε", "notification.mention": "Ο/Η {name} σε ανέφερε", - "notification.poll": "Έλαβε τέλος μια από τις ψηφοφορίες που συμμετείχες", + "notification.poll": "Τελείωσε μια από τις ψηφοφορίες που συμμετείχες", "notification.reblog": "Ο/Η {name} προώθησε την κατάστασή σου", "notifications.clear": "Καθαρισμός ειδοποιήσεων", "notifications.clear_confirmation": "Σίγουρα θέλεις να καθαρίσεις όλες τις ειδοποιήσεις σου;", @@ -277,8 +299,10 @@ "notifications.group": "{count} ειδοποιήσεις", "poll.closed": "Κλειστή", "poll.refresh": "Ανανέωση", + "poll.total_people": "{count, plural, one {# άτομο} other {# άτομα}}", "poll.total_votes": "{count, plural, one {# ψήφος} other {# ψήφοι}}", "poll.vote": "Ψήφισε", + "poll.voted": "Ψηφίσατε αυτήν την απάντηση", "poll_button.add_poll": "Προσθήκη δημοσκόπησης", "poll_button.remove_poll": "Αφαίρεση δημοσκόπησης", "privacy.change": "Προσαρμογή ιδιωτικότητας δημοσίευσης", @@ -290,6 +314,7 @@ "privacy.public.short": "Δημόσιο", "privacy.unlisted.long": "Μην δημοσιεύσεις στις δημόσιες ροές", "privacy.unlisted.short": "Μη καταχωρημένα", + "refresh": "Ανανέωση", "regeneration_indicator.label": "Φορτώνει…", "regeneration_indicator.sublabel": "Η αρχική σου ροή ετοιμάζεται!", "relative_time.days": "{number}η", @@ -314,6 +339,7 @@ "search_results.accounts": "Άνθρωποι", "search_results.hashtags": "Ταμπέλες", "search_results.statuses": "Τουτ", + "search_results.statuses_fts_disabled": "Η αναζήτηση τουτ βάσει του περιεχόμενού τους δεν είναι ενεργοποιημένη σε αυτό τον κόμβο.", "search_results.total": "{count, number} {count, plural, zero {αποτελέσματα} one {αποτέλεσμα} other {αποτελέσματα}}", "status.admin_account": "Άνοιγμα λειτουργίας διαμεσολάβησης για τον/την @{name}", "status.admin_status": "Άνοιγμα αυτής της δημοσίευσης στη λειτουργία διαμεσολάβησης", @@ -352,13 +378,14 @@ "status.show_more": "Δείξε περισσότερα", "status.show_more_all": "Δείξε περισσότερα για όλα", "status.show_thread": "Εμφάνιση νήματος", + "status.uncached_media_warning": "Μη διαθέσιμα", "status.unmute_conversation": "Διέκοψε την αποσιώπηση της συζήτησης", "status.unpin": "Ξεκαρφίτσωσε από το προφίλ", "suggestions.dismiss": "Απόρριψη πρότασης", "suggestions.header": "Ίσως να ενδιαφέρεσαι για…", "tabs_bar.federated_timeline": "Ομοσπονδιακή", "tabs_bar.home": "Αρχική", - "tabs_bar.local_timeline": "Τοπικά", + "tabs_bar.local_timeline": "Τοπική", "tabs_bar.notifications": "Ειδοποιήσεις", "tabs_bar.search": "Αναζήτηση", "time_remaining.days": "απομένουν {number, plural, one {# ημέρα} other {# ημέρες}}", @@ -367,14 +394,22 @@ "time_remaining.moments": "Απομένουν στιγμές", "time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} μιλάνε", + "trends.trending_now": "Δημοφιλή τώρα", "ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.", "upload_area.title": "Drag & drop για να ανεβάσεις", - "upload_button.label": "Πρόσθεσε πολυμέσα (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Πρόσθεσε πολυμέσα ({formats})", "upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.", "upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.", "upload_form.description": "Περιέγραψε για όσους & όσες έχουν προβλήματα όρασης", - "upload_form.focus": "Αλλαγή προεπισκόπησης", + "upload_form.edit": "Ενημέρωση", "upload_form.undo": "Διαγραφή", + "upload_modal.analyzing_picture": "Ανάλυση εικόνας…", + "upload_modal.apply": "Εφαρμογή", + "upload_modal.description_placeholder": "Λύκος μαύρος και ισχνός του πατέρα του καημός", + "upload_modal.detect_text": "Αναγνώριση κειμένου από την εικόνα", + "upload_modal.edit_media": "Επεξεργασία Πολυμέσων", + "upload_modal.hint": "Κάνε κλικ ή σείρε τον κύκλο στην προεπισκόπηση για να επιλέξεις το σημείο εστίασης που θα είναι πάντα εμφανές σε όλες τις μικρογραφίες.", + "upload_modal.preview_label": "Προεπισκόπηση ({ratio})", "upload_progress.label": "Ανεβαίνει...", "video.close": "Κλείσε το βίντεο", "video.exit_fullscreen": "Έξοδος από πλήρη οθόνη", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 49e4ddbda..84e40a9fc 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -4,6 +4,7 @@ "account.block": "Block @{name}", "account.block_domain": "Hide everything from {domain}", "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", @@ -15,6 +16,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Mute @{name}", "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "Toots", "account.posts_with_replies": "Toots and replies", "account.report": "Report @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", @@ -45,8 +51,10 @@ "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "Try again", "column.blocks": "Blocked users", + "column.bookmarks": "Bookmarks", "column.community": "Local timeline", "column.direct": "Direct messages", + "column.directory": "Browse profiles", "column.domain_blocks": "Hidden domains", "column.favourites": "Favourites", "column.follow_requests": "Follow requests", @@ -97,7 +105,10 @@ "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", @@ -105,6 +116,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Here is what it will look like:", "emoji_button.activity": "Activity", @@ -124,6 +143,7 @@ "empty_column.account_timeline": "No toots here!", "empty_column.account_unavailable": "Profile unavailable", "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", "empty_column.domain_blocks": "There are no hidden domains yet.", @@ -138,6 +158,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "getting_started.developers": "Developers", @@ -146,7 +170,7 @@ "getting_started.heading": "Getting started", "getting_started.invite": "Invite people", "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", - "getting_started.security": "Security", + "getting_started.security": "Account settings", "getting_started.terms": "Terms of service", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", @@ -201,6 +225,7 @@ "keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.reply": "to reply", @@ -225,6 +250,7 @@ "lists.new.title_placeholder": "New list title", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Not found", @@ -232,6 +258,7 @@ "mute_modal.hide_notifications": "Hide notifications from this user?", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", + "navigation_bar.bookmarks": "Bookmarks", "navigation_bar.community_timeline": "Local timeline", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", @@ -251,12 +278,13 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "Preferences", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", "notification.favourite": "{name} favourited your status", "notification.follow": "{name} followed you", + "notification.follow_request": "{name} has requested to follow you", "notification.mention": "{name} mentioned you", + "notification.own_poll": "Your poll has ended", "notification.poll": "A poll you have voted in has ended", "notification.reblog": "{name} boosted your status", "notifications.clear": "Clear notifications", @@ -267,6 +295,7 @@ "notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.filter_bar.show": "Show", "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.follow_request": "New follow requests:", "notifications.column_settings.mention": "Mentions:", "notifications.column_settings.poll": "Poll results:", "notifications.column_settings.push": "Push notifications", @@ -282,8 +311,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -295,6 +326,7 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Do not post to public timelines", "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -319,10 +351,12 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Block @{name}", + "status.bookmark": "Bookmark", "status.cancel_reblog_private": "Unboost", "status.cannot_reblog": "This post cannot be boosted", "status.copy": "Copy link to status", @@ -347,6 +381,7 @@ "status.reblogged_by": "{name} boosted", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.redraft": "Delete & re-draft", + "status.remove_bookmark": "Remove bookmark", "status.reply": "Reply", "status.replyAll": "Reply to thread", "status.report": "Report @{name}", @@ -357,6 +392,7 @@ "status.show_more": "Show more", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", @@ -372,16 +408,27 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Add media ({formats})", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", + "upload_form.audio_description": "Describe for people with hearing loss", "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Change preview", + "upload_form.edit": "Edit", "upload_form.undo": "Delete", + "upload_form.video_description": "Describe for people with hearing loss or visual impairment", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploading...", "video.close": "Close video", + "video.download": "Download file", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", "video.fullscreen": "Full screen", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 897cb6353..0070cdb5c 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -4,6 +4,7 @@ "account.block": "Bloki @{name}", "account.block_domain": "Kaŝi ĉion de {domain}", "account.blocked": "Blokita", + "account.cancel_follow_request": "Nuligi peton de sekvado", "account.direct": "Rekte mesaĝi @{name}", "account.domain_blocked": "Domajno kaŝita", "account.edit_profile": "Redakti profilon", @@ -15,14 +16,16 @@ "account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.", "account.follows_you": "Sekvas vin", "account.hide_reblogs": "Kaŝi diskonigojn de @{name}", + "account.last_status": "Laste aktiva", "account.link_verified_on": "La posedanto de tiu ligilo estis kontrolita je {date}", "account.locked_info": "La privateco de tiu konto estas elektita kiel fermita. La posedanto povas mane akcepti tiun, kiu povas sekvi rin.", "account.media": "Aŭdovidaĵoj", "account.mention": "Mencii @{name}", "account.moved_to": "{name} moviĝis al:", "account.mute": "Silentigi @{name}", - "account.mute_notifications": "Silentigi sciigojn el @{name}", + "account.mute_notifications": "Silentigi sciigojn de @{name}", "account.muted": "Silentigita", + "account.never_active": "Neniam", "account.posts": "Mesaĝoj", "account.posts_with_replies": "Kun respondoj", "account.report": "Signali @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Ne plu sekvi", "account.unmute": "Malsilentigi @{name}", "account.unmute_notifications": "Malsilentigi sciigojn de @{name}", + "alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.", + "alert.rate_limited.title": "Mesaĝkvante limigita", "alert.unexpected.message": "Neatendita eraro okazis.", "alert.unexpected.title": "Ups!", + "autosuggest_hashtag.per_week": "{count} semajne", "boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje", "bundle_column_error.body": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", "bundle_column_error.retry": "Bonvolu reprovi", @@ -47,6 +53,7 @@ "column.blocks": "Blokitaj uzantoj", "column.community": "Loka tempolinio", "column.direct": "Rektaj mesaĝoj", + "column.directory": "Trarigardi profilojn", "column.domain_blocks": "Kaŝitaj domajnoj", "column.favourites": "Stelumoj", "column.follow_requests": "Petoj de sekvado", @@ -71,20 +78,20 @@ "compose_form.lock_disclaimer": "Via konta ne estas {locked}. Iu ajn povas sekvi vin por vidi viajn mesaĝojn, kiuj estas nur por sekvantoj.", "compose_form.lock_disclaimer.lock": "ŝlosita", "compose_form.placeholder": "Pri kio vi pensas?", - "compose_form.poll.add_option": "Aldoni elekto", - "compose_form.poll.duration": "Balotenketo daŭro", - "compose_form.poll.option_placeholder": "elekto {number}", - "compose_form.poll.remove_option": "Forigi ĉi tiu elekton", + "compose_form.poll.add_option": "Aldoni elekteblon", + "compose_form.poll.duration": "Balotenketa daŭro", + "compose_form.poll.option_placeholder": "Elekteblo {number}", + "compose_form.poll.remove_option": "Forigi ĉi tiu elekteblon", "compose_form.publish": "Hup", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Marki aŭdovidaĵojn kiel tiklaj", + "compose_form.sensitive.hide": "Marki la aŭdovidaĵojn kiel tiklaj", "compose_form.sensitive.marked": "Aŭdovidaĵo markita tikla", "compose_form.sensitive.unmarked": "Aŭdovidaĵo ne markita tikla", "compose_form.spoiler.marked": "Teksto kaŝita malantaŭ averto", "compose_form.spoiler.unmarked": "Teksto ne kaŝita", "compose_form.spoiler_placeholder": "Skribu vian averton ĉi tie", "confirmation_modal.cancel": "Nuligi", - "confirmations.block.block_and_report": "Bloki & Signali", + "confirmations.block.block_and_report": "Bloki kaj signali", "confirmations.block.confirm": "Bloki", "confirmations.block.message": "Ĉu vi certas, ke vi volas bloki {name}?", "confirmations.delete.confirm": "Forigi", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", "confirmations.domain_block.confirm": "Kaŝi la tutan domajnon", "confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika tempolinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.", + "confirmations.logout.confirm": "Elsaluti", + "confirmations.logout.message": "Ĉu vi certas ke vi volas elsaluti?", "confirmations.mute.confirm": "Silentigi", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Ĉu vi certas, ke vi volas silentigi {name}?", "confirmations.redraft.confirm": "Forigi kaj reskribi", "confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi tiun mesaĝon kaj reskribi ĝin? Ĉiuj diskonigoj kaj stelumoj estos perditaj, kaj respondoj al la originala mesaĝo estos senparentaj.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Respondi nun anstataŭigos la mesaĝon, kiun vi nun skribas. Ĉu vi certas, ke vi volas daŭrigi?", "confirmations.unfollow.confirm": "Ne plu sekvi", "confirmations.unfollow.message": "Ĉu vi certas, ke vi volas ĉesi sekvi {name}?", + "conversation.delete": "Forigi konversacion", + "conversation.mark_as_read": "Marki legita", + "conversation.open": "Vidi konversacion", + "conversation.with": "Kun {names}", + "directory.federated": "El konata fediverso", + "directory.local": "Nur de {domain}", + "directory.new_arrivals": "Novaj alvenoj", + "directory.recently_active": "Lastatempe aktiva", "embed.instructions": "Enkorpigu ĉi tiun mesaĝon en vian retejon per kopio de la suba kodo.", "embed.preview": "Ĝi aperos tiel:", "emoji_button.activity": "Agadoj", @@ -134,6 +152,10 @@ "empty_column.mutes": "Vi ne ankoraŭ silentigis iun uzanton.", "empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.", "empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Raporti problemon", "follow_request.authorize": "Rajtigi", "follow_request.reject": "Rifuzi", "getting_started.developers": "Programistoj", @@ -152,7 +174,7 @@ "hashtag.column_settings.tag_mode.all": "Ĉiuj", "hashtag.column_settings.tag_mode.any": "Iu ajn", "hashtag.column_settings.tag_mode.none": "Neniu", - "hashtag.column_settings.tag_toggle": "Inkluzivi pluajn etikedojn por ĉi tiu kolumno", + "hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno", "home.column_settings.basic": "Bazaj agordoj", "home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_replies": "Montri respondojn", @@ -160,9 +182,9 @@ "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}", "introduction.federation.action": "Sekva", - "introduction.federation.federated.headline": "Federacio", + "introduction.federation.federated.headline": "Fratara", "introduction.federation.federated.text": "Publikaj mesaĝoj el aliaj serviloj de la Fediverse aperos en la fratara tempolinio.", - "introduction.federation.home.headline": "Heimo", + "introduction.federation.home.headline": "Hejmo", "introduction.federation.home.text": "Mesaĝoj de homoj, kiujn vi sekvas, aperos en via hejma fluo. Vi povas sekvi iun ajn de ajna servilo!", "introduction.federation.local.headline": "Loka", "introduction.federation.local.text": "Publikaj mesaĝoj de homoj de via servilo aperos en la loka tempolinio.", @@ -211,7 +233,7 @@ "lightbox.close": "Fermi", "lightbox.next": "Sekva", "lightbox.previous": "Antaŭa", - "lightbox.view_context": "Vidi kontekston", + "lightbox.view_context": "Vidi kuntekston", "lists.account.add": "Aldoni al la listo", "lists.account.remove": "Forigi de la listo", "lists.delete": "Forigi la liston", @@ -221,11 +243,12 @@ "lists.new.title_placeholder": "Titolo de la nova listo", "lists.search": "Serĉi inter la homoj, kiujn vi sekvas", "lists.subheading": "Viaj listoj", + "load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}", "loading_indicator.label": "Ŝargado…", "media_gallery.toggle_visible": "Baskuligi videblecon", "missing_indicator.label": "Ne trovita", "missing_indicator.sublabel": "Ĉi tiu elemento ne estis trovita", - "mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn el ĉi tiu uzanto?", + "mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn de ĉi tiu uzanto?", "navigation_bar.apps": "Telefonaj aplikaĵoj", "navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.community_timeline": "Loka tempolinio", @@ -246,13 +269,12 @@ "navigation_bar.personal": "Persone", "navigation_bar.pins": "Alpinglitaj mesaĝoj", "navigation_bar.preferences": "Preferoj", - "navigation_bar.profile_directory": "Profilujo", "navigation_bar.public_timeline": "Fratara tempolinio", "navigation_bar.security": "Sekureco", "notification.favourite": "{name} stelumis vian mesaĝon", "notification.follow": "{name} eksekvis vin", "notification.mention": "{name} menciis vin", - "notification.poll": "Balotenketo ke vi balotis estas finita", + "notification.poll": "Partoprenita balotenketo finiĝis", "notification.reblog": "{name} diskonigis vian mesaĝon", "notifications.clear": "Forviŝi sciigojn", "notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?", @@ -263,7 +285,7 @@ "notifications.column_settings.filter_bar.show": "Montri", "notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.mention": "Mencioj:", - "notifications.column_settings.poll": "Balotenketo rezulto:", + "notifications.column_settings.poll": "Balotenketaj rezultoj:", "notifications.column_settings.push": "Puŝsciigoj", "notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.show": "Montri en kolumno", @@ -273,12 +295,14 @@ "notifications.filter.favourites": "Stelumoj", "notifications.filter.follows": "Sekvoj", "notifications.filter.mentions": "Mencioj", - "notifications.filter.polls": "Balotenketoj rezultoj", + "notifications.filter.polls": "Balotenketaj rezultoj", "notifications.group": "{count} sciigoj", "poll.closed": "Finita", "poll.refresh": "Aktualigi", + "poll.total_people": "{count, plural, one {# homo} other {# homoj}}", "poll.total_votes": "{count, plural, one {# voĉdono} other {# voĉdonoj}}", "poll.vote": "Voĉdoni", + "poll.voted": "Vi elektis por ĉi tiu respondo", "poll_button.add_poll": "Aldoni balotenketon", "poll_button.remove_poll": "Forigi balotenketon", "privacy.change": "Agordi mesaĝan privatecon", @@ -290,6 +314,7 @@ "privacy.public.short": "Publika", "privacy.unlisted.long": "Ne afiŝi en publikaj tempolinioj", "privacy.unlisted.short": "Nelistigita", + "refresh": "Refreŝigu", "regeneration_indicator.label": "Ŝargado…", "regeneration_indicator.sublabel": "Via hejma fluo pretiĝas!", "relative_time.days": "{number}t", @@ -314,11 +339,12 @@ "search_results.accounts": "Homoj", "search_results.hashtags": "Kradvortoj", "search_results.statuses": "Mesaĝoj", + "search_results.statuses_fts_disabled": "Serĉi mesaĝojn laŭ enhavo ne estas ebligita en ĉi tiu Mastodon-servilo.", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezultoj}}", "status.admin_account": "Malfermi la kontrolan interfacon por @{name}", "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", "status.block": "Bloki @{name}", - "status.cancel_reblog_private": "Eksdiskonigi", + "status.cancel_reblog_private": "Ne plu diskonigi", "status.cannot_reblog": "Ĉi tiu mesaĝo ne diskonigeblas", "status.copy": "Kopii la ligilon al la mesaĝo", "status.delete": "Forigi", @@ -352,6 +378,7 @@ "status.show_more": "Grandigi", "status.show_more_all": "Grandigi ĉiujn", "status.show_thread": "Montri la fadenon", + "status.uncached_media_warning": "Nedisponebla", "status.unmute_conversation": "Malsilentigi la konversacion", "status.unpin": "Depingli de profilo", "suggestions.dismiss": "Forigi la proponon", @@ -361,26 +388,34 @@ "tabs_bar.local_timeline": "Loka tempolinio", "tabs_bar.notifications": "Sciigoj", "tabs_bar.search": "Serĉi", - "time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restanta", - "time_remaining.hours": "{number, plural, one {# horo} other {# horoj}} restanta", - "time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restanta", - "time_remaining.moments": "Momento restanta", - "time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restanta", + "time_remaining.days": "{number, plural, one {# tago} other {# tagoj}} restas", + "time_remaining.hours": "{number, plural, one {# horo} other {# horoj}} restas", + "time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restas", + "time_remaining.moments": "Momenteto restas", + "time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restas", "trends.count_by_accounts": "{count} {rawCount, plural, one {persono} other {personoj}} parolas", + "trends.trending_now": "Nunaj furoraĵoj", "ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.", "upload_area.title": "Altreni kaj lasi por alŝuti", "upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Limo de dosiera alŝutado transpasita.", - "upload_error.poll": "Alŝuto de dosiero ne permisita kun balotenketo", + "upload_error.poll": "Alŝuto de dosiero ne permesita kun balotenketo.", "upload_form.description": "Priskribi por misvidantaj homoj", - "upload_form.focus": "Antaŭvido de ŝanĝo", + "upload_form.edit": "Redakti", "upload_form.undo": "Forigi", + "upload_modal.analyzing_picture": "Bilda analizado…", + "upload_modal.apply": "Apliki", + "upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj", + "upload_modal.detect_text": "Detekti tekston de la bildo", + "upload_modal.edit_media": "Redakti aŭdovidaĵon", + "upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.", + "upload_modal.preview_label": "Antaŭvido ({ratio})", "upload_progress.label": "Alŝutado…", - "video.close": "Fermi videon", + "video.close": "Fermi la videon", "video.exit_fullscreen": "Eksigi plenekrana", - "video.expand": "Grandigi videon", + "video.expand": "Grandigi la videon", "video.fullscreen": "Igi plenekrana", - "video.hide": "Kaŝi videon", + "video.hide": "Kaŝi la videon", "video.mute": "Silentigi", "video.pause": "Paŭzi", "video.play": "Ekigi", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json new file mode 100644 index 000000000..56f8781a1 --- /dev/null +++ b/app/javascript/mastodon/locales/es-AR.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "Agregar o quitar de las listas", + "account.badges.bot": "Bot", + "account.block": "Bloquear a @{name}", + "account.block_domain": "Ocultar todo de {domain}", + "account.blocked": "Bloqueado", + "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", + "account.direct": "Mensaje directo a @{name}", + "account.domain_blocked": "Dominio oculto", + "account.edit_profile": "Editar perfil", + "account.endorse": "Destacar en el perfil", + "account.follow": "Seguir", + "account.followers": "Seguidores", + "account.followers.empty": "Todavía nadie sigue a este usuario.", + "account.follows": "Sigue", + "account.follows.empty": "Todavía este usuario no sigue a nadie.", + "account.follows_you": "Te sigue", + "account.hide_reblogs": "Ocultar retoots de @{name}", + "account.last_status": "Última actividad", + "account.link_verified_on": "La propiedad de este enlace fue verificada el {date}", + "account.locked_info": "El estado de privacidad de esta cuenta está establecido como bloqueado. El propietario manualmente revisa quién puede seguirle.", + "account.media": "Medios", + "account.mention": "Mencionar a @{name}", + "account.moved_to": "{name} se ha muó a:", + "account.mute": "Silenciar a @{name}", + "account.mute_notifications": "Silenciar notificaciones de @{name}", + "account.muted": "Silenciado", + "account.never_active": "Nunca", + "account.posts": "Toots", + "account.posts_with_replies": "Toots con respuestas", + "account.report": "Denunciar a @{name}", + "account.requested": "Esperando aprobación. Hacé clic para cancelar la solicitud de seguimiento.", + "account.share": "Compartir el perfil de @{name}", + "account.show_reblogs": "Mostrar retoots de @{name}", + "account.unblock": "Desbloquear a @{name}", + "account.unblock_domain": "Mostrar {domain}", + "account.unendorse": "No destacar en el perfil", + "account.unfollow": "Dejar de seguir", + "account.unmute": "Dejar de silenciar a @{name}", + "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", + "alert.rate_limited.message": "Por favor, reintentá después de las {retry_time, time, medium}.", + "alert.rate_limited.title": "Tarifa limitada", + "alert.unexpected.message": "Ocurrió un error.", + "alert.unexpected.title": "¡Epa!", + "autosuggest_hashtag.per_week": "{count} por semana", + "boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez", + "bundle_column_error.body": "Algo salió mal al cargar este componente.", + "bundle_column_error.retry": "Intentá de nuevo", + "bundle_column_error.title": "Error de red", + "bundle_modal_error.close": "Cerrar", + "bundle_modal_error.message": "Algo salió mal al cargar este componente.", + "bundle_modal_error.retry": "Intentá de nuevo", + "column.blocks": "Usuarios bloqueados", + "column.community": "Línea temporal local", + "column.direct": "Mensajes directos", + "column.directory": "Explorar perfiles", + "column.domain_blocks": "Dominios ocultos", + "column.favourites": "Favoritos", + "column.follow_requests": "Solicitudes de seguimiento", + "column.home": "Principal", + "column.lists": "Listas", + "column.mutes": "Usuarios silenciados", + "column.notifications": "Notificaciones", + "column.pins": "Toots fijados", + "column.public": "Línea temporal federada", + "column_back_button.label": "Volver", + "column_header.hide_settings": "Ocultar configuración", + "column_header.moveLeft_settings": "Mover columna a la izquierda", + "column_header.moveRight_settings": "Mover columna a la derecha", + "column_header.pin": "Fijar", + "column_header.show_settings": "Mostrar configuración", + "column_header.unpin": "Dejar de fijar", + "column_subheading.settings": "Configuración", + "community.column_settings.media_only": "Sólo medios", + "compose_form.direct_message_warning": "Este toot sólo será enviado a los usuarios mencionados.", + "compose_form.direct_message_warning_learn_more": "Aprendé más", + "compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.", + "compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus toots marcados como \"sólo para seguidores\".", + "compose_form.lock_disclaimer.lock": "bloqueada", + "compose_form.placeholder": "¿Qué onda?", + "compose_form.poll.add_option": "Agregá una opción", + "compose_form.poll.duration": "Duración de la encuesta", + "compose_form.poll.option_placeholder": "Opción {number}", + "compose_form.poll.remove_option": "Quitá esta opción", + "compose_form.publish": "Tootear", + "compose_form.publish_loud": "¡{publish}!", + "compose_form.sensitive.hide": "Marcar medio como sensible", + "compose_form.sensitive.marked": "El medio se marcó como sensible", + "compose_form.sensitive.unmarked": "El medio no está marcado como sensible", + "compose_form.spoiler.marked": "El texto está oculto detrás de la advertencia", + "compose_form.spoiler.unmarked": "El texto no está oculto", + "compose_form.spoiler_placeholder": "Escribí tu advertencia acá", + "confirmation_modal.cancel": "Cancelar", + "confirmations.block.block_and_report": "Bloquear y denunciar", + "confirmations.block.confirm": "Bloquear", + "confirmations.block.message": "¿Estás seguro que querés bloquear a {name}?", + "confirmations.delete.confirm": "Eliminar", + "confirmations.delete.message": "¿Estás seguro que querés eliminar este estado?", + "confirmations.delete_list.confirm": "Eliminar", + "confirmations.delete_list.message": "¿Estás seguro que querés eliminar permanentemente esta lista?", + "confirmations.domain_block.confirm": "Ocultar dominio entero", + "confirmations.domain_block.message": "¿Estás completamente seguro que querés bloquear el {domain} entero? En la mayoría de los casos, unos cuantos bloqueos y silenciados puntuales son suficientes y preferibles. No vas a ver contenido de ese dominio en ninguna de tus líneas temporales o en tus notificaciones. Tus seguidores de ese dominio serán quitados.", + "confirmations.logout.confirm": "Cerrar sesión", + "confirmations.logout.message": "¿Estás seguro que querés cerrar la sesión?", + "confirmations.mute.confirm": "Silenciar", + "confirmations.mute.explanation": "Se ocultarán los mensajes de esta cuenta y los mensajes de otras cuentas que mencionen a ésta, pero todavía esta cuenta podrá ver tus mensajes o seguirte.", + "confirmations.mute.message": "¿Estás seguro que querés silenciar a {name}?", + "confirmations.redraft.confirm": "Eliminar toot original y editarlo", + "confirmations.redraft.message": "¿Estás seguro que querés eliminar este estado y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.", + "confirmations.reply.confirm": "Responder", + "confirmations.reply.message": "Responder ahora sobreescribirá el mensaje que estás redactando actualmente. ¿Estás seguro que querés seguir?", + "confirmations.unfollow.confirm": "Dejar de seguir", + "confirmations.unfollow.message": "¿Estás seguro que querés dejar de seguir a {name}?", + "conversation.delete": "Eliminar conversación", + "conversation.mark_as_read": "Marcar como leído", + "conversation.open": "Ver conversación", + "conversation.with": "Con {names}", + "directory.federated": "Desde fediverso conocido", + "directory.local": "Sólo de {domain}", + "directory.new_arrivals": "Recién llegados", + "directory.recently_active": "Recientemente activo", + "embed.instructions": "Insertá este toot a tu sitio web copiando el código de abajo.", + "embed.preview": "Así es cómo se verá:", + "emoji_button.activity": "Actividad", + "emoji_button.custom": "Personalizado", + "emoji_button.flags": "Banderas", + "emoji_button.food": "Comida y bebida", + "emoji_button.label": "Insertar emoji", + "emoji_button.nature": "Naturaleza", + "emoji_button.not_found": "¡¡No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objetos", + "emoji_button.people": "Gente", + "emoji_button.recent": "Usados frecuentemente", + "emoji_button.search": "Buscar…", + "emoji_button.search_results": "Resultados de búsqueda", + "emoji_button.symbols": "Símbolos", + "emoji_button.travel": "Viajes y lugares", + "empty_column.account_timeline": "¡No hay toots aquí!", + "empty_column.account_unavailable": "Perfil no disponible", + "empty_column.blocks": "Todavía no bloqueaste a ningún usuario.", + "empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!", + "empty_column.direct": "Todavía no tenés ningún mensaje directo. Cuando enviés o recibás uno, se mostrará acá.", + "empty_column.domain_blocks": "Todavía no hay dominios ocultos.", + "empty_column.favourited_statuses": "Todavía no tenés toots favoritos. Cuando marqués uno como favorito, se mostrará acá.", + "empty_column.favourites": "Todavía nadie marcó este toot como favorito. Cuando alguien lo haga, se mostrará acá.", + "empty_column.follow_requests": "Todavía no tenés ninguna solicitud de seguimiento. Cuando recibás una, se mostrará acá.", + "empty_column.hashtag": "Todavía no hay nada con esta etiqueta.", + "empty_column.home": "¡Tu línea temporal principal está vacía! Visitá {public} o usá la búsqueda para comenzar y encontrar a otros usuarios.", + "empty_column.home.public_timeline": "la línea temporal pública", + "empty_column.list": "Todavía no hay nada en esta lista. Cuando miembros de esta lista envíen nuevos toots, se mostrarán acá.", + "empty_column.lists": "Todavía no tienes ninguna lista. Cuando creés una, se mostrará acá.", + "empty_column.mutes": "Todavía no silenciaste a ningún usuario.", + "empty_column.notifications": "Todavía no tenés ninguna notificación. Interactuá con otros para iniciar la conversación.", + "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal.", + "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador web, esta página no se pudo mostrar correctamente.", + "error.unexpected_crash.next_steps": "Intentá recargar la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.", + "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles", + "errors.unexpected_crash.report_issue": "Informar problema", + "follow_request.authorize": "Autorizar", + "follow_request.reject": "Rechazar", + "getting_started.developers": "Desarrolladores", + "getting_started.directory": "Directorio de perfiles", + "getting_started.documentation": "Documentación", + "getting_started.heading": "Introducción", + "getting_started.invite": "Invitar usuarios", + "getting_started.open_source_notice": "Mastodon es software libre. Podés contribuir o informar errores en {github}.", + "getting_started.security": "Seguridad", + "getting_started.terms": "Términos del servicio", + "hashtag.column_header.tag_mode.all": "y {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "sin {additional}", + "hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias", + "hashtag.column_settings.select.placeholder": "Introducí etiquetas…", + "hashtag.column_settings.tag_mode.all": "Todas estas", + "hashtag.column_settings.tag_mode.any": "Cualquiera de estas", + "hashtag.column_settings.tag_mode.none": "Ninguna de estas", + "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales para esta columna", + "home.column_settings.basic": "Básico", + "home.column_settings.show_reblogs": "Mostrar retoots", + "home.column_settings.show_replies": "Mostrar respuestas", + "intervals.full.days": "{number, plural, one {# día} other {# días}}", + "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", + "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", + "introduction.federation.action": "Siguiente", + "introduction.federation.federated.headline": "Federado", + "introduction.federation.federated.text": "Los toots públicos de otros servidores del fediverso aparecerán en la línea temporal federada.", + "introduction.federation.home.headline": "Principal", + "introduction.federation.home.text": "Los toots de las personas que seguíss aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Los toots públicos de las personas en el mismo servidor aparecerán en la línea temporal local.", + "introduction.interactions.action": "¡Terminar tutorial!", + "introduction.interactions.favourite.headline": "Favorito", + "introduction.interactions.favourite.text": "Podés guardar un toot para más tarde, y hacerle saber al autor que te gustó, marcándolo como favorito.", + "introduction.interactions.reblog.headline": "Retootear", + "introduction.interactions.reblog.text": "Podés compartir los toots de otras personas con tus seguidores retooteando los mismos.", + "introduction.interactions.reply.headline": "Responder", + "introduction.interactions.reply.text": "Podés responder a tus propios toots y los de otras personas, que se encadenarán juntos en una conversación.", + "introduction.welcome.action": "¡Dale!", + "introduction.welcome.headline": "Primeros pasos", + "introduction.welcome.text": "¡Bienvenido al fediverso! En unos pocos minutos, vas a poder transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial: aloja tu perfil, así que acordate de su nombre.", + "keyboard_shortcuts.back": "para volver", + "keyboard_shortcuts.blocked": "para abrir la lista de usuarios bloqueados", + "keyboard_shortcuts.boost": "para retootear", + "keyboard_shortcuts.column": "para enfocar un estado en una de las columnas", + "keyboard_shortcuts.compose": "para enfocar el área de texto de redacción", + "keyboard_shortcuts.description": "Descripción", + "keyboard_shortcuts.direct": "para abrir columna de mensajes directos", + "keyboard_shortcuts.down": "para bajar en la lista", + "keyboard_shortcuts.enter": "para abrir el estado", + "keyboard_shortcuts.favourite": "para marcar como favorito", + "keyboard_shortcuts.favourites": "para abrir la lista de favoritos", + "keyboard_shortcuts.federated": "para abrir la línea temporal federada", + "keyboard_shortcuts.heading": "Atajos de teclado", + "keyboard_shortcuts.home": "para abrir la línea temporal principal", + "keyboard_shortcuts.hotkey": "Combinación", + "keyboard_shortcuts.legend": "para mostrar este texto", + "keyboard_shortcuts.local": "para abrir la línea temporal local", + "keyboard_shortcuts.mention": "para mencionar al autor", + "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", + "keyboard_shortcuts.my_profile": "para abrir tu perfil", + "keyboard_shortcuts.notifications": "para abrir la columna de notificaciones", + "keyboard_shortcuts.pinned": "para abrir lista de toots fijados", + "keyboard_shortcuts.profile": "para abrir el perfil del autor", + "keyboard_shortcuts.reply": "para responder", + "keyboard_shortcuts.requests": "para abrir la lista de solicitudes de seguimiento", + "keyboard_shortcuts.search": "para enfocar la búsqueda", + "keyboard_shortcuts.start": "para abrir la columna \"Introducción\"", + "keyboard_shortcuts.toggle_hidden": "para mostrar/ocultar el texto detrás de la advertencia de contenido", + "keyboard_shortcuts.toggle_sensitivity": "para mostrar/ocultar los medios", + "keyboard_shortcuts.toot": "para comenzar un toot nuevo", + "keyboard_shortcuts.unfocus": "para quitar el enfoque del área de texto de redacción o de búsqueda", + "keyboard_shortcuts.up": "para subir en la lista", + "lightbox.close": "Cerrar", + "lightbox.next": "Siguiente", + "lightbox.previous": "Anterior", + "lightbox.view_context": "Ver contexto", + "lists.account.add": "Agregar a lista", + "lists.account.remove": "Quitar de lista", + "lists.delete": "Eliminar lista", + "lists.edit": "Editar lista", + "lists.edit.submit": "Cambiar título", + "lists.new.create": "Agregar lista", + "lists.new.title_placeholder": "Nuevo título de lista", + "lists.search": "Buscar entre la gente que seguís", + "lists.subheading": "Tus listas", + "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", + "loading_indicator.label": "Cargando…", + "media_gallery.toggle_visible": "Cambiar visibilidad", + "missing_indicator.label": "No se encontró", + "missing_indicator.sublabel": "No se encontró este recurso", + "mute_modal.hide_notifications": "¿Querés ocultar las notificaciones de este usuario?", + "navigation_bar.apps": "Aplicaciones móviles", + "navigation_bar.blocks": "Usuarios bloqueados", + "navigation_bar.community_timeline": "Línea temporal local", + "navigation_bar.compose": "Redactar un nuevo toot", + "navigation_bar.direct": "Mensajes directos", + "navigation_bar.discover": "Descubrir", + "navigation_bar.domain_blocks": "Dominios ocultos", + "navigation_bar.edit_profile": "Editar perfil", + "navigation_bar.favourites": "Favoritos", + "navigation_bar.filters": "Palabras silenciadas", + "navigation_bar.follow_requests": "Solicitudes de seguimiento", + "navigation_bar.follows_and_followers": "Personas seguidas y seguidores", + "navigation_bar.info": "Acerca de este servidor", + "navigation_bar.keyboard_shortcuts": "Atajos", + "navigation_bar.lists": "Listas", + "navigation_bar.logout": "Cerrar sesión", + "navigation_bar.mutes": "Usuarios silenciados", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Toots fijados", + "navigation_bar.preferences": "Configuración", + "navigation_bar.public_timeline": "Línea temporal federada", + "navigation_bar.security": "Seguridad", + "notification.favourite": "{name} marcó tu estado como favorito", + "notification.follow": "{name} te empezó a seguir", + "notification.mention": "{name} te mencionó", + "notification.poll": "Finalizó una encuesta en la que votaste", + "notification.reblog": "{name} retooteó tu estado", + "notifications.clear": "Limpiar notificaciones", + "notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?", + "notifications.column_settings.alert": "Notificaciones de escritorio", + "notifications.column_settings.favourite": "Favoritos:", + "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", + "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", + "notifications.column_settings.filter_bar.show": "Mostrar", + "notifications.column_settings.follow": "Nuevos seguidores:", + "notifications.column_settings.mention": "Menciones:", + "notifications.column_settings.poll": "Resultados de la encuesta:", + "notifications.column_settings.push": "Notificaciones push", + "notifications.column_settings.reblog": "Retoots:", + "notifications.column_settings.show": "Mostrar en columna", + "notifications.column_settings.sound": "Reproducir sonido", + "notifications.filter.all": "Todas", + "notifications.filter.boosts": "Retoots", + "notifications.filter.favourites": "Favoritos", + "notifications.filter.follows": "Seguidores", + "notifications.filter.mentions": "Menciones", + "notifications.filter.polls": "Resultados de la encuesta", + "notifications.group": "{count} notificaciones", + "poll.closed": "Cerrada", + "poll.refresh": "Refrescar", + "poll.total_people": "{count, plural, one {# persona} other {# personas}}", + "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", + "poll.vote": "Votar", + "poll.voted": "Votaste esta opción", + "poll_button.add_poll": "Agregar una encuesta", + "poll_button.remove_poll": "Quitar encuesta", + "privacy.change": "Configurar privacidad de estado", + "privacy.direct.long": "Enviar toot sólo a los usuarios mencionados", + "privacy.direct.short": "Directo", + "privacy.private.long": "Enviar toot sólo a los seguidores", + "privacy.private.short": "Sólo a seguidores", + "privacy.public.long": "Enviar toot a las líneas temporales públicas", + "privacy.public.short": "Público", + "privacy.unlisted.long": "No enviar toot a las líneas temporales públicas", + "privacy.unlisted.short": "No listado", + "refresh": "Refrescar", + "regeneration_indicator.label": "Cargando…", + "regeneration_indicator.sublabel": "¡Se está preparando tu línea temporal principal!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "recién", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancelar", + "report.forward": "Reenviar a {target}", + "report.forward_hint": "La cuenta es de otro servidor. ¿Querés enviar una copia anonimizada del informe también ahí?", + "report.hint": "La denuncia se enviará a los moderadores de tu servidor. Podés proporcionar una explicación de por qué estás denunciando esta cuenta, a continuación:", + "report.placeholder": "Comentarios adicionales", + "report.submit": "Enviar", + "report.target": "Denunciando a {target}", + "search.placeholder": "Buscar", + "search_popout.search_format": "Formato de búsqueda avanzada", + "search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los estados que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres usuarios, nombres mostrados y etiquetas.", + "search_popout.tips.hashtag": "etiqueta", + "search_popout.tips.status": "estado", + "search_popout.tips.text": "Las búsquedas de texto simple devuelven nombres de usuarios, nombres mostrados y etiquetas que coincidan", + "search_popout.tips.user": "usuario", + "search_results.accounts": "Gente", + "search_results.hashtags": "Etiquetas", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "No se puede buscar toots por contenido en este servidor de Mastodon.", + "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", + "status.admin_account": "Abrir interface de moderación para @{name}", + "status.admin_status": "Abrir este estado en la interface de moderación", + "status.block": "Bloquear a @{name}", + "status.cancel_reblog_private": "Quitar retoot", + "status.cannot_reblog": "No se puede retootear este toot", + "status.copy": "Copiar enlace al estado", + "status.delete": "Eliminar", + "status.detailed_status": "Vista de conversación detallada", + "status.direct": "Mensaje directo a @{name}", + "status.embed": "Insertar", + "status.favourite": "Favorito", + "status.filtered": "Filtrado", + "status.load_more": "Cargar más", + "status.media_hidden": "Medios ocultos", + "status.mention": "Mencionar a @{name}", + "status.more": "Más", + "status.mute": "Silenciar a @{name}", + "status.mute_conversation": "Silenciar conversación", + "status.open": "Expandir este estado", + "status.pin": "Pin en el perfil", + "status.pinned": "Toot fijado", + "status.read_more": "Leer más", + "status.reblog": "Retootear", + "status.reblog_private": "Retootear a la audiencia original", + "status.reblogged_by": "{name} retooteó", + "status.reblogs.empty": "Todavía nadie retooteó este toot. Cuando alguien lo haga, se mostrará acá.", + "status.redraft": "Eliminar toot original y editarlo", + "status.reply": "Responder", + "status.replyAll": "Responder al hilo", + "status.report": "Denunciar a @{name}", + "status.sensitive_warning": "Contenido sensible", + "status.share": "Compartir", + "status.show_less": "Mostrar menos", + "status.show_less_all": "Mostrar menos para todo", + "status.show_more": "Mostrar más", + "status.show_more_all": "Mostrar más para todo", + "status.show_thread": "Mostrar hilo", + "status.uncached_media_warning": "No disponible", + "status.unmute_conversation": "Dejar de silenciar conversación", + "status.unpin": "Desmarcar del perfil", + "suggestions.dismiss": "Descartar sugerencia", + "suggestions.header": "Es posible que te interese…", + "tabs_bar.federated_timeline": "Federado", + "tabs_bar.home": "Principal", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notificaciones", + "tabs_bar.search": "Buscar", + "time_remaining.days": "{number, plural,one {queda # día} other {quedan # días}}", + "time_remaining.hours": "{number, plural,one {queda # hora} other {quedan # horas}}", + "time_remaining.minutes": "{number, plural,one {queda # minuto} other {quedan # minutos}}", + "time_remaining.moments": "Momentos restantes", + "time_remaining.seconds": "{number, plural,one {queda # segundo} other {quedan # segundos}}", + "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {personas}} hablando", + "trends.trending_now": "Tendencia ahora", + "ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.", + "upload_area.title": "Para subir, arrastrá y soltá", + "upload_button.label": "Agregar medios ({formats})", + "upload_error.limit": "Se excedió el límite de subida de archivos.", + "upload_error.poll": "No se permite la subida de archivos en encuestas.", + "upload_form.description": "Agregar descripción para los usuarios con dificultades visuales", + "upload_form.edit": "Editar", + "upload_form.undo": "Eliminar", + "upload_modal.analyzing_picture": "Analizando imagen…", + "upload_modal.apply": "Aplicar", + "upload_modal.description_placeholder": "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja.", + "upload_modal.detect_text": "Detectar texto de la imagen", + "upload_modal.edit_media": "Editar medio", + "upload_modal.hint": "Hacé clic o arrastrá el círculo en la previsualización para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", + "upload_modal.preview_label": "Previsualización ({ratio})", + "upload_progress.label": "Subiendo…", + "video.close": "Cerrar video", + "video.exit_fullscreen": "Salir de pantalla completa", + "video.expand": "Expandir vídeo", + "video.fullscreen": "Pantalla completa", + "video.hide": "Ocultar video", + "video.mute": "Silenciar sonido", + "video.pause": "Pausar", + "video.play": "Reproducir", + "video.unmute": "Dejar de silenciar sonido" +} diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index fc9e7bb16..c213a03e1 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -1,28 +1,31 @@ { - "account.add_or_remove_from_list": "Agregar o eliminar de las listas", + "account.add_or_remove_from_list": "Agregar o eliminar de listas", "account.badges.bot": "Bot", - "account.block": "Bloquear", + "account.block": "Bloquear a @{name}", "account.block_domain": "Ocultar todo de {domain}", "account.blocked": "Bloqueado", - "account.direct": "Direct Message @{name}", + "account.cancel_follow_request": "Cancelar la solicitud de seguimiento", + "account.direct": "Mensaje directo a @{name}", "account.domain_blocked": "Dominio oculto", "account.edit_profile": "Editar perfil", "account.endorse": "Mostrar en perfil", "account.follow": "Seguir", "account.followers": "Seguidores", - "account.followers.empty": "Nadie sigue a este usuario todavía.", + "account.followers.empty": "Todavía nadie sigue a este usuario.", "account.follows": "Sigue", "account.follows.empty": "Este usuario todavía no sigue a nadie.", "account.follows_you": "Te sigue", "account.hide_reblogs": "Ocultar retoots de @{name}", - "account.link_verified_on": "El proprietario de este link fue verificado el {date}", + "account.last_status": "Última actividad", + "account.link_verified_on": "El proprietario de este link fue comprobado el {date}", "account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", - "account.media": "Media", + "account.media": "Multimedia", "account.mention": "Mencionar a @{name}", "account.moved_to": "{name} se ha mudado a:", "account.mute": "Silenciar a @{name}", "account.mute_notifications": "Silenciar notificaciones de @{name}", "account.muted": "Silenciado", + "account.never_active": "Nunca", "account.posts": "Toots", "account.posts_with_replies": "Toots con respuestas", "account.report": "Reportar a @{name}", @@ -35,9 +38,12 @@ "account.unfollow": "Dejar de seguir", "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}", + "alert.rate_limited.message": "Por favor reintente después de {retry_time, time, medium}.", + "alert.rate_limited.title": "Tarifa limitada", "alert.unexpected.message": "Hubo un error inesperado.", - "alert.unexpected.title": "Oops!", - "boost_modal.combo": "Puedes presionar {combo} para saltear este aviso la próxima vez", + "alert.unexpected.title": "¡Ups!", + "autosuggest_hashtag.per_week": "{count} por semana", + "boost_modal.combo": "Puedes hacer clic en {combo} para saltar este aviso la próxima vez", "bundle_column_error.body": "Algo salió mal al cargar este componente.", "bundle_column_error.retry": "Inténtalo de nuevo", "bundle_column_error.title": "Error de red", @@ -47,17 +53,18 @@ "column.blocks": "Usuarios bloqueados", "column.community": "Línea de tiempo local", "column.direct": "Mensajes directos", - "column.domain_blocks": "Dominios ocultos", + "column.directory": "Buscar perfiles", + "column.domain_blocks": "Dominios ocultados", "column.favourites": "Favoritos", "column.follow_requests": "Solicitudes de seguimiento", "column.home": "Inicio", "column.lists": "Listas", "column.mutes": "Usuarios silenciados", "column.notifications": "Notificaciones", - "column.pins": "Toot fijado", - "column.public": "Historia federada", + "column.pins": "Toots fijados", + "column.public": "Línea de tiempo federada", "column_back_button.label": "Atrás", - "column_header.hide_settings": "Ocultar ajustes", + "column_header.hide_settings": "Ocultar configuración", "column_header.moveLeft_settings": "Mover columna a la izquierda", "column_header.moveRight_settings": "Mover columna a la derecha", "column_header.pin": "Fijar", @@ -71,36 +78,47 @@ "compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.", "compose_form.lock_disclaimer.lock": "bloqueado", "compose_form.placeholder": "¿En qué estás pensando?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Añadir una opción", + "compose_form.poll.duration": "Duración de la encuesta", + "compose_form.poll.option_placeholder": "Elección {number}", + "compose_form.poll.remove_option": "Eliminar esta opción", "compose_form.publish": "Tootear", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Marcar multimedia como sensible", "compose_form.sensitive.marked": "Material marcado como sensible", "compose_form.sensitive.unmarked": "Material no marcado como sensible", "compose_form.spoiler.marked": "Texto oculto tras la advertencia", "compose_form.spoiler.unmarked": "Texto no oculto", "compose_form.spoiler_placeholder": "Advertencia de contenido", "confirmation_modal.cancel": "Cancelar", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Bloquear y Reportar", "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "¿Estás seguro de que quieres bloquear a {name}?", "confirmations.delete.confirm": "Eliminar", "confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "Eliminar", "confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?", "confirmations.domain_block.confirm": "Ocultar dominio entero", "confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.", + "confirmations.logout.confirm": "Cerrar sesión", + "confirmations.logout.message": "¿Estás seguro de querer cerrar la sesión?", "confirmations.mute.confirm": "Silenciar", + "confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.", "confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?", "confirmations.redraft.confirm": "Borrar y volver a borrador", "confirmations.redraft.message": "Estás seguro de que quieres borrar este estado y volverlo a borrador? Perderás todas las respuestas, impulsos y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanos.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.confirm": "Responder", + "confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?", "confirmations.unfollow.confirm": "Dejar de seguir", "confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?", + "conversation.delete": "Borrar conversación", + "conversation.mark_as_read": "Marcar como leído", + "conversation.open": "Ver conversación", + "conversation.with": "Con {names}", + "directory.federated": "Desde el fediverso conocido", + "directory.local": "Sólo de {domain}", + "directory.new_arrivals": "Recién llegados", + "directory.recently_active": "Recientemente activo", "embed.instructions": "Añade este toot a tu sitio web con el siguiente código.", "embed.preview": "Así es como se verá:", "emoji_button.activity": "Actividad", @@ -117,8 +135,8 @@ "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_timeline": "¡No hay toots aquí!", + "empty_column.account_unavailable": "Perfil no disponible", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.", "empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!", "empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.", @@ -134,57 +152,61 @@ "empty_column.mutes": "Aún no has silenciado a ningún usuario.", "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", + "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", + "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.", + "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", + "errors.unexpected_crash.report_issue": "Informar de un problema/error", "follow_request.authorize": "Autorizar", "follow_request.reject": "Rechazar", "getting_started.developers": "Desarrolladores", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", + "getting_started.directory": "Directorio de perfil", + "getting_started.documentation": "Documentación", "getting_started.heading": "Primeros pasos", "getting_started.invite": "Invitar usuarios", "getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.", "getting_started.security": "Seguridad", "getting_started.terms": "Términos de servicio", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_header.tag_mode.all": "y {additional}", + "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_header.tag_mode.none": "sin {additional}", + "hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias", + "hashtag.column_settings.select.placeholder": "Introduzca hashtags…", + "hashtag.column_settings.tag_mode.all": "Cualquiera de estos", + "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", + "hashtag.column_settings.tag_mode.none": "Ninguno de estos", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "intervals.full.days": "{number, plural, one {# día} other {# días}}", + "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", + "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", + "introduction.federation.action": "Siguiente", + "introduction.federation.federated.headline": "Federado", + "introduction.federation.federated.text": "Los mensajes públicos de otros servidores del fediverso aparecerán en la cronología federada.", + "introduction.federation.home.headline": "Inicio", + "introduction.federation.home.text": "Los posts de personas que sigues aparecerán en tu cronología. ¡Puedes seguir a cualquiera en cualquier servidor!", "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "introduction.federation.local.text": "Los posts públicos de personas en el mismo servidor que aparecerán en la cronología local.", + "introduction.interactions.action": "¡Terminar tutorial!", + "introduction.interactions.favourite.headline": "Favorito", + "introduction.interactions.favourite.text": "Puedes guardar un toot para más tarde, y hacer saber al autor que te gustó, dándole a favorito.", + "introduction.interactions.reblog.headline": "Retootear", + "introduction.interactions.reblog.text": "Puedes compartir los toots de otras personas con tus seguidores retooteando los mismos.", + "introduction.interactions.reply.headline": "Responder", + "introduction.interactions.reply.text": "Puedes responder a tus propios toots y los de otras personas, que se encadenarán juntos en una conversación.", + "introduction.welcome.action": "¡Vamos!", + "introduction.welcome.headline": "Primeros pasos", + "introduction.welcome.text": "¡Bienvenido al fediverso! En unos momentos, podrás transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial, alberga tu perfil, así que recuerda su nombre.", "keyboard_shortcuts.back": "volver atrás", "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", "keyboard_shortcuts.boost": "retootear", "keyboard_shortcuts.column": "enfocar un estado en una de las columnas", "keyboard_shortcuts.compose": "enfocar el área de texto de redacción", - "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "abrir la columna de mensajes directos", "keyboard_shortcuts.down": "mover hacia abajo en la lista", - "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.enter": "abrir estado", "keyboard_shortcuts.favourite": "añadir a favoritos", "keyboard_shortcuts.favourites": "abrir la lista de favoritos", "keyboard_shortcuts.federated": "abrir el timeline federado", @@ -204,23 +226,24 @@ "keyboard_shortcuts.search": "para poner el foco en la búsqueda", "keyboard_shortcuts.start": "abrir la columna \"comenzar\"", "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", "keyboard_shortcuts.toot": "para comenzar un nuevo toot", "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", "keyboard_shortcuts.up": "para ir hacia arriba en la lista", "lightbox.close": "Cerrar", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", - "lightbox.view_context": "View context", + "lightbox.view_context": "Ver contexto", "lists.account.add": "Añadir a lista", "lists.account.remove": "Quitar de lista", - "lists.delete": "Delete list", + "lists.delete": "Borrar lista", "lists.edit": "Editar lista", - "lists.edit.submit": "Change title", + "lists.edit.submit": "Cambiar título", "lists.new.create": "Añadir lista", "lists.new.title_placeholder": "Título de la nueva lista", "lists.search": "Buscar entre la gente a la que sigues", "lists.subheading": "Tus listas", + "load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}", "loading_indicator.label": "Cargando…", "media_gallery.toggle_visible": "Cambiar visibilidad", "missing_indicator.label": "No encontrado", @@ -237,7 +260,7 @@ "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Palabras silenciadas", "navigation_bar.follow_requests": "Solicitudes para seguirte", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Siguiendo y seguidores", "navigation_bar.info": "Información adicional", "navigation_bar.keyboard_shortcuts": "Atajos", "navigation_bar.lists": "Listas", @@ -246,41 +269,42 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Toots fijados", "navigation_bar.preferences": "Preferencias", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Historia federada", "navigation_bar.security": "Seguridad", "notification.favourite": "{name} marcó tu estado como favorito", "notification.follow": "{name} te empezó a seguir", "notification.mention": "{name} te ha mencionado", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Una encuesta en la que has votado ha terminado", "notification.reblog": "{name} ha retooteado tu estado", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?", "notifications.column_settings.alert": "Notificaciones de escritorio", "notifications.column_settings.favourite": "Favoritos:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", + "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", + "notifications.column_settings.filter_bar.show": "Mostrar", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.mention": "Menciones:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Resultados de la votación:", "notifications.column_settings.push": "Notificaciones push", "notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.sound": "Reproducir sonido", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", + "notifications.filter.all": "Todos", + "notifications.filter.boosts": "Retoots", + "notifications.filter.favourites": "Favoritos", + "notifications.filter.follows": "Seguidores", + "notifications.filter.mentions": "Menciones", + "notifications.filter.polls": "Resultados de la votación", "notifications.group": "{count} notificaciones", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll.closed": "Cerrada", + "poll.refresh": "Actualizar", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", + "poll.vote": "Votar", + "poll.voted": "Has votado a favor de esta respuesta", + "poll_button.add_poll": "Añadir una encuesta", + "poll_button.remove_poll": "Eliminar encuesta", "privacy.change": "Ajustar privacidad", "privacy.direct.long": "Sólo mostrar a los usuarios mencionados", "privacy.direct.short": "Directo", @@ -289,7 +313,8 @@ "privacy.public.long": "Mostrar en la historia federada", "privacy.public.short": "Público", "privacy.unlisted.long": "No mostrar en la historia federada", - "privacy.unlisted.short": "Sin federar", + "privacy.unlisted.short": "No listado", + "refresh": "Actualizar", "regeneration_indicator.label": "Cargando…", "regeneration_indicator.sublabel": "¡Tu historia de inicio se está preparando!", "relative_time.days": "{number}d", @@ -308,19 +333,20 @@ "search_popout.search_format": "Formato de búsqueda avanzada", "search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.", "search_popout.tips.hashtag": "etiqueta", - "search_popout.tips.status": "status", + "search_popout.tips.status": "estado", "search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag", "search_popout.tips.user": "usuario", "search_results.accounts": "Gente", "search_results.hashtags": "Etiquetas", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Buscar toots por su contenido no está disponible en este servidor de Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", + "status.admin_account": "Abrir interfaz de moderación para @{name}", + "status.admin_status": "Abrir este estado en la interfaz de moderación", + "status.block": "Bloquear a @{name}", "status.cancel_reblog_private": "Des-impulsar", "status.cannot_reblog": "Este toot no puede retootearse", - "status.copy": "Copy link to status", + "status.copy": "Copiar enlace al estado", "status.delete": "Borrar", "status.detailed_status": "Vista de conversación detallada", "status.direct": "Mensaje directo a @{name}", @@ -336,7 +362,7 @@ "status.open": "Expandir estado", "status.pin": "Fijar", "status.pinned": "Toot fijado", - "status.read_more": "Read more", + "status.read_more": "Leer más", "status.reblog": "Retootear", "status.reblog_private": "Implusar a la audiencia original", "status.reblogged_by": "Retooteado por {name}", @@ -351,30 +377,39 @@ "status.show_less_all": "Mostrar menos para todo", "status.show_more": "Mostrar más", "status.show_more_all": "Mostrar más para todo", - "status.show_thread": "Show thread", + "status.show_thread": "Ver hilo", + "status.uncached_media_warning": "No disponible", "status.unmute_conversation": "Dejar de silenciar conversación", "status.unpin": "Dejar de fijar", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Descartar sugerencia", + "suggestions.header": "Es posible que te interese…", "tabs_bar.federated_timeline": "Federado", "tabs_bar.home": "Inicio", "tabs_bar.local_timeline": "Local", "tabs_bar.notifications": "Notificaciones", "tabs_bar.search": "Buscar", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "time_remaining.days": "{number, plural, one {# día restante} other {# días restantes}}", + "time_remaining.hours": "{number, plural, one {# hora restante} other {# horas restantes}}", + "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}", + "time_remaining.moments": "Momentos restantes", + "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}", + "trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {personas}} hablando", + "trends.trending_now": "Tendencia ahora", "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", "upload_area.title": "Arrastra y suelta para subir", "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.limit": "Límite de subida de archivos excedido.", + "upload_error.poll": "Subida de archivos no permitida con encuestas.", "upload_form.description": "Describir para los usuarios con dificultad visual", - "upload_form.focus": "Recortar", + "upload_form.edit": "Editar", "upload_form.undo": "Borrar", + "upload_modal.analyzing_picture": "Analizando imagen…", + "upload_modal.apply": "Aplicar", + "upload_modal.description_placeholder": "Un rápido zorro marrón salta sobre el perro perezoso", + "upload_modal.detect_text": "Detectar texto de la imagen", + "upload_modal.edit_media": "Editar multimedia", + "upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", + "upload_modal.preview_label": "Vista previa ({ratio})", "upload_progress.label": "Subiendo…", "video.close": "Cerrar video", "video.exit_fullscreen": "Salir de pantalla completa", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json new file mode 100644 index 000000000..6b97393d2 --- /dev/null +++ b/app/javascript/mastodon/locales/et.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "Lisa või Eemalda nimekirjadest", + "account.badges.bot": "Robot", + "account.block": "Blokeeri @{name}", + "account.block_domain": "Peida kõik domeenist {domain}", + "account.blocked": "Blokeeritud", + "account.cancel_follow_request": "Tühista jälgimistaotlus", + "account.direct": "Otsesõnum @{name}", + "account.domain_blocked": "Domeen peidetud", + "account.edit_profile": "Muuda profiili", + "account.endorse": "Too profiilil esile", + "account.follow": "Jälgi", + "account.followers": "Jälgijad", + "account.followers.empty": "Keegi ei jälgi seda kasutajat veel.", + "account.follows": "Jälgib", + "account.follows.empty": "See kasutaja ei jälgi veel kedagi.", + "account.follows_you": "Jälgib sind", + "account.hide_reblogs": "Peida upitused kasutajalt @{name}", + "account.last_status": "Viimati aktiivne", + "account.link_verified_on": "Selle lingi autorsust kontrolliti {date}", + "account.locked_info": "Selle konto privaatsussätteks on lukustatud. Omanik vaatab manuaalselt üle, kes teda jägida saab.", + "account.media": "Meedia", + "account.mention": "Maini @{name}", + "account.moved_to": "{name} on kolinud:", + "account.mute": "Vaigista @{name}", + "account.mute_notifications": "Vaigista teated kasutajalt @{name}", + "account.muted": "Vaigistatud", + "account.never_active": "Mitte kunagi", + "account.posts": "Tuututused", + "account.posts_with_replies": "Tuututused ja vastused", + "account.report": "Raporteeri @{name}", + "account.requested": "Ootab kinnitust. Klõpsa jälgimise soovi tühistamiseks", + "account.share": "Jaga @{name} profiili", + "account.show_reblogs": "Näita kasutaja @{name} upitusi", + "account.unblock": "Eemalda blokeering @{name}", + "account.unblock_domain": "Tee {domain} nähtavaks", + "account.unendorse": "Ära kuva profiilil", + "account.unfollow": "Ära jälgi", + "account.unmute": "Ära vaigista @{name}", + "account.unmute_notifications": "Ära vaigista teateid kasutajalt @{name}", + "alert.rate_limited.message": "Palun proovi uuesti pärast {retry_time, time, medium}.", + "alert.rate_limited.title": "Piiratud", + "alert.unexpected.message": "Tekkis ootamatu viga.", + "alert.unexpected.title": "Oih!", + "autosuggest_hashtag.per_week": "{count} nädalas", + "boost_modal.combo": "Saad vajutada {combo}, et see järgmine kord vahele jätta", + "bundle_column_error.body": "Mindagi läks valesti selle komponendi laadimisel.", + "bundle_column_error.retry": "Proovi uuesti", + "bundle_column_error.title": "Võrgu viga", + "bundle_modal_error.close": "Sulge", + "bundle_modal_error.message": "Selle komponendi laadimisel läks midagi viltu.", + "bundle_modal_error.retry": "Proovi uuesti", + "column.blocks": "Blokeeritud kasutajad", + "column.community": "Kohalik ajajoon", + "column.direct": "Otsesõnumid", + "column.directory": "Sirvi profiile", + "column.domain_blocks": "Peidetud domeenid", + "column.favourites": "Lemmikud", + "column.follow_requests": "Jälgimistaotlused", + "column.home": "Kodu", + "column.lists": "Nimekirjad", + "column.mutes": "Vaigistatud kasutajad", + "column.notifications": "Teated", + "column.pins": "Kinnitatud upitused", + "column.public": "Föderatiivne ajajoon", + "column_back_button.label": "Tagasi", + "column_header.hide_settings": "Peida sätted", + "column_header.moveLeft_settings": "Liiguta tulp vasakule", + "column_header.moveRight_settings": "Liiguta tulp paremale", + "column_header.pin": "Kinnita", + "column_header.show_settings": "Näita sätteid", + "column_header.unpin": "Eemalda kinnitus", + "column_subheading.settings": "Sätted", + "community.column_settings.media_only": "Ainult meedia", + "compose_form.direct_message_warning": "See tuut saadetakse ainult mainitud kasutajatele.", + "compose_form.direct_message_warning_learn_more": "Vaata veel", + "compose_form.hashtag_warning": "Seda tuuti ei kuvata ühegi sildi all, sest see on kirjendamata. Ainult avalikud tuutid on sildi järgi otsitavad.", + "compose_form.lock_disclaimer": "Sinu konto ei ole {locked}. Igaüks saab sind jälgida ja näha su ainult-jälgijatele postitusi.", + "compose_form.lock_disclaimer.lock": "lukus", + "compose_form.placeholder": "Millest mõtled?", + "compose_form.poll.add_option": "Lisa valik", + "compose_form.poll.duration": "Küsitluse kestus", + "compose_form.poll.option_placeholder": "Valik {number}", + "compose_form.poll.remove_option": "Eemalda see valik", + "compose_form.publish": "Tuut", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Märgista meedia tundlikuks", + "compose_form.sensitive.marked": "Meedia on sensitiivseks märgitud", + "compose_form.sensitive.unmarked": "Meedia ei ole sensitiivseks märgitud", + "compose_form.spoiler.marked": "Tekst on hoiatuse taha peidetud", + "compose_form.spoiler.unmarked": "Tekst ei ole peidetud", + "compose_form.spoiler_placeholder": "Kirjuta oma hoiatus siia", + "confirmation_modal.cancel": "Katkesta", + "confirmations.block.block_and_report": "Blokeeri & Teata", + "confirmations.block.confirm": "Blokeeri", + "confirmations.block.message": "Oled kindel, et soovid blokkida {name}?", + "confirmations.delete.confirm": "Kustuta", + "confirmations.delete.message": "Oled kindel, et soovid selle staatuse kustutada?", + "confirmations.delete_list.confirm": "Kustuta", + "confirmations.delete_list.message": "Oled kindel, et soovid selle nimekirja püsivalt kustutada?", + "confirmations.domain_block.confirm": "Peida terve domeen", + "confirmations.domain_block.message": "Oled ikka päris kindel, et soovid blokeerida terve {domain}? Enamikul juhtudel piisab mõnest sihitud blokist või vaigistusest, mis on eelistatav. Sa ei näe selle domeeni sisu üheski avalikus ajajoones või teadetes. Sinu jälgijad sellest domeenist eemaldatakse.", + "confirmations.logout.confirm": "Välju", + "confirmations.logout.message": "Kas oled kindel, et soovid välja logida?", + "confirmations.mute.confirm": "Vaigista", + "confirmations.mute.explanation": "See peidab postitusi temalt ning postitusi, kus mainitakse neid, kuid see lubab neil ikka näha Teie postitusi ning Teid jälgida.", + "confirmations.mute.message": "Oled kindel, et soovid {name} vaigistada?", + "confirmations.redraft.confirm": "Kustuta & taasalusta", + "confirmations.redraft.message": "Oled kindel, et soovid selle staatuse kustutada ja alustada uuesti? Lemmikud ja upitused lähevad kaotsi ja vastused originaaalpostitusele jäävad orvuks.", + "confirmations.reply.confirm": "Vasta", + "confirmations.reply.message": "Kohene vastamine kirjutab üle sõnumi, mida hetkel koostad. Oled kindel, et soovid jätkata?", + "confirmations.unfollow.confirm": "Ära jälgi", + "confirmations.unfollow.message": "Oled kindel, et ei soovi jälgida {name}?", + "conversation.delete": "Kustuta vestlus", + "conversation.mark_as_read": "Märgi loetuks", + "conversation.open": "Vaata vestlust", + "conversation.with": "Koos {names}", + "directory.federated": "Teatud fediversumist", + "directory.local": "Ainult domeenilt {domain}", + "directory.new_arrivals": "Uustulijad", + "directory.recently_active": "Hiljuti aktiivne", + "embed.instructions": "Manusta see staatus oma veebilehele, kopeerides alloleva koodi.", + "embed.preview": "Nii näeb see välja:", + "emoji_button.activity": "Tegevus", + "emoji_button.custom": "Mugandatud", + "emoji_button.flags": "Lipud", + "emoji_button.food": "Toit & Jook", + "emoji_button.label": "Sisesta emoji", + "emoji_button.nature": "Loodus", + "emoji_button.not_found": "Ei ole emojosi!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objektid", + "emoji_button.people": "Inimesed", + "emoji_button.recent": "Tihti kasutatud", + "emoji_button.search": "Otsi...", + "emoji_button.search_results": "Otsitulemused", + "emoji_button.symbols": "Sümbolid", + "emoji_button.travel": "Reisimine & Kohad", + "empty_column.account_timeline": "Siin tuute ei ole!", + "empty_column.account_unavailable": "Profiil pole saadaval", + "empty_column.blocks": "Sa ei ole veel ühtegi kasutajat blokeerinud.", + "empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema saada!", + "empty_column.direct": "Sul ei veel otsesõnumeid. Kui saadad või võtad mõne vastu, ilmuvad nad siia.", + "empty_column.domain_blocks": "Siin ei ole veel peidetud domeene.", + "empty_column.favourited_statuses": "Sul pole veel lemmikuid tuute. Kui märgid mõne, näed neid siin.", + "empty_column.favourites": "Keegi pole veel seda tuuti lemmikuks märkinud. Kui seegi seda teeb, näed seda siin.", + "empty_column.follow_requests": "Sul pole veel ühtegi jälgimise taotlust. Kui saad mõne, näed seda siin.", + "empty_column.hashtag": "Selle sildiga pole veel midagi.", + "empty_column.home": "Sinu kodu ajajoon on tühi! Külasta {public} või kasuta otsingut alustamaks ja kohtamaks teisi kasutajaid.", + "empty_column.home.public_timeline": "avalik ajajoon", + "empty_column.list": "Siin nimstus pole veel midagi. Kui selle nimistu liikmed postitavad uusi staatusi, näed neid siin.", + "empty_column.lists": "Sul ei ole veel ühtegi nimekirja. Kui lood mõne, näed seda siin.", + "empty_column.mutes": "Sa pole veel ühtegi kasutajat vaigistanud.", + "empty_column.notifications": "Sul ei ole veel teateid. Suhtle teistega alustamaks vestlust.", + "empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi", + "error.unexpected_crash.explanation": "Meie poolse probleemi või veebilehitseja ühilduvus probleemi tõttu ei suutnud me Teile seda lehekülge korrektselt näidata.", + "error.unexpected_crash.next_steps": "Proovige lehekülge uuesti avada. Kui see ei aita, võite proovida kasutada Mastodoni mõne muu veebilehitseja või äppi kaudu.", + "errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale", + "errors.unexpected_crash.report_issue": "Teavita veast", + "follow_request.authorize": "Autoriseeri", + "follow_request.reject": "Hülga", + "getting_started.developers": "Arendajad", + "getting_started.directory": "Profiili kataloog", + "getting_started.documentation": "Dokumentatsioon", + "getting_started.heading": "Alustamine", + "getting_started.invite": "Kutsu inimesi", + "getting_started.open_source_notice": "Mastodon on avatud lähtekoodiga tarkvara. Saad panustada või teatada probleemidest GitHubis {github}.", + "getting_started.security": "Turvalisus", + "getting_started.terms": "Kasutustingimused", + "hashtag.column_header.tag_mode.all": "ja {additional}", + "hashtag.column_header.tag_mode.any": "või {additional}", + "hashtag.column_header.tag_mode.none": "ilma {additional}", + "hashtag.column_settings.select.no_options_message": "Soovitusi ei leitud", + "hashtag.column_settings.select.placeholder": "Sisesta sildid…", + "hashtag.column_settings.tag_mode.all": "Kõik need", + "hashtag.column_settings.tag_mode.any": "Mõni neist", + "hashtag.column_settings.tag_mode.none": "Mitte ükski neist", + "hashtag.column_settings.tag_toggle": "Kaasa lisamärked selle tulba jaoks", + "home.column_settings.basic": "Peamine", + "home.column_settings.show_reblogs": "Näita upitusi", + "home.column_settings.show_replies": "Näita vastuseid", + "intervals.full.days": "{number, plural, one {# päev} other {# päevad}}", + "intervals.full.hours": "{number, plural, one {# tund} other {# tundi}}", + "intervals.full.minutes": "{number, plural, one {# minut} other {# minutit}}", + "introduction.federation.action": "Järgmine", + "introduction.federation.federated.headline": "Föderatiivne", + "introduction.federation.federated.text": "Avalikud postitused teistest föderatsiooni serveritest kuvatakse föderatiivsel ajajoonel.", + "introduction.federation.home.headline": "Kodu", + "introduction.federation.home.text": "Inimest postitused keda jälgid kuvatakse sinu koduajajoonel. Saad jälgida igaüht igas serveris!", + "introduction.federation.local.headline": "Kohalik", + "introduction.federation.local.text": "Samas serveris olevate inimeste postitused kuvatakse kohalikul ajajoonel.", + "introduction.interactions.action": "Välju õpetusest!", + "introduction.interactions.favourite.headline": "Lemmik", + "introduction.interactions.favourite.text": "Saad tuuti salvestada ja anda autorile teada, et meeldis märkides selle lemmikuks.", + "introduction.interactions.reblog.headline": "Upita", + "introduction.interactions.reblog.text": "Saad jagada teiste inimeste tuute oma jälgijatega upitades neid.", + "introduction.interactions.reply.headline": "Vasta", + "introduction.interactions.reply.text": "Saad vastata teiste ja enda tuutidele, mis ühendab nad kokku aruteluks.", + "introduction.welcome.action": "Lähme!", + "introduction.welcome.headline": "Esimesed sammud", + "introduction.welcome.text": "Teretulemast fediversumisse! Mõne aja pärast saad avaldada sõnumeid ja rääkida oma sõpradega läbi laia valiku serverite. Aga see server, {domain}, on eriline—ta majutab sinu profiili. Seega jäta ta nimi meelde.", + "keyboard_shortcuts.back": "tagasiminekuks", + "keyboard_shortcuts.blocked": "avamaks blokeeritud kasutajate nimistut", + "keyboard_shortcuts.boost": "upitamiseks", + "keyboard_shortcuts.column": "fokuseerimaks staatust ühele tulpadest", + "keyboard_shortcuts.compose": "fokuseerimaks tekstikoostamise alale", + "keyboard_shortcuts.description": "Kirjeldus", + "keyboard_shortcuts.direct": "avamaks otsesõnumite tulpa", + "keyboard_shortcuts.down": "liikumaks nimstus alla", + "keyboard_shortcuts.enter": "staatuse avamiseks", + "keyboard_shortcuts.favourite": "lemmikuks märkimiseks", + "keyboard_shortcuts.favourites": "avamaks lemmikute nimistut", + "keyboard_shortcuts.federated": "avamaks föderatsiooni ajajoont", + "keyboard_shortcuts.heading": "Klaviatuuri kiirkäsud", + "keyboard_shortcuts.home": "avamaks kodu ajajoont", + "keyboard_shortcuts.hotkey": "Kiirklahv", + "keyboard_shortcuts.legend": "selle legendi kuvamiseks", + "keyboard_shortcuts.local": "avamaks kohalikku ajajoont", + "keyboard_shortcuts.mention": "autori mainimiseks", + "keyboard_shortcuts.muted": "avamaks vaigistatud kasutajate nimistut", + "keyboard_shortcuts.my_profile": "avamaks profiili", + "keyboard_shortcuts.notifications": "avamaks teadete tulpa", + "keyboard_shortcuts.pinned": "avamaks kinnitatud tuutide nimistut", + "keyboard_shortcuts.profile": "avamaks autori profiili", + "keyboard_shortcuts.reply": "vastamiseks", + "keyboard_shortcuts.requests": "avamaks jälgimistaotluste nimistut", + "keyboard_shortcuts.search": "otsingu fokuseerimiseks", + "keyboard_shortcuts.start": "avamaks \"Alusta\" tulpa", + "keyboard_shortcuts.toggle_hidden": "näitamaks/peitmaks teksti CW taga", + "keyboard_shortcuts.toggle_sensitivity": "et peita/näidata meediat", + "keyboard_shortcuts.toot": "alustamaks täiesti uut tuuti", + "keyboard_shortcuts.unfocus": "tekstiala/otsingu koostamise mittefokuseerimiseks", + "keyboard_shortcuts.up": "liikumaks nimistus üles", + "lightbox.close": "Sulge", + "lightbox.next": "Järgmine", + "lightbox.previous": "Eelmine", + "lightbox.view_context": "Vaata konteksti", + "lists.account.add": "Lisa nimistusse", + "lists.account.remove": "Eemalda nimistust", + "lists.delete": "Kustuta nimistu", + "lists.edit": "Muuda nimistut", + "lists.edit.submit": "Muuda pealkiri", + "lists.new.create": "Lisa nimistu", + "lists.new.title_placeholder": "Uus nimistu pealkiri", + "lists.search": "Otsi sinu poolt jälgitavate inimese hulgast", + "lists.subheading": "Sinu nimistud", + "load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}", + "loading_indicator.label": "Laeb..", + "media_gallery.toggle_visible": "Lülita nähtavus", + "missing_indicator.label": "Ei leitud", + "missing_indicator.sublabel": "Seda ressurssi ei leitud", + "mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?", + "navigation_bar.apps": "Mobiilrakendused", + "navigation_bar.blocks": "Blokeeritud kasutajad", + "navigation_bar.community_timeline": "Kohalik ajajoon", + "navigation_bar.compose": "Koosta uus tuut", + "navigation_bar.direct": "Otsesõnumid", + "navigation_bar.discover": "Avasta", + "navigation_bar.domain_blocks": "Peidetud domeenid", + "navigation_bar.edit_profile": "Muuda profiili", + "navigation_bar.favourites": "Lemmikud", + "navigation_bar.filters": "Vaigistatud sõnad", + "navigation_bar.follow_requests": "Jälgimistaotlused", + "navigation_bar.follows_and_followers": "Jälgitud ja jälgijad", + "navigation_bar.info": "Selle serveri kohta", + "navigation_bar.keyboard_shortcuts": "Kiirklahvid", + "navigation_bar.lists": "Nimistud", + "navigation_bar.logout": "Logi välja", + "navigation_bar.mutes": "Vaigistatud kasutajad", + "navigation_bar.personal": "Isiklik", + "navigation_bar.pins": "Kinnitatud tuutid", + "navigation_bar.preferences": "Eelistused", + "navigation_bar.public_timeline": "Föderatiivne ajajoon", + "navigation_bar.security": "Turvalisus", + "notification.favourite": "{name} märkis su staatuse lemmikuks", + "notification.follow": "{name} jälgib sind", + "notification.mention": "{name} mainis sind", + "notification.poll": "Küsitlus, milles osalesid, on lõppenud", + "notification.reblog": "{name} upitas su staatust", + "notifications.clear": "Puhasta teated", + "notifications.clear_confirmation": "Oled kindel, et soovid püsivalt kõik oma teated puhastada?", + "notifications.column_settings.alert": "Töölauateated", + "notifications.column_settings.favourite": "Lemmikud:", + "notifications.column_settings.filter_bar.advanced": "Kuva kõik kategooriad", + "notifications.column_settings.filter_bar.category": "Kiirfiltri riba", + "notifications.column_settings.filter_bar.show": "Kuva", + "notifications.column_settings.follow": "Uued jälgijad:", + "notifications.column_settings.mention": "Mainimised:", + "notifications.column_settings.poll": "Küsitluse tulemused:", + "notifications.column_settings.push": "Push teated", + "notifications.column_settings.reblog": "Upitused:", + "notifications.column_settings.show": "Kuva tulbas", + "notifications.column_settings.sound": "Mängi heli", + "notifications.filter.all": "Kõik", + "notifications.filter.boosts": "Upitused", + "notifications.filter.favourites": "Lemmikud", + "notifications.filter.follows": "Jälgib", + "notifications.filter.mentions": "Mainimised", + "notifications.filter.polls": "Küsitluse tulemused", + "notifications.group": "{count} teated", + "poll.closed": "Suletud", + "poll.refresh": "Värskenda", + "poll.total_people": "{count, plural,one {# inimene} other {# inimest}}", + "poll.total_votes": "{count, plural, one {# hääl} other {# hääli}}", + "poll.vote": "Hääleta", + "poll.voted": "Teie hääletasite selle poolt", + "poll_button.add_poll": "Lisa küsitlus", + "poll_button.remove_poll": "Eemalda küsitlus", + "privacy.change": "Muuda staatuse privaatsust", + "privacy.direct.long": "Postita ainult mainitud kasutajatele", + "privacy.direct.short": "Otsene", + "privacy.private.long": "Postita ainult jälgijatele", + "privacy.private.short": "Ainult jälgijatele", + "privacy.public.long": "Postita avalikele ajajoontele", + "privacy.public.short": "Avalik", + "privacy.unlisted.long": "Ära postita avalikele ajajoontele", + "privacy.unlisted.short": "Määramata", + "refresh": "Värskenda", + "regeneration_indicator.label": "Laeb…", + "regeneration_indicator.sublabel": "Sinu kodu voog on ettevalmistamisel!", + "relative_time.days": "{number}p", + "relative_time.hours": "{number}t", + "relative_time.just_now": "nüüd", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Tühista", + "report.forward": "Edasta kasutajale {target}", + "report.forward_hint": "See kasutaja on teisest serverist. Kas saadan anonümiseeritud koopia sellest teatest sinna ka?", + "report.hint": "See teade saadetakse sinu serveri moderaatoritele. Te saate lisada selgituse selle kohta, miks selle kasutaja kohta teate esitasite, siin:", + "report.placeholder": "Lisaks kommentaarid", + "report.submit": "Saada", + "report.target": "Teatamine {target} kohta", + "search.placeholder": "Otsi", + "search_popout.search_format": "Täiustatud otsiformaat", + "search_popout.tips.full_text": "Lihtne tekst toob esile staatused mida olete kirjutanud, lisanud lemmikuks, upitanud või olete seal mainitud, ning lisaks veel kattuvad kasutajanimed, kuvanimed ja sildid.", + "search_popout.tips.hashtag": "silt", + "search_popout.tips.status": "staatus", + "search_popout.tips.text": "Lihtne tekst toob esile kattuvad kuvanimed, kasutajanimed ning sildid", + "search_popout.tips.user": "kasutaja", + "search_results.accounts": "Inimesed", + "search_results.hashtags": "Sildid", + "search_results.statuses": "Tuudid", + "search_results.statuses_fts_disabled": "Tuutsude otsimine nende sisu järgi ei ole sellel Mastodoni serveril sisse lülitatud.", + "search_results.total": "{count, number} {count, plural, one {tulemus} other {tulemust}}", + "status.admin_account": "Ava moderaatoriliides kasutajale @{name}", + "status.admin_status": "Ava see staatus moderaatoriliites", + "status.block": "Blokeeri @{name}", + "status.cancel_reblog_private": "Äraupita", + "status.cannot_reblog": "Seda postitust ei saa upitada", + "status.copy": "Kopeeri link staatusesse", + "status.delete": "Kustuta", + "status.detailed_status": "Detailne vestluskuva", + "status.direct": "Otsesõnum @{name}", + "status.embed": "Sängita", + "status.favourite": "Lemmik", + "status.filtered": "Filtreeritud", + "status.load_more": "Lae veel", + "status.media_hidden": "Meedia peidetud", + "status.mention": "Mainimine @{name}", + "status.more": "Veel", + "status.mute": "Vaigista @{name}", + "status.mute_conversation": "Vaigista vestlus", + "status.open": "Laienda see staatus", + "status.pin": "Kinnita profiilile", + "status.pinned": "Kinnitatud tuut", + "status.read_more": "Loe veel", + "status.reblog": "Upita", + "status.reblog_private": "Upita algsele publikule", + "status.reblogged_by": "{name} upitatud", + "status.reblogs.empty": "Keegi pole seda tuuti veel upitanud. Kui keegi upitab, näed seda siin.", + "status.redraft": "Kustuta & alga uuesti", + "status.reply": "Vasta", + "status.replyAll": "Vasta lõimele", + "status.report": "Raport @{name}", + "status.sensitive_warning": "Tundlik sisu", + "status.share": "Jaga", + "status.show_less": "Näita vähem", + "status.show_less_all": "Näita vähem kõigile", + "status.show_more": "Näita veel", + "status.show_more_all": "Näita enam kõigile", + "status.show_thread": "Kuva lõim", + "status.uncached_media_warning": "Pole saadaval", + "status.unmute_conversation": "Ära vaigista vestlust", + "status.unpin": "Kinnita profiililt lahti", + "suggestions.dismiss": "Eira soovitust", + "suggestions.header": "Sind võib huvitada…", + "tabs_bar.federated_timeline": "Föderatiivne", + "tabs_bar.home": "Kodu", + "tabs_bar.local_timeline": "Kohalik", + "tabs_bar.notifications": "Teated", + "tabs_bar.search": "Otsi", + "time_remaining.days": "{number, plural, one {# päev} other {# päeva}} left", + "time_remaining.hours": "{number, plural, one {# tund} other {# tundi}} left", + "time_remaining.minutes": "{number, plural, one {# minut} other {# minutit}} left", + "time_remaining.moments": "Hetked jäänud", + "time_remaining.seconds": "{number, plural, one {# sekund} other {# sekundit}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {inimene} other {inimesed}} talking", + "trends.trending_now": "Praegu populaarne", + "ui.beforeunload": "Sinu mustand läheb kaotsi, kui lahkud Mastodonist.", + "upload_area.title": "Lohista & aseta üleslaadimiseks", + "upload_button.label": "Lisa meedia (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_error.limit": "Faili üleslaadimise limiit ületatud.", + "upload_error.poll": "Küsitlustes pole faili üleslaadimine lubatud.", + "upload_form.description": "Kirjelda vaegnägijatele", + "upload_form.edit": "Redigeeri", + "upload_form.undo": "Kustuta", + "upload_modal.analyzing_picture": "Analüüsime pilti…", + "upload_modal.apply": "Rakenda", + "upload_modal.description_placeholder": "Kiire pruun rebane hüppab üle laisa koera", + "upload_modal.detect_text": "Tuvasta teksti pildilt", + "upload_modal.edit_media": "Muuda meediat", + "upload_modal.hint": "Vajuta või tõmba ringi eelvaatel, et valida fookuspunkti, mis on alati nähtaval kõikidel eelvaadetel.", + "upload_modal.preview_label": "Eelvaade ({ratio})", + "upload_progress.label": "Laeb üles....", + "video.close": "Sulge video", + "video.exit_fullscreen": "Välju täisekraanist", + "video.expand": "Suurenda video", + "video.fullscreen": "Täisekraan", + "video.hide": "Peida video", + "video.mute": "Vaigista heli", + "video.pause": "Paus", + "video.play": "Mängi", + "video.unmute": "Taasta heli" +} diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 5e37f5862..9e383e85a 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -1,9 +1,10 @@ { - "account.add_or_remove_from_list": "Gehitu edo kendu zerrendetatik", + "account.add_or_remove_from_list": "Gehitu edo Kendu zerrendetatik", "account.badges.bot": "Bot-a", "account.block": "Blokeatu @{name}", "account.block_domain": "Ezkutatu {domain} domeinuko guztia", "account.blocked": "Blokeatuta", + "account.cancel_follow_request": "Ezeztatu jarraitzeko eskaria", "account.direct": "Mezu zuzena @{name}(r)i", "account.domain_blocked": "Ezkutatutako domeinua", "account.edit_profile": "Aldatu profila", @@ -15,16 +16,18 @@ "account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.", "account.follows_you": "Jarraitzen dizu", "account.hide_reblogs": "Ezkutatu @{name}(r)en bultzadak", + "account.last_status": "Azkenekoz aktiboa", "account.link_verified_on": "Esteka honen jabetzaren egiaztaketa data: {date}", "account.locked_info": "Kontu honen pribatutasun egoera blokeatuta gisa ezarri da. Jabeak eskuz erabakitzen du nork jarraitu diezaioken.", "account.media": "Multimedia", "account.mention": "Aipatu @{name}", - "account.moved_to": "{name} hona lekualdatu da:", + "account.moved_to": "{name} hona migratu da:", "account.mute": "Mututu @{name}", "account.mute_notifications": "Mututu @{name}(r)en jakinarazpenak", "account.muted": "Mutututa", + "account.never_active": "Inoiz ez", "account.posts": "Tootak", - "account.posts_with_replies": "Toot eta erantzunak", + "account.posts_with_replies": "Toot-ak eta erantzunak", "account.report": "Salatu @{name}", "account.requested": "Onarpenaren zain. Klikatu jarraitzeko eskaera ezeztatzeko", "account.share": "@{name}(e)ren profila elkarbanatu", @@ -32,11 +35,14 @@ "account.unblock": "Desblokeatu @{name}", "account.unblock_domain": "Berriz erakutsi {domain}", "account.unendorse": "Ez nabarmendu profilean", - "account.unfollow": "Jarraitzeari utzi", + "account.unfollow": "Utzi jarraitzeari", "account.unmute": "Desmututu @{name}", "account.unmute_notifications": "Desmututu @{name}(r)en jakinarazpenak", + "alert.rate_limited.message": "Saiatu {retry_time, time, medium} barru.", + "alert.rate_limited.title": "Abiadura mugatua", "alert.unexpected.message": "Ustekabeko errore bat gertatu da.", "alert.unexpected.title": "Ene!", + "autosuggest_hashtag.per_week": "{count} asteko", "boost_modal.combo": "{combo} sakatu dezakezu hurrengoan hau saltatzeko", "bundle_column_error.body": "Zerbait okerra gertatu da osagai hau kargatzean.", "bundle_column_error.retry": "Saiatu berriro", @@ -47,6 +53,7 @@ "column.blocks": "Blokeatutako erabiltzaileak", "column.community": "Denbora-lerro lokala", "column.direct": "Mezu zuzenak", + "column.directory": "Arakatu profilak", "column.domain_blocks": "Ezkutatutako domeinuak", "column.favourites": "Gogokoak", "column.follow_requests": "Jarraitzeko eskariak", @@ -54,7 +61,7 @@ "column.lists": "Zerrendak", "column.mutes": "Mutututako erabiltzaileak", "column.notifications": "Jakinarazpenak", - "column.pins": "Pinned toot", + "column.pins": "Finkatutako toot-ak", "column.public": "Federatutako denbora-lerroa", "column_back_button.label": "Atzera", "column_header.hide_settings": "Ezkutatu ezarpenak", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Ziur behin betiko ezabatu nahi duzula zerrenda hau?", "confirmations.domain_block.confirm": "Ezkutatu domeinu osoa", "confirmations.domain_block.message": "Ziur, erabat ziur, {domain} domeinu osoa blokeatu nahi duzula? Gehienetan gutxi batzuk blokeatu edo mututzearekin nahikoa da. Ez duzu domeinu horretako edukirik ikusiko denbora lerroetan edo jakinarazpenetan. Domeinu horretako zure jarraitzaileak kenduko dira ere.", + "confirmations.logout.confirm": "Amaitu saioa", + "confirmations.logout.message": "Ziur saioa amaitu nahi duzula?", "confirmations.mute.confirm": "Mututu", + "confirmations.mute.explanation": "Honek horko mezuak eta aipamena egiten dietenak ezkutatuko ditu, baina beraiek zure mezuak ikusi ahal izango dituzte eta zuri jarraitu.", "confirmations.mute.message": "Ziur {name} mututu nahi duzula?", "confirmations.redraft.confirm": "Ezabatu eta berridatzi", "confirmations.redraft.message": "Ziur mezu hau ezabatu eta berridatzi nahi duzula? Gogokoak eta bultzadak galduko dira eta jaso dituen erantzunak umezurtz geratuko dira.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Orain erantzuteak idazten ari zaren mezua gainidatziko du. Ziur jarraitu nahi duzula?", "confirmations.unfollow.confirm": "Utzi jarraitzeari", "confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?", + "conversation.delete": "Ezabatu elkarrizketa", + "conversation.mark_as_read": "Markatu irakurrita bezala", + "conversation.open": "Ikusi elkarrizketa", + "conversation.with": "Hauekin: {names}", + "directory.federated": "Fedibertso ezagunekoak", + "directory.local": "{domain} domeinukoak soilik", + "directory.new_arrivals": "Iritsi berriak", + "directory.recently_active": "Duela gutxi aktibo", "embed.instructions": "Txertatu mezu hau zure webgunean beheko kodea kopatuz.", "embed.preview": "Hau da izango duen itxura:", "emoji_button.activity": "Jarduera", @@ -134,6 +152,10 @@ "empty_column.mutes": "Ez duzu erabiltzailerik mututu oraindik.", "empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.", "empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileak hau betetzen joateko", + "error.unexpected_crash.explanation": "Gure kodean arazoren bat dela eta, edo nabigatzailearekin bateragarritasun arazoren bat dela eta, orri hau ezin izan da ongi bistaratu.", + "error.unexpected_crash.next_steps": "Saiatu orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.", + "errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera", + "errors.unexpected_crash.report_issue": "Eman arazoaren berri", "follow_request.authorize": "Baimendu", "follow_request.reject": "Ukatu", "getting_started.developers": "Garatzaileak", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Zerrenda berriaren izena", "lists.search": "Bilatu jarraitzen dituzun pertsonen artean", "lists.subheading": "Zure zerrendak", + "load_pending": "{count, plural, one {eleentuberri #} other {# elementu berri}}", "loading_indicator.label": "Kargatzen...", "media_gallery.toggle_visible": "Txandakatu ikusgaitasuna", "missing_indicator.label": "Ez aurkitua", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Pertsonala", "navigation_bar.pins": "Finkatutako toot-ak", "navigation_bar.preferences": "Hobespenak", - "navigation_bar.profile_directory": "Profilen direktorioa", "navigation_bar.public_timeline": "Federatutako denbora-lerroa", "navigation_bar.security": "Segurtasuna", "notification.favourite": "{name}(e)k zure mezua gogoko du", @@ -277,8 +299,10 @@ "notifications.group": "{count} jakinarazpen", "poll.closed": "Itxita", "poll.refresh": "Berritu", + "poll.total_people": "{count, plural, one {pertsona #} other {# pertsona}}", "poll.total_votes": "{count, plural, one {boto #} other {# boto}}", "poll.vote": "Bozkatu", + "poll.voted": "Erantzun honi eman diozu botoa", "poll_button.add_poll": "Gehitu inkesta bat", "poll_button.remove_poll": "Kendu inkesta", "privacy.change": "Doitu mezuaren pribatutasuna", @@ -290,6 +314,7 @@ "privacy.public.short": "Publikoa", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Zerrendatu gabea", + "refresh": "Berritu", "regeneration_indicator.label": "Kargatzen…", "regeneration_indicator.sublabel": "Zure hasiera-jarioa prestatzen ari da!", "relative_time.days": "{number}e", @@ -314,6 +339,7 @@ "search_results.accounts": "Jendea", "search_results.hashtags": "Traolak", "search_results.statuses": "Toot-ak", + "search_results.statuses_fts_disabled": "Mastodon zerbitzari honek ez du Toot-en edukiaren bilaketa gaitu.", "search_results.total": "{count, number} {count, plural, one {emaitza} other {emaitzak}}", "status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea", "status.admin_status": "Ireki mezu hau moderazio interfazean", @@ -352,6 +378,7 @@ "status.show_more": "Erakutsi gehiago", "status.show_more_all": "Erakutsi denetarik gehiago", "status.show_thread": "Erakutsi haria", + "status.uncached_media_warning": "Ez eskuragarri", "status.unmute_conversation": "Desmututu elkarrizketa", "status.unpin": "Desfinkatu profiletik", "suggestions.dismiss": "Errefusatu proposamena", @@ -367,14 +394,22 @@ "time_remaining.moments": "Amaitzekotan", "time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} hitz egiten", + "trends.trending_now": "Joera orain", "ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.", "upload_area.title": "Arrastatu eta jaregin igotzeko", "upload_button.label": "Gehitu multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Fitxategi igoera muga gaindituta.", "upload_error.poll": "Ez da inkestetan fitxategiak igotzea onartzen.", "upload_form.description": "Deskribatu ikusmen arazoak dituztenentzat", - "upload_form.focus": "Aldatu aurrebista", + "upload_form.edit": "Editatu", "upload_form.undo": "Ezabatu", + "upload_modal.analyzing_picture": "Irudia aztertzen…", + "upload_modal.apply": "Aplikatu", + "upload_modal.description_placeholder": "Azeri marroi azkar batek txakur alferraren gainetik salto egiten du", + "upload_modal.detect_text": "Antzeman testua iruditik", + "upload_modal.edit_media": "Editatu media", + "upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.", + "upload_modal.preview_label": "Aurreikusi ({ratio})", "upload_progress.label": "Igotzen...", "video.close": "Itxi bideoa", "video.exit_fullscreen": "Irten pantaila osotik", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index def140df6..b651edd32 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -3,7 +3,8 @@ "account.badges.bot": "ربات", "account.block": "مسدودسازی @{name}", "account.block_domain": "پنهانسازی همه چیز از سرور {domain}", - "account.blocked": "مسدودشده", + "account.blocked": "مسدود شده", + "account.cancel_follow_request": "لغو درخواست پیگیری", "account.direct": "پیغام خصوصی به @{name}", "account.domain_blocked": "دامین پنهانشده", "account.edit_profile": "ویرایش نمایه", @@ -15,7 +16,8 @@ "account.follows.empty": "این کاربر هنوز هیچ کسی را پی نمیگیرد.", "account.follows_you": "پیگیر شماست", "account.hide_reblogs": "پنهان کردن بازبوقهای @{name}", - "account.link_verified_on": "مالکیت این نشانی در تایخ {date} بررسی شد", + "account.last_status": "آخرین فعالیت", + "account.link_verified_on": "مالکیت این نشانی در تاریخ {date} بررسی شد", "account.locked_info": "این حساب خصوصی است. صاحب این حساب تصمیم میگیرد که چه کسی میتواند پیگیرش باشد.", "account.media": "عکس و ویدیو", "account.mention": "نامبردن از @{name}", @@ -23,6 +25,7 @@ "account.mute": "بیصدا کردن @{name}", "account.mute_notifications": "بیصداکردن اعلانها از طرف @{name}", "account.muted": "بیصداشده", + "account.never_active": "هرگز", "account.posts": "نوشتهها", "account.posts_with_replies": "نوشتهها و پاسخها", "account.report": "گزارش @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "پایان پیگیری", "account.unmute": "باصدا کردن @{name}", "account.unmute_notifications": "باصداکردن اعلانها از طرف @{name}", + "alert.rate_limited.message": "لطفاً پس از {retry_time, time, medium} دوباره تلاش کنید.", + "alert.rate_limited.title": "محدودیت تعداد", "alert.unexpected.message": "خطای پیشبینینشدهای رخ داد.", "alert.unexpected.title": "ای وای!", + "autosuggest_hashtag.per_week": "{count} در هفته", "boost_modal.combo": "دکمهٔ {combo} را بزنید تا دیگر این را نبینید", "bundle_column_error.body": "هنگام بازکردن این بخش خطایی رخ داد.", "bundle_column_error.retry": "تلاش دوباره", @@ -47,6 +53,7 @@ "column.blocks": "کاربران مسدودشده", "column.community": "نوشتههای محلی", "column.direct": "پیغامهای خصوصی", + "column.directory": "مرور نمایهها", "column.domain_blocks": "دامینهای پنهانشده", "column.favourites": "پسندیدهها", "column.follow_requests": "درخواستهای پیگیری", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "آیا واقعاً میخواهید این فهرست را برای همیشه پاک کنید؟", "confirmations.domain_block.confirm": "پنهانسازی کل دامین", "confirmations.domain_block.message": "آیا جدی جدی میخواهید کل دامین {domain} را مسدود کنید؟ بیشتر وقتها مسدودکردن یا بیصداکردن چند حساب کاربری خاص کافی است و توصیه میشود. پس از این کار شما هیچ نوشتهای را از این دامین در فهرست نوشتههای عمومی یا اعلانهایتان نخواهید دید. پیگیران شما از این دامین هم حذف خواهد شد.", + "confirmations.logout.confirm": "خروج", + "confirmations.logout.message": "آیا مطمئنید که میخواهید خارج شوید؟", "confirmations.mute.confirm": "بیصدا کن", + "confirmations.mute.explanation": "این کار نوشتههای آنها و نوشتههایی را که از آنها نام برده پنهان میکند، ولی آنها همچنان اجازه دارند نوشتههای شما را ببینند و شما را پی بگیرند.", "confirmations.mute.message": "آیا واقعاً میخواهید {name} را بیصدا کنید؟", "confirmations.redraft.confirm": "پاککردن و بازنویسی", "confirmations.redraft.message": "آیا واقعاً میخواهید این نوشته را پاک کنید و آن را از نو بنویسید؟ با این کار بازبوقها و پسندیدهشدنهای آن از دست میرود و پاسخها به آن بیمرجع میشود.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "اگر الان پاسخ دهید، چیزی که در حال نوشتنش بودید پاک خواهد شد. آیا همین را میخواهید؟", "confirmations.unfollow.confirm": "لغو پیگیری", "confirmations.unfollow.message": "آیا واقعاً میخواهید به پیگیری از {name} پایان دهید؟", + "conversation.delete": "حذف گفتگو", + "conversation.mark_as_read": "علامتگذاری به عنوان خوانده شده", + "conversation.open": "دیدن گفتگو", + "conversation.with": "با {names}", + "directory.federated": "از سرورهای همسایه", + "directory.local": "تنها از {domain}", + "directory.new_arrivals": "تازهواردان", + "directory.recently_active": "کاربران فعال اخیر", "embed.instructions": "برای جاگذاری این نوشته در سایت خودتان، کد زیر را کپی کنید.", "embed.preview": "نوشتهٔ جاگذاریشده این گونه به نظر خواهد رسید:", "emoji_button.activity": "فعالیت", @@ -126,7 +144,7 @@ "empty_column.favourited_statuses": "شما هنوز هیچ بوقی را نپسندیدهاید. وقتی بوقی را بپسندید، اینجا نمایش خواهد یافت.", "empty_column.favourites": "هنوز هیچ کسی این بوق را نپسندیده است. وقتی کسی آن را بپسندد، نامش اینجا نمایش خواهد یافت.", "empty_column.follow_requests": "شما هنوز هیچ درخواست پیگیریای ندارید. وقتی چنین درخواستی بگیرید، اینجا نمایش خواهد یافت.", - "empty_column.hashtag": "هنوز هیچ چیزی با این هشتگ نیست.", + "empty_column.hashtag": "هنوز هیچ چیزی با این برچسب (هشتگ) نیست.", "empty_column.home": "شما هنوز پیگیر کسی نیستید. {public} را ببینید یا چیزی را جستجو کنید تا کاربران دیگر را ببینید.", "empty_column.home.public_timeline": "فهرست نوشتههای همهجا", "empty_column.list": "در این فهرست هنوز چیزی نیست. وقتی اعضای این فهرست چیزی بنویسند، اینجا ظاهر خواهد شد.", @@ -134,6 +152,10 @@ "empty_column.mutes": "شما هنوز هیچ کاربری را بیصدا نکردهاید.", "empty_column.notifications": "هنوز هیچ اعلانی ندارید. به نوشتههای دیگران واکنش نشان دهید تا گفتگو آغاز شود.", "empty_column.public": "اینجا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران سرورهای دیگر را پی بگیرید تا اینجا پر شود", + "error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.", + "error.unexpected_crash.next_steps": "لطفاً صفحه را دوباره باز کنید. اگر آن هم کمکی نکرد، همچنان شاید بتوانید با ماستدون از راه یکی از اپهای آن کار کنید.", + "errors.unexpected_crash.copy_stacktrace": "کپی جزئیات اشکال", + "errors.unexpected_crash.report_issue": "گزارش اشکال", "follow_request.authorize": "اجازه دهید", "follow_request.reject": "اجازه ندهید", "getting_started.developers": "برای برنامهنویسان", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "نام فهرست تازه", "lists.search": "بین کسانی که پی میگیرید بگردید", "lists.subheading": "فهرستهای شما", + "load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}", "loading_indicator.label": "بارگیری...", "media_gallery.toggle_visible": "تغییر پیدایی", "missing_indicator.label": "پیدا نشد", @@ -246,7 +269,6 @@ "navigation_bar.personal": "شخصی", "navigation_bar.pins": "نوشتههای ثابت", "navigation_bar.preferences": "ترجیحات", - "navigation_bar.profile_directory": "فهرست گزیدهٔ کاربران", "navigation_bar.public_timeline": "نوشتههای همهجا", "navigation_bar.security": "امنیت", "notification.favourite": "{name} نوشتهٔ شما را پسندید", @@ -277,8 +299,10 @@ "notifications.group": "{count} اعلان", "poll.closed": "پایانیافته", "poll.refresh": "بهروزرسانی", + "poll.total_people": "{count, plural, one {# نفر} other {# نفر}}", "poll.total_votes": "{count, plural, one {# رأی} other {# رأی}}", "poll.vote": "رأی", + "poll.voted": "شما به این گزینه رأی دادید", "poll_button.add_poll": "افزودن نظرسنجی", "poll_button.remove_poll": "حذف نظرسنجی", "privacy.change": "تنظیم حریم خصوصی نوشتهها", @@ -290,6 +314,7 @@ "privacy.public.short": "عمومی", "privacy.unlisted.long": "عمومی، ولی فهرست نکن", "privacy.unlisted.short": "فهرستنشده", + "refresh": "بهروزرسانی", "regeneration_indicator.label": "در حال باز شدن…", "regeneration_indicator.sublabel": "این فهرست دارد آماده میشود!", "relative_time.days": "{number} روز", @@ -307,13 +332,14 @@ "search.placeholder": "جستجو", "search_popout.search_format": "راهنمای جستجوی پیشرفته", "search_popout.tips.full_text": "جستجوی متنی ساده میتواند بوقهایی که شما نوشتهاید، پسندیدهاید، بازبوقیدهاید، یا در آنها از شما نام برده شده است را پیدا کند. همچنین نامهای کاربری، نام نمایشیافته، و هشتگها را هم شامل میشود.", - "search_popout.tips.hashtag": "هشتگ", + "search_popout.tips.hashtag": "برچسب", "search_popout.tips.status": "نوشته", - "search_popout.tips.text": "جستجوی متنی ساده برای نامها، نامهای کاربری، و هشتگها", + "search_popout.tips.text": "جستجوی متنی ساده برای نامها، نامهای کاربری، و برچسبها", "search_popout.tips.user": "کاربر", "search_results.accounts": "افراد", - "search_results.hashtags": "هشتگها", + "search_results.hashtags": "برچسبها", "search_results.statuses": "بوقها", + "search_results.statuses_fts_disabled": "جستجوی محتوای بوقها در این سرور ماستدون ممکن نیست.", "search_results.total": "{count, number} {count, plural, one {نتیجه} other {نتیجه}}", "status.admin_account": "محیط مدیریت مربوط به @{name} را باز کن", "status.admin_status": "این نوشته را در محیط مدیریت باز کن", @@ -352,6 +378,7 @@ "status.show_more": "نمایش", "status.show_more_all": "نمایش بیشتر همه", "status.show_thread": "نمایش گفتگو", + "status.uncached_media_warning": "ناموجود", "status.unmute_conversation": "باصداکردن گفتگو", "status.unpin": "برداشتن نوشتهٔ ثابت نمایه", "suggestions.dismiss": "پیشنهاد را نادیده بگیر", @@ -367,14 +394,22 @@ "time_remaining.moments": "زمان باقیمانده", "time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده", "trends.count_by_accounts": "{count} {rawCount, plural, one {نفر نوشته است} other {نفر نوشتهاند}}", + "trends.trending_now": "پرطرفدار", "ui.beforeunload": "اگر از ماستدون خارج شوید پیشنویس شما پاک خواهد شد.", "upload_area.title": "برای بارگذاری به اینجا بکشید", "upload_button.label": "افزودن عکس و ویدیو (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "از حد مجاز باگذاری فراتر رفتید.", "upload_error.poll": "باگذاری پرونده در نظرسنجیها ممکن نیست.", "upload_form.description": "نوشتهٔ توضیحی برای کمبینایان و نابینایان", - "upload_form.focus": "تغییر پیشنمایش", + "upload_form.edit": "ویرایش", "upload_form.undo": "حذف", + "upload_modal.analyzing_picture": "در حال پردازش تصویر…", + "upload_modal.apply": "اجرا", + "upload_modal.description_placeholder": "مردی با بیل مادرزنش را کشت", + "upload_modal.detect_text": "پیدا کردن نوشته از درون تصویر", + "upload_modal.edit_media": "ویرایش تصویر", + "upload_modal.hint": "حتی اگر تصویر بریده یا کوچک شود، نقطهٔ کانونی آن همیشه دیده خواهد شد. نقطهٔ کانونی را با کلیک یا جابهجا کردن آن تنظیم کنید.", + "upload_modal.preview_label": "پیشنمایش ({ratio})", "upload_progress.label": "بارگذاری...", "video.close": "بستن ویدیو", "video.exit_fullscreen": "خروج از حالت تمام صفحه", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4eca05ca5..60fa0c296 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -4,17 +4,19 @@ "account.block": "Estä @{name}", "account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}", "account.blocked": "Estetty", + "account.cancel_follow_request": "Peruuta seurauspyyntö", "account.direct": "Viesti käyttäjälle @{name}", "account.domain_blocked": "Verkko-osoite piilotettu", - "account.edit_profile": "Muokkaa", + "account.edit_profile": "Muokkaa profiilia", "account.endorse": "Suosittele profiilissasi", "account.follow": "Seuraa", - "account.followers": "Seuraajia", + "account.followers": "Seuraajaa", "account.followers.empty": "Tällä käyttäjällä ei ole vielä seuraajia.", "account.follows": "Seuraa", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", "account.follows_you": "Seuraa sinua", "account.hide_reblogs": "Piilota buustaukset käyttäjältä @{name}", + "account.last_status": "Aktiivinen viimeksi", "account.link_verified_on": "Tämän linkin omistaja tarkistettiin {date}", "account.locked_info": "Tämän tili on yksityinen. Käyttäjä vahvistaa itse kuka voi seurata häntä.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Mykistä @{name}", "account.mute_notifications": "Mykistä ilmoitukset käyttäjältä @{name}", "account.muted": "Mykistetty", + "account.never_active": "Ei koskaan", "account.posts": "Tuuttaukset", "account.posts_with_replies": "Tuuttaukset ja vastaukset", "account.report": "Raportoi @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Lakkaa seuraamasta", "account.unmute": "Poista käyttäjän @{name} mykistys", "account.unmute_notifications": "Poista mykistys käyttäjän @{name} ilmoituksilta", + "alert.rate_limited.message": "Yritä uudestaan {retry_time, time, medium} jälkeen.", + "alert.rate_limited.title": "Määrää rajoitettu", "alert.unexpected.message": "Tapahtui odottamaton virhe.", "alert.unexpected.title": "Hups!", + "autosuggest_hashtag.per_week": "{count} viikossa", "boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}", "bundle_column_error.body": "Jokin meni vikaan komponenttia ladattaessa.", "bundle_column_error.retry": "Yritä uudestaan", @@ -47,6 +53,7 @@ "column.blocks": "Estetyt käyttäjät", "column.community": "Paikallinen aikajana", "column.direct": "Viestit", + "column.directory": "Selaa profiileja", "column.domain_blocks": "Piilotetut verkkotunnukset", "column.favourites": "Suosikit", "column.follow_requests": "Seuraamispyynnöt", @@ -71,20 +78,20 @@ "compose_form.lock_disclaimer": "Tilisi ei ole {locked}. Kuka tahansa voi seurata tiliäsi ja nähdä vain seuraajille rajaamasi julkaisut.", "compose_form.lock_disclaimer.lock": "lukittu", "compose_form.placeholder": "Mitä mietit?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Lisää valinta", + "compose_form.poll.duration": "Äänestyksen kesto", + "compose_form.poll.option_placeholder": "Valinta numero", + "compose_form.poll.remove_option": "Poista tämä valinta", "compose_form.publish": "Tuuttaa", - "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.publish_loud": "Julkista!", + "compose_form.sensitive.hide": "Valitse tämä arkaluontoisena", "compose_form.sensitive.marked": "Media on merkitty arkaluontoiseksi", "compose_form.sensitive.unmarked": "Mediaa ei ole merkitty arkaluontoiseksi", "compose_form.spoiler.marked": "Teksti on piilotettu varoituksen taakse", "compose_form.spoiler.unmarked": "Teksti ei ole piilotettu", "compose_form.spoiler_placeholder": "Sisältövaroitus", "confirmation_modal.cancel": "Peruuta", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Estä ja raportoi", "confirmations.block.confirm": "Estä", "confirmations.block.message": "Haluatko varmasti estää käyttäjän {name}?", "confirmations.delete.confirm": "Poista", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Haluatko varmasti poistaa tämän listan kokonaan?", "confirmations.domain_block.confirm": "Piilota koko verkko-osoite", "confirmations.domain_block.message": "Haluatko aivan varmasti estää koko verkko-osoitteen {domain}? Useimmiten jokunen kohdistettu esto ja mykistys riittää, ja se on suositeltavampi tapa toimia.", + "confirmations.logout.confirm": "Kirjaudu ulos", + "confirmations.logout.message": "Oletko varma, että haluat kirjautua ulos?", "confirmations.mute.confirm": "Mykistä", + "confirmations.mute.explanation": "Tämä piilottaa päivitykset heiltä ja päivitykset, joissa hänet mainitaan, mutta sallii silti heidän nähdä sinun päivityksesi ja seurata sinua.", "confirmations.mute.message": "Haluatko varmasti mykistää käyttäjän {name}?", "confirmations.redraft.confirm": "Poista & palauta muokattavaksi", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Jos vastaat nyt, vastaus korvaa tällä hetkellä työstämäsi viestin. Oletko varma, että haluat jatkaa?", "confirmations.unfollow.confirm": "Lakkaa seuraamasta", "confirmations.unfollow.message": "Haluatko varmasti lakata seuraamasta käyttäjää {name}?", + "conversation.delete": "Poista keskustelu", + "conversation.mark_as_read": "Merkitse luetuksi", + "conversation.open": "Näytä keskustelu", + "conversation.with": "{names} kanssa", + "directory.federated": "Koko tunnettu fediverse", + "directory.local": "Vain palvelimelta {domain}", + "directory.new_arrivals": "Äskettäin saapuneet", + "directory.recently_active": "Hiljattain aktiiviset", "embed.instructions": "Upota statuspäivitys sivullesi kopioimalla alla oleva koodi.", "embed.preview": "Se tulee näyttämään tältä:", "emoji_button.activity": "Aktiviteetit", @@ -118,7 +136,7 @@ "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu", "empty_column.account_timeline": "Ei ole 'toots' täällä!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_unavailable": "Profiilia ei löydy", "empty_column.blocks": "Et ole vielä estänyt yhtään käyttäjää.", "empty_column.community": "Paikallinen aikajana on tyhjä. Homma lähtee käyntiin, kun kirjoitat jotain julkista!", "empty_column.direct": "Sinulla ei ole vielä yhtään viestiä yksittäiselle käyttäjälle. Kun lähetät tai vastaanotat sellaisen, se näkyy täällä.", @@ -134,11 +152,15 @@ "empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.", "empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.", "empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt seuraamassa muiden instanssien käyttäjiä", + "error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.", + "error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos tämä ei auta, saatat yhä pystyä käyttämään Mastodonia toisen selaimen tai sovelluksen kautta.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Ilmoita ongelmasta", "follow_request.authorize": "Valtuuta", "follow_request.reject": "Hylkää", "getting_started.developers": "Kehittäjille", "getting_started.directory": "Profiili hakemisto", - "getting_started.documentation": "Documentation", + "getting_started.documentation": "Documentaatio", "getting_started.heading": "Aloitus", "getting_started.invite": "Kutsu ihmisiä", "getting_started.open_source_notice": "Mastodon on avoimen lähdekoodin ohjelma. Voit avustaa tai raportoida ongelmia GitHubissa: {github}.", @@ -147,8 +169,8 @@ "hashtag.column_header.tag_mode.all": "ja {additional}", "hashtag.column_header.tag_mode.any": "tai {additional}", "hashtag.column_header.tag_mode.none": "ilman {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.select.no_options_message": "Ehdostuta ei löydetty", + "hashtag.column_settings.select.placeholder": "Laita häshtägejä…", "hashtag.column_settings.tag_mode.all": "Kaikki", "hashtag.column_settings.tag_mode.any": "Kaikki", "hashtag.column_settings.tag_mode.none": "Ei mikään", @@ -156,26 +178,26 @@ "home.column_settings.basic": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä buustaukset", "home.column_settings.show_replies": "Näytä vastaukset", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.days": "Päivä päiviä", + "intervals.full.hours": "Tunti tunteja", + "intervals.full.minutes": "Minuuti minuuteja", "introduction.federation.action": "Seuraava", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "introduction.federation.federated.headline": "Federaatioitettu", + "introduction.federation.federated.text": "Julkisia viestejä muiden serverien that is not a word aikoo tulla federoituun aikajanaan.", + "introduction.federation.home.headline": "Koti", + "introduction.federation.home.text": "Viestit muilta pelaajilta jota seuraat aikovat tulla koti sivuusi. Voit seurata ketä vain missä vain serverillä!", + "introduction.federation.local.headline": "Paikallinen", + "introduction.federation.local.text": "Julkiset viestit muilta pelaajilta samalla serverillä tulevat sinun paikalliseen aikajanaan.", + "introduction.interactions.action": "Suorita harjoitus!", + "introduction.interactions.favourite.headline": "Lempi", + "introduction.interactions.favourite.text": "Toot is not a word.", + "introduction.interactions.reblog.headline": "Nopeutus", + "introduction.interactions.reblog.text": "Toot is not a word", + "introduction.interactions.reply.headline": "Vastaa", + "introduction.interactions.reply.text": "TOOT IS NOT A WORD", + "introduction.welcome.action": "Mennään!", + "introduction.welcome.headline": "Ensimmäiset askeleet", + "introduction.welcome.text": "Tervetuloa fediverseen! Muutaman hetken kuluttua voit lähettää viestejä ja jutella ystävillesi useiden palvelinten halki. Mutta tämä palvelin {domain}, on erityinen — sinun profiilisi sijaitsee sillä, joten muista sen nimi.", "keyboard_shortcuts.back": "liiku taaksepäin", "keyboard_shortcuts.blocked": "avaa lista estetyistä käyttäjistä", "keyboard_shortcuts.boost": "buustaa", @@ -204,83 +226,85 @@ "keyboard_shortcuts.search": "siirry hakukenttään", "keyboard_shortcuts.start": "avaa \"Aloitus\" -sarake", "keyboard_shortcuts.toggle_hidden": "näytä/piilota sisältövaroituksella merkitty teksti", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "näytä/piilota media", "keyboard_shortcuts.toot": "ala kirjoittaa uutta tuuttausta", "keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä", "keyboard_shortcuts.up": "siirry listassa ylöspäin", "lightbox.close": "Sulje", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", - "lightbox.view_context": "View context", + "lightbox.view_context": "Näytä kontekstissa", "lists.account.add": "Lisää listaan", "lists.account.remove": "Poista listasta", "lists.delete": "Poista lista", "lists.edit": "Muokkaa listaa", - "lists.edit.submit": "Change title", + "lists.edit.submit": "Vaihda otsikko", "lists.new.create": "Lisää lista", "lists.new.title_placeholder": "Uuden listan nimi", "lists.search": "Etsi seuraamistasi henkilöistä", "lists.subheading": "Omat listat", + "load_pending": "{count, plural, one {# uusi kappale} other {# uutta kappaletta}}", "loading_indicator.label": "Ladataan...", "media_gallery.toggle_visible": "Säädä näkyvyyttä", "missing_indicator.label": "Ei löytynyt", "missing_indicator.sublabel": "Tätä resurssia ei löytynyt", "mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?", - "navigation_bar.apps": "Mobiiliapplikaatiot", + "navigation_bar.apps": "Mobiilisovellukset", "navigation_bar.blocks": "Estetyt käyttäjät", "navigation_bar.community_timeline": "Paikallinen aikajana", "navigation_bar.compose": "Kirjoita uusi tuuttaus", "navigation_bar.direct": "Viestit", - "navigation_bar.discover": "Discover", + "navigation_bar.discover": "Löydä uutta", "navigation_bar.domain_blocks": "Piilotetut verkkotunnukset", "navigation_bar.edit_profile": "Muokkaa profiilia", "navigation_bar.favourites": "Suosikit", "navigation_bar.filters": "Mykistetyt sanat", "navigation_bar.follow_requests": "Seuraamispyynnöt", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Seurattavat ja seuraajat", "navigation_bar.info": "Tietoa tästä instanssista", "navigation_bar.keyboard_shortcuts": "Näppäinkomennot", "navigation_bar.lists": "Listat", "navigation_bar.logout": "Kirjaudu ulos", "navigation_bar.mutes": "Mykistetyt käyttäjät", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "Henkilökohtaiset", "navigation_bar.pins": "Kiinnitetyt tuuttaukset", "navigation_bar.preferences": "Asetukset", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Yleinen aikajana", "navigation_bar.security": "Tunnukset", "notification.favourite": "{name} tykkäsi tilastasi", "notification.follow": "{name} seurasi sinua", "notification.mention": "{name} mainitsi sinut", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Kysely, johon osallistuit, on päättynyt", "notification.reblog": "{name} buustasi tilaasi", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", "notifications.column_settings.alert": "Työpöytäilmoitukset", "notifications.column_settings.favourite": "Tykkäykset:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Näytä kaikki kategoriat", + "notifications.column_settings.filter_bar.category": "Pikasuodatuspalkki", + "notifications.column_settings.filter_bar.show": "Näytä", "notifications.column_settings.follow": "Uudet seuraajat:", "notifications.column_settings.mention": "Maininnat:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Kyselyn tulokset:", "notifications.column_settings.push": "Push-ilmoitukset", "notifications.column_settings.reblog": "Buustit:", "notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.sound": "Äänimerkki", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.group": "{count} notifications", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "notifications.filter.all": "Kaikki", + "notifications.filter.boosts": "Buustit", + "notifications.filter.favourites": "Suosikit", + "notifications.filter.follows": "Seuraa", + "notifications.filter.mentions": "Maininnat", + "notifications.filter.polls": "Kyselyn tulokset", + "notifications.group": "{count} ilmoitusta", + "poll.closed": "Suljettu", + "poll.refresh": "Päivitä", + "poll.total_people": "{count, plural, one {# henkilö} other {# henkilöä}}", + "poll.total_votes": "{count, plural, one {# ääni} other {# ääntä}}", + "poll.vote": "Äänestä", + "poll.voted": "Äänestit tätä vastausta", + "poll_button.add_poll": "Lisää kysely", + "poll_button.remove_poll": "Poista kysely", "privacy.change": "Säädä tuuttauksen näkyvyyttä", "privacy.direct.long": "Julkaise vain mainituille käyttäjille", "privacy.direct.short": "Suora viesti", @@ -290,6 +314,7 @@ "privacy.public.short": "Julkinen", "privacy.unlisted.long": "Älä julkaise julkisilla aikajanoilla", "privacy.unlisted.short": "Listaamaton julkinen", + "refresh": "Päivitä", "regeneration_indicator.label": "Ladataan…", "regeneration_indicator.sublabel": "Kotinäkymääsi valmistellaan!", "relative_time.days": "{number} pv", @@ -307,22 +332,23 @@ "search.placeholder": "Hae", "search_popout.search_format": "Tarkennettu haku", "search_popout.tips.full_text": "Tekstihaku palauttaa tilapäivitykset, jotka olet kirjoittanut, lisännyt suosikkeihisi, boostannut tai joissa sinut mainitaan, sekä tekstin sisältävät käyttäjänimet, nimimerkit ja hastagit.", - "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.hashtag": "hashtagit", "search_popout.tips.status": "tila", "search_popout.tips.text": "Tekstihaku palauttaa hakua vastaavat nimimerkit, käyttäjänimet ja hastagit", "search_popout.tips.user": "käyttäjä", "search_results.accounts": "Ihmiset", "search_results.hashtags": "Hashtagit", "search_results.statuses": "Tuuttaukset", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", + "search_results.statuses_fts_disabled": "Tuuttausten haku sisällön perusteella ei ole käytössä tällä Mastodon-serverillä.", + "search_results.total": "{count, number} {count, plural, one {tulos} other {tulosta}}", + "status.admin_account": "Avaa moderaattorinäkymä tilistä @{name}", + "status.admin_status": "Avaa tilapäivitys moderaattorinäkymässä", "status.block": "Estä @{name}", "status.cancel_reblog_private": "Peru buustaus", "status.cannot_reblog": "Tätä julkaisua ei voi buustata", - "status.copy": "Copy link to status", + "status.copy": "Kopioi linkki tilapäivitykseen", "status.delete": "Poista", - "status.detailed_status": "Detailed conversation view", + "status.detailed_status": "Yksityiskohtainen keskustelunäkymä", "status.direct": "Viesti käyttäjälle @{name}", "status.embed": "Upota", "status.favourite": "Tykkää", @@ -340,7 +366,7 @@ "status.reblog": "Buustaa", "status.reblog_private": "Buustaa alkuperäiselle yleisölle", "status.reblogged_by": "{name} buustasi", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.reblogs.empty": "Kukaan ei ole vielä buustannut tätä tuuttausta. Kun joku tekee niin, näkyy kyseinen henkilö tässä.", "status.redraft": "Poista & palauta muokattavaksi", "status.reply": "Vastaa", "status.replyAll": "Vastaa ketjuun", @@ -351,30 +377,39 @@ "status.show_less_all": "Näytä vähemmän kaikista", "status.show_more": "Näytä lisää", "status.show_more_all": "Näytä lisää kaikista", - "status.show_thread": "Show thread", + "status.show_thread": "Näytä ketju", + "status.uncached_media_warning": "Ei saatavilla", "status.unmute_conversation": "Poista keskustelun mykistys", "status.unpin": "Irrota profiilista", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Hylkää ehdotus", + "suggestions.header": "Saatat olla kiinnostunut myös…", "tabs_bar.federated_timeline": "Yleinen", "tabs_bar.home": "Koti", "tabs_bar.local_timeline": "Paikallinen", "tabs_bar.notifications": "Ilmoitukset", "tabs_bar.search": "Hae", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "time_remaining.days": "{number, plural, one {# päivä} other {# päivää}} jäljellä", + "time_remaining.hours": "{number, plural, one {# tunti} other {# tuntia}} jäljellä", + "time_remaining.minutes": "{number, plural, one {# minuutti} other {# minuuttia}} jäljellä", + "time_remaining.moments": "Hetki jäljellä", + "time_remaining.seconds": "{number, plural, one {# sekunti} other {# sekuntia}} jäljellä", + "trends.count_by_accounts": "{count} {rawCount, plural, one {henkilö} other {henkilöä}} keskustelee", + "trends.trending_now": "Suosittua nyt", "ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.", "upload_area.title": "Lataa raahaamalla ja pudottamalla tähän", "upload_button.label": "Lisää mediaa", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.limit": "Tiedostolatauksien raja ylitetty.", + "upload_error.poll": "Tiedon lataaminen ei ole sallittua kyselyissä.", "upload_form.description": "Anna kuvaus näkörajoitteisia varten", - "upload_form.focus": "Rajaa", + "upload_form.edit": "Muokkaa", "upload_form.undo": "Peru", + "upload_modal.analyzing_picture": "Analysoidaan kuvaa…", + "upload_modal.apply": "Käytä", + "upload_modal.description_placeholder": "Eräänä jäätävänä ja pimeänä yönä gorilla ratkaisi sudokun kahdessa minuutissa", + "upload_modal.detect_text": "Tunnista teksti kuvasta", + "upload_modal.edit_media": "Muokkaa mediaa", + "upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.", + "upload_modal.preview_label": "Esikatselu ({ratio})", "upload_progress.label": "Ladataan...", "video.close": "Sulje video", "video.exit_fullscreen": "Poistu koko näytön tilasta", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 06bb70e02..a92f23415 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -3,11 +3,12 @@ "account.badges.bot": "Robot", "account.block": "Bloquer @{name}", "account.block_domain": "Tout masquer venant de {domain}", - "account.blocked": "Bloqué", + "account.blocked": "Bloqué·e", + "account.cancel_follow_request": "Annuler la demande de suivi", "account.direct": "Envoyer un message direct à @{name}", "account.domain_blocked": "Domaine caché", "account.edit_profile": "Modifier le profil", - "account.endorse": "Figure sur le profil", + "account.endorse": "Recommander sur le profil", "account.follow": "Suivre", "account.followers": "Abonné⋅e⋅s", "account.followers.empty": "Personne ne suit cet utilisateur·rice pour l’instant.", @@ -15,6 +16,7 @@ "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.", "account.follows_you": "Vous suit", "account.hide_reblogs": "Masquer les partages de @{name}", + "account.last_status": "Dernière activité", "account.link_verified_on": "La propriété de ce lien a été vérifiée le {date}", "account.locked_info": "Ce compte est verrouillé. Son propriétaire approuve manuellement qui peut le ou la suivre.", "account.media": "Média", @@ -22,7 +24,8 @@ "account.moved_to": "{name} a déménagé vers :", "account.mute": "Masquer @{name}", "account.mute_notifications": "Ignorer les notifications de @{name}", - "account.muted": "Silencé", + "account.muted": "Silencé·e", + "account.never_active": "Jamais", "account.posts": "Pouets", "account.posts_with_replies": "Pouets et réponses", "account.report": "Signaler @{name}", @@ -31,13 +34,16 @@ "account.show_reblogs": "Afficher les partages de @{name}", "account.unblock": "Débloquer @{name}", "account.unblock_domain": "Ne plus masquer {domain}", - "account.unendorse": "Ne figure pas sur le profil", + "account.unendorse": "Ne plus recommander sur le profil", "account.unfollow": "Ne plus suivre", "account.unmute": "Ne plus masquer @{name}", "account.unmute_notifications": "Réactiver les notifications de @{name}", + "alert.rate_limited.message": "Veuillez réessayer après {retry_time, time, medium}.", + "alert.rate_limited.title": "Débit limité", "alert.unexpected.message": "Une erreur inattendue s’est produite.", "alert.unexpected.title": "Oups !", - "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour pouvoir passer ceci, la prochaine fois", + "autosuggest_hashtag.per_week": "{count} par semaine", + "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci, la prochaine fois", "bundle_column_error.body": "Une erreur s’est produite lors du chargement de ce composant.", "bundle_column_error.retry": "Réessayer", "bundle_column_error.title": "Erreur réseau", @@ -46,10 +52,11 @@ "bundle_modal_error.retry": "Réessayer", "column.blocks": "Comptes bloqués", "column.community": "Fil public local", - "column.direct": "Messages directs", + "column.direct": "Messages privés", + "column.directory": "Parcourir les profils", "column.domain_blocks": "Domaines cachés", "column.favourites": "Favoris", - "column.follow_requests": "Demandes de suivi", + "column.follow_requests": "Demandes d'abonnement", "column.home": "Accueil", "column.lists": "Listes", "column.mutes": "Comptes masqués", @@ -62,12 +69,12 @@ "column_header.moveRight_settings": "Déplacer la colonne vers la droite", "column_header.pin": "Épingler", "column_header.show_settings": "Afficher les paramètres", - "column_header.unpin": "Retirer", + "column_header.unpin": "Désépingler", "column_subheading.settings": "Paramètres", "community.column_settings.media_only": "Média uniquement", "compose_form.direct_message_warning": "Ce pouet sera uniquement envoyé aux personnes mentionnées. Cependant, l’administration de votre instance et des instances réceptrices pourront inspecter ce message.", "compose_form.direct_message_warning_learn_more": "En savoir plus", - "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur \"non listé\". Seuls les pouets avec une visibilité \"publique\" peuvent être recherchés par hashtag.", + "compose_form.hashtag_warning": "Ce pouet ne sera pas listé dans les recherches par hashtag car sa visibilité est réglée sur « non listé ». Seuls les pouets avec une visibilité « publique » peuvent être recherchés par hashtag.", "compose_form.lock_disclaimer": "Votre compte n’est pas {locked}. Tout le monde peut vous suivre et voir vos pouets privés.", "compose_form.lock_disclaimer.lock": "verrouillé", "compose_form.placeholder": "Qu’avez-vous en tête ?", @@ -79,7 +86,7 @@ "compose_form.publish_loud": "{publish} !", "compose_form.sensitive.hide": "Marquer le média comme sensible", "compose_form.sensitive.marked": "Média marqué comme sensible", - "compose_form.sensitive.unmarked": "Média non marqué comme sensible", + "compose_form.sensitive.unmarked": "Le média n’est pas marqué comme sensible", "compose_form.spoiler.marked": "Le texte est caché derrière un avertissement", "compose_form.spoiler.unmarked": "Le texte n’est pas caché", "compose_form.spoiler_placeholder": "Écrivez ici votre avertissement", @@ -93,14 +100,25 @@ "confirmations.delete_list.message": "Êtes-vous sûr·e de vouloir supprimer définitivement cette liste ?", "confirmations.domain_block.confirm": "Masquer le domaine entier", "confirmations.domain_block.message": "Êtes-vous vraiment, vraiment sûr⋅e de vouloir bloquer {domain} en entier ? Dans la plupart des cas, quelques blocages ou masquages ciblés sont suffisants et préférables. Vous ne verrez plus de contenu provenant de ce domaine, ni dans fils publics, ni dans vos notifications. Vos abonné·e·s utilisant ce domaine seront retiré·e·s.", + "confirmations.logout.confirm": "Déconnexion", + "confirmations.logout.message": "Êtes-vous sûr·e de vouloir vous déconnecter ?", "confirmations.mute.confirm": "Masquer", - "confirmations.mute.message": "Confirmez-vous le masquage de {name} ?", + "confirmations.mute.explanation": "Cela masquera ses messages et les messages le ou la mentionnant, mais cela lui permettra quand même de voir vos messages et de vous suivre.", + "confirmations.mute.message": "Êtes-vous sûr·e de vouloir masquer {name} ?", "confirmations.redraft.confirm": "Effacer et ré-écrire", "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer ce statut pour le ré-écrire ? Ses partages ainsi que ses mises en favori seront perdu·e·s et ses réponses seront orphelines.", "confirmations.reply.confirm": "Répondre", - "confirmations.reply.message": "Répondre maintenant écrasera le message que vous êtes en train de composer. Voulez-vous vraiment continuer ?", + "confirmations.reply.message": "Répondre maintenant écrasera le message que vous composez actuellement. Êtes-vous sûr·e de vouloir continuer ?", "confirmations.unfollow.confirm": "Ne plus suivre", - "confirmations.unfollow.message": "Voulez-vous arrêter de suivre {name} ?", + "confirmations.unfollow.message": "Êtes-vous sûr·e de vouloir arrêter de suivre {name} ?", + "conversation.delete": "Supprimer la conversation", + "conversation.mark_as_read": "Marquer comme lu", + "conversation.open": "Afficher la conversation", + "conversation.with": "Avec {names}", + "directory.federated": "Du fédiverse connu", + "directory.local": "De {domain} seulement", + "directory.new_arrivals": "Nouveaux·elles arrivant·e·s", + "directory.recently_active": "Récemment actif·ve·s", "embed.instructions": "Intégrez ce statut à votre site en copiant le code ci-dessous.", "embed.preview": "Il apparaîtra comme cela :", "emoji_button.activity": "Activités", @@ -111,7 +129,7 @@ "emoji_button.nature": "Nature", "emoji_button.not_found": "Pas d’émoji !! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Objets", - "emoji_button.people": "Personnages", + "emoji_button.people": "Personnes", "emoji_button.recent": "Fréquemment utilisés", "emoji_button.search": "Recherche…", "emoji_button.search_results": "Résultats de la recherche", @@ -131,9 +149,13 @@ "empty_column.home.public_timeline": "le fil public", "empty_column.list": "Il n’y a rien dans cette liste pour l’instant. Dès que des personnes de cette liste publieront de nouveaux statuts, ils apparaîtront ici.", "empty_column.lists": "Vous n’avez pas encore de liste. Lorsque vous en créerez une, elle apparaîtra ici.", - "empty_column.mutes": "Vous n’avez pas encore mis d'utilisateur·rice·s en silence.", + "empty_column.mutes": "Vous n’avez pas encore silencié d’utilisateur·rice·s.", "empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.", - "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres instances pour remplir le fil public", + "empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public", + "error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.", + "error.unexpected_crash.next_steps": "Essayez de rafraîchir la page. Si cela n’aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.", + "errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier", + "errors.unexpected_crash.report_issue": "Signaler le problème", "follow_request.authorize": "Accepter", "follow_request.reject": "Rejeter", "getting_started.developers": "Développeur·euse·s", @@ -141,7 +163,7 @@ "getting_started.documentation": "Documentation", "getting_started.heading": "Pour commencer", "getting_started.invite": "Inviter des gens", - "getting_started.open_source_notice": "Mastodon est un logiciel libre. Vous pouvez contribuer et envoyer vos commentaires et rapports de bogues via {github} sur GitHub.", + "getting_started.open_source_notice": "Mastodon est un logiciel libre. Vous pouvez contribuer ou faire des rapports de bogues via {github} sur GitHub.", "getting_started.security": "Sécurité", "getting_started.terms": "Conditions d’utilisation", "hashtag.column_header.tag_mode.all": "et {additional}", @@ -152,8 +174,8 @@ "hashtag.column_settings.tag_mode.all": "Tous ces éléments", "hashtag.column_settings.tag_mode.any": "Au moins un de ces éléments", "hashtag.column_settings.tag_mode.none": "Aucun de ces éléments", - "hashtag.column_settings.tag_toggle": "Inclure des tags additionnels dans cette colonne", - "home.column_settings.basic": "Basique", + "hashtag.column_settings.tag_toggle": "Inclure des mots-clés additionnels dans cette colonne", + "home.column_settings.basic": "Base", "home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_replies": "Afficher les réponses", "intervals.full.days": "{number, plural, one {# jour} other {# jours}}", @@ -168,7 +190,7 @@ "introduction.federation.local.text": "Les messages publics de personnes se trouvant sur le même serveur que vous apparaîtront sur le fil public local.", "introduction.interactions.action": "Finir le tutoriel !", "introduction.interactions.favourite.headline": "Favoris", - "introduction.interactions.favourite.text": "Vous pouvez garder un pouet pour plus tard, et faire savoir à son auteur·ice que vous l'avez aimé, en le favorisant.", + "introduction.interactions.favourite.text": "Vous pouvez garder un pouet pour plus tard et faire savoir à son auteur·ice que vous l’avez aimé, en l'ajoutant aux favoris.", "introduction.interactions.reblog.headline": "Repartager", "introduction.interactions.reblog.text": "Vous pouvez partager les pouets d'autres personnes avec vos abonné·e·s en les repartageant.", "introduction.interactions.reply.headline": "Répondre", @@ -177,16 +199,16 @@ "introduction.welcome.headline": "Premiers pas", "introduction.welcome.text": "Bienvenue dans le fediverse ! Dans quelques instants, vous pourrez diffuser des messages et parler à vos amis sur une grande variété de serveurs. Mais ce serveur, {domain}, est spécial - il héberge votre profil, alors souvenez-vous de son nom.", "keyboard_shortcuts.back": "pour revenir en arrière", - "keyboard_shortcuts.blocked": "pour ouvrir une liste d’utilisateur·rice·s bloqué·e·s", + "keyboard_shortcuts.blocked": "pour ouvrir la liste des comptes bloqués", "keyboard_shortcuts.boost": "pour partager", "keyboard_shortcuts.column": "pour focaliser un statut dans l’une des colonnes", - "keyboard_shortcuts.compose": "pour centrer la zone de rédaction", + "keyboard_shortcuts.compose": "pour focaliser la zone de rédaction", "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "pour ouvrir une colonne des messages directs", + "keyboard_shortcuts.direct": "pour ouvrir la colonne des messages directs", "keyboard_shortcuts.down": "pour descendre dans la liste", "keyboard_shortcuts.enter": "pour ouvrir le statut", "keyboard_shortcuts.favourite": "pour ajouter aux favoris", - "keyboard_shortcuts.favourites": "pour ouvrir une liste de favoris", + "keyboard_shortcuts.favourites": "pour ouvrir la liste des pouets favoris", "keyboard_shortcuts.federated": "pour ouvrir le fil public global", "keyboard_shortcuts.heading": "Raccourcis clavier", "keyboard_shortcuts.home": "pour ouvrir l’accueil", @@ -194,7 +216,7 @@ "keyboard_shortcuts.legend": "pour afficher cette légende", "keyboard_shortcuts.local": "pour ouvrir le fil public local", "keyboard_shortcuts.mention": "pour mentionner l’auteur·rice", - "keyboard_shortcuts.muted": "pour ouvrir la liste des utilisateur·rice·s rendu·e·s muet·te·s", + "keyboard_shortcuts.muted": "pour ouvrir la liste des utilisateur·rice·s muté·e·s", "keyboard_shortcuts.my_profile": "pour ouvrir votre profil", "keyboard_shortcuts.notifications": "pour ouvrir votre colonne de notifications", "keyboard_shortcuts.pinned": "pour ouvrir une liste des pouets épinglés", @@ -202,7 +224,7 @@ "keyboard_shortcuts.reply": "pour répondre", "keyboard_shortcuts.requests": "pour ouvrir la liste de demandes de suivi", "keyboard_shortcuts.search": "pour cibler la recherche", - "keyboard_shortcuts.start": "pour ouvrir la colonne \"pour commencer\"", + "keyboard_shortcuts.start": "pour ouvrir la colonne « pour commencer »", "keyboard_shortcuts.toggle_hidden": "pour afficher/cacher un texte derrière CW", "keyboard_shortcuts.toggle_sensitivity": "pour afficher/cacher les médias", "keyboard_shortcuts.toot": "pour démarrer un tout nouveau pouet", @@ -214,13 +236,14 @@ "lightbox.view_context": "Voir le contexte", "lists.account.add": "Ajouter à la liste", "lists.account.remove": "Supprimer de la liste", - "lists.delete": "Effacer la liste", + "lists.delete": "Supprimer la liste", "lists.edit": "Éditer la liste", - "lists.edit.submit": "Changer le titre", + "lists.edit.submit": "Modifier le titre", "lists.new.create": "Ajouter une liste", "lists.new.title_placeholder": "Titre de la nouvelle liste", "lists.search": "Rechercher parmi les gens que vous suivez", "lists.subheading": "Vos listes", + "load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}", "loading_indicator.label": "Chargement…", "media_gallery.toggle_visible": "Modifier la visibilité", "missing_indicator.label": "Non trouvé", @@ -229,7 +252,7 @@ "navigation_bar.apps": "Applications mobiles", "navigation_bar.blocks": "Comptes bloqués", "navigation_bar.community_timeline": "Fil public local", - "navigation_bar.compose": "Rédiger un nouveau toot", + "navigation_bar.compose": "Rédiger un nouveau pouet", "navigation_bar.direct": "Messages directs", "navigation_bar.discover": "Découvrir", "navigation_bar.domain_blocks": "Domaines cachés", @@ -238,7 +261,7 @@ "navigation_bar.filters": "Mots silenciés", "navigation_bar.follow_requests": "Demandes de suivi", "navigation_bar.follows_and_followers": "Abonnements et abonné⋅e·s", - "navigation_bar.info": "Plus d’informations", + "navigation_bar.info": "À propos de ce serveur", "navigation_bar.keyboard_shortcuts": "Raccourcis clavier", "navigation_bar.lists": "Listes", "navigation_bar.logout": "Déconnexion", @@ -246,12 +269,11 @@ "navigation_bar.personal": "Personnel", "navigation_bar.pins": "Pouets épinglés", "navigation_bar.preferences": "Préférences", - "navigation_bar.profile_directory": "Annuaire des profils", "navigation_bar.public_timeline": "Fil public global", "navigation_bar.security": "Sécurité", "notification.favourite": "{name} a ajouté à ses favoris :", "notification.follow": "{name} vous suit", - "notification.mention": "{name} vous a mentionné :", + "notification.mention": "{name} vous a mentionné·e :", "notification.poll": "Un sondage auquel vous avez participé vient de se terminer", "notification.reblog": "{name} a partagé votre statut :", "notifications.clear": "Nettoyer les notifications", @@ -263,8 +285,8 @@ "notifications.column_settings.filter_bar.show": "Afficher", "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e·s :", "notifications.column_settings.mention": "Mentions :", - "notifications.column_settings.poll": "Résultats du sondage :", - "notifications.column_settings.push": "Notifications", + "notifications.column_settings.poll": "Résultats des sondage :", + "notifications.column_settings.push": "Notifications push", "notifications.column_settings.reblog": "Partages :", "notifications.column_settings.show": "Afficher dans la colonne", "notifications.column_settings.sound": "Émettre un son", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Fermé", "poll.refresh": "Actualiser", + "poll.total_people": "{count, plural, one {# personne} other {# personnes}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Voter", + "poll.voted": "Vous avez voté pour cette réponse", "poll_button.add_poll": "Ajouter un sondage", "poll_button.remove_poll": "Supprimer le sondage", "privacy.change": "Ajuster la confidentialité du message", @@ -290,8 +314,9 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Ne pas afficher dans les fils publics", "privacy.unlisted.short": "Non listé", + "refresh": "Actualiser", "regeneration_indicator.label": "Chargement…", - "regeneration_indicator.sublabel": "Le flux de votre page principale est en cours de préparation !", + "regeneration_indicator.sublabel": "Votre fil principal est en cours de préparation !", "relative_time.days": "{number} j", "relative_time.hours": "{number} h", "relative_time.just_now": "à l’instant", @@ -299,14 +324,14 @@ "relative_time.seconds": "{number} s", "reply_indicator.cancel": "Annuler", "report.forward": "Transférer à {target}", - "report.forward_hint": "Le compte provient d’un autre serveur. Envoyez également une copie anonyme du rapport ?", + "report.forward_hint": "Le compte provient d’un autre serveur. Envoyer également une copie anonyme du rapport ?", "report.hint": "Le rapport sera envoyé aux modérateur·rice·s de votre instance. Vous pouvez expliquer pourquoi vous signalez le compte ci-dessous :", "report.placeholder": "Commentaires additionnels", "report.submit": "Envoyer", - "report.target": "Signalement", + "report.target": "Signalement de {target}", "search.placeholder": "Rechercher", "search_popout.search_format": "Recherche avancée", - "search_popout.tips.full_text": "Les textes simples retournent les pouets que vous avez écris, mis en favori, épinglés, ou ayant été mentionnés, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondant.", + "search_popout.tips.full_text": "Les textes simples retournent les pouets que vous avez écris, mis en favori, épinglés, ou vous mentionnant, ainsi que les identifiants, les noms affichés, et les hashtags des personnes et messages correspondant.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "statuts", "search_popout.tips.text": "Un texte simple renvoie les noms affichés, les identifiants et les hashtags correspondants", @@ -314,12 +339,13 @@ "search_results.accounts": "Comptes", "search_results.hashtags": "Hashtags", "search_results.statuses": "Pouets", + "search_results.statuses_fts_disabled": "La recherche de pouets par leur contenu n'est pas activée sur ce serveur Mastodon.", "search_results.total": "{count, number} {count, plural, one {résultat} other {résultats}}", - "status.admin_account": "Ouvrir l'interface de modération pour @{name}", - "status.admin_status": "Ouvrir ce statut dans l'interface de modération", + "status.admin_account": "Ouvrir l’interface de modération pour @{name}", + "status.admin_status": "Ouvrir ce statut dans l’interface de modération", "status.block": "Bloquer @{name}", "status.cancel_reblog_private": "Dé-booster", - "status.cannot_reblog": "Cette publication ne peut être boostée", + "status.cannot_reblog": "Ce pouet ne peut pas être partagé", "status.copy": "Copier le lien vers le pouet", "status.delete": "Effacer", "status.detailed_status": "Vue détaillée de la conversation", @@ -352,10 +378,11 @@ "status.show_more": "Déplier", "status.show_more_all": "Tout déplier", "status.show_thread": "Lire le fil", + "status.uncached_media_warning": "Indisponible", "status.unmute_conversation": "Ne plus masquer la conversation", "status.unpin": "Retirer du profil", "suggestions.dismiss": "Rejeter la suggestion", - "suggestions.header": "Vous pourriez être intéressé par…", + "suggestions.header": "Vous pourriez être intéressé·e par…", "tabs_bar.federated_timeline": "Fil public global", "tabs_bar.home": "Accueil", "tabs_bar.local_timeline": "Fil public local", @@ -367,14 +394,22 @@ "time_remaining.moments": "Encore quelques instants", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} restantes", "trends.count_by_accounts": "{count} {rawCount, plural, one {personne} other {personnes}} discutent", + "trends.trending_now": "Tendance en ce moment", "ui.beforeunload": "Votre brouillon sera perdu si vous quittez Mastodon.", "upload_area.title": "Glissez et déposez pour envoyer", - "upload_button.label": "Joindre un média (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Joindre un média ({formats})", "upload_error.limit": "Taille maximale d'envoi de fichier dépassée.", - "upload_error.poll": "L'envoi de fichiers n'est pas autorisé avec les sondages.", + "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.", "upload_form.description": "Décrire pour les malvoyant·e·s", - "upload_form.focus": "Modifier l’aperçu", + "upload_form.edit": "Modifier", "upload_form.undo": "Supprimer", + "upload_modal.analyzing_picture": "Analyse de l’image en cours…", + "upload_modal.apply": "Appliquer", + "upload_modal.description_placeholder": "Buvez de ce whisky que le patron juge fameux", + "upload_modal.detect_text": "Détecter le texte de l’image", + "upload_modal.edit_media": "Modifier le média", + "upload_modal.hint": "Cliquez ou faites glisser le cercle sur l’aperçu pour choisir le point focal qui sera toujours visible sur toutes les miniatures.", + "upload_modal.preview_label": "Aperçu ({ratio})", "upload_progress.label": "Envoi en cours…", "video.close": "Fermer la vidéo", "video.exit_fullscreen": "Quitter le plein écran", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json new file mode 100644 index 000000000..2dd0dbbad --- /dev/null +++ b/app/javascript/mastodon/locales/ga.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.block": "Block @{name}", + "account.block_domain": "Hide everything from {domain}", + "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "Edit profile", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.follows": "Follows", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unhide {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Hidden domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Post to followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Post to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost to original audience", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading...", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 9b19d6f11..0125754b1 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -4,6 +4,7 @@ "account.block": "Bloquear @{name}", "account.block_domain": "Ocultar calquer contido de {domain}", "account.blocked": "Bloqueada", + "account.cancel_follow_request": "Cancelar petición de seguemento", "account.direct": "Mensaxe directa @{name}", "account.domain_blocked": "Dominio agochado", "account.edit_profile": "Editar perfil", @@ -15,6 +16,7 @@ "account.follows.empty": "Esta usuaria aínda non segue a ninguén.", "account.follows_you": "Séguete", "account.hide_reblogs": "Ocultar repeticións de @{name}", + "account.last_status": "Último activo", "account.link_verified_on": "A propiedade de esta ligazón foi comprobada en {date}", "account.locked_info": "O estado da intimidade de esta conta estableceuse en pechado. A persoa dona da conta revisa quen pode seguila.", "account.media": "Medios", @@ -23,6 +25,7 @@ "account.mute": "Acalar @{name}", "account.mute_notifications": "Acalar as notificacións de @{name}", "account.muted": "Acalada", + "account.never_active": "Nunca", "account.posts": "Toots", "account.posts_with_replies": "Toots e respostas", "account.report": "Informar sobre @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Non seguir", "account.unmute": "Non acalar @{name}", "account.unmute_notifications": "Desbloquear as notificacións de @{name}", + "alert.rate_limited.message": "Por favor inténteo tras {retry_time, time, medium}.", + "alert.rate_limited.title": "Taxa limitada", "alert.unexpected.message": "Aconteceu un fallo non agardado.", "alert.unexpected.title": "Vaia!", + "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Pulse {combo} para saltar esto a próxima vez", "bundle_column_error.body": "Houbo un fallo mentras se cargaba este compoñente.", "bundle_column_error.retry": "Inténteo de novo", @@ -47,6 +53,7 @@ "column.blocks": "Usuarias bloqueadas", "column.community": "Liña temporal local", "column.direct": "Mensaxes directas", + "column.directory": "Ver perfiles", "column.domain_blocks": "Dominios agochados", "column.favourites": "Favoritas", "column.follow_requests": "Peticións de seguimento", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Estás seguro de que queres eliminar permanentemente esta lista?", "confirmations.domain_block.confirm": "Agochar un dominio completo", "confirmations.domain_block.message": "Realmente está segura de que quere bloquear por completo o dominio {domain}? Normalmente é suficiente, e preferible, bloquear de xeito selectivo varios elementos. Non verá contidos de ese dominio en ningunha liña temporal ou nas notificacións. As súas seguidoras en ese dominio serán eliminadas.", + "confirmations.logout.confirm": "Desconectar", + "confirmations.logout.message": "Seguro que desexa desconectar?", "confirmations.mute.confirm": "Acalar", + "confirmations.mute.explanation": "Esto ocultará as publicacións delas e as que as mencionen, pero poderán seguir lendo as túas publicacións e seguirte.", "confirmations.mute.message": "Está segura de que quere acalar a {name}?", "confirmations.redraft.confirm": "Eliminar e reescribir", "confirmations.redraft.message": "Está segura de querer eliminar este estado e voltalo a escribir? Perderá réplicas e favoritas, e as respostas ao orixinal quedarán orfas.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Respostando agora sobreescribirá a mensaxe que está a compoñer. Segura de querer proceder?", "confirmations.unfollow.confirm": "Deixar de seguir", "confirmations.unfollow.message": "Quere deixar de seguir a {name}?", + "conversation.delete": "Eliminar conversa", + "conversation.mark_as_read": "Marcar como lido", + "conversation.open": "Ver conversa", + "conversation.with": "Con {names}", + "directory.federated": "Desde o fediverso coñecido", + "directory.local": "Só desde {domain}", + "directory.new_arrivals": "Novas achegas", + "directory.recently_active": "Activo recentemente", "embed.instructions": "Copie o código inferior para incrustar no seu sitio web este estado.", "embed.preview": "Así será mostrado:", "emoji_button.activity": "Actividade", @@ -134,6 +152,10 @@ "empty_column.mutes": "Non acalou ningunha usuaria polo de agora.", "empty_column.notifications": "Aínda non ten notificacións. Interactúe con outras para iniciar unha conversa.", "empty_column.public": "Nada por aquí! Escriba algo de xeito público, ou siga manualmente usuarias de outros servidores para ir enchéndoa", + "error.unexpected_crash.explanation": "Non se mostra correctamente a páxina debido a un fallo no código ou problema de compatibilidade do navegador.", + "error.unexpected_crash.next_steps": "Intenta actualizar a páxina. Se esto non axuda podes tamén utilizar Mastodon en outro navegador ou app nativa.", + "errors.unexpected_crash.copy_stacktrace": "Copiar trazas ao portaretallos", + "errors.unexpected_crash.report_issue": "Informar de problema", "follow_request.authorize": "Autorizar", "follow_request.reject": "Rexeitar", "getting_started.developers": "Desenvolvedoras", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Novo título da lista", "lists.search": "Procurar entre a xente que segues", "lists.subheading": "As túas listas", + "load_pending": "{count, plural, one {# novo elemento} other {# novos elementos}}", "loading_indicator.label": "Cargando...", "media_gallery.toggle_visible": "Ocultar", "missing_indicator.label": "Non atopado", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Persoal", "navigation_bar.pins": "Mensaxes fixadas", "navigation_bar.preferences": "Preferencias", - "navigation_bar.profile_directory": "Directorio de perfil", "navigation_bar.public_timeline": "Liña temporal federada", "navigation_bar.security": "Seguridade", "notification.favourite": "{name} marcou como favorito o seu estado", @@ -277,8 +299,10 @@ "notifications.group": "{count} notificacións", "poll.closed": "Pechado", "poll.refresh": "Actualizar", + "poll.total_people": "{count, plural,one {# persoa}other {# persoas}}", "poll.total_votes": "{count, plural, one {# voto} outros {# votos}}", "poll.vote": "Votar", + "poll.voted": "Votou por esta opción", "poll_button.add_poll": "Engadir sondaxe", "poll_button.remove_poll": "Eliminar sondaxe", "privacy.change": "Axustar a intimidade do estado", @@ -290,6 +314,7 @@ "privacy.public.short": "Pública", "privacy.unlisted.long": "Non publicar en liñas temporais públicas", "privacy.unlisted.short": "Non listada", + "refresh": "Actualizar", "regeneration_indicator.label": "Cargando…", "regeneration_indicator.sublabel": "Estase a preparar a súa liña temporal de inicio!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "Xente", "search_results.hashtags": "Etiquetas", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Non está activada neste servidor Mastodon a busca de toots polo seu contido.", "search_results.total": "{count, number} {count,plural,one {result} outros {results}}", "status.admin_account": "Abrir interface de moderación para @{name}", "status.admin_status": "Abrir este estado na interface de moderación", @@ -352,6 +378,7 @@ "status.show_more": "Mostrar máis", "status.show_more_all": "Mostrar máis para todas", "status.show_thread": "Mostrar fío", + "status.uncached_media_warning": "Non dispoñible", "status.unmute_conversation": "Non acalar a conversa", "status.unpin": "Despegar do perfil", "suggestions.dismiss": "Rexeitar suxestión", @@ -367,14 +394,22 @@ "time_remaining.moments": "Está rematando", "time_remaining.seconds": "{number, plural, one {# segundo} other {# segundos}} restantes", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} outras {people}} conversando", + "trends.trending_now": "Tendencias actuais", "ui.beforeunload": "O borrador perderase se sae de Mastodon.", "upload_area.title": "Arrastre e solte para subir", - "upload_button.label": "Engadir medios (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Engadir medios ({formats})", "upload_error.limit": "Excedeu o límite de subida de ficheiros.", "upload_error.poll": "Non se poden subir ficheiros nas sondaxes.", "upload_form.description": "Describa para deficientes visuais", - "upload_form.focus": "Cambiar vista previa", + "upload_form.edit": "Editar", "upload_form.undo": "Eliminar", + "upload_modal.analyzing_picture": "Analizando imaxe…", + "upload_modal.apply": "Aplicar", + "upload_modal.description_placeholder": "Un raposo moi feitiño salta sobre o can preguiceiro", + "upload_modal.detect_text": "Detectar texto na imaxe", + "upload_modal.edit_media": "Editar medios", + "upload_modal.hint": "Prema ou arrastre o círculo na vista previa para escolle o punto focal que se verá na vista de todas as miniaturas.", + "upload_modal.preview_label": "Vista previa ({ratio})", "upload_progress.label": "Subindo...", "video.close": "Pechar video", "video.exit_fullscreen": "Saír da pantalla completa", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 248be3c7b..70aec3279 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -1,21 +1,23 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", - "account.badges.bot": "Bot", + "account.add_or_remove_from_list": "הוסף או הסר מהרשימות", + "account.badges.bot": "בוט", "account.block": "חסימת @{name}", "account.block_domain": "להסתיר הכל מהקהילה {domain}", - "account.blocked": "Blocked", + "account.blocked": "חסום", + "account.cancel_follow_request": "בטל בקשת מעקב", "account.direct": "Direct Message @{name}", - "account.domain_blocked": "Domain hidden", + "account.domain_blocked": "הדומיין חסוי", "account.edit_profile": "עריכת פרופיל", - "account.endorse": "Feature on profile", + "account.endorse": "הצג בפרופיל", "account.follow": "מעקב", "account.followers": "עוקבים", - "account.followers.empty": "No one follows this user yet.", + "account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.", "account.follows": "נעקבים", - "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows.empty": "משתמש זה לא עוקב אחר אף אחד עדיין.", "account.follows_you": "במעקב אחריך", "account.hide_reblogs": "להסתיר הידהודים מאת @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.last_status": "פעילות אחרונה", + "account.link_verified_on": "בעלות על הקישור הזה נבדקה לאחרונה ב{date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "מדיה", "account.mention": "אזכור של @{name}", @@ -23,6 +25,7 @@ "account.mute": "להשתיק את @{name}", "account.mute_notifications": "להסתיר התראות מאת @{name}", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "הודעות", "account.posts_with_replies": "Toots with replies", "account.report": "לדווח על @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "הפסקת מעקב", "account.unmute": "הפסקת השתקת @{name}", "account.unmute_notifications": "להפסיק הסתרת הודעות מעם @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "אירעה שגיאה בלתי צפויה.", "alert.unexpected.title": "אופס!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "ניתן להקיש {combo} כדי לדלג בפעם הבאה", "bundle_column_error.body": "משהו השתבש בעת הצגת הרכיב הזה.", "bundle_column_error.retry": "לנסות שוב", @@ -47,6 +53,7 @@ "column.blocks": "חסימות", "column.community": "ציר זמן מקומי", "column.direct": "Direct messages", + "column.directory": "Browse profiles", "column.domain_blocks": "Hidden domains", "column.favourites": "חיבובים", "column.follow_requests": "בקשות מעקב", @@ -64,7 +71,7 @@ "column_header.show_settings": "הצגת העדפות", "column_header.unpin": "שחרור קיבוע", "column_subheading.settings": "אפשרויות", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "הסתר קהילה שלמה", "confirmations.domain_block.message": "באמת באמת לחסום את כל קהילת {domain}? ברב המקרים השתקות נבחרות של מספר משתמשים מסויימים צריכה להספיק.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "להשתיק", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "להשתיק את {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "להפסיק מעקב", "confirmations.unfollow.message": "להפסיק מעקב אחרי {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "ניתן להטמיע את ההודעה באתרך ע\"י העתקת הקוד שלהלן.", "embed.preview": "דוגמא כיצד זה יראה:", "emoji_button.activity": "פעילות", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב.", "empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "קבלה", "follow_request.reject": "דחיה", "getting_started.developers": "Developers", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "New list title", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "טוען...", "media_gallery.toggle_visible": "נראה\\בלתי נראה", "missing_indicator.label": "לא נמצא", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "חיצרוצים מקובעים", "navigation_bar.preferences": "העדפות", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "ציר זמן בין-קהילתי", "navigation_bar.security": "Security", "notification.favourite": "חצרוצך חובב על ידי {name}", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "שינוי פרטיות ההודעה", @@ -290,6 +314,7 @@ "privacy.public.short": "פומבי", "privacy.unlisted.long": "לא יופיע בפידים הציבוריים המשותפים", "privacy.unlisted.short": "לא לפיד הכללי", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {תוצאה} other {תוצאות}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "הראה יותר", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "הסרת השתקת שיחה", "status.unpin": "לשחרר מקיבוע באודות", "suggestions.dismiss": "Dismiss suggestion", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.", "upload_area.title": "ניתן להעלות על ידי Drag & drop", "upload_button.label": "הוספת מדיה", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "תיאור לכבדי ראיה", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "ביטול", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "עולה...", "video.close": "סגירת וידאו", "video.exit_fullscreen": "יציאה ממסך מלא", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index ac58514d4..c50567aac 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -1,207 +1,229 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", - "account.badges.bot": "Bot", - "account.block": "Block @{name}", - "account.block_domain": "Hide everything from {domain}", - "account.blocked": "Blocked", - "account.direct": "Direct message @{name}", - "account.domain_blocked": "Domain hidden", - "account.edit_profile": "Edit profile", - "account.endorse": "Feature on profile", - "account.follow": "Follow", - "account.followers": "Followers", - "account.followers.empty": "No one follows this user yet.", - "account.follows": "Follows", - "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Follows you", - "account.hide_reblogs": "Hide boosts from @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", - "account.media": "Media", - "account.mention": "Mention @{name}", - "account.moved_to": "{name} has moved to:", - "account.mute": "Mute @{name}", - "account.mute_notifications": "Mute notifications from @{name}", - "account.muted": "Muted", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", - "account.report": "Report @{name}", - "account.requested": "Awaiting approval. Click to cancel follow request", - "account.share": "Share @{name}'s profile", - "account.show_reblogs": "Show boosts from @{name}", - "account.unblock": "Unblock @{name}", - "account.unblock_domain": "Unhide {domain}", - "account.unendorse": "Don't feature on profile", - "account.unfollow": "Unfollow", - "account.unmute": "Unmute @{name}", - "account.unmute_notifications": "Unmute notifications from @{name}", - "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", - "boost_modal.combo": "You can press {combo} to skip this next time", - "bundle_column_error.body": "Something went wrong while loading this component.", - "bundle_column_error.retry": "Try again", - "bundle_column_error.title": "Network error", - "bundle_modal_error.close": "Close", - "bundle_modal_error.message": "Something went wrong while loading this component.", - "bundle_modal_error.retry": "Try again", - "column.blocks": "Blocked users", - "column.community": "Local timeline", - "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", - "column.favourites": "Favourites", - "column.follow_requests": "Follow requests", - "column.home": "Home", - "column.lists": "Lists", - "column.mutes": "Muted users", - "column.notifications": "Notifications", - "column.pins": "Pinned toot", - "column.public": "Federated timeline", - "column_back_button.label": "Back", - "column_header.hide_settings": "Hide settings", - "column_header.moveLeft_settings": "Move column to the left", - "column_header.moveRight_settings": "Move column to the right", - "column_header.pin": "Pin", - "column_header.show_settings": "Show settings", - "column_header.unpin": "Unpin", - "column_subheading.settings": "Settings", - "community.column_settings.media_only": "Media Only", + "account.add_or_remove_from_list": "सूची में जोड़ें या हटाए", + "account.badges.bot": "बॉट", + "account.block": "@{name} को ब्लॉक करें", + "account.block_domain": "{domain} के सारी चीज़े छुपाएं", + "account.blocked": "ब्लॉक", + "account.cancel_follow_request": "फ़ॉलो रिक्वेस्ट रद्द करें", + "account.direct": "प्रत्यक्ष संदेश @{name}", + "account.domain_blocked": "छिपा हुआ डोमेन", + "account.edit_profile": "प्रोफ़ाइल संपादित करें", + "account.endorse": "प्रोफ़ाइल पर दिखाए", + "account.follow": "फॉलो करें", + "account.followers": "फॉलोवर", + "account.followers.empty": "कोई भी इस यूज़र् को फ़ॉलो नहीं करता है", + "account.follows": "फॉलो करें", + "account.follows.empty": "यह यूज़र् अभी तक किसी को फॉलो नहीं करता है।", + "account.follows_you": "आपको फॉलो करता है", + "account.hide_reblogs": "@{name} के बूस्ट छुपाएं", + "account.last_status": "अंतिम सक्रिय", + "account.link_verified_on": "इस लिंक का स्वामित्व {date} को चेक किया गया था", + "account.locked_info": "यह खाता गोपनीयता स्थिति लॉक करने के लिए सेट है। मालिक मैन्युअल रूप से समीक्षा करता है कि कौन उनको फॉलो कर सकता है।", + "account.media": "मीडिया", + "account.mention": "उल्लेख @{name}", + "account.moved_to": "{name} स्थानांतरित हो गया:", + "account.mute": "म्यूट @{name}", + "account.mute_notifications": "@{name} के नोटिफिकेशन म्यूट करे", + "account.muted": "म्यूट है", + "account.never_active": "कभी नहीं दिखे", + "account.posts": "टूट्स", + "account.posts_with_replies": "टूट्स एवं जवाब", + "account.report": "रिपोर्ट @{name}", + "account.requested": "मंजूरी का इंतजार। फॉलो रिक्वेस्ट को रद्द करने के लिए क्लिक करें", + "account.share": "@{name} की प्रोफाइल शेयर करे", + "account.show_reblogs": "@{name} के बूस्ट दिखाए", + "account.unblock": "@{name} को अनब्लॉक करें", + "account.unblock_domain": "{domain} दिखाए", + "account.unendorse": "प्रोफ़ाइल पर न दिखाए", + "account.unfollow": "अनफॉलो करें", + "account.unmute": "अनम्यूट @{name}", + "account.unmute_notifications": "@{name} के नोटिफिकेशन अनम्यूट करे", + "alert.rate_limited.message": "कृप्या {retry_time, time, medium} के बाद दुबारा कोशिश करें", + "alert.rate_limited.title": "सीमित दर", + "alert.unexpected.message": "एक अप्रत्याशित त्रुटि हुई है!", + "alert.unexpected.title": "उफ़!", + "autosuggest_hashtag.per_week": "{count} हर सप्ताह", + "boost_modal.combo": "अगली बार स्किप करने के लिए आप {combo} दबा सकते है", + "bundle_column_error.body": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया", + "bundle_column_error.retry": "दुबारा कोशिश करें", + "bundle_column_error.title": "नेटवर्क त्रुटि", + "bundle_modal_error.close": "बंद", + "bundle_modal_error.message": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया", + "bundle_modal_error.retry": "दुबारा कोशिश करें", + "column.blocks": "ब्लॉक्ड यूज़र्स", + "column.community": "लोकल टाइम्लाइन", + "column.direct": "सीधा संदेश", + "column.directory": "प्रोफाइल्स खोजें", + "column.domain_blocks": "छुपे डोमेन्स", + "column.favourites": "पसंदीदा", + "column.follow_requests": "फॉलो रिक्वेस्ट्स", + "column.home": "होम", + "column.lists": "सूचियाँ", + "column.mutes": "म्यूट किये हुए यूजर", + "column.notifications": "नोटिफिकेशन्स", + "column.pins": "पिनड टूट्स", + "column.public": "फ़ेडरेटेड टाइम्लाइन", + "column_back_button.label": "पीछे जाए", + "column_header.hide_settings": "सेटिंग्स छुपाए", + "column_header.moveLeft_settings": "कॉलम को बाएं ले जाये", + "column_header.moveRight_settings": "कॉलम को दाएं ले जाये", + "column_header.pin": "पिन", + "column_header.show_settings": "सेटिंग्स दिखाएँ", + "column_header.unpin": "अनपिन", + "column_subheading.settings": "सेटिंग्स", + "community.column_settings.media_only": "सिर्फ़ मीडिया", "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", - "compose_form.lock_disclaimer.lock": "locked", + "compose_form.direct_message_warning_learn_more": "और जानें", + "compose_form.hashtag_warning": "यह टूट् किसी भी हैशटैग के तहत सूचीबद्ध नहीं होगा क्योंकि यह अनलिस्टेड है। हैशटैग द्वारा केवल सार्वजनिक टूट्स खोजे जा सकते हैं।", + "compose_form.lock_disclaimer": "आपका खाता {locked} नहीं है। आपको केवल फॉलोवर्स को दिखाई दिए जाने वाले पोस्ट देखने के लिए कोई भी फॉलो कर सकता है।", + "compose_form.lock_disclaimer.lock": "लॉक्ड", "compose_form.placeholder": "What is on your mind?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.publish": "Toot", + "compose_form.poll.add_option": "विकल्प जोड़े", + "compose_form.poll.duration": "चुनाव की अवधि", + "compose_form.poll.option_placeholder": "कुल विकल्प {number}", + "compose_form.poll.remove_option": "इस विकल्प को हटाएँ", + "compose_form.publish": "टूट्", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", - "compose_form.spoiler_placeholder": "Write your warning here", - "confirmation_modal.cancel": "Cancel", - "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", - "confirmations.block.message": "Are you sure you want to block {name}?", - "confirmations.delete.confirm": "Delete", - "confirmations.delete.message": "Are you sure you want to delete this status?", - "confirmations.delete_list.confirm": "Delete", - "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", - "confirmations.domain_block.confirm": "Hide entire domain", - "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", - "confirmations.mute.confirm": "Mute", - "confirmations.mute.message": "Are you sure you want to mute {name}?", - "confirmations.redraft.confirm": "Delete & redraft", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Unfollow", - "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", - "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", - "emoji_button.activity": "Activity", - "emoji_button.custom": "Custom", - "emoji_button.flags": "Flags", - "emoji_button.food": "Food & Drink", - "emoji_button.label": "Insert emoji", - "emoji_button.nature": "Nature", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", - "emoji_button.objects": "Objects", - "emoji_button.people": "People", - "emoji_button.recent": "Frequently used", - "emoji_button.search": "Search...", - "emoji_button.search_results": "Search results", - "emoji_button.symbols": "Symbols", - "emoji_button.travel": "Travel & Places", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", - "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", - "empty_column.home.public_timeline": "the public timeline", - "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "compose_form.sensitive.hide": "मीडिया को संवेदनशील के रूप में चिह्नित करें", + "compose_form.sensitive.marked": "मीडिया संवेदनशील के रूप में चिह्नित है", + "compose_form.sensitive.unmarked": "मीडिया संवेदनशील के रूप में चिह्नित नहीं है", + "compose_form.spoiler.marked": "चेतावनी के पीछे टेक्स्ट छिपा है", + "compose_form.spoiler.unmarked": "टेक्स्ट छिपा नहीं है", + "compose_form.spoiler_placeholder": "अपनी चेतावनी यहाँ लिखें", + "confirmation_modal.cancel": "रद्द करें", + "confirmations.block.block_and_report": "ब्लॉक एवं रिपोर्ट", + "confirmations.block.confirm": "ब्लॉक", + "confirmations.block.message": "क्या आप वाकई {name} को ब्लॉक करना चाहते हैं?", + "confirmations.delete.confirm": "मिटाए", + "confirmations.delete.message": "क्या आप वाकई इस स्टेटस को हटाना चाहते हैं?", + "confirmations.delete_list.confirm": "मिटाए", + "confirmations.delete_list.message": "क्या आप वाकई इस लिस्ट को हमेशा के लिये मिटाना चाहते हैं?", + "confirmations.domain_block.confirm": "संपूर्ण डोमेन छिपाएं", + "confirmations.domain_block.message": "क्या आप वास्तव में, वास्तव में आप पूरे {domain} को ब्लॉक करना चाहते हैं? ज्यादातर मामलों में कुछ लक्षित ब्लॉक या म्यूट पर्याप्त और बेहतर हैं। आप किसी भी सार्वजनिक समय-सीमा या अपनी सूचनाओं में उस डोमेन की सामग्री नहीं देखेंगे। उस डोमेन से आपके फॉलोवर्स को हटा दिया जाएगा।", + "confirmations.logout.confirm": "लॉग आउट करें", + "confirmations.logout.message": "आप सुनिश्चित हैं कि लॉगआउट करना चाहते हैं?", + "confirmations.mute.confirm": "शांत", + "confirmations.mute.explanation": "यह उनसे और पोस्टों का उल्लेख करते हुए उनसे छिपाएगा, लेकिन यह अभी भी उन्हें आपकी पोस्ट देखने और आपको फॉलो करने की अनुमति देगा।", + "confirmations.mute.message": "क्या आप वाकई {name} को शांत करना चाहते हैं?", + "confirmations.redraft.confirm": "मिटायें और पुनःप्रारूपण करें", + "confirmations.redraft.message": "क्या आप वाकई इस स्टेटस को हटाना चाहते हैं और इसे फिर से ड्राफ्ट करना चाहते हैं? पसंदीदा और बूस्ट खो जाएंगे, और मूल पोस्ट के उत्तर अनाथ हो जाएंगे।", + "confirmations.reply.confirm": "उत्तर दें", + "confirmations.reply.message": "अब उत्तर देना उस संदेश को अधिलेखित कर देगा जो आप वर्तमान में बना रहे हैं। क्या आप सुनिश्चित रूप से आगे बढ़ना चाहते हैं?", + "confirmations.unfollow.confirm": "अनफॉलो करें", + "confirmations.unfollow.message": "क्या आप वाकई {name} को अनफॉलो करना चाहते हैं?", + "conversation.delete": "वार्तालाप हटाएँ", + "conversation.mark_as_read": "पढ़ा गया के रूप में चिह्नित करें", + "conversation.open": "वार्तालाप देखें", + "conversation.with": "{names} के साथ", + "directory.federated": "ज्ञात फेडीवर्स से", + "directory.local": "केवल {domain} से", + "directory.new_arrivals": "नए आगंतुक", + "directory.recently_active": "हाल में ही सक्रिय", + "embed.instructions": "अपने वेबसाइट पर, निचे दिए कोड को कॉपी करके, इस स्टेटस को एम्बेड करें", + "embed.preview": "यह ऐसा दिखेगा :", + "emoji_button.activity": "गतिविधि", + "emoji_button.custom": "निजीकृत", + "emoji_button.flags": "झंडे", + "emoji_button.food": "भोजन एवं पेय", + "emoji_button.label": "इमोजी डाले", + "emoji_button.nature": "प्रकृति", + "emoji_button.not_found": "कोई इमोजी नहीं मिला! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "वस्तुएं", + "emoji_button.people": "लोग", + "emoji_button.recent": "अक्सर इस्तेमाल किया जाने वाला", + "emoji_button.search": "खोजें", + "emoji_button.search_results": "खोज परिणाम", + "emoji_button.symbols": "प्रतीक", + "emoji_button.travel": "यात्रा एवं स्थान", + "empty_column.account_timeline": "सन्नाटा! यहां कोई टूट्स नहीं!", + "empty_column.account_unavailable": "प्रोफाइल उपलब्ध नहीं", + "empty_column.blocks": "आप अभी तक किसी भी यूजर के द्वारा ब्लॉक्ड नहीं हो।", + "empty_column.community": "लोकल टाइम्लाइन खाली है, कुछ देखने के लिये सार्वजनिक रूप से कुछ लिखें!", + "empty_column.direct": "आपके पास कोई सीधा सन्देश नहीं है, जब आप कोई भेजेंगे प्राप्त करेंगे तो यहाँ दिखेगा।", + "empty_column.domain_blocks": "अभी तक कोई छुपा हुआ डोमेन नहीं है।", + "empty_column.favourited_statuses": "आपके पास अभी कोई भी चहिता टूट नहीं है. जब आप किसी टूट को पसंद (स्टार) करेंगे, तब वो यहाँ दिखेगा।", + "empty_column.favourites": "अभी तक किसी ने भी इस टूट को पसंद (स्टार) नहीं किया है. जब भी कोई इसे पसंद करेगा, उनका नाम यहाँ दिखेगा।", + "empty_column.follow_requests": "अभी तक किसी ने भी आपका अनुसरण करने की विनती नहीं की है. जब भी कोई आपको विनती भेजेगा, वो यहाँ दिखेगी.", + "empty_column.hashtag": "यह हैशटैग अभी तक खाली है।", + "empty_column.home": "आपकी मुख्य कालक्रम अभी खली है. अन्य उपयोगकर्ताओं से मिलने के लिए और अपनी गतिविधियां शुरू करने के लिए या तो {public} पर जाएं या खोज का उपयोग करें।", + "empty_column.home.public_timeline": "सार्वजनिक कालक्रम", + "empty_column.list": "यह सूची अभी खाली है. जब इसके सदस्य कोई अभिव्यक्ति देंगे, तो वो यहां दिखाई देंगी.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", - "follow_request.authorize": "Authorize", - "follow_request.reject": "Reject", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", - "getting_started.heading": "Getting started", - "getting_started.invite": "Invite people", - "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "समस्या सूचित करें", + "follow_request.authorize": "अधिकार दें", + "follow_request.reject": "अस्वीकार करें", + "getting_started.developers": "डेवॅलपर्स", + "getting_started.directory": "प्रोफ़ाइल निर्देशिका", + "getting_started.documentation": "प्रलेखन", + "getting_started.heading": "पहले कदम रखें", + "getting_started.invite": "दोस्तों को आमंत्रित करें", + "getting_started.open_source_notice": "मास्टोडॉन एक मुक्त स्रोत सॉफ्टवेयर है. आप गिटहब {github} पर इस सॉफ्टवेयर में योगदान या किसी भी समस्या को सूचित कर सकते है.", + "getting_started.security": "अकाउंट सेटिंग्स", + "getting_started.terms": "सेवा की शर्तें", + "hashtag.column_header.tag_mode.all": "और {additional}", + "hashtag.column_header.tag_mode.any": "या {additional}", + "hashtag.column_header.tag_mode.none": "बिना {additional}", + "hashtag.column_settings.select.no_options_message": "कोई सुझाव नहीं मिला", + "hashtag.column_settings.select.placeholder": "हैशटैग लिखें...", + "hashtag.column_settings.tag_mode.all": "यह सभी", + "hashtag.column_settings.tag_mode.any": "इनमें से कोई भी", + "hashtag.column_settings.tag_mode.none": "इनमें से कोई भी नहीं", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.basic": "Basic", - "home.column_settings.show_reblogs": "Show boosts", - "home.column_settings.show_replies": "Show replies", + "home.column_settings.basic": "बुनियादी", + "home.column_settings.show_reblogs": "बूस्ट दिखाए", + "home.column_settings.show_replies": "जवाबों को दिखाए", "intervals.full.days": "{number, plural, one {# day} other {# days}}", "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", + "introduction.federation.action": "अगला", + "introduction.federation.federated.headline": "फ़ेडरेटेड", "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", + "introduction.federation.home.headline": "होम", "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", + "introduction.federation.local.headline": "लोकल", "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.headline": "पसंदीदा", "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.headline": "बूस्ट", "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.headline": "जवाब", "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", + "introduction.welcome.action": "आइए शुरू करते हैं!", + "introduction.welcome.headline": "पहले कदम", "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", "keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "to boost", "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", - "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.compose": "कंपोज़ टेक्स्ट-एरिया पर ध्यान केंद्रित करने के लिए", + "keyboard_shortcuts.description": "विवरण", + "keyboard_shortcuts.direct": "सीधा सन्देश कॉलम को खोलने के लिए", + "keyboard_shortcuts.down": "सूची में शामिल करने के लिए", + "keyboard_shortcuts.enter": "स्टेटस खोलने के लिए", + "keyboard_shortcuts.favourite": "पसंदीदा के लिए", + "keyboard_shortcuts.favourites": "पसंदीदा सूची खोलने के लिए", + "keyboard_shortcuts.federated": "फ़ैडरेटेड टाइम्लाइन खोलने के लिए", "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.home": "होम टाइम्लाइन खोलने के लिए", + "keyboard_shortcuts.hotkey": "हॉट-की", + "keyboard_shortcuts.legend": "इस लीजेंड को दिखाने के लिए", + "keyboard_shortcuts.local": "लोकल टाइम्लाइन खोलने के लिए", + "keyboard_shortcuts.mention": "लेखक को मेन्शन करने के लिए", + "keyboard_shortcuts.muted": "म्यूटेड यूजर की लिस्ट खोलने के लिए", + "keyboard_shortcuts.my_profile": "आपकी प्रोफाइल खोलने के लिए", + "keyboard_shortcuts.notifications": "नोटिफिकेशन कॉलम खोलने के लिए", + "keyboard_shortcuts.pinned": "पिनड टूट्स की लिस्ट खोलने के लिए", + "keyboard_shortcuts.profile": "लेखक की प्रोफाइल खोलने के लिए", + "keyboard_shortcuts.reply": "जवाब के लिए", + "keyboard_shortcuts.requests": "फॉलो रिक्वेस्ट लिस्ट खोलने के लिए", + "keyboard_shortcuts.search": "गहरी खोज के लिए", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", @@ -221,15 +243,16 @@ "lists.new.title_placeholder": "New list title", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", - "loading_indicator.label": "Loading...", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "लोड हो रहा है...", "media_gallery.toggle_visible": "Toggle visibility", - "missing_indicator.label": "Not found", - "missing_indicator.sublabel": "This resource could not be found", + "missing_indicator.label": "नहीं मिला", + "missing_indicator.sublabel": "यह संसाधन नहीं मिल सका।", "mute_modal.hide_notifications": "Hide notifications from this user?", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.apps": "मोबाइल एप्लिकेशंस", + "navigation_bar.blocks": "ब्लॉक्ड यूज़र्स", + "navigation_bar.community_timeline": "लोकल टाइम्लाइन", + "navigation_bar.compose": "नया टूट् लिखें", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", "navigation_bar.domain_blocks": "Hidden domains", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "Preferences", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", "notification.favourite": "{name} favourited your status", @@ -258,53 +280,56 @@ "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", - "notifications.column_settings.follow": "New followers:", - "notifications.column_settings.mention": "Mentions:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", - "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.group": "{count} notifications", - "poll.closed": "Closed", - "poll.refresh": "Refresh", + "notifications.column_settings.filter_bar.advanced": "सभी श्रेणियाँ दिखाएं", + "notifications.column_settings.filter_bar.category": "फ़िल्टर बार", + "notifications.column_settings.filter_bar.show": "दिखाएँ", + "notifications.column_settings.follow": "नए फ़ॉलोअर्स", + "notifications.column_settings.mention": "उल्लेख:", + "notifications.column_settings.poll": "चुनाव परिणाम", + "notifications.column_settings.push": "पुश सूचनाएँ", + "notifications.column_settings.reblog": "बूस्ट:", + "notifications.column_settings.show": "कॉलम में दिखाएँ", + "notifications.column_settings.sound": "ध्वनि चलाएँ", + "notifications.filter.all": "सभी", + "notifications.filter.boosts": "बूस्ट", + "notifications.filter.favourites": "पसंदीदा", + "notifications.filter.follows": "फॉलो", + "notifications.filter.mentions": "उल्लेख", + "notifications.filter.polls": "चुनाव परिणाम", + "notifications.group": "{count} सूचनाएँ", + "poll.closed": "बंद कर दिया", + "poll.refresh": "रीफ्रेश करें", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", + "poll.vote": "वोट", + "poll.voted": "आपने इसी उत्तर का चुनाव किया है।", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", "privacy.direct.long": "Post to mentioned users only", - "privacy.direct.short": "Direct", + "privacy.direct.short": "सीधा", "privacy.private.long": "Post to followers only", "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", - "privacy.public.short": "Public", + "privacy.public.long": "सार्वजनिक टाइम्लाइन पर भेजें", + "privacy.public.short": "सार्वजनिक", "privacy.unlisted.long": "Do not show in public timelines", - "privacy.unlisted.short": "Unlisted", - "regeneration_indicator.label": "Loading…", + "privacy.unlisted.short": "अनलिस्टेड", + "refresh": "रीफ्रेश करें", + "regeneration_indicator.label": "लोड हो रहा है...", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", - "relative_time.just_now": "now", + "relative_time.just_now": "अभी", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", - "reply_indicator.cancel": "Cancel", + "reply_indicator.cancel": "रद्द करें", "report.forward": "Forward to {target}", "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", "report.placeholder": "Additional comments", - "report.submit": "Submit", + "report.submit": "सबमिट करें", "report.target": "Report {target}", - "search.placeholder": "Search", + "search.placeholder": "खोजें", "search_popout.search_format": "Advanced search format", "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", "search_popout.tips.hashtag": "hashtag", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -337,45 +363,54 @@ "status.pin": "Pin on profile", "status.pinned": "Pinned toot", "status.read_more": "Read more", - "status.reblog": "Boost", + "status.reblog": "बूस्ट", "status.reblog_private": "Boost to original audience", "status.reblogged_by": "{name} boosted", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.redraft": "Delete & re-draft", - "status.reply": "Reply", + "status.reply": "जवाब", "status.replyAll": "Reply to thread", "status.report": "Report @{name}", - "status.sensitive_warning": "Sensitive content", - "status.share": "Share", - "status.show_less": "Show less", + "status.sensitive_warning": "संवेदनशील विषय वस्तु", + "status.share": "शेयर करें", + "status.show_less": "कम दिखाएँ", "status.show_less_all": "Show less for all", - "status.show_more": "Show more", + "status.show_more": "और दिखाएँ", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "अनुपलब्ध", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", - "tabs_bar.local_timeline": "Local", - "tabs_bar.notifications": "Notifications", - "tabs_bar.search": "Search", + "tabs_bar.federated_timeline": "फ़ेडरेटेड", + "tabs_bar.home": "होम", + "tabs_bar.local_timeline": "लोकल", + "tabs_bar.notifications": "सूचनाएँ", + "tabs_bar.search": "खोजें", "time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Add media ({formats})", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", - "upload_form.undo": "Delete", - "upload_progress.label": "Uploading...", + "upload_form.edit": "संशोधन करें", + "upload_form.undo": "मिटाए", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "लागू करें", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "मीडिया में संशोधन करें", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "अपलोडिंग...", "video.close": "Close video", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 6f9b5343a..09298a7ad 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -4,6 +4,7 @@ "account.block": "Blokiraj @{name}", "account.block_domain": "Sakrij sve sa {domain}", "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Uredi profil", @@ -15,6 +16,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "te slijedi", "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Utišaj @{name}", "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "Postovi", "account.posts_with_replies": "Toots with replies", "account.report": "Prijavi @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Prestani slijediti", "account.unmute": "Poništi utišavanje @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", @@ -47,6 +53,7 @@ "column.blocks": "Blokirani korisnici", "column.community": "Lokalni timeline", "column.direct": "Direct messages", + "column.directory": "Browse profiles", "column.domain_blocks": "Hidden domains", "column.favourites": "Favoriti", "column.follow_requests": "Zahtjevi za slijeđenje", @@ -64,7 +71,7 @@ "column_header.show_settings": "Show settings", "column_header.unpin": "Unpin", "column_subheading.settings": "Postavke", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Sakrij cijelu domenu", "confirmations.domain_block.message": "Jesi li zaista, zaista siguran da želiš potpuno blokirati {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Utišaj", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Jesi li siguran da želiš utišati {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Here is what it will look like:", "emoji_button.activity": "Aktivnost", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "Još nemaš notifikacija. Komuniciraj sa drugima kako bi započeo razgovor.", "empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autoriziraj", "follow_request.reject": "Odbij", "getting_started.developers": "Developers", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "New list title", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Učitavam...", "media_gallery.toggle_visible": "Preklopi vidljivost", "missing_indicator.label": "Nije nađen", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "Postavke", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federalni timeline", "navigation_bar.security": "Security", "notification.favourite": "{name} je lajkao tvoj status", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Podesi status privatnosti", @@ -290,6 +314,7 @@ "privacy.public.short": "Javno", "privacy.unlisted.long": "Ne prikazuj u javnim timelineovima", "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Pokaži više", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Poništi utišavanje razgovora", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "upload_area.title": "Povuci i spusti kako bi uploadao", "upload_button.label": "Dodaj media", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Poništi", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Uploadam...", "video.close": "Close video", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 7be8b7d67..72dd6b986 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -1,107 +1,125 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Hozzáadás vagy eltávolítás a listáról", "account.badges.bot": "Bot", "account.block": "@{name} letiltása", "account.block_domain": "Minden elrejtése innen: {domain}", - "account.blocked": "Blocked", - "account.direct": "Direct Message @{name}", - "account.domain_blocked": "Domain hidden", + "account.blocked": "Letiltva", + "account.cancel_follow_request": "Követési kérelem törlése", + "account.direct": "Közvetlen üzenet @{name} számára", + "account.domain_blocked": "Rejtett domain", "account.edit_profile": "Profil szerkesztése", - "account.endorse": "Feature on profile", + "account.endorse": "Kiemelés a profilodon", "account.follow": "Követés", - "account.followers": "Követők", - "account.followers.empty": "No one follows this user yet.", - "account.follows": "Követve", - "account.follows.empty": "This user doesn't follow anyone yet.", - "account.follows_you": "Követnek téged", - "account.hide_reblogs": "Rejtsd el a tülkölést @{name}-tól/től", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.followers": "Követő", + "account.followers.empty": "Ezt a felhasználót még senki sem követi.", + "account.follows": "Követések", + "account.follows.empty": "Ez a felhasználó még senkit sem követ.", + "account.follows_you": "Követ téged", + "account.hide_reblogs": "@{name} megtolásainak némítása", + "account.last_status": "Utoljára aktív", + "account.link_verified_on": "A linket ellenőriztük: {date}", + "account.locked_info": "Ez a fiók zárt. A tulajdonos engedélyezi, hogy ki követheti őt.", "account.media": "Média", "account.mention": "@{name} említése", "account.moved_to": "{name} átköltözött:", "account.mute": "@{name} némítása", - "account.mute_notifications": "@{name} értesítések némítása", - "account.muted": "Muted", - "account.posts": "Státuszok", - "account.posts_with_replies": "Toots with replies", + "account.mute_notifications": "@{name} értesítéseinek némítása", + "account.muted": "Némítva", + "account.never_active": "Soha", + "account.posts": "Tülkölés", + "account.posts_with_replies": "Tülkölés és válaszok", "account.report": "@{name} jelentése", - "account.requested": "Engedélyre vár. Kattintson a követési kérés visszavonására", + "account.requested": "Engedélyre vár. Kattints a követési kérés visszavonásához", "account.share": "@{name} profiljának megosztása", - "account.show_reblogs": "@{name} kedvenceinek mutatása", - "account.unblock": "@{name} kiblokkolása", - "account.unblock_domain": "{domain} mutatása", - "account.unendorse": "Don't feature on profile", - "account.unfollow": "Követés abbahagyása", - "account.unmute": "@{name} kinémítása", - "account.unmute_notifications": "@{name} értesítéseinek kinémítása", - "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", - "boost_modal.combo": "Megnyomhatod {combo}, hogy átugord következő alkalommal", + "account.show_reblogs": "@{name} megtolásainak mutatása", + "account.unblock": "@{name} letiltásának feloldása", + "account.unblock_domain": "{domain} elrejtésének feloldása", + "account.unendorse": "Kiemelés törlése a profilodról", + "account.unfollow": "Követés vége", + "account.unmute": "@{name} némítás feloldása", + "account.unmute_notifications": "@{name} némított értesítéseinek feloldása", + "alert.rate_limited.message": "Próbáld újra {retry_time, time, medium} után.", + "alert.rate_limited.title": "Forgalomkorlátozás", + "alert.unexpected.message": "Váratlan hiba történt.", + "alert.unexpected.title": "Hoppá!", + "autosuggest_hashtag.per_week": "{count}/hét", + "boost_modal.combo": "Hogy átugord ezt következő alkalommal, használd {combo}", "bundle_column_error.body": "Hiba történt a komponens betöltése közben.", - "bundle_column_error.retry": "Próbálja újra", + "bundle_column_error.retry": "Próbáld újra", "bundle_column_error.title": "Hálózati hiba", - "bundle_modal_error.close": "Bezár", + "bundle_modal_error.close": "Bezárás", "bundle_modal_error.message": "Hiba történt a komponens betöltésekor.", - "bundle_modal_error.retry": "Próbálja újra", + "bundle_modal_error.retry": "Próbáld újra", "column.blocks": "Letiltott felhasználók", "column.community": "Helyi idővonal", - "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.direct": "Közvetlen üzenetek", + "column.directory": "Profilok böngészése", + "column.domain_blocks": "Rejtett domainek", "column.favourites": "Kedvencek", - "column.follow_requests": "Követési kérések", + "column.follow_requests": "Követési kérelmek", "column.home": "Kezdőlap", "column.lists": "Listák", "column.mutes": "Némított felhasználók", "column.notifications": "Értesítések", - "column.pins": "Kitűzött tülkölések", + "column.pins": "Kitűzött tülkök", "column.public": "Nyilvános idővonal", "column_back_button.label": "Vissza", "column_header.hide_settings": "Beállítások elrejtése", "column_header.moveLeft_settings": "Oszlop elmozdítása balra", - "column_header.moveRight_settings": "oszlop elmozdítása jobbra", - "column_header.pin": "Kitűz", + "column_header.moveRight_settings": "Oszlop elmozdítása jobbra", + "column_header.pin": "Kitűzés", "column_header.show_settings": "Beállítások mutatása", "column_header.unpin": "Kitűzés eltávolítása", "column_subheading.settings": "Beállítások", - "community.column_settings.media_only": "Media Only", - "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", - "compose_form.hashtag_warning": "Ezen tülkölés nem fog megjelenni semmilyen hashtag alatt mivel listázatlan. Csak a publikus tülkölések kereshetőek hashtag-el.", - "compose_form.lock_disclaimer": "Az ön fiókja nincs {locked}. Bárki követni tud, hogy megtekintse a kizárt követőknek szánt üzeneteid.", + "community.column_settings.media_only": "Csak média", + "compose_form.direct_message_warning": "Ezt a tülköt csak a benne megemlített felhasználók láthatják majd.", + "compose_form.direct_message_warning_learn_more": "Tudj meg többet", + "compose_form.hashtag_warning": "Ez a tülköd nem fog megjelenni semmilyen hashtag alatt mivel listázatlan. Csak nyilvános tülkök kereshetőek hashtaggel.", + "compose_form.lock_disclaimer": "A fiókod nincs {locked}. Bárki követni tud, hogy megtekintse a kizárólag követőknek szánt üzeneteidet.", "compose_form.lock_disclaimer.lock": "lezárva", - "compose_form.placeholder": "Mire gondolsz?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.placeholder": "Mi jár a fejedben?", + "compose_form.poll.add_option": "Lehetőség hozzáadása", + "compose_form.poll.duration": "Szavazás időtartama", + "compose_form.poll.option_placeholder": "{number}. lehetőség", + "compose_form.poll.remove_option": "Lehetőség törlése", "compose_form.publish": "Tülk", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", - "compose_form.spoiler_placeholder": "Figyelmeztetését írja ide", - "confirmation_modal.cancel": "Bezár", - "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Letilt", - "confirmations.block.message": "Biztos benne, hogy le szeretné tiltani {name}?", - "confirmations.delete.confirm": "Töröl", - "confirmations.delete.message": "Biztos benne, hogy törölni szeretné ezt a státuszt?", - "confirmations.delete_list.confirm": "Töröl", - "confirmations.delete_list.message": "Biztos benne, hogy véglegesen törölni szeretné ezt a listát?", - "confirmations.domain_block.confirm": "Egész domain elrejtése", - "confirmations.domain_block.message": "Nagyon biztos abban, hogy le szeretné tiltani az egész {domain}-t? A legtöbb esetben néhány célszerű tiltás vagy némítás elegendő és kívánatosabb megoldás.", - "confirmations.mute.confirm": "Némít", - "confirmations.mute.message": "Biztos benne, hogy némítani szeretné {name}?", - "confirmations.redraft.confirm": "Delete & redraft", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "compose_form.sensitive.hide": "Média megjelölése szenzitívként", + "compose_form.sensitive.marked": "A médiát érzékenynek jelölték", + "compose_form.sensitive.unmarked": "A médiát nem jelölték érzékenynek", + "compose_form.spoiler.marked": "A szöveg figyelmeztetés mögé van rejtve", + "compose_form.spoiler.unmarked": "A szöveg nem rejtett", + "compose_form.spoiler_placeholder": "Írd ide a figyelmeztetést", + "confirmation_modal.cancel": "Mégse", + "confirmations.block.block_and_report": "Letiltás és jelentés", + "confirmations.block.confirm": "Letiltás", + "confirmations.block.message": "Biztos, hogy letiltod: {name}?", + "confirmations.delete.confirm": "Törlés", + "confirmations.delete.message": "Biztos, hogy törölni szeretnéd ezt a tülkölést?", + "confirmations.delete_list.confirm": "Törlés", + "confirmations.delete_list.message": "Biztos, hogy véglegesen törölni szeretnéd ezt a listát?", + "confirmations.domain_block.confirm": "Teljes domain elrejtése", + "confirmations.domain_block.message": "Biztos, hogy le szeretnéd tiltani a teljes {domain} domaint? A legtöbb esetben néhány célzott tiltás vagy némítás elegendő, és kívánatosabb megoldás. Semmilyen tartalmat nem fogsz látni ebből a domainből se az idővonalakon, se az értesítésekben. Az ebben a domainben lévő követőidet is eltávolítjuk.", + "confirmations.logout.confirm": "Kijelentkezés", + "confirmations.logout.message": "Biztos, hogy kijelentkezel?", + "confirmations.mute.confirm": "Némítás", + "confirmations.mute.explanation": "Ez elrejti a tőlük érkező bejegyzéseket, valamint az őket megemlítőket, de ők továbbra is láthatják a te bejegyzéseid, és követhetnek is téged.", + "confirmations.mute.message": "Biztos, hogy némítod: {name}?", + "confirmations.redraft.confirm": "Törlés és újraírás", + "confirmations.redraft.message": "Biztos, hogy ezt a tülköt szeretnéd törölni és újraírni? Minden megtolást és kedvencnek jelölést elvesztesz, az eredetire adott válaszok pedig elárvulnak.", + "confirmations.reply.confirm": "Válasz", + "confirmations.reply.message": "Ha most válaszolsz, ez felülírja a most szerkesztés alatt álló üzenetet. Mégis ezt szeretnéd?", "confirmations.unfollow.confirm": "Követés visszavonása", - "confirmations.unfollow.message": "Biztos benne, hogy vissza szeretné vonni {name} követését?", - "embed.instructions": "Ágyazza be ezen státuszt weboldalába az alábbi kód másolásával.", + "confirmations.unfollow.message": "Biztos, hogy vissza szeretnéd vonni {name} követését?", + "conversation.delete": "Beszélgetés törlése", + "conversation.mark_as_read": "Megjelölés olvasottként", + "conversation.open": "Beszélgetés megtekintése", + "conversation.with": "{names}-el/al", + "directory.federated": "Az ismert fediverzumból", + "directory.local": "Csak innen: {domain}", + "directory.new_arrivals": "Új csatlakozók", + "directory.recently_active": "Nemrég aktív", + "embed.instructions": "Ágyazd be ezt a tülköt a weboldaladba az alábbi kód kimásolásával.", "embed.preview": "Így fog kinézni:", "emoji_button.activity": "Aktivitás", "emoji_button.custom": "Egyéni", @@ -109,7 +127,7 @@ "emoji_button.food": "Étel és Ital", "emoji_button.label": "Emoji beszúrása", "emoji_button.nature": "Természet", - "emoji_button.not_found": "Nincsenek emojok!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Nincsenek emodzsik!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Tárgyak", "emoji_button.people": "Emberek", "emoji_button.recent": "Gyakran használt", @@ -117,272 +135,289 @@ "emoji_button.search_results": "Keresési találatok", "emoji_button.symbols": "Szimbólumok", "emoji_button.travel": "Utazás és Helyek", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", - "empty_column.community": "A helyi idővonal üres. Írj egy publikus stástuszt, hogy elindítsd a labdát!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "Jelenleg nem található semmi ezen hashtaggel.", - "empty_column.home": "A hazai idővonala üres! Látogasd meg a {public} vagy használd a keresőt, hogy ismerj meg más felhasználókat.", - "empty_column.home.public_timeline": "publikus idővonal", - "empty_column.list": "A lista jelenleg üres. Mikor a listatagok új státuszt posztolnak itt meg fognak jelenni.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "Jelenleg nincsenek értesítései. Lépj kapcsolatba másokkal, hogy indítsd el a beszélgetést.", - "empty_column.public": "Jelenleg semmi nincs itt! Írj valamit publikusan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd", - "follow_request.authorize": "Engedélyez", - "follow_request.reject": "Visszautasít", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", + "empty_column.account_timeline": "Itt nincs tülkölés!", + "empty_column.account_unavailable": "A profil nem érhető el", + "empty_column.blocks": "Még senkit sem tiltottál le.", + "empty_column.community": "A helyi idővonal üres. Tülkölj egyet nyilvánosan, hogy elindítsd az eseményeket!", + "empty_column.direct": "Még nincs egy közvetlen üzeneted sem. Ha küldesz vagy kapsz egyet, itt fog megjelenni.", + "empty_column.domain_blocks": "Még nem rejtettél el egyetlen domaint sem.", + "empty_column.favourited_statuses": "Még nincs egy kedvenc tülköd sem. Ha kedvencnek jelölsz egyet, itt fog megjelenni.", + "empty_column.favourites": "Még senki sem jelölte ezt a tülköt kedvencként. Ha valaki mégis megteszi, itt fogjuk mutatni.", + "empty_column.follow_requests": "Még nincs egy követési kérésed sem. Ha kapsz egyet, itt fogjuk feltüntetni.", + "empty_column.hashtag": "Jelenleg nem található semmi ezzel a hashtaggel.", + "empty_column.home": "A saját idővonalad üres! Látogasd meg a {public} oldalt vagy használd a keresőt, hogy megismerj másokat.", + "empty_column.home.public_timeline": "a nyilvános idővonal", + "empty_column.list": "A lista jelenleg üres. Ha a listatagok tülkölnek, itt fognak megjelenni.", + "empty_column.lists": "Még nem hoztál létre listát. Ha csinálsz egyet, itt látszik majd.", + "empty_column.mutes": "Még egy felhasználót sem némítottál le.", + "empty_column.notifications": "Jelenleg nincsenek értesítéseid. Lépj kapcsolatba másokkal, hogy elindítsd a beszélgetést.", + "empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd", + "error.unexpected_crash.explanation": "Egy hiba vagy böngésző inkompatibilitás miatt ez az oldal nem jeleníthető meg rendesen.", + "error.unexpected_crash.next_steps": "Próbáld frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.", + "errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása", + "errors.unexpected_crash.report_issue": "Probléma jelentése", + "follow_request.authorize": "Engedélyezés", + "follow_request.reject": "Elutasítás", + "getting_started.developers": "Fejlesztőknek", + "getting_started.directory": "Profilok", + "getting_started.documentation": "Dokumentáció", "getting_started.heading": "Első lépések", - "getting_started.invite": "Invite people", - "getting_started.open_source_notice": "Mastodon egy nyílt forráskódú szoftver. Hozzájárulás vagy problémák jelentése a GitHub-on {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.basic": "Alap", - "home.column_settings.show_reblogs": "Ismétlések mutatása", + "getting_started.invite": "Mások meghívása", + "getting_started.open_source_notice": "A Mastodon nyílt forráskódú szoftver. Közreműködhetsz vagy problémákat jelenthetsz a GitHubon: {github}.", + "getting_started.security": "Fiókbeállítások", + "getting_started.terms": "Felhasználási feltételek", + "hashtag.column_header.tag_mode.all": "és {additional}", + "hashtag.column_header.tag_mode.any": "vagy {additional}", + "hashtag.column_header.tag_mode.none": "{additional} nélkül", + "hashtag.column_settings.select.no_options_message": "Nincs javaslat", + "hashtag.column_settings.select.placeholder": "Addj meg hashtageket…", + "hashtag.column_settings.tag_mode.all": "Mindegyik", + "hashtag.column_settings.tag_mode.any": "Bármelyik", + "hashtag.column_settings.tag_mode.none": "Egyik sem", + "hashtag.column_settings.tag_toggle": "Új címkék felvétele ehhez az oszlophoz", + "home.column_settings.basic": "Alapvető", + "home.column_settings.show_reblogs": "Megtolások mutatása", "home.column_settings.show_replies": "Válaszok mutatása", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "vissza navigálás", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "ismétlés", - "keyboard_shortcuts.column": "összpontosítson egy státuszra az egyik oszlopban", - "keyboard_shortcuts.compose": "fókuszálja a szerkesztési szövegdobozt", + "intervals.full.days": "{number, plural, one {# nap} other {# nap}}", + "intervals.full.hours": "{number, plural, one {# óra} other {# óra}}", + "intervals.full.minutes": "{number, plural, one {# perc} other {# perc}}", + "introduction.federation.action": "Következő", + "introduction.federation.federated.headline": "Föderációs", + "introduction.federation.federated.text": "A fediverzum más szervereiről származó nyilvános tülkök a föderációs idővonalon jelennek meg.", + "introduction.federation.home.headline": "Kezdőlap", + "introduction.federation.home.text": "A saját idővonaladon az általad követett emberek tülkjei jelennek meg. Bárkit követhetsz, bármelyik kiszolgálón.", + "introduction.federation.local.headline": "Helyi", + "introduction.federation.local.text": "A helyi idővonalon a veled közös kiszolgálón lévő emberek nyilvános tülkjei jelennek meg.", + "introduction.interactions.action": "Oktatóanyag befejezése!", + "introduction.interactions.favourite.headline": "Kedvenc", + "introduction.interactions.favourite.text": "A kedvenc funkcióval elrakhatsz későbbre egy tülköt, illetve közölheted a szerzővel, hogy tetszett a megosztása.", + "introduction.interactions.reblog.headline": "Megtolás", + "introduction.interactions.reblog.text": "A saját követőiddel mások tülkjeit is megoszthatod úgy, hogy megtolod őket.", + "introduction.interactions.reply.headline": "Válasz", + "introduction.interactions.reply.text": "Saját vagy mások tülkjeire válaszolva egy beszélgetési láncot alakíthatsz ki.", + "introduction.welcome.action": "Csapjunk bele!", + "introduction.welcome.headline": "Első lépések", + "introduction.welcome.text": "Üdv a fediverzumban! Pár pillanat múlva már küldheted is üzeneteidet barátaidnak bármely szerveren. Ez a szerver {domain} viszont különleges. Ez tartja nyilván a profilod, szóval jegyezd meg a nevét.", + "keyboard_shortcuts.back": "visszafelé navigálás", + "keyboard_shortcuts.blocked": "letiltott felhasználók listájának megnyitása", + "keyboard_shortcuts.boost": "megtolás", + "keyboard_shortcuts.column": "fókuszálás egy tülkre az egyik oszlopban", + "keyboard_shortcuts.compose": "fókuszálás a szerkesztési szövegdobozra", "keyboard_shortcuts.description": "Leírás", - "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.direct": "közvetlen üzenetek megnyitása", "keyboard_shortcuts.down": "lefele navigálás a listában", - "keyboard_shortcuts.enter": "státusz megnyitása", - "keyboard_shortcuts.favourite": "kedvenccé tétel", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Billentyű rövidítések", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.enter": "tülk megnyitása", + "keyboard_shortcuts.favourite": "kedvencnek jelölés", + "keyboard_shortcuts.favourites": "kedvenc lista megnyitása", + "keyboard_shortcuts.federated": "föderációs idővonal megnyitása", + "keyboard_shortcuts.heading": "Billentyűparancsok", + "keyboard_shortcuts.home": "saját idővonal megnyitása", "keyboard_shortcuts.hotkey": "Gyorsbillentyű", "keyboard_shortcuts.legend": "jelmagyarázat megjelenítése", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "szerző megjelenítése", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "válaszolás", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "kereső kiemelése", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "új tülk megkezdése", + "keyboard_shortcuts.local": "helyi idővonal megnyitása", + "keyboard_shortcuts.mention": "szerző megemlítése", + "keyboard_shortcuts.muted": "némított felhasználók listájának megnyitása", + "keyboard_shortcuts.my_profile": "profilod megnyitása", + "keyboard_shortcuts.notifications": "értesítések megnyitása", + "keyboard_shortcuts.pinned": "kitűzött tülkök listájának megnyitása", + "keyboard_shortcuts.profile": "szerző profiljának megnyitása", + "keyboard_shortcuts.reply": "válasz", + "keyboard_shortcuts.requests": "követési kérések listájának megnyitása", + "keyboard_shortcuts.search": "fókuszálás a keresőre", + "keyboard_shortcuts.start": "\"Első lépések\" megnyitása", + "keyboard_shortcuts.toggle_hidden": "tartalmi figyelmeztetéssel ellátott szöveg mutatása/elrejtése", + "keyboard_shortcuts.toggle_sensitivity": "média mutatása/elrejtése", + "keyboard_shortcuts.toot": "új tülk írása", "keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele", - "keyboard_shortcuts.up": "fennebb helyezés a listában", + "keyboard_shortcuts.up": "felfelé mozdítás a listában", "lightbox.close": "Bezárás", "lightbox.next": "Következő", "lightbox.previous": "Előző", - "lightbox.view_context": "View context", + "lightbox.view_context": "Kontextus megtekintése", "lists.account.add": "Hozzáadás a listához", - "lists.account.remove": "Eltávolít a listából", + "lists.account.remove": "Eltávolítás a listából", "lists.delete": "Lista törlése", "lists.edit": "Lista szerkesztése", - "lists.edit.submit": "Change title", + "lists.edit.submit": "Cím megváltoztatása", "lists.new.create": "Lista hozzáadása", - "lists.new.title_placeholder": "Új lista cím", - "lists.search": "Keresés a követtett személyek között", + "lists.new.title_placeholder": "Új lista címe", + "lists.search": "Keresés a követett személyek között", "lists.subheading": "Listáid", + "load_pending": "{count, plural, one {# új elem} other {# új elem}}", "loading_indicator.label": "Betöltés...", - "media_gallery.toggle_visible": "Láthatóság váltása", + "media_gallery.toggle_visible": "Láthatóság állítása", "missing_indicator.label": "Nincs találat", - "missing_indicator.sublabel": "Ezen forrás nem található", - "mute_modal.hide_notifications": "Értesítések elrejtése ezen felhasználótól?", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Tiltott felhasználók", + "missing_indicator.sublabel": "Ez az erőforrás nem található", + "mute_modal.hide_notifications": "Rejtsük el a felhasználótól származó értesítéseket?", + "navigation_bar.apps": "Mobil appok", + "navigation_bar.blocks": "Letiltott felhasználók", "navigation_bar.community_timeline": "Helyi idővonal", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.compose": "Új tülk írása", + "navigation_bar.direct": "Közvetlen üzenetek", + "navigation_bar.discover": "Felfedezés", + "navigation_bar.domain_blocks": "Rejtett domainek", "navigation_bar.edit_profile": "Profil szerkesztése", "navigation_bar.favourites": "Kedvencek", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Követési kérések", - "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "Ezen szerverről", + "navigation_bar.filters": "Némított szavak", + "navigation_bar.follow_requests": "Követési kérelmek", + "navigation_bar.follows_and_followers": "Követettek és követők", + "navigation_bar.info": "Erről a kiszolgálóról", "navigation_bar.keyboard_shortcuts": "Gyorsbillentyűk", "navigation_bar.lists": "Listák", "navigation_bar.logout": "Kijelentkezés", "navigation_bar.mutes": "Némított felhasználók", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "Személyes", "navigation_bar.pins": "Kitűzött tülkök", "navigation_bar.preferences": "Beállítások", - "navigation_bar.profile_directory": "Profile directory", - "navigation_bar.public_timeline": "Nyilvános időfolyam", - "navigation_bar.security": "Security", - "notification.favourite": "{name} kedvencnek jelölte az állapotod", + "navigation_bar.public_timeline": "Föderációs idővonal", + "navigation_bar.security": "Biztonság", + "notification.favourite": "{name} kedvencnek jelölte egy tülködet", "notification.follow": "{name} követ téged", "notification.mention": "{name} megemlített", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} rebloggolta az állapotod", + "notification.poll": "Egy szavazás, melyben részt vettél, véget ért", + "notification.reblog": "{name} megtolta a tülködet", "notifications.clear": "Értesítések törlése", - "notifications.clear_confirmation": "Biztos benne, hogy véglegesen törölni akarja az összes értesítését?", - "notifications.column_settings.alert": "Asztali gépi értesítések", + "notifications.clear_confirmation": "Biztos, hogy véglegesen törölni akarod az összes értesítésed?", + "notifications.column_settings.alert": "Asztali értesítések", "notifications.column_settings.favourite": "Kedvencek:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Minden kategória mutatása", + "notifications.column_settings.filter_bar.category": "Gyorskereső mező", + "notifications.column_settings.filter_bar.show": "Mutat", "notifications.column_settings.follow": "Új követők:", - "notifications.column_settings.mention": "Megemítéseim:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.mention": "Megemlítések:", + "notifications.column_settings.poll": "Szavazás eredménye:", "notifications.column_settings.push": "Push értesítések", - "notifications.column_settings.reblog": "Rebloggolások:", + "notifications.column_settings.reblog": "Megtolások:", "notifications.column_settings.show": "Oszlopban mutatás", "notifications.column_settings.sound": "Hang lejátszása", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.group": "{count} notifications", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Státusz láthatóságának módosítása", - "privacy.direct.long": "Posztolás csak az említett felhasználóknak", - "privacy.direct.short": "Egyenesen", - "privacy.private.long": "Posztolás csak követőknek", + "notifications.filter.all": "Mind", + "notifications.filter.boosts": "Megtolások", + "notifications.filter.favourites": "Kedvencnek jelölések", + "notifications.filter.follows": "Követések", + "notifications.filter.mentions": "Megemlítések", + "notifications.filter.polls": "Szavazások eredményei", + "notifications.group": "{count} értesítés", + "poll.closed": "Lezárva", + "poll.refresh": "Frissítés", + "poll.total_people": "{count, plural, one {# személy} other {# személy}}", + "poll.total_votes": "{count, plural, one {# szavazat} other {# szavazat}}", + "poll.vote": "Szavazás", + "poll.voted": "Erre a válaszra szavaztál", + "poll_button.add_poll": "Új szavazás", + "poll_button.remove_poll": "Szavazás törlése", + "privacy.change": "Tülk láthatóságának módosítása", + "privacy.direct.long": "Tülk csak az említett felhasználóknak", + "privacy.direct.short": "Közvetlen", + "privacy.private.long": "Tülk csak követőknek", "privacy.private.short": "Csak követőknek", - "privacy.public.long": "Posztolás a publikus idővonalakra", - "privacy.public.short": "Publikus", - "privacy.unlisted.long": "Do not show in public timelines", + "privacy.public.long": "Tülk a nyilvános idővonalra", + "privacy.public.short": "Nyilvános", + "privacy.unlisted.long": "Ne mutassuk nyilvános idővonalon", "privacy.unlisted.short": "Listázatlan", + "refresh": "Frissítés", "regeneration_indicator.label": "Töltődik…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "regeneration_indicator.sublabel": "A saját idővonalad épp készül!", + "relative_time.days": "{number}n", + "relative_time.hours": "{number}ó", "relative_time.just_now": "most", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "relative_time.minutes": "{number}p", + "relative_time.seconds": "{number}mp", "reply_indicator.cancel": "Mégsem", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", - "report.placeholder": "További kommentek", - "report.submit": "Submit", - "report.target": "Reporting", + "report.forward": "Továbbítás: {target}", + "report.forward_hint": "Ez a fiók egy másik kiszolgálóról van. Oda is elküldöd a jelentés egy anonimizált másolatát?", + "report.hint": "A bejelentést a szervered moderátorainak küldjük el. Megmagyarázhatod, miért jelented az alábbi problémát:", + "report.placeholder": "További megjegyzések", + "report.submit": "Küldés", + "report.target": "{target} jelentése", "search.placeholder": "Keresés", - "search_popout.search_format": "Fejlett keresés", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.search_format": "Speciális keresés", + "search_popout.tips.full_text": "Egyszerű szöveg. Illeszkedő, általad írt tülköket, kedvencnek jelöléseket, megtolást, megemlítést, felhasználói nevet, megjelenített nevet, hashtageket ad majd vissza.", "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.status": "állapot", + "search_popout.tips.text": "Egyszerű szöveg. Illeszkedő megjelenített nevet, felhasználói nevet, hashtageket ad majd vissza", "search_popout.tips.user": "felhasználó", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "Ezen státusz nem rebloggolható", - "status.copy": "Copy link to status", + "search_results.accounts": "Emberek", + "search_results.hashtags": "Hashtagek", + "search_results.statuses": "Tülkök", + "search_results.statuses_fts_disabled": "Ezen a szerveren nem engedélyezett a tülkök tartalom szerinti keresése.", + "search_results.total": "{count, number} {count, plural, one {találat} other {találat}}", + "status.admin_account": "Moderáció megnyitása @{name} felhasználóhoz", + "status.admin_status": "Tülk megnyitása moderációra", + "status.block": "@{name} letiltása", + "status.cancel_reblog_private": "Megtolás törlése", + "status.cannot_reblog": "Ez a tülk nem tolható meg", + "status.copy": "Link másolása tülkbe", "status.delete": "Törlés", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Beágyaz", + "status.detailed_status": "Részletes beszélgetési nézet", + "status.direct": "Közvetlen üzenet @{name} számára", + "status.embed": "Beágyazás", "status.favourite": "Kedvenc", - "status.filtered": "Filtered", + "status.filtered": "Megszűrt", "status.load_more": "Többet", "status.media_hidden": "Média elrejtve", - "status.mention": "Említés", + "status.mention": "@{name} említése", "status.more": "Többet", "status.mute": "@{name} némítása", "status.mute_conversation": "Beszélgetés némítása", - "status.open": "Státusz kinagyítása", + "status.open": "Tülk kibontása", "status.pin": "Kitűzés a profilra", - "status.pinned": "Pinned toot", - "status.read_more": "Read more", - "status.reblog": "Reblog", - "status.reblog_private": "Boost to original audience", - "status.reblogged_by": "{name} reblogolta", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", + "status.pinned": "Kitűzött tülk", + "status.read_more": "Bővebben", + "status.reblog": "Megtolás", + "status.reblog_private": "Megtolás az eredeti közönségnek", + "status.reblogged_by": "{name} megtolta", + "status.reblogs.empty": "Senki sem tolta még meg ezt a tülköt. Ha valaki megteszi, itt fog megjelenni.", + "status.redraft": "Törlés és újraírás", "status.reply": "Válasz", - "status.replyAll": "Válaszolj a beszélgetésre", - "status.report": "Report @{name}", + "status.replyAll": "Válasz a beszélgetésre", + "status.report": "@{name} jelentése", "status.sensitive_warning": "Érzékeny tartalom", "status.share": "Megosztás", - "status.show_less": "Kevesebb", - "status.show_less_all": "Show less for all", + "status.show_less": "Kevesebb megjelenítése", + "status.show_less_all": "Kevesebbet mindenhol", "status.show_more": "Többet", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.unmute_conversation": "Beszélgetés némításának elvonása", - "status.unpin": "Kitűzés eltávolítása a profilról", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", - "tabs_bar.federated_timeline": "Federált", + "status.show_more_all": "Többet mindenhol", + "status.show_thread": "Szál mutatása", + "status.uncached_media_warning": "Nem érhető el", + "status.unmute_conversation": "Beszélgetés némításának kikapcsolása", + "status.unpin": "Kitűzés eltávolítása a profilodról", + "suggestions.dismiss": "Javaslat elvetése", + "suggestions.header": "Esetleg érdekelhet…", + "tabs_bar.federated_timeline": "Föderációs", "tabs_bar.home": "Kezdőlap", - "tabs_bar.local_timeline": "Local", + "tabs_bar.local_timeline": "Helyi", "tabs_bar.notifications": "Értesítések", - "tabs_bar.search": "Search", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", - "ui.beforeunload": "A piszkozata el fog vesztődni ha elhagyja Mastodon-t.", - "upload_area.title": "Húzza ide a feltöltéshez", - "upload_button.label": "Média hozzáadása", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", + "tabs_bar.search": "Keresés", + "time_remaining.days": "{number, plural, one {# nap} other {# nap}} van hátra", + "time_remaining.hours": "{number, plural, one {# óra} other {# óra}} van hátra", + "time_remaining.minutes": "{number, plural, one {# perc} other {# perc}} van hátra", + "time_remaining.moments": "Pillanatok vannak hátra", + "time_remaining.seconds": "{number, plural, one {# másodperc} other {# másodperc}} van hátra", + "trends.count_by_accounts": "{count} {rawCount, plural, one {résztvevő} other {résztvevő}} beszélget", + "trends.trending_now": "Most felkapott", + "ui.beforeunload": "A piszkozatod el fog veszni, ha elhagyod a Mastodont.", + "upload_area.title": "Húzd ide a feltöltéshez", + "upload_button.label": "Média hozzáadása ({formats})", + "upload_error.limit": "Túllépted a fájlfeltöltési korlátot.", + "upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.", + "upload_form.description": "Leírás látáskorlátozottak számára", + "upload_form.edit": "Szerkesztés", "upload_form.undo": "Mégsem", - "upload_progress.label": "Uploading...", - "video.close": "Close video", - "video.exit_fullscreen": "Exit full screen", - "video.expand": "Expand video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", + "upload_modal.analyzing_picture": "Kép elemzése…", + "upload_modal.apply": "Alkalmaz", + "upload_modal.description_placeholder": "A gyors, barna róka átugrik a lusta kutya fölött", + "upload_modal.detect_text": "Szöveg felismerése a képről", + "upload_modal.edit_media": "Média szerkesztése", + "upload_modal.hint": "Kattints vagy húzd a kört az előnézetben arra a fókuszpontra, mely minden megjelenített bélyegképen látható kell, legyen.", + "upload_modal.preview_label": "Előnézet ({ratio})", + "upload_progress.label": "Feltöltés...", + "video.close": "Videó bezárása", + "video.exit_fullscreen": "Kilépés teljes képernyőből", + "video.expand": "Videó nagyítása", + "video.fullscreen": "Teljes képernyő", + "video.hide": "Videó elrejtése", + "video.mute": "Hang némítása", "video.pause": "Szünet", "video.play": "Lejátszás", - "video.unmute": "Hang kinémítása" + "video.unmute": "Hang némításának vége" } diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index b2dc16a48..a4c155dfe 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -1,20 +1,22 @@ { "account.add_or_remove_from_list": "Add or Remove from lists", - "account.badges.bot": "Bot", + "account.badges.bot": "Բոտ", "account.block": "Արգելափակել @{name}֊ին", "account.block_domain": "Թաքցնել ամենը հետեւյալ տիրույթից՝ {domain}", "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Խմբագրել անձնական էջը", "account.endorse": "Feature on profile", "account.follow": "Հետեւել", - "account.followers": "Հետեւվողներ", + "account.followers": "Հետեւողներ", "account.followers.empty": "No one follows this user yet.", "account.follows": "Հետեւում է", "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Հետեւում է քեզ", "account.hide_reblogs": "Թաքցնել @{name}֊ի տարածածները", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Մեդիա", @@ -23,6 +25,7 @@ "account.mute": "Լռեցնել @{name}֊ին", "account.mute_notifications": "Անջատել ծանուցումները @{name}֊ից", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "Գրառումներ", "account.posts_with_replies": "Toots with replies", "account.report": "Բողոքել @{name}֊ից", @@ -35,8 +38,11 @@ "account.unfollow": "Չհետեւել", "account.unmute": "Ապալռեցնել @{name}֊ին", "account.unmute_notifications": "Միացնել ծանուցումները @{name}֊ից", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "Վա՜յ", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Կարող ես սեղմել {combo}՝ սա հաջորդ անգամ բաց թողնելու համար", "bundle_column_error.body": "Այս բաղադրիչը բեռնելու ընթացքում ինչ֊որ բան խափանվեց։", "bundle_column_error.retry": "Կրկին փորձել", @@ -47,6 +53,7 @@ "column.blocks": "Արգելափակված օգտատերեր", "column.community": "Տեղական հոսք", "column.direct": "Direct messages", + "column.directory": "Browse profiles", "column.domain_blocks": "Hidden domains", "column.favourites": "Հավանածներ", "column.follow_requests": "Հետեւելու հայցեր", @@ -64,9 +71,9 @@ "column_header.show_settings": "Ցուցադրել կարգավորումները", "column_header.unpin": "Հանել", "column_subheading.settings": "Կարգավորումներ", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.direct_message_warning_learn_more": "Իմանալ ավելին", "compose_form.hashtag_warning": "Այս թութը չի հաշվառվի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարավոր է որոնել պիտակներով։", "compose_form.lock_disclaimer": "Քո հաշիվը {locked} չէ։ Յուրաքանչյուր ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսված գրառումները։", "compose_form.lock_disclaimer.lock": "փակ", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Վստա՞հ ես, որ ուզում ես մշտապես ջնջել այս ցանկը։", "confirmations.domain_block.confirm": "Թաքցնել ամբողջ տիրույթը", "confirmations.domain_block.message": "Հաստատ֊հաստա՞տ վստահ ես, որ ուզում ես արգելափակել ամբողջ {domain} տիրույթը։ Սովորաբար մի երկու թիրախավորված արգելափակում կամ լռեցում բավական է ու նախընտրելի։", + "confirmations.logout.confirm": "Ելք", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Լռեցնել", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Վստա՞հ ես, որ ուզում ես {name}֊ին լռեցնել։", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Ապահետեւել", "confirmations.unfollow.message": "Վստա՞հ ես, որ ուզում ես այլեւս չհետեւել {name}֊ին։", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Այս թութը քո կայքում ներդնելու համար կարող ես պատճենել ներքոհիշյալ կոդը։", "embed.preview": "Ահա, թե ինչ տեսք կունենա այն՝", "emoji_button.activity": "Զբաղմունքներ", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր մյուսներին՝ խոսակցությունը սկսելու համար։", "empty_column.public": "Այստեղ բան չկա՛։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգույցներից էակների՝ այն լցնելու համար։", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Վավերացնել", "follow_request.reject": "Մերժել", "getting_started.developers": "Developers", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Նոր ցանկի վերնագիր", "lists.search": "Փնտրել քո հետեւած մարդկանց մեջ", "lists.subheading": "Քո ցանկերը", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Բեռնվում է…", "media_gallery.toggle_visible": "Ցուցադրել/թաքցնել", "missing_indicator.label": "Չգտնվեց", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Անձնական", "navigation_bar.pins": "Ամրացված թթեր", "navigation_bar.preferences": "Նախապատվություններ", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Դաշնային հոսք", "navigation_bar.security": "Անվտանգություն", "notification.favourite": "{name} հավանեց թութդ", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Կարգավորել թթի գաղտնիությունը", @@ -290,6 +314,7 @@ "privacy.public.short": "Հրապարակային", "privacy.unlisted.long": "Չթթել հրապարակային հոսքերում", "privacy.unlisted.short": "Ծածուկ", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}օր", @@ -311,9 +336,10 @@ "search_popout.tips.status": "թութ", "search_popout.tips.text": "Հասարակ տեքստը կվերադարձնի համընկնող անուններ, օգտանուններ ու պիտակներ", "search_popout.tips.user": "օգտատեր", - "search_results.accounts": "People", + "search_results.accounts": "Մարդիկ", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {արդյունք} other {արդյունք}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Ավելին", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Ապալռեցնել խոսակցությունը", "status.unpin": "Հանել անձնական էջից", "suggestions.dismiss": "Dismiss suggestion", @@ -360,21 +387,29 @@ "tabs_bar.home": "Հիմնական", "tabs_bar.local_timeline": "Տեղական", "tabs_bar.notifications": "Ծանուցումներ", - "tabs_bar.search": "Search", + "tabs_bar.search": "Փնտրել", "time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։", "upload_area.title": "Քաշիր ու նետիր՝ վերբեռնելու համար", "upload_button.label": "Ավելացնել մեդիա", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Նկարագրություն ավելացրու տեսողական խնդիրներ ունեցողների համար", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Հետարկել", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Վերբեռնվում է…", "video.close": "Փակել տեսագրությունը", "video.exit_fullscreen": "Անջատել լիաէկրան դիտումը", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 07ce0eb98..167c2a766 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -1,29 +1,32 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Tambah atau Hapus dari daftar", "account.badges.bot": "Bot", "account.block": "Blokir @{name}", "account.block_domain": "Sembunyikan segalanya dari {domain}", "account.blocked": "Terblokir", + "account.cancel_follow_request": "Batalkan permintaan ikuti", "account.direct": "Direct Message @{name}", "account.domain_blocked": "Domain disembunyikan", "account.edit_profile": "Ubah profil", - "account.endorse": "Feature on profile", + "account.endorse": "Tampilkan di profil", "account.follow": "Ikuti", "account.followers": "Pengikut", - "account.followers.empty": "No one follows this user yet.", + "account.followers.empty": "Tidak ada satupun yang mengkuti pengguna ini saat ini.", "account.follows": "Mengikuti", - "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows.empty": "Pengguna ini belum mengikuti siapapun.", "account.follows_you": "Mengikuti anda", "account.hide_reblogs": "Sembunyikan boosts dari @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.last_status": "Terakhir aktif", + "account.link_verified_on": "Kepemilikan tautan ini telah dicek pada {date}", + "account.locked_info": "Status privasi akun ini disetel untuk dikunci. Pemilik secara manual meninjau siapa yang dapat mengikuti mereka.", "account.media": "Media", "account.mention": "Balasan @{name}", "account.moved_to": "{name} telah pindah ke:", "account.mute": "Bisukan @{name}", "account.mute_notifications": "Sembunyikan notifikasi dari @{name}", "account.muted": "Dibisukan", - "account.posts": "Toots", + "account.never_active": "Tak pernah", + "account.posts": "Toot", "account.posts_with_replies": "Postingan dengan balasan", "account.report": "Laporkan @{name}", "account.requested": "Menunggu persetujuan. Klik untuk membatalkan permintaan", @@ -31,23 +34,27 @@ "account.show_reblogs": "Tampilkan boost dari @{name}", "account.unblock": "Hapus blokir @{name}", "account.unblock_domain": "Tampilkan {domain}", - "account.unendorse": "Don't feature on profile", + "account.unendorse": "Jangan tampilkan di profil", "account.unfollow": "Berhenti mengikuti", "account.unmute": "Berhenti membisukan @{name}", "account.unmute_notifications": "Munculkan notifikasi dari @{name}", - "alert.unexpected.message": "An unexpected error occurred.", + "alert.rate_limited.message": "Tolong ulangi setelah {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per minggu", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", "bundle_column_error.body": "Kesalahan terjadi saat memuat komponen ini.", "bundle_column_error.retry": "Coba lagi", - "bundle_column_error.title": "Network error", + "bundle_column_error.title": "Kesalahan jaringan", "bundle_modal_error.close": "Tutup", "bundle_modal_error.message": "Kesalahan terjadi saat memuat komponen ini.", "bundle_modal_error.retry": "Coba lagi", "column.blocks": "Pengguna diblokir", "column.community": "Linimasa Lokal", - "column.direct": "Direct messages", - "column.domain_blocks": "Hidden domains", + "column.direct": "Pesan langsung", + "column.directory": "Jelajahi profil", + "column.domain_blocks": "Topik tersembunyi", "column.favourites": "Favorit", "column.follow_requests": "Permintaan mengikuti", "column.home": "Beranda", @@ -64,43 +71,54 @@ "column_header.show_settings": "Tampilkan pengaturan", "column_header.unpin": "Lepaskan", "column_subheading.settings": "Pengaturan", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Hanya media", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.direct_message_warning_learn_more": "Pelajari selengkapnya", "compose_form.hashtag_warning": "Toot ini tidak akan ada dalam daftar tagar manapun karena telah di set sebagai tidak terdaftar. Hanya postingan publik yang bisa dicari dengan tagar.", "compose_form.lock_disclaimer": "Akun anda tidak {locked}. Semua orang dapat mengikuti anda untuk melihat postingan khusus untuk pengikut anda.", "compose_form.lock_disclaimer.lock": "terkunci", "compose_form.placeholder": "Apa yang ada di pikiran anda?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Tambahkan pilihan", + "compose_form.poll.duration": "Durasi jajak pendapat", + "compose_form.poll.option_placeholder": "Pilihan {number}", + "compose_form.poll.remove_option": "Hapus opsi ini", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Tandai sebagai media sensitif", "compose_form.sensitive.marked": "Sumber ini telah ditandai sebagai sumber sensitif.", "compose_form.sensitive.unmarked": "Sumber ini tidak ditandai sebagai sumber sensitif", "compose_form.spoiler.marked": "Teks disembunyikan dibalik peringatan", "compose_form.spoiler.unmarked": "Teks tidak tersembunyi", "compose_form.spoiler_placeholder": "Peringatan konten", "confirmation_modal.cancel": "Batal", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Blokir & Laporkan", "confirmations.block.confirm": "Blokir", "confirmations.block.message": "Apa anda yakin ingin memblokir {name}?", "confirmations.delete.confirm": "Hapus", "confirmations.delete.message": "Apa anda yakin untuk menghapus status ini?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "Hapus", "confirmations.delete_list.message": "Apakah anda yakin untuk menghapus daftar ini secara permanen?", "confirmations.domain_block.confirm": "Sembunyikan keseluruhan domain", "confirmations.domain_block.message": "Apakah anda benar benar yakin untuk memblokir keseluruhan {domain}? Dalam kasus tertentu beberapa pemblokiran atau penyembunyian lebih baik.", + "confirmations.logout.confirm": "Keluar", + "confirmations.logout.message": "Apakah anda yakin ingin keluar?", "confirmations.mute.confirm": "Bisukan", + "confirmations.mute.explanation": "Ini akan menyembunyikan pos dari mereka dan pos yang menyebut mereka, tapi ini tetap mengizinkan mereka melihat posmu dan mengikutimu.", "confirmations.mute.message": "Apa anda yakin ingin membisukan {name}?", - "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.confirm": "Hapus dan konsep ulang", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.confirm": "Balas", + "confirmations.reply.message": "Membalas sekarang akan menimpa pesan yang sedang Anda buat. Anda yakin ingin melanjutkan?", "confirmations.unfollow.confirm": "Berhenti mengikuti", "confirmations.unfollow.message": "Apakah anda ingin berhenti mengikuti {name}?", + "conversation.delete": "Hapus percakapan", + "conversation.mark_as_read": "Tandai sudah dibaca", + "conversation.open": "Lihat percakapan", + "conversation.with": "Dengan {names}", + "directory.federated": "Dari fediverse yang dikenal", + "directory.local": "Dari {domain} saja", + "directory.new_arrivals": "Yang baru datang", + "directory.recently_active": "Baru-baru ini aktif", "embed.instructions": "Sematkan status ini di website anda dengan menyalin kode di bawah ini.", "embed.preview": "Seperti ini nantinya:", "emoji_button.activity": "Aktivitas", @@ -117,170 +135,176 @@ "emoji_button.search_results": "Hasil pencarian", "emoji_button.symbols": "Simbol", "emoji_button.travel": "Tempat Wisata", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.account_timeline": "Tidak ada toot di sini!", + "empty_column.account_unavailable": "Profil tidak tersedia", + "empty_column.blocks": "Anda belum memblokir siapapun.", "empty_column.community": "Linimasa lokal masih kosong. Tulis sesuatu secara publik dan buat roda berputar!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", - "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.direct": "Anda belum memiliki pesan langsung. Ketika Anda mengirim atau menerimanya, maka akan muncul di sini.", + "empty_column.domain_blocks": "Tidak ada topik tersembunyi.", + "empty_column.favourited_statuses": "Anda belum memiliki toot favorit. Ketika Anda mengirim atau menerimanya, maka akan muncul di sini.", + "empty_column.favourites": "Tidak ada seorangpun yang memfavoritkan toot ini. Ketika seseorang melakukannya, maka akan muncul disini.", + "empty_column.follow_requests": "Anda belum memiliki permintaan mengikuti. Ketika Anda menerimanya, maka akan muncul disini.", "empty_column.hashtag": "Tidak ada apapun dalam hashtag ini.", "empty_column.home": "Linimasa anda kosong! Kunjungi {public} atau gunakan pencarian untuk memulai dan bertemu pengguna lain.", "empty_column.home.public_timeline": "linimasa publik", "empty_column.list": "Tidak ada postingan di list ini. Ketika anggota dari list ini memposting status baru, status tersebut akan tampil disini.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.lists": "Anda belum memiliki daftar. Ketika Anda membuatnya, maka akan muncul disini.", + "empty_column.mutes": "Anda belum membisukan siapapun.", "empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.", "empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisi ini", + "error.unexpected_crash.explanation": "Karena kutu pada kode kami atau isu kompatibilitas peramban, halaman tak dapat ditampilkan dengan benar.", + "error.unexpected_crash.next_steps": "Coba segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi native.", + "errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip", + "errors.unexpected_crash.report_issue": "Laporkan masalah", "follow_request.authorize": "Izinkan", "follow_request.reject": "Tolak", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", + "getting_started.developers": "Pengembang", + "getting_started.directory": "Direktori profil", + "getting_started.documentation": "Dokumentasi", "getting_started.heading": "Mulai", - "getting_started.invite": "Invite people", + "getting_started.invite": "Undang orang", "getting_started.open_source_notice": "Mastodon adalah perangkat lunak yang bersifat terbuka. Anda dapat berkontribusi atau melaporkan permasalahan/bug di Github {github}.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", + "getting_started.security": "Keamanan", + "getting_started.terms": "Ketentuan layanan", + "hashtag.column_header.tag_mode.all": "dan {additional}", + "hashtag.column_header.tag_mode.any": "atau {additional}", + "hashtag.column_header.tag_mode.none": "tanpa {additional}", + "hashtag.column_settings.select.no_options_message": "Tidak ada saran yang ditemukan", + "hashtag.column_settings.select.placeholder": "Masukkan tagar…", + "hashtag.column_settings.tag_mode.all": "Semua ini", + "hashtag.column_settings.tag_mode.any": "Semua ini", + "hashtag.column_settings.tag_mode.none": "Tak satu pun", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Dasar", "home.column_settings.show_reblogs": "Tampilkan boost", "home.column_settings.show_replies": "Tampilkan balasan", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "intervals.full.days": "{number, plural, other {# hari}}", + "intervals.full.hours": "{number, plural, other {# jam}}", + "intervals.full.minutes": "{number, plural, other {# menit}}", + "introduction.federation.action": "Selanjutnya", + "introduction.federation.federated.headline": "Gabungan", + "introduction.federation.federated.text": "Pos publik dari server fediverse lain akan muncul di linimasa gabungan.", + "introduction.federation.home.headline": "Beranda", + "introduction.federation.home.text": "Pos dari orang yang Anda ikuti akan muncul di beranda. Anda dapat mengikuti siapa pun dari server mana pun!", + "introduction.federation.local.headline": "Lokal", + "introduction.federation.local.text": "Pos publik dari orang yang ada di server sama denganmu akan muncul di linimasa lokal.", "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.favourite.headline": "Favorit", + "introduction.interactions.favourite.text": "Anda dapat menyimpan toot untuk dibaca nanti, biarkan penulis tahu Anda menyukainya, dengan memfavoritkannya.", "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "introduction.interactions.reblog.text": "Anda dapat membagikan toot orang lain kepada pengikut Anda dengan mem-boost-nya.", + "introduction.interactions.reply.headline": "Balas", + "introduction.interactions.reply.text": "Anda dapat membalas toot Anda dan orang lain, yang akan menjalin dalam satu percakapan.", + "introduction.welcome.action": "Ayo!", + "introduction.welcome.headline": "Langkah pertama", + "introduction.welcome.text": "Selamat datang di fediverse! Beberapa saat lagi, Anda dapat menyiarkan pesan dan berbincang dengan teman lintas server. Namun server ini, {domain}, spesial--ia menyimpan profil Anda, jadi ingatlah namanya.", "keyboard_shortcuts.back": "untuk kembali", - "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.blocked": "buka daftar pengguna terblokir", "keyboard_shortcuts.boost": "untuk menyebarkan", "keyboard_shortcuts.column": "untuk fokus kepada sebuah status di sebuah kolom", "keyboard_shortcuts.compose": "untuk fokus ke area penulisan", "keyboard_shortcuts.description": "Deskripsi", - "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.direct": "buka kolom pesan langsung", "keyboard_shortcuts.down": "untuk pindah ke bawah dalam sebuah daftar", "keyboard_shortcuts.enter": "untuk membuka status", "keyboard_shortcuts.favourite": "untuk memfavoritkan", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.favourites": "buka daftar favorit", + "keyboard_shortcuts.federated": "buka linimasa gabungan", "keyboard_shortcuts.heading": "Pintasan keyboard", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Hotkey", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.home": "buka linimasa beranda", + "keyboard_shortcuts.hotkey": "Pintasan", + "keyboard_shortcuts.legend": "tampilkan legenda ini", + "keyboard_shortcuts.local": "buka linimasa lokal", + "keyboard_shortcuts.mention": "sebut pencipta", + "keyboard_shortcuts.muted": "buka daftar pengguna terbisukan", + "keyboard_shortcuts.my_profile": "buka profil Anda", + "keyboard_shortcuts.notifications": "buka kolom notifikasi", + "keyboard_shortcuts.pinned": "buka daftar toot tersemat", + "keyboard_shortcuts.profile": "buka profil pencipta", + "keyboard_shortcuts.reply": "balas", + "keyboard_shortcuts.requests": "buka daftar permintaan ikuti", "keyboard_shortcuts.search": "untuk fokus mencari", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.start": "buka kolom \"memulai\"", + "keyboard_shortcuts.toggle_hidden": "tampilkan/sembunyikan teks di belakang CW", + "keyboard_shortcuts.toggle_sensitivity": "tampilkan/sembunyikan media", + "keyboard_shortcuts.toot": "mulai toot baru", + "keyboard_shortcuts.unfocus": "untuk tidak fokus pada area teks/pencarian", + "keyboard_shortcuts.up": "untuk memindah ke atas pada daftar", "lightbox.close": "Tutup", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lightbox.view_context": "View context", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", + "lightbox.next": "Selanjutnya", + "lightbox.previous": "Sebelumnya", + "lightbox.view_context": "Lihat konteks", + "lists.account.add": "Tambah ke daftar", + "lists.account.remove": "Hapus dari daftar", + "lists.delete": "Hapus daftar", + "lists.edit": "Sunting daftar", + "lists.edit.submit": "Ubah judul", + "lists.new.create": "Tambah daftar", + "lists.new.title_placeholder": "Judul daftar baru", + "lists.search": "Cari di antara orang yang Anda ikuti", + "lists.subheading": "Daftar Anda", + "load_pending": "{count, plural, other {# item baru}}", "loading_indicator.label": "Tunggu sebentar...", "media_gallery.toggle_visible": "Tampil/Sembunyikan", "missing_indicator.label": "Tidak ditemukan", - "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.hide_notifications": "Hide notifications from this user?", - "navigation_bar.apps": "Mobile apps", + "missing_indicator.sublabel": "Sumber daya tak bisa ditemukan", + "mute_modal.hide_notifications": "Sembunyikan notifikasi dari pengguna ini?", + "navigation_bar.apps": "Aplikasi mobile", "navigation_bar.blocks": "Pengguna diblokir", "navigation_bar.community_timeline": "Linimasa lokal", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.compose": "Tulis toot baru", + "navigation_bar.direct": "Pesan langsung", + "navigation_bar.discover": "Temukan", + "navigation_bar.domain_blocks": "Domain tersembunyi", "navigation_bar.edit_profile": "Ubah profil", "navigation_bar.favourites": "Favorit", - "navigation_bar.filters": "Muted words", + "navigation_bar.filters": "Kata yang dibisukan", "navigation_bar.follow_requests": "Permintaan mengikuti", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Ikuti dan pengikut", "navigation_bar.info": "Informasi selengkapnya", "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts", - "navigation_bar.lists": "Lists", + "navigation_bar.lists": "Daftar", "navigation_bar.logout": "Keluar", "navigation_bar.mutes": "Pengguna dibisukan", "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Pinned toots", + "navigation_bar.pins": "Toot tersemat", "navigation_bar.preferences": "Pengaturan", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Linimasa gabungan", - "navigation_bar.security": "Security", + "navigation_bar.security": "Keamanan", "notification.favourite": "{name} menyukai status anda", "notification.follow": "{name} mengikuti anda", - "notification.mention": "{name} mentioned you", - "notification.poll": "A poll you have voted in has ended", + "notification.mention": "{name} menyebut Anda", + "notification.poll": "Japat yang Anda ikuti telah berakhir", "notification.reblog": "{name} mem-boost status anda", "notifications.clear": "Hapus notifikasi", "notifications.clear_confirmation": "Apa anda yakin hendak menghapus semua notifikasi anda?", "notifications.column_settings.alert": "Notifikasi desktop", "notifications.column_settings.favourite": "Favorit:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Tampilkan semua kategori", + "notifications.column_settings.filter_bar.category": "Bilah penyaring cepat", + "notifications.column_settings.filter_bar.show": "Tampilkan", "notifications.column_settings.follow": "Pengikut baru:", "notifications.column_settings.mention": "Balasan:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.poll": "Hasil japat:", + "notifications.column_settings.push": "Notifikasi dorong", "notifications.column_settings.reblog": "Boost:", "notifications.column_settings.show": "Tampilkan dalam kolom", "notifications.column_settings.sound": "Mainkan suara", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.group": "{count} notifications", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "notifications.filter.all": "Semua", + "notifications.filter.boosts": "Boost", + "notifications.filter.favourites": "Favorit", + "notifications.filter.follows": "Diikuti", + "notifications.filter.mentions": "Sebutan", + "notifications.filter.polls": "Hasil japat", + "notifications.group": "{count} notifikasi", + "poll.closed": "Ditutup", + "poll.refresh": "Segarkan", + "poll.total_people": "{count, plural, other {# orang}}", + "poll.total_votes": "{count, plural, other {# suara}}", + "poll.vote": "Memilih", + "poll.voted": "Anda memilih jawaban ini", + "poll_button.add_poll": "Tambah japat", + "poll_button.remove_poll": "Hapus japat", "privacy.change": "Tentukan privasi status", "privacy.direct.long": "Kirim hanya ke pengguna yang disebut", "privacy.direct.short": "Langsung", @@ -290,99 +314,110 @@ "privacy.public.short": "Publik", "privacy.unlisted.long": "Tidak ditampilkan di linimasa publik", "privacy.unlisted.short": "Tak Terdaftar", - "regeneration_indicator.label": "Loading…", + "refresh": "Segarkan", + "regeneration_indicator.label": "Memuat…", "regeneration_indicator.sublabel": "Linimasa anda sedang disiapkan!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", - "relative_time.just_now": "now", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "relative_time.days": "{number}h", + "relative_time.hours": "{number}j", + "relative_time.just_now": "sekarang", + "relative_time.minutes": "{number}b", + "relative_time.seconds": "{number}d", "reply_indicator.cancel": "Batal", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.forward": "Teruskan ke {target}", + "report.forward_hint": "Akun dari server lain. Kirim salinan laporan scr anonim ke sana?", "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", "report.placeholder": "Komentar tambahan", "report.submit": "Kirim", "report.target": "Melaporkan", "search.placeholder": "Pencarian", - "search_popout.search_format": "Advanced search format", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.search_format": "Format pencarian mahir", + "search_popout.tips.full_text": "Teks simpel menampilkan status yang Anda tulis, favoritkan, boost-kan, atau status yang menyebut Anda, serta nama pengguna, nama yang ditampilkan, dan tagar yang cocok.", "search_popout.tips.hashtag": "tagar", "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", + "search_popout.tips.text": "Teks sederhana menampilkan nama yang ditampilkan, nama pengguna, dan tagar yang cocok", + "search_popout.tips.user": "pengguna", + "search_results.accounts": "Orang", + "search_results.hashtags": "Tagar", + "search_results.statuses": "Toot", + "search_results.statuses_fts_disabled": "Pencarian toot berdasarkan konten tidak diaktifkan di server Mastadon ini.", "search_results.total": "{count, number} {count, plural, one {hasil} other {hasil}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to status", + "status.admin_account": "Buka antar muka moderasi untuk @{name}", + "status.admin_status": "Buka status ini dalam antar muka moderasi", + "status.block": "Blokir @{name}", + "status.cancel_reblog_private": "Batalkan boost", + "status.cannot_reblog": "Pos ini tak dapat di-boost", + "status.copy": "Salin tautan ke status", "status.delete": "Hapus", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", + "status.detailed_status": "Tampilan detail percakapan", + "status.direct": "Pesan langsung @{name}", + "status.embed": "Tanam", "status.favourite": "Difavoritkan", - "status.filtered": "Filtered", + "status.filtered": "Disaring", "status.load_more": "Tampilkan semua", "status.media_hidden": "Media disembunyikan", "status.mention": "Balasan @{name}", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", + "status.more": "Lebih banyak", + "status.mute": "Bisukan @{name}", + "status.mute_conversation": "Bisukan percakapan", "status.open": "Tampilkan status ini", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", - "status.read_more": "Read more", + "status.pin": "Sematkan pada profil", + "status.pinned": "Toot tersemat", + "status.read_more": "Baca lebih banyak", "status.reblog": "Boost", - "status.reblog_private": "Boost to original audience", + "status.reblog_private": "Boost ke audiens asli", "status.reblogged_by": "di-boost {name}", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", + "status.reblogs.empty": "Belum ada yang mem-boost toot ini. Ketika seseorang melakukannya, maka akan muncul di sini.", + "status.redraft": "Hapus & redraf", "status.reply": "Balas", "status.replyAll": "Balas ke semua", "status.report": "Laporkan @{name}", "status.sensitive_warning": "Konten sensitif", - "status.share": "Share", + "status.share": "Bagikan", "status.show_less": "Tampilkan lebih sedikit", "status.show_less_all": "Show less for all", "status.show_more": "Tampilkan semua", "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", - "status.unmute_conversation": "Unmute conversation", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "status.show_thread": "Tampilkan utas", + "status.uncached_media_warning": "Tak tersedia", + "status.unmute_conversation": "Bunyikan percakapan", + "status.unpin": "Hapus sematan dari profil", + "suggestions.dismiss": "Hentikan saran", + "suggestions.header": "Anda mungkin tertarik dg…", "tabs_bar.federated_timeline": "Gabungan", "tabs_bar.home": "Beranda", "tabs_bar.local_timeline": "Lokal", "tabs_bar.notifications": "Notifikasi", - "tabs_bar.search": "Search", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "tabs_bar.search": "Cari", + "time_remaining.days": "{number, plural, other {# hari}} tersisa", + "time_remaining.hours": "{number, plural, other {# jam}} tersisa", + "time_remaining.minutes": "{number, plural, other {# menit}} tersisa", + "time_remaining.moments": "Momen tersisa", + "time_remaining.seconds": "{number, plural, other {# detik}} tersisa", + "trends.count_by_accounts": "{count} {rawCount, plural, other {orang}} berbicara", + "trends.trending_now": "Sedang tren sekarang", "ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.", "upload_area.title": "Seret & lepaskan untuk mengunggah", "upload_button.label": "Tambahkan media", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.limit": "Batas unggah berkas terlampaui.", + "upload_error.poll": "Unggah berkas tak diizinkan di japat ini.", "upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas", - "upload_form.focus": "Potong", + "upload_form.edit": "Sunting", "upload_form.undo": "Undo", + "upload_modal.analyzing_picture": "Analisis gambar…", + "upload_modal.apply": "Terapkan", + "upload_modal.description_placeholder": "Muharjo seorang xenofobia universal yang takut pada warga jazirah, contohnya Qatar", + "upload_modal.detect_text": "Deteksi teks pada gambar", + "upload_modal.edit_media": "Sunting media", + "upload_modal.hint": "Klik atau seret lingkaran pada pratinjau untuk memilih titik fokus yang akan ditampilkan pada semua gambar kecil.", + "upload_modal.preview_label": "Pratinjau ({ratio})", "upload_progress.label": "Mengunggah...", - "video.close": "Close video", + "video.close": "Tutup video", "video.exit_fullscreen": "Keluar dari layar penuh", "video.expand": "Perbesar video", - "video.fullscreen": "Full screen", - "video.hide": "Hide video", - "video.mute": "Mute sound", - "video.pause": "Pause", - "video.play": "Play", - "video.unmute": "Unmute sound" + "video.fullscreen": "Layar penuh", + "video.hide": "Sembunyikan video", + "video.mute": "Bisukan suara", + "video.pause": "Jeda", + "video.play": "Putar", + "video.unmute": "Bunyikan suara" } diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index c3f8707d1..076835218 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -4,6 +4,7 @@ "account.block": "Blokusar @{name}", "account.block_domain": "Hide everything from {domain}", "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Modifikar profilo", @@ -15,6 +16,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Sequas tu", "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Celar @{name}", "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "Mesaji", "account.posts_with_replies": "Toots with replies", "account.report": "Denuncar @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Ne plus sequar", "account.unmute": "Ne plus celar @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Tu povas presar sur {combo} por omisar co en la venonta foyo", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", @@ -47,6 +53,7 @@ "column.blocks": "Blokusita uzeri", "column.community": "Lokala tempolineo", "column.direct": "Direct messages", + "column.directory": "Browse profiles", "column.domain_blocks": "Hidden domains", "column.favourites": "Favorati", "column.follow_requests": "Demandi di sequado", @@ -64,7 +71,7 @@ "column_header.show_settings": "Show settings", "column_header.unpin": "Unpin", "column_subheading.settings": "Settings", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Here is what it will look like:", "emoji_button.activity": "Activity", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.", "empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Yurizar", "follow_request.reject": "Refuzar", "getting_started.developers": "Developers", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "New list title", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Kargante...", "media_gallery.toggle_visible": "Chanjar videbleso", "missing_indicator.label": "Ne trovita", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "Preferi", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federata tempolineo", "navigation_bar.security": "Security", "notification.favourite": "{name} favorizis tua mesajo", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Aranjar privateso di mesaji", @@ -290,6 +314,7 @@ "privacy.public.short": "Publike", "privacy.unlisted.long": "Ne montrar en publika tempolinei", "privacy.unlisted.short": "Ne enlistigota", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {rezulto} other {rezulti}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Montrar plue", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "upload_area.title": "Tranar faligar por kargar", "upload_button.label": "Adjuntar kontenajo", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Desfacar", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Kargante...", "video.close": "Close video", "video.exit_fullscreen": "Exit full screen", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index d5e88c4f3..757882523 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -4,7 +4,8 @@ "account.block": "Blocca @{name}", "account.block_domain": "Nascondi tutto da {domain}", "account.blocked": "Bloccato", - "account.direct": "Invia messaggio diretto a @{name}", + "account.cancel_follow_request": "Annulla richiesta di seguito", + "account.direct": "Invia messaggio privato a @{name}", "account.domain_blocked": "Dominio nascosto", "account.edit_profile": "Modifica profilo", "account.endorse": "Metti in evidenza sul profilo", @@ -15,6 +16,7 @@ "account.follows.empty": "Questo utente non segue ancora nessuno.", "account.follows_you": "Ti segue", "account.hide_reblogs": "Nascondi condivisioni da @{name}", + "account.last_status": "Ultima attività", "account.link_verified_on": "La proprietà di questo link è stata controllata il {date}", "account.locked_info": "Il livello di privacy di questo account è impostato a \"bloccato\". Il proprietario esamina manualmente le richieste di seguirlo.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Silenzia @{name}", "account.mute_notifications": "Silenzia notifiche da @{name}", "account.muted": "Silenziato", + "account.never_active": "Mai", "account.posts": "Toot", "account.posts_with_replies": "Toot e risposte", "account.report": "Segnala @{name}", @@ -35,18 +38,22 @@ "account.unfollow": "Non seguire", "account.unmute": "Non silenziare @{name}", "account.unmute_notifications": "Non silenziare più le notifiche da @{name}", + "alert.rate_limited.message": "Riprova dopo {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Si è verificato un errore inatteso.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per settimana", "boost_modal.combo": "Puoi premere {combo} per saltare questo passaggio la prossima volta", "bundle_column_error.body": "E' avvenuto un errore durante il caricamento di questo componente.", "bundle_column_error.retry": "Riprova", - "bundle_column_error.title": "Network error", + "bundle_column_error.title": "Errore di rete", "bundle_modal_error.close": "Chiudi", "bundle_modal_error.message": "C'è stato un errore mentre questo componente veniva caricato.", "bundle_modal_error.retry": "Riprova", "column.blocks": "Utenti bloccati", "column.community": "Timeline locale", "column.direct": "Messaggi diretti", + "column.directory": "Sfoglia profili", "column.domain_blocks": "Domini nascosti", "column.favourites": "Apprezzati", "column.follow_requests": "Richieste di amicizia", @@ -66,25 +73,25 @@ "column_subheading.settings": "Impostazioni", "community.column_settings.media_only": "Solo media", "compose_form.direct_message_warning": "Questo toot sarà mandato solo a tutti gli utenti menzionati.", - "compose_form.direct_message_warning_learn_more": "Per saperne di piu'", + "compose_form.direct_message_warning_learn_more": "Per saperne di più", "compose_form.hashtag_warning": "Questo toot non è listato, quindi non sarà trovato nelle ricerche per hashtag. Solo i toot pubblici possono essere cercati per hashtag.", "compose_form.lock_disclaimer": "Il tuo account non è {bloccato}. Chiunque può decidere di seguirti per vedere i tuoi post per soli seguaci.", "compose_form.lock_disclaimer.lock": "bloccato", "compose_form.placeholder": "A cosa stai pensando?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Aggiungi una scelta", + "compose_form.poll.duration": "Durata del sondaggio", + "compose_form.poll.option_placeholder": "Scelta {number}", + "compose_form.poll.remove_option": "Rimuovi questa scelta", "compose_form.publish": "Toot", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Segna media come sensibile", "compose_form.sensitive.marked": "Questo media è contrassegnato come sensibile", "compose_form.sensitive.unmarked": "Questo media non è contrassegnato come sensibile", "compose_form.spoiler.marked": "Il testo è nascosto dall'avviso", "compose_form.spoiler.unmarked": "Il testo non è nascosto", "compose_form.spoiler_placeholder": "Content warning", "confirmation_modal.cancel": "Annulla", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Blocca & Segnala", "confirmations.block.confirm": "Blocca", "confirmations.block.message": "Sei sicuro di voler bloccare {name}?", "confirmations.delete.confirm": "Cancella", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Sei sicuro di voler cancellare definitivamente questa lista?", "confirmations.domain_block.confirm": "Nascondi intero dominio", "confirmations.domain_block.message": "Sei davvero sicuro che vuoi bloccare l'intero {domain}? Nella maggior parte dei casi, pochi blocchi o silenziamenti mirati sono sufficienti e preferibili. Non vedrai nessun contenuto di quel dominio né nelle timeline pubbliche né nelle notifiche. I tuoi seguaci di quel dominio saranno eliminati.", + "confirmations.logout.confirm": "Esci", + "confirmations.logout.message": "Sei sicuro di voler uscire?", "confirmations.mute.confirm": "Silenzia", + "confirmations.mute.explanation": "I post scritti da loro e quelli che li menzionano saranno nascosti, ma loro continueranno a vedere i tuoi post e a poterti seguire.", "confirmations.mute.message": "Sei sicuro di voler silenziare {name}?", "confirmations.redraft.confirm": "Cancella e riscrivi", "confirmations.redraft.message": "Sei sicuro di voler cancellare questo stato e riscriverlo? Perderai tutte le risposte, condivisioni e preferiti.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Se rispondi ora, il messaggio che stai componendo sarà sovrascritto. Sei sicuro di voler continuare?", "confirmations.unfollow.confirm": "Smetti di seguire", "confirmations.unfollow.message": "Sei sicuro che non vuoi più seguire {name}?", + "conversation.delete": "Elimina conversazione", + "conversation.mark_as_read": "Segna come letto", + "conversation.open": "Visualizza conversazione", + "conversation.with": "Con {names}", + "directory.federated": "Da un fediverso noto", + "directory.local": "Solo da {domain}", + "directory.new_arrivals": "Nuovi arrivi", + "directory.recently_active": "Attivo di recente", "embed.instructions": "Inserisci questo status nel tuo sito copiando il codice qui sotto.", "embed.preview": "Ecco come apparirà:", "emoji_button.activity": "Attività", @@ -118,10 +136,10 @@ "emoji_button.symbols": "Simboli", "emoji_button.travel": "Viaggi e luoghi", "empty_column.account_timeline": "Non ci sono toot qui!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_unavailable": "Profilo non disponibile", "empty_column.blocks": "Non hai ancora bloccato nessun utente.", "empty_column.community": "La timeline locale è vuota. Condividi qualcosa pubblicamente per dare inizio alla festa!", - "empty_column.direct": "Non hai ancora nessun messaggio diretto. Quando ne manderai o riceverai qualcuno, apparirà qui.", + "empty_column.direct": "Non hai ancora nessun messaggio privato. Quando ne manderai o riceverai qualcuno, apparirà qui.", "empty_column.domain_blocks": "Non vi sono domini nascosti.", "empty_column.favourited_statuses": "Non hai ancora segnato nessun toot come apprezzato. Quando lo farai, comparirà qui.", "empty_column.favourites": "Nessuno ha ancora segnato questo toot come apprezzato. Quando qualcuno lo farà, apparirà qui.", @@ -134,10 +152,14 @@ "empty_column.mutes": "Non hai ancora silenziato nessun utente.", "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.", "empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio", + "error.unexpected_crash.explanation": "A causa di un bug nel nostro codice o di un problema di compatibilità del browser, questa pagina non può essere visualizzata correttamente.", + "error.unexpected_crash.next_steps": "Prova ad aggiornare la pagina. Se non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser diverso o un'app nativa.", + "errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti", + "errors.unexpected_crash.report_issue": "Segnala il problema", "follow_request.authorize": "Autorizza", "follow_request.reject": "Rifiuta", "getting_started.developers": "Sviluppatori", - "getting_started.directory": "Directory del profilo", + "getting_started.directory": "Directory dei profili", "getting_started.documentation": "Documentazione", "getting_started.heading": "Come iniziare", "getting_started.invite": "Invita qualcuno", @@ -156,15 +178,15 @@ "home.column_settings.basic": "Semplice", "home.column_settings.show_reblogs": "Mostra post condivisi", "home.column_settings.show_replies": "Mostra risposte", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.days": "{number, plural, one {# giorno} other {# giorni}}", + "intervals.full.hours": "{number, plural, one {# ora} other {# ore}}", + "intervals.full.minutes": "{number, plural, one {# minuto} other {# minuti}}", "introduction.federation.action": "Avanti", - "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.headline": "Federato", "introduction.federation.federated.text": "I post pubblici provenienti da altri server del fediverse saranno mostrati nella timeline federata.", "introduction.federation.home.headline": "Home", "introduction.federation.home.text": "I post scritti da persone che segui saranno mostrati nella timeline home. Puoi seguire chiunque su qualunque server!", - "introduction.federation.local.headline": "Local", + "introduction.federation.local.headline": "Locale", "introduction.federation.local.text": "I post pubblici scritti da persone sul tuo stesso server saranno mostrati nella timeline locale.", "introduction.interactions.action": "Finisci il tutorial!", "introduction.interactions.favourite.headline": "Apprezza", @@ -204,23 +226,24 @@ "keyboard_shortcuts.search": "per spostare il focus sulla ricerca", "keyboard_shortcuts.start": "per aprire la colonna \"Come iniziare\"", "keyboard_shortcuts.toggle_hidden": "per mostrare/nascondere il testo dei CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "mostrare/nascondere media", "keyboard_shortcuts.toot": "per iniziare a scrivere un toot completamente nuovo", "keyboard_shortcuts.unfocus": "per uscire dall'area di composizione o dalla ricerca", "keyboard_shortcuts.up": "per spostarsi in alto nella lista", "lightbox.close": "Chiudi", "lightbox.next": "Successivo", "lightbox.previous": "Precedente", - "lightbox.view_context": "View context", + "lightbox.view_context": "Mostra contesto", "lists.account.add": "Aggiungi alla lista", "lists.account.remove": "Togli dalla lista", - "lists.delete": "Delete list", + "lists.delete": "Elimina lista", "lists.edit": "Modifica lista", "lists.edit.submit": "Cambia titolo", "lists.new.create": "Aggiungi lista", "lists.new.title_placeholder": "Titolo della nuova lista", "lists.search": "Cerca tra le persone che segui", "lists.subheading": "Le tue liste", + "load_pending": "{count, plural, one {# nuovo oggetto} other {# nuovi oggetti}}", "loading_indicator.label": "Caricamento...", "media_gallery.toggle_visible": "Imposta visibilità", "missing_indicator.label": "Non trovato", @@ -237,22 +260,21 @@ "navigation_bar.favourites": "Apprezzati", "navigation_bar.filters": "Parole silenziate", "navigation_bar.follow_requests": "Richieste di amicizia", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Seguiti e seguaci", "navigation_bar.info": "Informazioni su questo server", "navigation_bar.keyboard_shortcuts": "Tasti di scelta rapida", "navigation_bar.lists": "Liste", "navigation_bar.logout": "Esci", "navigation_bar.mutes": "Utenti silenziati", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "Personale", "navigation_bar.pins": "Toot fissati in cima", "navigation_bar.preferences": "Impostazioni", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Timeline federata", "navigation_bar.security": "Sicurezza", "notification.favourite": "{name} ha apprezzato il tuo post", "notification.follow": "{name} ha iniziato a seguirti", "notification.mention": "{name} ti ha menzionato", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Un sondaggio in cui hai votato è terminato", "notification.reblog": "{name} ha condiviso il tuo post", "notifications.clear": "Cancella notifiche", "notifications.clear_confirmation": "Vuoi davvero cancellare tutte le notifiche?", @@ -263,7 +285,7 @@ "notifications.column_settings.filter_bar.show": "Mostra", "notifications.column_settings.follow": "Nuovi seguaci:", "notifications.column_settings.mention": "Menzioni:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Risultati del sondaggio:", "notifications.column_settings.push": "Notifiche push", "notifications.column_settings.reblog": "Post condivisi:", "notifications.column_settings.show": "Mostra in colonna", @@ -273,27 +295,30 @@ "notifications.filter.favourites": "Apprezzati", "notifications.filter.follows": "Seguaci", "notifications.filter.mentions": "Menzioni", - "notifications.filter.polls": "Poll results", + "notifications.filter.polls": "Risultati del sondaggio", "notifications.group": "{count} notifiche", "poll.closed": "Chiuso", "poll.refresh": "Aggiorna", + "poll.total_people": "{count, plural, one {# persona} other {# persone}}", "poll.total_votes": "{count, plural, one {# voto} other {# voti}}", "poll.vote": "Vota", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll.voted": "Hai votato per questa risposta", + "poll_button.add_poll": "Aggiungi un sondaggio", + "poll_button.remove_poll": "Rimuovi sondaggio", "privacy.change": "Modifica privacy del post", "privacy.direct.long": "Invia solo a utenti menzionati", - "privacy.direct.short": "Diretto", + "privacy.direct.short": "Diretto in privato", "privacy.private.long": "Invia solo ai seguaci", "privacy.private.short": "Privato", "privacy.public.long": "Invia alla timeline pubblica", "privacy.public.short": "Pubblico", "privacy.unlisted.long": "Non mostrare sulla timeline pubblica", "privacy.unlisted.short": "Non elencato", + "refresh": "Aggiorna", "regeneration_indicator.label": "Caricamento in corso…", "regeneration_indicator.sublabel": "Stiamo preparando il tuo home feed!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.days": "{number}g", + "relative_time.hours": "{number}o", "relative_time.just_now": "ora", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", @@ -307,13 +332,14 @@ "search.placeholder": "Cerca", "search_popout.search_format": "Formato di ricerca avanzato", "search_popout.tips.full_text": "Testo semplice per trovare gli status che hai scritto, segnato come apprezzati, condiviso o in cui sei stato citato, e inoltre i nomi utente, nomi visualizzati e hashtag che lo contengono.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", + "search_popout.tips.hashtag": "etichetta", + "search_popout.tips.status": "stato", "search_popout.tips.text": "Testo semplice per trovare nomi visualizzati, nomi utente e hashtag che lo contengono", "search_popout.tips.user": "utente", "search_results.accounts": "Gente", "search_results.hashtags": "Hashtag", "search_results.statuses": "Toot", + "search_results.statuses_fts_disabled": "La ricerca di toot per il loro contenuto non è abilitata su questo server Mastodon.", "search_results.total": "{count} {count, plural, one {risultato} other {risultati}}", "status.admin_account": "Apri interfaccia di moderazione per @{name}", "status.admin_status": "Apri questo status nell'interfaccia di moderazione", @@ -323,7 +349,7 @@ "status.copy": "Copia link allo status", "status.delete": "Elimina", "status.detailed_status": "Vista conversazione dettagliata", - "status.direct": "Messaggio diretto @{name}", + "status.direct": "Messaggio privato @{name}", "status.embed": "Incorpora", "status.favourite": "Apprezzato", "status.filtered": "Filtrato", @@ -352,6 +378,7 @@ "status.show_more": "Mostra di più", "status.show_more_all": "Mostra di più per tutti", "status.show_thread": "Mostra thread", + "status.uncached_media_warning": "Non disponibile", "status.unmute_conversation": "Annulla silenzia conversazione", "status.unpin": "Non fissare in cima al profilo", "suggestions.dismiss": "Elimina suggerimento", @@ -367,14 +394,22 @@ "time_remaining.moments": "Restano pochi istanti", "time_remaining.seconds": "{number, plural, one {# secondo} other {# secondi}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {persona ne sta} other {persone ne stanno}} parlando", + "trends.trending_now": "Di tendenza ora", "ui.beforeunload": "La bozza andrà persa se esci da Mastodon.", "upload_area.title": "Trascina per caricare", "upload_button.label": "Aggiungi file multimediale", "upload_error.limit": "Limite al caricamento di file superato.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.poll": "Caricamento file non consentito nei sondaggi.", "upload_form.description": "Descrizione per utenti con disabilità visive", - "upload_form.focus": "Modifica anteprima", + "upload_form.edit": "Modifica", "upload_form.undo": "Cancella", + "upload_modal.analyzing_picture": "Analisi immagine…", + "upload_modal.apply": "Applica", + "upload_modal.description_placeholder": "Ma la volpe col suo balzo ha raggiunto il quieto Fido", + "upload_modal.detect_text": "Rileva testo dall'immagine", + "upload_modal.edit_media": "Modifica media", + "upload_modal.hint": "Clicca o trascina il cerchio sull'anteprima per scegliere il punto focale che sarà sempre visualizzato su tutte le miniature.", + "upload_modal.preview_label": "Anteprima ({ratio})", "upload_progress.label": "Sto caricando...", "video.close": "Chiudi video", "video.exit_fullscreen": "Esci da modalità a schermo intero", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index bdc1f98fb..fdcbe53a2 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -4,6 +4,7 @@ "account.block": "@{name}さんをブロック", "account.block_domain": "{domain}全体を非表示", "account.blocked": "ブロック済み", + "account.cancel_follow_request": "フォローリクエストを取り消す", "account.direct": "@{name}さんにダイレクトメッセージ", "account.domain_blocked": "ドメイン非表示中", "account.edit_profile": "プロフィール編集", @@ -15,6 +16,7 @@ "account.follows.empty": "まだ誰もフォローしていません。", "account.follows_you": "フォローされています", "account.hide_reblogs": "@{name}さんからのブーストを非表示", + "account.last_status": "最後の活動", "account.link_verified_on": "このリンクの所有権は{date}に確認されました", "account.locked_info": "このアカウントは承認制アカウントです。相手が承認するまでフォローは完了しません。", "account.media": "メディア", @@ -23,6 +25,7 @@ "account.mute": "@{name}さんをミュート", "account.mute_notifications": "@{name}さんからの通知を受け取らない", "account.muted": "ミュート済み", + "account.never_active": "活動なし", "account.posts": "投稿", "account.posts_with_replies": "投稿と返信", "account.report": "@{name}さんを通報", @@ -35,8 +38,11 @@ "account.unfollow": "フォロー解除", "account.unmute": "@{name}さんのミュートを解除", "account.unmute_notifications": "@{name}さんからの通知を受け取るようにする", + "alert.rate_limited.message": "{retry_time, time, medium} 以降に再度実行してください。", + "alert.rate_limited.title": "制限に達しました", "alert.unexpected.message": "不明なエラーが発生しました。", "alert.unexpected.title": "エラー!", + "autosuggest_hashtag.per_week": "{count} 回 / 週", "boost_modal.combo": "次からは{combo}を押せばスキップできます", "bundle_column_error.body": "コンポーネントの読み込み中に問題が発生しました。", "bundle_column_error.retry": "再試行", @@ -47,6 +53,7 @@ "column.blocks": "ブロックしたユーザー", "column.community": "ローカルタイムライン", "column.direct": "ダイレクトメッセージ", + "column.directory": "ディレクトリ", "column.domain_blocks": "非表示にしたドメイン", "column.favourites": "お気に入り", "column.follow_requests": "フォローリクエスト", @@ -97,7 +104,10 @@ "confirmations.delete_list.message": "本当にこのリストを完全に削除しますか?", "confirmations.domain_block.confirm": "ドメイン全体を非表示", "confirmations.domain_block.message": "本当に{domain}全体を非表示にしますか? 多くの場合は個別にブロックやミュートするだけで充分であり、また好ましいです。公開タイムラインにそのドメインのコンテンツが表示されなくなり、通知も届かなくなります。そのドメインのフォロワーはアンフォローされます。", + "confirmations.logout.confirm": "ログアウト", + "confirmations.logout.message": "本当にログアウトしますか?", "confirmations.mute.confirm": "ミュート", + "confirmations.mute.explanation": "これにより相手のトゥートと返信は見えなくなりますが、引き続きあなたをフォローしトゥートを見ることはできます。", "confirmations.mute.message": "本当に{name}さんをミュートしますか?", "confirmations.redraft.confirm": "削除して下書きに戻す", "confirmations.redraft.message": "本当にこのトゥートを削除して下書きに戻しますか? このトゥートへのお気に入り登録やブーストは失われ、返信は孤立することになります。", @@ -105,6 +115,14 @@ "confirmations.reply.message": "今返信すると現在作成中のメッセージが上書きされます。本当に実行しますか?", "confirmations.unfollow.confirm": "フォロー解除", "confirmations.unfollow.message": "本当に{name}さんのフォローを解除しますか?", + "conversation.delete": "会話を削除", + "conversation.mark_as_read": "既読にする", + "conversation.open": "会話を表示", + "conversation.with": "{names}", + "directory.federated": "既知の連合より", + "directory.local": "{domain} のみ", + "directory.new_arrivals": "新着順", + "directory.recently_active": "最近の活動順", "embed.instructions": "下記のコードをコピーしてウェブサイトに埋め込みます。", "embed.preview": "表示例:", "emoji_button.activity": "活動", @@ -138,6 +156,10 @@ "empty_column.mutes": "まだ誰もミュートしていません。", "empty_column.notifications": "まだ通知がありません。他の人とふれ合って会話を始めましょう。", "empty_column.public": "ここにはまだ何もありません! 公開で何かを投稿したり、他のサーバーのユーザーをフォローしたりしていっぱいにしましょう", + "error.unexpected_crash.explanation": "不具合かブラウザの互換性問題のため、このページを正しく表示できませんでした。", + "error.unexpected_crash.next_steps": "ページの再読み込みをお試しください。それでも解決しない場合、別のブラウザかアプリを使えば使用できることがあります。", + "errors.unexpected_crash.copy_stacktrace": "スタックトレースをクリップボードにコピー", + "errors.unexpected_crash.report_issue": "問題を報告", "follow_request.authorize": "許可", "follow_request.reject": "拒否", "getting_started.developers": "開発", @@ -146,7 +168,7 @@ "getting_started.heading": "スタート", "getting_started.invite": "招待", "getting_started.open_source_notice": "Mastodonはオープンソースソフトウェアです。誰でもGitHub ( {github} ) から開発に参加したり、問題を報告したりできます。", - "getting_started.security": "セキュリティ", + "getting_started.security": "アカウント設定", "getting_started.terms": "プライバシーポリシー", "hashtag.column_header.tag_mode.all": "と {additional}", "hashtag.column_header.tag_mode.any": "か {additional}", @@ -225,6 +247,7 @@ "lists.new.title_placeholder": "新規リスト名", "lists.search": "フォローしている人の中から検索", "lists.subheading": "あなたのリスト", + "load_pending": "{count} 件の新着", "loading_indicator.label": "読み込み中...", "media_gallery.toggle_visible": "表示切り替え", "missing_indicator.label": "見つかりません", @@ -250,7 +273,6 @@ "navigation_bar.personal": "個人用", "navigation_bar.pins": "固定したトゥート", "navigation_bar.preferences": "ユーザー設定", - "navigation_bar.profile_directory": "ディレクトリ", "navigation_bar.public_timeline": "連合タイムライン", "navigation_bar.misc": "その他", "navigation_bar.security": "セキュリティ", @@ -282,8 +304,10 @@ "notifications.group": "{count} 件の通知", "poll.closed": "終了", "poll.refresh": "更新", + "poll.total_people": "{count}人", "poll.total_votes": "{count}票", "poll.vote": "投票", + "poll.voted": "この項目に投票しました", "poll_button.add_poll": "アンケートを追加", "poll_button.remove_poll": "アンケートを削除", "privacy.change": "公開範囲を変更", @@ -295,6 +319,7 @@ "privacy.public.short": "公開", "privacy.unlisted.long": "公開TLで表示しない", "privacy.unlisted.short": "未収載", + "refresh": "更新", "regeneration_indicator.label": "読み込み中…", "regeneration_indicator.sublabel": "ホームタイムラインは準備中です!", "relative_time.days": "{number}日前", @@ -319,6 +344,7 @@ "search_results.accounts": "人々", "search_results.hashtags": "ハッシュタグ", "search_results.statuses": "トゥート", + "search_results.statuses_fts_disabled": "このサーバーではトゥート本文の検索は利用できません。", "search_results.total": "{count, number}件の結果", "status.admin_account": "@{name} のモデレーション画面を開く", "status.admin_status": "このトゥートをモデレーション画面で開く", @@ -357,6 +383,7 @@ "status.show_more": "もっと見る", "status.show_more_all": "全て見る", "status.show_thread": "スレッドを表示", + "status.uncached_media_warning": "利用できません", "status.unmute_conversation": "会話のミュートを解除", "status.unpin": "プロフィールへの固定を解除", "suggestions.dismiss": "隠す", @@ -372,14 +399,22 @@ "time_remaining.moments": "まもなく終了", "time_remaining.seconds": "残り{number}秒", "trends.count_by_accounts": "{count}人がトゥート", + "trends.trending_now": "トレンドタグ", "ui.beforeunload": "Mastodonから離れると送信前の投稿は失われます。", "upload_area.title": "ドラッグ&ドロップでアップロード", - "upload_button.label": "メディアを追加 (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "メディアを追加 ({formats})", "upload_error.limit": "アップロードできる上限を超えています。", "upload_error.poll": "アンケートではファイルをアップロードできません。", "upload_form.description": "視覚障害者のための説明", - "upload_form.focus": "プレビューを変更", + "upload_form.edit": "編集", "upload_form.undo": "削除", + "upload_modal.analyzing_picture": "画像を解析中…", + "upload_modal.apply": "適用", + "upload_modal.description_placeholder": "あのイーハトーヴォのすきとおった風", + "upload_modal.detect_text": "画像からテキストを検出", + "upload_modal.edit_media": "メディアを編集", + "upload_modal.hint": "サムネイルの焦点にしたい場所をクリックするか円形の枠をその場所にドラッグしてください。", + "upload_modal.preview_label": "プレビュー ({ratio})", "upload_progress.label": "アップロード中...", "video.close": "動画を閉じる", "video.exit_fullscreen": "全画面を終了する", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index ff7059aea..35789374a 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -4,6 +4,7 @@ "account.block": "დაბლოკე @{name}", "account.block_domain": "დაიმალოს ყველაფერი დომენიდან {domain}", "account.blocked": "დაიბლოკა", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "პირდაპირი წერილი @{name}-ს", "account.domain_blocked": "დომენი დამალულია", "account.edit_profile": "პროფილის ცვლილება", @@ -15,6 +16,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "მოგყვებათ", "account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "მედია", @@ -23,6 +25,7 @@ "account.mute": "გააჩუმე @{name}", "account.mute_notifications": "გააჩუმე შეტყობინებები @{name}-სგან", "account.muted": "გაჩუმებული", + "account.never_active": "Never", "account.posts": "ტუტები", "account.posts_with_replies": "ტუტები და პასუხები", "account.report": "დაარეპორტე @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "ნუღარ მიჰყვები", "account.unmute": "ნუღარ აჩუმებ @{name}-ს", "account.unmute_notifications": "ნუღარ აჩუმებ შეტყობინებებს @{name}-სგან", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "წარმოიშვა მოულოდნელი შეცდომა.", "alert.unexpected.title": "უპს!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "შეგიძლიათ დააჭიროთ {combo}-ს რათა შემდეგ ჯერზე გამოტოვოთ ეს", "bundle_column_error.body": "ამ კომპონენტის ჩატვირთვისას რაღაც აირია.", "bundle_column_error.retry": "სცადეთ კიდევ ერთხელ", @@ -47,6 +53,7 @@ "column.blocks": "დაბლოკილი მომხმარებლები", "column.community": "ლოკალური თაიმლაინი", "column.direct": "პირდაპირი წერილები", + "column.directory": "Browse profiles", "column.domain_blocks": "დამალული დომენები", "column.favourites": "ფავორიტები", "column.follow_requests": "დადევნების მოთხოვნები", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "დარწმუნებული ხართ, გსურთ სამუდამოდ გააუქმოთ ეს სია?", "confirmations.domain_block.confirm": "მთელი დომენის დამალვა", "confirmations.domain_block.message": "ნაღდად, ნაღდად, დარწმუნებული ხართ, გსურთ დაბლოკოთ მთელი {domain}? უმეტეს შემთხვევაში რამდენიმე გამიზნული ბლოკი ან გაჩუმება საკმარისი და უკეთესია. კონტენტს ამ დომენიდან ვერ იხილავთ ვერც ერთ ღია თაიმლაინზე ან თქვენს შეტყობინებებში. ამ დომენიდან არსებული მიმდევრები ამოიშლება.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "გაჩუმება", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "დარწმუნებული ხართ, გსურთ გააჩუმოთ {name}?", "confirmations.redraft.confirm": "გაუქმება და გადანაწილება", "confirmations.redraft.message": "დარწმუნებული ხართ, გსურთ გააუქმოთ ეს სტატუსი და გადაანაწილოთ? დაკარგავთ ყველა პასუხს, ბუსტს და მასზედ არსებულ ფავორიტს.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "ნუღარ მიჰყვები", "confirmations.unfollow.message": "დარწმუნებული ხართ, აღარ გსურთ მიჰყვებოდეთ {name}-ს?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "ეს სტატუსი ჩასვით თქვენს ვებ-საიტზე შემდეგი კოდის კოპირებით.", "embed.preview": "ესაა თუ როგორც გამოჩნდება:", "emoji_button.activity": "აქტივობა", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "ჯერ შეტყობინებები არ გაქვთ. საუბრის დასაწყებად იურთიერთქმედეთ სხვებთან.", "empty_column.public": "აქ არაფერია! შესავსებად, დაწერეთ რაიმე ღიად ან ხელით გაჰყევით მომხმარებლებს სხვა ინსტანციებისგან", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "ავტორიზაცია", "follow_request.reject": "უარყოფა", "getting_started.developers": "დეველოპერები", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "ახალი სიის სათაური", "lists.search": "ძებნა ადამიანებს შორის რომელთაც მიჰყვებით", "lists.subheading": "თქვენი სიები", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "იტვირთება...", "media_gallery.toggle_visible": "ხილვადობის ჩართვა", "missing_indicator.label": "არაა ნაპოვნი", @@ -246,7 +269,6 @@ "navigation_bar.personal": "პირადი", "navigation_bar.pins": "აპინული ტუტები", "navigation_bar.preferences": "პრეფერენსიები", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "ფედერალური თაიმლაინი", "navigation_bar.security": "უსაფრთხოება", "notification.favourite": "{name}-მა თქვენი სტატუსი აქცია ფავორიტად", @@ -277,8 +299,10 @@ "notifications.group": "{count} შეტყობინება", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "სტატუსის კონფიდენციალურობის მითითება", @@ -290,6 +314,7 @@ "privacy.public.short": "საჯარო", "privacy.unlisted.long": "არ დაიპოსტოს საჯარო თაიმლაინებზე", "privacy.unlisted.short": "ჩამოუთვლელი", + "refresh": "Refresh", "regeneration_indicator.label": "იტვირთება…", "regeneration_indicator.sublabel": "თქვენი სახლის ლენტა მზადდება!", "relative_time.days": "{number}დღ", @@ -314,6 +339,7 @@ "search_results.accounts": "ხალხი", "search_results.hashtags": "ჰეშტეგები", "search_results.statuses": "ტუტები", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "აჩვენე მეტი", "status.show_more_all": "აჩვენე მეტი ყველაზე", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "საუბარზე გაჩუმების მოშორება", "status.unpin": "პროფილიდან პინის მოშორება", "suggestions.dismiss": "Dismiss suggestion", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} საუბრობს", + "trends.trending_now": "Trending now", "ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.", "upload_area.title": "გადმოწიეთ და ჩააგდეთ ასატვირთათ", "upload_button.label": "მედიის დამატება", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "აღწერილობა ვიზუალურად უფასურისთვის", - "upload_form.focus": "კროპი", + "upload_form.edit": "Edit", "upload_form.undo": "გაუქმება", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "იტვირთება...", "video.close": "ვიდეოს დახურვა", "video.exit_fullscreen": "სრულ ეკრანზე ჩვენების გათიშვა", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index b9bd7cac3..ba13c7ddf 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -4,6 +4,7 @@ "account.block": "Бұғаттау @{name}", "account.block_domain": "Домендегі барлығын бұғатта {domain}", "account.blocked": "Бұғатталды", + "account.cancel_follow_request": "Жазылуға сұранымды қайтару", "account.direct": "Жеке хат @{name}", "account.domain_blocked": "Домен жабық", "account.edit_profile": "Профильді өңдеу", @@ -15,6 +16,7 @@ "account.follows.empty": "Ешкімге жазылмапты.", "account.follows_you": "Сізге жазылыпты", "account.hide_reblogs": "@{name} атты қолданушының әрекеттерін жасыру", + "account.last_status": "Соңғы белсенділік", "account.link_verified_on": "Сілтеме меншігі расталған күн {date}", "account.locked_info": "Бұл қолданушы өзі туралы мәліметтерді жасырған. Тек жазылғандар ғана көре алады.", "account.media": "Медиа", @@ -23,6 +25,7 @@ "account.mute": "Үнсіз қылу @{name}", "account.mute_notifications": "@{name} туралы ескертпелерді жасыру", "account.muted": "Үнсіз", + "account.never_active": "Ешқашан", "account.posts": "Жазбалар", "account.posts_with_replies": "Жазбалар мен жауаптар", "account.report": "Шағымдану @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Оқымау", "account.unmute": "@{name} ескертпелерін қосу", "account.unmute_notifications": "@{name} ескертпелерін көрсету", + "alert.rate_limited.message": "Қайтадан көріңіз {retry_time, time, medium} кейін.", + "alert.rate_limited.title": "Бағалау шектеулі", "alert.unexpected.message": "Бір нәрсе дұрыс болмады.", "alert.unexpected.title": "Өй!", + "autosuggest_hashtag.per_week": "{count} аптасына", "boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}", "bundle_column_error.body": "Бұл компонентті жүктеген кезде бір қате пайда болды.", "bundle_column_error.retry": "Қайтадан көріңіз", @@ -47,6 +53,7 @@ "column.blocks": "Бұғатталғандар", "column.community": "Жергілікті желі", "column.direct": "Жеке хаттар", + "column.directory": "Профильдерді аралау", "column.domain_blocks": "Жасырылған домендер", "column.favourites": "Таңдаулылар", "column.follow_requests": "Жазылу сұранымдары", @@ -77,14 +84,14 @@ "compose_form.poll.remove_option": "Бұл жауапты өшір", "compose_form.publish": "Түрт", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Сезімтал ретінде белгіле", "compose_form.sensitive.marked": "Медиа нәзік деп белгіленген", "compose_form.sensitive.unmarked": "Медиа нәзік деп белгіленбеген", "compose_form.spoiler.marked": "Мәтін ескертумен жасырылған", "compose_form.spoiler.unmarked": "Мәтін жасырылмаған", "compose_form.spoiler_placeholder": "Ескертуіңізді осында жазыңыз", "confirmation_modal.cancel": "Қайтып алу", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Блок және Шағым", "confirmations.block.confirm": "Бұғаттау", "confirmations.block.message": "{name} атты қолданушыны бұғаттайтыныңызға сенімдісіз бе?", "confirmations.delete.confirm": "Өшіру", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Бұл тізімді жоясыз ба шынымен?", "confirmations.domain_block.confirm": "Бұл доменді бұғатта", "confirmations.domain_block.message": "Бұл домендегі {domain} жазбаларды шынымен бұғаттайсыз ба? Кейде үнсіз қылып тастау да жеткілікті.", + "confirmations.logout.confirm": "Шығу", + "confirmations.logout.message": "Шығатыныңызға сенімдісіз бе?", "confirmations.mute.confirm": "Үнсіз қылу", + "confirmations.mute.explanation": "Олардың посттары же олар туралы меншндар сізге көрінбейді, бірақ олар сіздің посттарды көре алады және жазыла алады.", "confirmations.mute.message": "{name} атты қолданушы үнсіз болсын ба?", "confirmations.redraft.confirm": "Өшіруді құптау", "confirmations.redraft.message": "Бұл жазбаны өшіріп, нобайларға жібереміз бе? Барлық жауаптар мен лайктарды жоғалтасыз.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Жауабыңыз жазып жатқан жазбаңыздың үстіне кетеді. Жалғастырамыз ба?", "confirmations.unfollow.confirm": "Оқымау", "confirmations.unfollow.message": "\"{name} атты қолданушыға енді жазылғыңыз келмей ме?", + "conversation.delete": "Пікірталасты өшіру", + "conversation.mark_as_read": "Оқылды деп белгіле", + "conversation.open": "Пікірталасты қарау", + "conversation.with": "{names} атты", + "directory.federated": "Танымал желіден", + "directory.local": "Тек {domain} доменінен", + "directory.new_arrivals": "Жаңадан келгендер", + "directory.recently_active": "Жақында кіргендер", "embed.instructions": "Төмендегі кодты көшіріп алу арқылы жазбаны басқа сайттарға да орналастыра аласыз.", "embed.preview": "Былай көрінетін болады:", "emoji_button.activity": "Белсенділік", @@ -118,7 +136,7 @@ "emoji_button.symbols": "Таңбалар", "emoji_button.travel": "Саяхат", "empty_column.account_timeline": "Жазба жоқ ешқандай!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_unavailable": "Профиль қолжетімді емес", "empty_column.blocks": "Ешкімді бұғаттамағансыз.", "empty_column.community": "Жергілікті желі бос. Сіз бастап жазыңыз!", "empty_column.direct": "Әзірше дым хат жоқ. Өзіңіз жазып көріңіз алдымен.", @@ -134,6 +152,10 @@ "empty_column.mutes": "Әзірше ешқандай үнсізге қойылған қолданушы жоқ.", "empty_column.notifications": "Әзірше ешқандай ескертпе жоқ. Басқалармен араласуды бастаңыз және пікірталастарға қатысыңыз.", "empty_column.public": "Ештеңе жоқ бұл жерде! Өзіңіз бастап жазып көріңіз немесе басқаларға жазылыңыз", + "error.unexpected_crash.explanation": "Кодтағы баг немесе браузердегі қатеден, бұл бет дұрыс ашылмай тұр.", + "error.unexpected_crash.next_steps": "Бетті жаңартып көріңіз. Егер бұл көмектеспесе, Mastodon желісін басқа браузерден немесе мобиль қосымшадан ашып көріңіз.", + "errors.unexpected_crash.copy_stacktrace": "Жиынтықты көшіріп ал клипбордқа", + "errors.unexpected_crash.report_issue": "Мәселені хабарла", "follow_request.authorize": "Авторизация", "follow_request.reject": "Қабылдамау", "getting_started.developers": "Жасаушылар тобы", @@ -158,7 +180,7 @@ "home.column_settings.show_replies": "Жауаптарды көрсету", "intervals.full.days": "{number, plural, one {# күн} other {# күн}}", "intervals.full.hours": "{number, plural, one {# сағат} other {# сағат}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.minutes": "{number, plural, one {# минут} other {# минут}}", "introduction.federation.action": "Келесі", "introduction.federation.federated.headline": "Жаһандық", "introduction.federation.federated.text": "Жаһандық желідегі жазбалар осында көрінетін болады.", @@ -204,14 +226,14 @@ "keyboard_shortcuts.search": "іздеу", "keyboard_shortcuts.start": "бастапқы бағанға бару", "keyboard_shortcuts.toggle_hidden": "жабық мәтінді CW ашу/жабу", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "көрсет/жап", "keyboard_shortcuts.toot": "жаңа жазба бастау", "keyboard_shortcuts.unfocus": "жазба қалдыру алаңынан шығу", "keyboard_shortcuts.up": "тізімде жоғары шығу", "lightbox.close": "Жабу", "lightbox.next": "Келесі", "lightbox.previous": "Алдыңғы", - "lightbox.view_context": "View context", + "lightbox.view_context": "Контексті көрсет", "lists.account.add": "Тізімге қосу", "lists.account.remove": "Тізімнен шығару", "lists.delete": "Тізімді өшіру", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Жаңа тізім аты", "lists.search": "Сіз іздеген адамдар арасында іздеу", "lists.subheading": "Тізімдеріңіз", + "load_pending": "{count, plural, one {# жаңа нәрсе} other {# жаңа нәрсе}}", "loading_indicator.label": "Жүктеу...", "media_gallery.toggle_visible": "Көрінуді қосу", "missing_indicator.label": "Табылмады", @@ -237,7 +260,7 @@ "navigation_bar.favourites": "Таңдаулылар", "navigation_bar.filters": "Үнсіз сөздер", "navigation_bar.follow_requests": "Жазылуға сұранғандар", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Жазылымдар және оқырмандар", "navigation_bar.info": "Сервер туралы", "navigation_bar.keyboard_shortcuts": "Ыстық пернелер", "navigation_bar.lists": "Тізімдер", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Жеке", "navigation_bar.pins": "Жабыстырылғандар", "navigation_bar.preferences": "Басымдықтар", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Жаһандық желі", "navigation_bar.security": "Қауіпсіздік", "notification.favourite": "{name} жазбаңызды таңдаулыға қосты", @@ -277,8 +299,10 @@ "notifications.group": "{count} ескертпе", "poll.closed": "Жабық", "poll.refresh": "Жаңарту", + "poll.total_people": "{count, plural, one {# адам} other {# адам}}", "poll.total_votes": "{count, plural, one {# дауыс} other {# дауыс}}", "poll.vote": "Дауыс беру", + "poll.voted": "Бұл сұраққа жауап бердіңіз", "poll_button.add_poll": "Сауалнама қосу", "poll_button.remove_poll": "Сауалнаманы өшіру", "privacy.change": "Құпиялылықты реттеу", @@ -290,13 +314,14 @@ "privacy.public.short": "Ашық", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Тізімсіз", + "refresh": "Жаңарту", "regeneration_indicator.label": "Жүктеу…", "regeneration_indicator.sublabel": "Жергілікті желі құрылуда!", "relative_time.days": "{number}күн", "relative_time.hours": "{number}сағ", "relative_time.just_now": "жаңа", "relative_time.minutes": "{number}мин", - "relative_time.seconds": "{number}s", + "relative_time.seconds": "{number}с", "reply_indicator.cancel": "Қайтып алу", "report.forward": "Жіберу {target}", "report.forward_hint": "Бұл аккаунт басқа серверден. Аноним шағым жібересіз бе?", @@ -314,7 +339,8 @@ "search_results.accounts": "Адамдар", "search_results.hashtags": "Хэштегтер", "search_results.statuses": "Жазбалар", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "search_results.statuses_fts_disabled": "Mastodon серверінде постты толық мәтінмен іздей алмайсыз.", + "search_results.total": "{count, number} {count, plural, one {нәтиже} other {нәтиже}}", "status.admin_account": "@{name} үшін модерация интерфейсін аш", "status.admin_status": "Бұл жазбаны модерация интерфейсінде аш", "status.block": "Бұғаттау @{name}", @@ -352,6 +378,7 @@ "status.show_more": "Толығырақ", "status.show_more_all": "Бәрін толығымен", "status.show_thread": "Желіні көрсет", + "status.uncached_media_warning": "Қолжетімді емес", "status.unmute_conversation": "Пікірталасты үнсіз қылмау", "status.unpin": "Профильден алып тастау", "suggestions.dismiss": "Өткізіп жіберу", @@ -367,14 +394,22 @@ "time_remaining.moments": "Қалған уақыт", "time_remaining.seconds": "{number, plural, one {# секунд} other {# секунд}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} жазған екен", + "trends.trending_now": "Тренд тақырыптар", "ui.beforeunload": "Mastodon желісінен шықсаңыз, нобайыңыз сақталмайды.", "upload_area.title": "Жүктеу үшін сүйреп әкеліңіз", "upload_button.label": "Медиа қосу (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Файл жүктеу лимитінен асып кеттіңіз.", "upload_error.poll": "Сауалнамамен бірге файл жүктеуге болмайды.", "upload_form.description": "Көру қабілеті нашар адамдар үшін сипаттаңыз", - "upload_form.focus": "Превьюді өзгерту", + "upload_form.edit": "Түзету", "upload_form.undo": "Өшіру", + "upload_modal.analyzing_picture": "Суретті анализ жасау…", + "upload_modal.apply": "Қолдану", + "upload_modal.description_placeholder": "Щучинск съезіндегі өрт пе? Вагон-үй, аэромобиль һәм ұшақ фюзеляжы цехінен ғой", + "upload_modal.detect_text": "Суреттен мәтін анықтау", + "upload_modal.edit_media": "Медиафайлды өңдеу", + "upload_modal.hint": "Алдын-ала қарау шеңберін басыңыз немесе сүйреңіз, барлық нобайларда көрінетін фокусты таңдау үшін.", + "upload_modal.preview_label": "Превью ({ratio})", "upload_progress.label": "Жүктеп жатыр...", "video.close": "Видеоны жабу", "video.exit_fullscreen": "Толық экраннан шық", diff --git a/app/javascript/mastodon/locales/kn.json b/app/javascript/mastodon/locales/kn.json new file mode 100644 index 000000000..39ca86a0c --- /dev/null +++ b/app/javascript/mastodon/locales/kn.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.block": "Block @{name}", + "account.block_domain": "Hide everything from {domain}", + "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "Edit profile", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.follows": "Follows", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unhide {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Hidden domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Post to followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Post to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost to original audience", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 656a36bce..e7c59d68f 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -4,6 +4,7 @@ "account.block": "@{name}을 차단", "account.block_domain": "{domain} 전체를 숨김", "account.blocked": "차단 됨", + "account.cancel_follow_request": "팔로우 요청 취소", "account.direct": "@{name}으로부터의 다이렉트 메시지", "account.domain_blocked": "도메인 숨겨짐", "account.edit_profile": "프로필 편집", @@ -15,6 +16,7 @@ "account.follows.empty": "이 유저는 아직 아무도 팔로우 하고 있지 않습니다.", "account.follows_you": "날 팔로우합니다", "account.hide_reblogs": "@{name}의 부스트를 숨기기", + "account.last_status": "마지막 활동", "account.link_verified_on": "{date}에 이 링크의 소유권이 확인 됨", "account.locked_info": "이 계정의 프라이버시 설정은 잠금으로 설정되어 있습니다. 계정 소유자가 수동으로 팔로어를 승인합니다.", "account.media": "미디어", @@ -23,6 +25,7 @@ "account.mute": "@{name} 뮤트", "account.mute_notifications": "@{name}의 알림을 뮤트", "account.muted": "뮤트 됨", + "account.never_active": "없음", "account.posts": "툿", "account.posts_with_replies": "툿과 답장", "account.report": "@{name} 신고", @@ -35,8 +38,11 @@ "account.unfollow": "팔로우 해제", "account.unmute": "뮤트 해제", "account.unmute_notifications": "@{name}의 알림 뮤트 해제", + "alert.rate_limited.message": "{retry_time, time, medium}에 다시 시도해 주세요.", + "alert.rate_limited.title": "빈도 제한", "alert.unexpected.message": "예측하지 못한 에러가 발생했습니다.", "alert.unexpected.title": "앗!", + "autosuggest_hashtag.per_week": "주간 {count}회", "boost_modal.combo": "{combo}를 누르면 다음부터 이 과정을 건너뛸 수 있습니다", "bundle_column_error.body": "컴포넌트를 불러오는 과정에서 문제가 발생했습니다.", "bundle_column_error.retry": "다시 시도", @@ -47,6 +53,7 @@ "column.blocks": "차단 중인 사용자", "column.community": "로컬 타임라인", "column.direct": "다이렉트 메시지", + "column.directory": "프로필 둘러보기", "column.domain_blocks": "숨겨진 도메인", "column.favourites": "즐겨찾기", "column.follow_requests": "팔로우 요청", @@ -92,8 +99,11 @@ "confirmations.delete_list.confirm": "삭제", "confirmations.delete_list.message": "정말로 이 리스트를 삭제하시겠습니까?", "confirmations.domain_block.confirm": "도메인 전체를 숨김", - "confirmations.domain_block.message": "정말로 {domain} 전체를 숨기시겠습니까? 대부분의 경우 개별 차단이나 뮤트로 충분합니다. 모든 공개 타임라인과 알림에서 해당 도메인에서 작성된 컨텐츠를 보지 못합니다. 해당 도메인 팔로워와의 관계가 사라집니다.", + "confirmations.domain_block.message": "정말로 {domain} 전체를 차단하시겠습니까? 대부분의 경우 개별 차단이나 뮤트로 충분합니다. 모든 공개 타임라인과 알림에서 해당 도메인에서 작성된 컨텐츠를 보지 못합니다. 해당 도메인 팔로워와의 관계가 사라집니다.", + "confirmations.logout.confirm": "로그아웃", + "confirmations.logout.message": "정말로 로그아웃 하시겠습니까?", "confirmations.mute.confirm": "뮤트", + "confirmations.mute.explanation": "이 동작은 그의 게시물, 그를 멘션하는 게시물을 숨깁니다, 하지만 여전히 그가 당신의 게시물을 보고 팔로우 할 수 있습니다.", "confirmations.mute.message": "정말로 {name}를 뮤트하시겠습니까?", "confirmations.redraft.confirm": "삭제하고 다시 쓰기", "confirmations.redraft.message": "정말로 이 포스트를 삭제하고 다시 쓰시겠습니까? 해당 포스트에 대한 부스트와 즐겨찾기를 잃게 되고 원본에 대한 답장은 연결 되지 않습니다.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "답글을 달기 위해 현재 작성 중인 메시지가 덮어 씌워집니다. 진행하시겠습니까?", "confirmations.unfollow.confirm": "언팔로우", "confirmations.unfollow.message": "정말로 {name}를 언팔로우하시겠습니까?", + "conversation.delete": "대화 삭제", + "conversation.mark_as_read": "읽은 상태로 표시", + "conversation.open": "대화 보기", + "conversation.with": "{names} 님과", + "directory.federated": "알려진 연합우주로부터", + "directory.local": "{domain}에서만", + "directory.new_arrivals": "새로운 사람들", + "directory.recently_active": "최근 활동", "embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.", "embed.preview": "다음과 같이 표시됩니다:", "emoji_button.activity": "활동", @@ -134,10 +152,14 @@ "empty_column.mutes": "아직 아무도 뮤트하지 않았습니다.", "empty_column.notifications": "아직 알림이 없습니다. 다른 사람과 대화를 시작해 보세요.", "empty_column.public": "여기엔 아직 아무 것도 없습니다! 공개적으로 무언가 포스팅하거나, 다른 서버의 유저를 팔로우 해서 채워보세요", + "error.unexpected_crash.explanation": "버그 혹은 브라우저 호환성 문제로 이 페이지를 올바르게 표시할 수 없습니다.", + "error.unexpected_crash.next_steps": "페이지를 새로고침 해보세요. 그래도 해결되지 않는 경우, 다른 브라우저나 네이티브 앱으로도 마스토돈을 이용하실 수 있습니다.", + "errors.unexpected_crash.copy_stacktrace": "에러 내용을 클립보드에 복사", + "errors.unexpected_crash.report_issue": "문제 신고", "follow_request.authorize": "허가", "follow_request.reject": "거부", "getting_started.developers": "개발자", - "getting_started.directory": "프로필 디렉터리", + "getting_started.directory": "프로필 디렉토리", "getting_started.documentation": "문서", "getting_started.heading": "시작", "getting_started.invite": "초대", @@ -221,11 +243,12 @@ "lists.new.title_placeholder": "새 리스트의 이름", "lists.search": "팔로우 중인 사람들 중에서 찾기", "lists.subheading": "당신의 리스트", + "load_pending": "{count}개의 새 항목", "loading_indicator.label": "불러오는 중...", "media_gallery.toggle_visible": "표시 전환", "missing_indicator.label": "찾을 수 없습니다", "missing_indicator.sublabel": "이 리소스를 찾을 수 없었습니다", - "mute_modal.hide_notifications": "이 사용자로부터의 알림을 뮤트하시겠습니까?", + "mute_modal.hide_notifications": "이 사용자로부터의 알림을 숨기시겠습니까?", "navigation_bar.apps": "모바일 앱", "navigation_bar.blocks": "차단한 사용자", "navigation_bar.community_timeline": "로컬 타임라인", @@ -235,7 +258,7 @@ "navigation_bar.domain_blocks": "숨겨진 도메인", "navigation_bar.edit_profile": "프로필 편집", "navigation_bar.favourites": "즐겨찾기", - "navigation_bar.filters": "뮤트", + "navigation_bar.filters": "뮤트된 단어", "navigation_bar.follow_requests": "팔로우 요청", "navigation_bar.follows_and_followers": "팔로우와 팔로워", "navigation_bar.info": "이 서버에 대해서", @@ -246,7 +269,6 @@ "navigation_bar.personal": "개인용", "navigation_bar.pins": "고정된 툿", "navigation_bar.preferences": "사용자 설정", - "navigation_bar.profile_directory": "프로필 디렉토리", "navigation_bar.public_timeline": "연합 타임라인", "navigation_bar.security": "보안", "notification.favourite": "{name}님이 즐겨찾기 했습니다", @@ -277,8 +299,10 @@ "notifications.group": "{count} 개의 알림", "poll.closed": "마감됨", "poll.refresh": "새로고침", - "poll.total_votes": "{count} 명 참여", + "poll.total_people": "{count}명", + "poll.total_votes": "{count} 표", "poll.vote": "투표", + "poll.voted": "이 답변에 투표했습니다", "poll_button.add_poll": "투표 추가", "poll_button.remove_poll": "투표 삭제", "privacy.change": "포스트의 프라이버시 설정을 변경", @@ -290,6 +314,7 @@ "privacy.public.short": "공개", "privacy.unlisted.long": "공개 타임라인에 표시하지 않음", "privacy.unlisted.short": "타임라인에 비표시", + "refresh": "새로고침", "regeneration_indicator.label": "불러오는 중…", "regeneration_indicator.sublabel": "당신의 홈 피드가 준비되는 중입니다!", "relative_time.days": "{number}일 전", @@ -314,6 +339,7 @@ "search_results.accounts": "사람", "search_results.hashtags": "해시태그", "search_results.statuses": "툿", + "search_results.statuses_fts_disabled": "이 마스토돈 서버에선 툿의 내용을 통한 검색이 활성화 되어 있지 않습니다.", "search_results.total": "{count, number}건의 결과", "status.admin_account": "@{name}에 대한 모더레이션 인터페이스 열기", "status.admin_status": "모더레이션 인터페이스에서 이 게시물 열기", @@ -326,7 +352,7 @@ "status.direct": "@{name}에게 다이렉트 메시지", "status.embed": "공유하기", "status.favourite": "즐겨찾기", - "status.filtered": "필터링 됨", + "status.filtered": "필터로 걸러짐", "status.load_more": "더 보기", "status.media_hidden": "미디어 숨겨짐", "status.mention": "답장", @@ -352,6 +378,7 @@ "status.show_more": "더 보기", "status.show_more_all": "모두 펼치기", "status.show_thread": "글타래 보기", + "status.uncached_media_warning": "사용할 수 없음", "status.unmute_conversation": "이 대화의 뮤트 해제하기", "status.unpin": "고정 해제", "suggestions.dismiss": "추천 지우기", @@ -367,14 +394,22 @@ "time_remaining.moments": "남은 시간", "time_remaining.seconds": "{number} 초 남음", "trends.count_by_accounts": "{count} 명의 사람들이 말하고 있습니다", + "trends.trending_now": "지금 유행중", "ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.", "upload_area.title": "드래그 & 드롭으로 업로드", "upload_button.label": "미디어 추가 (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "파일 업로드 제한에 도달했습니다.", "upload_error.poll": "파일 업로드는 투표와 함께 첨부할 수 없습니다.", "upload_form.description": "시각장애인을 위한 설명", - "upload_form.focus": "미리보기 변경", + "upload_form.edit": "편집", "upload_form.undo": "삭제", + "upload_modal.analyzing_picture": "이미지 분석 중…", + "upload_modal.apply": "적용", + "upload_modal.description_placeholder": "다람쥐 헌 쳇바퀴 타고파", + "upload_modal.detect_text": "이미지에서 텍스트 추출", + "upload_modal.edit_media": "미디어 편집", + "upload_modal.hint": "미리보기를 클릭하거나 드래그 해서 포컬 포인트를 맞추세요. 이 점은 썸네일에 항상 보여질 부분을 나타냅니다.", + "upload_modal.preview_label": "미리보기 ({ratio})", "upload_progress.label": "업로드 중...", "video.close": "동영상 닫기", "video.exit_fullscreen": "전체화면 나가기", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index ac58514d4..39ca86a0c 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -4,6 +4,7 @@ "account.block": "Block @{name}", "account.block_domain": "Hide everything from {domain}", "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", @@ -15,6 +16,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -23,10 +25,11 @@ "account.mute": "Mute @{name}", "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "Toots", "account.posts_with_replies": "Toots and replies", "account.report": "Report @{name}", - "account.requested": "Awaiting approval. Click to cancel follow request", + "account.requested": "Awaiting approval", "account.share": "Share @{name}'s profile", "account.show_reblogs": "Show boosts from @{name}", "account.unblock": "Unblock @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", @@ -47,6 +53,7 @@ "column.blocks": "Blocked users", "column.community": "Local timeline", "column.direct": "Direct messages", + "column.directory": "Browse profiles", "column.domain_blocks": "Hidden domains", "column.favourites": "Favourites", "column.follow_requests": "Follow requests", @@ -64,7 +71,7 @@ "column_header.show_settings": "Show settings", "column_header.unpin": "Unpin", "column_subheading.settings": "Settings", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Here is what it will look like:", "emoji_button.activity": "Activity", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "getting_started.developers": "Developers", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "New list title", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Not found", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "Preferences", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", "notification.favourite": "{name} favourited your status", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -290,6 +314,7 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Show more", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", @@ -367,15 +394,23 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Add media ({formats})", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Delete", - "upload_progress.label": "Uploading...", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", "video.close": "Close video", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 647e23a69..1c0e35501 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -4,6 +4,7 @@ "account.block": "Bloķēt @{name}", "account.block_domain": "Slēpt visu no {domain}", "account.blocked": "Bloķēts", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Privātā ziņa @{name}", "account.domain_blocked": "Domēns ir paslēpts", "account.edit_profile": "Labot profilu", @@ -15,6 +16,7 @@ "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.", "account.follows_you": "Seko tev", "account.hide_reblogs": "Paslēpt paceltos ierakstus no lietotāja @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Šīs saites piederība ir pārbaudīta {date}", "account.locked_info": "Šī konta privātuma status ir iestatīts slēgts. Īpašnieks izskatīs un izvēlēsies kas viņam drīkst sekot.", "account.media": "Mēdiji", @@ -23,6 +25,7 @@ "account.mute": "Apklusināt @{name}", "account.mute_notifications": "Nerādīt paziņojumus no @{name}", "account.muted": "Apklusināts", + "account.never_active": "Never", "account.posts": "Ieraksti", "account.posts_with_replies": "Ieraksti un atbildes", "account.report": "Ziņot par lietotāju @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Nesekot", "account.unmute": "Noņemt apklusinājumu no lietotāja @{name}", "account.unmute_notifications": "Rādīt paziņojumus no lietotāja @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Negaidīta kļūda.", "alert.unexpected.title": "Ups!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Nospied {combo} lai izlaistu šo nākamreiz", "bundle_column_error.body": "Kaut kas nogāja greizi ielādējot šo komponenti.", "bundle_column_error.retry": "Mēģini vēlreiz", @@ -47,6 +53,7 @@ "column.blocks": "Bloķētie lietotāji", "column.community": "Lokālā laika līnija", "column.direct": "Privātās ziņas", + "column.directory": "Browse profiles", "column.domain_blocks": "Paslēptie domēni", "column.favourites": "Favorīti", "column.follow_requests": "Sekotāju pieprasījumi", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Vai tiešam vēlies neatgriezeniski dzēst šo sarakstu?", "confirmations.domain_block.confirm": "Paslēpt visu domēnu", "confirmations.domain_block.message": "Vai tu tiešām, tiešam vēlies bloķēt visu domēnu {domain}? Lielākajā daļā gadījumu pietiek ja nobloķē vai apklusini kādu. Tu neredzēsi saturu vai paziņojumus no šī domēna nevienā laika līnijā. Tavi sekotāji no šī domēna tiks noņemti.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Apklusināt", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Vai Tu tiešām velies apklusināt {name}?", "confirmations.redraft.confirm": "Dzēst un pārrakstīt", "confirmations.redraft.message": "Vai tiešām vēlies dzēst un pārrakstīt šo ierakstu? Favorīti un paceltie ieraksti tiks dzēsti, kā arī atbildes tiks atsaistītas no šī ieraksta.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Atbildot tagad tava ziņa ko šobrīd raksti tiks pārrakstīta. Vai tiešām vēlies turpināt?", "confirmations.unfollow.confirm": "Nesekot", "confirmations.unfollow.message": "Vai tiešam vairs nevēlies sekot lietotājam {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Iegul šo ziņojumu savā mājaslapā kopējot kodu zemāk.", "embed.preview": "Tas izskatīsies šādi:", "emoji_button.activity": "Aktivitāte", @@ -134,6 +152,10 @@ "empty_column.mutes": "Tu neesi nevienu apklusinājis.", "empty_column.notifications": "Tev nav paziņojumu. Iesaisties sarunās ar citiem.", "empty_column.public": "Šeit nekā nav, tukšums! Ieraksti kaut ko publiski, vai uzmeklē un seko kādam no citas instances", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autorizēt", "follow_request.reject": "Noraidīt", "getting_started.developers": "Developers", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "New list title", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Not found", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "Preferences", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", "notification.favourite": "{name} favourited your status", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -290,6 +314,7 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Show more", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", @@ -367,15 +394,23 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Add media ({formats})", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Delete", - "upload_progress.label": "Uploading...", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", "video.close": "Close video", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json new file mode 100644 index 000000000..5189e8ea8 --- /dev/null +++ b/app/javascript/mastodon/locales/mk.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "Додади или одстрани од листа", + "account.badges.bot": "Бот", + "account.block": "Блокирај @{name}", + "account.block_domain": "Сокријај се од {domain}", + "account.blocked": "Блокиран", + "account.cancel_follow_request": "Одкажи барање за следење", + "account.direct": "Директна порана @{name}", + "account.domain_blocked": "Скриен домен", + "account.edit_profile": "Измени профил", + "account.endorse": "Карактеристики на профилот", + "account.follow": "Следи", + "account.followers": "Следбеници", + "account.followers.empty": "Никој не го следи овој корисник сеуште.", + "account.follows": "Следи", + "account.follows.empty": "Корисникот не следи никој сеуште.", + "account.follows_you": "Те следи тебе", + "account.hide_reblogs": "Сокриј буст од @{name}", + "account.last_status": "Последно активен", + "account.link_verified_on": "Сопстевноста на овај линк беше проверен на {date}", + "account.locked_info": "Статусот на приватност на овај корисник е сетиран како заклучен. Корисникот одлучува кој можи да го следи него.", + "account.media": "Медија", + "account.mention": "Спомни @{name}", + "account.moved_to": "{name} се пресели во:", + "account.mute": "Зачути го @{name}", + "account.mute_notifications": "Исклучи известувања од @{name}", + "account.muted": "Зачутено", + "account.never_active": "Никогаш", + "account.posts": "Тутови", + "account.posts_with_replies": "Тутови и реплики", + "account.report": "Пријави @{name}", + "account.requested": "Се чека одобрување. Кликни за да одкажиш барање за следење", + "account.share": "Сподели @{name} профил", + "account.show_reblogs": "Прикажи бустови од @{name}", + "account.unblock": "Одблокирај @{name}", + "account.unblock_domain": "Прикажи {domain}", + "account.unendorse": "Не прикажувај на профил", + "account.unfollow": "Одследи", + "account.unmute": "Зачути го @{name}", + "account.unmute_notifications": "Исклучи известувања од @{name}", + "alert.rate_limited.message": "Обидете се повторно после {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "Неочекувана грешка.", + "alert.unexpected.title": "Упс!", + "autosuggest_hashtag.per_week": "{count} неделно", + "boost_modal.combo": "Кликни {combo} за да го прескокниш ова нареден пат", + "bundle_column_error.body": "Се случи проблем при вчитувањето.", + "bundle_column_error.retry": "Обидете се повторно", + "bundle_column_error.title": "Мрежна грешка", + "bundle_modal_error.close": "Затвори", + "bundle_modal_error.message": "Настана грешка при прикажувањето на оваа веб-страница.", + "bundle_modal_error.retry": "Обидете се повторно", + "column.blocks": "Блокирани корисници", + "column.community": "Локална временска зона", + "column.direct": "Директна порака", + "column.directory": "Види профили", + "column.domain_blocks": "Скриени домеини", + "column.favourites": "Омилени", + "column.follow_requests": "Follow requests", + "column.home": "Дома", + "column.lists": "Листа", + "column.mutes": "Заќутени корисници", + "column.notifications": "Известувања", + "column.pins": "Pinned toot", + "column.public": "Федеративен времеплов", + "column_back_button.label": "Назад", + "column_header.hide_settings": "Скриј подесувања", + "column_header.moveLeft_settings": "Премести колона влево", + "column_header.moveRight_settings": "Премести колона вдесно", + "column_header.pin": "Pin", + "column_header.show_settings": "Прикажи подесувања", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Подесувања", + "community.column_settings.media_only": "Само медиа", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Научи повеќе", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "заклучен", + "compose_form.placeholder": "Што имате на ум?", + "compose_form.poll.add_option": "Додај избор", + "compose_form.poll.duration": "Времетрање на анкета", + "compose_form.poll.option_placeholder": "Избери {number}", + "compose_form.poll.remove_option": "Избриши избор", + "compose_form.publish": "Тутови", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Обележи медиа како сензитивна", + "compose_form.sensitive.marked": "Медиата е обележана како сензитивна", + "compose_form.sensitive.unmarked": "Медиата не е обележана како сензитивна", + "compose_form.spoiler.marked": "Текстот е сокриен зад предупредување", + "compose_form.spoiler.unmarked": "Текстот не е сокриен", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Откажи", + "confirmations.block.block_and_report": "Блокирај и Пријави", + "confirmations.block.confirm": "Блокирај", + "confirmations.block.message": "Сигурни сте дека дека го блокирате {name}?", + "confirmations.delete.confirm": "Избриши", + "confirmations.delete.message": "Сигурни сте дека го бришите статусот?", + "confirmations.delete_list.confirm": "Избриши", + "confirmations.delete_list.message": "Дали сте сигурни дека сакате да го избришете списоков?", + "confirmations.domain_block.confirm": "Сокриј цел домеин", + "confirmations.domain_block.message": "Дали скроз сте сигурни дека ќе блокирате сѐ од {domain}? Во повеќето случаеви неколку таргетирани блокирања или заќутувања се доволни и предложени. Нема да ја видите содржината од тој домеин во никој јавен времеплов или вашите нотификации. Вашите следбеници од тој домеин ќе бидат остранети.", + "confirmations.logout.confirm": "Одјави се", + "confirmations.logout.message": "Дали сте сигурни дека сакате да се одјавите?", + "confirmations.mute.confirm": "Заќути", + "confirmations.mute.explanation": "Ќе сокрие објави од нив и објави кои ги спомнуваат нив, но сеуште ќе им дозволи да ги видат вашите постови и ве следат.", + "confirmations.mute.message": "Дали ќе го заќутите {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Одговори", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Одследи", + "confirmations.unfollow.message": "Сигурни сте дека ќе го отследите {name}?", + "conversation.delete": "Избриши разговор", + "conversation.mark_as_read": "Означете како прочитано", + "conversation.open": "Прегледај разговор", + "conversation.with": "Со {names}", + "directory.federated": "Од познати fediverse", + "directory.local": "Само од {domain}", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Активност", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Храна & Пијалаци", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Природа", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Објекти", + "emoji_button.people": "Луѓе", + "emoji_button.recent": "Најчесто користени", + "emoji_button.search": "Барај...", + "emoji_button.search_results": "Резултати од барање", + "emoji_button.symbols": "Симболи", + "emoji_button.travel": "Патувања и Места", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Недостапен профил", + "empty_column.blocks": "Немате сеуште блокирано корисници.", + "empty_column.community": "Локалниот времеплов е празен. Објавете нешто јавно за да може да почне шоуто!", + "empty_column.direct": "Немате директни пораки. Кога ќе пратите или примите, ќе се појават тука.", + "empty_column.domain_blocks": "Немате сокриени домеини уште.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "јавен времеплов", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Пријавете проблем", + "follow_request.authorize": "Одобри", + "follow_request.reject": "Одбиј", + "getting_started.developers": "Програмери", + "getting_started.directory": "Профил директориум", + "getting_started.documentation": "Документација", + "getting_started.heading": "Започни", + "getting_started.invite": "Покани луѓе", + "getting_started.open_source_notice": "Мастодон е софтвер со отворен код. Можете да придонесувате или пријавувате проблеми во GitHub на {github}.", + "getting_started.security": "Поставки на сметката", + "getting_started.terms": "Услови на користење", + "hashtag.column_header.tag_mode.all": "и {additional}", + "hashtag.column_header.tag_mode.any": "или {additional}", + "hashtag.column_header.tag_mode.none": "без {additional}", + "hashtag.column_settings.select.no_options_message": "Нема предлози", + "hashtag.column_settings.select.placeholder": "Внеси хаштагови…", + "hashtag.column_settings.tag_mode.all": "Сите овие", + "hashtag.column_settings.tag_mode.any": "Било кои", + "hashtag.column_settings.tag_mode.none": "Никои", + "hashtag.column_settings.tag_toggle": "Стави додатни тагови за оваа колона", + "home.column_settings.basic": "Основно", + "home.column_settings.show_reblogs": "Прикажи бустирања", + "home.column_settings.show_replies": "Прикажи одговори", + "intervals.full.days": "{number, plural, one {# ден} other {# дена}}", + "intervals.full.hours": "{number, plural, one {# час} other {# часа}}", + "intervals.full.minutes": "{number, plural, one {# минута} other {# минути}}", + "introduction.federation.action": "Следно", + "introduction.federation.federated.headline": "Федеративно", + "introduction.federation.federated.text": "Јавни објави од други сервери од fediverse ќе се појават во федеративниот времеплов.", + "introduction.federation.home.headline": "Дома", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Локално", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Заврши туторијал!", + "introduction.interactions.favourite.headline": "Омилени", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Бустирај", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Одговори", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Да започнеме!", + "introduction.welcome.headline": "Почетни чекори", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "за да одите назад", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "одговори", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Уреди профил", + "navigation_bar.favourites": "Омилени", + "navigation_bar.filters": "Замолќени зборови", + "navigation_bar.follow_requests": "Следи покани", + "navigation_bar.follows_and_followers": "Следења и следбеници", + "navigation_bar.info": "За овој сервер", + "navigation_bar.keyboard_shortcuts": "Кратенки", + "navigation_bar.lists": "Листи", + "navigation_bar.logout": "Одјави се", + "navigation_bar.mutes": "Заќутени корисници", + "navigation_bar.personal": "Лично", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Федеративен времеплов", + "navigation_bar.security": "Безбедност", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Резултати од анкета:", + "notifications.column_settings.push": "Пуш нотификации", + "notifications.column_settings.reblog": "Бустови:", + "notifications.column_settings.show": "Прикажи во колона", + "notifications.column_settings.sound": "Свири звуци", + "notifications.filter.all": "Сите", + "notifications.filter.boosts": "Бустови", + "notifications.filter.favourites": "Омилени", + "notifications.filter.follows": "Следења", + "notifications.filter.mentions": "Спомнувања", + "notifications.filter.polls": "Резултати од анкета", + "notifications.group": "{count} нотификации", + "poll.closed": "Затворени", + "poll.refresh": "Освежи", + "poll.total_people": "{count, plural, one {# човек} other {# луѓе}}", + "poll.total_votes": "{count, plural, one {# глас} other {# гласа}}", + "poll.vote": "Гласај", + "poll.voted": "Вие гласавте за овој одговор", + "poll_button.add_poll": "Додадете нова анкета", + "poll_button.remove_poll": "Избришете анкета", + "privacy.change": "Штеловај статус на приватност", + "privacy.direct.long": "Објави само на спомнати корисници", + "privacy.direct.short": "Директно", + "privacy.private.long": "Објави само на следбеници", + "privacy.private.short": "Само следбеници", + "privacy.public.long": "Објави во јавни времплови", + "privacy.public.short": "Јавно", + "privacy.unlisted.long": "Не објавувај на јавни времеплови", + "privacy.unlisted.short": "Необјавено", + "refresh": "Освежи", + "regeneration_indicator.label": "Вчитување…", + "regeneration_indicator.sublabel": "Вашиот новости се подготвуваат!", + "relative_time.days": "{number}д", + "relative_time.hours": "{number}ч", + "relative_time.just_now": "сега", + "relative_time.minutes": "{number}м", + "relative_time.seconds": "{number}с", + "reply_indicator.cancel": "Откажи", + "report.forward": "Проследи до {target}", + "report.forward_hint": "Оваа сметка е од друг сервер. Испрати анонимна копија од пријавата и таму?", + "report.hint": "Пријавата ќе биде испратена до вашиот серверски модератор. Подолу можете да ставите опис зошто ја пријавувате сметката:", + "report.placeholder": "Додатни коментари", + "report.submit": "Испрати", + "report.target": "Пријавување {target}", + "search.placeholder": "Барај", + "search_popout.search_format": "Напреден формат за барање", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "хештег", + "search_popout.tips.status": "состојба", + "search_popout.tips.text": "Прост текст враќа совпаднати имиња, корисници и хештагови", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost to original audience", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Дома", + "tabs_bar.local_timeline": "Локално", + "tabs_bar.notifications": "Нотификации", + "tabs_bar.search": "Барај", + "time_remaining.days": "{number, plural, one {# ден} other {# дена}} {number, plural, one {остана} other {останаа}}", + "time_remaining.hours": "{number, plural, one {# час} other {# часа}} {number, plural, one {остана} other {останаа}}", + "time_remaining.minutes": "{number, plural, one {# минута} other {# минути}} {number, plural, one {остана} other {останаа}}", + "time_remaining.moments": "Уште некои мига", + "time_remaining.seconds": "{number, plural, one {# секунда} other {# секунди}} {number, plural, one {остана} other {останаа}}", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json new file mode 100644 index 000000000..f331590de --- /dev/null +++ b/app/javascript/mastodon/locales/ml.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "റോബോട്ട്", + "account.block": "@{name} നെ ബ്ലോക്ക് ചെയ്യുക", + "account.block_domain": "{domain} ഇൽ നിന്നുള്ള എല്ലാം മറയ്കുക", + "account.blocked": "തടഞ്ഞു", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "നേരിട്ട് മെസേജ് അയക്കുക{name}", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "പ്രൊഫൈൽ തിരുത്തുക", + "account.endorse": "Feature on profile", + "account.follow": "പിന്തുടരുക", + "account.followers": "നിങ്ങളെ പിന്തുടരുന്നവർ", + "account.followers.empty": "ഈ ഉപയോക്താവിനെ ആരും ഇതുവരെ പിന്തുടരുന്നില്ല.", + "account.follows": "പിന്തുടരുന്നു", + "account.follows.empty": "ഈ ഉപയോക്താവ് ആരേയും ഇതുവരെ പിന്തുടരുന്നില്ല.", + "account.follows_you": "നിങ്ങളെ പിന്തുടരുന്നു", + "account.hide_reblogs": "@{name} ബൂസ്റ്റ് ചെയ്തവ മറയ്കുക", + "account.last_status": "അവസാനം കണ്ടത്", + "account.link_verified_on": "ഈ ലിങ്കിന്റെ ഉടമസ്തത {date} ഇൽ ഉറപ്പാക്കിയതാണ്", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "മീഡിയ", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "നിശ്ശബ്ദമാക്കുക @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "നിശ്ശബ്ദമാക്കിയിരിക്കുന്നു", + "account.never_active": "ഒരിക്കലും വേണ്ട", + "account.posts": "ടൂട്ടുകൾ", + "account.posts_with_replies": "ടൂട്ടുകളും മറുപടികളും", + "account.report": "റിപ്പോർട്ട് ചെയ്യുക @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.unblock": "ബ്ലോക്ക് മാറ്റുക @{name}", + "account.unblock_domain": "Unhide {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "പിന്തുടരുന്നത് നിര്ത്തുക", + "account.unmute": "നിശ്ശബ്ദമാക്കുന്നത് നിർത്തുക @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "അപ്രതീക്ഷിതമായി എന്തോ സംഭവിച്ചു.", + "alert.unexpected.title": "ശ്ശോ!", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "വീണ്ടും ശ്രമിക്കുക", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "അടയ്ക്കുക", + "bundle_modal_error.message": "ഈ വെബ്പേജ് പ്രദർശിപ്പിക്കുമ്പോൾ എന്തോ കുഴപ്പം സംഭവിച്ചു.", + "bundle_modal_error.retry": "വീണ്ടും ശ്രമിക്കുക", + "column.blocks": "Blocked users", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Hidden domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Post to followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Post to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost to original audience", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json new file mode 100644 index 000000000..8af8e3493 --- /dev/null +++ b/app/javascript/mastodon/locales/mr.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "यादीत घाला किंवा यादीतून काढून टाका", + "account.badges.bot": "स्वयंचलित खाते", + "account.block": "@{name} यांना ब्लॉक करा", + "account.block_domain": "{domain} पासून सर्व लपवा", + "account.blocked": "ब्लॉक केले आहे", + "account.cancel_follow_request": "अनुयायी होण्याची विनंती रद्द करा", + "account.direct": "थेट संदेश @{name}", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "प्रोफाइल एडिट करा", + "account.endorse": "Feature on profile", + "account.follow": "अनुयायी व्हा", + "account.followers": "अनुयायी", + "account.followers.empty": "ह्या वापरकर्त्याचा आतापर्यंत कोणी अनुयायी नाही.", + "account.follows": "अनुयायी आहे", + "account.follows.empty": "हा वापरकर्ता अजूनपर्यंत कोणाचा अनुयायी नाही.", + "account.follows_you": "तुमचा अनुयायी आहे", + "account.hide_reblogs": "@{name} पासून सर्व बूस्ट लपवा", + "account.last_status": "शेवटचे सक्रिय", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "दृक्श्राव्य मजकूर", + "account.mention": "@{name} चा उल्लेख करा", + "account.moved_to": "{name} आता आहे:", + "account.mute": "@{name} ला मूक कारा", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "{name}चे सर्व बुस्ट्स दाखवा", + "account.unblock": "@{name} ला ब्लॉक करा", + "account.unblock_domain": "उघड करा {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "अनुयायी असणे थांबवा", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "अरेरे!", + "autosuggest_hashtag.per_week": "{count} प्रतिसप्ताह", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "हा घटक लोड करतांना काहीतरी चुकले आहे.", + "bundle_column_error.retry": "पुन्हा प्रयत्न करा", + "bundle_column_error.title": "नेटवर्क त्रुटी", + "bundle_modal_error.close": "बंद करा", + "bundle_modal_error.message": "हा घटक लोड करतांना काहीतरी चुकले आहे.", + "bundle_modal_error.retry": "पुन्हा प्रयत्न करा", + "column.blocks": "ब्लॉक केलेले खातेधारक", + "column.community": "Local timeline", + "column.direct": "थेट संदेश", + "column.directory": "Browse profiles", + "column.domain_blocks": "गुप्त डोमेन्स", + "column.favourites": "आवडते", + "column.follow_requests": "अनुचरण विनंत्या", + "column.home": "मुख्यपृष्ठ", + "column.lists": "याद्या", + "column.mutes": "नि: शब्द खातेधारक", + "column.notifications": "सूचना", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "मागे", + "column_header.hide_settings": "सेटिंग लपवा", + "column_header.moveLeft_settings": "स्तंभ डावीकडे सरकवा", + "column_header.moveRight_settings": "स्तंभ उजवीकडे सरकवा", + "column_header.pin": "टाचण", + "column_header.show_settings": "सेटिंग्स दाखवा", + "column_header.unpin": "अनपिन करा", + "column_subheading.settings": "सेटिंग्ज", + "community.column_settings.media_only": "केवळ मीडिया", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "अधिक जाणून घ्या", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "आपल्या मनात काय आहे?", + "compose_form.poll.add_option": "नवीन पर्याय", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "निवड {number}", + "compose_form.poll.remove_option": "हा पर्याय काढा", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "हटवा", + "confirmations.delete.message": "हे स्टेटस तुम्हाला नक्की हटवायचंय?", + "confirmations.delete_list.confirm": "हटवा", + "confirmations.delete_list.message": "ही यादी तुम्हाला नक्की कायमची हटवायचीय?", + "confirmations.domain_block.confirm": "संपूर्ण डोमेन लपवा", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Post to followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Post to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost to original audience", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index d7c509963..6881d3be3 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -4,6 +4,7 @@ "account.block": "Block @{name}", "account.block_domain": "Hide everything from {domain}", "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct message @{name}", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Edit profile", @@ -15,6 +16,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Follows you", "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Media", @@ -23,10 +25,11 @@ "account.mute": "Mute @{name}", "account.mute_notifications": "Mute notifications from @{name}", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "Toots", "account.posts_with_replies": "Toots and replies", "account.report": "Report @{name}", - "account.requested": "Awaiting approval. Click to cancel follow request", + "account.requested": "Awaiting approval", "account.share": "Share @{name}'s profile", "account.show_reblogs": "Show boosts from @{name}", "account.unblock": "Unblock @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Unfollow", "account.unmute": "Unmute @{name}", "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "You can press {combo} to skip this next time", "bundle_column_error.body": "Something went wrong while loading this component.", "bundle_column_error.retry": "Try again", @@ -47,6 +53,7 @@ "column.blocks": "Blocked users", "column.community": "Local timeline", "column.direct": "Direct messages", + "column.directory": "Browse profiles", "column.domain_blocks": "Hidden domains", "column.favourites": "Favourites", "column.follow_requests": "Follow requests", @@ -64,7 +71,7 @@ "column_header.show_settings": "Show settings", "column_header.unpin": "Unpin", "column_subheading.settings": "Settings", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Are you sure you want to mute {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Here is what it will look like:", "emoji_button.activity": "Activity", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Authorize", "follow_request.reject": "Reject", "getting_started.developers": "Developers", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "New list title", "lists.search": "Search among people you follow", "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Loading...", "media_gallery.toggle_visible": "Toggle visibility", "missing_indicator.label": "Not found", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "Preferences", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federated timeline", "navigation_bar.security": "Security", "notification.favourite": "{name} favourited your status", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Adjust status privacy", @@ -290,6 +314,7 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Show more", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Unmute conversation", "status.unpin": "Unpin from profile", "suggestions.dismiss": "Dismiss suggestion", @@ -367,15 +394,23 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "upload_area.title": "Drag & drop to upload", - "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Add media ({formats})", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Delete", - "upload_progress.label": "Uploading...", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", "video.close": "Close video", "video.exit_fullscreen": "Exit full screen", "video.expand": "Expand video", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 4bcab5ba0..74aaad970 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -4,6 +4,7 @@ "account.block": "Blokkeer @{name}", "account.block_domain": "Verberg alles van {domain}", "account.blocked": "Geblokkeerd", + "account.cancel_follow_request": "Volgverzoek annuleren", "account.direct": "Direct Message @{name}", "account.domain_blocked": "Domein verborgen", "account.edit_profile": "Profiel bewerken", @@ -15,6 +16,7 @@ "account.follows.empty": "Deze gebruiker volgt nog niemand.", "account.follows_you": "Volgt jou", "account.hide_reblogs": "Verberg boosts van @{name}", + "account.last_status": "Laatst actief", "account.link_verified_on": "Eigendom van deze link is gecontroleerd op {date}", "account.locked_info": "De privacystatus van dit account is op besloten gezet. De eigenaar bepaalt handmatig wie hen kan volgen.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Negeer @{name}", "account.mute_notifications": "Negeer meldingen van @{name}", "account.muted": "Genegeerd", + "account.never_active": "Nooit", "account.posts": "Toots", "account.posts_with_replies": "Toots en reacties", "account.report": "Rapporteer @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Ontvolgen", "account.unmute": "@{name} niet langer negeren", "account.unmute_notifications": "@{name} meldingen niet langer negeren", + "alert.rate_limited.message": "Probeer het nog een keer na {retry_time, time, medium}.", + "alert.rate_limited.title": "Beperkt te gebruiken", "alert.unexpected.message": "Er deed zich een onverwachte fout voor", "alert.unexpected.title": "Oeps!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Je kunt {combo} klikken om dit de volgende keer over te slaan", "bundle_column_error.body": "Tijdens het laden van dit onderdeel is er iets fout gegaan.", "bundle_column_error.retry": "Opnieuw proberen", @@ -47,6 +53,7 @@ "column.blocks": "Geblokkeerde gebruikers", "column.community": "Lokale tijdlijn", "column.direct": "Directe berichten", + "column.directory": "Gebruikersgids", "column.domain_blocks": "Genegeerde servers", "column.favourites": "Favorieten", "column.follow_requests": "Volgverzoeken", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Weet je zeker dat je deze lijst definitief wilt verwijderen?", "confirmations.domain_block.confirm": "Verberg alles van deze server", "confirmations.domain_block.message": "Weet je het echt heel erg zeker dat je alles van {domain} wilt negeren? In de meeste gevallen is het blokkeren of negeren van een paar specifieke personen voldoende en beter. Je zult geen toots van deze server op openbare tijdlijnen zien of in jouw meldingen. Jouw volgers van deze server worden verwijderd.", + "confirmations.logout.confirm": "Uitloggen", + "confirmations.logout.message": "Weet je zeker dat je wilt uitloggen?", "confirmations.mute.confirm": "Negeren", + "confirmations.mute.explanation": "Dit verbergt toots van hen en toots waar hen in wordt vermeld, maar hen kan nog steeds jouw toots bekijken en jou volgen.", "confirmations.mute.message": "Weet je het zeker dat je {name} wilt negeren?", "confirmations.redraft.confirm": "Verwijderen en herschrijven", "confirmations.redraft.message": "Weet je zeker dat je deze toot wilt verwijderen en herschrijven? Je verliest wel de boosts en favorieten, en reacties op de originele toot zitten niet meer aan de nieuwe toot vast.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Door nu te reageren overschrijf je de toot die je op dit moment aan het schrijven bent. Weet je zeker dat je verder wil gaan?", "confirmations.unfollow.confirm": "Ontvolgen", "confirmations.unfollow.message": "Weet je het zeker dat je {name} wilt ontvolgen?", + "conversation.delete": "Gesprek verwijderen", + "conversation.mark_as_read": "Als gelezen markeren", + "conversation.open": "Gesprek tonen", + "conversation.with": "Met {names}", + "directory.federated": "Fediverse (wat bekend is)", + "directory.local": "Alleen {domain}", + "directory.new_arrivals": "Nieuwe accounts", + "directory.recently_active": "Onlangs actief", "embed.instructions": "Embed deze toot op jouw website, door de onderstaande code te kopiëren.", "embed.preview": "Zo komt het eruit te zien:", "emoji_button.activity": "Activiteiten", @@ -134,6 +152,10 @@ "empty_column.mutes": "Jij hebt nog geen gebruikers genegeerd.", "empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.", "empty_column.public": "Er is hier helemaal niks! Toot iets in het openbaar of volg mensen van andere servers om het te vullen", + "error.unexpected_crash.explanation": "Als gevolg van een bug in onze broncode of als gevolg van een compatibiliteitsprobleem met jouw webbrowser, kan deze pagina niet goed worden weergegeven.", + "error.unexpected_crash.next_steps": "Probeer deze pagina te vernieuwen. Wanneer dit niet helpt is het nog steeds mogelijk om Mastodon in een andere webbrowser of mobiele app te gebruiken.", + "errors.unexpected_crash.copy_stacktrace": "Stacktrace naar klembord kopiëren", + "errors.unexpected_crash.report_issue": "Technisch probleem melden", "follow_request.authorize": "Goedkeuren", "follow_request.reject": "Afkeuren", "getting_started.developers": "Ontwikkelaars", @@ -142,7 +164,7 @@ "getting_started.heading": "Aan de slag", "getting_started.invite": "Mensen uitnodigen", "getting_started.open_source_notice": "Mastodon is vrije software. Je kunt bijdragen of problemen melden op GitHub via {github}.", - "getting_started.security": "Beveiliging", + "getting_started.security": "Accountinstellingen", "getting_started.terms": "Voorwaarden", "hashtag.column_header.tag_mode.all": "en {additional}", "hashtag.column_header.tag_mode.any": "of {additional}", @@ -184,7 +206,7 @@ "keyboard_shortcuts.description": "Omschrijving", "keyboard_shortcuts.direct": "om jouw directe berichten te tonen", "keyboard_shortcuts.down": "om naar beneden door de lijst te bewegen", - "keyboard_shortcuts.enter": "om toot volledig te tonen", + "keyboard_shortcuts.enter": "om uitgebreide toot te tonen", "keyboard_shortcuts.favourite": "om aan jouw favorieten toe te voegen", "keyboard_shortcuts.favourites": "om jouw lijst met favorieten te tonen", "keyboard_shortcuts.federated": "om de globale tijdlijn te tonen", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Naam nieuwe lijst", "lists.search": "Zoek naar mensen die je volgt", "lists.subheading": "Jouw lijsten", + "load_pending": "{count, plural, one {# nieuw item} other {# nieuwe items}}", "loading_indicator.label": "Laden…", "media_gallery.toggle_visible": "Media wel/niet tonen", "missing_indicator.label": "Niet gevonden", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Persoonlijk", "navigation_bar.pins": "Vastgezette toots", "navigation_bar.preferences": "Instellingen", - "navigation_bar.profile_directory": "Gebruikersgids", "navigation_bar.public_timeline": "Globale tijdlijn", "navigation_bar.security": "Beveiliging", "notification.favourite": "{name} voegde jouw toot als favoriet toe", @@ -277,8 +299,10 @@ "notifications.group": "{count} meldingen", "poll.closed": "Gesloten", "poll.refresh": "Vernieuwen", + "poll.total_people": "{count, plural, one {# persoon} other {# mensen}}", "poll.total_votes": "{count, plural, one {# stem} other {# stemmen}}", "poll.vote": "Stemmen", + "poll.voted": "Je hebt hier op gestemd", "poll_button.add_poll": "Poll toevoegen", "poll_button.remove_poll": "Poll verwijderen", "privacy.change": "Zichtbaarheid toot aanpassen", @@ -290,6 +314,7 @@ "privacy.public.short": "Openbaar", "privacy.unlisted.long": "Niet op openbare tijdlijnen tonen", "privacy.unlisted.short": "Minder openbaar", + "refresh": "Vernieuwen", "regeneration_indicator.label": "Aan het laden…", "regeneration_indicator.sublabel": "Jouw tijdlijn wordt aangemaakt!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "Gebruikers", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Het zoeken in toots is op deze Mastodonserver niet ingeschakeld.", "search_results.total": "{count, number} {count, plural, one {resultaat} other {resultaten}}", "status.admin_account": "Moderatie-omgeving van @{name} openen", "status.admin_status": "Deze toot in de moderatie-omgeving openen", @@ -333,7 +359,7 @@ "status.more": "Meer", "status.mute": "Negeer @{name}", "status.mute_conversation": "Negeer gesprek", - "status.open": "Toot volledig tonen", + "status.open": "Uitgebreide toot tonen", "status.pin": "Aan profielpagina vastmaken", "status.pinned": "Vastgemaakte toot", "status.read_more": "Meer lezen", @@ -352,6 +378,7 @@ "status.show_more": "Meer tonen", "status.show_more_all": "Alles meer tonen", "status.show_thread": "Gesprek tonen", + "status.uncached_media_warning": "Niet beschikbaar", "status.unmute_conversation": "Gesprek niet langer negeren", "status.unpin": "Van profielpagina losmaken", "suggestions.dismiss": "Voorstel verwerpen", @@ -361,20 +388,28 @@ "tabs_bar.local_timeline": "Lokaal", "tabs_bar.notifications": "Meldingen", "tabs_bar.search": "Zoeken", - "time_remaining.days": "{number, plural, one {# dag} other {# dagen}} left", - "time_remaining.hours": "{number, plural, one {# uur} other {# uur}} left", - "time_remaining.minutes": "{number, plural, one {# minuut} other {# minuten}} left", + "time_remaining.days": "{number, plural, one {# dag} other {# dagen}} te gaan", + "time_remaining.hours": "{number, plural, one {# uur} other {# uur}} te gaan", + "time_remaining.minutes": "{number, plural, one {# minuut} other {# minuten}} te gaan", "time_remaining.moments": "Nog enkele ogenblikken resterend", - "time_remaining.seconds": "{number, plural, one {# seconde} other {# seconden}} left", + "time_remaining.seconds": "{number, plural, one {# seconde} other {# seconden}} te gaan", "trends.count_by_accounts": "{count} {rawCount, plural, one {persoon praat} other {mensen praten}} hierover", + "trends.trending_now": "Trends", "ui.beforeunload": "Je concept zal verloren gaan als je Mastodon verlaat.", - "upload_area.title": "Hierin slepen om te uploaden", - "upload_button.label": "Media toevoegen (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_area.title": "Hiernaar toe slepen om te uploaden", + "upload_button.label": "Media toevoegen ({formats})", "upload_error.limit": "Uploadlimiet van bestand overschreden.", "upload_error.poll": "Het uploaden van bestanden is in polls niet toegestaan.", "upload_form.description": "Omschrijf dit voor mensen met een visuele beperking", - "upload_form.focus": "Voorvertoning aanpassen", + "upload_form.edit": "Bewerken", "upload_form.undo": "Verwijderen", + "upload_modal.analyzing_picture": "Afbeelding analyseren…", + "upload_modal.apply": "Toepassen", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Tekst in een afbeelding detecteren", + "upload_modal.edit_media": "Media bewerken", + "upload_modal.hint": "Klik of sleep de cirkel in de voorvertoning naar een centraal punt dat op elke thumbnail zichtbaar moet blijven.", + "upload_modal.preview_label": "Voorvertoning ({ratio})", "upload_progress.label": "Uploaden...", "video.close": "Video sluiten", "video.exit_fullscreen": "Volledig scherm sluiten", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json new file mode 100644 index 000000000..039381cf0 --- /dev/null +++ b/app/javascript/mastodon/locales/nn.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "Legg til eller ta vekk fra liste", + "account.badges.bot": "Robot", + "account.block": "Blokkér @{name}", + "account.block_domain": "Gøyme alt innhald for domenet {domain}", + "account.blocked": "Blokkert", + "account.cancel_follow_request": "Avslutt føljar-førespurnad", + "account.direct": "Direkte meld @{name}", + "account.domain_blocked": "Domenet er gøymt", + "account.edit_profile": "Rediger profil", + "account.endorse": "Framhev på profilen din", + "account.follow": "Følj", + "account.followers": "Føljare", + "account.followers.empty": "Er ikkje nokon som føljar denne brukaren ennå.", + "account.follows": "Føljingar", + "account.follows.empty": "Denne brukaren foljer ikkje nokon ennå.", + "account.follows_you": "Føljar deg", + "account.hide_reblogs": "Gøym fremhevingar for @{name}", + "account.last_status": "Sist aktiv", + "account.link_verified_on": "Eigerskap for denne linken er sist sjekket den {date}", + "account.locked_info": "Brukarens privat-status er satt til lukka. Eigaren må manuelt døme kvem som kan følje honom.", + "account.media": "Media", + "account.mention": "Nemne @{name}", + "account.moved_to": "{name} har flytta til:", + "account.mute": "Målbind @{name}", + "account.mute_notifications": "Målbind varslingar ifrå @{name}", + "account.muted": "Målbindt", + "account.never_active": "Aldri", + "account.posts": "Tutar", + "account.posts_with_replies": "Tutar og svar", + "account.report": "Rapporter @{name}", + "account.requested": "Venter på samtykke. Klikk for å avbryte føljar-førespurnad", + "account.share": "Del @{name} sin profil", + "account.show_reblogs": "Sjå framhevingar ifrå @{name}", + "account.unblock": "Avblokker @{name}", + "account.unblock_domain": "Vis {domain}", + "account.unendorse": "Ikkje framhev på profil", + "account.unfollow": "Avfølja", + "account.unmute": "Av-demp @{name}", + "account.unmute_notifications": "Av-demp notifikasjoner ifrå @{name}", + "alert.rate_limited.message": "Ver vennlig og prøv igjen {retry_time, time, medium}.", + "alert.rate_limited.title": "Bregrensa rate", + "alert.unexpected.message": "Eit uforventa problem har hendt.", + "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per veke", + "boost_modal.combo": "Du kan trykke {combo} for å hoppe over dette neste gong", + "bundle_column_error.body": "Noko gikk gale mens komponent ble nedlasta.", + "bundle_column_error.retry": "Prøv igjen", + "bundle_column_error.title": "Tenarmaskin feil", + "bundle_modal_error.close": "Lukk", + "bundle_modal_error.message": "Noko gikk gale mens komponent var i ferd med å bli nedlasta.", + "bundle_modal_error.retry": "Prøv igjen", + "column.blocks": "Blokka brukare", + "column.community": "Lokal samtid", + "column.direct": "Direkte meldingar", + "column.directory": "Sjå gjennom profiler", + "column.domain_blocks": "Gøymte domener", + "column.favourites": "Favorittar", + "column.follow_requests": "Føljarførespurnad", + "column.home": "Heim", + "column.lists": "Lister", + "column.mutes": "Målbindte brukare", + "column.notifications": "Varslingar", + "column.pins": "Festa tuter", + "column.public": "Federert samtid", + "column_back_button.label": "Tilbake", + "column_header.hide_settings": "Skjul innstillingar", + "column_header.moveLeft_settings": "Flytt feltet til venstre", + "column_header.moveRight_settings": "Flytt feltet til høgre", + "column_header.pin": "Fest", + "column_header.show_settings": "Vis innstillingar", + "column_header.unpin": "Løys", + "column_subheading.settings": "Innstillingar", + "community.column_settings.media_only": "Kun medie", + "compose_form.direct_message_warning": "Denne tuten vil kun verte synleg for nemnde brukarar.", + "compose_form.direct_message_warning_learn_more": "Lær meir", + "compose_form.hashtag_warning": "Denne tuten vill ikkje bli lista under nokon knagg ettersom den ikkje er opplista. Berre offentlege tutar kan ble søkt på ved emneknagg.", + "compose_form.lock_disclaimer": "Din brukar er ikkje {locked}. Alle kan følje deg for å sjå føljar-modus poster.", + "compose_form.lock_disclaimer.lock": "låst", + "compose_form.placeholder": "Kva har du på hjartet?", + "compose_form.poll.add_option": "Legg til eit punkt", + "compose_form.poll.duration": "Varigheit for spørring", + "compose_form.poll.option_placeholder": "Val {number}", + "compose_form.poll.remove_option": "Ta burt dette valet", + "compose_form.publish": "Tut", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Merk media som sensitivt", + "compose_form.sensitive.marked": "Media er markert som sensitivt", + "compose_form.sensitive.unmarked": "Media er ikkje merka som sensitivt", + "compose_form.spoiler.marked": "Tekst er gøymt bak ein advarsel", + "compose_form.spoiler.unmarked": "Tekst er ikkje gøymt", + "compose_form.spoiler_placeholder": "Skriv varselen din her", + "confirmation_modal.cancel": "Avbrot", + "confirmations.block.block_and_report": "Blokk & rapportér", + "confirmations.block.confirm": "Blokkér", + "confirmations.block.message": "Er du sikker på at du vill blokke {name}?", + "confirmations.delete.confirm": "Slett", + "confirmations.delete.message": "Er du sikker på at du vill slette denne statusen?", + "confirmations.delete_list.confirm": "Slett", + "confirmations.delete_list.message": "Er du sikker på at du vill slette denne listen for alltid?", + "confirmations.domain_block.confirm": "Gøym heile domenet", + "confirmations.domain_block.message": "Er du ordentleg, ordentleg sikker på at du vill blokkere heile {domain}? I dei tilfeller er det bedre med ein målretta blokkering eller demping av individuelle brukare.", + "confirmations.logout.confirm": "Logg ut", + "confirmations.logout.message": "Er du sikker på at du vill logge ut?", + "confirmations.mute.confirm": "Målbind", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Er du sikker på at d vill målbinde {name}?", + "confirmations.redraft.confirm": "Slett & gjennopprett", + "confirmations.redraft.message": "Er du sikker på at du vill slette statusen og gjennoprette den? Favoritter og framhevinger vill bli borte, og svar til den originale posten vill bli einstøing.", + "confirmations.reply.confirm": "Svar", + "confirmations.reply.message": "Å svare nå vill overskrive meldingen du er i ferd med å skrive. Er du sikker på at du vill gå fram?", + "confirmations.unfollow.confirm": "Avfølj", + "confirmations.unfollow.message": "Er du sikker på at du vill avfølje {name}?", + "conversation.delete": "Slett samtale", + "conversation.mark_as_read": "Merk som lest", + "conversation.open": "Sjå samtale", + "conversation.with": "Med {names}", + "directory.federated": "Fra kjent fedivers", + "directory.local": "Fra berre {domain} domenet", + "directory.new_arrivals": "Nyankommne", + "directory.recently_active": "Nylig aktiv", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Dette er korleis den vil sjå ut:", + "emoji_button.activity": "Aktivitet", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flagg", + "emoji_button.food": "Mat & drikke", + "emoji_button.label": "Legg til smilefjes", + "emoji_button.nature": "Natur", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objektar", + "emoji_button.people": "Folk", + "emoji_button.recent": "Ofte brukt", + "emoji_button.search": "Søk...", + "emoji_button.search_results": "Søke resultater", + "emoji_button.symbols": "Symbolar", + "emoji_button.travel": "Reise & steder", + "empty_column.account_timeline": "Ikkje nokon tutar her!", + "empty_column.account_unavailable": "Profil ikkje tilgjengelig", + "empty_column.blocks": "Du har ikkje blokkért nokon brukarar ennå.", + "empty_column.community": "Den lokale samtiden er tom. Skriv noko offentleg å få ballen til å rulle!", + "empty_column.direct": "Du har ikkje nokon direkte meldingar ennå. Når du sendar eller får ein, så vill den ende opp her.", + "empty_column.domain_blocks": "Der er ikkje nokon gøymte domener enno.", + "empty_column.favourited_statuses": "Du har ikkje favorisert nokon tutar enno. Når du favoriserer noko, så vill det ende opp her.", + "empty_column.favourites": "Ikkje nokon har favorisert denne tuten enno. Når nokon gjer det, så vill den ende opp her.", + "empty_column.follow_requests": "Du har ikkje nokon føljar førespurnad enno. Når du får ein, så vill den sjåast her.", + "empty_column.hashtag": "Det er ikkje noko i denne emneknaggen her enno.", + "empty_column.home": "Din heime-tidslinja er tom! Dra til {public} eller søk for å starte å møte andre brukare.", + "empty_column.home.public_timeline": "Den offentlege tidslinja", + "empty_column.list": "Det er ikkje noko i denne lista enno. Når medlemmar av denne lista poster statuser, så vill dei sjåast her.", + "empty_column.lists": "Du har ikkje nokon liste enno. Når du lagar ein, så vill den ende up her.", + "empty_column.mutes": "Du har ikkje dempet nokon brukare enno.", + "empty_column.notifications": "Der er ikkje nokon varsler her enno. Kommuniser med andre for å starte samtalen.", + "empty_column.public": "Det er ikkje noko her! Skriv noko offentleg, eller manuelt følje brukare fra andre tenarmaskiner for å fylle det opp", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Prøv å laste på nytt. Om det ikkje hjelper så kan du fortsatt bruke mastodon gjennom ein anna nettlesar eller ein applikasjon.", + "errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til klippebord", + "errors.unexpected_crash.report_issue": "Rapportér problem", + "follow_request.authorize": "Autoriser", + "follow_request.reject": "Reject", + "getting_started.developers": "Utviklare", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Dokumentasjon", + "getting_started.heading": "Komme i gong", + "getting_started.invite": "Inviter folk", + "getting_started.open_source_notice": "Mastodon har åpen kilde kode. Du kan hjelpe til med problemar på GitHub gjennom {github}.", + "getting_started.security": "Brukar instillingar", + "getting_started.terms": "Brukarvillkår", + "hashtag.column_header.tag_mode.all": "og {additional}", + "hashtag.column_header.tag_mode.any": "eller {additional}", + "hashtag.column_header.tag_mode.none": "uten {additional}", + "hashtag.column_settings.select.no_options_message": "Ingen forslag funnet", + "hashtag.column_settings.select.placeholder": "Legg til emneknagger…", + "hashtag.column_settings.tag_mode.all": "Alle disse", + "hashtag.column_settings.tag_mode.any": "Kvem som helst av disse", + "hashtag.column_settings.tag_mode.none": "Ikkje nokon av disse", + "hashtag.column_settings.tag_toggle": "Inkludér ekstra emneknagger til denne kolonnen", + "home.column_settings.basic": "Enkel", + "home.column_settings.show_reblogs": "Vis fremhevingar", + "home.column_settings.show_replies": "Vis svar", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Neste", + "introduction.federation.federated.headline": "Federert", + "introduction.federation.federated.text": "Offentlege poster fra tenarmaskiner i fediverset kjem fram i den federerte tidslinja.", + "introduction.federation.home.headline": "Heim", + "introduction.federation.home.text": "Poster frå folk du kjenner kjem i heime tidslinja. Du kan følje kvem som helst ifrå alle tenarmaskiner!", + "introduction.federation.local.headline": "Lokal", + "introduction.federation.local.text": "Offentlege poster frå folk på samme tenarmaskin som deg vill du finne i den lokale tidslinja.", + "introduction.interactions.action": "Fullfør omvisning!", + "introduction.interactions.favourite.headline": "Lik", + "introduction.interactions.favourite.text": "Du kan lagre ein tut til seinere, og la forfatteren vite at ut likte den ved å trykke likar på tuten.", + "introduction.interactions.reblog.headline": "Fremhev", + "introduction.interactions.reblog.text": "Du kan dela folks tutar ved å \"booste\" døm.", + "introduction.interactions.reply.headline": "Svar", + "introduction.interactions.reply.text": "Du kan svare på andre folk sine tuter, om så vill tutane lenkes i hop i ein samtale.", + "introduction.welcome.action": "Ta åt!", + "introduction.welcome.headline": "Første steg", + "introduction.welcome.text": "Velkommen til fediverset! Om ein kort tid vill det være mogleg å skrive til verden og venner gjennom ein stor variasjon av tenarmaskiner. Men denne tenarmaskinen, {domain}, er spesiell - den holder din profil, så ikkje gløym namnet dens.", + "keyboard_shortcuts.back": "for å navigere tilbake", + "keyboard_shortcuts.blocked": "for å åpne lista for blokka brukare", + "keyboard_shortcuts.boost": "for å dele", + "keyboard_shortcuts.column": "for å fokusere på ein status i ein av kollonene", + "keyboard_shortcuts.compose": "for å fokusera på status-skrivaren", + "keyboard_shortcuts.description": "Beskrivelse", + "keyboard_shortcuts.direct": "forå åpne direkte meldingar i ein kollone", + "keyboard_shortcuts.down": "for å bevege seg opp og ned", + "keyboard_shortcuts.enter": "for å åpne status", + "keyboard_shortcuts.favourite": "for å favorisere", + "keyboard_shortcuts.favourites": "for å åpne favoriserings lista", + "keyboard_shortcuts.federated": "for å åpne den fødererte tidslinja", + "keyboard_shortcuts.heading": "Tastatur hurtigtaster", + "keyboard_shortcuts.home": "for åpne heime tidslinja", + "keyboard_shortcuts.hotkey": "Hurtigtast", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "for å åpne den lokale tidslinja", + "keyboard_shortcuts.mention": "for å nemne forfatteren", + "keyboard_shortcuts.muted": "for å åpne lista over dempa brukare", + "keyboard_shortcuts.my_profile": "for å åpne profilen din", + "keyboard_shortcuts.notifications": "for å åpne notifikasjons kolonnen", + "keyboard_shortcuts.pinned": "forå åpne lista for festa statuser", + "keyboard_shortcuts.profile": "for å åpne forfatteren's profil", + "keyboard_shortcuts.reply": "for å svare", + "keyboard_shortcuts.requests": "for å åpne lista for føljar førespurnader", + "keyboard_shortcuts.search": "for å fokus søkje", + "keyboard_shortcuts.start": "for å åpne \"kjem i gong\" kolonna", + "keyboard_shortcuts.toggle_hidden": "for å vise/gøyme tekst bak innholds varsel", + "keyboard_shortcuts.toggle_sensitivity": "for å vise/gøyme media", + "keyboard_shortcuts.toot": "Start ein heilt ny tut", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "for å bevege seg oppover i lista", + "lightbox.close": "Lukk", + "lightbox.next": "Neste", + "lightbox.previous": "Forrige", + "lightbox.view_context": "Sjå kontekst", + "lists.account.add": "Legg til i liste", + "lists.account.remove": "Ta burt fra liste", + "lists.delete": "Slett liste", + "lists.edit": "Rediger liste", + "lists.edit.submit": "Bytt tittel", + "lists.new.create": "Legg til liste", + "lists.new.title_placeholder": "Ny liste tittel", + "lists.search": "Søk gjennom folk du føljar", + "lists.subheading": "Dine lister", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Laster...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Ikkje funne", + "missing_indicator.sublabel": "Denne ressursen ble ikkje funne", + "mute_modal.hide_notifications": "Gøyme notifikasjoner frå denne brukaren?", + "navigation_bar.apps": "Mobil apper", + "navigation_bar.blocks": "Blokka brukare", + "navigation_bar.community_timeline": "Lokal tidslinje", + "navigation_bar.compose": "Lag ein ny status", + "navigation_bar.direct": "Direkte meldingar", + "navigation_bar.discover": "Oppdag", + "navigation_bar.domain_blocks": "Gøymte domener", + "navigation_bar.edit_profile": "Rediger profil", + "navigation_bar.favourites": "Favoritter", + "navigation_bar.filters": "Demp ord", + "navigation_bar.follow_requests": "Føljar førespurnader", + "navigation_bar.follows_and_followers": "Føljer og føljare", + "navigation_bar.info": "Om denne tenarmaskinen", + "navigation_bar.keyboard_shortcuts": "Hurtigtaster", + "navigation_bar.lists": "Lister", + "navigation_bar.logout": "Logg ut", + "navigation_bar.mutes": "Dempa brukare", + "navigation_bar.personal": "Personlig", + "navigation_bar.pins": "Festa tuter", + "navigation_bar.preferences": "Preferanser", + "navigation_bar.public_timeline": "Federert tidslinje", + "navigation_bar.security": "Sikkerheit", + "notification.favourite": "{name} likte din status", + "notification.follow": "{name} fulgte deg", + "notification.mention": "{name} nevnte deg", + "notification.poll": "Ein avstemming du har votert i har endt", + "notification.reblog": "{name} delte statusen din", + "notifications.clear": "Klarer notifikasjoner", + "notifications.clear_confirmation": "Er du sikker på at du vill permanent klarere alle notifikasjonene dine?", + "notifications.column_settings.alert": "Desktop notifikasjoner", + "notifications.column_settings.favourite": "Favoritter:", + "notifications.column_settings.filter_bar.advanced": "Vis alle kategorier", + "notifications.column_settings.filter_bar.category": "Rask filter bar", + "notifications.column_settings.filter_bar.show": "Vis", + "notifications.column_settings.follow": "Nye føljare:", + "notifications.column_settings.mention": "Nemningar:", + "notifications.column_settings.poll": "Avstemming resultater:", + "notifications.column_settings.push": "Push varsler", + "notifications.column_settings.reblog": "Framhevinger:", + "notifications.column_settings.show": "Vis i kolonne", + "notifications.column_settings.sound": "Køyr lyd", + "notifications.filter.all": "Alle", + "notifications.filter.boosts": "Framhevinger", + "notifications.filter.favourites": "Favoritter", + "notifications.filter.follows": "Føljare", + "notifications.filter.mentions": "Nemningar", + "notifications.filter.polls": "Avstemmings resultater", + "notifications.group": "{count} notifikasjoner", + "poll.closed": "Lukka", + "poll.refresh": "Forfriske", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Voter", + "poll.voted": "Du voterte for dette svaret", + "poll_button.add_poll": "Start ein avstemming", + "poll_button.remove_poll": "Slett avstemming", + "privacy.change": "Juster status synligheit", + "privacy.direct.long": "Post berre direkte til nemnte brukare", + "privacy.direct.short": "Direkte", + "privacy.private.long": "Post til berre føljare", + "privacy.private.short": "Berre-føljare", + "privacy.public.long": "Post til offentlege tidslinjar", + "privacy.public.short": "Offentleg", + "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.short": "Uoppført", + "refresh": "Forfrisk", + "regeneration_indicator.label": "Lastar…", + "regeneration_indicator.sublabel": "Din startside driver å blir forberedt!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "no", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Avbrot", + "report.forward": "Send videre til {target}", + "report.forward_hint": "Denne brukaren er frå ein anna tenarmaskin. Send ein anonymisert versjon av rapporten til døm også?", + "report.hint": "Denne rapporten vill bli sendt til din tenarmaskin moderator. Du kan gi ein forklaring til kvifor du rapportérer denne brukaren under:", + "report.placeholder": "Tilleggskommentarer", + "report.submit": "Send inn", + "report.target": "Rapportér {target}", + "search.placeholder": "Søk", + "search_popout.search_format": "Avansert søke format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "emneknagg", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "brukar", + "search_results.accounts": "Folk", + "search_results.hashtags": "Emneknagger", + "search_results.statuses": "Tutar", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Slett", + "status.detailed_status": "Detaljert samtale syn", + "status.direct": "Direkte meld @{name}", + "status.embed": "Bygge inn", + "status.favourite": "Lik", + "status.filtered": "Filter", + "status.load_more": "Last inn meir", + "status.media_hidden": "Media gøymt", + "status.mention": "Nemn @{name}", + "status.more": "Meir", + "status.mute": "Demp @{name}", + "status.mute_conversation": "Demp samtale", + "status.open": "Utvid statusen", + "status.pin": "Fest på profil", + "status.pinned": "Fasta tut", + "status.read_more": "Les meir", + "status.reblog": "Fremhev", + "status.reblog_private": "Fremhev til orginale sjåare", + "status.reblogged_by": "{name} fremheivd", + "status.reblogs.empty": "Ikkje nokon har fremhevd tuten enno. Om nokon gjør det kjem det opp her.", + "status.redraft": "Slett & gjer om", + "status.reply": "Svar", + "status.replyAll": "Svar til tråd", + "status.report": "Rapportér @{name}", + "status.sensitive_warning": "Sensitivt innhald", + "status.share": "Del", + "status.show_less": "Vis mindre", + "status.show_less_all": "Vis mindre for alle", + "status.show_more": "Vis meir", + "status.show_more_all": "Vis meir for alle", + "status.show_thread": "Vis tråd", + "status.uncached_media_warning": "Ikkje tilgjengeleg", + "status.unmute_conversation": "Ikke demp samtale", + "status.unpin": "Angre festing på profil", + "suggestions.dismiss": "Avbrot forslag", + "suggestions.header": "Du e kanskje interessert i…", + "tabs_bar.federated_timeline": "Føderert", + "tabs_bar.home": "Heim", + "tabs_bar.local_timeline": "Lokal", + "tabs_bar.notifications": "Notifikasjoner", + "tabs_bar.search": "Søk", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Kort tid gjennstår", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Kva som trender no", + "ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.", + "upload_area.title": "Dra & slipp for å laste opp", + "upload_button.label": "Legg til media ({formats})", + "upload_error.limit": "Fil størrelsen er for stor.", + "upload_error.poll": "Fil opplasting ikkje lov i hop med avstemming.", + "upload_form.description": "Beskriv for synshemmede", + "upload_form.edit": "Redigér", + "upload_form.undo": "Slett", + "upload_modal.analyzing_picture": "Analyserer bilde…", + "upload_modal.apply": "Bruk", + "upload_modal.description_placeholder": "Ein rask brun rev hoppar over den late hunden", + "upload_modal.detect_text": "Finn tekst i bildet", + "upload_modal.edit_media": "Redigér media", + "upload_modal.hint": "Klikk og dra sirkelen på forsyneren for å fokusere synspunktet slik det ska synes i alle minityrbildene.", + "upload_modal.preview_label": "Framsyn ({ratio})", + "upload_progress.label": "Lastar opp...", + "video.close": "Lukk video", + "video.exit_fullscreen": "Lukk fullskjerm", + "video.expand": "Expand video", + "video.fullscreen": "Fullskjerm", + "video.hide": "Gøym video", + "video.mute": "Demp lyd", + "video.pause": "Pause", + "video.play": "Spel", + "video.unmute": "Av-dempe lyd" +} diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 2ba8236e2..5c84c08fe 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -1,28 +1,31 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Legg til eller fjern fra lister", "account.badges.bot": "Bot", "account.block": "Blokkér @{name}", "account.block_domain": "Skjul alt fra {domain}", - "account.blocked": "Blocked", + "account.blocked": "Blokkert", + "account.cancel_follow_request": "Avbryt følge forespørsel", "account.direct": "Direct Message @{name}", - "account.domain_blocked": "Domain hidden", + "account.domain_blocked": "Domenet skjult", "account.edit_profile": "Rediger profil", "account.endorse": "Feature on profile", "account.follow": "Følg", "account.followers": "Følgere", - "account.followers.empty": "No one follows this user yet.", + "account.followers.empty": "Ingen følger denne brukeren ennå.", "account.follows": "Følger", - "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows.empty": "Denne brukeren følger ikke noen enda.", "account.follows_you": "Følger deg", "account.hide_reblogs": "Skjul fremhevinger fra @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.last_status": "Sist aktiv", + "account.link_verified_on": "Eierskap av denne lenken ble sjekket {date}", + "account.locked_info": "Denne kontoens personvernstatus er satt til låst. Eieren vurderer manuelt hvem som kan følge dem.", "account.media": "Media", "account.mention": "Nevn @{name}", "account.moved_to": "{name} har flyttet til:", "account.mute": "Demp @{name}", "account.mute_notifications": "Ignorer varsler fra @{name}", "account.muted": "Muted", + "account.never_active": "Aldri", "account.posts": "Innlegg", "account.posts_with_replies": "Toots with replies", "account.report": "Rapportér @{name}", @@ -35,18 +38,22 @@ "account.unfollow": "Avfølg", "account.unmute": "Avdemp @{name}", "account.unmute_notifications": "Vis varsler fra @{name}", - "alert.unexpected.message": "An unexpected error occurred.", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "En uventet feil oppstod.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per uke", "boost_modal.combo": "You kan trykke {combo} for å hoppe over dette neste gang", "bundle_column_error.body": "Noe gikk galt mens denne komponenten lastet.", "bundle_column_error.retry": "Prøv igjen", - "bundle_column_error.title": "Network error", + "bundle_column_error.title": "Nettverksfeil", "bundle_modal_error.close": "Lukk", "bundle_modal_error.message": "Noe gikk galt da denne komponenten lastet.", "bundle_modal_error.retry": "Prøv igjen", "column.blocks": "Blokkerte brukere", "column.community": "Lokal tidslinje", - "column.direct": "Direct messages", + "column.direct": "Direktemeldinger", + "column.directory": "Bla gjennom profiler", "column.domain_blocks": "Hidden domains", "column.favourites": "Likt", "column.follow_requests": "Følgeforespørsler", @@ -64,20 +71,20 @@ "column_header.show_settings": "Vis innstillinger", "column_header.unpin": "Løsne", "column_subheading.settings": "Innstillinger", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", - "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.direct_message_warning_learn_more": "Lær mer", "compose_form.hashtag_warning": "Denne tuten blir ikke listet under noen emneknagger da den er ulistet. Kun offentlige tuter kan søktes etter med emneknagg.", "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Hvem som helst kan følge deg og se dine private poster.", "compose_form.lock_disclaimer.lock": "låst", "compose_form.placeholder": "Hva har du på hjertet?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Legg til et valg", + "compose_form.poll.duration": "Avstemningens varighet", + "compose_form.poll.option_placeholder": "Valg {number}", + "compose_form.poll.remove_option": "Fjern dette valget", "compose_form.publish": "Tut", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Merk media som sensitivt", "compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.unmarked": "Media is not marked as sensitive", "compose_form.spoiler.marked": "Text is hidden behind warning", @@ -89,18 +96,29 @@ "confirmations.block.message": "Er du sikker på at du vil blokkere {name}?", "confirmations.delete.confirm": "Slett", "confirmations.delete.message": "Er du sikker på at du vil slette denne statusen?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "Slett", "confirmations.delete_list.message": "Er du sikker på at du vil slette denne listen permanent?", "confirmations.domain_block.confirm": "Skjul alt fra domenet", "confirmations.domain_block.message": "Er du sikker på at du vil skjule hele domenet {domain}? I de fleste tilfeller er det bedre med målrettet blokkering eller demping.", + "confirmations.logout.confirm": "Logg ut", + "confirmations.logout.message": "Er du sikker på at du vil logge ut?", "confirmations.mute.confirm": "Demp", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Er du sikker på at du vil dempe {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", - "confirmations.reply.confirm": "Reply", + "confirmations.reply.confirm": "Svar", "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Slutt å følge", "confirmations.unfollow.message": "Er du sikker på at du vil slutte å følge {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "Med {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Kopier koden under for å bygge inn denne statusen på hjemmesiden din.", "embed.preview": "Slik kommer det til å se ut:", "emoji_button.activity": "Aktivitet", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "Du har ingen varsler ennå. Kommuniser med andre for å begynne samtalen.", "empty_column.public": "Det er ingenting her! Skriv noe offentlig, eller følg brukere manuelt fra andre instanser for å fylle den opp", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autorisér", "follow_request.reject": "Avvis", "getting_started.developers": "Developers", @@ -171,7 +193,7 @@ "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", "introduction.interactions.reblog.headline": "Boost", "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.headline": "Svar", "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", "introduction.welcome.action": "Let's go!", "introduction.welcome.headline": "First steps", @@ -181,7 +203,7 @@ "keyboard_shortcuts.boost": "å fremheve", "keyboard_shortcuts.column": "å fokusere en status i en av kolonnene", "keyboard_shortcuts.compose": "å fokusere komponeringsfeltet", - "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.description": "Beskrivelse", "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "for å flytte ned i listen", "keyboard_shortcuts.enter": "to open status", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Ny listetittel", "lists.search": "Søk blant personer du følger", "lists.subheading": "Dine lister", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Laster...", "media_gallery.toggle_visible": "Veksle synlighet", "missing_indicator.label": "Ikke funnet", @@ -246,9 +269,8 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Festa tuter", "navigation_bar.preferences": "Preferanser", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Felles tidslinje", - "navigation_bar.security": "Security", + "navigation_bar.security": "Sikkerhet", "notification.favourite": "{name} likte din status", "notification.follow": "{name} fulgte deg", "notification.mention": "{name} nevnte deg", @@ -268,17 +290,19 @@ "notifications.column_settings.reblog": "Fremhevet:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Spill lyd", - "notifications.filter.all": "All", + "notifications.filter.all": "Alle", "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", + "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Follows", "notifications.filter.mentions": "Mentions", "notifications.filter.polls": "Poll results", "notifications.group": "{count} notifications", "poll.closed": "Closed", - "poll.refresh": "Refresh", + "poll.refresh": "Oppdater", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Justér synlighet", @@ -290,6 +314,7 @@ "privacy.public.short": "Offentlig", "privacy.unlisted.long": "Ikke vis i offentlige tidslinjer", "privacy.unlisted.short": "Uoppført", + "refresh": "Refresh", "regeneration_indicator.label": "Laster…", "regeneration_indicator.sublabel": "Dine startside forberedes!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultater}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -336,7 +362,7 @@ "status.open": "Utvid denne statusen", "status.pin": "Fest på profilen", "status.pinned": "Pinned toot", - "status.read_more": "Read more", + "status.read_more": "Les mer", "status.reblog": "Fremhev", "status.reblog_private": "Boost to original audience", "status.reblogged_by": "Fremhevd av {name}", @@ -352,6 +378,7 @@ "status.show_more": "Vis mer", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Ikke tilgjengelig", "status.unmute_conversation": "Ikke demp samtale", "status.unpin": "Angre festing på profilen", "suggestions.dismiss": "Dismiss suggestion", @@ -360,26 +387,34 @@ "tabs_bar.home": "Hjem", "tabs_bar.local_timeline": "Lokal", "tabs_bar.notifications": "Varslinger", - "tabs_bar.search": "Search", + "tabs_bar.search": "Søk", "time_remaining.days": "{number, plural, one {# day} other {# days}} left", "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Din kladd vil bli forkastet om du forlater Mastodon.", "upload_area.title": "Dra og slipp for å laste opp", "upload_button.label": "Legg til media", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Beskriv for synshemmede", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Angre", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Bruk", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Laster opp...", "video.close": "Lukk video", "video.exit_fullscreen": "Lukk fullskjerm", "video.expand": "Utvid video", - "video.fullscreen": "Full screen", + "video.fullscreen": "Fullskjerm", "video.hide": "Skjul video", "video.mute": "Skru av lyd", "video.pause": "Pause", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 3178f200d..1ca5f42ed 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -4,6 +4,7 @@ "account.block": "Blocar @{name}", "account.block_domain": "Tot amagar del domeni {domain}", "account.blocked": "Blocat", + "account.cancel_follow_request": "Anullar la demanda de seguiment", "account.direct": "Escriure un MP a @{name}", "account.domain_blocked": "Domeni amagat", "account.edit_profile": "Modificar lo perfil", @@ -15,6 +16,7 @@ "account.follows.empty": "Aqueste utilizaire sèc pas degun pel moment.", "account.follows_you": "Vos sèc", "account.hide_reblogs": "Rescondre los partatges de @{name}", + "account.last_status": "Darrièra activitat", "account.link_verified_on": "La proprietat d’aqueste ligam foguèt verificada lo {date}", "account.locked_info": "L’estatut de privacitat del compte es configurat sus clavat. Lo proprietari causís qual pòt sègre son compte.", "account.media": "Mèdias", @@ -23,6 +25,7 @@ "account.mute": "Rescondre @{name}", "account.mute_notifications": "Rescondre las notificacions de @{name}", "account.muted": "Mes en silenci", + "account.never_active": "Jamai", "account.posts": "Tuts", "account.posts_with_replies": "Tuts e responsas", "account.report": "Senhalar @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Quitar de sègre", "account.unmute": "Quitar de rescondre @{name}", "account.unmute_notifications": "Mostrar las notificacions de @{name}", + "alert.rate_limited.message": "Mercés de tornar ensajar aprèp {retry_time, time, medium}.", + "alert.rate_limited.title": "Taus limitat", "alert.unexpected.message": "Una error s’es producha.", "alert.unexpected.title": "Ops !", + "autosuggest_hashtag.per_week": "{count} per setmana", "boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven", "bundle_column_error.body": "Quicòm a fach mèuca pendent lo cargament d’aqueste compausant.", "bundle_column_error.retry": "Tornar ensajar", @@ -47,6 +53,7 @@ "column.blocks": "Personas blocadas", "column.community": "Flux public local", "column.direct": "Messatges dirèctes", + "column.directory": "Percórrer los perfils", "column.domain_blocks": "Domenis resconduts", "column.favourites": "Favorits", "column.follow_requests": "Demandas d’abonament", @@ -77,7 +84,7 @@ "compose_form.poll.remove_option": "Levar aquesta opcion", "compose_form.publish": "Tut", "compose_form.publish_loud": "{publish} !", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Marcar coma sensible", "compose_form.sensitive.marked": "Lo mèdia es marcat coma sensible", "compose_form.sensitive.unmarked": "Lo mèdia es pas marcat coma sensible", "compose_form.spoiler.marked": "Lo tèxte es rescondut jos l’avertiment", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Volètz vertadièrament suprimir aquesta lista per totjorn ?", "confirmations.domain_block.confirm": "Amagar tot lo domeni", "confirmations.domain_block.message": "Volètz vertadièrament blocar complètament {domain} ? De còps cal pas que blocar o rescondre unas personas solament.\nVeiretz pas cap de contengut d’aquel domeni dins cap de flux public o dins vòstras notificacions. Vòstres seguidors d’aquel domeni seràn levats.", + "confirmations.logout.confirm": "Desconnexion", + "confirmations.logout.message": "Volètz vertadièrament vos desconnectar ?", "confirmations.mute.confirm": "Rescondre", + "confirmations.mute.explanation": "Aquò lor escondrà las publicacions e mencions, mas aquò lor permetrà encara de veire vòstra publicacions e de vos sègre.", "confirmations.mute.message": "Volètz vertadièrament rescondre {name} ?", "confirmations.redraft.confirm": "Escafar & tornar formular", "confirmations.redraft.message": "Volètz vertadièrament escafar aqueste estatut e lo reformular ? Totes sos partiments e favorits seràn perduts, e sas responsas seràn orfanèlas.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Respondre remplaçarà lo messatge que sètz a escriure. Volètz vertadièrament contunhar ?", "confirmations.unfollow.confirm": "Quitar de sègre", "confirmations.unfollow.message": "Volètz vertadièrament quitar de sègre {name} ?", + "conversation.delete": "Suprimir la conversacion", + "conversation.mark_as_read": "Marcar coma legida", + "conversation.open": "Veire la conversacion", + "conversation.with": "Amb {names}", + "directory.federated": "Del fediverse conegut", + "directory.local": "Solament de {domain}", + "directory.new_arrivals": "Nòus-venguts", + "directory.recently_active": "Actius fa res", "embed.instructions": "Embarcar aqueste estatut per lo far veire sus un site Internet en copiar lo còdi çai-jos.", "embed.preview": "Semblarà aquò :", "emoji_button.activity": "Activitats", @@ -134,6 +152,10 @@ "empty_column.mutes": "Encara avètz pas mes en silenci degun.", "empty_column.notifications": "Avètz pas encara de notificacions. Respondètz a qualqu’un per començar una conversacion.", "empty_column.public": "I a pas res aquí ! Escrivètz quicòm de public, o seguètz de personas d’autres servidors per garnir lo flux public", + "error.unexpected_crash.explanation": "A causa d’una avaria dins nòstre còdi o d’un problèma de compatibilitat de navegador, aquesta pagina se pòt pas afichar corrèctament.", + "error.unexpected_crash.next_steps": "Ensajatz d’actualizar la pagina. S’aquò càmbia pas res, podètz provar d’utilizar Mastodon via un navegador diferent o d’una aplicacion nativa estant.", + "errors.unexpected_crash.copy_stacktrace": "Copiar las traças al quichapapièrs", + "errors.unexpected_crash.report_issue": "Senhalar un problèma", "follow_request.authorize": "Acceptar", "follow_request.reject": "Regetar", "getting_started.developers": "Desvelopaires", @@ -204,14 +226,14 @@ "keyboard_shortcuts.search": "anar a la recèrca", "keyboard_shortcuts.start": "dobrir la colomna « Per començar »", "keyboard_shortcuts.toggle_hidden": "mostrar/amagar lo tèxte dels avertiments", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "per mostrar/rescondre los mèdias", "keyboard_shortcuts.toot": "començar un estatut tot novèl", "keyboard_shortcuts.unfocus": "quitar lo camp tèxte/de recèrca", "keyboard_shortcuts.up": "far montar dins la lista", "lightbox.close": "Tampar", "lightbox.next": "Seguent", "lightbox.previous": "Precedent", - "lightbox.view_context": "View context", + "lightbox.view_context": "Veire lo contèxt", "lists.account.add": "Ajustar a la lista", "lists.account.remove": "Levar de la lista", "lists.delete": "Suprimir la lista", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Títol de la nòva lista", "lists.search": "Cercar demest lo monde que seguètz", "lists.subheading": "Vòstras listas", + "load_pending": "{count, plural, one {# nòu element} other {# nòu elements}}", "loading_indicator.label": "Cargament…", "media_gallery.toggle_visible": "Modificar la visibilitat", "missing_indicator.label": "Pas trobat", @@ -237,7 +260,7 @@ "navigation_bar.favourites": "Favorits", "navigation_bar.filters": "Mots ignorats", "navigation_bar.follow_requests": "Demandas d’abonament", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Abonament e seguidors", "navigation_bar.info": "Tocant aqueste servidor", "navigation_bar.keyboard_shortcuts": "Acorchis clavièr", "navigation_bar.lists": "Listas", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Tuts penjats", "navigation_bar.preferences": "Preferéncias", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Flux public global", "navigation_bar.security": "Seguretat", "notification.favourite": "{name} a ajustat a sos favorits", @@ -277,8 +299,10 @@ "notifications.group": "{count} notificacions", "poll.closed": "Tampat", "poll.refresh": "Actualizar", + "poll.total_people": "{count, plural, one {# persona} other {# personas}}", "poll.total_votes": "{count, plural, one {# vòte} other {# vòtes}}", "poll.vote": "Votar", + "poll.voted": "Avètz votat per aquesta responsa", "poll_button.add_poll": "Ajustar un sondatge", "poll_button.remove_poll": "Levar lo sondatge", "privacy.change": "Ajustar la confidencialitat del messatge", @@ -290,6 +314,7 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Mostrar pas dins los fluxes publics", "privacy.unlisted.short": "Pas-listat", + "refresh": "Actualizar", "regeneration_indicator.label": "Cargament…", "regeneration_indicator.sublabel": "Sèm a preparar vòstre flux d’acuèlh !", "relative_time.days": "fa {number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "Gents", "search_results.hashtags": "Etiquetas", "search_results.statuses": "Tuts", + "search_results.statuses_fts_disabled": "La recèrca de tuts per lor contengut es pas activada sus aqueste servidor Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}", "status.admin_account": "Dobrir l’interfàcia de moderacion per @{name}", "status.admin_status": "Dobrir aqueste estatut dins l’interfàcia de moderacion", @@ -352,6 +378,7 @@ "status.show_more": "Desplegar", "status.show_more_all": "Los desplegar totes", "status.show_thread": "Mostrar lo fil", + "status.uncached_media_warning": "Pas disponible", "status.unmute_conversation": "Tornar mostrar la conversacion", "status.unpin": "Tirar del perfil", "suggestions.dismiss": "Regetar la suggestion", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments restants", "time_remaining.seconds": "demòra{number, plural, one { # segonda} other {n # segondas}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} ne charra other {people}} ne charran", + "trends.trending_now": "Tendéncia del moment", "ui.beforeunload": "Vòstre brolhon serà perdut se quitatz Mastodon.", "upload_area.title": "Lisatz e depausatz per mandar", "upload_button.label": "Ajustar un mèdia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Talha maximum pels mandadís subrepassada.", "upload_error.poll": "Lo mandadís de fichièr es pas autorizat pels sondatges.", "upload_form.description": "Descripcion pels mal vesents", - "upload_form.focus": "Modificar l’apercebut", + "upload_form.edit": "Modificar", "upload_form.undo": "Suprimir", + "upload_modal.analyzing_picture": "Analisi de l’imatge…", + "upload_modal.apply": "Aplicar", + "upload_modal.description_placeholder": "Lo dròlle bilingüe manja un yaourt de ròcs exagonals e kiwis verds farà un an mai", + "upload_modal.detect_text": "Detectar lo tèxt de l’imatge", + "upload_modal.edit_media": "Modificar lo mèdia", + "upload_modal.hint": "Clicatz o lissatz lo cercle de l’apercebut per causir lo ponch que serà totjorn visible dins las vinhetas.", + "upload_modal.preview_label": "Apercebut ({ratio})", "upload_progress.label": "Mandadís…", "video.close": "Tampar la vidèo", "video.exit_fullscreen": "Sortir plen ecran", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index d101c21aa..b3513ea46 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -4,6 +4,7 @@ "account.block": "Blokuj @{name}", "account.block_domain": "Blokuj wszystko z {domain}", "account.blocked": "Zablokowany(-a)", + "account.cancel_follow_request": "Zrezygnuj z prośby o możliwość śledzenia", "account.direct": "Wyślij wiadomość bezpośrednią do @{name}", "account.domain_blocked": "Ukryto domenę", "account.edit_profile": "Edytuj profil", @@ -15,6 +16,7 @@ "account.follows.empty": "Ten użytkownik nie śledzi jeszcze nikogo.", "account.follows_you": "Śledzi Cię", "account.hide_reblogs": "Ukryj podbicia od @{name}", + "account.last_status": "Ostatnia aktywność", "account.link_verified_on": "Własność tego odnośnika została potwierdzona {date}", "account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto może go śledzić.", "account.media": "Zawartość multimedialna", @@ -23,6 +25,7 @@ "account.mute": "Wycisz @{name}", "account.mute_notifications": "Wycisz powiadomienia o @{name}", "account.muted": "Wyciszony", + "account.never_active": "Nigdy", "account.posts": "Wpisy", "account.posts_with_replies": "Wpisy i odpowiedzi", "account.report": "Zgłoś @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Przestań śledzić", "account.unmute": "Cofnij wyciszenie @{name}", "account.unmute_notifications": "Cofnij wyciszenie powiadomień od @{name}", + "alert.rate_limited.message": "Spróbuj ponownie po {retry_time, time, medium}.", + "alert.rate_limited.title": "Ograniczony czasowo", "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.", "alert.unexpected.title": "O nie!", + "autosuggest_hashtag.per_week": "{count} co tydzień", "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", "bundle_column_error.body": "Coś poszło nie tak podczas ładowania tego składnika.", "bundle_column_error.retry": "Spróbuj ponownie", @@ -47,6 +53,7 @@ "column.blocks": "Zablokowani użytkownicy", "column.community": "Lokalna oś czasu", "column.direct": "Wiadomości bezpośrednie", + "column.directory": "Przeglądaj profile", "column.domain_blocks": "Ukryte domeny", "column.favourites": "Ulubione", "column.follow_requests": "Prośby o śledzenie", @@ -97,7 +104,10 @@ "confirmations.delete_list.message": "Czy na pewno chcesz bezpowrotnie usunąć tą listę?", "confirmations.domain_block.confirm": "Ukryj wszysyko z domeny", "confirmations.domain_block.message": "Czy na pewno chcesz zablokować całą domenę {domain}? Zwykle lepszym rozwiązaniem jest blokada lub wyciszenie kilku użytkowników.", + "confirmations.logout.confirm": "Wyloguj", + "confirmations.logout.message": "Czy na pewno chcesz się wylogować?", "confirmations.mute.confirm": "Wycisz", + "confirmations.mute.explanation": "To schowa ich i wspominające ich posty, ale wciąż pozwoli im widzieć twoje posty i śledzić cię.", "confirmations.mute.message": "Czy na pewno chcesz wyciszyć {name}?", "confirmations.redraft.confirm": "Usuń i przeredaguj", "confirmations.redraft.message": "Czy na pewno chcesz usunąć i przeredagować ten wpis? Polubienia i podbicia zostaną utracone, a odpowiedzi do oryginalnego wpisu zostaną osierocone.", @@ -105,6 +115,14 @@ "confirmations.reply.message": "W ten sposób utracisz wpis który obecnie tworzysz. Czy na pewno chcesz to zrobić?", "confirmations.unfollow.confirm": "Przestań śledzić", "confirmations.unfollow.message": "Czy na pewno zamierzasz przestać śledzić {name}?", + "conversation.delete": "Usuń rozmowę", + "conversation.mark_as_read": "Oznacz jako przeczytane", + "conversation.open": "Zobacz rozmowę", + "conversation.with": "Z {names}", + "directory.federated": "Ze znanego fediwersum", + "directory.local": "Tylko z {domain}", + "directory.new_arrivals": "Nowości", + "directory.recently_active": "Ostatnio aktywne", "embed.instructions": "Osadź ten wpis na swojej stronie wklejając poniższy kod.", "embed.preview": "Tak będzie to wyglądać:", "emoji_button.activity": "Aktywność", @@ -138,6 +156,10 @@ "empty_column.mutes": "Nie wyciszyłeś(-aś) jeszcze żadnego użytkownika.", "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.", "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych serwerów, aby to wyświetlić", + "error.unexpected_crash.explanation": "W związku z błędem w naszym kodzie lub braku kompatybilności przeglądarki, ta strona nie może być poprawnie wyświetlona.", + "error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, wciąż jesteś w stanie używać Mastodona przez inną przeglądarkę lub natywną aplikację.", + "errors.unexpected_crash.copy_stacktrace": "Skopiuj ślad stosu do schowka", + "errors.unexpected_crash.report_issue": "Zgłoś problem", "follow_request.authorize": "Autoryzuj", "follow_request.reject": "Odrzuć", "getting_started.developers": "Dla programistów", @@ -225,6 +247,7 @@ "lists.new.title_placeholder": "Wprowadź tytuł listy", "lists.search": "Szukaj wśród osób które śledzisz", "lists.subheading": "Twoje listy", + "load_pending": "{count, plural, one {# nowy przedmiot} other {nowe przedmioty}}", "loading_indicator.label": "Ładowanie…", "media_gallery.toggle_visible": "Przełącz widoczność", "missing_indicator.label": "Nie znaleziono", @@ -251,7 +274,6 @@ "navigation_bar.personal": "Osobiste", "navigation_bar.pins": "Przypięte wpisy", "navigation_bar.preferences": "Preferencje", - "navigation_bar.profile_directory": "Katalog profilów", "navigation_bar.public_timeline": "Globalna oś czasu", "navigation_bar.security": "Bezpieczeństwo", "notification.favourite": "{name} dodał(a) Twój wpis do ulubionych", @@ -282,8 +304,10 @@ "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}", "poll.closed": "Zamknięte", "poll.refresh": "Odśwież", + "poll.total_people": "{count, plural, one {# osoba} few {# osoby} many {# osób} other {# osób}}", "poll.total_votes": "{count, plural, one {# głos} few {# głosy} many {# głosów} other {# głosów}}", "poll.vote": "Zagłosuj", + "poll.voted": "Zagłosowałeś_aś na tą odpowiedź", "poll_button.add_poll": "Dodaj głosowanie", "poll_button.remove_poll": "Usuń głosowanie", "privacy.change": "Dostosuj widoczność wpisów", @@ -295,6 +319,7 @@ "privacy.public.short": "Publiczny", "privacy.unlisted.long": "Niewidoczny na publicznych osiach czasu", "privacy.unlisted.short": "Niewidoczny", + "refresh": "Odśwież", "regeneration_indicator.label": "Ładuję…", "regeneration_indicator.sublabel": "Twoja oś czasu jest przygotowywana!", "relative_time.days": "{number} dni", @@ -319,6 +344,7 @@ "search_results.accounts": "Ludzie", "search_results.hashtags": "Hashtagi", "search_results.statuses": "Wpisy", + "search_results.statuses_fts_disabled": "Szukanie wpisów przy pomocy ich zawartości nie jest włączone na tym serwerze Mastodona.", "search_results.total": "{count, number} {count, plural, one {wynik} few {wyniki} many {wyników} more {wyników}}", "status.admin_account": "Otwórz interfejs moderacyjny dla @{name}", "status.admin_status": "Otwórz ten wpis w interfejsie moderacyjnym", @@ -357,6 +383,7 @@ "status.show_more": "Rozwiń", "status.show_more_all": "Rozwiń wszystkie", "status.show_thread": "Pokaż wątek", + "status.uncached_media_warning": "Niedostępne", "status.unmute_conversation": "Cofnij wyciszenie konwersacji", "status.unpin": "Odepnij z profilu", "suggestions.dismiss": "Odrzuć sugestię", @@ -372,14 +399,22 @@ "time_remaining.moments": "Pozostała chwila", "time_remaining.seconds": "{number, plural, one {Pozostała # sekunda} few {Pozostały # sekundy} many {Pozostało # sekund} other {Pozostało # sekund}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {osoba rozmawia} few {osoby rozmawiają} other {osób rozmawia}} o tym", + "trends.trending_now": "Popularne teraz", "ui.beforeunload": "Utracisz tworzony wpis, jeżeli opuścisz Mastodona.", "upload_area.title": "Przeciągnij i upuść aby wysłać", "upload_button.label": "Dodaj zawartość multimedialną (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Przekroczono limit plików do wysłania.", "upload_error.poll": "Dołączanie plików nie dozwolone z głosowaniami.", "upload_form.description": "Wprowadź opis dla niewidomych i niedowidzących", - "upload_form.focus": "Dopasuj podgląd", + "upload_form.edit": "Edytuj", "upload_form.undo": "Usuń", + "upload_modal.analyzing_picture": "Analizowanie obrazu…", + "upload_modal.apply": "Zastosuj", + "upload_modal.description_placeholder": "Pchnąć w tę łódź jeża lub ośm skrzyń fig", + "upload_modal.detect_text": "Wykryj tekst ze obrazu", + "upload_modal.edit_media": "Edytuj multimedia", + "upload_modal.hint": "Kliknij lub przeciągnij kółko na podglądzie by wybrać centralny punkt, który zawsze będzie na widoku na miniaturce.", + "upload_modal.preview_label": "Podgląd ({ratio})", "upload_progress.label": "Wysyłanie…", "video.close": "Zamknij film", "video.exit_fullscreen": "Opuść tryb pełnoekranowy", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index dca087af9..7c6a1fd22 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -4,6 +4,7 @@ "account.block": "Bloquear @{name}", "account.block_domain": "Esconder tudo de {domain}", "account.blocked": "Bloqueado", + "account.cancel_follow_request": "Cancelar solicitação para seguir", "account.direct": "Direct Message @{name}", "account.domain_blocked": "Domínio escondido", "account.edit_profile": "Editar perfil", @@ -15,6 +16,7 @@ "account.follows.empty": "Esse usuário não segue ninguém no momento.", "account.follows_you": "Segue você", "account.hide_reblogs": "Esconder compartilhamentos de @{name}", + "account.last_status": "Última atividade", "account.link_verified_on": "A posse desse link foi verificada em {date}", "account.locked_info": "Essa conta está trancada. Se você a seguir sua solicitação será revisada manualmente.", "account.media": "Mídia", @@ -23,6 +25,7 @@ "account.mute": "Silenciar @{name}", "account.mute_notifications": "Silenciar notificações de @{name}", "account.muted": "Silenciado", + "account.never_active": "Nunca", "account.posts": "Toots", "account.posts_with_replies": "Toots e respostas", "account.report": "Denunciar @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Deixar de seguir", "account.unmute": "Não silenciar @{name}", "account.unmute_notifications": "Retirar silêncio das notificações vindas de @{name}", + "alert.rate_limited.message": "Por favor tente novamente após {retry_time, time, medium}.", + "alert.rate_limited.title": "Limite de tentativas", "alert.unexpected.message": "Um erro inesperado ocorreu.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "Eita!", + "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Você pode pressionar {combo} para ignorar este diálogo na próxima vez", "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.", "bundle_column_error.retry": "Tente novamente", @@ -47,6 +53,7 @@ "column.blocks": "Usuários bloqueados", "column.community": "Local", "column.direct": "Mensagens diretas", + "column.directory": "Explorar perfis", "column.domain_blocks": "Domínios escondidos", "column.favourites": "Favoritos", "column.follow_requests": "Seguidores pendentes", @@ -77,7 +84,7 @@ "compose_form.poll.remove_option": "Remover essa opção", "compose_form.publish": "Publicar", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Marcar mídia como sensível", "compose_form.sensitive.marked": "Mídia está marcada como sensível", "compose_form.sensitive.unmarked": "Mídia não está marcada como sensível", "compose_form.spoiler.marked": "O texto está escondido por um aviso de conteúdo", @@ -89,11 +96,14 @@ "confirmations.block.message": "Você tem certeza de que quer bloquear {name}?", "confirmations.delete.confirm": "Excluir", "confirmations.delete.message": "Você tem certeza de que quer excluir esta postagem?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "Excluir", "confirmations.delete_list.message": "Você tem certeza que quer deletar permanentemente a lista?", "confirmations.domain_block.confirm": "Esconder o domínio inteiro", "confirmations.domain_block.message": "Você quer mesmo bloquear {domain} inteiro? Na maioria dos casos, silenciar ou bloquear alguns usuários é o suficiente e o recomendado. Você não vai ver conteúdo desse domínio em nenhuma das timelines públicas ou nas suas notificações. Seus seguidores desse domínio serão removidos.", + "confirmations.logout.confirm": "Sair", + "confirmations.logout.message": "Tem certeza que deseja encerrar a sessão?", "confirmations.mute.confirm": "Silenciar", + "confirmations.mute.explanation": "Isto irá esconder postagens e postagens que mencionam, mas ainda vai permitir que eles vejam suas publicações e sigam você.", "confirmations.mute.message": "Você tem certeza de que quer silenciar {name}?", "confirmations.redraft.confirm": "Apagar & usar como rascunho", "confirmations.redraft.message": "Você tem certeza que deseja apagar esse status e usá-lo como rascunho? Seus compartilhamentos e favoritos serão perdidos e as respostas ao toot original ficarão desconectadas.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Responder agora vai sobrescrever a mensagem que você está compondo. Você tem certeza que quer continuar?", "confirmations.unfollow.confirm": "Deixar de seguir", "confirmations.unfollow.message": "Você tem certeza de que quer deixar de seguir {name}?", + "conversation.delete": "Excluir conversa", + "conversation.mark_as_read": "Marcar como lida", + "conversation.open": "Ver conversa", + "conversation.with": "Com {names}", + "directory.federated": "De fediverso conhecido", + "directory.local": "De {domain} apenas", + "directory.new_arrivals": "Acabaram de chegar", + "directory.recently_active": "Reverta esta propriedade para seu valor padrão", "embed.instructions": "Incorpore esta postagem em seu site copiando o código abaixo.", "embed.preview": "Aqui está uma previsão de como ficará:", "emoji_button.activity": "Atividades", @@ -134,6 +152,10 @@ "empty_column.mutes": "Você ainda não silenciou nenhum usuário.", "empty_column.notifications": "Você ainda não possui notificações. Interaja com outros usuários para começar a conversar.", "empty_column.public": "Não há nada aqui! Escreva algo publicamente ou siga manualmente usuários de outras instâncias", + "error.unexpected_crash.explanation": "Devido a um bug em nosso código ou a um problema de compatibilidade do navegador, esta página não pode ser exibida corretamente.", + "error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, você ainda pode usar Mastodon através de um navegador diferente ou aplicativo nativo.", + "errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace para a área de transferência", + "errors.unexpected_crash.report_issue": "Reportar problema", "follow_request.authorize": "Autorizar", "follow_request.reject": "Rejeitar", "getting_started.developers": "Desenvolvedores", @@ -158,11 +180,11 @@ "home.column_settings.show_replies": "Mostrar as respostas", "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "introduction.federation.action": "Próximo", - "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.headline": "Global", "introduction.federation.federated.text": "Posts públicos de outros servidores do fediverso vão aparecer na timeline global.", - "introduction.federation.home.headline": "Home", + "introduction.federation.home.headline": "Início", "introduction.federation.home.text": "Posts de pessoas que você segue vão aparecer na sua página inicial. Você pode seguir pessoas de qualquer servidor!", "introduction.federation.local.headline": "Local", "introduction.federation.local.text": "Posts públicos de pessoas no mesmo servidor que você vão aparecer na timeline local.", @@ -204,23 +226,24 @@ "keyboard_shortcuts.search": "para focar a pesquisa", "keyboard_shortcuts.start": "para abrir a coluna \"primeiros passos\"", "keyboard_shortcuts.toggle_hidden": "mostrar/esconder o texto com aviso de conteúdo", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "mostrar/esconder mídia", "keyboard_shortcuts.toot": "para compor um novo toot", "keyboard_shortcuts.unfocus": "para remover o foco da área de composição/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", - "lightbox.view_context": "View context", + "lightbox.view_context": "Ver contexto", "lists.account.add": "Adicionar a listas", "lists.account.remove": "Remover da lista", - "lists.delete": "Delete list", + "lists.delete": "Excluir lista", "lists.edit": "Editar lista", "lists.edit.submit": "Mudar o título", "lists.new.create": "Adicionar lista", "lists.new.title_placeholder": "Novo título da lista", "lists.search": "Procurar entre as pessoas que você segue", "lists.subheading": "Suas listas", + "load_pending": "{count, plural, one {# novo item} other {# novos items}}", "loading_indicator.label": "Carregando...", "media_gallery.toggle_visible": "Esconder/Mostrar", "missing_indicator.label": "Não encontrado", @@ -237,7 +260,7 @@ "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Palavras silenciadas", "navigation_bar.follow_requests": "Seguidores pendentes", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Seguindo e seguidores", "navigation_bar.info": "Mais informações", "navigation_bar.keyboard_shortcuts": "Atalhos de teclado", "navigation_bar.lists": "Listas", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Pessoal", "navigation_bar.pins": "Postagens fixadas", "navigation_bar.preferences": "Preferências", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Global", "navigation_bar.security": "Segurança", "notification.favourite": "{name} adicionou a sua postagem aos favoritos", @@ -277,8 +299,10 @@ "notifications.group": "{count} notificações", "poll.closed": "Fechada", "poll.refresh": "Atualizar", + "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", "poll.vote": "Votar", + "poll.voted": "Você votou nesta resposta", "poll_button.add_poll": "Adicionar uma enquete", "poll_button.remove_poll": "Remover enquete", "privacy.change": "Ajustar a privacidade da mensagem", @@ -290,6 +314,7 @@ "privacy.public.short": "Pública", "privacy.unlisted.long": "Não publicar em feeds públicos", "privacy.unlisted.short": "Não listada", + "refresh": "Atualizar", "regeneration_indicator.label": "Carregando…", "regeneration_indicator.sublabel": "Sua página inicial está sendo preparada!", "relative_time.days": "{number}d", @@ -314,10 +339,11 @@ "search_results.accounts": "Pessoas", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Pesquisar toots por seu conteúdo não está habilitado neste servidor Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "status.admin_account": "Abrir interface de moderação para @{name}", "status.admin_status": "Abrir esse status na interface de moderação", - "status.block": "Block @{name}", + "status.block": "Bloquear @{name}", "status.cancel_reblog_private": "Desfazer compartilhamento", "status.cannot_reblog": "Esta postagem não pode ser compartilhada", "status.copy": "Copiar o link para o status", @@ -352,6 +378,7 @@ "status.show_more": "Mostrar mais", "status.show_more_all": "Mostrar mais para todas as mensagens", "status.show_thread": "Mostrar sequência", + "status.uncached_media_warning": "Não disponível", "status.unmute_conversation": "Desativar silêncio desta conversa", "status.unpin": "Desafixar do perfil", "suggestions.dismiss": "Ignorar a sugestão", @@ -367,14 +394,22 @@ "time_remaining.moments": "Momentos restantes", "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {pessoa} other {pessoas}} falando sobre", + "trends.trending_now": "Em alta no momento", "ui.beforeunload": "Seu rascunho será perdido se você sair do Mastodon.", "upload_area.title": "Arraste e solte para enviar", "upload_button.label": "Adicionar mídia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Limite de envio de arquivos excedido.", "upload_error.poll": "Envio de arquivos não é permitido com enquetes.", "upload_form.description": "Descreva a imagem para deficientes visuais", - "upload_form.focus": "Ajustar foco", + "upload_form.edit": "Editar", "upload_form.undo": "Remover", + "upload_modal.analyzing_picture": "Analisando imagem…", + "upload_modal.apply": "Aplicar", + "upload_modal.description_placeholder": "Grave e cabisbaixo, o filho justo zelava pela querida mãe doente", + "upload_modal.detect_text": "Detectar texto da imagem", + "upload_modal.edit_media": "Editar mídia", + "upload_modal.hint": "Clique ou arraste o círculo na visualização para escolher o ponto focal que sempre será visto em todas as miniaturas.", + "upload_modal.preview_label": "Prévia ({ratio})", "upload_progress.label": "Salvando...", "video.close": "Fechar vídeo", "video.exit_fullscreen": "Sair da tela cheia", diff --git a/app/javascript/mastodon/locales/pt.json b/app/javascript/mastodon/locales/pt-PT.json index 157090c55..bb8a94516 100644 --- a/app/javascript/mastodon/locales/pt.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -4,6 +4,7 @@ "account.block": "Bloquear @{name}", "account.block_domain": "Esconder tudo do domínio {domain}", "account.blocked": "Bloqueado", + "account.cancel_follow_request": "Cancelar pedido de seguidor", "account.direct": "Mensagem directa @{name}", "account.domain_blocked": "Domínio escondido", "account.edit_profile": "Editar perfil", @@ -15,14 +16,16 @@ "account.follows.empty": "Este utilizador ainda não segue alguém.", "account.follows_you": "É teu seguidor", "account.hide_reblogs": "Esconder partilhas de @{name}", + "account.last_status": "Última actividade", "account.link_verified_on": "A posse deste link foi verificada em {date}", "account.locked_info": "O estatuto de privacidade desta conta é fechado. O dono revê manualmente que a pode seguir.", - "account.media": "Media", + "account.media": "Média", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} mudou a sua conta para:", "account.mute": "Silenciar @{name}", "account.mute_notifications": "Silenciar notificações de @{name}", "account.muted": "Silenciada", + "account.never_active": "Nunca", "account.posts": "Publicações", "account.posts_with_replies": "Publicações e respostas", "account.report": "Denunciar @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Deixar de seguir", "account.unmute": "Não silenciar @{name}", "account.unmute_notifications": "Deixar de silenciar @{name}", + "alert.rate_limited.message": "Volte a tentar depois das {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.title": "Bolas!", + "autosuggest_hashtag.per_week": "{count} por semana", "boost_modal.combo": "Pode clicar {combo} para não voltar a ver", "bundle_column_error.body": "Algo de errado aconteceu enquanto este componente era carregado.", "bundle_column_error.retry": "Tente de novo", @@ -47,53 +53,57 @@ "column.blocks": "Utilizadores Bloqueados", "column.community": "Cronologia local", "column.direct": "Mensagens directas", + "column.directory": "Procurar perfis", "column.domain_blocks": "Domínios escondidos", "column.favourites": "Favoritos", - "column.follow_requests": "Seguidores Pendentes", + "column.follow_requests": "Seguidores pendentes", "column.home": "Início", "column.lists": "Listas", "column.mutes": "Utilizadores silenciados", "column.notifications": "Notificações", "column.pins": "Publicações fixas", - "column.public": "Cronologia federativa", + "column.public": "Cronologia federada", "column_back_button.label": "Voltar", - "column_header.hide_settings": "Esconder preferências", + "column_header.hide_settings": "Esconder configurações", "column_header.moveLeft_settings": "Mover coluna para a esquerda", "column_header.moveRight_settings": "Mover coluna para a direita", "column_header.pin": "Fixar", - "column_header.show_settings": "Mostrar preferências", + "column_header.show_settings": "Mostrar configurações", "column_header.unpin": "Desafixar", - "column_subheading.settings": "Preferências", - "community.column_settings.media_only": "Somente media", - "compose_form.direct_message_warning": "Esta publicação só será enviada para os utilizadores mencionados.", - "compose_form.direct_message_warning_learn_more": "Aprender mais", - "compose_form.hashtag_warning": "Esta pulbicacção não será listada em nenhuma hashtag por ser não listada. Somente publicações públicas podem ser pesquisadas por hashtag.", + "column_subheading.settings": "Configurações", + "community.column_settings.media_only": "Somente multimédia", + "compose_form.direct_message_warning": "Esta publicação será enviada apenas para os utilizadores mencionados.", + "compose_form.direct_message_warning_learn_more": "Conhecer mais", + "compose_form.hashtag_warning": "Este toot não será listado em nenhuma hashtag por ser não listado. Apenas toots públics podem ser pesquisados por hashtag.", "compose_form.lock_disclaimer": "A tua conta não está {locked}. Qualquer pessoa pode seguir-te e ver as publicações direcionadas apenas a seguidores.", - "compose_form.lock_disclaimer.lock": "fechada", + "compose_form.lock_disclaimer.lock": "bloqueado", "compose_form.placeholder": "Em que estás a pensar?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.publish": "Publicar", - "compose_form.publish_loud": "{publicar}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media marcado como sensível", - "compose_form.sensitive.unmarked": "Media não está marcado como sensível", + "compose_form.poll.add_option": "Adicionar uma opção", + "compose_form.poll.duration": "Duração da votação", + "compose_form.poll.option_placeholder": "Opção {number}", + "compose_form.poll.remove_option": "Eliminar esta opção", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Marcar multimédia como sensível", + "compose_form.sensitive.marked": "Média marcada como sensível", + "compose_form.sensitive.unmarked": "Média não está marcada como sensível", "compose_form.spoiler.marked": "Texto escondido atrás de aviso", "compose_form.spoiler.unmarked": "O texto não está escondido", "compose_form.spoiler_placeholder": "Escreve o teu aviso aqui", "confirmation_modal.cancel": "Cancelar", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Bloquear e denunciar", "confirmations.block.confirm": "Bloquear", "confirmations.block.message": "De certeza que queres bloquear {name}?", "confirmations.delete.confirm": "Eliminar", "confirmations.delete.message": "De certeza que queres eliminar esta publicação?", - "confirmations.delete_list.confirm": "Apagar", - "confirmations.delete_list.message": "Tens a certeza de que desejas apagar permanentemente esta lista?", + "confirmations.delete_list.confirm": "Eliminar", + "confirmations.delete_list.message": "Tens a certeza de que desejas eliminar permanentemente esta lista?", "confirmations.domain_block.confirm": "Esconder tudo deste domínio", - "confirmations.domain_block.message": "De certeza que queres bloquear completamente o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é o suficiente e o recomendado. Não irás ver conteúdo daquele domínio em cronologia alguma, nem nas tuas notificações. Os teus seguidores daquele domínio serão removidos.", + "confirmations.domain_block.message": "De certeza que queres bloquear completamente o domínio {domain}? Na maioria dos casos, silenciar ou bloquear alguns utilizadores é suficiente e é o recomendado. Não irás ver conteúdo daquele domínio em cronologia alguma nem nas tuas notificações. Os teus seguidores daquele domínio serão removidos.", + "confirmations.logout.confirm": "Terminar sessão", + "confirmations.logout.message": "Deseja terminar a sessão?", "confirmations.mute.confirm": "Silenciar", + "confirmations.mute.explanation": "Isto irá esconder publicações deles ou publicações que os mencionem, mas irá permitir que vejam as suas publicações e sejam seus seguidores.", "confirmations.mute.message": "De certeza que queres silenciar {name}?", "confirmations.redraft.confirm": "Apagar & redigir", "confirmations.redraft.message": "Tens a certeza que queres apagar e redigir esta publicação? Os favoritos e as partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Responder agora irá reescrever a mensagem que estás a compor actualmente. Tens a certeza que queres continuar?", "confirmations.unfollow.confirm": "Deixar de seguir", "confirmations.unfollow.message": "De certeza que queres deixar de seguir {name}?", + "conversation.delete": "Eliminar conversa", + "conversation.mark_as_read": "Marcar como lida", + "conversation.open": "Ver conversa", + "conversation.with": "Com {names}", + "directory.federated": "Do fediverso conhecido", + "directory.local": "Apenas de {domain}", + "directory.new_arrivals": "Recém chegados", + "directory.recently_active": "Com actividade recente", "embed.instructions": "Publica esta publicação no teu site copiando o código abaixo.", "embed.preview": "Podes ver aqui como irá ficar:", "emoji_button.activity": "Actividade", @@ -109,23 +127,23 @@ "emoji_button.food": "Comida & Bebida", "emoji_button.label": "Inserir Emoji", "emoji_button.nature": "Natureza", - "emoji_button.not_found": "Não tem emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Não tem emojis!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Objectos", "emoji_button.people": "Pessoas", - "emoji_button.recent": "Regularmente utilizados", - "emoji_button.search": "Procurar...", + "emoji_button.recent": "Utilizados regularmente", + "emoji_button.search": "Pesquisar...", "emoji_button.search_results": "Resultados da pesquisa", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viagens & Lugares", - "empty_column.account_timeline": "Sem publicações!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_timeline": "Sem toots por aqui!", + "empty_column.account_unavailable": "Perfil indisponível", "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.", - "empty_column.community": "Ainda não existe conteúdo local para mostrar!", + "empty_column.community": "A timeline local está vazia. Escreve algo publicamente para começar!", "empty_column.direct": "Ainda não tens qualquer mensagem directa. Quando enviares ou receberes alguma, ela irá aparecer aqui.", "empty_column.domain_blocks": "Ainda não há qualquer domínio escondido.", - "empty_column.favourited_statuses": "Ainda não tens quaisquer publicações favoritas. Quando tiveres alguma, ela irá aparecer aqui.", - "empty_column.favourites": "Ainda ninguém favorizou esta publicação. Quando alguém o fizer, ela irá aparecer aqui.", - "empty_column.follow_requests": "Ainda não tens pedido de seguimento algum. Quando receberes algum, ele irá aparecer aqui.", + "empty_column.favourited_statuses": "Ainda não tens quaisquer toots favoritos. Quando tiveres algum, ele irá aparecer aqui.", + "empty_column.favourites": "Ainda ninguém marcou este toot como favorito. Quando alguém o fizer, ele irá aparecer aqui.", + "empty_column.follow_requests": "Ainda não tens nenhum pedido de seguimento. Quando receberes algum, ele irá aparecer aqui.", "empty_column.hashtag": "Não foram encontradas publicações com essa hashtag.", "empty_column.home": "Ainda não segues qualquer utilizador. Visita {public} ou utiliza a pesquisa para procurar outros utilizadores.", "empty_column.home.public_timeline": "Cronologia pública", @@ -134,14 +152,18 @@ "empty_column.mutes": "Ainda não silenciaste qualquer utilizador.", "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.", "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos", + "error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a uma compatilidade com o seu navegador, esta página não pôde ser apresentada correctamente.", + "error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, pode usar o Mastodon através de um navegador diferente ou uma aplicação nativa.", + "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard", + "errors.unexpected_crash.report_issue": "Reportar problema", "follow_request.authorize": "Autorizar", "follow_request.reject": "Rejeitar", "getting_started.developers": "Responsáveis pelo desenvolvimento", "getting_started.directory": "Directório de perfil", - "getting_started.documentation": "Documentation", + "getting_started.documentation": "Documentação", "getting_started.heading": "Primeiros passos", "getting_started.invite": "Convidar pessoas", - "getting_started.open_source_notice": "Mastodon é software de fonte aberta. Podes contribuir ou repostar problemas no GitHub do projecto: {github}.", + "getting_started.open_source_notice": "Mastodon é software de código aberto (open source). Podes contribuir ou reportar problemas no GitHub do projecto: {github}.", "getting_started.security": "Segurança", "getting_started.terms": "Termos de serviço", "hashtag.column_header.tag_mode.all": "e {additional}", @@ -154,28 +176,28 @@ "hashtag.column_settings.tag_mode.none": "Nenhum destes", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna", "home.column_settings.basic": "Básico", - "home.column_settings.show_reblogs": "Mostrar as partilhas", - "home.column_settings.show_replies": "Mostrar as respostas", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "home.column_settings.show_reblogs": "Mostrar boosts", + "home.column_settings.show_replies": "Mostrar respostas", + "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", + "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", + "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", "introduction.federation.action": "Seguinte", - "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.headline": "Federada", "introduction.federation.federated.text": "Publicações públicas de outros servidores do fediverse aparecerão na cronologia federativa.", - "introduction.federation.home.headline": "Home", + "introduction.federation.home.headline": "Início", "introduction.federation.home.text": "As publicações das pessoas que tu segues aparecerão na tua coluna inicial. Tu podes seguir qualquer pessoa em qualquer servidor!", "introduction.federation.local.headline": "Local", "introduction.federation.local.text": "Publicações públicas de pessoas que tu segues no teu servidor aparecerão na coluna local.", "introduction.interactions.action": "Terminar o tutorial!", "introduction.interactions.favourite.headline": "Favorito", - "introduction.interactions.favourite.text": "Tu podes guardar um toot para depois e deixar o autor saber que gostaste dele, favoritando-o.", - "introduction.interactions.reblog.headline": "Partilhar", + "introduction.interactions.favourite.text": "Podes guardar um toot para depois e deixar o autor saber que gostaste dele, marcando-o como favorito.", + "introduction.interactions.reblog.headline": "Boost", "introduction.interactions.reblog.text": "Podes partilhar os toots de outras pessoas com os teus seguidores partilhando-os.", "introduction.interactions.reply.headline": "Responder", "introduction.interactions.reply.text": "Tu podes responder a toots de outras pessoas e aos teus, o que os irá juntar numa conversa.", "introduction.welcome.action": "Vamos!", "introduction.welcome.headline": "Primeiros passos", - "introduction.welcome.text": "Bem-vindo ao fediverse! Em pouco tempo poderás enviar mensagens e falar com os teus amigos numa grande variedade de servidores. Mas este servidor, {domain}, é especial—ele alberga o teu perfil. Por isso, lembra-te do seu nome.", + "introduction.welcome.text": "Bem-vindo ao fediverso! Em pouco tempo poderás enviar mensagens e falar com os teus amigos numa grande variedade de servidores. Mas este servidor, {domain}, é especial—ele alberga o teu perfil. Por isso, lembra-te do seu nome.", "keyboard_shortcuts.back": "para voltar", "keyboard_shortcuts.blocked": "para abrir a lista de utilizadores bloqueados", "keyboard_shortcuts.boost": "para partilhar", @@ -184,10 +206,10 @@ "keyboard_shortcuts.description": "Descrição", "keyboard_shortcuts.direct": "para abrir a coluna das mensagens directas", "keyboard_shortcuts.down": "para mover para baixo na lista", - "keyboard_shortcuts.enter": "para expandir uma publicação", + "keyboard_shortcuts.enter": "para expandir um estado", "keyboard_shortcuts.favourite": "para adicionar aos favoritos", "keyboard_shortcuts.favourites": "para abrir a lista dos favoritos", - "keyboard_shortcuts.federated": "para abrir a cronologia federativa", + "keyboard_shortcuts.federated": "para abrir a cronologia federada", "keyboard_shortcuts.heading": "Atalhos do teclado", "keyboard_shortcuts.home": "para abrir a cronologia inicial", "keyboard_shortcuts.hotkey": "Atalho", @@ -204,31 +226,32 @@ "keyboard_shortcuts.search": "para focar na pesquisa", "keyboard_shortcuts.start": "para abrir a coluna dos \"primeiros passos\"", "keyboard_shortcuts.toggle_hidden": "para mostrar/esconder texto atrás de CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "para compor um novo post", - "keyboard_shortcuts.unfocus": "para remover o foco da área de publicação/pesquisa", + "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar média", + "keyboard_shortcuts.toot": "para compor um novo toot", + "keyboard_shortcuts.unfocus": "para remover o foco da área de texto/pesquisa", "keyboard_shortcuts.up": "para mover para cima na lista", "lightbox.close": "Fechar", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", - "lightbox.view_context": "View context", + "lightbox.view_context": "Ver contexto", "lists.account.add": "Adicionar à lista", "lists.account.remove": "Remover da lista", - "lists.delete": "Delete list", + "lists.delete": "Remover lista", "lists.edit": "Editar lista", "lists.edit.submit": "Mudar o título", "lists.new.create": "Adicionar lista", - "lists.new.title_placeholder": "Novo título da lista", + "lists.new.title_placeholder": "Título da nova lista", "lists.search": "Pesquisa entre as pessoas que segues", "lists.subheading": "As tuas listas", + "load_pending": "{count, plural, one {# novo item} other {# novos itens}}", "loading_indicator.label": "A carregar...", - "media_gallery.toggle_visible": "Esconder/Mostrar", + "media_gallery.toggle_visible": "Mostrar/ocultar", "missing_indicator.label": "Não encontrado", "missing_indicator.sublabel": "Este recurso não foi encontrado", "mute_modal.hide_notifications": "Esconder notificações deste utilizador?", "navigation_bar.apps": "Aplicações móveis", "navigation_bar.blocks": "Utilizadores bloqueados", - "navigation_bar.community_timeline": "Local", + "navigation_bar.community_timeline": "Cronologia local", "navigation_bar.compose": "Escrever novo toot", "navigation_bar.direct": "Mensagens directas", "navigation_bar.discover": "Descobrir", @@ -237,23 +260,22 @@ "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Palavras silenciadas", "navigation_bar.follow_requests": "Seguidores pendentes", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Seguindo e seguidores", "navigation_bar.info": "Sobre este servidor", "navigation_bar.keyboard_shortcuts": "Atalhos de teclado", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Sair", "navigation_bar.mutes": "Utilizadores silenciados", - "navigation_bar.personal": "Personal", - "navigation_bar.pins": "Posts fixos", + "navigation_bar.personal": "Pessoal", + "navigation_bar.pins": "Toots afixados", "navigation_bar.preferences": "Preferências", - "navigation_bar.profile_directory": "Profile directory", - "navigation_bar.public_timeline": "Global", + "navigation_bar.public_timeline": "Cronologia federada", "navigation_bar.security": "Segurança", - "notification.favourite": "{name} adicionou o teu post aos favoritos", - "notification.follow": "{name} seguiu-te", + "notification.favourite": "{name} adicionou o teu estado aos favoritos", + "notification.follow": "{name} começou a seguir-te", "notification.mention": "{name} mencionou-te", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} partilhou o teu post", + "notification.poll": "Uma votação em participaste chegou ao fim", + "notification.reblog": "{name} fez boost ao teu o teu estado", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?", "notifications.column_settings.alert": "Notificações no computador", @@ -263,24 +285,26 @@ "notifications.column_settings.filter_bar.show": "Mostrar", "notifications.column_settings.follow": "Novos seguidores:", "notifications.column_settings.mention": "Menções:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Resultados da votação:", "notifications.column_settings.push": "Notificações Push", - "notifications.column_settings.reblog": "Partilhas:", - "notifications.column_settings.show": "Mostrar nas colunas", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Mostrar na coluna", "notifications.column_settings.sound": "Reproduzir som", "notifications.filter.all": "Todas", - "notifications.filter.boosts": "Partilhas", - "notifications.filter.favourites": "Favoritas", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguimento", "notifications.filter.mentions": "Referências", - "notifications.filter.polls": "Poll results", + "notifications.filter.polls": "Resultados da votação", "notifications.group": "{count} notificações", "poll.closed": "Fechado", "poll.refresh": "Recarregar", + "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", "poll.total_votes": "{contar, plural, um {# vote} outro {# votes}}", "poll.vote": "Votar", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll.voted": "Você votou nesta resposta", + "poll_button.add_poll": "Adicionar votação", + "poll_button.remove_poll": "Remover votação", "privacy.change": "Ajustar a privacidade da mensagem", "privacy.direct.long": "Apenas para utilizadores mencionados", "privacy.direct.short": "Directo", @@ -290,6 +314,7 @@ "privacy.public.short": "Público", "privacy.unlisted.long": "Não publicar nos feeds públicos", "privacy.unlisted.short": "Não listar", + "refresh": "Actualizar", "regeneration_indicator.label": "A carregar…", "regeneration_indicator.sublabel": "A tua home está a ser preparada!", "relative_time.days": "{number}d", @@ -300,26 +325,27 @@ "reply_indicator.cancel": "Cancelar", "report.forward": "Reenviar para {target}", "report.forward_hint": "A conta é de outro servidor. Enviar uma cópia anónima do relatório para lá também?", - "report.hint": "O relatório será enviado para os moderadores do teu servidor. Podes fornecer, em baixo, uma explicação do motivo pelo qual estás a relatar esta conta:", + "report.hint": "O relatório será enviado para os moderadores do teu servidor. Podes fornecer, em baixo, uma explicação do motivo pelo qual estás a denunciar esta conta:", "report.placeholder": "Comentários adicionais", "report.submit": "Enviar", "report.target": "Denunciar", "search.placeholder": "Pesquisar", "search_popout.search_format": "Formato avançado de pesquisa", - "search_popout.tips.full_text": "Texto simples devolve publicações que tu escreveste, favoritaste, partilhaste ou em que foste mencionado, tal como nomes de utilizador correspondentes, alcunhas e hashtags.", + "search_popout.tips.full_text": "Texto simples devolve publicações que tu escreveste, marcaste como favorita, partilhaste ou em que foste mencionado, tal como nomes de utilizador correspondentes, alcunhas e hashtags.", "search_popout.tips.hashtag": "hashtag", "search_popout.tips.status": "estado", "search_popout.tips.text": "O texto simples retorna a correspondência de nomes, utilizadores e hashtags", "search_popout.tips.user": "utilizador", "search_results.accounts": "Pessoas", "search_results.hashtags": "Hashtags", - "search_results.statuses": "Publicações", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "A pesquisa de toots pelo seu conteúdo não está disponível neste servidor Mastodon.", "search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}", "status.admin_account": "Abrir a interface de moderação para @{name}", "status.admin_status": "Abrir esta publicação na interface de moderação", - "status.block": "Block @{name}", - "status.cancel_reblog_private": "Não partilhar", - "status.cannot_reblog": "Este post não pode ser partilhado", + "status.block": "Bloquear @{name}", + "status.cancel_reblog_private": "Remover boost", + "status.cannot_reblog": "Não é possível fazer boost a esta publicação", "status.copy": "Copiar o link para a publicação", "status.delete": "Eliminar", "status.detailed_status": "Vista de conversação detalhada", @@ -328,7 +354,7 @@ "status.favourite": "Adicionar aos favoritos", "status.filtered": "Filtrada", "status.load_more": "Carregar mais", - "status.media_hidden": "Media escondida", + "status.media_hidden": "Média escondida", "status.mention": "Mencionar @{name}", "status.more": "Mais", "status.mute": "Silenciar @{name}", @@ -338,48 +364,57 @@ "status.pinned": "Publicação fixa", "status.read_more": "Ler mais", "status.reblog": "Partilhar", - "status.reblog_private": "Partilhar com a audiência original", - "status.reblogged_by": "{name} partilhou", - "status.reblogs.empty": "Ainda ninguém partilhou esta publicação. Quando alguém o fizer, ela irá aparecer aqui.", + "status.reblog_private": "Fazer boost com a audiência original", + "status.reblogged_by": "{name} fez boost", + "status.reblogs.empty": "Ainda ninguém fez boost a este toot. Quando alguém o fizer, ele irá aparecer aqui.", "status.redraft": "Apagar & reescrever", "status.reply": "Responder", "status.replyAll": "Responder à conversa", "status.report": "Denunciar @{name}", "status.sensitive_warning": "Conteúdo sensível", - "status.share": "Compartilhar", + "status.share": "Partilhar", "status.show_less": "Mostrar menos", "status.show_less_all": "Mostrar menos para todas", "status.show_more": "Mostrar mais", "status.show_more_all": "Mostrar mais para todas", "status.show_thread": "Mostrar conversa", + "status.uncached_media_warning": "Não diponível", "status.unmute_conversation": "Deixar de silenciar esta conversa", "status.unpin": "Não fixar no perfil", "suggestions.dismiss": "Dispensar a sugestão", "suggestions.header": "Tu podes estar interessado em…", - "tabs_bar.federated_timeline": "Global", - "tabs_bar.home": "Home", + "tabs_bar.federated_timeline": "Federada", + "tabs_bar.home": "Início", "tabs_bar.local_timeline": "Local", "tabs_bar.notifications": "Notificações", "tabs_bar.search": "Pesquisar", "time_remaining.days": "{número, plural, um {# day} outro {# days}} faltam", "time_remaining.hours": "{número, plural, um {# hour} outro {# hours}} faltam", "time_remaining.minutes": "{número, plural, um {# minute} outro {# minutes}} faltam", - "time_remaining.moments": "Momentos em falta", + "time_remaining.moments": "Momentos restantes", "time_remaining.seconds": "{número, plural, um {# second} outro {# seconds}} faltam", "trends.count_by_accounts": "{count} {rawCount, plural, uma {person} outra {people}} a falar", - "ui.beforeunload": "O teu rascunho vai ser perdido se abandonares o Mastodon.", + "trends.trending_now": "Tendencias actuais", + "ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.", "upload_area.title": "Arraste e solte para enviar", "upload_button.label": "Adicionar media", "upload_error.limit": "Limite máximo do ficheiro a carregar excedido.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.poll": "Carregamento de ficheiros não é permitido em votações.", "upload_form.description": "Descrição da imagem para pessoas com dificuldades visuais", - "upload_form.focus": "Alterar previsualização", + "upload_form.edit": "Editar", "upload_form.undo": "Apagar", + "upload_modal.analyzing_picture": "A analizar imagem…", + "upload_modal.apply": "Aplicar", + "upload_modal.description_placeholder": "Grave e cabisbaixo, o filho justo zelava pela querida mãe doente", + "upload_modal.detect_text": "Detectar texto na imagem", + "upload_modal.edit_media": "Editar média", + "upload_modal.hint": "Clique ou arraste o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.", + "upload_modal.preview_label": "Pré-visualizar ({ratio})", "upload_progress.label": "A enviar...", "video.close": "Fechar vídeo", "video.exit_fullscreen": "Sair de full screen", "video.expand": "Expandir vídeo", - "video.fullscreen": "Full screen", + "video.fullscreen": "Ecrã completo", "video.hide": "Esconder vídeo", "video.mute": "Silenciar", "video.pause": "Pausar", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index dcb7a088d..617dbcc0d 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -4,6 +4,7 @@ "account.block": "Blochează @{name}", "account.block_domain": "Ascunde tot de la {domain}", "account.blocked": "Blocat", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Mesaj direct @{name}", "account.domain_blocked": "Domeniu ascuns", "account.edit_profile": "Editează profilul", @@ -15,6 +16,7 @@ "account.follows.empty": "Acest utilizator nu urmărește pe nimeni incă.", "account.follows_you": "Te urmărește", "account.hide_reblogs": "Ascunde redistribuirile de la @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Deținerea acestui link a fost verificată la {date}", "account.locked_info": "Acest profil este privat. Această persoană gestioneaz manual cine o urmărește.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Oprește @{name}", "account.mute_notifications": "Oprește notificările de la @{name}", "account.muted": "Oprit", + "account.never_active": "Never", "account.posts": "Postări", "account.posts_with_replies": "Postări și replici", "account.report": "Raportează @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Nu mai urmări", "account.unmute": "Activează notificările de la @{name}", "account.unmute_notifications": "Activează notificările de la @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "A apărut o eroare neașteptată.", "alert.unexpected.title": "Hopa!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Poți apăsa {combo} pentru a omite asta data viitoare", "bundle_column_error.body": "Ceva nu a funcționat la încărcarea acestui component.", "bundle_column_error.retry": "Încearcă din nou", @@ -47,6 +53,7 @@ "column.blocks": "Utilizatori blocați", "column.community": "Fluxul Local", "column.direct": "Mesaje directe", + "column.directory": "Browse profiles", "column.domain_blocks": "Domenii ascunse", "column.favourites": "Favorite", "column.follow_requests": "Cereri de urmărire", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Ești sigur că vrei să ștergi permanent această listă?", "confirmations.domain_block.confirm": "Ascunde tot domeniul", "confirmations.domain_block.message": "Ești absolut sigur că vrei să blochezi complet {domain}? În cele mai multe cazuri raportarea sau oprirea anumitor lucruri este suficientă și de preferat. Nu vei mai vedea nici un conținut de la acest domeniu in nici un flux public sau în notificările tale. Urmăritorii tăi de la acele domenii vor fi eliminați.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Oprește", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Ești sigur că vrei să oprești {name}?", "confirmations.redraft.confirm": "Șterge și salvează ca ciornă", "confirmations.redraft.message": "Ești sigur că vrei să faci asta? Tot ce ține de această postare, inclusiv răspunsurile vor fi deconectate.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Răspunzând la asta acum, mesajul pe care îl compui în prezent se va șterge. Ești sigur că vrei să continui?", "confirmations.unfollow.confirm": "Nu mai urmări", "confirmations.unfollow.message": "Ești sigur că nu mai vrei să îl urmărești pe {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Inserează această postare pe site-ul tău adăugând codul de mai jos.", "embed.preview": "Cam așa va arăta:", "emoji_button.activity": "Activitate", @@ -134,6 +152,10 @@ "empty_column.mutes": "Nu ai oprit nici un utilizator incă.", "empty_column.notifications": "Nu ai nici o notificare încă. Interacționează cu alții pentru a începe o conversație.", "empty_column.public": "Nu este nimci aici încă! Scrie ceva public, sau urmărește alți utilizatori din alte instanțe pentru a porni fluxul", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autorizează", "follow_request.reject": "Respinge", "getting_started.developers": "Dezvoltatori", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Titlu pentru noua listă", "lists.search": "Caută printre persoanale pe care le urmărești", "lists.subheading": "Listele tale", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Încărcare...", "media_gallery.toggle_visible": "Comutați vizibilitatea", "missing_indicator.label": "Nu a fost găsit", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Postări fixate", "navigation_bar.preferences": "Preferințe", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Flux global", "navigation_bar.security": "Securitate", "notification.favourite": "{name} a adăugat statusul tău la favorite", @@ -277,8 +299,10 @@ "notifications.group": "{count} notificări", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Cine vede asta", @@ -290,6 +314,7 @@ "privacy.public.short": "Public", "privacy.unlisted.long": "Nu afisa in fluxul public", "privacy.unlisted.short": "Nelistat", + "refresh": "Refresh", "regeneration_indicator.label": "Încărcare…", "regeneration_indicator.sublabel": "Fluxul tău este în preparare!", "relative_time.days": "{number}z", @@ -314,6 +339,7 @@ "search_results.accounts": "Oameni", "search_results.hashtags": "Hashtaguri", "search_results.statuses": "Postări", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Arată mai mult", "status.show_more_all": "Arată mai mult pentru toți", "status.show_thread": "Arată topicul", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Repornește conversația", "status.unpin": "Eliberează din profil", "suggestions.dismiss": "Omite sugestia", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} vorbesc", + "trends.trending_now": "Trending now", "ui.beforeunload": "Postarea se va pierde dacă părăsești pagina.", "upload_area.title": "Trage și eliberează pentru a încărca", "upload_button.label": "Adaugă media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Adaugă o descriere pentru persoanele cu deficiențe de vedere", - "upload_form.focus": "Schimbă previzualizarea", + "upload_form.edit": "Edit", "upload_form.undo": "Șterge", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Se Încarcă...", "video.close": "Închide video", "video.exit_fullscreen": "Închide", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index d720b6272..c8767e535 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -4,17 +4,19 @@ "account.block": "Блокировать", "account.block_domain": "Блокировать все с {domain}", "account.blocked": "Заблокирован(а)", + "account.cancel_follow_request": "Отменить запрос", "account.direct": "Написать @{name}", "account.domain_blocked": "Домен скрыт", "account.edit_profile": "Изменить профиль", "account.endorse": "Рекомендовать в профиле", "account.follow": "Подписаться", "account.followers": "Подписаны", - "account.followers.empty": "Никто не подписан на этого пользователя.", + "account.followers.empty": "На этого пользователя пока никто не подписан.", "account.follows": "Подписки", - "account.follows.empty": "Этот пользователь ни на кого не подписан.", - "account.follows_you": "Подписан(а) на Вас", + "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", + "account.follows_you": "Подписан(а) на вас", "account.hide_reblogs": "Скрыть реблоги от @{name}", + "account.last_status": "Последняя активность", "account.link_verified_on": "Владение этой ссылкой было проверено {date}", "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.", "account.media": "Медиа", @@ -23,20 +25,24 @@ "account.mute": "Заглушить", "account.mute_notifications": "Скрыть уведомления от @{name}", "account.muted": "Приглушён", + "account.never_active": "Никогда", "account.posts": "Посты", - "account.posts_with_replies": "Посты и ответы", + "account.posts_with_replies": "Посты с ответами", "account.report": "Пожаловаться", - "account.requested": "Ожидает подтверждения", + "account.requested": "Ожидает подтверждения. Нажмите для отмены", "account.share": "Поделиться профилем @{name}", "account.show_reblogs": "Показывать продвижения от @{name}", - "account.unblock": "Разблокировать", + "account.unblock": "Разблокировать @{name}", "account.unblock_domain": "Разблокировать {domain}", "account.unendorse": "Не рекомендовать в профиле", "account.unfollow": "Отписаться", - "account.unmute": "Снять глушение", + "account.unmute": "Не скрывать @{name}", "account.unmute_notifications": "Показывать уведомления от @{name}", + "alert.rate_limited.message": "Пожалуйста, повторите через {retry_time, time, medium}.", + "alert.rate_limited.title": "Скорость ограничена", "alert.unexpected.message": "Что-то пошло не так.", "alert.unexpected.title": "Ой!", + "autosuggest_hashtag.per_week": "{count} / неделю", "boost_modal.combo": "Нажмите {combo}, чтобы пропустить это в следующий раз", "bundle_column_error.body": "Что-то пошло не так при загрузке этого компонента.", "bundle_column_error.retry": "Попробовать снова", @@ -47,12 +53,13 @@ "column.blocks": "Список блокировки", "column.community": "Локальная лента", "column.direct": "Личные сообщения", + "column.directory": "Просмотр профилей", "column.domain_blocks": "Скрытые домены", "column.favourites": "Понравившееся", "column.follow_requests": "Запросы на подписку", "column.home": "Главная", "column.lists": "Списки", - "column.mutes": "Список глушения", + "column.mutes": "Список скрытых пользователей", "column.notifications": "Уведомления", "column.pins": "Закреплённый пост", "column.public": "Глобальная лента", @@ -68,14 +75,14 @@ "compose_form.direct_message_warning": "Этот статус будет виден только упомянутым пользователям.", "compose_form.direct_message_warning_learn_more": "Узнать больше", "compose_form.hashtag_warning": "Этот пост не будет показывается в поиске по хэштегу, т.к. он непубличный. Только публичные посты можно найти в поиске по хэштегу.", - "compose_form.lock_disclaimer": "Ваш аккаунт не {locked}. Любой человек может подписаться на Вас и просматривать посты для подписчиков.", + "compose_form.lock_disclaimer": "Ваша учётная запись не {locked}. Любой пользователь может подписаться на вас и просматривать посты для подписчиков.", "compose_form.lock_disclaimer.lock": "закрыт", - "compose_form.placeholder": "О чем Вы думаете?", - "compose_form.poll.add_option": "Добавить", - "compose_form.poll.duration": "Длительность опроса", + "compose_form.placeholder": "О чем вы думаете?", + "compose_form.poll.add_option": "Добавить вариант", + "compose_form.poll.duration": "Продолжительность опроса", "compose_form.poll.option_placeholder": "Вариант {number}", "compose_form.poll.remove_option": "Удалить этот вариант", - "compose_form.publish": "Трубить", + "compose_form.publish": "Запостить", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.hide": "Пометить медиафайл как чувствительный", "compose_form.sensitive.marked": "Медиафайлы не отмечены как чувствительные", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Вы действительно хотите навсегда удалить этот список?", "confirmations.domain_block.confirm": "Блокировать весь домен", "confirmations.domain_block.message": "Вы на самом деле уверены, что хотите блокировать весь {domain}? В большинстве случаев нескольких отдельных блокировок или глушений достаточно.", + "confirmations.logout.confirm": "Выйти", + "confirmations.logout.message": "Вы уверены, что хотите выйти?", "confirmations.mute.confirm": "Заглушить", + "confirmations.mute.explanation": "Это скроет посты этого пользователя и те, в которых он упоминается, но при этом он по-прежнему сможет подписаться на вас и смотреть ваши посты.", "confirmations.mute.message": "Вы уверены, что хотите заглушить {name}?", "confirmations.redraft.confirm": "Удалить и исправить", "confirmations.redraft.message": "Вы уверены, что хотите удалить этот статус и превратить в черновик? Вы потеряете все ответы, продвижения и отметки 'нравится' к нему.", @@ -101,10 +111,18 @@ "confirmations.reply.message": "При ответе текст набираемого сообщения будет перезаписан. Продолжить?", "confirmations.unfollow.confirm": "Отписаться", "confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?", - "embed.instructions": "Встройте этот статус на Вашем сайте, скопировав код внизу.", + "conversation.delete": "Удалить беседу", + "conversation.mark_as_read": "Пометить прочитанным", + "conversation.open": "Просмотр беседы", + "conversation.with": "С {names}", + "directory.federated": "Со всей федерации", + "directory.local": "Только из {domain}", + "directory.new_arrivals": "Новички", + "directory.recently_active": "Недавно активные", + "embed.instructions": "Встройте этот пост на свой сайт, скопировав следующий код:", "embed.preview": "Так это будет выглядеть:", "emoji_button.activity": "Занятия", - "emoji_button.custom": "Собственные", + "emoji_button.custom": "Особенные", "emoji_button.flags": "Флаги", "emoji_button.food": "Еда и напитки", "emoji_button.label": "Вставить эмодзи", @@ -116,32 +134,36 @@ "emoji_button.search": "Найти...", "emoji_button.search_results": "Результаты поиска", "emoji_button.symbols": "Символы", - "emoji_button.travel": "Путешествия", - "empty_column.account_timeline": "Статусов нет!", + "emoji_button.travel": "Путешествия и места", + "empty_column.account_timeline": "Здесь нет постов!", "empty_column.account_unavailable": "Профиль недоступен", "empty_column.blocks": "Вы ещё никого не заблокировали.", "empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!", - "empty_column.direct": "У Вас пока нет личных сообщений. Когда Вы начнёте их отправлять или получать, они появятся здесь.", + "empty_column.direct": "У вас пока нет личных сообщений. Как только вы отправите или получите одно, оно появится здесь.", "empty_column.domain_blocks": "Скрытых доменов пока нет.", - "empty_column.favourited_statuses": "Вы не добавили ни одного статуса в 'Избранное'. Как только Вы это сделаете, они появятся здесь.", - "empty_column.favourites": "Никто ещё не добавил этот статус в 'Избранное'. Как только кто-то это сделает, они появятся здесь.", + "empty_column.favourited_statuses": "Вы не добавили ни один пост в «Избранное». Как только вы это сделаете, он появится здесь.", + "empty_column.favourites": "Никто ещё не добавил этот пост в «Избранное». Как только кто-то это сделает, это отобразится здесь.", "empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.", - "empty_column.hashtag": "Статусов с таким хэштегом еще не существует.", - "empty_column.home": "Пока Вы ни на кого не подписаны. Полистайте {public} или используйте поиск, чтобы освоиться и завести новые знакомства.", + "empty_column.hashtag": "С этим хэштегом пока ещё ничего не постили.", + "empty_column.home": "Пока вы ни на кого не подписаны. Полистайте {public} или используйте поиск, чтобы освоиться и завести новые знакомства.", "empty_column.home.public_timeline": "публичные ленты", "empty_column.list": "В этом списке пока ничего нет.", - "empty_column.lists": "У Вас ещё нет списков. Все созданные Вами списки будут показаны здесь.", - "empty_column.mutes": "Вы ещё никого не заглушили.", - "empty_column.notifications": "У Вас еще нет уведомлений. Заведите знакомство с другими пользователями, чтобы начать разговор.", - "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту.", + "empty_column.lists": "У вас ещё нет списков. Созданные вами списки будут показаны здесь.", + "empty_column.mutes": "Вы ещё никого не скрывали.", + "empty_column.notifications": "У вас пока нет уведомлений. Взаимодействуйте с другими, чтобы завести разговор.", + "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту", + "error.unexpected_crash.explanation": "Из-за несовместимого браузера или ошибки в нашем коде, эта страница не может быть корректно отображена.", + "error.unexpected_crash.next_steps": "Попробуйте обновить страницу. Если проблема не исчезает, используйте Mastodon из-под другого браузера или приложения.", + "errors.unexpected_crash.copy_stacktrace": "Копировать стектрейс в буфер обмена", + "errors.unexpected_crash.report_issue": "Сообщить о проблеме", "follow_request.authorize": "Авторизовать", "follow_request.reject": "Отказать", - "getting_started.developers": "Для разработчиков", + "getting_started.developers": "Разработчикам", "getting_started.directory": "Каталог профилей", "getting_started.documentation": "Документация", "getting_started.heading": "Добро пожаловать", "getting_started.invite": "Пригласить людей", - "getting_started.open_source_notice": "Mastodon - сервис с открытым исходным кодом. Вы можете помочь проекту или сообщить о проблемах на GitHub по адресу {github}.", + "getting_started.open_source_notice": "Mastodon — сервис с открытым исходным кодом. Вы можете внести вклад или сообщить о проблемах на GitHub: {github}.", "getting_started.security": "Безопасность", "getting_started.terms": "Условия использования", "hashtag.column_header.tag_mode.all": "и {additional}", @@ -152,30 +174,30 @@ "hashtag.column_settings.tag_mode.all": "Все из списка", "hashtag.column_settings.tag_mode.any": "Любой из списка", "hashtag.column_settings.tag_mode.none": "Ни один из списка", - "hashtag.column_settings.tag_toggle": "Включая дополнительные хэштеге из этой колонки", + "hashtag.column_settings.tag_toggle": "Включить дополнительные теги для этой колонки", "home.column_settings.basic": "Основные", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", - "intervals.full.days": "{number, plural, one {# день} few {# дня} many {# дней} other {# дней}}", - "intervals.full.hours": "{number, plural, one {# час} few {# часа} many {# часов} other {# часов}}", - "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} many {# минут} other {# минут}}", + "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}", + "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}", + "intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}", "introduction.federation.action": "Далее", "introduction.federation.federated.headline": "Глобальная лента", "introduction.federation.federated.text": "Публичные статусы с других серверов федеративной сети расположатся в глобальной ленте.", "introduction.federation.home.headline": "Домашняя лента", - "introduction.federation.home.text": "Статусы от тех, на кого вы подписаны, появятся в вашей домашней ленте. Вы можете подписаться на кого угодно с любого сервера!", + "introduction.federation.home.text": "Посты людей, на которых вы подписаны, будут отображаться в домашней ленте. Подписываться можно на кого угодно, независимо от узла.", "introduction.federation.local.headline": "Локальная лента", "introduction.federation.local.text": "Публичные статусы от людей с того же сервера, что и вы, будут отображены в локальной ленте.", "introduction.interactions.action": "Завершить обучение", - "introduction.interactions.favourite.headline": "Отметки \"нравится\"", + "introduction.interactions.favourite.headline": "Отметки «нравится»", "introduction.interactions.favourite.text": "Вы можете отметить статус, чтобы вернуться к нему позже и дать знать автору, что запись вам понравилась, поставив отметку \"нравится\".", "introduction.interactions.reblog.headline": "Продвижения", - "introduction.interactions.reblog.text": "Вы можете делиться статусами других людей, продвигая их в своём аккаунте.", + "introduction.interactions.reblog.text": "Вы можете делиться статусами других людей, продвигая их в своей учётной записи.", "introduction.interactions.reply.headline": "Ответы", "introduction.interactions.reply.text": "Вы можете отвечать свои и чужие посты, образуя цепочки сообщений (обсуждения).", "introduction.welcome.action": "Поехали!", "introduction.welcome.headline": "Первые шаги", - "introduction.welcome.text": "Добро пожаловать в федеративную сеть! Уже через мгновение вы сможете отправлять сообщения и общаться со своими друзьями на любом сервере. Но этот сервер — {domain} — особенный: на нём располагается ваш профиль. Запомните его название.", + "introduction.welcome.text": "Добро пожаловать в Федиверс! Уже через мгновение вы сможете отправлять сообщения и общаться со своими друзьями с любых узлов. Но этот узел — {domain} — особенный: на нём располагается ваш профиль, так что не забудьте его название.", "keyboard_shortcuts.back": "перейти назад", "keyboard_shortcuts.blocked": "чтобы открыть список заблокированных", "keyboard_shortcuts.boost": "продвинуть пост", @@ -219,8 +241,9 @@ "lists.edit.submit": "Изменить название", "lists.new.create": "Новый список", "lists.new.title_placeholder": "Заголовок списка", - "lists.search": "Искать из ваших подписок", + "lists.search": "Искать среди подписок", "lists.subheading": "Ваши списки", + "load_pending": "{count, plural, one {# новый элемент} few {# новых элемента} other {# новых элементов}}", "loading_indicator.label": "Загрузка...", "media_gallery.toggle_visible": "Показать/скрыть", "missing_indicator.label": "Не найдено", @@ -242,18 +265,17 @@ "navigation_bar.keyboard_shortcuts": "Сочетания клавиш", "navigation_bar.lists": "Списки", "navigation_bar.logout": "Выйти", - "navigation_bar.mutes": "Список глушения", + "navigation_bar.mutes": "Список скрытых пользователей", "navigation_bar.personal": "Личное", "navigation_bar.pins": "Закреплённые посты", - "navigation_bar.preferences": "Опции", - "navigation_bar.profile_directory": "Каталог профилей", + "navigation_bar.preferences": "Настройки", "navigation_bar.public_timeline": "Глобальная лента", "navigation_bar.security": "Безопасность", - "notification.favourite": "{name} понравился Ваш статус", - "notification.follow": "{name} подписался(-лась) на Вас", - "notification.mention": "{name} упомянул(а) Вас", + "notification.favourite": "{name} добавил(а) ваш статус в избранное", + "notification.follow": "{name} подписался (-лась) на вас", + "notification.mention": "{name} упомянул(а) вас", "notification.poll": "Опрос, в котором вы приняли участие, завершился", - "notification.reblog": "{name} продвинул(а) Ваш статус", + "notification.reblog": "{name} продвинул(а) ваш статус", "notifications.clear": "Очистить уведомления", "notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?", "notifications.column_settings.alert": "Десктопные уведомления", @@ -277,8 +299,10 @@ "notifications.group": "{count} уведомл.", "poll.closed": "Завершён", "poll.refresh": "Обновить", + "poll.total_people": "{count, plural, one {# человек} few {# человека} many {# человек} other {# человек}}", "poll.total_votes": "{count, plural, one {# голос} few {# голоса} many {# голосов} other {# голосов}}", "poll.vote": "Голосовать", + "poll.voted": "Вы проголосовали за этот вариант", "poll_button.add_poll": "Добавить опрос", "poll_button.remove_poll": "Удалить опрос", "privacy.change": "Изменить видимость статуса", @@ -290,8 +314,9 @@ "privacy.public.short": "Публичный", "privacy.unlisted.long": "Не показывать в лентах", "privacy.unlisted.short": "Скрытый", + "refresh": "Обновить", "regeneration_indicator.label": "Загрузка…", - "regeneration_indicator.sublabel": "Ваша домашняя лента готовится!", + "regeneration_indicator.sublabel": "Один момент, мы подготавливаем вашу ленту!", "relative_time.days": "{number}д", "relative_time.hours": "{number}ч", "relative_time.just_now": "только что", @@ -299,14 +324,14 @@ "relative_time.seconds": "{number}с", "reply_indicator.cancel": "Отмена", "report.forward": "Переслать в {target}", - "report.forward_hint": "Этот аккаунт расположен на другом сервере. Отправить туда анонимную копию Вашей жалобы?", - "report.hint": "Жалоба будет отправлена модераторам Вашего сервера. Вы также можете указать подробную причину жалобы ниже:", + "report.forward_hint": "Этот аккаунт расположен на другом узле. Отправить туда анонимную копию вашей жалобы?", + "report.hint": "Жалоба будет отправлена модераторам вашего узла. Вы также можете указать подробную причину жалобы ниже:", "report.placeholder": "Комментарий", "report.submit": "Отправить", "report.target": "Жалоба на {target}", "search.placeholder": "Поиск", "search_popout.search_format": "Продвинутый формат поиска", - "search_popout.tips.full_text": "Возвращает посты, которые Вы написали, отметили как 'избранное', продвинули или в которых были упомянуты, а также содержащие юзернейм, имя и хэштеги.", + "search_popout.tips.full_text": "Поиск по простому тексту отобразит посты, которые вы написали, добавили в избранное, продвинули или в которых были упомянуты, а также подходящие имена пользователей и хэштеги.", "search_popout.tips.hashtag": "хэштег", "search_popout.tips.status": "статус", "search_popout.tips.text": "Простой ввод текста покажет совпадающие имена пользователей, отображаемые имена и хэштеги", @@ -314,6 +339,7 @@ "search_results.accounts": "Люди", "search_results.hashtags": "Хэштеги", "search_results.statuses": "Посты", + "search_results.statuses_fts_disabled": "Поиск постов по их контенту не поддерживается на этом сервере Mastodon.", "search_results.total": "{count, number} {count, plural, one {результат} few {результата} many {результатов} other {результатов}}", "status.admin_account": "Открыть интерфейс модератора для @{name}", "status.admin_status": "Открыть этот статус в интерфейсе модератора", @@ -352,6 +378,7 @@ "status.show_more": "Развернуть", "status.show_more_all": "Развернуть для всех", "status.show_thread": "Показать обсуждение", + "status.uncached_media_warning": "Недоступно", "status.unmute_conversation": "Снять глушение с обсуждения", "status.unpin": "Открепить от профиля", "suggestions.dismiss": "Удалить предложение", @@ -366,15 +393,23 @@ "time_remaining.minutes": "{number, plural, one {осталась # минута} few {осталось # минуты} many {осталось # минут} other {осталось # минут}}", "time_remaining.moments": "остались считанные мгновения", "time_remaining.seconds": "{number, plural, one {осталась # секунду} few {осталось # секунды} many {осталось # секунд} other {осталось # секунд}}", - "trends.count_by_accounts": "Популярно у {count} {rawCount, plural, one {человека} few {человек} many {человек} other {человек}}", + "trends.count_by_accounts": "{count} {rawCount, plural, one {человек говорит} few {человека говорят} other {человек говорят}} про это", + "trends.trending_now": "Самое актуальное", "ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.", "upload_area.title": "Перетащите сюда, чтобы загрузить", "upload_button.label": "Добавить медиаконтент", "upload_error.limit": "Достигнут лимит загруженных файлов.", "upload_error.poll": "К опросам нельзя прикреплять файлы.", - "upload_form.description": "Описать для людей с нарушениями зрения", - "upload_form.focus": "Обрезать", + "upload_form.description": "Добавьте описание для людей с нарушениями зрения:", + "upload_form.edit": "Изменить", "upload_form.undo": "Отменить", + "upload_modal.analyzing_picture": "Обработка изображения…", + "upload_modal.apply": "Применить", + "upload_modal.description_placeholder": "На дворе трава, на траве дрова", + "upload_modal.detect_text": "Найти текст на картинке", + "upload_modal.edit_media": "Изменение медиа", + "upload_modal.hint": "Нажмите и перетащите круг в предпросмотре в точку фокуса, которая всегда будет видна на эскизах.", + "upload_modal.preview_label": "Предпросмотр ({ratio})", "upload_progress.label": "Загрузка...", "video.close": "Закрыть видео", "video.exit_fullscreen": "Покинуть полноэкранный режим", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 56edf5469..0766e703f 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -1,10 +1,11 @@ { - "account.add_or_remove_from_list": "Pridaj, alebo odstráň zo zoznamov", + "account.add_or_remove_from_list": "Pridaj do, alebo odober zo zoznamov", "account.badges.bot": "Bot", "account.block": "Blokuj @{name}", "account.block_domain": "Ukry všetko z {domain}", "account.blocked": "Blokovaný/á", - "account.direct": "Súkromná správa pre @{name}", + "account.cancel_follow_request": "Zruš požiadanie o sledovanie", + "account.direct": "Priama správa pre @{name}", "account.domain_blocked": "Doména ukrytá", "account.edit_profile": "Uprav profil", "account.endorse": "Zobrazuj na profile", @@ -15,15 +16,17 @@ "account.follows.empty": "Tento užívateľ ešte nikoho nenásleduje.", "account.follows_you": "Následuje ťa", "account.hide_reblogs": "Skry vyzdvihnutia od @{name}", + "account.last_status": "Naposledy aktívny", "account.link_verified_on": "Vlastníctvo tohto odkazu bolo skontrolované {date}", "account.locked_info": "Stav súkromia pre tento účet je nastavený na zamknutý. Jeho vlastník sám prehodnocuje, kto ho môže sledovať.", "account.media": "Médiá", "account.mention": "Spomeň @{name}", "account.moved_to": "{name} sa presunul/a na:", - "account.mute": "Ignorovať @{name}", + "account.mute": "Nevšímaj si @{name}", "account.mute_notifications": "Stĺm oboznámenia od @{name}", "account.muted": "Utíšený/á", - "account.posts": "Príspevky", + "account.never_active": "Nikdy", + "account.posts": "Príspevkov", "account.posts_with_replies": "Príspevky aj s odpoveďami", "account.report": "Nahlás @{name}", "account.requested": "Čaká na schválenie. Klikni pre zrušenie žiadosti", @@ -35,8 +38,11 @@ "account.unfollow": "Prestaň následovať", "account.unmute": "Prestaň ignorovať @{name}", "account.unmute_notifications": "Zruš stĺmenie oboznámení od @{name}", + "alert.rate_limited.message": "Prosím, skús to znova za {retry_time, time, medium}.", + "alert.rate_limited.title": "Tempo obmedzené", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", - "alert.unexpected.title": "Oops!", + "alert.unexpected.title": "Ups!", + "autosuggest_hashtag.per_week": "{count} týždenne", "boost_modal.combo": "Nabudúce môžeš kliknúť {combo} pre preskočenie", "bundle_column_error.body": "Pri načítaní tohto prvku nastala nejaká chyba.", "bundle_column_error.retry": "Skús to znova", @@ -46,7 +52,8 @@ "bundle_modal_error.retry": "Skúsiť znova", "column.blocks": "Blokovaní užívatelia", "column.community": "Miestna časová os", - "column.direct": "Súkromné správy", + "column.direct": "Priame správy", + "column.directory": "Prehľadávaj profily", "column.domain_blocks": "Skryté domény", "column.favourites": "Obľúbené", "column.follow_requests": "Žiadosti o sledovanie", @@ -62,11 +69,11 @@ "column_header.moveRight_settings": "Presuň stĺpec doprava", "column_header.pin": "Pripni", "column_header.show_settings": "Ukáž nastavenia", - "column_header.unpin": "Odopnúť", + "column_header.unpin": "Odopni", "column_subheading.settings": "Nastavenia", "community.column_settings.media_only": "Iba médiá", - "compose_form.direct_message_warning": "Tento príspevok bude videný výhradne iba spomenutými užívateľmi. Ber ale na vedomie že správci tvojej a všetkých iných zahrnutých instancií majú možnosť skontrolovať túto správu.", - "compose_form.direct_message_warning_learn_more": "Zistiť viac", + "compose_form.direct_message_warning": "Tento príspevok bude boslaný iba spomenutým užívateľom.", + "compose_form.direct_message_warning_learn_more": "Zisti viac", "compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.", "compose_form.lock_disclaimer": "Tvoj účet nie je {locked}. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.", "compose_form.lock_disclaimer.lock": "zamknutý", @@ -77,14 +84,14 @@ "compose_form.poll.remove_option": "Odstráň túto voľbu", "compose_form.publish": "Pošli", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Označ médiá ako chúlostivé", "compose_form.sensitive.marked": "Médiálny obsah je označený ako chúlostivý", "compose_form.sensitive.unmarked": "Médiálny obsah nieje označený ako chúlostivý", "compose_form.spoiler.marked": "Text je ukrytý za varovaním", "compose_form.spoiler.unmarked": "Text nieje ukrytý", "compose_form.spoiler_placeholder": "Sem napíš tvoje varovanie", "confirmation_modal.cancel": "Zruš", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Zablokuj a nahlás", "confirmations.block.confirm": "Blokuj", "confirmations.block.message": "Si si istý/á, že chceš blokovať {name}?", "confirmations.delete.confirm": "Vymaž", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Si si istý/á, že chceš natrvalo vymazať tento zoznam?", "confirmations.domain_block.confirm": "Skry celú doménu", "confirmations.domain_block.message": "Si si naozaj istý/á, že chceš blokovať celú doménu {domain}? Vo väčšine prípadov stačí blokovať alebo ignorovať pár konkrétnych užívateľov, čo sa doporučuje. Neuvidíš obsah z tejto domény v žiadnej verejnej časovej osi, ani v oznámeniach. Tvoji následovníci pochádzajúci z tejto domény budú odstránení.", + "confirmations.logout.confirm": "Odhlás sa", + "confirmations.logout.message": "Si si istý/á, že sa chceš odhlásiť?", "confirmations.mute.confirm": "Ignoruj", + "confirmations.mute.explanation": "Toto nastavenie pred tebou skryje ich príspevky, alebo príspevky od iných v ktorých sú spomenutí, ale umožní im vidieť tvoje príspevky, aj ťa následovať.", "confirmations.mute.message": "Naozaj chceš ignorovať {name}?", "confirmations.redraft.confirm": "Vyčisti a prepíš", "confirmations.redraft.message": "Si si istý/á, že chceš premazať a prepísať tento príspevok? Jeho nadobudnuté vyzdvihnutia a obľúbenia, ale i odpovede na pôvodný príspevok budú odlúčené.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Odpovedaním akurát teraz prepíšeš správu, ktorú máš práve rozpísanú. Si si istý/á, že chceš pokračovať?", "confirmations.unfollow.confirm": "Nesleduj", "confirmations.unfollow.message": "Naozaj chceš prestať sledovať {name}?", + "conversation.delete": "Vymaž konverzáciu", + "conversation.mark_as_read": "Označ za prečítané", + "conversation.open": "Ukáž konverzáciu", + "conversation.with": "S {names}", + "directory.federated": "Zo známého fedivesmíru", + "directory.local": "Iba z {domain}", + "directory.new_arrivals": "Nové príchody", + "directory.recently_active": "Nedávno aktívne", "embed.instructions": "Umiestni kód uvedený nižšie pre pridanie tohto statusu na tvoju web stránku.", "embed.preview": "Tu je ako to bude vyzerať:", "emoji_button.activity": "Aktivita", @@ -121,7 +139,7 @@ "empty_column.account_unavailable": "Profil nedostupný", "empty_column.blocks": "Ešte si nikoho nezablokoval/a.", "empty_column.community": "Lokálna časová os je prázdna. Napíšte niečo, aby sa to tu začalo hýbať!", - "empty_column.direct": "Ešte nemáš žiadne súkromné správy. Keď nejakú pošleš, alebo dostaneš, ukáže sa tu.", + "empty_column.direct": "Ešte nemáš žiadne priame správy. Keď nejakú pošleš, alebo dostaneš, ukáže sa tu.", "empty_column.domain_blocks": "Žiadne domény ešte niesú skryté.", "empty_column.favourited_statuses": "Nemáš obľúbené ešte žiadne príspevky. Keď si nejaký obľúbiš, bude zobrazený práve tu.", "empty_column.favourites": "Tento toot si ešte nikto neobľúbil. Ten kto si ho obľúbi, bude zobrazený tu.", @@ -134,13 +152,17 @@ "empty_column.mutes": "Ešte si nestĺmil žiadných užívateľov.", "empty_column.notifications": "Ešte nemáš žiadne oznámenia. Začni komunikovať s ostatnými, aby diskusia mohla začať.", "empty_column.public": "Ešte tu nič nie je. Napíš niečo verejne, alebo začni sledovať užívateľov z iných serverov, aby tu niečo pribudlo", + "error.unexpected_crash.explanation": "Kvôli chybe v našom kóde, alebo problému s kompatibilitou prehliadača, túto stránku nebolo možné zobraziť správne.", + "error.unexpected_crash.next_steps": "Skús obnoviť stránku. Ak to nepomôže, pravdepodobne budeš stále môcť používať Mastodon cez iný prehliadač, alebo natívnu aplikáciu.", + "errors.unexpected_crash.copy_stacktrace": "Skopíruj stacktrace do schránky", + "errors.unexpected_crash.report_issue": "Nahlás problém", "follow_request.authorize": "Povoľ prístup", "follow_request.reject": "Odmietni", "getting_started.developers": "Vývojári", - "getting_started.directory": "Databáza profilov", + "getting_started.directory": "Zoznam profilov", "getting_started.documentation": "Dokumentácia", "getting_started.heading": "Začni tu", - "getting_started.invite": "Pozvať ľudí", + "getting_started.invite": "Pozvi ľudí", "getting_started.open_source_notice": "Mastodon je softvér s otvoreným kódom. Nahlásiť chyby, alebo prispievať môžeš na GitHube v {github}.", "getting_started.security": "Zabezpečenie", "getting_started.terms": "Podmienky prevozu", @@ -156,9 +178,9 @@ "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Zobraziť povýšené", "home.column_settings.show_replies": "Ukázať odpovede", - "intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dni}}", - "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", - "intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", + "intervals.full.days": "{number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}", + "intervals.full.hours": "{number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodín}}", + "intervals.full.minutes": "{number, plural, one {# minúta} few {# minút} many {# minút} other {# minút}}", "introduction.federation.action": "Ďalej", "introduction.federation.federated.headline": "Federovaná", "introduction.federation.federated.text": "Verejné príspevky z ostatných serverov vo fediverse budú zobrazené vo federovanej časovej osi.", @@ -182,7 +204,7 @@ "keyboard_shortcuts.column": "zameraj sa na príspevok v jednom zo stĺpcov", "keyboard_shortcuts.compose": "zameraj sa na písaciu plochu", "keyboard_shortcuts.description": "Popis", - "keyboard_shortcuts.direct": "otvor panel súkromných správ", + "keyboard_shortcuts.direct": "pre otvorenie panelu priamých správ", "keyboard_shortcuts.down": "posunúť sa dole v zozname", "keyboard_shortcuts.enter": "otvoriť správu", "keyboard_shortcuts.favourite": "pridaj do obľúbených", @@ -204,14 +226,14 @@ "keyboard_shortcuts.search": "zameraj sa na vyhľadávanie", "keyboard_shortcuts.start": "otvor panel ''začíname''", "keyboard_shortcuts.toggle_hidden": "ukáž/skry text za CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "pre zobrazenie/skrytie médií", "keyboard_shortcuts.toot": "začni úplne nový príspevok", "keyboard_shortcuts.unfocus": "nesústreď sa na písaciu plochu, alebo hľadanie", "keyboard_shortcuts.up": "posuň sa vyššie v zozname", "lightbox.close": "Zatvor", "lightbox.next": "Ďalšie", "lightbox.previous": "Predchádzajúci", - "lightbox.view_context": "View context", + "lightbox.view_context": "Ukáž kontext", "lists.account.add": "Pridaj do zoznamu", "lists.account.remove": "Odober zo zoznamu", "lists.delete": "Vymaž list", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Názov nového zoznamu", "lists.search": "Vyhľadávaj medzi užívateľmi, ktorých sleduješ", "lists.subheading": "Tvoje zoznamy", + "load_pending": "{count, plural, one {# nová položka} other {# nových položiek}}", "loading_indicator.label": "Načítam...", "media_gallery.toggle_visible": "Zapni/Vypni viditeľnosť", "missing_indicator.label": "Nenájdené", @@ -230,14 +253,14 @@ "navigation_bar.blocks": "Blokovaní užívatelia", "navigation_bar.community_timeline": "Miestna časová os", "navigation_bar.compose": "Napíš nový príspevok", - "navigation_bar.direct": "Súkromné správy", + "navigation_bar.direct": "Priame správy", "navigation_bar.discover": "Objavuj", "navigation_bar.domain_blocks": "Skryté domény", "navigation_bar.edit_profile": "Uprav profil", "navigation_bar.favourites": "Obľúbené", "navigation_bar.filters": "Filtrované slová", "navigation_bar.follow_requests": "Žiadosti o sledovanie", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Sledovania a následovatelia", "navigation_bar.info": "O tomto serveri", "navigation_bar.keyboard_shortcuts": "Klávesové skratky", "navigation_bar.lists": "Zoznamy", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Osobné", "navigation_bar.pins": "Pripnuté príspevky", "navigation_bar.preferences": "Voľby", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federovaná časová os", "navigation_bar.security": "Zabezbečenie", "notification.favourite": "{name} si obľúbil/a tvoj príspevok", @@ -254,7 +276,7 @@ "notification.mention": "{name} ťa spomenul/a", "notification.poll": "Anketa v ktorej si hlasoval/a sa skončila", "notification.reblog": "{name} zdieľal/a tvoj príspevok", - "notifications.clear": "Vyčistiť zoznam oboznámení", + "notifications.clear": "Vyčisti oboznámenia", "notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?", "notifications.column_settings.alert": "Oboznámenia na ploche", "notifications.column_settings.favourite": "Obľúbené:", @@ -276,9 +298,11 @@ "notifications.filter.polls": "Výsledky ankiet", "notifications.group": "{count} oboznámení", "poll.closed": "Uzatvorená", - "poll.refresh": "Aktualizuj", - "poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasy}}", + "poll.refresh": "Občerstvi", + "poll.total_people": "{count, plural, one {# človek} few {# ľudia} other {# ľudí}}", + "poll.total_votes": "{count, plural, one {# hlas} few {# hlasov} many {# hlasov} other {# hlasov}}", "poll.vote": "Hlasuj", + "poll.voted": "Hlasoval/a si za túto voľbu", "poll_button.add_poll": "Pridaj anketu", "poll_button.remove_poll": "Odstráň anketu", "privacy.change": "Uprav súkromie príspevku", @@ -290,13 +314,14 @@ "privacy.public.short": "Verejné", "privacy.unlisted.long": "Neposielaj do verejných časových osí", "privacy.unlisted.short": "Verejne, ale nezobraziť v osi", + "refresh": "Občerstvi", "regeneration_indicator.label": "Načítava sa…", "regeneration_indicator.sublabel": "Vaša domovská nástenka sa pripravuje!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.days": "{number}dní", + "relative_time.hours": "{number}hod", "relative_time.just_now": "teraz", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "relative_time.minutes": "{number}min", + "relative_time.seconds": "{number}sek", "reply_indicator.cancel": "Zrušiť", "report.forward": "Posuň ku {target}", "report.forward_hint": "Tento účet je z iného serveru. Chceš poslať anonymnú kópiu hlásenia aj tam?", @@ -308,12 +333,13 @@ "search_popout.search_format": "Pokročilé vyhľadávanie", "search_popout.tips.full_text": "Vráti jednoduchý textový výpis príspevkov ktoré si napísal/a, ktoré si obľúbil/a, povýšil/a, alebo aj tých, v ktorých si bol/a spomenutý/á, a potom všetky zadaniu odpovedajúce prezívky, mená a haštagy.", "search_popout.tips.hashtag": "haštag", - "search_popout.tips.status": "status", + "search_popout.tips.status": "príspevok", "search_popout.tips.text": "Vráti jednoduchý textový výpis zhodujúcich sa mien, prezývok a haštagov", "search_popout.tips.user": "užívateľ", "search_results.accounts": "Ľudia", "search_results.hashtags": "Haštagy", "search_results.statuses": "Príspevky", + "search_results.statuses_fts_disabled": "Vyhľadávanie v obsahu príspevkov nieje na tomto Mastodon serveri povolené.", "search_results.total": "{count, number} {count, plural, one {výsledok} many {výsledkov} other {výsledky}}", "status.admin_account": "Otvor moderovacie rozhranie užívateľa @{name}", "status.admin_status": "Otvor tento príspevok v moderovacom rozhraní", @@ -323,7 +349,7 @@ "status.copy": "Skopíruj odkaz na príspevok", "status.delete": "Zmazať", "status.detailed_status": "Podrobný náhľad celej konverzácie", - "status.direct": "Súkromná správa @{name}", + "status.direct": "Priama správa pre @{name}", "status.embed": "Vložiť", "status.favourite": "Páči sa mi", "status.filtered": "Filtrované", @@ -352,6 +378,7 @@ "status.show_more": "Ukáž viac", "status.show_more_all": "Všetkým ukáž viac", "status.show_thread": "Ukáž diskusné vlákno", + "status.uncached_media_warning": "Nedostupný/é", "status.unmute_conversation": "Prestaň ignorovať konverzáciu", "status.unpin": "Odopni z profilu", "suggestions.dismiss": "Zavrhni návrh", @@ -361,20 +388,28 @@ "tabs_bar.local_timeline": "Miestna", "tabs_bar.notifications": "Oboznámenia", "tabs_bar.search": "Hľadaj", - "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dni} other {# dni}}", + "time_remaining.days": "Ostáva {number, plural, one {# deň} few {# dní} many {# dní} other {# dní}}", "time_remaining.hours": "Ostáva {number, plural, one {# hodina} few {# hodín} many {# hodín} other {# hodiny}}", "time_remaining.minutes": "Ostáva {number, plural, one {# minúta} few {# minút} many {# minút} other {# minúty}}", "time_remaining.moments": "Ostáva už iba chviľka", - "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekundy}}", + "time_remaining.seconds": "Ostáva {number, plural, one {# sekunda} few {# sekúnd} many {# sekúnd} other {# sekúnd}}", "trends.count_by_accounts": "{count} {rawCount, plural, one {človek vraví} other {ľudia vravia}}", + "trends.trending_now": "Teraz populárne", "ui.beforeunload": "Čo máš rozpísané sa stratí, ak opustíš Mastodon.", "upload_area.title": "Pretiahni a pusť pre nahratie", "upload_button.label": "Pridaj médiálny súbor (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Limit pre nahrávanie súborov bol prekročený.", "upload_error.poll": "Nahrávanie súborov pri anketách nieje možné.", "upload_form.description": "Opis pre slabo vidiacich", - "upload_form.focus": "Pozmeň náhľad", + "upload_form.edit": "Uprav", "upload_form.undo": "Vymaž", + "upload_modal.analyzing_picture": "Analyzujem obrázok…", + "upload_modal.apply": "Použi", + "upload_modal.description_placeholder": "Rýchla hnedá líška skáče ponad lenivého psa", + "upload_modal.detect_text": "Rozpoznaj text z obrázka", + "upload_modal.edit_media": "Uprav médiá", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Náhľad ({ratio})", "upload_progress.label": "Nahráva sa...", "video.close": "Zavri video", "video.exit_fullscreen": "Vypni zobrazenie na celú obrazovku", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 736d7da36..ecac0d9c7 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -4,6 +4,7 @@ "account.block": "Blokiraj @{name}", "account.block_domain": "Skrij vse iz {domain}", "account.blocked": "Blokirano", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Neposredno sporočilo @{name}", "account.domain_blocked": "Skrita domena", "account.edit_profile": "Uredi profil", @@ -13,31 +14,36 @@ "account.followers.empty": "Nihče ne sledi temu uporabniku.", "account.follows": "Sledi", "account.follows.empty": "Ta uporabnik še ne sledi nikomur.", - "account.follows_you": "Ti sledi", - "account.hide_reblogs": "Skrij sunke od @{name}", + "account.follows_you": "Sledi tebi", + "account.hide_reblogs": "Skrij spodbude od @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Lastništvo te povezave je bilo preverjeno {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.locked_info": "Stanje zasebnosti računa je nastavljeno na zaklenjeno. Lastnik ročno pregleda, kdo ga lahko spremlja.", "account.media": "Mediji", "account.mention": "Omeni @{name}", "account.moved_to": "{name} se je premaknil na:", "account.mute": "Utišaj @{name}", "account.mute_notifications": "Utišaj obvestila od @{name}", "account.muted": "Utišan", + "account.never_active": "Never", "account.posts": "Tuti", "account.posts_with_replies": "Tuti in odgovori", "account.report": "Prijavi @{name}", "account.requested": "Čakanje na odobritev. Kliknite, da prekličete prošnjo za sledenje", "account.share": "Delite profil osebe @{name}", - "account.show_reblogs": "Pokaži delitve osebe @{name}", + "account.show_reblogs": "Pokaži spodbude osebe @{name}", "account.unblock": "Odblokiraj @{name}", "account.unblock_domain": "Razkrij {domain}", - "account.unendorse": "Don't feature on profile", + "account.unendorse": "Ne vključi v profil", "account.unfollow": "Prenehaj slediti", "account.unmute": "Odtišaj @{name}", "account.unmute_notifications": "Vklopi obvestila od @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Zgodila se je nepričakovana napaka.", "alert.unexpected.title": "Uups!", - "boost_modal.combo": "Če želite naslednjič preskočiti to, lahko pritisnete {combo}", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "Če želite preskočiti to, lahko pritisnete {combo}", "bundle_column_error.body": "Med nalaganjem te komponente je prišlo do napake.", "bundle_column_error.retry": "Poskusi ponovno", "bundle_column_error.title": "Napaka omrežja", @@ -47,6 +53,7 @@ "column.blocks": "Blokirani uporabniki", "column.community": "Lokalna časovnica", "column.direct": "Neposredna sporočila", + "column.directory": "Browse profiles", "column.domain_blocks": "Skrite domene", "column.favourites": "Priljubljene", "column.follow_requests": "Sledi prošnjam", @@ -67,49 +74,60 @@ "community.column_settings.media_only": "Samo mediji", "compose_form.direct_message_warning": "Ta tut bo viden le vsem omenjenim uporabnikom.", "compose_form.direct_message_warning_learn_more": "Nauči se več", - "compose_form.hashtag_warning": "Ta tut ne bo naveden pod nobenim hashtagom, ker ni dodan hashtag. Samo javne tute lahko iščete pod hashtagom.", + "compose_form.hashtag_warning": "Ta tut ne bo naveden pod nobenim ključnikom, ker ni javen. Samo javne tute lahko iščete s ključniki.", "compose_form.lock_disclaimer": "Vaš račun ni {locked}. Vsakdo vam lahko sledi in si ogleda objave, ki so namenjene samo sledilcem.", "compose_form.lock_disclaimer.lock": "zaklenjen", "compose_form.placeholder": "O čem razmišljaš?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Dodaj izbiro", + "compose_form.poll.duration": "Trajanje ankete", + "compose_form.poll.option_placeholder": "Izbira {number}", + "compose_form.poll.remove_option": "Odstrani to izbiro", "compose_form.publish": "Tutni", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Označi medij kot občutljiv", "compose_form.sensitive.marked": "Medij je označen kot občutljiv", "compose_form.sensitive.unmarked": "Medij ni označen kot občutljiv", "compose_form.spoiler.marked": "Besedilo je skrito za opozorilom", "compose_form.spoiler.unmarked": "Besedilo ni skrito", - "compose_form.spoiler_placeholder": "Napišite opozorilo tukaj", + "compose_form.spoiler_placeholder": "Tukaj napišite opozorilo", "confirmation_modal.cancel": "Prekliči", - "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", + "confirmations.block.block_and_report": "Blokiraj in Prijavi", + "confirmations.block.confirm": "Blokiraj", "confirmations.block.message": "Ali ste prepričani, da želite blokirati {name}?", - "confirmations.delete.confirm": "Delete", + "confirmations.delete.confirm": "Izbriši", "confirmations.delete.message": "Ali ste prepričani, da želite izbrisati to stanje?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "Izbriši", "confirmations.delete_list.message": "Ali ste prepričani, da želite trajno izbrisati ta seznam?", "confirmations.domain_block.confirm": "Skrij celotno domeno", - "confirmations.domain_block.message": "Ali ste res, res prepričani, da želite blokirati celotno {domain}? V večini primerov je nekaj ciljnih blokiranj ali utišanj dovolj in boljše.", + "confirmations.domain_block.message": "Ali ste res, res prepričani, da želite blokirati celotno {domain}? V večini primerov je nekaj ciljnih blokiranj ali utišanj dovolj in boljše. Vsebino iz te domene ne boste videli v javnih časovnicah ali obvestilih. Vaši sledilci iz te domene bodo odstranjeni.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Utišanje", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Ali ste prepričani, da želite utišati {name}?", "confirmations.redraft.confirm": "Izbriši in preoblikuj", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", - "confirmations.reply.confirm": "Reply", + "confirmations.redraft.message": "Ali ste prepričani, da želite izbrisati ta status in ga preoblikovati? Vzljubi in spodbude bodo izgubljeni, odgovori na izvirno objavo pa bodo osiroteli.", + "confirmations.reply.confirm": "Odgovori", "confirmations.reply.message": "Odgovarjanje bo prepisalo sporočilo, ki ga trenutno sestavljate. Ali ste prepričani, da želite nadaljevati?", "confirmations.unfollow.confirm": "Prenehaj slediti", "confirmations.unfollow.message": "Ali ste prepričani, da ne želite več slediti {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Vstavi ta status na svojo spletno stran tako, da kopirate spodnjo kodo.", - "embed.preview": "Tukaj je, kako bo izgledalo:", + "embed.preview": "Tako bo izgledalo:", "emoji_button.activity": "Dejavnost", "emoji_button.custom": "Po meri", "emoji_button.flags": "Zastave", "emoji_button.food": "Hrana in Pijača", - "emoji_button.label": "Vstavi emojija", + "emoji_button.label": "Vstavi emotikon", "emoji_button.nature": "Narava", - "emoji_button.not_found": "Ni emojijev!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Ni emotikonov!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Predmeti", "emoji_button.people": "Ljudje", "emoji_button.recent": "Pogosto uporabljeni", @@ -117,231 +135,239 @@ "emoji_button.search_results": "Rezultati iskanja", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Potovanja in Kraji", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_timeline": "Tukaj ni tutov!", + "empty_column.account_unavailable": "Profil ni na voljo", "empty_column.blocks": "Niste še blokirali nobenega uporabnika.", "empty_column.community": "Lokalna časovnica je prazna. Napišite nekaj javnega, da se bo žoga zakotalila!", - "empty_column.direct": "Nimate še nobenih neposrednih sporočil. Ko ga pošljete ali prejmete, se prikaže tukaj.", + "empty_column.direct": "Nimate še nobenih neposrednih sporočil. Ko ga boste poslali ali prejeli, se bo prikazal tukaj.", "empty_column.domain_blocks": "Še vedno ni skritih domen.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "V tem hashtagu še ni nič.", + "empty_column.favourited_statuses": "Nimate priljubljenih tutov. Ko boste vzljubili kakšnega, se bo prikazal tukaj.", + "empty_column.favourites": "Nihče še ni vzljubil tega tuta. Ko ga bo nekdo, se bo pojavil tukaj.", + "empty_column.follow_requests": "Nimate prošenj za sledenje. Ko boste prejeli kakšno, se bo prikazala tukaj.", + "empty_column.hashtag": "V tem ključniku še ni nič.", "empty_column.home": "Vaša domača časovnica je prazna! Obiščite {public} ali uporabite iskanje, da se boste srečali druge uporabnike.", "empty_column.home.public_timeline": "javna časovnica", "empty_column.list": "Na tem seznamu ni ničesar. Ko bodo člani tega seznama objavili nove statuse, se bodo pojavili tukaj.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "Nimate še nobenih obvestil. Poveži se z drugimi, da začnete pogovor.", - "empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih vozlišč", - "follow_request.authorize": "Odobri", + "empty_column.lists": "Nimate seznamov. Ko ga boste ustvarili, se bo prikazal tukaj.", + "empty_column.mutes": "Niste utišali še nobenega uporabnika.", + "empty_column.notifications": "Nimate še nobenih obvestil. Povežite se z drugimi, da začnete pogovor.", + "empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih strežnikov", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Overi", "follow_request.reject": "Zavrni", - "getting_started.developers": "Developers", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", - "getting_started.heading": "Prvi koraki", - "getting_started.invite": "Invite people", - "getting_started.open_source_notice": "Mastodon je odprtokodna programska oprema. V GitHubu na {github} lahko prispevate ali poročate o napakah.", - "getting_started.security": "Security", - "getting_started.terms": "Terms of service", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "getting_started.developers": "Razvijalci", + "getting_started.directory": "Imenik profilov", + "getting_started.documentation": "Dokumentacija", + "getting_started.heading": "Kako začeti", + "getting_started.invite": "Povabite osebe", + "getting_started.open_source_notice": "Mastodon je odprtokodna programska oprema. Na GitHubu na {github} lahko prispevate ali poročate o napakah.", + "getting_started.security": "Varnost", + "getting_started.terms": "Pogoji uporabe", + "hashtag.column_header.tag_mode.all": "in {additional}", + "hashtag.column_header.tag_mode.any": "ali {additional}", + "hashtag.column_header.tag_mode.none": "brez {additional}", + "hashtag.column_settings.select.no_options_message": "Ni najdenih predlogov", + "hashtag.column_settings.select.placeholder": "Vpiši ključnik…", + "hashtag.column_settings.tag_mode.all": "Vse od naštetega", + "hashtag.column_settings.tag_mode.any": "Karkoli od naštetega", + "hashtag.column_settings.tag_mode.none": "Nič od naštetega", + "hashtag.column_settings.tag_toggle": "Za ta stolpec vključi dodatne oznake", "home.column_settings.basic": "Osnovno", - "home.column_settings.show_reblogs": "Pokaži sunke", + "home.column_settings.show_reblogs": "Pokaži spodbude", "home.column_settings.show_replies": "Pokaži odgovore", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "za krmarjenje nazaj", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "suniti", - "keyboard_shortcuts.column": "osredotočiti status v enega od stolpcev", - "keyboard_shortcuts.compose": "osredotočiti na sestavljanje besedila", + "intervals.full.days": "{number, plural, one {# dan} two {# dni} few {# dni} other {# dni}}", + "intervals.full.hours": "{number, plural, one {# ura} two {# uri} few {# ure} other {# ur}}", + "intervals.full.minutes": "{number, plural, one {# minuta} two {# minuti} few {# minute} other {# minut}}", + "introduction.federation.action": "Naprej", + "introduction.federation.federated.headline": "Združeno", + "introduction.federation.federated.text": "Javne objave iz drugih strežnikov fediverse-a bodo prikazane v združeni časovnici.", + "introduction.federation.home.headline": "Domov", + "introduction.federation.home.text": "Objave oseb, ki jim sledite, bodo prikazane v vaši domači časovnici. Lahko sledite vsakomur na katerem koli strežniku!", + "introduction.federation.local.headline": "Lokalno", + "introduction.federation.local.text": "Javne objave ljudi na istem strežniku, se bodo prikazale na lokalni časovnici.", + "introduction.interactions.action": "Zaključi vadnico!", + "introduction.interactions.favourite.headline": "Vzljubi", + "introduction.interactions.favourite.text": "Tut lahko shranite za pozneje in ga vzljubite ter s tem pokažete avtorju, da vam je ta tut priljubljen.", + "introduction.interactions.reblog.headline": "Spodbudi", + "introduction.interactions.reblog.text": "Tute drugih ljudi lahko delite z vašimi sledilci, tako da spodbudite tute.", + "introduction.interactions.reply.headline": "Odgovori", + "introduction.interactions.reply.text": "Lahko odgovarjate na tuje in vaše tute, kar bo odgovore povezalo v pogovor.", + "introduction.welcome.action": "Gremo!", + "introduction.welcome.headline": "Prvi koraki", + "introduction.welcome.text": "Dobrodošli v fediverse-u! Čez nekaj trenutkov boste lahko oddajali sporočila in se pogovarjali s prijatelji prek različnih strežnikov. Vendar je ta strežnik {domain} poseben - gosti vaš profil, zato si zapomnite njegovo ime.", + "keyboard_shortcuts.back": "pojdi nazaj", + "keyboard_shortcuts.blocked": "odpri seznam blokiranih uporabnikov", + "keyboard_shortcuts.boost": "spodbudi", + "keyboard_shortcuts.column": "fokusiraj na status v enemu od stolpcev", + "keyboard_shortcuts.compose": "fokusiraj na območje za sestavljanje besedila", "keyboard_shortcuts.description": "Opis", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "premakniti navzdol po seznamu", - "keyboard_shortcuts.enter": "odpreti status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.direct": "odpri stolpec za neposredna sporočila", + "keyboard_shortcuts.down": "premakni se navzdol po seznamu", + "keyboard_shortcuts.enter": "odpri status", + "keyboard_shortcuts.favourite": "vzljubi", + "keyboard_shortcuts.favourites": "odpri seznam priljubljenih", + "keyboard_shortcuts.federated": "odpri združeno časovnico", "keyboard_shortcuts.heading": "Tipkovne bližnjice", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.home": "odpri domačo časovnico", "keyboard_shortcuts.hotkey": "Hitra tipka", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "da začnete povsem nov tut", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", - "lightbox.close": "Close", - "lightbox.next": "Next", - "lightbox.previous": "Previous", - "lightbox.view_context": "View context", - "lists.account.add": "Add to list", - "lists.account.remove": "Remove from list", - "lists.delete": "Delete list", - "lists.edit": "Edit list", - "lists.edit.submit": "Change title", - "lists.new.create": "Add list", - "lists.new.title_placeholder": "New list title", - "lists.search": "Search among people you follow", - "lists.subheading": "Your lists", - "loading_indicator.label": "Loading...", - "media_gallery.toggle_visible": "Toggle visibility", - "missing_indicator.label": "Not found", - "missing_indicator.sublabel": "This resource could not be found", - "mute_modal.hide_notifications": "Hide notifications from this user?", - "navigation_bar.apps": "Mobile apps", - "navigation_bar.blocks": "Blocked users", - "navigation_bar.community_timeline": "Local timeline", - "navigation_bar.compose": "Compose new toot", - "navigation_bar.direct": "Direct messages", - "navigation_bar.discover": "Discover", - "navigation_bar.domain_blocks": "Hidden domains", - "navigation_bar.edit_profile": "Edit profile", - "navigation_bar.favourites": "Favourites", - "navigation_bar.filters": "Muted words", - "navigation_bar.follow_requests": "Follow requests", - "navigation_bar.follows_and_followers": "Follows and followers", - "navigation_bar.info": "O tem vozlišču", - "navigation_bar.keyboard_shortcuts": "Keyboard shortcuts", - "navigation_bar.lists": "Lists", - "navigation_bar.logout": "Logout", - "navigation_bar.mutes": "Muted users", - "navigation_bar.personal": "Personal", + "keyboard_shortcuts.legend": "pokaži to legendo", + "keyboard_shortcuts.local": "odpri lokalno časovnico", + "keyboard_shortcuts.mention": "omeni avtorja", + "keyboard_shortcuts.muted": "odpri seznam utišanih uporabnikov", + "keyboard_shortcuts.my_profile": "odpri svoj profil", + "keyboard_shortcuts.notifications": "odpri stolpec z obvestili", + "keyboard_shortcuts.pinned": "odpri seznam pripetih tutov", + "keyboard_shortcuts.profile": "odpri avtorjev profil", + "keyboard_shortcuts.reply": "odgovori", + "keyboard_shortcuts.requests": "odpri seznam s prošnjami za sledenje", + "keyboard_shortcuts.search": "fokusiraj na iskanje", + "keyboard_shortcuts.start": "odpri stolpec \"začni\"", + "keyboard_shortcuts.toggle_hidden": "prikaži/skrij besedilo za CW", + "keyboard_shortcuts.toggle_sensitivity": "prikaži/skrij medije", + "keyboard_shortcuts.toot": "začni povsem nov tut", + "keyboard_shortcuts.unfocus": "odfokusiraj območje za sestavljanje besedila/iskanje", + "keyboard_shortcuts.up": "premakni se navzgor po seznamu", + "lightbox.close": "Zapri", + "lightbox.next": "Naslednji", + "lightbox.previous": "Prejšnji", + "lightbox.view_context": "Poglej kontekst", + "lists.account.add": "Dodaj na seznam", + "lists.account.remove": "Odstrani s seznama", + "lists.delete": "Izbriši seznam", + "lists.edit": "Uredi seznam", + "lists.edit.submit": "Spremeni naslov", + "lists.new.create": "Dodaj seznam", + "lists.new.title_placeholder": "Nov naslov seznama", + "lists.search": "Išči med ljudmi, katerim sledite", + "lists.subheading": "Vaši seznami", + "load_pending": "{count, plural, one {# nov element} other {# novih elementov}}", + "loading_indicator.label": "Nalaganje...", + "media_gallery.toggle_visible": "Preklopi vidljivost", + "missing_indicator.label": "Ni najdeno", + "missing_indicator.sublabel": "Tega vira ni bilo mogoče najti", + "mute_modal.hide_notifications": "Skrij obvestila tega uporabnika?", + "navigation_bar.apps": "Mobilne aplikacije", + "navigation_bar.blocks": "Blokirani uporabniki", + "navigation_bar.community_timeline": "Lokalna časovnica", + "navigation_bar.compose": "Sestavi nov tut", + "navigation_bar.direct": "Neposredna sporočila", + "navigation_bar.discover": "Odkrijte", + "navigation_bar.domain_blocks": "Skrite domene", + "navigation_bar.edit_profile": "Uredi profil", + "navigation_bar.favourites": "Priljubljeni", + "navigation_bar.filters": "Utišane besede", + "navigation_bar.follow_requests": "Prošnje za sledenje", + "navigation_bar.follows_and_followers": "Sledenja in sledilci", + "navigation_bar.info": "O tem strežniku", + "navigation_bar.keyboard_shortcuts": "Hitre tipke", + "navigation_bar.lists": "Seznami", + "navigation_bar.logout": "Odjava", + "navigation_bar.mutes": "Utišani uporabniki", + "navigation_bar.personal": "Osebno", "navigation_bar.pins": "Pripeti tuti", - "navigation_bar.preferences": "Preferences", - "navigation_bar.profile_directory": "Profile directory", - "navigation_bar.public_timeline": "Federated timeline", - "navigation_bar.security": "Security", - "notification.favourite": "{name} favourited your status", - "notification.follow": "{name} followed you", - "notification.mention": "{name} mentioned you", - "notification.poll": "A poll you have voted in has ended", - "notification.reblog": "{name} boosted your status", - "notifications.clear": "Clear notifications", - "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", - "notifications.column_settings.alert": "Desktop notifications", - "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", - "notifications.column_settings.follow": "New followers:", - "notifications.column_settings.mention": "Mentions:", - "notifications.column_settings.poll": "Poll results:", - "notifications.column_settings.push": "Push notifications", - "notifications.column_settings.reblog": "Boosts:", - "notifications.column_settings.show": "Show in column", - "notifications.column_settings.sound": "Play sound", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", - "notifications.group": "{count} notifications", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Adjust status privacy", - "privacy.direct.long": "Post to mentioned users only", - "privacy.direct.short": "Direct", - "privacy.private.long": "Post to followers only", - "privacy.private.short": "Followers-only", - "privacy.public.long": "Post to public timelines", - "privacy.public.short": "Public", - "privacy.unlisted.long": "Do not show in public timelines", - "privacy.unlisted.short": "Unlisted", - "regeneration_indicator.label": "Loading…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "navigation_bar.preferences": "Nastavitve", + "navigation_bar.public_timeline": "Združena časovnica", + "navigation_bar.security": "Varnost", + "notification.favourite": "{name} je vzljubil/a vaš status", + "notification.follow": "{name} vam sledi", + "notification.mention": "{name} vas je omenil/a", + "notification.poll": "Glasovanje, v katerem ste sodelovali, se je končalo", + "notification.reblog": "{name} je spodbudil/a vaš status", + "notifications.clear": "Počisti obvestila", + "notifications.clear_confirmation": "Ali ste prepričani, da želite trajno izbrisati vsa vaša obvestila?", + "notifications.column_settings.alert": "Namizna obvestila", + "notifications.column_settings.favourite": "Priljubljeni:", + "notifications.column_settings.filter_bar.advanced": "Prikaži vse kategorije", + "notifications.column_settings.filter_bar.category": "Vrstica za hitro filtriranje", + "notifications.column_settings.filter_bar.show": "Pokaži", + "notifications.column_settings.follow": "Novi sledilci:", + "notifications.column_settings.mention": "Omembe:", + "notifications.column_settings.poll": "Rezultati glasovanja:", + "notifications.column_settings.push": "Potisna obvestila", + "notifications.column_settings.reblog": "Spodbude:", + "notifications.column_settings.show": "Prikaži v stolpcu", + "notifications.column_settings.sound": "Predvajaj zvok", + "notifications.filter.all": "Vse", + "notifications.filter.boosts": "Spodbude", + "notifications.filter.favourites": "Priljubljeni", + "notifications.filter.follows": "Sledi", + "notifications.filter.mentions": "Omembe", + "notifications.filter.polls": "Rezultati glasovanj", + "notifications.group": "{count} obvestil", + "poll.closed": "Zaprto", + "poll.refresh": "Osveži", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural,one {# glas} other {# glasov}}", + "poll.vote": "Glasuj", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Dodaj anketo", + "poll_button.remove_poll": "Odstrani anketo", + "privacy.change": "Prilagodi zasebnost statusa", + "privacy.direct.long": "Objavi samo omenjenim uporabnikom", + "privacy.direct.short": "Neposredno", + "privacy.private.long": "Objavi samo sledilcem", + "privacy.private.short": "Samo sledilci", + "privacy.public.long": "Objavi na javne časovnice", + "privacy.public.short": "Javno", + "privacy.unlisted.long": "Ne objavi na javne časovnice", + "privacy.unlisted.short": "Ni prikazano", + "refresh": "Refresh", + "regeneration_indicator.label": "Nalaganje…", + "regeneration_indicator.sublabel": "Vaš domači vir se pripravlja!", "relative_time.days": "{number}d", "relative_time.hours": "{number}h", - "relative_time.just_now": "now", + "relative_time.just_now": "zdaj", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", - "reply_indicator.cancel": "Cancel", - "report.forward": "Forward to {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", - "report.placeholder": "Additional comments", - "report.submit": "Submit", - "report.target": "Report {target}", - "search.placeholder": "Search", - "search_popout.search_format": "Advanced search format", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", + "reply_indicator.cancel": "Prekliči", + "report.forward": "Posreduj do {target}", + "report.forward_hint": "Račun je iz drugega strežnika. Pošljem anonimno kopijo poročila tudi na drugi strežnik?", + "report.hint": "Poročilo bo poslano moderatorjem vašega vozlišča. Spodaj lahko navedete, zakaj prijavljate ta račun:", + "report.placeholder": "Dodatni komentarji", + "report.submit": "Pošlji", + "report.target": "Prijavi {target}", + "search.placeholder": "Iskanje", + "search_popout.search_format": "Napredna oblika iskanja", + "search_popout.tips.full_text": "Enostavno besedilo vrne statuse, ki ste jih napisali, vzljubili, spodbudili ali ste bili v njih omenjeni, kot tudi ujemajoča se uporabniška imena, prikazna imena in ključnike.", + "search_popout.tips.hashtag": "ključnik", + "search_popout.tips.status": "stanje", + "search_popout.tips.text": "Enostavno besedilo vrne ujemajoča se prikazna imena, uporabniška imena in ključnike", + "search_popout.tips.user": "uporabnik", + "search_results.accounts": "Ljudje", + "search_results.hashtags": "Ključniki", "search_results.statuses": "Tuti", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.cancel_reblog_private": "Unboost", - "status.cannot_reblog": "This post cannot be boosted", - "status.copy": "Copy link to status", - "status.delete": "Delete", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", - "status.favourite": "Favourite", - "status.filtered": "Filtered", - "status.load_more": "Load more", - "status.media_hidden": "Media hidden", - "status.mention": "Mention @{name}", - "status.more": "More", - "status.mute": "Mute @{name}", - "status.mute_conversation": "Mute conversation", - "status.open": "Expand this status", - "status.pin": "Pin on profile", + "search_results.statuses_fts_disabled": "Iskanje tutov po njihovi vsebini ni omogočeno na tem strežniku Mastodon.", + "search_results.total": "{count, number} {count, plural, one {rezultat} other {rezultatov}}", + "status.admin_account": "Odpri vmesnik za moderiranje za @{name}", + "status.admin_status": "Odpri status v vmesniku za moderiranje", + "status.block": "Blokiraj @{name}", + "status.cancel_reblog_private": "Prekini spodbudo", + "status.cannot_reblog": "Te objave ni mogoče spodbuditi", + "status.copy": "Kopiraj povezavo do statusa", + "status.delete": "Izbriši", + "status.detailed_status": "Podroben pogled pogovora", + "status.direct": "Neposredno sporočilo @{name}", + "status.embed": "Vgradi", + "status.favourite": "Priljubljen", + "status.filtered": "Filtrirano", + "status.load_more": "Naloži več", + "status.media_hidden": "Mediji so skriti", + "status.mention": "Omeni @{name}", + "status.more": "Več", + "status.mute": "Utišaj @{name}", + "status.mute_conversation": "Utišaj pogovor", + "status.open": "Razširi ta status", + "status.pin": "Pripni na profil", "status.pinned": "Pripeti tut", - "status.read_more": "Read more", - "status.reblog": "Suni", - "status.reblog_private": "Suni v prvotno občinstvo", - "status.reblogged_by": "{name} sunjen", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", + "status.read_more": "Preberi več", + "status.reblog": "Spodbudi", + "status.reblog_private": "Spodbudi izvirnemu občinstvu", + "status.reblogged_by": "{name} spodbuja", + "status.reblogs.empty": "Nihče še ni spodbudil tega tuta. Ko se bo to zgodilo, se bodo pojavili tukaj.", + "status.redraft": "Izbriši in preoblikuj", "status.reply": "Odgovori", "status.replyAll": "Odgovori na objavo", "status.report": "Prijavi @{name}", @@ -351,30 +377,39 @@ "status.show_less_all": "Prikaži manj za vse", "status.show_more": "Prikaži več", "status.show_more_all": "Prikaži več za vse", - "status.show_thread": "Show thread", + "status.show_thread": "Prikaži objavo", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Odtišaj pogovor", "status.unpin": "Odpni iz profila", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Zavrni predlog", + "suggestions.header": "Morda bi vas zanimalo…", "tabs_bar.federated_timeline": "Združeno", "tabs_bar.home": "Domov", "tabs_bar.local_timeline": "Lokalno", "tabs_bar.notifications": "Obvestila", - "tabs_bar.search": "Poišči", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "tabs_bar.search": "Iskanje", + "time_remaining.days": "{number, plural, one {# dan} other {# dni}} je ostalo", + "time_remaining.hours": "{number, plural, one {# ura} other {# ur}} je ostalo", + "time_remaining.minutes": "{number, plural, one {# minuta} other {# minut}} je ostalo", + "time_remaining.moments": "Preostali trenutki", + "time_remaining.seconds": "{number, plural, one {# sekunda} other {# sekund}} je ostalo", + "trends.count_by_accounts": "{count} {rawCount, plural, one {oseba} other {ljudi}} govori", + "trends.trending_now": "Trending now", "ui.beforeunload": "Vaš osnutek bo izgubljen, če zapustite Mastodona.", - "upload_area.title": "Povlecite in spustite za pošiljanje", - "upload_button.label": "Dodaj medij", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_area.title": "Za pošiljanje povlecite in spustite", + "upload_button.label": "Dodaj medije ({formats})", + "upload_error.limit": "Omejitev prenosa datoteke je presežena.", + "upload_error.poll": "Prenos datoteke z anketami ni dovoljen.", "upload_form.description": "Opišite za slabovidne", - "upload_form.focus": "Obreži", + "upload_form.edit": "Edit", "upload_form.undo": "Izbriši", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Pošiljanje...", "video.close": "Zapri video", "video.exit_fullscreen": "Izhod iz celozaslonskega načina", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 13ce4e978..f58466d87 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -4,6 +4,7 @@ "account.block": "Blloko @{name}", "account.block_domain": "Fshih gjithçka prej {domain}", "account.blocked": "E bllokuar", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Mesazh i drejtpërdrejt për @{name}", "account.domain_blocked": "Përkatësi e fshehur", "account.edit_profile": "Përpunoni profilin", @@ -15,6 +16,7 @@ "account.follows.empty": "Ky përdorues ende s’ndjek njeri.", "account.follows_you": "Ju ndjek", "account.hide_reblogs": "Fshih përforcime nga @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Pronësia e kësaj lidhjeje qe kontrolluar më {date}", "account.locked_info": "Gjendja e privatësisë së kësaj llogarie është caktuar si e kyçur. I zoti merr dorazi në shqyrtim cilët mund ta ndjekin.", "account.media": "Media", @@ -23,6 +25,7 @@ "account.mute": "Heshtoni @{name}", "account.mute_notifications": "Heshtoji njoftimet prej @{name}", "account.muted": "Heshtuar", + "account.never_active": "Never", "account.posts": "Mesazhe", "account.posts_with_replies": "Mesazhe dhe përgjigje", "account.report": "Raportojeni @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Resht së ndjekuri", "account.unmute": "Ktheji zërin @{name}", "account.unmute_notifications": "Hiqua ndalimin e shfaqjes njoftimeve nga @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Ndodhi një gabim të papritur.", "alert.unexpected.title": "Hëm!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Mund të shtypni {combo}, që të anashkalohet kjo herës tjetër", "bundle_column_error.body": "Diç shkoi ters teksa ngarkohej ky përbërës.", "bundle_column_error.retry": "Riprovoni", @@ -47,6 +53,7 @@ "column.blocks": "Përdorues të bllokuar", "column.community": "Rrjedhë kohore vendore", "column.direct": "Mesazhe të drejtpërdrejta", + "column.directory": "Browse profiles", "column.domain_blocks": "Përkatësi të fshehura", "column.favourites": "Të parapëlqyer", "column.follow_requests": "Kërkesa për ndjekje", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Jeni i sigurt që doni të fshihet përgjithmonë kjo listë?", "confirmations.domain_block.confirm": "Fshih krejt përkatësinë", "confirmations.domain_block.message": "Jeni i sigurt, shumë i sigurt se doni të bllokohet krejt {domain}? Në shumicën e rasteve, ndoca bllokime ose heshtime me synim të caktuar janë të mjaftueshme dhe të parapëlqyera. S’keni për të parë lëndë nga kjo përkatësi në ndonjë rrjedhë kohore publike, apo te njoftimet tuaja. Ndjekësit tuaj prej asaj përkatësie do të hiqen.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Heshtoje", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Jeni i sigurt se doni të heshtohet {name}?", "confirmations.redraft.confirm": "Fshijeni & rihartojeni", "confirmations.redraft.message": "Jeni i sigurt se doni të fshihet kjo gjendje dhe të rihartohet? Parapëlqimet dhe boosts do të humbin, ndërsa përgjigjet te postimi origjinal do të bëhen jetime.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Përgjigja tani do të shkaktojë mbishkrimin e mesazhit që po hartoni. Jeni i sigurt se doni të vazhdohet më tej?", "confirmations.unfollow.confirm": "Resht së ndjekuri", "confirmations.unfollow.message": "Jeni i sigurt se doni të mos ndiqet më {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Trupëzojeni këtë gjendje në sajtin tuaj duke kopjuar kodin më poshtë.", "embed.preview": "Ja si do të duket:", "emoji_button.activity": "Veprimtari", @@ -134,6 +152,10 @@ "empty_column.mutes": "S’keni heshtuar ende ndonjë përdorues.", "empty_column.notifications": "Ende s’keni ndonjë njoftim. Ndërveproni me të tjerët që të nisë biseda.", "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që ta mbushni këtë zonë", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Autorizoje", "follow_request.reject": "Hidhe tej", "getting_started.developers": "Zhvillues", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Titull liste të re", "lists.search": "Kërkoni mes personash që ndiqni", "lists.subheading": "Listat tuaja", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Po ngarkohet…", "media_gallery.toggle_visible": "Ndërroni dukshmërinë", "missing_indicator.label": "S’u gjet", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personale", "navigation_bar.pins": "Mesazhe të fiksuar", "navigation_bar.preferences": "Parapëlqime", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Rrjedhë kohore të federuarish", "navigation_bar.security": "Siguri", "notification.favourite": "{name} parapëlqeu gjendjen tuaj", @@ -277,8 +299,10 @@ "notifications.group": "{count}s njoftime", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Rregulloni privatësi gjendje", @@ -290,6 +314,7 @@ "privacy.public.short": "Publike", "privacy.unlisted.long": "Mos e postoni në rrjedha publike kohore", "privacy.unlisted.short": "Jo në lista", + "refresh": "Refresh", "regeneration_indicator.label": "Po ngarkohet…", "regeneration_indicator.sublabel": "Prurja juaj vetjake po përgatiteet!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "Persona", "search_results.hashtags": "Hashtagë", "search_results.statuses": "Mesazhe", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, një {result} {results} të tjera}", "status.admin_account": "Hap ndërfaqe moderimi për @{name}", "status.admin_status": "Hape këtë gjendje te ndërfaqja e moderimit", @@ -352,6 +378,7 @@ "status.show_more": "Shfaq më tepër", "status.show_more_all": "Shfaq më tepër për të tërë", "status.show_thread": "Shfaq rrjedhën", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Ktheji zërin bisedës", "status.unpin": "Shfiksoje nga profili", "suggestions.dismiss": "Mos e merr parasysh sugjerimin", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, një {person} {people} të tjerë} po flasin", + "trends.trending_now": "Trending now", "ui.beforeunload": "Skica juaj do të humbë nëse dilni nga Mastodon-i.", "upload_area.title": "Merreni & vëreni që të ngarkohet", "upload_button.label": "Shtoni media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "U tejkalua kufi ngarkimi kartelash.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Përshkruajeni për persona me probleme shikimi", - "upload_form.focus": "Ndryshoni parapamjen", + "upload_form.edit": "Edit", "upload_form.undo": "Fshije", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Po ngarkohet…", "video.close": "Mbylle videon", "video.exit_fullscreen": "Dil nga mënyra Sa Krejt Ekrani", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 8f8ca7c30..59b8459ae 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -4,6 +4,7 @@ "account.block": "Blokiraj korisnika @{name}", "account.block_domain": "Sakrij sve sa domena {domain}", "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Direct Message @{name}", "account.domain_blocked": "Domain hidden", "account.edit_profile": "Izmeni profil", @@ -15,6 +16,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "Prati Vas", "account.hide_reblogs": "Sakrij podrške koje daje korisnika @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Mediji", @@ -23,6 +25,7 @@ "account.mute": "Ućutkaj korisnika @{name}", "account.mute_notifications": "Isključi obaveštenja od korisnika @{name}", "account.muted": "Muted", + "account.never_active": "Never", "account.posts": "Statusa", "account.posts_with_replies": "Toots with replies", "account.report": "Prijavi @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Otprati", "account.unmute": "Ukloni ućutkavanje korisniku @{name}", "account.unmute_notifications": "Uključi nazad obaveštenja od korisnika @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Možete pritisnuti {combo} da preskočite ovo sledeći put", "bundle_column_error.body": "Nešto je pošlo po zlu prilikom učitavanja ove komponente.", "bundle_column_error.retry": "Pokušajte ponovo", @@ -47,6 +53,7 @@ "column.blocks": "Blokirani korisnici", "column.community": "Lokalna lajna", "column.direct": "Direct messages", + "column.directory": "Browse profiles", "column.domain_blocks": "Hidden domains", "column.favourites": "Omiljeni", "column.follow_requests": "Zahtevi za praćenje", @@ -64,7 +71,7 @@ "column_header.show_settings": "Prikaži postavke", "column_header.unpin": "Otkači", "column_subheading.settings": "Postavke", - "community.column_settings.media_only": "Media Only", + "community.column_settings.media_only": "Media only", "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", "compose_form.direct_message_warning_learn_more": "Learn more", "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Da li ste sigurni da želite da bespovratno obrišete ovu listu?", "confirmations.domain_block.confirm": "Sakrij ceo domen", "confirmations.domain_block.message": "Da li ste stvarno, stvarno sigurno da želite da blokirate ceo domen {domain}? U većini slučajeva, par dobrih blokiranja ili ućutkavanja su dovoljna i preporučljiva.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Ućutkaj", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Da li stvarno želite da ućutkate korisnika {name}?", "confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Otprati", "confirmations.unfollow.message": "Da li ste sigurni da želite da otpratite korisnika {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Ugradi ovaj status na Vaš veb sajt kopiranjem koda ispod.", "embed.preview": "Ovako će da izgleda:", "emoji_button.activity": "Aktivnost", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "Trenutno nemate obaveštenja. Družite se malo da započnete razgovore.", "empty_column.public": "Ovde nema ničega! Napišite nešto javno, ili nađite korisnike sa drugih instanci koje ćete zapratiti da popunite ovu prazninu", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Odobri", "follow_request.reject": "Odbij", "getting_started.developers": "Developers", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Naslov nove liste", "lists.search": "Pretraži među ljudima koje pratite", "lists.subheading": "Vaše liste", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Učitavam...", "media_gallery.toggle_visible": "Uključi/isključi vidljivost", "missing_indicator.label": "Nije pronađeno", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Prikačeni tutovi", "navigation_bar.preferences": "Podešavanja", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federisana lajna", "navigation_bar.security": "Security", "notification.favourite": "{name} je stavio Vaš status kao omiljeni", @@ -277,8 +299,10 @@ "notifications.group": "{count} notifications", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Podesi status privatnosti", @@ -290,6 +314,7 @@ "privacy.public.short": "Javno", "privacy.unlisted.long": "Ne objavljuj na javnim lajnama", "privacy.unlisted.short": "Neizlistano", + "refresh": "Refresh", "regeneration_indicator.label": "Loading…", "regeneration_indicator.sublabel": "Your home feed is being prepared!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "People", "search_results.hashtags": "Hashtags", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {rezultat} few {rezultata} other {rezultata}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Prikaži više", "status.show_more_all": "Show more for all", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Uključi prepisku", "status.unpin": "Otkači sa profila", "suggestions.dismiss": "Dismiss suggestion", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", "ui.beforeunload": "Ako napustite Mastodont, izgubićete napisani nacrt.", "upload_area.title": "Prevucite ovde da otpremite", "upload_button.label": "Dodaj multimediju", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Opiši za slabovide osobe", - "upload_form.focus": "Crop", + "upload_form.edit": "Edit", "upload_form.undo": "Opozovi", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Otpremam...", "video.close": "Zatvori video", "video.exit_fullscreen": "Napusti ceo ekran", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 8ef18a774..d222e774d 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -4,6 +4,7 @@ "account.block": "Блокирај @{name}", "account.block_domain": "Сакриј све са домена {domain}", "account.blocked": "Блокиран", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "Директна порука @{name}", "account.domain_blocked": "Домен сакривен", "account.edit_profile": "Измени профил", @@ -15,6 +16,7 @@ "account.follows.empty": "Корисник тренутно не прати никога.", "account.follows_you": "Прати Вас", "account.hide_reblogs": "Сакриј подршке које даје корисника @{name}", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "Медији", @@ -23,6 +25,7 @@ "account.mute": "Ућуткај корисника @{name}", "account.mute_notifications": "Искључи обавештења од корисника @{name}", "account.muted": "Ућуткан", + "account.never_active": "Never", "account.posts": "Трубе", "account.posts_with_replies": "Трубе и одговори", "account.report": "Пријави @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "Отпрати", "account.unmute": "Уклони ућуткавање кориснику @{name}", "account.unmute_notifications": "Укључи назад обавештења од корисника @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "Појавила се неочекивана грешка.", "alert.unexpected.title": "Упс!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "Можете притиснути {combo} да прескочите ово следећи пут", "bundle_column_error.body": "Нешто је пошло по злу приликом учитавања ове компоненте.", "bundle_column_error.retry": "Покушајте поново", @@ -47,6 +53,7 @@ "column.blocks": "Блокирани корисници", "column.community": "Локална временска линија", "column.direct": "Директне поруке", + "column.directory": "Browse profiles", "column.domain_blocks": "Скривени домени", "column.favourites": "Омиљене", "column.follow_requests": "Захтеви за праћење", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Да ли сте сигурни да желите да бесповратно обришете ову листу?", "confirmations.domain_block.confirm": "Сакриј цео домен", "confirmations.domain_block.message": "Да ли сте заиста сигурни да желите да блокирате цео домен {domain}? У већини случајева, неколико добро промишљених блокирања или ућуткавања су довољна и препоручљива.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "Ућуткај", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "Да ли стварно желите да ућуткате корисника {name}?", "confirmations.redraft.confirm": "Избриши и преправи", "confirmations.redraft.message": "Да ли сте сигурни да желите да избришете овај статус и да га преправите? Сва стављања у омиљене трубе, као и подршке ће бити изгубљене, а одговори на оригинални пост ће бити поништени.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "Отпрати", "confirmations.unfollow.message": "Да ли сте сигурни да желите да отпратите корисника {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "Угради овај статус на Ваш веб сајт копирањем кода испод.", "embed.preview": "Овако ће да изгледа:", "emoji_button.activity": "Активност", @@ -134,6 +152,10 @@ "empty_column.mutes": "Још увек немате ућутканих корисника.", "empty_column.notifications": "Тренутно немате обавештења. Дружите се мало да започнете разговор.", "empty_column.public": "Овде нема ничега! Напишите нешто јавно, или нађите кориснике са других инстанци које ћете запратити да попуните ову празнину", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "Одобри", "follow_request.reject": "Одбиј", "getting_started.developers": "Програмери", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Наслов нове листе", "lists.search": "Претражи међу људима које пратите", "lists.subheading": "Ваше листе", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "Учитавам...", "media_gallery.toggle_visible": "Укључи/искључи видљивост", "missing_indicator.label": "Није пронађено", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "Прикачене трубе", "navigation_bar.preferences": "Подешавања", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Здружена временска линија", "navigation_bar.security": "Безбедност", "notification.favourite": "{name} је ставио/ла Ваш статус као омиљени", @@ -277,8 +299,10 @@ "notifications.group": "{count} обавештења", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "Подеси статус приватности", @@ -290,6 +314,7 @@ "privacy.public.short": "Јавно", "privacy.unlisted.long": "Не објављуј на јавним временским линијама", "privacy.unlisted.short": "Неизлистано", + "refresh": "Refresh", "regeneration_indicator.label": "Учитавање…", "regeneration_indicator.sublabel": "Ваша почетна страница се припрема!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "Људи", "search_results.hashtags": "Тарабе", "search_results.statuses": "Трубе", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {резултат} few {резултата} other {резултата}}", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "Прикажи више", "status.show_more_all": "Прикажи више за све", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "Укључи преписку", "status.unpin": "Откачи са профила", "suggestions.dismiss": "Dismiss suggestion", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {човек} other {људи}} прича", + "trends.trending_now": "Trending now", "ui.beforeunload": "Ако напустите Мастодонт, изгубићете написани нацрт.", "upload_area.title": "Превуците овде да отпремите", "upload_button.label": "Додај мултимедију (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "Опишите за особе са оштећеним видом", - "upload_form.focus": "Подесите", + "upload_form.edit": "Edit", "upload_form.undo": "Обриши", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "Отпремам...", "video.close": "Затвори видео", "video.exit_fullscreen": "Напусти цео екран", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index ab12be885..9b12f337b 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -1,217 +1,239 @@ { - "account.add_or_remove_from_list": "Lägg till eller ta bort från listor", + "account.add_or_remove_from_list": "Lägg till i eller ta bort från listor", "account.badges.bot": "Robot", "account.block": "Blockera @{name}", "account.block_domain": "Dölj allt från {domain}", "account.blocked": "Blockerad", - "account.direct": "Direktmeddelande @{name}", + "account.cancel_follow_request": "Avbryt följarförfrågan", + "account.direct": "Skicka ett direktmeddelande till @{name}", "account.domain_blocked": "Domän dold", "account.edit_profile": "Redigera profil", - "account.endorse": "Feature on profile", + "account.endorse": "Visa på profil", "account.follow": "Följ", "account.followers": "Följare", - "account.followers.empty": "Ingen följer denna användaren än.", + "account.followers.empty": "Ingen följer denna användare än.", "account.follows": "Följer", - "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows.empty": "Denna användare följer inte någon än.", "account.follows_you": "Följer dig", "account.hide_reblogs": "Dölj knuffar från @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.last_status": "Senast aktiv", + "account.link_verified_on": "Ägarskap för detta konto kontrollerades den {date}", + "account.locked_info": "Detta konto har låst integritetsstatus. Ägaren väljer manuellt vem som kan följa.", "account.media": "Media", "account.mention": "Nämna @{name}", "account.moved_to": "{name} har flyttat till:", "account.mute": "Tysta @{name}", "account.mute_notifications": "Stäng av notifieringar från @{name}", - "account.muted": "Nertystad", - "account.posts": "Inlägg", - "account.posts_with_replies": "Toots och svar", + "account.muted": "Tystad", + "account.never_active": "Aldrig", + "account.posts": "Tutningar", + "account.posts_with_replies": "Tutningar och svar", "account.report": "Rapportera @{name}", - "account.requested": "Inväntar godkännande. Klicka för att avbryta följförfrågan", - "account.share": "Dela @{name}'s profil", + "account.requested": "Inväntar godkännande. Klicka för att avbryta följarförfrågan", + "account.share": "Dela @{name}s profil", "account.show_reblogs": "Visa knuffar från @{name}", "account.unblock": "Avblockera @{name}", - "account.unblock_domain": "Ta fram {domain}", - "account.unendorse": "Don't feature on profile", - "account.unfollow": "Sluta följa", - "account.unmute": "Ta bort tystad @{name}", - "account.unmute_notifications": "Återaktivera notifikationer från @{name}", + "account.unblock_domain": "Sluta dölja {domain}", + "account.unendorse": "Visa inte på profil", + "account.unfollow": "Sluta följ", + "account.unmute": "Sluta tysta @{name}", + "account.unmute_notifications": "Återaktivera notifieringar från @{name}", + "alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.", + "alert.rate_limited.title": "Mängd begränsad", "alert.unexpected.message": "Ett oväntat fel uppstod.", - "alert.unexpected.title": "Whups!", - "boost_modal.combo": "Du kan trycka {combo} för att slippa denna nästa gång", - "bundle_column_error.body": "Något gick fel när du laddade denna komponent.", + "alert.unexpected.title": "Hoppsan!", + "autosuggest_hashtag.per_week": "{count} per vecka", + "boost_modal.combo": "Du kan trycka {combo} för att slippa detta nästa gång", + "bundle_column_error.body": "Något gick fel medan denna komponent laddades.", "bundle_column_error.retry": "Försök igen", "bundle_column_error.title": "Nätverksfel", "bundle_modal_error.close": "Stäng", - "bundle_modal_error.message": "Något gick fel när du laddade denna komponent.", + "bundle_modal_error.message": "Något gick fel när denna komponent laddades.", "bundle_modal_error.retry": "Försök igen", "column.blocks": "Blockerade användare", "column.community": "Lokal tidslinje", - "column.direct": "Direktmeddelande", + "column.direct": "Direktmeddelanden", + "column.directory": "Bläddra bland profiler", "column.domain_blocks": "Dolda domäner", "column.favourites": "Favoriter", - "column.follow_requests": "Följ förfrågningar", + "column.follow_requests": "Följarförfrågningar", "column.home": "Hem", "column.lists": "Listor", "column.mutes": "Tystade användare", - "column.notifications": "Meddelanden", + "column.notifications": "Aviseringar", "column.pins": "Nålade toots", "column.public": "Förenad tidslinje", "column_back_button.label": "Tillbaka", "column_header.hide_settings": "Dölj inställningar", - "column_header.moveLeft_settings": "Flytta kolumnen till vänster", - "column_header.moveRight_settings": "Flytta kolumnen till höger", + "column_header.moveLeft_settings": "Flytta kolumnen åt vänster", + "column_header.moveRight_settings": "Flytta kolumnen åt höger", "column_header.pin": "Fäst", "column_header.show_settings": "Visa inställningar", "column_header.unpin": "Ångra fäst", "column_subheading.settings": "Inställningar", - "community.column_settings.media_only": "Enbart media", - "compose_form.direct_message_warning": "Denna toot kommer endast att skickas nämnda nämnda användare.", - "compose_form.direct_message_warning_learn_more": "Visa mer", - "compose_form.hashtag_warning": "Denna toot kommer inte att listas under någon hashtag eftersom den är onoterad. Endast offentliga toots kan sökas med hashtag.", - "compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vemsomhelst kan följa dig och även se dina inlägg skrivna för endast dina följare.", + "community.column_settings.media_only": "Endast media", + "compose_form.direct_message_warning": "Denna tutning kommer endast skickas till de nämnda användarna.", + "compose_form.direct_message_warning_learn_more": "Lär dig mer", + "compose_form.hashtag_warning": "Denna toot kommer inte att visas under någon hashtag eftersom den är onoterad. Endast offentliga toots kan sökas med hashtag.", + "compose_form.lock_disclaimer": "Ditt konto är inte {locked}. Vem som helst kan följa dig för att se dina inlägg som endast är för följare.", "compose_form.lock_disclaimer.lock": "låst", "compose_form.placeholder": "Vad funderar du på?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", - "compose_form.publish": "Toot", + "compose_form.poll.add_option": "Lägg till ett val", + "compose_form.poll.duration": "Varaktighet för omröstning", + "compose_form.poll.option_placeholder": "Val {number}", + "compose_form.poll.remove_option": "Ta bort detta val", + "compose_form.publish": "Tut", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Markera media som känsligt", "compose_form.sensitive.marked": "Media har markerats som känsligt", - "compose_form.sensitive.unmarked": "Media har inte markerats som känsligt", - "compose_form.spoiler.marked": "Texten har dolts bakom en varning", + "compose_form.sensitive.unmarked": "Media är inte markerat som känsligt", + "compose_form.spoiler.marked": "Texten är dold bakom en varning", "compose_form.spoiler.unmarked": "Texten är inte dold", "compose_form.spoiler_placeholder": "Skriv din varning här", "confirmation_modal.cancel": "Ångra", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Blockera & rapportera", "confirmations.block.confirm": "Blockera", - "confirmations.block.message": "Är du säker att du vill blockera {name}?", + "confirmations.block.message": "Är du säker på att du vill blockera {name}?", "confirmations.delete.confirm": "Ta bort", - "confirmations.delete.message": "Är du säker att du vill ta bort denna status?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete.message": "Är du säker på att du vill ta bort denna status?", + "confirmations.delete_list.confirm": "Ta bort", "confirmations.delete_list.message": "Är du säker på att du vill radera denna lista permanent?", - "confirmations.domain_block.confirm": "Blockera hela domänen", - "confirmations.domain_block.message": "Är du verkligen säker på att du vill blockera hela {domain}? I de flesta fall är några riktade blockeringar eller nedtystade konton tillräckligt och att föredra. Du kommer sluta se innehåll från {domain}-domänen i den allmänna tidslinjen och i dina egna notifieringar. Du kommer även sluta följa alla eventuella följare du har från {domain}.", + "confirmations.domain_block.confirm": "Dölj hela domänen", + "confirmations.domain_block.message": "Är du verkligen, verkligen säker på att du vill blockera hela {domain}? I de flesta fall är några riktade blockeringar eller nedtystade konton tillräckligt och att föredra. Du kommer inte se innehåll från den domänen i den allmänna tidslinjen eller i dina notifieringar. Dina följare från den domänen komer att tas bort.", + "confirmations.logout.confirm": "Logga ut", + "confirmations.logout.message": "Är du säker på att du vill logga ut?", "confirmations.mute.confirm": "Tysta", - "confirmations.mute.message": "Är du säker du vill tysta ner {name}?", - "confirmations.redraft.confirm": "Radera och gör om", - "confirmations.redraft.message": "Är du säker på att du vill radera meddelandet och göra om det? Du kommer förlora alla svar, knuffar och favoriter som hänvisar till meddelandet.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.unfollow.confirm": "Sluta följa", - "confirmations.unfollow.message": "Är du säker på att du vill sluta följa {name}?", - "embed.instructions": "Bädda in den här statusen på din webbplats genom att kopiera koden nedan.", - "embed.preview": "Här ser du hur det kommer att se ut:", + "confirmations.mute.explanation": "Detta kommer att dölja poster från dem och poster som nämner dem, men fortfarande tillåta dem att se dina poster och följa dig.", + "confirmations.mute.message": "Är du säker på att du vill tysta {name}?", + "confirmations.redraft.confirm": "Radera & gör om", + "confirmations.redraft.message": "Är du säker på att du vill radera detta meddelande och göra om det? Du kommer förlora alla favoriter, knuffar och svar till det ursprungliga meddelandet.", + "confirmations.reply.confirm": "Svara", + "confirmations.reply.message": "Om du svarar nu kommer det att ersätta meddelandet du håller på att skapa. Är du säker på att du vill fortsätta?", + "confirmations.unfollow.confirm": "Avfölj", + "confirmations.unfollow.message": "Är du säker på att du vill avfölja {name}?", + "conversation.delete": "Radera konversation", + "conversation.mark_as_read": "Markera som läst", + "conversation.open": "Se konversation", + "conversation.with": "Med {names}", + "directory.federated": "Från känt servernätverk", + "directory.local": "Endast från {domain}", + "directory.new_arrivals": "Nyanlända", + "directory.recently_active": "Nyligen aktiva", + "embed.instructions": "Lägg in denna status på din webbplats genom att kopiera koden nedan.", + "embed.preview": "Så här kommer det att se ut:", "emoji_button.activity": "Aktivitet", - "emoji_button.custom": "Specialgjord", + "emoji_button.custom": "Anpassad", "emoji_button.flags": "Flaggor", - "emoji_button.food": "Mat & Dryck", + "emoji_button.food": "Mat & dryck", "emoji_button.label": "Lägg till emoji", "emoji_button.nature": "Natur", "emoji_button.not_found": "Inga emojos!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "Objekt", - "emoji_button.people": "Människor", + "emoji_button.people": "Personer", "emoji_button.recent": "Ofta använda", "emoji_button.search": "Sök...", "emoji_button.search_results": "Sökresultat", "emoji_button.symbols": "Symboler", - "emoji_button.travel": "Resor & Platser", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", - "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att få bollen att rulla!", - "empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot kommer den att dyka upp här.", - "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "emoji_button.travel": "Resor & platser", + "empty_column.account_timeline": "Inga inlägg här!", + "empty_column.account_unavailable": "Profilen ej tillgänglig", + "empty_column.blocks": "Du har ännu ej blockerat några användare.", + "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att sätta bollen i rullning!", + "empty_column.direct": "Du har inga direktmeddelanden än. När du skickar eller tar emot ett kommer det att visas här.", + "empty_column.domain_blocks": "Det finns ännu inga dolda domäner.", + "empty_column.favourited_statuses": "Du har inga favoritmarkerade toots än. När du favoritmarkerar en kommer den visas här.", + "empty_column.favourites": "Ingen har favoritmarkerat den här tooten än. När någon gör det kommer den visas här.", + "empty_column.follow_requests": "Du har inga följarförfrågningar än. När du får en kommer den visas här.", "empty_column.hashtag": "Det finns inget i denna hashtag ännu.", "empty_column.home": "Din hemma-tidslinje är tom! Besök {public} eller använd sökning för att komma igång och träffa andra användare.", "empty_column.home.public_timeline": "den publika tidslinjen", "empty_column.list": "Det finns inget i denna lista än. När medlemmar i denna lista lägger till nya statusar kommer de att visas här.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.lists": "Du har inga listor än. När skapar en kommer den dyka upp här.", + "empty_column.mutes": "Du har ännu inte tystat några användare.", "empty_column.notifications": "Du har inga meddelanden än. Interagera med andra för att starta konversationen.", "empty_column.public": "Det finns inget här! Skriv något offentligt, eller följ manuellt användarna från andra instanser för att fylla på det", + "error.unexpected_crash.explanation": "På grund av en bugg i vår kod eller kompatiblitetsproblem i webbläsaren kan den här sidan inte visas korrekt.", + "error.unexpected_crash.next_steps": "Prova att ladda om sidan. Om det inte hjälper kan du försöka använda Mastodon med en annan webbläsare eller app.", + "errors.unexpected_crash.copy_stacktrace": "Kopiera stacktrace till urklipp", + "errors.unexpected_crash.report_issue": "Rapportera problem", "follow_request.authorize": "Godkänn", "follow_request.reject": "Avvisa", "getting_started.developers": "Utvecklare", - "getting_started.directory": "Profile directory", - "getting_started.documentation": "Documentation", + "getting_started.directory": "Profilkatalog", + "getting_started.documentation": "Dokumentation", "getting_started.heading": "Kom igång", "getting_started.invite": "Skicka inbjudningar", "getting_started.open_source_notice": "Mastodon är programvara med öppen källkod. Du kan bidra eller rapportera problem via GitHub på {github}.", "getting_started.security": "Säkerhet", "getting_started.terms": "Användarvillkor", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_header.tag_mode.all": "och {additional}", + "hashtag.column_header.tag_mode.any": "eller {additional}", + "hashtag.column_header.tag_mode.none": "utan {additional}", + "hashtag.column_settings.select.no_options_message": "Inga förslag hittades", + "hashtag.column_settings.select.placeholder": "Ange hashtags …", + "hashtag.column_settings.tag_mode.all": "Alla dessa", + "hashtag.column_settings.tag_mode.any": "Någon av dessa", "hashtag.column_settings.tag_mode.none": "Ingen av dessa", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "home.column_settings.basic": "Grundläggande", "home.column_settings.show_reblogs": "Visa knuffar", "home.column_settings.show_replies": "Visa svar", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.days": "{number, plural, one {# dag} other {# dagar}}", + "intervals.full.hours": "{hours, plural, one {# timme} other {# timmar}}", + "intervals.full.minutes": "{minutes, plural, one {1 minut} other {# minuter}}", "introduction.federation.action": "Nästa", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "att navigera tillbaka", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "att knuffa", - "keyboard_shortcuts.column": "att fokusera en status i en av kolumnerna", - "keyboard_shortcuts.compose": "att fokusera komponera text fältet", - "keyboard_shortcuts.description": "Description", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "att flytta ner i listan", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "att favorisera", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "Snabbvalstangent", - "keyboard_shortcuts.legend": "att visa denna översikt", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "att nämna författaren", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "att svara", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "att fokusera sökfältet", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "att visa/gömma text bakom CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "att börja en helt ny toot", - "keyboard_shortcuts.unfocus": "att avfokusera komponera text fält / sökfält", - "keyboard_shortcuts.up": "att flytta upp i listan", + "introduction.federation.federated.headline": "Federerad", + "introduction.federation.federated.text": "Publika inlägg från andra servrar i servernätverket visas i den förenade tidslinjen.", + "introduction.federation.home.headline": "Hem", + "introduction.federation.home.text": "Inlägg från personer du följer kommer att visas i din hemtidlinje. Du kan följa vem du vill på vald server!", + "introduction.federation.local.headline": "Lokal", + "introduction.federation.local.text": "Publika inlägg från personer på samma server som du kommer att visas på den lokala tidslinjen.", + "introduction.interactions.action": "Slutför introduktionsguide!", + "introduction.interactions.favourite.headline": "Favorit", + "introduction.interactions.favourite.text": "Du kan spara en tut till senare, och visa författaren att du gillade den genom att göra den till favorit.", + "introduction.interactions.reblog.headline": "Knuffa", + "introduction.interactions.reblog.text": "Du kan dela andra personers tutar med dina följare genom att knuffa dem.", + "introduction.interactions.reply.headline": "Svara", + "introduction.interactions.reply.text": "Du kan besvara andra personers och dina egna tutar, vilket kommer att koppla ihop dem i en konversation.", + "introduction.welcome.action": "Sätt igång!", + "introduction.welcome.headline": "Första stegen", + "introduction.welcome.text": "Välkommen till fediverse! Om några ögonblick kommer du kunna sända ut meddelanden och prata med dina vänner över en mängd servrar. Men den här servern, {domain}, är speciell — den är hem åt din profil, så kom ihåg vad den heter.", + "keyboard_shortcuts.back": "för att gå bakåt", + "keyboard_shortcuts.blocked": "för att öppna listan över blockerade användare", + "keyboard_shortcuts.boost": "för att knuffa", + "keyboard_shortcuts.column": "för att fokusera en status i en av kolumnerna", + "keyboard_shortcuts.compose": "för att fokusera skrivfältet", + "keyboard_shortcuts.description": "Beskrivning", + "keyboard_shortcuts.direct": "för att öppna Direktmeddelanden", + "keyboard_shortcuts.down": "för att flytta nedåt i listan", + "keyboard_shortcuts.enter": "för att öppna en status", + "keyboard_shortcuts.favourite": "för att sätta som favorit", + "keyboard_shortcuts.favourites": "för att öppna Favoriter", + "keyboard_shortcuts.federated": "för att öppna Förenad tidslinje", + "keyboard_shortcuts.heading": "Tangentbordsgenvägar", + "keyboard_shortcuts.home": "för att öppna Hem-tidslinjen", + "keyboard_shortcuts.hotkey": "Kommando", + "keyboard_shortcuts.legend": "för att visa denna översikt", + "keyboard_shortcuts.local": "för att öppna Lokal tidslinje", + "keyboard_shortcuts.mention": "för att nämna skaparen", + "keyboard_shortcuts.muted": "för att öppna listan över tystade användare", + "keyboard_shortcuts.my_profile": "för att öppna din profil", + "keyboard_shortcuts.notifications": "för att öppna Meddelanden", + "keyboard_shortcuts.pinned": "för att öppna Nålade toots", + "keyboard_shortcuts.profile": "för att öppna skaparens profil", + "keyboard_shortcuts.reply": "för att svara", + "keyboard_shortcuts.requests": "för att öppna Följförfrågningar", + "keyboard_shortcuts.search": "för att fokusera sökfältet", + "keyboard_shortcuts.start": "för att öppna \"Kom igång\"-kolumnen", + "keyboard_shortcuts.toggle_hidden": "för att visa/gömma text bakom CW", + "keyboard_shortcuts.toggle_sensitivity": "för att visa/gömma media", + "keyboard_shortcuts.toot": "för att påbörja en helt ny toot", + "keyboard_shortcuts.unfocus": "för att avfokusera skrivfält/sökfält", + "keyboard_shortcuts.up": "för att flytta uppåt i listan", "lightbox.close": "Stäng", "lightbox.next": "Nästa", "lightbox.previous": "Tidigare", - "lightbox.view_context": "View context", + "lightbox.view_context": "Visa kontext", "lists.account.add": "Lägg till i lista", "lists.account.remove": "Ta bort från lista", "lists.delete": "Radera lista", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Ny listrubrik", "lists.search": "Sök bland personer du följer", "lists.subheading": "Dina listor", + "load_pending": "{count, plural, other {# objekt}}", "loading_indicator.label": "Laddar...", "media_gallery.toggle_visible": "Växla synlighet", "missing_indicator.label": "Hittades inte", @@ -229,58 +252,59 @@ "navigation_bar.apps": "Mobilappar", "navigation_bar.blocks": "Blockerade användare", "navigation_bar.community_timeline": "Lokal tidslinje", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.compose": "Författa ny toot", "navigation_bar.direct": "Direktmeddelanden", "navigation_bar.discover": "Upptäck", "navigation_bar.domain_blocks": "Dolda domäner", "navigation_bar.edit_profile": "Redigera profil", "navigation_bar.favourites": "Favoriter", - "navigation_bar.filters": "Muted words", + "navigation_bar.filters": "Tystade ord", "navigation_bar.follow_requests": "Följförfrågningar", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Följer och följare", "navigation_bar.info": "Om denna instans", - "navigation_bar.keyboard_shortcuts": "Tangentbordsgenvägar", + "navigation_bar.keyboard_shortcuts": "Kortkommandon", "navigation_bar.lists": "Listor", "navigation_bar.logout": "Logga ut", "navigation_bar.mutes": "Tystade användare", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "Personligt", "navigation_bar.pins": "Nålade inlägg (toots)", "navigation_bar.preferences": "Inställningar", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Förenad tidslinje", "navigation_bar.security": "Säkerhet", "notification.favourite": "{name} favoriserade din status", "notification.follow": "{name} följer dig", "notification.mention": "{name} nämnde dig", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "En omröstning du röstat i har avslutats", "notification.reblog": "{name} knuffade din status", "notifications.clear": "Rensa meddelanden", "notifications.clear_confirmation": "Är du säker på att du vill radera alla dina meddelanden permanent?", "notifications.column_settings.alert": "Skrivbordsmeddelanden", "notifications.column_settings.favourite": "Favoriter:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Visa alla kategorier", + "notifications.column_settings.filter_bar.category": "Snabbfilter", + "notifications.column_settings.filter_bar.show": "Visa", "notifications.column_settings.follow": "Nya följare:", "notifications.column_settings.mention": "Omnämningar:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Omröstningsresultat:", "notifications.column_settings.push": "Push meddelanden", "notifications.column_settings.reblog": "Knuffar:", "notifications.column_settings.show": "Visa i kolumnen", "notifications.column_settings.sound": "Spela upp ljud", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", + "notifications.filter.all": "Alla", + "notifications.filter.boosts": "Knuffar", "notifications.filter.favourites": "Favoriter", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", + "notifications.filter.follows": "Följer", + "notifications.filter.mentions": "Omnämningar", + "notifications.filter.polls": "Omröstningsresultat", "notifications.group": "{count} aviseringar", - "poll.closed": "Closed", + "poll.closed": "Stängd", "poll.refresh": "Ladda om", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.total_people": "{persons, plural, one {# person} other {# personer}}", + "poll.total_votes": "{count, plural, one {1 röst} other {# röster}}", "poll.vote": "Rösta", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll.voted": "Du röstade för detta svar", + "poll_button.add_poll": "Lägg till en omröstning", + "poll_button.remove_poll": "Ta bort omröstning", "privacy.change": "Justera sekretess", "privacy.direct.long": "Skicka endast till nämnda användare", "privacy.direct.short": "Direkt", @@ -290,13 +314,14 @@ "privacy.public.short": "Publik", "privacy.unlisted.long": "Skicka inte till publik tidslinje", "privacy.unlisted.short": "Olistad", + "refresh": "Läs om", "regeneration_indicator.label": "Laddar…", "regeneration_indicator.sublabel": "Ditt hemmaflöde förbereds!", "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.hours": "{number}tim", "relative_time.just_now": "nu", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "relative_time.minutes": "{number}min", + "relative_time.seconds": "{number}sek", "reply_indicator.cancel": "Ångra", "report.forward": "Vidarebefordra till {target}", "report.forward_hint": "Kontot är från en annan server. Skicka även en anonymiserad kopia av anmälan dit?", @@ -312,21 +337,22 @@ "search_popout.tips.text": "Enkel text returnerar matchande visningsnamn, användarnamn och hashtags", "search_popout.tips.user": "användare", "search_results.accounts": "Människor", - "search_results.hashtags": "Hashtags", + "search_results.hashtags": "Hashtaggar", "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Att söka toots med deras innehåll är inte möjligt på denna Mastodon-server.", "search_results.total": "{count, number} {count, plural, ett {result} andra {results}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", + "status.admin_account": "Öppet modereringsgränssnitt för @{name}", + "status.admin_status": "Öppna denna status i modereringsgränssnittet", + "status.block": "Blockera @{name}", "status.cancel_reblog_private": "Ta bort knuff", "status.cannot_reblog": "Detta inlägg kan inte knuffas", - "status.copy": "Copy link to status", + "status.copy": "Kopiera länk till status", "status.delete": "Ta bort", - "status.detailed_status": "Detailed conversation view", + "status.detailed_status": "Detaljerad samtalsvy", "status.direct": "Direktmeddela @{name}", "status.embed": "Bädda in", "status.favourite": "Favorit", - "status.filtered": "Filtered", + "status.filtered": "Filtrerat", "status.load_more": "Ladda fler", "status.media_hidden": "Media dold", "status.mention": "Omnämn @{name}", @@ -337,10 +363,10 @@ "status.pin": "Fäst i profil", "status.pinned": "Fäst toot", "status.read_more": "Läs mer", - "status.reblog": "Knuff", + "status.reblog": "Knuffa", "status.reblog_private": "Knuffa till de ursprungliga åhörarna", "status.reblogged_by": "{name} knuffade", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.reblogs.empty": "Ingen har favoriserat den här tutningen än. När någon gör det kommer den att synas här.", "status.redraft": "Radera & gör om", "status.reply": "Svara", "status.replyAll": "Svara på tråden", @@ -352,29 +378,38 @@ "status.show_more": "Visa mer", "status.show_more_all": "Visa mer för alla", "status.show_thread": "Visa tråd", + "status.uncached_media_warning": "Ej tillgängligt", "status.unmute_conversation": "Öppna konversation", "status.unpin": "Ångra fäst i profil", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "suggestions.dismiss": "Avfärda förslag", + "suggestions.header": "Du kanske är intresserad av…", "tabs_bar.federated_timeline": "Förenad", "tabs_bar.home": "Hem", "tabs_bar.local_timeline": "Lokal", "tabs_bar.notifications": "Meddelanden", "tabs_bar.search": "Sök", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "time_remaining.days": "{number, plural, one {# dag} other {# dagar}} kvar", + "time_remaining.hours": "{hours, plural, one {# timme} other {# timmar}} kvar", + "time_remaining.minutes": "{minutes, plural, one {1 minut} other {# minuter}} kvar", + "time_remaining.moments": "Återstående tillfällen", + "time_remaining.seconds": "{hours, plural, one {# sekund} other {# sekunder}} kvar", "trends.count_by_accounts": "{count} {rawCount, plural, en {person} andra {people}} pratar", + "trends.trending_now": "Trendar nu", "ui.beforeunload": "Ditt utkast kommer att förloras om du lämnar Mastodon.", "upload_area.title": "Dra & släpp för att ladda upp", "upload_button.label": "Lägg till media", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.limit": "Filöverföringsgränsen överskriden.", + "upload_error.poll": "Filuppladdning tillåts inte med omröstningar.", "upload_form.description": "Beskriv för synskadade", - "upload_form.focus": "Beskär", + "upload_form.edit": "Redigera", "upload_form.undo": "Ta bort", + "upload_modal.analyzing_picture": "Analyserar bild…", + "upload_modal.apply": "Verkställ", + "upload_modal.description_placeholder": "En snabb brun räv hoppar över den lata hunden", + "upload_modal.detect_text": "Upptäck bildens text", + "upload_modal.edit_media": "Redigera meida", + "upload_modal.hint": "Klicka eller dra cirkeln på förhandstitten för att välja den fokusering som alltid kommer synas på alla miniatyrer.", + "upload_modal.preview_label": "Förhandstitt ({ratio})", "upload_progress.label": "Laddar upp...", "video.close": "Stäng video", "video.exit_fullscreen": "Stäng helskärm", @@ -382,7 +417,7 @@ "video.fullscreen": "Helskärm", "video.hide": "Dölj video", "video.mute": "Stäng av ljud", - "video.pause": "Pause", + "video.pause": "Pausa", "video.play": "Spela upp", "video.unmute": "Spela upp ljud" } diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 637ca884a..9be141523 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -1,33 +1,36 @@ { "account.add_or_remove_from_list": "பட்டியல்களில் இருந்து சேர் அல்லது நீக்குக", "account.badges.bot": "பாட்", - "account.block": "Block @{name}", - "account.block_domain": "எல்லாவற்றையும் மறைக்க {domain}", - "account.blocked": "தடைமுட்டுகள்", + "account.block": "@{name} -ஐத் தடு", + "account.block_domain": "{domain} யில் இருந்து வரும் எல்லாவற்றையும் மறை", + "account.blocked": "முடக்கப்பட்டது", + "account.cancel_follow_request": "பின்தொடரும் முடிவைக் கைவிடவும்", "account.direct": "நேரடி செய்தி @{name}", - "account.domain_blocked": "டொமைன் மறைக்கப்பட்டது", - "account.edit_profile": "சுயவிவரத்தைத் திருத்தவும்", - "account.endorse": "சுயவிவரத்தில் அம்சம்", - "account.follow": "பின்பற்று", + "account.domain_blocked": "மறைக்கப்பட்டத் தளங்கள்", + "account.edit_profile": "சுயவிவரத்தை மாற்று", + "account.endorse": "சுயவிவரத்தில் வெளிப்படுத்து", + "account.follow": "பின்தொடர்", "account.followers": "பின்பற்றுபவர்கள்", "account.followers.empty": "இதுவரை யாரும் இந்த பயனரைப் பின்தொடரவில்லை.", - "account.follows": "பின்பற்று", + "account.follows": "பின்தொடர்", "account.follows.empty": "இந்த பயனர் இதுவரை யாரையும் பின்தொடரவில்லை.", - "account.follows_you": "நீ பின் தொடர்கிறாய்", + "account.follows_you": "உங்களைப் பின்தொடர்கிறார்", "account.hide_reblogs": "இருந்து ஊக்கியாக மறை @{name}", + "account.last_status": "கடைசி செயல்பாடு", "account.link_verified_on": "இந்த இணைப்பை உரிமையாளர் சரிபார்க்கப்பட்டது {date}", - "account.locked_info": "இந்தக் கணக்கு தனியுரிமை நிலை பூட்டப்பட்டுள்ளது. அவர்களைப் பின்தொடர்பவர் யார் என்பதை உரிமையாளர் கைமுறையாக மதிப்பாய்வு செய்கிறார்.", - "account.media": "Media", + "account.locked_info": "இந்த கணக்கின் தனியுரிமை நிலை பூட்டப்படவுள்ளது. உரிமையாளர் தன்னை யார் பின்தொடரலாம் என்பதை தானே முடிவு செய்வார்.", + "account.media": "ஊடகங்கள்", "account.mention": "குறிப்பிடு @{name}", "account.moved_to": "{name} நகர்த்தப்பட்டது:", "account.mute": "ஊமையான @{name}", "account.mute_notifications": "அறிவிப்புகளை முடக்கு @{name}", "account.muted": "முடக்கியது", - "account.posts": "Toots", + "account.never_active": "எப்போதுமில்லை", + "account.posts": "டூட்டுகள்", "account.posts_with_replies": "Toots மற்றும் பதில்கள்", - "account.report": "Report @{name}", + "account.report": "@{name} -ஐப் புகாரளி", "account.requested": "ஒப்புதலுக்காக காத்திருக்கிறது. கோரிக்கையை ரத்துசெய்ய கிளிக் செய்க", - "account.share": "பங்கிடு @{name}'s மனித முகத்தின்", + "account.share": "@{name} உடைய விவரத்தை பகிர்", "account.show_reblogs": "காட்டு boosts இருந்து @{name}", "account.unblock": "விடுவி @{name}", "account.unblock_domain": "காண்பி {domain}", @@ -35,28 +38,32 @@ "account.unfollow": "பின்தொடராட்", "account.unmute": "தடுப்புநீக்கு @{name}", "account.unmute_notifications": "அறிவிப்புகளை அகற்றவும் @{name}", - "alert.unexpected.message": "எதிர் பாராத பிழை ஏற்பட்டு விட்டது.", + "alert.rate_limited.message": "{retry_time, time, medium} மணிக்குப் பிறகு மீண்டும் முயற்சிக்கவும்.", + "alert.rate_limited.title": "விகித அளவுக்கு உட்படுத்தப்பட்டது", + "alert.unexpected.message": "எதிர்பாராத பிழை ஏற்பட்டுவிட்டது.", "alert.unexpected.title": "அச்சச்சோ!", - "boost_modal.combo": "நீங்கள் அழுத்தவும் {combo} அடுத்த முறை தவிர்க்கவும்", - "bundle_column_error.body": "இந்த கூறுகளை ஏற்றும்போது ஏதோ தவறு ஏற்பட்டது.", + "autosuggest_hashtag.per_week": "வாரத்திற்கு {count}", + "boost_modal.combo": "நீங்கள் இதை அடுத்தமுறை தவிர்க்க {combo} வை அழுத்தவும்", + "bundle_column_error.body": "இந்த பகுதி கூறை ஏற்றம் செய்யும் பொது ஏதோ தவறு ஏற்பட்டுள்ளது.", "bundle_column_error.retry": "மீண்டும் முயற்சி செய்", - "bundle_column_error.title": "Network error", + "bundle_column_error.title": "பிணையப் பிழை", "bundle_modal_error.close": "நெருக்கமாக", "bundle_modal_error.message": "இந்த கூறுகளை ஏற்றும்போது ஏதோ தவறு ஏற்பட்டது.", "bundle_modal_error.retry": "மீண்டும் முயற்சி செய்", "column.blocks": "தடுக்கப்பட்ட பயனர்கள்", "column.community": "உள்ளூர் காலக்கெடு", "column.direct": "நேரடி செய்திகள்", + "column.directory": "சுயவிவரங்களை உலாவு", "column.domain_blocks": "மறைந்த களங்கள்", "column.favourites": "விருப்பத்துக்குகந்த", "column.follow_requests": "கோரிக்கைகளை பின்பற்றவும்", - "column.home": "Home", + "column.home": "முதற்பக்கம்", "column.lists": "குதிரை வீர்ர்கள்", "column.mutes": "முடக்கப்பட்ட பயனர்கள்", - "column.notifications": "Notifications", + "column.notifications": "அறிவிப்புகள்", "column.pins": "Pinned toot", "column.public": "கூட்டாட்சி காலக்கெடு", - "column_back_button.label": "ஆதரி", + "column_back_button.label": "முந்தைய பக்கம்", "column_header.hide_settings": "அமைப்புகளை மறை", "column_header.moveLeft_settings": "நெடுவரிசையை இடதுபுறமாக நகர்த்தவும்", "column_header.moveRight_settings": "நெடுவரிசை வலது புறமாக நகர்த்து", @@ -75,25 +82,28 @@ "compose_form.poll.duration": "வாக்கெடுப்பு காலம்", "compose_form.poll.option_placeholder": "தேர்ந்தெடுப்ப {number}", "compose_form.poll.remove_option": "இந்த விருப்பத்தை அகற்றவும்", - "compose_form.publish": "Toot", + "compose_form.publish": "டூட் செய்க", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "அனைவருக்கும் ஏற்ற ஊடகம் இல்லை எனக் குறியிடுக", "compose_form.sensitive.marked": "ஊடகம் உணர்திறன் என குறிக்கப்பட்டுள்ளது", "compose_form.sensitive.unmarked": "ஊடகம் உணர்திறன் என குறிக்கப்படவில்லை", "compose_form.spoiler.marked": "எச்சரிக்கை பின்னால் உரை மறைக்கப்பட்டுள்ளது", "compose_form.spoiler.unmarked": "உரை மறைக்கப்படவில்லை", "compose_form.spoiler_placeholder": "இங்கே உங்கள் எச்சரிக்கையை எழுதுங்கள்", "confirmation_modal.cancel": "எதிராணை", - "confirmations.block.block_and_report": "Block & Report", - "confirmations.block.confirm": "Block", + "confirmations.block.block_and_report": "தடுத்துப் புகாரளி", + "confirmations.block.confirm": "தடு", "confirmations.block.message": "நீங்கள் நிச்சயமாக தடைசெய்ய விரும்புகிறீர்களா {name}?", - "confirmations.delete.confirm": "Delete", + "confirmations.delete.confirm": "அழி", "confirmations.delete.message": "இந்த நிலையை நிச்சயமாக நீக்க விரும்புகிறீர்களா?", - "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.confirm": "அழி", "confirmations.delete_list.message": "இந்த பட்டியலில் நிரந்தரமாக நீக்க விரும்புகிறீர்களா?", "confirmations.domain_block.confirm": "முழு டொமைனை மறை", "confirmations.domain_block.message": "நீங்கள் உண்மையில், நிச்சயமாக நீங்கள் முழு தடுக்க வேண்டும் நிச்சயமாக {domain}? பெரும்பாலான சந்தர்ப்பங்களில் ஒரு சில இலக்குகள் அல்லது மியூட்கள் போதுமானவை மற்றும் சிறந்தவை. எந்த பொது நேரத்திலும் அல்லது உங்கள் அறிவிப்புகளிலும் அந்தக் களத்திலிருந்து உள்ளடக்கத்தை நீங்கள் பார்க்க மாட்டீர்கள். அந்த களத்தில் இருந்து உங்கள் ஆதரவாளர்கள் அகற்றப்படுவார்கள்.", + "confirmations.logout.confirm": "வெளியேறு", + "confirmations.logout.message": "கண்டிப்பாக வெளியேறத்தான் வேண்டுமா?", "confirmations.mute.confirm": "ஊமையான", + "confirmations.mute.explanation": "இது அவர்களின் பதிவுகளையும், அவர்களைக் குறிப்பிடும் பதிவுகளையும் மறைத்துவிடும். ஆனால் அவர்கள் உங்கள் பதிவுகளைப் பார்க்கவும், உங்களைப் பின் தொடரவும் அனுமதிக்கப்படுவார்கள்.", "confirmations.mute.message": "நிச்சயமாக நீங்கள் முடக்க விரும்புகிறீர்களா {name}?", "confirmations.redraft.confirm": "நீக்கு & redraft", "confirmations.redraft.message": "நிச்சயமாக இந்த நிலையை நீக்கி, அதை மறுபடியும் உருவாக்க வேண்டுமா? பிடித்தவை மற்றும் ஊக்கங்கள் இழக்கப்படும், மற்றும் அசல் இடுகையில் பதில்கள் அனாதையான இருக்கும்.", @@ -101,21 +111,29 @@ "confirmations.reply.message": "இப்போது பதில், தற்போது நீங்கள் உருவாக்கும் செய்தி மேலெழுதப்படும். நீங்கள் தொடர விரும்புகிறீர்களா?", "confirmations.unfollow.confirm": "பின்தொடராட்", "confirmations.unfollow.message": "நிச்சயமாக நீங்கள் பின்தொடர விரும்புகிறீர்களா {name}?", + "conversation.delete": "உரையாடலை அழிக்கவும்", + "conversation.mark_as_read": "படிக்கபட்டதாகக் குறி", + "conversation.open": "உரையாடலைக் காண்க", + "conversation.with": "{names} உடன்", + "directory.federated": "தெரிந்த ஃபெடிவெர்சிலிருந்து", + "directory.local": "{domain} இல் இருந்து மட்டும்", + "directory.new_arrivals": "புதிய வரவு", + "directory.recently_active": "தற்பொழுது இயாக்கதிலிருப்பவர்கள்", "embed.instructions": "கீழே உள்ள குறியீட்டை நகலெடுப்பதன் மூலம் உங்கள் இணையதளத்தில் இந்த நிலையை உட்பொதிக்கவும்.", "embed.preview": "இது போன்ற தோற்றத்தை இங்கு காணலாம்:", "emoji_button.activity": "நடவடிக்கை", "emoji_button.custom": "வழக்கம்", "emoji_button.flags": "கொடி", "emoji_button.food": "உணவு மற்றும் பானம்", - "emoji_button.label": "Insert emoji", + "emoji_button.label": "குறுப்படங்களை உள்ளிடு", "emoji_button.nature": "இயற்கை", "emoji_button.not_found": "எமோஜோஸ் இல்லை! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "மறுப்ப கூறு", - "emoji_button.people": "People", + "emoji_button.people": "மக்கள்", "emoji_button.recent": "அடிக்கடி பயன்படுத்தப்படும்", "emoji_button.search": "தேடல்...", "emoji_button.search_results": "தேடல் முடிவுகள்", - "emoji_button.symbols": "Symbols", + "emoji_button.symbols": "குறியீடுகள்", "emoji_button.travel": "சுற்றுலா மற்றும் இடங்கள்", "empty_column.account_timeline": "இல்லை toots இங்கே!", "empty_column.account_unavailable": "சுயவிவரம் கிடைக்கவில்லை", @@ -134,11 +152,15 @@ "empty_column.mutes": "நீங்கள் இதுவரை எந்த பயனர்களையும் முடக்கியிருக்கவில்லை.", "empty_column.notifications": "உங்களிடம் எந்த அறிவிப்புகளும் இல்லை. உரையாடலைத் தொடங்க பிறருடன் தொடர்புகொள்ளவும்.", "empty_column.public": "இங்கே எதுவும் இல்லை! பகிரங்கமாக ஒன்றை எழுதவும் அல்லது மற்ற நிகழ்வுகளிலிருந்து பயனர்களை அதை நிரப்புவதற்கு கைமுறையாக பின்பற்றவும்", + "error.unexpected_crash.explanation": "மென்பொருள் பழுதுனாலோ அல்லது உங்கள் இணை உலாவியின் பொருந்தாதன்மையினாலோ இந்தப் பக்கத்தை சரியாகக் காண்பிக்க முடியவில்லை.", + "error.unexpected_crash.next_steps": "பக்கத்தை புதுப்பித்துப் பார்க்கவும். வேலை செய்யவில்லையெனில், வேறு ஒரு உலாவியில் இருந்தோ அல்லது உங்கள் கருவிக்கு பொருத்தமான வேறு செயலியில் இருந்தோ மச்டோடனைப் பயன்படுத்தவும்.", + "errors.unexpected_crash.copy_stacktrace": "பழுசெய்தியை பிடிப்புப் பலகைக்கு நகல் எடு", + "errors.unexpected_crash.report_issue": "புகாரளி", "follow_request.authorize": "அதிகாரமளி", "follow_request.reject": "விலக்கு", "getting_started.developers": "உருவாக்குநர்கள்", "getting_started.directory": "சுயவிவர அடைவு", - "getting_started.documentation": "Documentation", + "getting_started.documentation": "ஆவணங்கள்", "getting_started.heading": "தொடங்குதல்", "getting_started.invite": "நபர்களை அழைக்கவும்", "getting_started.open_source_notice": "Mastodon திறந்த மூல மென்பொருள். GitHub இல் நீங்கள் பங்களிக்கவோ அல்லது புகார் அளிக்கவோ முடியும் {github}.", @@ -160,11 +182,11 @@ "intervals.full.hours": "{number, plural, one {# hour} மற்ற {# hours}}", "intervals.full.minutes": "{number, plural, one {# minute} மற்ற {# minutes}}", "introduction.federation.action": "அடுத்த", - "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.headline": "கூட்டமைந்த", "introduction.federation.federated.text": "கூட்டமைப்பின் பிற சேவையகங்களிலிருந்து பொது பதிவுகள் கூட்டப்பட்ட காலக்கெடுவில் தோன்றும்.", - "introduction.federation.home.headline": "Home", + "introduction.federation.home.headline": "முகப்பு", "introduction.federation.home.text": "நீங்கள் பின்பற்றும் நபர்களின் இடுகைகள் உங்கள் வீட்டு ஊட்டத்தில் தோன்றும். நீங்கள் எந்த சர்வரில் யாரையும் பின்பற்ற முடியும்!", - "introduction.federation.local.headline": "Local", + "introduction.federation.local.headline": "அருகாமை", "introduction.federation.local.text": "உள்ளூர் சேவையகத்தில் தோன்றும் அதே சர்வரில் உள்ளவர்களின் பொது இடுகைகள்.", "introduction.interactions.action": "பயிற்சி முடிக்க!", "introduction.interactions.favourite.headline": "விருப்பத்துக்குகந்த", @@ -176,15 +198,15 @@ "introduction.welcome.action": "போகலாம்!", "introduction.welcome.headline": "முதல் படிகள்", "introduction.welcome.text": "கூட்டாளிக்கு வருக! ஒரு சில நிமிடங்களில், பலவிதமான சேவையகங்களில் செய்திகளை உரையாட மற்றும் உங்கள் நண்பர்களிடம் பேச முடியும். ஆனால் இந்த சர்வர், {domain}, சிறப்பு - இது உங்கள் சுயவிவரத்தை வழங்குகிறது, எனவே அதன் பெயரை நினைவில் கொள்ளுங்கள்.", - "keyboard_shortcuts.back": "மீண்டும் செல்லவும்", + "keyboard_shortcuts.back": "பின் செல்வதற்கு", "keyboard_shortcuts.blocked": "தடுக்கப்பட்ட பயனர்களின் பட்டியலைத் திறக்க", "keyboard_shortcuts.boost": "அதிகரிக்கும்", "keyboard_shortcuts.column": "நெடுவரிசைகளில் ஒன்றில் நிலைக்கு கவனம் செலுத்த வேண்டும்", "keyboard_shortcuts.compose": "தொகு உரைப்பகுதியை கவனத்தில் கொள்ளவும்", - "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.description": "விவரம்", "keyboard_shortcuts.direct": "நேரடி செய்திகள் பத்தி திறக்க", "keyboard_shortcuts.down": "பட்டியலில் கீழே நகர்த்த", - "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.enter": "பதிவைத்திறக்க", "keyboard_shortcuts.favourite": "பிடித்தது", "keyboard_shortcuts.favourites": "பிடித்தவை பட்டியலை திறக்க", "keyboard_shortcuts.federated": "ஒருங்கிணைந்த நேரத்தை திறக்க", @@ -204,23 +226,24 @@ "keyboard_shortcuts.search": "தேடல் கவனம் செலுத்த", "keyboard_shortcuts.start": "'தொடங்குவதற்கு' நெடுவரிசை திறக்க", "keyboard_shortcuts.toggle_hidden": "CW க்கு பின்னால் உரையை மறைக்க / மறைக்க", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "படிமங்களைக் காட்ட/மறைக்க", "keyboard_shortcuts.toot": "தொடங்க ஒரு புதிய toot", "keyboard_shortcuts.unfocus": "உரை பகுதியை / தேடலை கவனம் செலுத்த வேண்டும்", "keyboard_shortcuts.up": "பட்டியலில் மேலே செல்ல", "lightbox.close": "நெருக்கமாக", "lightbox.next": "அடுத்த", "lightbox.previous": "சென்ற", - "lightbox.view_context": "View context", + "lightbox.view_context": "சூழலைக் பார்", "lists.account.add": "பட்டியலில் சேர்", "lists.account.remove": "பட்டியலில் இருந்து அகற்று", - "lists.delete": "Delete list", + "lists.delete": "பட்டியலை நீக்கு", "lists.edit": "பட்டியலை திருத்து", "lists.edit.submit": "தலைப்பு மாற்றவும்", "lists.new.create": "பட்டியலில் சேர்", "lists.new.title_placeholder": "புதிய பட்டியல் தலைப்பு", "lists.search": "நீங்கள் பின்தொடரும் நபர்கள் மத்தியில் தேடுதல்", "lists.subheading": "உங்கள் பட்டியல்கள்", + "load_pending": "{count, plural,one {# புதியது}other {# புதியவை}}", "loading_indicator.label": "ஏற்றுதல்...", "media_gallery.toggle_visible": "நிலைமாற்று தெரியும்", "missing_indicator.label": "கிடைக்கவில்லை", @@ -237,20 +260,19 @@ "navigation_bar.favourites": "விருப்பத்துக்குகந்த", "navigation_bar.filters": "முடக்கப்பட்ட வார்த்தைகள்", "navigation_bar.follow_requests": "கோரிக்கைகளை பின்பற்றவும்", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "பின்பற்றல்கள் மற்றும் பின்பற்றுபவர்கள்", "navigation_bar.info": "இந்த நிகழ்வு பற்றி", "navigation_bar.keyboard_shortcuts": "சுருக்குவிசைகள்", "navigation_bar.lists": "குதிரை வீர்ர்கள்", "navigation_bar.logout": "விடு பதிகை", "navigation_bar.mutes": "முடக்கப்பட்ட பயனர்கள்", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "தனிப்பட்டவை", "navigation_bar.pins": "பொருத்தப்பட்டன toots", "navigation_bar.preferences": "விருப்பங்கள்", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "கூட்டாட்சி காலக்கெடு", "navigation_bar.security": "பத்திரம்", "notification.favourite": "{name} ஆர்வம் கொண்டவர், உங்கள் நிலை", - "notification.follow": "{name} நீங்கள் தொடர்ந்து வந்தீர்கள்", + "notification.follow": "{name} உங்களைப் பின்தொடர்கிறார்", "notification.mention": "{name} நீங்கள் குறிப்பிட்டுள்ளீர்கள்", "notification.poll": "நீங்கள் வாக்களித்த வாக்கெடுப்பு முடிவடைந்தது", "notification.reblog": "{name} உங்கள் நிலை அதிகரித்தது", @@ -264,7 +286,7 @@ "notifications.column_settings.follow": "புதிய பின்பற்றுபவர்கள்:", "notifications.column_settings.mention": "குறிப்பிடுகிறது:", "notifications.column_settings.poll": "கருத்துக்கணிப்பு முடிவுகள்:", - "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.push": "தள் அறிவிப்புகள்", "notifications.column_settings.reblog": "மதிப்பை உயர்த்து:", "notifications.column_settings.show": "பத்தியில் காண்பி", "notifications.column_settings.sound": "ஒலி விளையாட", @@ -274,11 +296,13 @@ "notifications.filter.follows": "பின்பற்று", "notifications.filter.mentions": "குறிப்பிடுகிறார்", "notifications.filter.polls": "கருத்துக்கணிப்பு முடிவுகள்", - "notifications.group": "{count} notifications", + "notifications.group": "{count} அறிவிப்புகள்", "poll.closed": "மூடிய", "poll.refresh": "பத்துயிர்ப்ப?ட்டு", + "poll.total_people": "{count, plural, one {# நபர்} other {# நபர்கள்}}", "poll.total_votes": "{count, plural, one {# vote} மற்ற {# votes}}", "poll.vote": "வாக்களி", + "poll.voted": "உங்கள் தேர்வு", "poll_button.add_poll": "வாக்கெடுப்பைச் சேர்க்கவும்", "poll_button.remove_poll": "வாக்கெடுப்பை அகற்று", "privacy.change": "நிலை தனியுரிமை", @@ -287,41 +311,43 @@ "privacy.private.long": "பின்தொடர்பவர்களுக்கு மட்டுமே இடுகை", "privacy.private.short": "பின்பற்றுபவர்கள் மட்டும்", "privacy.public.long": "பொது நேரங்களுக்கான இடுகை", - "privacy.public.short": "Public", + "privacy.public.short": "பொது", "privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.short": "பட்டியலிடப்படாத", + "refresh": "புதுப்பி", "regeneration_indicator.label": "சுமையேற்றம்…", "regeneration_indicator.sublabel": "உங்கள் வீட்டு ஊட்டம் தயார் செய்யப்படுகிறது!", - "relative_time.days": "{number}d", - "relative_time.hours": "{number}h", + "relative_time.days": "{number}நா", + "relative_time.hours": "{number}ம", "relative_time.just_now": "இப்பொழுது", - "relative_time.minutes": "{number}m", - "relative_time.seconds": "{number}s", + "relative_time.minutes": "{number}நி", + "relative_time.seconds": "{number}வி", "reply_indicator.cancel": "எதிராணை", "report.forward": "முன்னோக்கி {target}", "report.forward_hint": "கணக்கு மற்றொரு சேவையகத்திலிருந்து வருகிறது. அறிக்கையின் அநாமதேய பிரதி ஒன்றை அனுப்பவும்.?", "report.hint": "அறிக்கை உங்கள் மாதிரியாக மாற்றியமைக்கப்படும். கீழே உள்ள கணக்கை நீங்கள் ஏன் புகாரளிக்கிறீர்கள் என்பதற்கான விளக்கத்தை வழங்கலாம்:", "report.placeholder": "கூடுதல் கருத்துரைகள்", - "report.submit": "Submit", + "report.submit": "சமர்ப்பி", "report.target": "Report {target}", "search.placeholder": "தேடு", "search_popout.search_format": "மேம்பட்ட தேடல் வடிவம்", "search_popout.tips.full_text": "எளிமையான உரை நீங்கள் எழுதப்பட்ட, புகழ், அதிகரித்தது, அல்லது குறிப்பிட்டுள்ள, அதே போல் பயனர் பெயர்கள், காட்சி பெயர்கள், மற்றும் ஹேஸ்டேகைகளை கொண்டுள்ளது என்று நிலைகளை கொடுக்கிறது.", "search_popout.tips.hashtag": "ஹேஸ்டேக்", - "search_popout.tips.status": "status", + "search_popout.tips.status": "நிலைமை", "search_popout.tips.text": "எளிய உரை காட்சி பெயர்கள், பயனர்பெயர்கள் மற்றும் ஹாஷ்டேட்களுடன் பொருந்துகிறது", - "search_popout.tips.user": "user", - "search_results.accounts": "People", + "search_popout.tips.user": "பயனர்", + "search_results.accounts": "மக்கள்", "search_results.hashtags": "ஹாஷ்டேக்குகளைச்", - "search_results.statuses": "Toots", + "search_results.statuses": "டூட்டுகள்", + "search_results.statuses_fts_disabled": "டூட்டுகளின் வார்த்தைகளைக்கொண்டு தேடுவது இந்த மச்டோடன் வழங்கியில் இயல்விக்கப்படவில்லை.", "search_results.total": "{count, number} {count, plural, one {result} மற்ற {results}}", "status.admin_account": "மிதமான இடைமுகத்தை திறக்க @{name}", "status.admin_status": "மிதமான இடைமுகத்தில் இந்த நிலையை திறக்கவும்", - "status.block": "Block @{name}", + "status.block": "@{name} -ஐத் தடு", "status.cancel_reblog_private": "இல்லை பூஸ்ட்", "status.cannot_reblog": "இந்த இடுகை அதிகரிக்க முடியாது", "status.copy": "நிலைக்கு இணைப்பை நகலெடு", - "status.delete": "Delete", + "status.delete": "நீக்கு", "status.detailed_status": "விரிவான உரையாடல் காட்சி", "status.direct": "நேரடி செய்தி @{name}", "status.embed": "கிடத்து", @@ -344,7 +370,7 @@ "status.redraft": "நீக்கு மற்றும் மீண்டும் வரைவு", "status.reply": "பதில்", "status.replyAll": "நூலுக்கு பதிலளிக்கவும்", - "status.report": "Report @{name}", + "status.report": "@{name} மீது புகாரளி", "status.sensitive_warning": "உணர்திறன் உள்ளடக்கம்", "status.share": "பங்கிடு", "status.show_less": "குறைவாகக் காண்பி", @@ -352,14 +378,15 @@ "status.show_more": "மேலும் காட்ட", "status.show_more_all": "அனைவருக்கும் மேலும் காட்டு", "status.show_thread": "நூல் காட்டு", + "status.uncached_media_warning": "கிடைக்கவில்லை", "status.unmute_conversation": "ஊமையாக உரையாடல் இல்லை", "status.unpin": "சுயவிவரத்திலிருந்து நீக்கவும்", "suggestions.dismiss": "பரிந்துரை விலக்க", "suggestions.header": "நீங்கள் ஆர்வமாக இருக்கலாம் …", - "tabs_bar.federated_timeline": "Federated", - "tabs_bar.home": "Home", - "tabs_bar.local_timeline": "Local", - "tabs_bar.notifications": "Notifications", + "tabs_bar.federated_timeline": "கூட்டமைந்த", + "tabs_bar.home": "முகப்பு", + "tabs_bar.local_timeline": "உள்ளூர்", + "tabs_bar.notifications": "அறிவிப்புகள்", "tabs_bar.search": "தேடு", "time_remaining.days": "{number, plural, one {# day} மற்ற {# days}} left", "time_remaining.hours": "{number, plural, one {# hour} மற்ற {# hours}} left", @@ -367,22 +394,30 @@ "time_remaining.moments": "தருணங்கள் மீதமுள்ளன", "time_remaining.seconds": "{number, plural, one {# second} மற்ற {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} மற்ற {people}} உரையாடு", + "trends.trending_now": "இப்போது செல்திசையில் இருப்பவை", "ui.beforeunload": "நீங்கள் வெளியே சென்றால் உங்கள் வரைவு இழக்கப்படும் மஸ்தோடோன்.", "upload_area.title": "பதிவேற்ற & இழுக்கவும்", "upload_button.label": "மீடியாவைச் சேர்க்கவும் (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "கோப்பு பதிவேற்ற வரம்பு மீறப்பட்டது.", "upload_error.poll": "கோப்பு பதிவேற்றம் அனுமதிக்கப்படவில்லை.", "upload_form.description": "பார்வையற்ற விவரிக்கவும்", - "upload_form.focus": "மாற்றம் முன்னோட்டம்", - "upload_form.undo": "Delete", + "upload_form.edit": "தொகு", + "upload_form.undo": "நீக்கு", + "upload_modal.analyzing_picture": "படம் ஆராயப்படுகிறது…", + "upload_modal.apply": "உபயோகி", + "upload_modal.description_placeholder": "பொருள் விளக்கம்", + "upload_modal.detect_text": "படத்தில் இருக்கும் எழுத்தை கண்டறி", + "upload_modal.edit_media": "படத்தைத் தொகு", + "upload_modal.hint": "எல்லா வில்லைப்பட்த்திலும் தெரியவேண்டிய, படத்தின் முக்கிய குவியப்புள்ளிக்கு, வட்டத்தை சொடுக்கி இழுத்துச்செல்லவும்.", + "upload_modal.preview_label": "முன்னோட்டம் ({ratio})", "upload_progress.label": "ஏற்றுகிறது ...", "video.close": "வீடியோவை மூடு", "video.exit_fullscreen": "முழு திரையில் இருந்து வெளியேறவும்", "video.expand": "வீடியோவை விரிவாக்கு", - "video.fullscreen": "Full screen", + "video.fullscreen": "முழுத்திரை", "video.hide": "வீடியோவை மறை", "video.mute": "ஒலி முடக்கவும்", - "video.pause": "Pause", + "video.pause": "இடைநிறுத்து", "video.play": "விளையாடு", "video.unmute": "ஒலி மெளனமாக இல்லை" } diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 269ea45c3..3cfbc5786 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -4,6 +4,7 @@ "account.block": "@{name} ను బ్లాక్ చేయి", "account.block_domain": "{domain} నుంచి అన్నీ దాచిపెట్టు", "account.blocked": "బ్లాక్ అయినవి", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "@{name}కు నేరుగా సందేశం పంపు", "account.domain_blocked": "డొమైన్ దాచిపెట్టబడినది", "account.edit_profile": "ప్రొఫైల్ని సవరించండి", @@ -15,6 +16,7 @@ "account.follows.empty": "ఈ వినియోగదారి ఇంకా ఎవరినీ అనుసరించడంలేదు.", "account.follows_you": "మిమ్మల్ని అనుసరిస్తున్నారు", "account.hide_reblogs": "@{name} నుంచి బూస్ట్ లను దాచిపెట్టు", + "account.last_status": "Last active", "account.link_verified_on": "ఈ లంకె యొక్క యాజమాన్యం {date}న పరీక్షించబడింది", "account.locked_info": "ఈ ఖాతా యొక్క గోప్యత స్థితి లాక్ చేయబడి వుంది. ఈ ఖాతాను ఎవరు అనుసరించవచ్చో యజమానే నిర్ణయం తీసుకుంటారు.", "account.media": "మీడియా", @@ -23,6 +25,7 @@ "account.mute": "@{name}ను మ్యూట్ చెయ్యి", "account.mute_notifications": "@{name}నుంచి ప్రకటనలను మ్యూట్ చెయ్యి", "account.muted": "మ్యూట్ అయినవి", + "account.never_active": "Never", "account.posts": "టూట్లు", "account.posts_with_replies": "టూట్లు మరియు ప్రత్యుత్తరములు", "account.report": "@{name}పై ఫిర్యాదుచేయు", @@ -35,8 +38,11 @@ "account.unfollow": "అనుసరించవద్దు", "account.unmute": "@{name}పై మ్యూట్ ని తొలగించు", "account.unmute_notifications": "@{name} నుంచి ప్రకటనలపై మ్యూట్ ని తొలగించు", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "అనుకోని తప్పు జరిగినది.", "alert.unexpected.title": "అయ్యో!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "మీరు తదుపరిసారి దీనిని దాటవేయడానికి {combo} నొక్కవచ్చు", "bundle_column_error.body": "ఈ భాగం లోడ్ అవుతున్నప్పుడు ఏదో తప్పు జరిగింది.", "bundle_column_error.retry": "మళ్ళీ ప్రయత్నించండి", @@ -47,6 +53,7 @@ "column.blocks": "బ్లాక్ చేయబడిన వినియోగదారులు", "column.community": "స్థానిక కాలక్రమం", "column.direct": "ప్రత్యక్ష సందేశాలు", + "column.directory": "Browse profiles", "column.domain_blocks": "దాచిన డొమైన్లు", "column.favourites": "ఇష్టపడినవి", "column.follow_requests": "అనుసరించడానికి అభ్యర్ధనలు", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "మీరు ఖచ్చితంగా ఈ జాబితాను శాశ్వతంగా తొలగించాలనుకుంటున్నారా?", "confirmations.domain_block.confirm": "మొత్తం డొమైన్ను దాచు", "confirmations.domain_block.message": "మీరు నిజంగా నిజంగా మొత్తం {domain} ని బ్లాక్ చేయాలనుకుంటున్నారా? చాలా సందర్భాలలో కొన్ని లక్ష్యంగా ఉన్న బ్లాక్స్ లేదా మ్యూట్స్ సరిపోతాయి మరియు ఉత్తమమైనవి. మీరు ఆ డొమైన్ నుండి కంటెంట్ను ఏ ప్రజా కాలక్రమాలలో లేదా మీ నోటిఫికేషన్లలో చూడలేరు. ఆ డొమైన్ నుండి మీ అనుచరులు తీసివేయబడతారు.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "మ్యూట్ చేయి", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "{name}ను మీరు ఖచ్చితంగా మ్యూట్ చేయాలనుకుంటున్నారా?", "confirmations.redraft.confirm": "తొలగించు & తిరగరాయు", "confirmations.redraft.message": "మీరు ఖచ్చితంగా ఈ స్టేటస్ ని తొలగించి తిరగరాయాలనుకుంటున్నారా? ఈ స్టేటస్ యొక్క బూస్ట్ లు మరియు ఇష్టాలు పోతాయి,మరియు ప్రత్యుత్తరాలు అనాధలు అయిపోతాయి.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "ఇప్పుడే ప్రత్యుత్తరం ఇస్తే మీరు ప్రస్తుతం వ్రాస్తున్న సందేశం తిరగరాయబడుతుంది. మీరు ఖచ్చితంగా కొనసాగించాలనుకుంటున్నారా?", "confirmations.unfollow.confirm": "అనుసరించవద్దు", "confirmations.unfollow.message": "{name}ను మీరు ఖచ్చితంగా అనుసరించవద్దనుకుంటున్నారా?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "దిగువ కోడ్ను కాపీ చేయడం ద్వారా మీ వెబ్సైట్లో ఈ స్టేటస్ ని పొందుపరచండి.", "embed.preview": "అది ఈ క్రింది విధంగా కనిపిస్తుంది:", "emoji_button.activity": "కార్యకలాపాలు", @@ -134,6 +152,10 @@ "empty_column.mutes": "మీరు ఇంకా ఏ వినియోగదారులనూ మ్యూట్ చేయలేదు.", "empty_column.notifications": "మీకు ఇంకా ఏ నోటిఫికేషన్లు లేవు. సంభాషణను ప్రారంభించడానికి ఇతరులతో ప్రతిస్పందించండి.", "empty_column.public": "ఇక్కడ ఏమీ లేదు! దీన్ని నింపడానికి బహిరంగంగా ఏదైనా వ్రాయండి, లేదా ఇతర సేవికల నుండి వినియోగదారులను అనుసరించండి", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "అనుమతించు", "follow_request.reject": "తిరస్కరించు", "getting_started.developers": "డెవలపర్లు", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "కొత్త జాబితా శీర్షిక", "lists.search": "మీరు అనుసరించే వ్యక్తులలో శోధించండి", "lists.subheading": "మీ జాబితాలు", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "లోడ్ అవుతోంది...", "media_gallery.toggle_visible": "దృశ్యమానతను టోగుల్ చేయండి", "missing_indicator.label": "దొరకలేదు", @@ -246,7 +269,6 @@ "navigation_bar.personal": "వ్యక్తిగతం", "navigation_bar.pins": "అతికించిన టూట్లు", "navigation_bar.preferences": "ప్రాధాన్యతలు", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "సమాఖ్య కాలక్రమం", "navigation_bar.security": "భద్రత", "notification.favourite": "{name} మీ స్టేటస్ ను ఇష్టపడ్డారు", @@ -277,8 +299,10 @@ "notifications.group": "{count} ప్రకటనలు", "poll.closed": "మూసివేయబడినవి", "poll.refresh": "నవీకరించు", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "ఎన్నుకోండి", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "ఒక ఎన్నికను చేర్చు", "poll_button.remove_poll": "ఎన్నికను తొలగించు", "privacy.change": "స్టేటస్ గోప్యతను సర్దుబాటు చేయండి", @@ -290,6 +314,7 @@ "privacy.public.short": "ప్రజా", "privacy.unlisted.long": "ప్రజా కాలక్రమాలలో చూపించవద్దు", "privacy.unlisted.short": "జాబితా చేయబడనిది", + "refresh": "Refresh", "regeneration_indicator.label": "లోడ్ అవుతోంది…", "regeneration_indicator.sublabel": "మీ హోమ్ ఫీడ్ సిద్ధమవుతోంది!", "relative_time.days": "{number}d", @@ -314,6 +339,7 @@ "search_results.accounts": "వ్యక్తులు", "search_results.hashtags": "హాష్ ట్యాగ్లు", "search_results.statuses": "టూట్లు", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} {count, plural, one {result} other {results}}", "status.admin_account": "@{name} కొరకు సమన్వయ వినిమయసీమను తెరువు", "status.admin_status": "సమన్వయ వినిమయసీమలో ఈ స్టేటస్ ను తెరవండి", @@ -352,6 +378,7 @@ "status.show_more": "ఇంకా చూపించు", "status.show_more_all": "అన్నిటికీ ఇంకా చూపించు", "status.show_thread": "గొలుసును చూపించు", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "సంభాషణను అన్మ్యూట్ చేయి", "status.unpin": "ప్రొఫైల్ నుండి పీకివేయు", "suggestions.dismiss": "సూచనను రద్దు చేయి", @@ -367,14 +394,22 @@ "time_remaining.moments": "కొన్ని క్షణాలు మాత్రమే మిగిలి ఉన్నాయి", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} మాట్లాడుతున్నారు", + "trends.trending_now": "Trending now", "ui.beforeunload": "మీరు మాస్టొడొన్ను వదిలివేస్తే మీ డ్రాఫ్ట్లు పోతాయి.", "upload_area.title": "అప్లోడ్ చేయడానికి డ్రాగ్ & డ్రాప్ చేయండి", "upload_button.label": "మీడియాను జోడించండి (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "దృష్టి లోపమున్న వారి కోసం వివరించండి", - "upload_form.focus": "ప్రివ్యూను మార్చు", + "upload_form.edit": "Edit", "upload_form.undo": "తొలగించు", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "అప్లోడ్ అవుతోంది...", "video.close": "వీడియోని మూసివేయి", "video.exit_fullscreen": "పూర్తి స్క్రీన్ నుండి నిష్క్రమించు", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index bd042c1d1..7db168338 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -1,9 +1,10 @@ { "account.add_or_remove_from_list": "เพิ่มหรือเอาออกจากรายการ", "account.badges.bot": "บอต", - "account.block": "ปิดกั้น @{name}", + "account.block": "บล็อค @{name}", "account.block_domain": "ซ่อนทุกอย่างจาก {domain}", - "account.blocked": "ปิดกั้นอยู่", + "account.blocked": "ถูกบล็อค", + "account.cancel_follow_request": "ยกเลิกคำขอติดตาม", "account.direct": "ส่งข้อความโดยตรงถึง @{name}", "account.domain_blocked": "ซ่อนโดเมนอยู่", "account.edit_profile": "แก้ไขโปรไฟล์", @@ -11,18 +12,20 @@ "account.follow": "ติดตาม", "account.followers": "ผู้ติดตาม", "account.followers.empty": "ยังไม่มีใครติดตามผู้ใช้นี้", - "account.follows": "ติดตาม", + "account.follows": "การติดตาม", "account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร", "account.follows_you": "ติดตามคุณ", "account.hide_reblogs": "ซ่อนการดันจาก @{name}", + "account.last_status": "ใช้งานล่าสุด", "account.link_verified_on": "ตรวจสอบความเป็นเจ้าของของลิงก์นี้เมื่อ {date}", - "account.locked_info": "บัญชีนี้ถูกล็อคไว้ เจ้าของจะต้องรับรองการติดตามของคุณด้วย", + "account.locked_info": "มีการตั้งสถานะความเป็นส่วนตัวของบัญชีนี้เป็นล็อคอยู่ เจ้าของตรวจทานผู้ที่สามารถติดตามเขาด้วยตนเอง", "account.media": "สื่อ", "account.mention": "กล่าวถึง @{name}", "account.moved_to": "{name} ได้ย้ายไปยัง:", "account.mute": "ปิดเสียง @{name}", "account.mute_notifications": "ปิดเสียงการแจ้งเตือนจาก @{name}", "account.muted": "ปิดเสียงอยู่", + "account.never_active": "ไม่เลย", "account.posts": "โพสต์", "account.posts_with_replies": "โพสต์และการตอบกลับ", "account.report": "รายงาน @{name}", @@ -35,9 +38,12 @@ "account.unfollow": "เลิกติดตาม", "account.unmute": "เลิกปิดเสียง @{name}", "account.unmute_notifications": "เลิกปิดเสียงการแจ้งเตือนจาก @{name}", + "alert.rate_limited.message": "โปรดลองใหม่หลังจาก {retry_time, time, medium}", + "alert.rate_limited.title": "เข้าใช้งานบ่อยเกินไป", "alert.unexpected.message": "เกิดข้อผิดพลาดที่ไม่คาดคิด", "alert.unexpected.title": "อุปส์!", - "boost_modal.combo": "กด {combo} เพื่อข้าม", + "autosuggest_hashtag.per_week": "{count} ต่อสัปดาห์", + "boost_modal.combo": "คุณสามารถกด {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป", "bundle_column_error.body": "มีบางอย่างผิดพลาดขณะโหลดส่วนประกอบนี้", "bundle_column_error.retry": "ลองอีกครั้ง", "bundle_column_error.title": "ข้อผิดพลาดเครือข่าย", @@ -47,6 +53,7 @@ "column.blocks": "ผู้ใช้ที่ปิดกั้นอยู่", "column.community": "เส้นเวลาในเว็บ", "column.direct": "ข้อความโดยตรง", + "column.directory": "เรียกดูโปรไฟล์", "column.domain_blocks": "โดเมนที่ซ่อนอยู่", "column.favourites": "รายการโปรด", "column.follow_requests": "คำขอติดตาม", @@ -65,23 +72,23 @@ "column_header.unpin": "ถอนหมุด", "column_subheading.settings": "การตั้งค่า", "community.column_settings.media_only": "สื่อเท่านั้น", - "compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.", + "compose_form.direct_message_warning": "จะส่งโพสต์นี้ไปยังผู้ใช้ที่กล่าวถึงเท่านั้น", "compose_form.direct_message_warning_learn_more": "เรียนรู้เพิ่มเติม", - "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", - "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", - "compose_form.lock_disclaimer.lock": "locked", - "compose_form.placeholder": "What is on your mind?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.hashtag_warning": "จะไม่แสดงรายการโพสต์นี้ภายใต้แฮชแท็กใด ๆ เนื่องจากไม่อยู่ในรายการ เฉพาะโพสต์สาธารณะเท่านั้นที่สามารถค้นหาโดยแฮชแท็ก", + "compose_form.lock_disclaimer": "บัญชีของคุณไม่ได้ {locked} ใครก็ตามสามารถติดตามคุณเพื่อดูโพสต์สำหรับผู้ติดตามเท่านั้นของคุณ", + "compose_form.lock_disclaimer.lock": "ล็อคอยู่", + "compose_form.placeholder": "คุณกำลังคิดอะไรอยู่?", + "compose_form.poll.add_option": "เพิ่มทางเลือก", + "compose_form.poll.duration": "ระยะเวลาโพล", + "compose_form.poll.option_placeholder": "ทางเลือก {number}", + "compose_form.poll.remove_option": "เอาทางเลือกนี้ออก", "compose_form.publish": "โพสต์", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Media is marked as sensitive", - "compose_form.sensitive.unmarked": "Media is not marked as sensitive", - "compose_form.spoiler.marked": "Text is hidden behind warning", - "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.sensitive.hide": "ทำเครื่องหมายสื่อว่าละเอียดอ่อน", + "compose_form.sensitive.marked": "มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน", + "compose_form.sensitive.unmarked": "ไม่มีการทำเครื่องหมายสื่อว่าละเอียดอ่อน", + "compose_form.spoiler.marked": "มีการซ่อนข้อความอยู่หลังคำเตือน", + "compose_form.spoiler.unmarked": "ไม่มีการซ่อนข้อความ", "compose_form.spoiler_placeholder": "เขียนคำเตือนของคุณที่นี่", "confirmation_modal.cancel": "ยกเลิก", "confirmations.block.block_and_report": "ปิดกั้นแล้วรายงาน", @@ -91,25 +98,36 @@ "confirmations.delete.message": "คุณแน่ใจหรือไม่ว่าต้องการลบสถานะนี้?", "confirmations.delete_list.confirm": "ลบ", "confirmations.delete_list.message": "คุณแน่ใจหรือไม่ว่าต้องการลบรายการนี้อย่างถาวร?", - "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.confirm": "ซ่อนทั้งโดเมน", "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.", + "confirmations.logout.confirm": "ออกจากระบบ", + "confirmations.logout.message": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?", "confirmations.mute.confirm": "ปิดเสียง", + "confirmations.mute.explanation": "การกระทำนี้จะซ่อนโพสต์ของเขาและโพสต์ที่มีการกล่าวถึงเขา แต่ยังอนุญาตให้เขาเห็นโพสต์ของคุณและติดตามคุณได้", "confirmations.mute.message": "คุณแน่ใจหรือไม่ว่าต้องการปิดเสียง {name}?", "confirmations.redraft.confirm": "ลบแล้วร่างใหม่", - "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.", + "confirmations.redraft.message": "คุณแน่ใจหรือไม่ว่าต้องการลบสถานะนี้แล้วร่างใหม่? รายการโปรดและการดันจะหายไป และการตอบกลับโพสต์ดั้งเดิมจะไม่มีความเกี่ยวพัน", "confirmations.reply.confirm": "ตอบกลับ", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.message": "การตอบกลับตอนนี้จะเขียนทับข้อความที่คุณกำลังเขียน คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?", "confirmations.unfollow.confirm": "เลิกติดตาม", "confirmations.unfollow.message": "คุณแน่ใจหรือไม่ว่าต้องการเลิกติดตาม {name}?", - "embed.instructions": "Embed this status on your website by copying the code below.", - "embed.preview": "Here is what it will look like:", + "conversation.delete": "ลบการสนทนา", + "conversation.mark_as_read": "ทำเครื่องหมายว่าอ่านแล้ว", + "conversation.open": "ดูการสนทนา", + "conversation.with": "กับ {names}", + "directory.federated": "จากเฟดิเวิร์สที่รู้จัก", + "directory.local": "จาก {domain} เท่านั้น", + "directory.new_arrivals": "มาใหม่", + "directory.recently_active": "ใช้งานล่าสุด", + "embed.instructions": "ฝังสถานะนี้ในเว็บไซต์ของคุณโดยคัดลอกโค้ดด้านล่าง", + "embed.preview": "นี่คือลักษณะที่จะปรากฏ:", "emoji_button.activity": "กิจกรรม", "emoji_button.custom": "กำหนดเอง", "emoji_button.flags": "ธง", "emoji_button.food": "อาหารและเครื่องดื่ม", "emoji_button.label": "แทรกอีโมจิ", "emoji_button.nature": "ธรรมชาติ", - "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "ไม่มีอีโมโจ!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "วัตถุ", "emoji_button.people": "ผู้คน", "emoji_button.recent": "ที่ใช้บ่อย", @@ -118,22 +136,26 @@ "emoji_button.symbols": "สัญลักษณ์", "emoji_button.travel": "การเดินทางและสถานที่", "empty_column.account_timeline": "ไม่มีโพสต์ที่นี่!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", - "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", - "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.account_unavailable": "ไม่มีโปรไฟล์", + "empty_column.blocks": "คุณยังไม่ได้ปิดกั้นผู้ใช้ใด ๆ", + "empty_column.community": "เส้นเวลาในเว็บว่างเปล่า เขียนบางอย่างเป็นสาธารณะเพื่อเริ่มต้น!", + "empty_column.direct": "คุณยังไม่มีข้อความโดยตรงใด ๆ เมื่อคุณส่งหรือรับข้อความ ข้อความจะปรากฏที่นี่", "empty_column.domain_blocks": "ยังไม่มีโดเมนที่ซ่อนอยู่", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", - "empty_column.hashtag": "There is nothing in this hashtag yet.", - "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.favourited_statuses": "คุณยังไม่มีโพสต์ที่ชื่นชอบใด ๆ เมื่อคุณชื่นชอบโพสต์ โพสต์จะปรากฏที่นี่", + "empty_column.favourites": "ยังไม่มีใครชื่นชอบโพสต์นี้ เมื่อใครสักคนชื่นชอบ เขาจะปรากฏที่นี่", + "empty_column.follow_requests": "คุณยังไม่มีคำขอติดตามใด ๆ เมื่อคุณได้รับคำขอ คำขอจะปรากฏที่นี่", + "empty_column.hashtag": "ยังไม่มีสิ่งใดในแฮชแท็กนี้", + "empty_column.home": "เส้นเวลาหน้าแรกของคุณว่างเปล่า! เยี่ยมชม {public} หรือใช้การค้นหาเพื่อเริ่มต้นใช้งานและพบปะผู้ใช้อื่น ๆ", "empty_column.home.public_timeline": "เส้นเวลาสาธารณะ", - "empty_column.list": "There is nothing in this list yet.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", - "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", - "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", + "empty_column.list": "ยังไม่มีสิ่งใดในรายการนี้ เมื่อสมาชิกของรายการนี้โพสต์สถานะใหม่ สถานะจะปรากฏที่นี่", + "empty_column.lists": "คุณยังไม่มีรายการใด ๆ เมื่อคุณสร้างรายการ รายการจะปรากฏที่นี่", + "empty_column.mutes": "คุณยังไม่ได้ปิดเสียงผู้ใช้ใด ๆ", + "empty_column.notifications": "คุณยังไม่มีการแจ้งเตือนใด ๆ โต้ตอบกับผู้อื่นเพื่อเริ่มการสนทนา", + "empty_column.public": "ไม่มีสิ่งใดที่นี่! เขียนบางอย่างเป็นสาธารณะ หรือติดตามผู้ใช้จากเซิร์ฟเวอร์อื่น ๆ ด้วยตนเองเพื่อเติมให้เต็ม", + "error.unexpected_crash.explanation": "หน้านี้ไม่สามารถแสดงผลได้อย่างถูกต้อง เนื่องจากบั๊กในโค้ดของเราหรือปัญหาความเข้ากับได้กับเบราเซอร์", + "error.unexpected_crash.next_steps": "ลองรีเฟรชหน้านี้ หากไม่สามารถช่วยได้ คุณอาจจะยังคงใช้ Mastodon ผ่านเบราเซอร์อื่นหรือผ่านแอปได้", + "errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด", + "errors.unexpected_crash.report_issue": "รายงานปัญหา", "follow_request.authorize": "อนุญาต", "follow_request.reject": "ปฏิเสธ", "getting_started.developers": "นักพัฒนา", @@ -141,7 +163,7 @@ "getting_started.documentation": "เอกสารประกอบ", "getting_started.heading": "เริ่มต้นใช้งาน", "getting_started.invite": "เชิญผู้คน", - "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.open_source_notice": "Mastodon เป็นซอฟต์แวร์เปิดต้นฉบับ คุณสามารถมีส่วนร่วมหรือรายงานปัญหาที่ GitHub ที่ {github}", "getting_started.security": "ความปลอดภัย", "getting_started.terms": "เงื่อนไขการให้บริการ", "hashtag.column_header.tag_mode.all": "และ {additional}", @@ -149,69 +171,69 @@ "hashtag.column_header.tag_mode.none": "โดยไม่มี {additional}", "hashtag.column_settings.select.no_options_message": "ไม่พบข้อเสนอแนะ", "hashtag.column_settings.select.placeholder": "ป้อนแฮชแท็ก…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_settings.tag_mode.all": "ทั้งหมดนี้", + "hashtag.column_settings.tag_mode.any": "ใดก็ตามนี้", + "hashtag.column_settings.tag_mode.none": "ไม่ใช่ทั้งหมดนี้", + "hashtag.column_settings.tag_toggle": "รวมแท็กเพิ่มเติมสำหรับคอลัมน์นี้", "home.column_settings.basic": "พื้นฐาน", "home.column_settings.show_reblogs": "แสดงการดัน", "home.column_settings.show_replies": "แสดงการตอบกลับ", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.days": "{number, plural, other {# วัน}}", + "intervals.full.hours": "{number, plural, other {# ชั่วโมง}}", + "intervals.full.minutes": "{number, plural, other {# นาที}}", "introduction.federation.action": "ถัดไป", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", - "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", - "keyboard_shortcuts.boost": "to boost", - "keyboard_shortcuts.column": "to focus a status in one of the columns", - "keyboard_shortcuts.compose": "to focus the compose textarea", + "introduction.federation.federated.headline": "ที่ติดต่อกับภายนอก", + "introduction.federation.federated.text": "โพสต์สาธารณะจากเซิร์ฟเวอร์อื่น ๆ ของเฟดิเวิร์สจะปรากฏในเส้นเวลาที่ติดต่อกับภายนอก", + "introduction.federation.home.headline": "หน้าแรก", + "introduction.federation.home.text": "โพสต์จากผู้คนที่คุณติดตามจะปรากฏในฟีดหน้าแรกของคุณ คุณสามารถติดตามใครก็ตามในเซิร์ฟเวอร์ใดก็ตาม!", + "introduction.federation.local.headline": "ในเว็บ", + "introduction.federation.local.text": "โพสต์สาธารณะจากผู้คนในเซิร์ฟเวอร์เดียวกันกับคุณจะปรากฏในเส้นเวลาในเว็บ", + "introduction.interactions.action": "เสร็จสิ้นบทช่วยสอน!", + "introduction.interactions.favourite.headline": "ชื่นชอบ", + "introduction.interactions.favourite.text": "คุณสามารถบันทึกโพสต์เพื่ออ่านทีหลัง และแจ้งให้ผู้เขียนโพสต์ทราบว่าคุณชอบโพสต์นั้นโดยการชื่นชอบโพสต์", + "introduction.interactions.reblog.headline": "ดัน", + "introduction.interactions.reblog.text": "คุณสามารถแชร์โพสต์ของผู้อื่นให้กับผู้ติดตามของคุณได้โดยการดันโพสต์", + "introduction.interactions.reply.headline": "ตอบกลับ", + "introduction.interactions.reply.text": "คุณสามารถตอบกลับโพสต์ของผู้อื่นและโพสต์ของคุณได้ ซึ่งจะถูกรวมเข้าด้วยกันเป็นบทสนทนา", + "introduction.welcome.action": "ไปกันเลย!", + "introduction.welcome.headline": "ขั้นตอนแรก", + "introduction.welcome.text": "ยินดีต้อนรับสู่เฟดิเวิร์ส! ในอีกสักครู่คุณจะได้เผยแพร่ข้อความและคุยกับเพื่อนของคุณในหลากหลายเซิร์ฟเวอร์ แต่เซิร์ฟเวอร์ {domain} นี้มีความพิเศษ เพราะเป็นที่ที่โปรไฟล์ของคุณตั้งอยู่ จำชื่อไว้ด้วยนะ", + "keyboard_shortcuts.back": "เพื่อนำทางย้อนกลับ", + "keyboard_shortcuts.blocked": "เพื่อเปิดรายการผู้ใช้ที่ปิดกั้นอยู่", + "keyboard_shortcuts.boost": "เพื่อดัน", + "keyboard_shortcuts.column": "เพื่อโฟกัสสถานะในหนึ่งในคอลัมน์", + "keyboard_shortcuts.compose": "เพื่อโฟกัสพื้นที่เขียนข้อความ", "keyboard_shortcuts.description": "คำอธิบาย", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.favourite": "to favourite", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.direct": "เพื่อเปิดคอลัมน์ข้อความโดยตรง", + "keyboard_shortcuts.down": "เพื่อย้ายลงในรายการ", + "keyboard_shortcuts.enter": "เพื่อเปิดสถานะ", + "keyboard_shortcuts.favourite": "เพื่อชื่นชอบ", + "keyboard_shortcuts.favourites": "เพื่อเปิดรายการโปรด", + "keyboard_shortcuts.federated": "เพื่อเปิดเส้นเวลาที่ติดต่อกับภายนอก", + "keyboard_shortcuts.heading": "แป้นพิมพ์ลัด", + "keyboard_shortcuts.home": "เพื่อเปิดเส้นเวลาหน้าแรก", "keyboard_shortcuts.hotkey": "ปุ่มลัด", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.pinned": "to open pinned toots list", - "keyboard_shortcuts.profile": "to open author's profile", - "keyboard_shortcuts.reply": "to reply", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new toot", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.legend": "เพื่อแสดงคำอธิบายนี้", + "keyboard_shortcuts.local": "เพื่อเปิดเส้นเวลาในเว็บ", + "keyboard_shortcuts.mention": "เพื่อกล่าวถึงผู้สร้าง", + "keyboard_shortcuts.muted": "เพื่อเปิดรายการผู้ใช้ที่ปิดเสียงอยู่", + "keyboard_shortcuts.my_profile": "เพื่อเปิดโปรไฟล์ของคุณ", + "keyboard_shortcuts.notifications": "เพื่อเปิดคอลัมน์การแจ้งเตือน", + "keyboard_shortcuts.pinned": "เพื่อเปิดรายการโพสต์ที่ปักหมุด", + "keyboard_shortcuts.profile": "เพื่อเปิดโปรไฟล์ของผู้สร้าง", + "keyboard_shortcuts.reply": "เพื่อตอบกลับ", + "keyboard_shortcuts.requests": "เพื่อเปิดรายการคำขอติดตาม", + "keyboard_shortcuts.search": "เพื่อโฟกัสการค้นหา", + "keyboard_shortcuts.start": "เพื่อเปิดคอลัมน์ \"เริ่มต้นใช้งาน\"", + "keyboard_shortcuts.toggle_hidden": "เพื่อแสดง/ซ่อนข้อความที่อยู่หลังคำเตือนเนื้อหา", + "keyboard_shortcuts.toggle_sensitivity": "เพื่อแสดง/ซ่อนสื่อ", + "keyboard_shortcuts.toot": "เพื่อเริ่มโพสต์ใหม่", + "keyboard_shortcuts.unfocus": "เพื่อเลิกโฟกัสพื้นที่เขียนข้อความ/การค้นหา", + "keyboard_shortcuts.up": "เพื่อย้ายขึ้นในรายการ", "lightbox.close": "ปิด", "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", - "lightbox.view_context": "View context", + "lightbox.view_context": "ดูบริบท", "lists.account.add": "เพิ่มไปยังรายการ", "lists.account.remove": "เอาออกจากรายการ", "lists.delete": "ลบรายการ", @@ -221,12 +243,13 @@ "lists.new.title_placeholder": "ชื่อเรื่องรายการใหม่", "lists.search": "ค้นหาในหมู่ผู้คนที่คุณติดตาม", "lists.subheading": "รายการของคุณ", + "load_pending": "{count, plural, other {# รายการใหม่}}", "loading_indicator.label": "กำลังโหลด...", "media_gallery.toggle_visible": "เปิด/ปิดการมองเห็น", "missing_indicator.label": "ไม่พบ", "missing_indicator.sublabel": "ไม่พบทรัพยากรนี้", "mute_modal.hide_notifications": "ซ่อนการแจ้งเตือนจากผู้ใช้นี้?", - "navigation_bar.apps": "แอปสำหรับมือถือ", + "navigation_bar.apps": "แอปมือถือ", "navigation_bar.blocks": "ผู้ใช้ที่ปิดกั้นอยู่", "navigation_bar.community_timeline": "เส้นเวลาในเว็บ", "navigation_bar.compose": "เขียนโพสต์ใหม่", @@ -237,7 +260,7 @@ "navigation_bar.favourites": "รายการโปรด", "navigation_bar.filters": "คำที่ปิดเสียงอยู่", "navigation_bar.follow_requests": "คำขอติดตาม", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "การติดตามและผู้ติดตาม", "navigation_bar.info": "เกี่ยวกับเซิร์ฟเวอร์นี้", "navigation_bar.keyboard_shortcuts": "ปุ่มลัด", "navigation_bar.lists": "รายการ", @@ -246,24 +269,23 @@ "navigation_bar.personal": "ส่วนบุคคล", "navigation_bar.pins": "โพสต์ที่ปักหมุด", "navigation_bar.preferences": "การกำหนดลักษณะ", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "เส้นเวลาที่ติดต่อกับภายนอก", "navigation_bar.security": "ความปลอดภัย", "notification.favourite": "{name} ได้ชื่นชอบสถานะของคุณ", "notification.follow": "{name} ได้ติดตามคุณ", "notification.mention": "{name} ได้กล่าวถึงคุณ", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "โพลที่คุณได้ลงคะแนนได้สิ้นสุดแล้ว", "notification.reblog": "{name} ได้ดันสถานะของคุณ", "notifications.clear": "ล้างการแจ้งเตือน", "notifications.clear_confirmation": "คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมดของคุณอย่างถาวร?", - "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.alert": "การแจ้งเตือนบนเดสก์ท็อป", "notifications.column_settings.favourite": "รายการโปรด:", "notifications.column_settings.filter_bar.advanced": "แสดงหมวดหมู่ทั้งหมด", "notifications.column_settings.filter_bar.category": "แถบตัวกรองด่วน", "notifications.column_settings.filter_bar.show": "แสดง", "notifications.column_settings.follow": "ผู้ติดตามใหม่:", "notifications.column_settings.mention": "การกล่าวถึง:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "ผลลัพธ์โพล:", "notifications.column_settings.push": "การแจ้งเตือนแบบผลัก", "notifications.column_settings.reblog": "การดัน:", "notifications.column_settings.show": "แสดงในคอลัมน์", @@ -273,15 +295,17 @@ "notifications.filter.favourites": "รายการโปรด", "notifications.filter.follows": "การติดตาม", "notifications.filter.mentions": "การกล่าวถึง", - "notifications.filter.polls": "Poll results", + "notifications.filter.polls": "ผลลัพธ์โพล", "notifications.group": "{count} การแจ้งเตือน", "poll.closed": "ปิดแล้ว", - "poll.refresh": "Refresh", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", - "privacy.change": "Adjust status privacy", + "poll.refresh": "รีเฟรช", + "poll.total_people": "{count, plural, other {# คน}}", + "poll.total_votes": "{count, plural, other {# การลงคะแนน}}", + "poll.vote": "ลงคะแนน", + "poll.voted": "คุณได้ลงคะแนนให้กับคำตอบนี้", + "poll_button.add_poll": "เพิ่มโพล", + "poll_button.remove_poll": "เอาโพลออก", + "privacy.change": "ปรับเปลี่ยนความเป็นส่วนตัวของสถานะ", "privacy.direct.long": "โพสต์ไปยังผู้ใช้ที่กล่าวถึงเท่านั้น", "privacy.direct.short": "โดยตรง", "privacy.private.long": "โพสต์ไปยังผู้ติดตามเท่านั้น", @@ -290,8 +314,9 @@ "privacy.public.short": "สาธารณะ", "privacy.unlisted.long": "ไม่โพสต์ไปยังเส้นเวลาสาธารณะ", "privacy.unlisted.short": "ไม่อยู่ในรายการ", + "refresh": "รีเฟรช", "regeneration_indicator.label": "กำลังโหลด…", - "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "regeneration_indicator.sublabel": "กำลังเตรียมฟีดหน้าแรกของคุณ!", "relative_time.days": "{number} วัน", "relative_time.hours": "{number} ชั่วโมง", "relative_time.just_now": "ตอนนี้", @@ -299,22 +324,23 @@ "relative_time.seconds": "{number} วินาที", "reply_indicator.cancel": "ยกเลิก", "report.forward": "ส่งต่อไปยัง {target}", - "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", - "report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", + "report.forward_hint": "บัญชีมาจากเซิร์ฟเวอร์อื่น ส่งสำเนาของรายงานที่ไม่ระบุตัวตนไปที่นั่นด้วย?", + "report.hint": "จะส่งรายงานไปยังผู้ควบคุมเซิร์ฟเวอร์ของคุณ คุณสามารถให้คำอธิบายเหตุผลที่คุณรายงานบัญชีนี้ด้านล่าง:", "report.placeholder": "ความคิดเห็นเพิ่มเติม", "report.submit": "ส่ง", "report.target": "กำลังรายงาน {target}", "search.placeholder": "ค้นหา", "search_popout.search_format": "รูปแบบการค้นหาขั้นสูง", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.full_text": "ข้อความแบบง่ายส่งคืนสถานะที่คุณได้เขียน ชื่นชอบ ดัน หรือได้รับการกล่าวถึง ตลอดจนชื่อผู้ใช้, ชื่อที่แสดง และแฮชแท็กที่ตรงกัน", "search_popout.tips.hashtag": "แฮชแท็ก", "search_popout.tips.status": "สถานะ", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.text": "ข้อความแบบง่ายส่งคืนชื่อที่แสดง, ชื่อผู้ใช้ และแฮชแท็กที่ตรงกัน", "search_popout.tips.user": "ผู้ใช้", "search_results.accounts": "ผู้คน", "search_results.hashtags": "แฮชแท็ก", "search_results.statuses": "โพสต์", - "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "search_results.statuses_fts_disabled": "การค้นหาเนื้อหาในโพสต์ถูกปิดบนเซิร์ฟเวอร์ Mastodon นี้", + "search_results.total": "{count, number} {count, plural, other {ผลลัพธ์}}", "status.admin_account": "เปิดส่วนติดต่อการควบคุมสำหรับ @{name}", "status.admin_status": "เปิดสถานะนี้ในส่วนติดต่อการควบคุม", "status.block": "ปิดกั้น @{name}", @@ -324,7 +350,7 @@ "status.delete": "ลบ", "status.detailed_status": "มุมมองการสนทนาโดยละเอียด", "status.direct": "ส่งข้อความโดยตรงถึง @{name}", - "status.embed": "Embed", + "status.embed": "ฝัง", "status.favourite": "ชื่นชอบ", "status.filtered": "กรองอยู่", "status.load_more": "โหลดเพิ่มเติม", @@ -340,7 +366,7 @@ "status.reblog": "ดัน", "status.reblog_private": "ดันไปยังผู้ชมดั้งเดิม", "status.reblogged_by": "{name} ได้ดัน", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.reblogs.empty": "ยังไม่มีใครดันโพสต์นี้ เมื่อใครสักคนดัน เขาจะปรากฏที่นี่", "status.redraft": "ลบแล้วร่างใหม่", "status.reply": "ตอบกลับ", "status.replyAll": "ตอบกลับกระทู้", @@ -352,6 +378,7 @@ "status.show_more": "แสดงเพิ่มเติม", "status.show_more_all": "แสดงเพิ่มเติมทั้งหมด", "status.show_thread": "แสดงกระทู้", + "status.uncached_media_warning": "ไม่สามารถดูได้", "status.unmute_conversation": "เลิกปิดเสียงการสนทนา", "status.unpin": "ถอนหมุดจากโปรไฟล์", "suggestions.dismiss": "ยกเลิกข้อเสนอแนะ", @@ -361,20 +388,28 @@ "tabs_bar.local_timeline": "ในเว็บ", "tabs_bar.notifications": "การแจ้งเตือน", "tabs_bar.search": "ค้นหา", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "time_remaining.days": "เหลืออีก {number, plural, other {# วัน}}", + "time_remaining.hours": "เหลืออีก {number, plural, other {# ชั่วโมง}}", + "time_remaining.minutes": "เหลืออีก {number, plural, other {# นาที}}", + "time_remaining.moments": "ช่วงเวลาที่เหลือ", + "time_remaining.seconds": "เหลืออีก {number, plural, other {# วินาที}}", + "trends.count_by_accounts": "{count} {rawCount, plural, other {คน}}กำลังคุย", + "trends.trending_now": "กำลังนิยม", "ui.beforeunload": "แบบร่างของคุณจะหายไปหากคุณออกจาก Mastodon", "upload_area.title": "ลากแล้วปล่อยเพื่ออัปโหลด", "upload_button.label": "เพิ่มสื่อ (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "เกินขีดจำกัดการอัปโหลดไฟล์", - "upload_error.poll": "File upload not allowed with polls.", - "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "ตัวอย่างการเปลี่ยนแปลง", + "upload_error.poll": "ไม่อนุญาตให้อัปโหลดไฟล์กับการลงคะแนน", + "upload_form.description": "อธิบายสำหรับผู้บกพร่องทางการมองเห็น", + "upload_form.edit": "แก้ไข", "upload_form.undo": "ลบ", + "upload_modal.analyzing_picture": "กำลังวิเคราะห์รูปภาพ…", + "upload_modal.apply": "นำไปใช้", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "ตรวจจับข้อความจากรูปภาพ", + "upload_modal.edit_media": "แก้ไขสื่อ", + "upload_modal.hint": "คลิกหรือลากวงกลมในภาพเพื่อเลือกจุดโฟกัส ซึ่งจะทำให้ส่วนนั้นอยู่ในกรอบของภาพขนาดย่อตลอดเวลา", + "upload_modal.preview_label": "ตัวอย่าง ({ratio})", "upload_progress.label": "กำลังอัปโหลด...", "video.close": "ปิดวิดีโอ", "video.exit_fullscreen": "ออกจากเต็มหน้าจอ", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index ec4657b9b..89efafd1d 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -1,43 +1,49 @@ { "account.add_or_remove_from_list": "Listelere ekle veya kaldır", "account.badges.bot": "Bot", - "account.block": "Engelle @{name}", + "account.block": "@{name} adlı kişiyi engelle", "account.block_domain": "{domain} alanından her şeyi gizle", "account.blocked": "Engellenmiş", + "account.cancel_follow_request": "Takip isteğini iptal et", "account.direct": "Mesaj gönder : @{name}", "account.domain_blocked": "Alan adı gizlendi", "account.edit_profile": "Profili düzenle", "account.endorse": "Profildeki özellik", "account.follow": "Takip et", - "account.followers": "Takipçiler", + "account.followers": "Takipçi", "account.followers.empty": "Henüz kimse bu kullanıcıyı takip etmiyor.", "account.follows": "Takip ettikleri", "account.follows.empty": "Bu kullanıcı henüz kimseyi takip etmiyor.", "account.follows_you": "Seni takip ediyor", - "account.hide_reblogs": "@{name} kişisinden boost'ları gizle", + "account.hide_reblogs": "@{name} kişisinin yinelemelerini gizle", + "account.last_status": "Son aktivite", "account.link_verified_on": "Bu bağlantının mülkiyeti {date} tarihinde kontrol edildi", - "account.locked_info": "Bu hesabın gizlilik durumu kilitli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle inceler.", + "account.locked_info": "Bu hesabın gizlilik durumu kilitli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle inceliyor.", "account.media": "Medya", "account.mention": "@{name} kullanıcısından bahset", "account.moved_to": "{name} şuraya taşındı:", - "account.mute": "@{name} kullanıcısını sessize al", - "account.mute_notifications": "@{name} kullanıcısının bildirimlerini kapat", - "account.muted": "Sesi kısık", - "account.posts": "Gönderiler", - "account.posts_with_replies": "Gönderiler ve yanıtlar", - "account.report": "@{name} kullanıcısını bildir", - "account.requested": "Onay bekliyor. Takip isteğini iptal etmek için tıklayın", + "account.mute": "@{name} adlı kişiyi sessize al", + "account.mute_notifications": "@{name} adlı kişinin bildirimlerini kapat", + "account.muted": "Susturuldu", + "account.never_active": "Asla", + "account.posts": "Toot", + "account.posts_with_replies": "Tootlar ve cevaplar", + "account.report": "@{name} adlı kişiyi bildir", + "account.requested": "Onay Bekleniyor. Takip isteğini iptal etmek için tıklayın", "account.share": "@{name} kullanıcısının profilini paylaş", - "account.show_reblogs": "@{name} kullanıcısından boostları göster", - "account.unblock": "Engeli kaldır @{name}", + "account.show_reblogs": "@{name} kullanıcısının yinelemelerini göster", + "account.unblock": "@{name} adlı kişinin engelini kaldır", "account.unblock_domain": "{domain} göster", "account.unendorse": "Profilde özellik yok", - "account.unfollow": "Takipten vazgeç", - "account.unmute": "Sesi aç : @{name}", - "account.unmute_notifications": "@{name} kullanıcısından bildirimleri aç", + "account.unfollow": "Takipi bırak", + "account.unmute": "@{name} adlı kişinin sesini aç", + "account.unmute_notifications": "@{name} adlı kişinin bildirimlerini aç", + "alert.rate_limited.message": "Lütfen sonra tekrar deneyin {retry_time, time, medium}.", + "alert.rate_limited.title": "Oran sınırlıdır", "alert.unexpected.message": "Beklenmedik bir hata oluştu.", "alert.unexpected.title": "Hay aksi!", - "boost_modal.combo": "Bir dahaki sefere {combo} tuşuna basabilirsiniz", + "autosuggest_hashtag.per_week": "Haftada {count}", + "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsiniz", "bundle_column_error.body": "Bu bileşen yüklenirken bir şeyler ters gitti.", "bundle_column_error.retry": "Tekrar deneyin", "bundle_column_error.title": "Ağ hatası", @@ -47,6 +53,7 @@ "column.blocks": "Engellenen kullanıcılar", "column.community": "Yerel zaman tüneli", "column.direct": "Doğrudan mesajlar", + "column.directory": "Profillere göz at", "column.domain_blocks": "Gizli alan adları", "column.favourites": "Favoriler", "column.follow_requests": "Takip istekleri", @@ -54,7 +61,7 @@ "column.lists": "Listeler", "column.mutes": "Susturulmuş kullanıcılar", "column.notifications": "Bildirimler", - "column.pins": "Sabitlenmiş gönderi", + "column.pins": "Sabitlenmiş tootlar", "column.public": "Federe zaman tüneli", "column_back_button.label": "Geri", "column_header.hide_settings": "Ayarları gizle", @@ -65,9 +72,9 @@ "column_header.unpin": "Sabitlemeyi kaldır", "column_subheading.settings": "Ayarlar", "community.column_settings.media_only": "Sadece medya", - "compose_form.direct_message_warning": "Bu gönderi sadece belirtilen kullanıcılara gönderilecektir.", + "compose_form.direct_message_warning": "Bu toot sadece belirtilen kullanıcılara gönderilecektir.", "compose_form.direct_message_warning_learn_more": "Daha fazla bilgi edinin", - "compose_form.hashtag_warning": "Bu paylaşım liste dışı olduğu için hiç bir hashtag'de yer almayacak. Sadece herkese açık gönderiler hashtaglerde bulunabilir.", + "compose_form.hashtag_warning": "Bu toot liste dışı olduğu için hiç bir etikette yer almayacak. Sadece herkese açık tootlar etiketlerde bulunabilir.", "compose_form.lock_disclaimer": "Hesabınız {locked} değil. Sadece takipçilerle paylaştığınız gönderileri görebilmek için sizi herhangi bir kullanıcı takip edebilir.", "compose_form.lock_disclaimer.lock": "kilitli", "compose_form.placeholder": "Aklınızdan ne geçiyor?", @@ -75,9 +82,9 @@ "compose_form.poll.duration": "Anket süresi", "compose_form.poll.option_placeholder": "Seçim {number}", "compose_form.poll.remove_option": "Bu seçimi kaldır", - "compose_form.publish": "Gönder", + "compose_form.publish": "Tootla", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "Medyayı hassas olarak işaretle", "compose_form.sensitive.marked": "Medya hassas olarak işaretlendi", "compose_form.sensitive.unmarked": "Medya hassas olarak işaretlenmemiş", "compose_form.spoiler.marked": "Metin uyarının arkasına gizlenir", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "Bu listeyi kalıcı olarak silmek istediğinize emin misiniz?", "confirmations.domain_block.confirm": "Alan adının tamamını gizle", "confirmations.domain_block.message": "tüm {domain} alan adını engellemek istediğinizden emin misiniz? Genellikle birkaç hedefli engel ve susturma işi görür ve tercih edilir.", + "confirmations.logout.confirm": "Çıkış Yap", + "confirmations.logout.message": "Çıkış yapmak istediğinize emin misiniz?", "confirmations.mute.confirm": "Sessize al", + "confirmations.mute.explanation": "Bu onlardan gelen ve onlardan bahseden gönderileri gizleyecek, fakat yine de onların gönderilerinizi görmelerine ve sizi takip etmelerine izin verecektir.", "confirmations.mute.message": "{name} kullanıcısını sessize almak istiyor musunuz?", "confirmations.redraft.confirm": "Sil ve yeniden tasarla", "confirmations.redraft.message": "Bu durumu silip tekrar taslaklaştırmak istediğinizden emin misiniz? Tüm cevapları, boostları ve favorileri kaybedeceksiniz.", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Şimdi yanıtlarken o an oluşturduğunuz mesajın üzerine yazılır. Devam etmek istediğinize emin misiniz?", "confirmations.unfollow.confirm": "Takibi kaldır", "confirmations.unfollow.message": "{name}'yi takipten çıkarmak istediğinizden emin misiniz?", + "conversation.delete": "Konuşmayı sil", + "conversation.mark_as_read": "Okunmuş olarak işaretle", + "conversation.open": "Konuşmayı görüntüle", + "conversation.with": "{names} ile", + "directory.federated": "Bilinen fediverse'lerden", + "directory.local": "Yalnızca {domain} adresinden", + "directory.new_arrivals": "Yeni gelenler", + "directory.recently_active": "Son zamanlarda aktif", "embed.instructions": "Aşağıdaki kodu kopyalayarak bu durumu sitenize gömün.", "embed.preview": "İşte nasıl görüneceği:", "emoji_button.activity": "Aktivite", @@ -117,14 +135,14 @@ "emoji_button.search_results": "Arama sonuçları", "emoji_button.symbols": "Semboller", "emoji_button.travel": "Seyahat ve Yerler", - "empty_column.account_timeline": "Burada hiç gönderi yok!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_timeline": "Burada hiç toot yok!", + "empty_column.account_unavailable": "Profil kullanılamıyor", "empty_column.blocks": "Henüz bir kullanıcıyı engellemediniz.", "empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!", "empty_column.direct": "Henüz doğrudan mesajınız yok. Bir tane gönderdiğinizde veya aldığınızda burada görünecektir.", "empty_column.domain_blocks": "Henüz hiçbir gizli alan adı yok.", - "empty_column.favourited_statuses": "Hiç favori gönderiminiz yok. Bir tane olursa burada görünecek.", - "empty_column.favourites": "Kimse bu gönderiyi favorilerine eklememiş. Biri eklerse burada görünecek.", + "empty_column.favourited_statuses": "Hiç favori tootunuz yok. Bir tane olduğunda burada görünecek.", + "empty_column.favourites": "Kimse bu tootu favorilerine eklememiş. Biri eklediğinde burada görünecek.", "empty_column.follow_requests": "Hiç takip isteğiniz yok. Bir tane aldığınızda burada görünecek.", "empty_column.hashtag": "Henüz bu hashtag’e sahip hiçbir gönderi yok.", "empty_column.home": "Henüz kimseyi takip etmiyorsunuz. {public} ziyaret edebilir veya arama kısmını kullanarak diğer kullanıcılarla iletişime geçebilirsiniz.", @@ -134,6 +152,10 @@ "empty_column.mutes": "Henüz hiçbir kullanıcıyı sessize almadınız.", "empty_column.notifications": "Henüz hiçbir bildiriminiz yok. Diğer insanlarla sobhet edebilmek için etkileşime geçebilirsiniz.", "empty_column.public": "Burada hiçbir şey yok! Herkese açık bir şeyler yazın veya burayı doldurmak için diğer sunuculardaki kullanıcıları takip edin", + "error.unexpected_crash.explanation": "Bizim kodumuzdaki bir hatadan ya da tarayıcı uyumluluk sorunundan dolayı, bu sayfa düzgün görüntülenemedi.", + "error.unexpected_crash.next_steps": "Sayfayı yenilemeyi deneyin. Eğer bu yardımcı olmazsa, Mastodon'u farklı bir tarayıcı ya da yerel uygulama üzerinden kullanabilirsiniz.", + "errors.unexpected_crash.copy_stacktrace": "Yığın izlemeyi (stacktrace) panoya kopyala", + "errors.unexpected_crash.report_issue": "Sorun bildir", "follow_request.authorize": "Yetkilendir", "follow_request.reject": "Reddet", "getting_started.developers": "Geliştiriciler", @@ -156,23 +178,23 @@ "home.column_settings.basic": "Temel", "home.column_settings.show_reblogs": "Boost edilenleri göster", "home.column_settings.show_replies": "Cevapları göster", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "intervals.full.days": "{number, plural, one {# gün} other {# gün}}", + "intervals.full.hours": "{number, plural, one {# saat} other {# saat}}", + "intervals.full.minutes": "{number, plural, one {# dakika} other {# dakika}}", "introduction.federation.action": "İleri", "introduction.federation.federated.headline": "Birleşik", "introduction.federation.federated.text": "Diğer dosya sunucularından gelen genel gönderiler, birleşik zaman çizelgesinde görünecektir.", "introduction.federation.home.headline": "Ana sayfa", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.home.text": "Takip ettiğiniz kişilerin yayınları ana sayfada gösterilecek. Herhangi bir sunucudaki herkesi takip edebilirsiniz!", "introduction.federation.local.headline": "Yerel", "introduction.federation.local.text": "Aynı sunucudaki kişilerin gönderileri yerel zaman tünelinde gözükecektir.", "introduction.interactions.action": "Öğreticiyi bitirin!", "introduction.interactions.favourite.headline": "Favori", - "introduction.interactions.favourite.text": "Bir gönderiyi favorilerinize alarak sonrası için saklayabilirsiniz ve yazara gönderiyi beğendiğinizi söyleyebilirsiniz.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "Başkalarının gönderilerini boostlayarak kendi takipçilerinizle paylaşabillirsiniz.", + "introduction.interactions.favourite.text": "Bir tootu favorilerinize alarak sonrası için saklayabilirsiniz ve yazara tootu beğendiğinizi söyleyebilirsiniz.", + "introduction.interactions.reblog.headline": "Yinele", + "introduction.interactions.reblog.text": "Başkalarının tootlarını yineleyerek onları kendi takipçilerinizle paylaşabillirsiniz.", "introduction.interactions.reply.headline": "Yanıt", - "introduction.interactions.reply.text": "Başkalarının gönderilerini ve kendi gönderilerinizi yanıtlayabilirsiniz. Bir konuşmada zincirli bir şekilde olacaklardır.", + "introduction.interactions.reply.text": "Başkalarının ve kendinizin tootlarına cevap verebilirsiniz. Bu, onları bir konuşmada zincirli bir şekilde gösterecektir.", "introduction.welcome.action": "Hadi gidelim!", "introduction.welcome.headline": "İlk adımlar", "introduction.welcome.text": "Krallığa hoş geldiniz! Az sonra, geniş bir sunucu yelpazesinde mesaj gönderip arkadaşlarınızla konuşabileceksiniz. Ama bu sunucu, {domain}, özel (profilinizi barındırır, bu yüzden adresini hatırlayın).", @@ -197,21 +219,21 @@ "keyboard_shortcuts.muted": "susturulmuş kullanıcı listesini açmak için", "keyboard_shortcuts.my_profile": "profilinizi açmak için", "keyboard_shortcuts.notifications": "bildirimler sütununu açmak için", - "keyboard_shortcuts.pinned": "sabitlenmiş gönderiler listesini açmak için", + "keyboard_shortcuts.pinned": "sabitlenmiş tootların listesini açmak için", "keyboard_shortcuts.profile": "yazarın profilini açmak için", "keyboard_shortcuts.reply": "cevaplamak için", "keyboard_shortcuts.requests": "takip istekleri listesini açmak için", "keyboard_shortcuts.search": "aramaya odaklanmak için", "keyboard_shortcuts.start": "\"başlayın\" sütununu açmak için", "keyboard_shortcuts.toggle_hidden": "CW'den önceki yazıyı göstermek/gizlemek için", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "yeni bir gönderiye başlamak için", + "keyboard_shortcuts.toggle_sensitivity": "medyayı göstermek/gizlemek için", + "keyboard_shortcuts.toot": "yeni bir toot başlatmak için", "keyboard_shortcuts.unfocus": "aramada bir gönderiye odaklanmamak için", "keyboard_shortcuts.up": "listede yukarıya çıkmak için", "lightbox.close": "Kapat", "lightbox.next": "Sonraki", "lightbox.previous": "Önceli", - "lightbox.view_context": "View context", + "lightbox.view_context": "İçeriği göster", "lists.account.add": "Listeye ekle", "lists.account.remove": "Listeden kaldır", "lists.delete": "Listeyi sil", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "Yeni liste başlığı", "lists.search": "Takip ettiğiniz kişiler arasından arayın", "lists.subheading": "Listeleriniz", + "load_pending": "{count, plural, one {# yeni öğe} other {# yeni öğe}}", "loading_indicator.label": "Yükleniyor...", "media_gallery.toggle_visible": "Görünürlüğü değiştir", "missing_indicator.label": "Bulunamadı", @@ -229,7 +252,7 @@ "navigation_bar.apps": "Mobil uygulamalar", "navigation_bar.blocks": "Engellenen kullanıcılar", "navigation_bar.community_timeline": "Yerel zaman tüneli", - "navigation_bar.compose": "Yeni bir gönderi yazın", + "navigation_bar.compose": "Yeni toot oluştur", "navigation_bar.direct": "Direkt Mesajlar", "navigation_bar.discover": "Keşfet", "navigation_bar.domain_blocks": "Gizli alan adları", @@ -237,21 +260,20 @@ "navigation_bar.favourites": "Favoriler", "navigation_bar.filters": "Susturulmuş kelimeler", "navigation_bar.follow_requests": "Takip istekleri", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Takip edilenler ve takipçiler", "navigation_bar.info": "Genişletilmiş bilgi", "navigation_bar.keyboard_shortcuts": "Klavye kısayolları", "navigation_bar.lists": "Listeler", "navigation_bar.logout": "Çıkış", "navigation_bar.mutes": "Sessize alınmış kullanıcılar", "navigation_bar.personal": "Kişisel", - "navigation_bar.pins": "Sabitlenmiş gönderiler", + "navigation_bar.pins": "Sabitlenmiş tootlar", "navigation_bar.preferences": "Tercihler", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Federe zaman tüneli", "navigation_bar.security": "Güvenlik", "notification.favourite": "{name} senin durumunu favorilere ekledi", "notification.follow": "{name} seni takip ediyor", - "notification.mention": "{name} mentioned you", + "notification.mention": "{name} senden bahsetti", "notification.poll": "Oy verdiğiniz bir anket bitti", "notification.reblog": "{name} senin durumunu boost etti", "notifications.clear": "Bildirimleri temizle", @@ -277,8 +299,10 @@ "notifications.group": "{count} bildirim", "poll.closed": "Kapandı", "poll.refresh": "Yenile", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.total_people": "{count, plural, one {# kişi} other {# kişi}}", + "poll.total_votes": "{count, plural, one {# oy} other {# oy}}", "poll.vote": "Oy ver", + "poll.voted": "Bu cevap için oy kullandınız", "poll_button.add_poll": "Bir anket ekleyin", "poll_button.remove_poll": "Anket kaldır", "privacy.change": "Gönderi gizliliğini ayarla", @@ -290,6 +314,7 @@ "privacy.public.short": "Herkese açık", "privacy.unlisted.long": "Herkese açık zaman tüneline gönderme", "privacy.unlisted.short": "Listelenmemiş", + "refresh": "Yenile", "regeneration_indicator.label": "Yükleniyor…", "regeneration_indicator.sublabel": "Ev akışınız hazırlanıyor!", "relative_time.days": "{number}g", @@ -306,14 +331,15 @@ "report.target": "Raporlama", "search.placeholder": "Ara", "search_popout.search_format": "Gelişmiş arama formatı", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.full_text": "Basit metin yazdığınız, tercih ettiğiniz, yinelediğiniz veya bunlardan bahsettiğiniz durumların yanı sıra kullanıcı adlarını, görünen adları ve hashtag'leri eşleştiren durumları döndürür.", + "search_popout.tips.hashtag": "etiketler", "search_popout.tips.status": "durum", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.text": "Basit metin, eşleşen görünen adları, kullanıcı adlarını ve hashtag'leri döndürür", "search_popout.tips.user": "kullanıcı", "search_results.accounts": "İnsanlar", "search_results.hashtags": "Hashtagler", - "search_results.statuses": "Gönderiler", + "search_results.statuses": "Tootlar", + "search_results.statuses_fts_disabled": "Bu Mastodon sunucusunda toot içeriğine göre arama etkin değil.", "search_results.total": "{count, number} {count, plural, one {sonuç} other {sonuçlar}}", "status.admin_account": "@{name} için denetim arayüzünü açın", "status.admin_status": "Denetim arayüzünde bu durumu açın", @@ -335,12 +361,12 @@ "status.mute_conversation": "Yazışmayı sustur", "status.open": "Bu gönderiyi genişlet", "status.pin": "Profile sabitle", - "status.pinned": "Sabitlenmiş gönderi", + "status.pinned": "Sabitlenmiş toot", "status.read_more": "Daha dazla oku", "status.reblog": "Boostla", - "status.reblog_private": "Boost to original audience", + "status.reblog_private": "Orjinal kitleye yinele", "status.reblogged_by": "{name} boost etti", - "status.reblogs.empty": "Kimse bu gönderiyi boostlamadı. Biri yaptığında burada gözükecek.", + "status.reblogs.empty": "Henüz kimse bu tootu yinelemedi. Biri yaptığında burada görünecek.", "status.redraft": "Sil & tekrar taslakla", "status.reply": "Cevapla", "status.replyAll": "Konuşmayı cevapla", @@ -352,7 +378,8 @@ "status.show_more": "Daha fazla göster", "status.show_more_all": "Hepsi için daha fazla göster", "status.show_thread": "Başlığı göster", - "status.unmute_conversation": "Unmute conversation", + "status.uncached_media_warning": "Mevcut değil", + "status.unmute_conversation": "Sohbeti aç", "status.unpin": "Profilden sabitlemeyi kaldır", "suggestions.dismiss": "Öneriyi görmezden gel", "suggestions.header": "Şuna ilgi duyuyor olabilirsiniz…", @@ -361,20 +388,28 @@ "tabs_bar.local_timeline": "Yerel", "tabs_bar.notifications": "Bildirimler", "tabs_bar.search": "Ara", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "time_remaining.days": "{number, plural, one {# gün} other {# gün}} kaldı", + "time_remaining.hours": "{number, plural, one {# saat} other {# saat}} kaldı", + "time_remaining.minutes": "{number, plural, one {# dakika} other {# dakika}} kaldı", + "time_remaining.moments": "Sadece birkaç dakika kaldı", + "time_remaining.seconds": "{number, plural, one {# saniye} other {# saniye}} kaldı", + "trends.count_by_accounts": "{count} {rawCount, plural, one {kişi} other {kişi}} konuşuyor", + "trends.trending_now": "Şu an popüler", "ui.beforeunload": "Mastodon'dan ayrılırsanız taslağınız kaybolacak.", "upload_area.title": "Karşıya yükleme için sürükle bırak yapınız", "upload_button.label": "Görsel ekle", "upload_error.limit": "Dosya yükleme sınırı aşıldı.", "upload_error.poll": "Anketlerde dosya yüklemesine izin verilmez.", - "upload_form.description": "Describe for the visually impaired", - "upload_form.focus": "Kırp", + "upload_form.description": "Görme engelliler için açıklama", + "upload_form.edit": "Düzenle", "upload_form.undo": "Geri al", + "upload_modal.analyzing_picture": "Resmi analiz ediyor…", + "upload_modal.apply": "Uygula", + "upload_modal.description_placeholder": "Pijamalı hasta yağız şoföre çabucak güvendi", + "upload_modal.detect_text": "Resimdeki metni algıla", + "upload_modal.edit_media": "Medyayı düzenle", + "upload_modal.hint": "Her zaman tüm küçük resimlerde görüntülenecek odak noktasını seçmek için ön izlemedeki daireyi tıklayın veya sürükleyin.", + "upload_modal.preview_label": "Ön izleme ({ratio})", "upload_progress.label": "Yükleniyor...", "video.close": "Videoyu kapat", "video.exit_fullscreen": "Tam ekrandan çık", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 124b9fb07..c3b3e45b9 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -1,52 +1,59 @@ { - "account.add_or_remove_from_list": "Add or Remove from lists", + "account.add_or_remove_from_list": "Додати або видалити зі списків", "account.badges.bot": "Бот", "account.block": "Заблокувати @{name}", "account.block_domain": "Заглушити {domain}", "account.blocked": "Заблоковані", + "account.cancel_follow_request": "Скасувати запит на підписку", "account.direct": "Пряме повідомлення @{name}", "account.domain_blocked": "Домен приховано", "account.edit_profile": "Редагувати профіль", - "account.endorse": "Feature on profile", + "account.endorse": "Публікувати у профілі", "account.follow": "Підписатися", "account.followers": "Підписники", - "account.followers.empty": "No one follows this user yet.", + "account.followers.empty": "Ніхто ще не підписався на цього користувача.", "account.follows": "Підписки", - "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows.empty": "Цей користувач ще ні на кого не підписався.", "account.follows_you": "Підписаний(-а) на Вас", "account.hide_reblogs": "Сховати передмухи від @{name}", - "account.link_verified_on": "Ownership of this link was checked on {date}", - "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.last_status": "Крайня активність", + "account.link_verified_on": "Права власності на це посилання були перевірені {date}", + "account.locked_info": "Статус конфіденційності цього облікового запису встановлено у заблокований. Власник вручну переглядає, хто може за ним стежити.", "account.media": "Медіа", "account.mention": "Згадати @{name}", "account.moved_to": "{name} переїхав на:", "account.mute": "Заглушити @{name}", "account.mute_notifications": "Не показувати сповіщення від @{name}", "account.muted": "Заглушений", + "account.never_active": "Ніколи", "account.posts": "Дмухи", "account.posts_with_replies": "Дмухи й відповіді", "account.report": "Поскаржитися на @{name}", "account.requested": "Очікує підтвердження. Натисніть щоб відмінити запит", "account.share": "Поширити профіль @{name}", "account.show_reblogs": "Показати передмухи від @{name}", - "account.unblock": "Розблокувати", + "account.unblock": "Розблокувати @{name}", "account.unblock_domain": "Розблокувати {domain}", - "account.unendorse": "Don't feature on profile", + "account.unendorse": "Не публікувати у профілі", "account.unfollow": "Відписатися", - "account.unmute": "Зняти глушення @{name}", + "account.unmute": "Зняти глушення з @{name}", "account.unmute_notifications": "Показувати сповіщення від @{name}", + "alert.rate_limited.message": "Спробуйте ще раз через {retry_time, time, medium}.", + "alert.rate_limited.title": "Швидкість обмежена", "alert.unexpected.message": "Трапилась неочікувана помилка.", "alert.unexpected.title": "Ой!", + "autosuggest_hashtag.per_week": "{count} в тиждень", "boost_modal.combo": "Ви можете натиснути {combo}, щоб пропустити це наступного разу", - "bundle_column_error.body": "Щось пішло не так при завантаженні компоненту.", - "bundle_column_error.retry": "Спробуйте ще", + "bundle_column_error.body": "Щось пішло не так під час завантаження компоненту.", + "bundle_column_error.retry": "Спробуйте ще раз", "bundle_column_error.title": "Помилка мережі", "bundle_modal_error.close": "Закрити", - "bundle_modal_error.message": "Щось пішло не так при завантаженні компоненту.", - "bundle_modal_error.retry": "Спробувати ще", + "bundle_modal_error.message": "Щось пішло не так під час завантаження компоненту.", + "bundle_modal_error.retry": "Спробувати ще раз", "column.blocks": "Заблоковані користувачі", "column.community": "Локальна стрічка", "column.direct": "Прямі повідомлення", + "column.directory": "Переглянути профілі", "column.domain_blocks": "Приховані домени", "column.favourites": "Вподобане", "column.follow_requests": "Запити на підписку", @@ -58,7 +65,7 @@ "column.public": "Глобальна стрічка", "column_back_button.label": "Назад", "column_header.hide_settings": "Приховати налаштування", - "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveLeft_settings": "Змістити колонку вліво", "column_header.moveRight_settings": "Змістити колонку вправо", "column_header.pin": "Закріпити", "column_header.show_settings": "Показати налаштування", @@ -66,25 +73,25 @@ "column_subheading.settings": "Налаштування", "community.column_settings.media_only": "Тільки медіа", "compose_form.direct_message_warning": "Цей дмух буде видимий тільки згаданим користувачам.", - "compose_form.direct_message_warning_learn_more": "Дізнатись більше", - "compose_form.hashtag_warning": "Цей дмух не буде відображений у жодній стрічці хештеґу, так як він прихований. Тільки публічні дмухи можуть бути знайдені за хештеґом.", + "compose_form.direct_message_warning_learn_more": "Дізнатися більше", + "compose_form.hashtag_warning": "Цей дмух не буде відображений у жодній стрічці хештеґу, оскільки він прихований. Тільки публічні дмухи можуть бути знайдені за хештеґом.", "compose_form.lock_disclaimer": "Ваш акаунт не {locked}. Кожен може підписатися на Вас та бачити Ваші приватні пости.", "compose_form.lock_disclaimer.lock": "приватний", "compose_form.placeholder": "Що у Вас на думці?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "Poll duration", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "Додати варіант", + "compose_form.poll.duration": "Тривалість опитування", + "compose_form.poll.option_placeholder": "Варіант {number}", + "compose_form.poll.remove_option": "Видалити цей варіант", "compose_form.publish": "Дмухнути", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", - "compose_form.sensitive.marked": "Медіа відмічене <b>несприйнятливим</b>", - "compose_form.sensitive.unmarked": "Медіа відмічене сприйнятливим", - "compose_form.spoiler.marked": "Текст приховано за попередженням", + "compose_form.sensitive.hide": "Позначити медіа як дражливе", + "compose_form.sensitive.marked": "Медіа відмічене як дражливе", + "compose_form.sensitive.unmarked": "Медіа не відмічене як дражливе", + "compose_form.spoiler.marked": "Текст приховано під попередженням", "compose_form.spoiler.unmarked": "Текст видимий", - "compose_form.spoiler_placeholder": "Попередження щодо прихованого тексту", + "compose_form.spoiler_placeholder": "Напишіть своє попередження тут", "confirmation_modal.cancel": "Відмінити", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Заблокувати та поскаржитися", "confirmations.block.confirm": "Заблокувати", "confirmations.block.message": "Ви впевнені, що хочете заблокувати {name}?", "confirmations.delete.confirm": "Видалити", @@ -93,15 +100,26 @@ "confirmations.delete_list.message": "Ви впевнені, що хочете видалити цей список назавжди?", "confirmations.domain_block.confirm": "Сховати весь домен", "confirmations.domain_block.message": "Ви точно, точно впевнені, що хочете заблокувати весь домен {domain}? У більшості випадків для нормальної роботи краще заблокувати/заглушити лише деяких користувачів. Ви не зможете бачити контент з цього домену у будь-яких стрічках або ваших сповіщеннях. Ваші підписники з цього домену будуть відписані від вас.", + "confirmations.logout.confirm": "Вийти", + "confirmations.logout.message": "Ви впевнені, що хочете вийти?", "confirmations.mute.confirm": "Заглушити", + "confirmations.mute.explanation": "Це приховає пости від них і пости зі згадками про них, проте вони все одно матимуть змогу бачити ваші пости і підписуватися на вас.", "confirmations.mute.message": "Ви впевнені, що хочете заглушити {name}?", - "confirmations.redraft.confirm": "Видалити і перестворити", + "confirmations.redraft.confirm": "Видалити та перестворити", "confirmations.redraft.message": "Ви впевнені, що хочете видалити допис і перестворити його? Ви втратите всі відповіді, передмухи та вподобайки допису.", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.reply.confirm": "Відповісти", + "confirmations.reply.message": "Поточна відповідь перезапише повідомлення, яке ви зараз пишете. Ви впевнені, що хочете продовжити?", "confirmations.unfollow.confirm": "Відписатися", "confirmations.unfollow.message": "Ви впевнені, що хочете відписатися від {name}?", - "embed.instructions": "Інтегруйте цей статус на вашому вебсайті, скопіювавши код нижче.", + "conversation.delete": "Видалити цю бесіду", + "conversation.mark_as_read": "Позначити як прочитане", + "conversation.open": "Переглянути бесіду", + "conversation.with": "З {names}", + "directory.federated": "З відомого федесвіту", + "directory.local": "Тільки з домену {domain}", + "directory.new_arrivals": "Нові надходження", + "directory.recently_active": "Активні нещодавно", + "embed.instructions": "Вбудуйте цей статус до вашого вебсайту, скопіювавши код нижче.", "embed.preview": "Ось як він виглядатиме:", "emoji_button.activity": "Заняття", "emoji_button.custom": "Особливі", @@ -113,123 +131,128 @@ "emoji_button.objects": "Предмети", "emoji_button.people": "Люди", "emoji_button.recent": "Часто використовувані", - "emoji_button.search": "Знайти...", + "emoji_button.search": "Шукати...", "emoji_button.search_results": "Результати пошуку", "emoji_button.symbols": "Символи", "emoji_button.travel": "Подорожі", - "empty_column.account_timeline": "No toots here!", - "empty_column.account_unavailable": "Profile unavailable", - "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.account_timeline": "Тут дмухалок немає!", + "empty_column.account_unavailable": "Профіль недоступний", + "empty_column.blocks": "Ви ще не заблокували жодного користувача.", "empty_column.community": "Локальна стрічка пуста. Напишіть щось, щоб розігріти народ!", "empty_column.direct": "У вас ще немає прямих повідомлень. Коли ви відправите чи отримаєте якесь, воно з'явиться тут.", - "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", - "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", - "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.domain_blocks": "Тут поки немає прихованих доменів.", + "empty_column.favourited_statuses": "У вас ще немає вподобаних дмухів. Коли ви щось вподобаєте, воно з'явиться тут.", + "empty_column.favourites": "Ніхто ще не вподобав цього дмуху. Коли хтось це зробить, вони з'являться тут.", + "empty_column.follow_requests": "У вас ще немає запитів на підписку. Коли ви їх отримаєте, вони з'являться тут.", "empty_column.hashtag": "Дописів з цим хештегом поки не існує.", "empty_column.home": "Ви поки ні на кого не підписані. Погортайте {public}, або скористуйтесь пошуком, щоб освоїтися та познайомитися з іншими користувачами.", "empty_column.home.public_timeline": "публічні стрічки", "empty_column.list": "Немає нічого в цьому списку. Коли його учасники дмухнуть нові статуси, вони з'являться тут.", - "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", - "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.lists": "У вас ще немає списків. Коли ви їх створите, вони з'являться тут.", + "empty_column.mutes": "Ви ще не заглушили жодного користувача.", "empty_column.notifications": "У вас ще немає сповіщень. Переписуйтесь з іншими користувачами, щоб почати розмову.", "empty_column.public": "Тут поки нічого немає! Опублікуйте щось, або вручну підпишіться на користувачів інших інстанцій, щоб заповнити стрічку", + "error.unexpected_crash.explanation": "Ця сторінка не може бути коректно відображена через баґ у нашому коді або через проблему сумісності браузера.", + "error.unexpected_crash.next_steps": "Спробуйте перезавантажити сторінку. Якщо це не допоможе, ви все ще зможете використовувати Mastodon через інший браузер або рідний додаток.", + "errors.unexpected_crash.copy_stacktrace": "Скопіювати трасування стека у буфер обміну", + "errors.unexpected_crash.report_issue": "Повідомити про проблему", "follow_request.authorize": "Авторизувати", "follow_request.reject": "Відмовити", "getting_started.developers": "Розробникам", - "getting_started.directory": "Profile directory", + "getting_started.directory": "Каталог профілів", "getting_started.documentation": "Документація", "getting_started.heading": "Ласкаво просимо", "getting_started.invite": "Запросіть людей", - "getting_started.open_source_notice": "Mastodon - програма з відкритим вихідним кодом. Ви можете допомогти проекту, або повідомити про проблеми на GitHub за адресою {github}.", + "getting_started.open_source_notice": "Mastodon — програма з відкритим сирцевим кодом. Ви можете допомогти проекту, або повідомити про проблеми на GitHub за адресою {github}.", "getting_started.security": "Безпека", "getting_started.terms": "Умови використання", - "hashtag.column_header.tag_mode.all": "and {additional}", - "hashtag.column_header.tag_mode.any": "or {additional}", - "hashtag.column_header.tag_mode.none": "without {additional}", - "hashtag.column_settings.select.no_options_message": "No suggestions found", - "hashtag.column_settings.select.placeholder": "Enter hashtags…", - "hashtag.column_settings.tag_mode.all": "All of these", - "hashtag.column_settings.tag_mode.any": "Any of these", - "hashtag.column_settings.tag_mode.none": "None of these", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "hashtag.column_header.tag_mode.all": "та {additional}", + "hashtag.column_header.tag_mode.any": "або {additional}", + "hashtag.column_header.tag_mode.none": "без {additional}", + "hashtag.column_settings.select.no_options_message": "Не знайдено пропозицій", + "hashtag.column_settings.select.placeholder": "Введіть хештеґи…", + "hashtag.column_settings.tag_mode.all": "Усі ці", + "hashtag.column_settings.tag_mode.any": "Який-небудь з цих", + "hashtag.column_settings.tag_mode.none": "Жоден з цих", + "hashtag.column_settings.tag_toggle": "Додайте додаткові теґи до цього стовпчика", "home.column_settings.basic": "Основні", "home.column_settings.show_reblogs": "Показувати передмухи", "home.column_settings.show_replies": "Показувати відповіді", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", - "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", - "introduction.federation.action": "Next", - "introduction.federation.federated.headline": "Federated", - "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", - "introduction.federation.home.headline": "Home", - "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", - "introduction.federation.local.headline": "Local", - "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", - "introduction.interactions.action": "Finish toot-orial!", - "introduction.interactions.favourite.headline": "Favourite", - "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", - "introduction.interactions.reblog.headline": "Boost", - "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", - "introduction.interactions.reply.headline": "Reply", - "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", - "introduction.welcome.action": "Let's go!", - "introduction.welcome.headline": "First steps", - "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "intervals.full.days": "{number, plural, one {# день} few {# дні} other {# днів}}", + "intervals.full.hours": "{number, plural, one {# година} few {# години} other {# годин}}", + "intervals.full.minutes": "{number, plural, one {# хвилина} few {# хвилини} other {# хвилин}}", + "introduction.federation.action": "Далі", + "introduction.federation.federated.headline": "Глобальна", + "introduction.federation.federated.text": "Публічні пости з інших серверів федіверсу будуть з'являтися у глобальній стрічці.", + "introduction.federation.home.headline": "Головна", + "introduction.federation.home.text": "Пости від людей, за якими ви слідкуєте, з'являться у Вашій домашній стрічці. Ви можете слідкувати за кожним на будь-якому сервері!", + "introduction.federation.local.headline": "Локальна", + "introduction.federation.local.text": "Публічні пости від людей на сервері, на якому Ви знаходитесь, будуть з'являтися у локальній стрічці.", + "introduction.interactions.action": "Завершити вступ!", + "introduction.interactions.favourite.headline": "Улюблене", + "introduction.interactions.favourite.text": "Ви можете зберегти дмух на потім і повідомити автора, що він вам сподобався, додавши його в улюблене.", + "introduction.interactions.reblog.headline": "Передмухнути", + "introduction.interactions.reblog.text": "Ви можете ділитися дмухами інших людей зі своїми підписниками, передмухуючи їх.", + "introduction.interactions.reply.headline": "Відповісти", + "introduction.interactions.reply.text": "Ви можете відповідати на дмухи інших людей та власні, створюючи ланцюжки розмов.", + "introduction.welcome.action": "Поїхали!", + "introduction.welcome.headline": "Перші кроки", + "introduction.welcome.text": "Вітаємо у федіверсі! Невдовзі ви зможете поширювати повідомлення та спілкуватися зі своїми друзями на розмаїтті серверів. Але цей сервер, {domain}, є особливим — на ньому розміщений ваш профіль, тож запам'ятайте його назву.", "keyboard_shortcuts.back": "переходити назад", - "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.blocked": "відкрити список заблокованих користувачів", "keyboard_shortcuts.boost": "передмухувати", "keyboard_shortcuts.column": "фокусуватися на одній з колонок", "keyboard_shortcuts.compose": "фокусуватися на полі введення", "keyboard_shortcuts.description": "Опис", - "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.direct": "відкрити колонку прямих повідомлень", "keyboard_shortcuts.down": "рухатися вниз стрічкою", "keyboard_shortcuts.enter": "відкрити статус", "keyboard_shortcuts.favourite": "вподобати", - "keyboard_shortcuts.favourites": "to open favourites list", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.favourites": "відкрити список улюбленого", + "keyboard_shortcuts.federated": "відкрити глобальну стрічку", "keyboard_shortcuts.heading": "Гарячі клавіші", - "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.home": "відкрити домашню стрічку", "keyboard_shortcuts.hotkey": "Гаряча клавіша", "keyboard_shortcuts.legend": "показати підказку", - "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.local": "відкрити локальну стрічку", "keyboard_shortcuts.mention": "згадати автора", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.muted": "відкрити список заглушених користувачів", + "keyboard_shortcuts.my_profile": "відкрити ваш профіль", + "keyboard_shortcuts.notifications": "відкрити колонку сповіщень", + "keyboard_shortcuts.pinned": "відкрити список закріплених дмухів", "keyboard_shortcuts.profile": "відкрити профіль автора", "keyboard_shortcuts.reply": "відповісти", - "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.requests": "відкрити список бажаючих підписатися", "keyboard_shortcuts.search": "сфокусуватися на пошуку", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "показати/приховати прихований текст", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.start": "відкрити колонку \"Початок\"", + "keyboard_shortcuts.toggle_hidden": "показати/приховати текст під попередженням", + "keyboard_shortcuts.toggle_sensitivity": "показати/приховати медіа", "keyboard_shortcuts.toot": "почати писати новий дмух", "keyboard_shortcuts.unfocus": "розфокусуватися з нового допису чи пошуку", "keyboard_shortcuts.up": "рухатися вверх списком", "lightbox.close": "Закрити", "lightbox.next": "Далі", "lightbox.previous": "Назад", - "lightbox.view_context": "View context", + "lightbox.view_context": "Переглянути контекст", "lists.account.add": "Додати до списку", "lists.account.remove": "Видалити зі списку", "lists.delete": "Видалити список", "lists.edit": "Редагувати список", - "lists.edit.submit": "Change title", + "lists.edit.submit": "Змінити назву", "lists.new.create": "Додати список", "lists.new.title_placeholder": "Нова назва списку", "lists.search": "Шукати серед людей, на яких ви підписані", "lists.subheading": "Ваші списки", + "load_pending": "{count, plural, one {# новий елемент} other {# нових елементів}}", "loading_indicator.label": "Завантаження...", "media_gallery.toggle_visible": "Показати/приховати", "missing_indicator.label": "Не знайдено", "missing_indicator.sublabel": "Ресурс не знайдений", "mute_modal.hide_notifications": "Приховати сповіщення від користувача?", - "navigation_bar.apps": "Mobile apps", + "navigation_bar.apps": "Мобільні додатки", "navigation_bar.blocks": "Заблоковані користувачі", "navigation_bar.community_timeline": "Локальна стрічка", - "navigation_bar.compose": "Compose new toot", + "navigation_bar.compose": "Написати новий дмух", "navigation_bar.direct": "Прямі повідомлення", "navigation_bar.discover": "Знайти", "navigation_bar.domain_blocks": "Приховані домени", @@ -237,61 +260,63 @@ "navigation_bar.favourites": "Вподобане", "navigation_bar.filters": "Приховані слова", "navigation_bar.follow_requests": "Запити на підписку", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "Підписки і підписники", "navigation_bar.info": "Про сайт", - "navigation_bar.keyboard_shortcuts": "Гарячі клавіши", + "navigation_bar.keyboard_shortcuts": "Гарячі клавіші", "navigation_bar.lists": "Списки", "navigation_bar.logout": "Вийти", "navigation_bar.mutes": "Заглушені користувачі", "navigation_bar.personal": "Особисте", "navigation_bar.pins": "Закріплені дмухи", "navigation_bar.preferences": "Налаштування", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "Глобальна стрічка", "navigation_bar.security": "Безпека", "notification.favourite": "{name} вподобав(-ла) ваш допис", "notification.follow": "{name} підписався(-лась) на Вас", "notification.mention": "{name} згадав(-ла) Вас", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "Опитування, у якому ви голосували, закінчилося", "notification.reblog": "{name} передмухнув(-ла) Ваш допис", "notifications.clear": "Очистити сповіщення", "notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщеня?", "notifications.column_settings.alert": "Сповіщення на комп'ютері", "notifications.column_settings.favourite": "Вподобане:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.filter_bar.advanced": "Показати всі категорії", + "notifications.column_settings.filter_bar.category": "Панель швидкого фільтру", + "notifications.column_settings.filter_bar.show": "Показати", "notifications.column_settings.follow": "Нові підписники:", "notifications.column_settings.mention": "Згадки:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "Результати опитування:", "notifications.column_settings.push": "Push-сповіщення", "notifications.column_settings.reblog": "Передмухи:", "notifications.column_settings.show": "Показати в колонці", "notifications.column_settings.sound": "Відтворювати звуки", - "notifications.filter.all": "All", - "notifications.filter.boosts": "Boosts", - "notifications.filter.favourites": "Favourites", - "notifications.filter.follows": "Follows", - "notifications.filter.mentions": "Mentions", - "notifications.filter.polls": "Poll results", + "notifications.filter.all": "Усі", + "notifications.filter.boosts": "Передмухи", + "notifications.filter.favourites": "Улюблені", + "notifications.filter.follows": "Підписки", + "notifications.filter.mentions": "Згадки", + "notifications.filter.polls": "Результати опитування", "notifications.group": "{count} сповіщень", - "poll.closed": "Closed", - "poll.refresh": "Refresh", - "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "Remove poll", + "poll.closed": "Закрито", + "poll.refresh": "Оновити", + "poll.total_people": "{count, plural, one {# особа} other {# осіб}}", + "poll.total_votes": "{count, plural, one {# голос} few {# голоси} many {# голосів} other {# голосів}}", + "poll.vote": "Проголосувати", + "poll.voted": "Ви голосували за цю відповідь", + "poll_button.add_poll": "Додати опитування", + "poll_button.remove_poll": "Видалити опитування", "privacy.change": "Змінити видимість допису", "privacy.direct.long": "Показати тільки згаданим користувачам", - "privacy.direct.short": "Направлений", + "privacy.direct.short": "Особисто", "privacy.private.long": "Показати тільки підписникам", "privacy.private.short": "Тільки для підписників", "privacy.public.long": "Показувати у публічних стрічках", - "privacy.public.short": "Публічний", + "privacy.public.short": "Публічно", "privacy.unlisted.long": "Не показувати у публічних стрічках", "privacy.unlisted.short": "Прихований", + "refresh": "Оновити", "regeneration_indicator.label": "Завантаження…", - "regeneration_indicator.sublabel": "Ваша домашня стрічка готова!", + "regeneration_indicator.sublabel": "Ваша домашня стрічка готується!", "relative_time.days": "{number}д", "relative_time.hours": "{number}г", "relative_time.just_now": "щойно", @@ -303,81 +328,91 @@ "report.hint": "Скаргу буде відправлено модераторам Вашого сайту. Ви можете надати їм пояснення, чому ви скаржитесь на аккаунт нижче:", "report.placeholder": "Додаткові коментарі", "report.submit": "Відправити", - "report.target": "Скаржимося на", + "report.target": "Скаржимося на {target}", "search.placeholder": "Пошук", - "search_popout.search_format": "Advanced search format", - "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", - "search_popout.tips.hashtag": "hashtag", - "search_popout.tips.status": "status", - "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", - "search_popout.tips.user": "user", - "search_results.accounts": "People", - "search_results.hashtags": "Hashtags", - "search_results.statuses": "Toots", + "search_popout.search_format": "Розширений формат пошуку", + "search_popout.tips.full_text": "Пошук за текстом знаходить статуси, які ви написали, вподобали, передмухнули, або в яких вас згадували. Також він знаходить імена користувачів, реальні імена та хештеґи.", + "search_popout.tips.hashtag": "хештеґ", + "search_popout.tips.status": "статус", + "search_popout.tips.text": "Пошук за текстом знаходить імена користувачів, реальні імена та хештеґи", + "search_popout.tips.user": "користувач", + "search_results.accounts": "Люди", + "search_results.hashtags": "Хештеґи", + "search_results.statuses": "Дмухів", + "search_results.statuses_fts_disabled": "Пошук дмухів за вмістом недоступний на цьому сервері Mastodon.", "search_results.total": "{count, number} {count, plural, one {результат} few {результати} many {результатів} other {результатів}}", - "status.admin_account": "Open moderation interface for @{name}", - "status.admin_status": "Open this status in the moderation interface", - "status.block": "Block @{name}", - "status.cancel_reblog_private": "Unboost", + "status.admin_account": "Відкрити інтерфейс модерації для @{name}", + "status.admin_status": "Відкрити цей статус в інтерфейсі модерації", + "status.block": "Заблокувати @{name}", + "status.cancel_reblog_private": "Відмінити передмухання", "status.cannot_reblog": "Цей допис не може бути передмухнутий", - "status.copy": "Copy link to status", + "status.copy": "Копіювати посилання до статусу", "status.delete": "Видалити", - "status.detailed_status": "Detailed conversation view", - "status.direct": "Direct message @{name}", - "status.embed": "Embed", + "status.detailed_status": "Детальний вигляд бесіди", + "status.direct": "Пряме повідомлення до @{name}", + "status.embed": "Вбудувати", "status.favourite": "Подобається", - "status.filtered": "Filtered", + "status.filtered": "Відфільтровано", "status.load_more": "Завантажити більше", "status.media_hidden": "Медіаконтент приховано", - "status.mention": "Згадати", - "status.more": "More", - "status.mute": "Mute @{name}", + "status.mention": "Згадати @{name}", + "status.more": "Більше", + "status.mute": "Заглушити @{name}", "status.mute_conversation": "Заглушити діалог", "status.open": "Розгорнути допис", - "status.pin": "Pin on profile", - "status.pinned": "Pinned toot", - "status.read_more": "Read more", + "status.pin": "Закріпити у профілі", + "status.pinned": "Закріплений дмух", + "status.read_more": "Дізнатися більше", "status.reblog": "Передмухнути", - "status.reblog_private": "Boost to original audience", + "status.reblog_private": "Передмухнути для початкової аудиторії", "status.reblogged_by": "{name} передмухнув(-ла)", - "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", - "status.redraft": "Delete & re-draft", + "status.reblogs.empty": "Ніхто ще не передмухнув цього дмуху. Коли якісь користувачі це зроблять, вони будуть відображені тут.", + "status.redraft": "Видалити та перестворити", "status.reply": "Відповісти", - "status.replyAll": "Відповісти на тред", - "status.report": "Поскаржитися", - "status.sensitive_warning": "Непристойний зміст", - "status.share": "Share", + "status.replyAll": "Відповісти на ланцюжок", + "status.report": "Поскаржитися на @{name}", + "status.sensitive_warning": "Дражливий зміст", + "status.share": "Поділитися", "status.show_less": "Згорнути", - "status.show_less_all": "Show less for all", + "status.show_less_all": "Показувати менше для всіх", "status.show_more": "Розгорнути", - "status.show_more_all": "Show more for all", - "status.show_thread": "Show thread", + "status.show_more_all": "Показувати більше для всіх", + "status.show_thread": "Показати ланцюжок", + "status.uncached_media_warning": "Недоступно", "status.unmute_conversation": "Зняти глушення з діалогу", - "status.unpin": "Unpin from profile", - "suggestions.dismiss": "Dismiss suggestion", - "suggestions.header": "You might be interested in…", + "status.unpin": "Відкріпити від профілю", + "suggestions.dismiss": "Відхилити пропозицію", + "suggestions.header": "Вас може зацікавити…", "tabs_bar.federated_timeline": "Глобальна", "tabs_bar.home": "Головна", "tabs_bar.local_timeline": "Локальна", "tabs_bar.notifications": "Сповіщення", "tabs_bar.search": "Пошук", - "time_remaining.days": "{number, plural, one {# day} other {# days}} left", - "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", - "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", - "time_remaining.moments": "Moments remaining", - "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", - "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "time_remaining.days": "{number, plural, one {# день} few {# дні} other {# днів}}", + "time_remaining.hours": "{number, plural, one {# година} few {# години} other {# годин}}", + "time_remaining.minutes": "{number, plural, one {# хвилина} few {# хвилини} other {# хвилин}}", + "time_remaining.moments": "Залишилось секунд", + "time_remaining.seconds": "{number, plural, one {# секунда} few {# секунди} other {# секунд}}", + "trends.count_by_accounts": "{count} {rawCount, plural, one {людина} few {людини} many {людей} other {людей}} обговорюють це", + "trends.trending_now": "Актуальні", "ui.beforeunload": "Вашу чернетку буде втрачено, якщо ви покинете Mastodon.", "upload_area.title": "Перетягніть сюди, щоб завантажити", - "upload_button.label": "Додати медіаконтент", - "upload_error.limit": "File upload limit exceeded.", - "upload_error.poll": "File upload not allowed with polls.", + "upload_button.label": "Додати медіаконтент ({formats})", + "upload_error.limit": "Ліміт завантаження файлів перевищено.", + "upload_error.poll": "Не можна завантажувати файли до опитувань.", "upload_form.description": "Опишіть для людей з вадами зору", - "upload_form.focus": "Обрізати", + "upload_form.edit": "Змінити", "upload_form.undo": "Видалити", + "upload_modal.analyzing_picture": "Аналізуємо малюнок…", + "upload_modal.apply": "Застосувати", + "upload_modal.description_placeholder": "Щурячий бугай із їжаком-харцизом в'ючись підписали ґешефт у єнах", + "upload_modal.detect_text": "Виявити текст на малюнку", + "upload_modal.edit_media": "Редагувати медіа", + "upload_modal.hint": "Клацніть або перетягніть коло на превью, щоб обрати точку, яку буде завжди видно на мініатюрах.", + "upload_modal.preview_label": "Переглянути ({ratio})", "upload_progress.label": "Завантаження...", "video.close": "Закрити відео", - "video.exit_fullscreen": "Вийти з повного екрану", + "video.exit_fullscreen": "Вийти з повноекранного режиму", "video.expand": "Розширити відео", "video.fullscreen": "На весь екран", "video.hide": "Приховати відео", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json new file mode 100644 index 000000000..39ca86a0c --- /dev/null +++ b/app/javascript/mastodon/locales/ur.json @@ -0,0 +1,423 @@ +{ + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.block": "Block @{name}", + "account.block_domain": "Hide everything from {domain}", + "account.blocked": "Blocked", + "account.cancel_follow_request": "Cancel follow request", + "account.direct": "Direct message @{name}", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "Edit profile", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.follows": "Follows", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.last_status": "Last active", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.never_active": "Never", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unhide {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "autosuggest_hashtag.per_week": "{count} per week", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.directory": "Browse profiles", + "column.domain_blocks": "Hidden domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lightbox.view_context": "View context", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "load_pending": "{count, plural, one {# new item} other {# new items}}", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll.voted": "You voted for this answer", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Post to followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Post to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.short": "Unlisted", + "refresh": "Refresh", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost to original audience", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "trends.trending_now": "Trending now", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media ({formats})", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.edit": "Edit", + "upload_form.undo": "Delete", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", + "upload_progress.label": "Uploading…", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/whitelist_pt.json b/app/javascript/mastodon/locales/whitelist_br.json index 0d4f101c7..0d4f101c7 100644 --- a/app/javascript/mastodon/locales/whitelist_pt.json +++ b/app/javascript/mastodon/locales/whitelist_br.json diff --git a/app/javascript/mastodon/locales/whitelist_es-AR.json b/app/javascript/mastodon/locales/whitelist_es-AR.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_es-AR.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_et.json b/app/javascript/mastodon/locales/whitelist_et.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_et.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_ga.json b/app/javascript/mastodon/locales/whitelist_ga.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_ga.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_kn.json b/app/javascript/mastodon/locales/whitelist_kn.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_kn.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_mk.json b/app/javascript/mastodon/locales/whitelist_mk.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_mk.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_ml.json b/app/javascript/mastodon/locales/whitelist_ml.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_ml.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_mr.json b/app/javascript/mastodon/locales/whitelist_mr.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_mr.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_nn.json b/app/javascript/mastodon/locales/whitelist_nn.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_nn.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_pt-PT.json b/app/javascript/mastodon/locales/whitelist_pt-PT.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_pt-PT.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/whitelist_ur.json b/app/javascript/mastodon/locales/whitelist_ur.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_ur.json @@ -0,0 +1,2 @@ +[ +] diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 785419eae..550810680 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -4,6 +4,7 @@ "account.block": "屏蔽 @{name}", "account.block_domain": "隐藏来自 {domain} 的内容", "account.blocked": "已屏蔽", + "account.cancel_follow_request": "取消关注请求", "account.direct": "发送私信给 @{name}", "account.domain_blocked": "网站已屏蔽", "account.edit_profile": "修改个人资料", @@ -12,9 +13,10 @@ "account.followers": "关注者", "account.followers.empty": "目前无人关注此用户。", "account.follows": "正在关注", - "account.follows.empty": "此用户目前没有关注任何人。", + "account.follows.empty": "此用户目前尚未关注任何人。", "account.follows_you": "关注了你", "account.hide_reblogs": "隐藏来自 @{name} 的转嘟", + "account.last_status": "最近活动", "account.link_verified_on": "此链接的所有权已在 {date} 检查", "account.locked_info": "此账户已锁嘟。账户的主人会手动审核关注者。", "account.media": "媒体", @@ -23,20 +25,24 @@ "account.mute": "隐藏 @{name}", "account.mute_notifications": "隐藏来自 @{name} 的通知", "account.muted": "已隐藏", + "account.never_active": "从未活跃", "account.posts": "嘟文", "account.posts_with_replies": "嘟文和回复", "account.report": "举报 @{name}", "account.requested": "正在等待对方同意。点击以取消发送关注请求", "account.share": "分享 @{name} 的个人资料", "account.show_reblogs": "显示来自 @{name} 的转嘟", - "account.unblock": "不再屏蔽 @{name}", + "account.unblock": "解除屏蔽 @{name}", "account.unblock_domain": "不再隐藏来自 {domain} 的内容", "account.unendorse": "不在个人资料中推荐此用户", "account.unfollow": "取消关注", "account.unmute": "不再隐藏 @{name}", "account.unmute_notifications": "不再隐藏来自 @{name} 的通知", + "alert.rate_limited.message": "请在 {retry_time, time, medium} 后重试。", + "alert.rate_limited.title": "频率受限", "alert.unexpected.message": "发生了意外错误。", "alert.unexpected.title": "哎呀!", + "autosuggest_hashtag.per_week": "每星期 {count} 条", "boost_modal.combo": "下次按住 {combo} 即可跳过此提示", "bundle_column_error.body": "载入这个组件时发生了错误。", "bundle_column_error.retry": "重试", @@ -47,8 +53,9 @@ "column.blocks": "已屏蔽的用户", "column.community": "本站时间轴", "column.direct": "私信", + "column.directory": "浏览用户资料", "column.domain_blocks": "已屏蔽的网站", - "column.favourites": "收藏过的嘟文", + "column.favourites": "喜欢", "column.follow_requests": "关注请求", "column.home": "主页", "column.lists": "列表", @@ -92,15 +99,26 @@ "confirmations.delete_list.confirm": "删除", "confirmations.delete_list.message": "你确定要永久删除这个列表吗?", "confirmations.domain_block.confirm": "隐藏整个网站的内容", - "confirmations.domain_block.message": "你真的确定要隐藏所有来自 {domain} 的内容吗?多数情况下,屏蔽或隐藏几个特定的用户应该就能满足你的需要了。来自该网站的内容将不再出现在你的公共时间轴或通知列表里。来自该网站的关注者将会被移除。", + "confirmations.domain_block.message": "你真的确定要隐藏所有来自 {domain} 的内容吗?多数情况下,屏蔽或隐藏几个特定的用户就已经足够了。来自该网站的内容将不再出现在你的任何公共时间轴或通知列表里。来自该网站的关注者将会被移除。", + "confirmations.logout.confirm": "登出", + "confirmations.logout.message": "您确定要登出吗?", "confirmations.mute.confirm": "隐藏", + "confirmations.mute.explanation": "这将隐藏他们的嘟文以及提到他们的嘟文,但他们仍可以看到你的嘟文并关注你。", "confirmations.mute.message": "你确定要隐藏 {name} 吗?", "confirmations.redraft.confirm": "删除并重新编辑", - "confirmations.redraft.message": "你确定要删除这条嘟文并重新编辑它吗?所有相关的转嘟和收藏都会被清除,回复将会被孤立。", + "confirmations.redraft.message": "你确定要删除这条嘟文并重新编辑它吗?所有相关的转嘟和喜欢都会被清除,回复将会失去关联。", "confirmations.reply.confirm": "回复", - "confirmations.reply.message": "回复此消息会覆盖掉当前正在编辑的消息。确定继续吗?", + "confirmations.reply.message": "回复此消息将会覆盖当前正在编辑的信息。确定继续吗?", "confirmations.unfollow.confirm": "取消关注", "confirmations.unfollow.message": "你确定要取消关注 {name} 吗?", + "conversation.delete": "删除对话", + "conversation.mark_as_read": "标记为已读", + "conversation.open": "查看对话", + "conversation.with": "与 {names}", + "directory.federated": "来自联邦宇宙的已知部分", + "directory.local": "仅来自 {domain}", + "directory.new_arrivals": "新来者", + "directory.recently_active": "最近活跃", "embed.instructions": "要在你的网站上嵌入这条嘟文,请复制以下代码。", "embed.preview": "它会像这样显示出来:", "emoji_button.activity": "活动", @@ -120,28 +138,32 @@ "empty_column.account_timeline": "这里没有嘟文!", "empty_column.account_unavailable": "个人资料不可用", "empty_column.blocks": "你目前没有屏蔽任何用户。", - "empty_column.community": "本站时间轴暂时没有内容,快嘟几个来抢头香啊!", + "empty_column.community": "本站时间轴暂时没有内容,快写点什么让它动起来吧!", "empty_column.direct": "你还没有使用过私信。当你发出或者收到私信时,它会在这里显示。", "empty_column.domain_blocks": "目前没有被隐藏的站点。", - "empty_column.favourited_statuses": "你还没有收藏过任何嘟文。收藏过的嘟文会显示在这里。", - "empty_column.favourites": "没人收藏过这条嘟文。假如有人收藏了,就会显示在这里。", + "empty_column.favourited_statuses": "你还没有喜欢过任何嘟文。喜欢过的嘟文会显示在这里。", + "empty_column.favourites": "没有人喜欢过这条嘟文。如果有人喜欢了,就会显示在这里。", "empty_column.follow_requests": "你没有收到新的关注请求。收到了之后就会显示在这里。", "empty_column.hashtag": "这个话题标签下暂时没有内容。", - "empty_column.home": "你还没有关注任何用户。快看看{public},向其他用户搭讪吧。", + "empty_column.home": "你还没有关注任何用户。快看看{public},向其他人问个好吧。", "empty_column.home.public_timeline": "公共时间轴", "empty_column.list": "这个列表中暂时没有内容。列表中用户所发送的的新嘟文将会在这里显示。", - "empty_column.lists": "你没有创建过列表。你创建的列表会在这里显示。", + "empty_column.lists": "你还没有创建过列表。你创建的列表会在这里显示。", "empty_column.mutes": "你没有隐藏任何用户。", - "empty_column.notifications": "你还没有收到过任何通知,快向其他用户搭讪吧。", + "empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。", "empty_column.public": "这里什么都没有!写一些公开的嘟文,或者关注其他服务器的用户后,这里就会有嘟文出现了", + "error.unexpected_crash.explanation": "此页面无法正确现实,这可能是因为我们的代码中有错误,也可能是因为浏览器兼容问题。", + "error.unexpected_crash.next_steps": "刷新一下页面试试。如果没用,您可以换个浏览器或者用本地应用。", + "errors.unexpected_crash.copy_stacktrace": "把堆栈跟踪信息复制到剪贴板", + "errors.unexpected_crash.report_issue": "报告问题", "follow_request.authorize": "同意", "follow_request.reject": "拒绝", "getting_started.developers": "开发", - "getting_started.directory": "用户资料目录", + "getting_started.directory": "用户目录", "getting_started.documentation": "文档", "getting_started.heading": "开始使用", "getting_started.invite": "邀请用户", - "getting_started.open_source_notice": "Mastodon 是一个开源软件。欢迎前往 GitHub({github})贡献代码或反馈问题。", + "getting_started.open_source_notice": "Mastodon 是开源软件。欢迎前往 GitHub({github})贡献代码或反馈问题。", "getting_started.security": "帐户安全", "getting_started.terms": "使用条款", "hashtag.column_header.tag_mode.all": "以及 {additional}", @@ -161,21 +183,21 @@ "intervals.full.minutes": "{number} 分钟", "introduction.federation.action": "下一步", "introduction.federation.federated.headline": "跨站", - "introduction.federation.federated.text": "其他跨站服务器的公共动态会显示在跨站时间线中。", + "introduction.federation.federated.text": "联邦宇宙中其他服务器的公开嘟文会显示在跨站时间轴中。", "introduction.federation.home.headline": "主页", - "introduction.federation.home.text": "你所关注的用户的动态会显示在主页里。你可以关注任何服务器上的任何人!", + "introduction.federation.home.text": "你所关注的用户的动态会显示在主页里。你可以关注任何服务器上的任何人!", "introduction.federation.local.headline": "本站", "introduction.federation.local.text": "你所关注的用户的动态会显示在主页里,你可以关注任何服务器上的任何人。", "introduction.interactions.action": "教程结束!", - "introduction.interactions.favourite.headline": "收藏", - "introduction.interactions.favourite.text": "你可以保存嘟文以便以后阅读。或者通过收藏功能告诉作者你点了个赞。", + "introduction.interactions.favourite.headline": "喜欢", + "introduction.interactions.favourite.text": "通过喜欢一条嘟文,你可以保存它以便以后阅读,并且告诉作者你喜欢它。", "introduction.interactions.reblog.headline": "转嘟", "introduction.interactions.reblog.text": "通过转嘟,你可以向你的关注者分享其他人的嘟文。", "introduction.interactions.reply.headline": "回复", - "introduction.interactions.reply.text": "你可以向其他人回复,这些回复会像对话一样串在一起。", + "introduction.interactions.reply.text": "你可以回复其他嘟文,这些回复会像对话一样关联在一起。", "introduction.welcome.action": "让我们开始吧!", "introduction.welcome.headline": "首先", - "introduction.welcome.text": "欢迎来到联邦!稍后,您将可以广播消息冰河您的朋友交流,这些消息将穿越于联邦中的各式服务器。但是这台服务器,{domain},是特殊的——它保存了你的个人资料,所以请记住它的名字。", + "introduction.welcome.text": "欢迎来到联邦宇宙!很快,您就可以发布信息并和您的朋友交流,这些消息将发送到联邦中的各个服务器中。但是这台服务器,{domain},是特殊的——它保存了你的个人资料,所以请记住它的名字。", "keyboard_shortcuts.back": "返回上一页", "keyboard_shortcuts.blocked": "打开被屏蔽用户列表", "keyboard_shortcuts.boost": "转嘟", @@ -185,18 +207,18 @@ "keyboard_shortcuts.direct": "打开私信栏", "keyboard_shortcuts.down": "在列表中让光标下移", "keyboard_shortcuts.enter": "展开嘟文", - "keyboard_shortcuts.favourite": "收藏嘟文", - "keyboard_shortcuts.favourites": "打开收藏列表", - "keyboard_shortcuts.federated": "打开跨站时间线", + "keyboard_shortcuts.favourite": "喜欢嘟文", + "keyboard_shortcuts.favourites": "打开喜欢的嘟文列表", + "keyboard_shortcuts.federated": "打开跨站时间轴", "keyboard_shortcuts.heading": "快捷键列表", - "keyboard_shortcuts.home": "打开主页时间线", + "keyboard_shortcuts.home": "打开主页时间轴", "keyboard_shortcuts.hotkey": "快捷键", "keyboard_shortcuts.legend": "显示此列表", - "keyboard_shortcuts.local": "打开本站时间线", + "keyboard_shortcuts.local": "打开本站时间轴", "keyboard_shortcuts.mention": "提及嘟文作者", - "keyboard_shortcuts.muted": "打开屏蔽用户列表", + "keyboard_shortcuts.muted": "打开隐藏用户列表", "keyboard_shortcuts.my_profile": "打开你的个人资料", - "keyboard_shortcuts.notifications": "打卡通知栏", + "keyboard_shortcuts.notifications": "打开通知栏", "keyboard_shortcuts.pinned": "打开置顶嘟文列表", "keyboard_shortcuts.profile": "打开作者的个人资料", "keyboard_shortcuts.reply": "回复嘟文", @@ -213,7 +235,7 @@ "lightbox.previous": "上一个", "lightbox.view_context": "查看上下文", "lists.account.add": "添加到列表", - "lists.account.remove": "从列表中删除", + "lists.account.remove": "从列表中移除", "lists.delete": "删除列表", "lists.edit": "编辑列表", "lists.edit.submit": "更改标题", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "新列表的标题", "lists.search": "搜索你关注的人", "lists.subheading": "你的列表", + "load_pending": "{count} 项", "loading_indicator.label": "加载中……", "media_gallery.toggle_visible": "切换显示/隐藏", "missing_indicator.label": "找不到内容", @@ -234,30 +257,29 @@ "navigation_bar.discover": "发现", "navigation_bar.domain_blocks": "已屏蔽的网站", "navigation_bar.edit_profile": "修改个人资料", - "navigation_bar.favourites": "收藏的内容", - "navigation_bar.filters": "被隐藏的词", + "navigation_bar.favourites": "喜欢", + "navigation_bar.filters": "屏蔽关键词", "navigation_bar.follow_requests": "关注请求", - "navigation_bar.follows_and_followers": "正在关注以及关注者", + "navigation_bar.follows_and_followers": "关注管理", "navigation_bar.info": "关于本站", "navigation_bar.keyboard_shortcuts": "快捷键列表", "navigation_bar.lists": "列表", - "navigation_bar.logout": "注销", + "navigation_bar.logout": "登出", "navigation_bar.mutes": "已隐藏的用户", "navigation_bar.personal": "个人", "navigation_bar.pins": "置顶嘟文", "navigation_bar.preferences": "首选项", - "navigation_bar.profile_directory": "用户资料目录", "navigation_bar.public_timeline": "跨站公共时间轴", "navigation_bar.security": "安全", - "notification.favourite": "{name} 收藏了你的嘟文", + "notification.favourite": "{name} 喜欢了你的嘟文", "notification.follow": "{name} 开始关注你", - "notification.mention": "{name} 提及你", + "notification.mention": "{name} 提及了你", "notification.poll": "你参与的一个投票已经结束", "notification.reblog": "{name} 转嘟了你的嘟文", "notifications.clear": "清空通知列表", "notifications.clear_confirmation": "你确定要永久清空通知列表吗?", "notifications.column_settings.alert": "桌面通知", - "notifications.column_settings.favourite": "当你的嘟文被收藏时:", + "notifications.column_settings.favourite": "当你的嘟文被喜欢时:", "notifications.column_settings.filter_bar.advanced": "显示所有类别", "notifications.column_settings.filter_bar.category": "快速过滤栏", "notifications.column_settings.filter_bar.show": "显示", @@ -270,15 +292,17 @@ "notifications.column_settings.sound": "播放音效", "notifications.filter.all": "全部", "notifications.filter.boosts": "转嘟", - "notifications.filter.favourites": "收藏", + "notifications.filter.favourites": "喜欢", "notifications.filter.follows": "关注", "notifications.filter.mentions": "提及", "notifications.filter.polls": "投票结果", "notifications.group": "{count} 条通知", "poll.closed": "已关闭", "poll.refresh": "刷新", + "poll.total_people": "{count, plural, one {# 人} other {# 人}}", "poll.total_votes": "{count} 票", "poll.vote": "投票", + "poll.voted": "您已经对这个答案投过票了", "poll_button.add_poll": "发起投票", "poll_button.remove_poll": "移除投票", "privacy.change": "设置嘟文可见范围", @@ -290,6 +314,7 @@ "privacy.public.short": "公开", "privacy.unlisted.long": "所有人可见,但不会出现在公共时间轴上", "privacy.unlisted.short": "不公开", + "refresh": "刷新", "regeneration_indicator.label": "加载中……", "regeneration_indicator.sublabel": "你的主页时间轴正在准备中!", "relative_time.days": "{number}天", @@ -300,32 +325,33 @@ "reply_indicator.cancel": "取消", "report.forward": "发送举报至 {target}", "report.forward_hint": "这名用户来自另一个服务器。是否要向那个服务器发送一条匿名的举报?", - "report.hint": "举报将会发送给你所在服务器的监察员。你可以在下面填写举报这个用户的理由:", - "report.placeholder": "附言", + "report.hint": "举报将会发送给你所在服务器的监察员。你可以在下面填写举报该用户的理由:", + "report.placeholder": "备注", "report.submit": "提交", "report.target": "举报 {target}", "search.placeholder": "搜索", "search_popout.search_format": "高级搜索格式", - "search_popout.tips.full_text": "输入其他内容将会返回所有你撰写、收藏、转嘟过或提及到你的嘟文,同时也会在用户名、昵称和话题标签中进行搜索。", + "search_popout.tips.full_text": "输入关键词检索所有你发送、喜欢、转嘟过或提及到你的嘟文,以及其他用户公开的用户名、昵称和话题标签。", "search_popout.tips.hashtag": "话题标签", "search_popout.tips.status": "嘟文", - "search_popout.tips.text": "输入其他内容将会返回昵称、用户名和话题标签", + "search_popout.tips.text": "输入关键词检索昵称、用户名和话题标签", "search_popout.tips.user": "用户", "search_results.accounts": "用户", "search_results.hashtags": "话题标签", "search_results.statuses": "嘟文", + "search_results.statuses_fts_disabled": "此Mastodon服务器未启用嘟文内容搜索。", "search_results.total": "共 {count, number} 个结果", "status.admin_account": "打开 @{name} 的管理界面", "status.admin_status": "打开这条嘟文的管理界面", "status.block": "屏蔽 @{name}", "status.cancel_reblog_private": "取消转嘟", - "status.cannot_reblog": "无法转嘟这条嘟文", - "status.copy": "复制链接到嘟文中", + "status.cannot_reblog": "这条嘟文不允许被转嘟", + "status.copy": "复制嘟文链接", "status.delete": "删除", "status.detailed_status": "对话详情", "status.direct": "发送私信给 @{name}", "status.embed": "嵌入", - "status.favourite": "收藏", + "status.favourite": "喜欢", "status.filtered": "已过滤", "status.load_more": "加载更多", "status.media_hidden": "隐藏媒体内容", @@ -338,9 +364,9 @@ "status.pinned": "置顶嘟文", "status.read_more": "阅读全文", "status.reblog": "转嘟", - "status.reblog_private": "转嘟给原有关注者", + "status.reblog_private": "转嘟(可见者不变)", "status.reblogged_by": "{name} 转嘟了", - "status.reblogs.empty": "无人转嘟此条。如果有人转嘟了,就会显示在这里。", + "status.reblogs.empty": "没有人转嘟过此条嘟文。如果有人转嘟了,就会显示在这里。", "status.redraft": "删除并重新编辑", "status.reply": "回复", "status.replyAll": "回复所有人", @@ -352,6 +378,7 @@ "status.show_more": "显示内容", "status.show_more_all": "显示所有内容", "status.show_thread": "显示全部对话", + "status.uncached_media_warning": "不可用", "status.unmute_conversation": "不再隐藏此对话", "status.unpin": "在个人资料页面取消置顶", "suggestions.dismiss": "关闭建议", @@ -367,15 +394,23 @@ "time_remaining.moments": "即将结束", "time_remaining.seconds": "剩余 {number, plural, one {# 秒} other {# 秒}}", "trends.count_by_accounts": "{count} 人正在讨论", - "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会被丢弃。", + "trends.trending_now": "现在流行", + "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会丢失。", "upload_area.title": "将文件拖放到此处开始上传", "upload_button.label": "上传媒体文件 (JPEG, PNG, GIF, WebM, MP4, MOV)", - "upload_error.limit": "超过文件上传限制。", + "upload_error.limit": "文件大小超过限制。", "upload_error.poll": "投票中不允许上传文件。", "upload_form.description": "为视觉障碍人士添加文字说明", - "upload_form.focus": "剪裁", + "upload_form.edit": "编辑", "upload_form.undo": "删除", - "upload_progress.label": "上传中…", + "upload_modal.analyzing_picture": "分析图片…", + "upload_modal.apply": "应用", + "upload_modal.description_placeholder": "天地玄黄 宇宙洪荒 日月盈仄 辰宿列张", + "upload_modal.detect_text": "从图片中检测文本", + "upload_modal.edit_media": "编辑媒体", + "upload_modal.hint": "在预览图上点击或拖动圆圈,以选择缩略图的焦点。", + "upload_modal.preview_label": "预览 ({ratio})", + "upload_progress.label": "上传中……", "video.close": "关闭视频", "video.exit_fullscreen": "退出全屏", "video.expand": "展开视频", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 2cfc11703..3ca9f0e2e 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -4,6 +4,7 @@ "account.block": "封鎖 @{name}", "account.block_domain": "隱藏來自 {domain} 的一切文章", "account.blocked": "封鎖", + "account.cancel_follow_request": "Cancel follow request", "account.direct": "私訊 @{name}", "account.domain_blocked": "服務站被隱藏", "account.edit_profile": "修改個人資料", @@ -15,6 +16,7 @@ "account.follows.empty": "This user doesn't follow anyone yet.", "account.follows_you": "關注你", "account.hide_reblogs": "隱藏 @{name} 的轉推", + "account.last_status": "Last active", "account.link_verified_on": "Ownership of this link was checked on {date}", "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", "account.media": "媒體", @@ -23,6 +25,7 @@ "account.mute": "將 @{name} 靜音", "account.mute_notifications": "將來自 @{name} 的通知靜音", "account.muted": "靜音", + "account.never_active": "Never", "account.posts": "文章", "account.posts_with_replies": "包含回覆的文章", "account.report": "舉報 @{name}", @@ -35,8 +38,11 @@ "account.unfollow": "取消關注", "account.unmute": "取消 @{name} 的靜音", "account.unmute_notifications": "取消來自 @{name} 通知的靜音", + "alert.rate_limited.message": "Please retry after {retry_time, time, medium}.", + "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "發生不可預期的錯誤。", "alert.unexpected.title": "噢!", + "autosuggest_hashtag.per_week": "{count} per week", "boost_modal.combo": "如你想在下次路過這顯示,請按{combo},", "bundle_column_error.body": "加載本組件出錯。", "bundle_column_error.retry": "重試", @@ -47,6 +53,7 @@ "column.blocks": "封鎖用戶", "column.community": "本站時間軸", "column.direct": "個人訊息", + "column.directory": "Browse profiles", "column.domain_blocks": "隱藏的服務站", "column.favourites": "最愛的文章", "column.follow_requests": "關注請求", @@ -93,7 +100,10 @@ "confirmations.delete_list.message": "你確定要永久刪除這列表嗎?", "confirmations.domain_block.confirm": "隱藏整個網站", "confirmations.domain_block.message": "你真的真的確定要隱藏整個 {domain} ?多數情況下,比較推薦封鎖或靜音幾個特定目標就好。你從此將不會再看到該站的內容和通知。來自該站的關注者亦會被移除。", + "confirmations.logout.confirm": "Log out", + "confirmations.logout.message": "Are you sure you want to log out?", "confirmations.mute.confirm": "靜音", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "你確定要將{name}靜音嗎?", "confirmations.redraft.confirm": "刪除並編輯", "confirmations.redraft.message": "你確定要刪除並重新編輯嗎?所有相關的回覆、轉推與最愛都會被刪除。", @@ -101,6 +111,14 @@ "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", "confirmations.unfollow.confirm": "取消關注", "confirmations.unfollow.message": "真的不要繼續關注 {name} 了嗎?", + "conversation.delete": "Delete conversation", + "conversation.mark_as_read": "Mark as read", + "conversation.open": "View conversation", + "conversation.with": "With {names}", + "directory.federated": "From known fediverse", + "directory.local": "From {domain} only", + "directory.new_arrivals": "New arrivals", + "directory.recently_active": "Recently active", "embed.instructions": "要內嵌此文章,請將以下代碼貼進你的網站。", "embed.preview": "看上去會是這樣:", "emoji_button.activity": "活動", @@ -134,6 +152,10 @@ "empty_column.mutes": "You haven't muted any users yet.", "empty_column.notifications": "你沒有任何通知紀錄,快向其他用戶搭訕吧。", "empty_column.public": "跨站時間軸暫時沒有內容!快寫一些公共的文章,或者關注另一些服務站的用戶吧!你和本站、友站的交流,將決定這裏出現的內容。", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "批准", "follow_request.reject": "拒絕", "getting_started.developers": "開發者", @@ -221,6 +243,7 @@ "lists.new.title_placeholder": "新列表標題", "lists.search": "從你關注的用戶中搜索", "lists.subheading": "列表", + "load_pending": "{count, plural, one {# new item} other {# new items}}", "loading_indicator.label": "載入中...", "media_gallery.toggle_visible": "打開或關上", "missing_indicator.label": "找不到內容", @@ -246,7 +269,6 @@ "navigation_bar.personal": "Personal", "navigation_bar.pins": "置頂文章", "navigation_bar.preferences": "偏好設定", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "跨站時間軸", "navigation_bar.security": "安全", "notification.favourite": "{name} 收藏了你的文章", @@ -277,8 +299,10 @@ "notifications.group": "{count} 條通知", "poll.closed": "Closed", "poll.refresh": "Refresh", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", "poll.vote": "Vote", + "poll.voted": "You voted for this answer", "poll_button.add_poll": "Add a poll", "poll_button.remove_poll": "Remove poll", "privacy.change": "調整私隱設定", @@ -290,6 +314,7 @@ "privacy.public.short": "公共", "privacy.unlisted.long": "公開,但不在公共時間軸顯示", "privacy.unlisted.short": "公開", + "refresh": "Refresh", "regeneration_indicator.label": "載入中……", "regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!", "relative_time.days": "{number}日", @@ -314,6 +339,7 @@ "search_results.accounts": "使用者", "search_results.hashtags": "標籤", "search_results.statuses": "文章", + "search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.", "search_results.total": "{count, number} 項結果", "status.admin_account": "Open moderation interface for @{name}", "status.admin_status": "Open this status in the moderation interface", @@ -352,6 +378,7 @@ "status.show_more": "顯示更多", "status.show_more_all": "顯示更多這類文章", "status.show_thread": "Show thread", + "status.uncached_media_warning": "Not available", "status.unmute_conversation": "解禁對話", "status.unpin": "解除置頂", "suggestions.dismiss": "Dismiss suggestion", @@ -367,14 +394,22 @@ "time_remaining.moments": "Moments remaining", "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", "trends.count_by_accounts": "{count} 位用戶在討論", + "trends.trending_now": "Trending now", "ui.beforeunload": "如果你現在離開 Mastodon,你的草稿內容將會被丟棄。", "upload_area.title": "將檔案拖放至此上載", "upload_button.label": "上載媒體檔案", "upload_error.limit": "File upload limit exceeded.", "upload_error.poll": "File upload not allowed with polls.", "upload_form.description": "為視覺障礙人士添加文字說明", - "upload_form.focus": "裁切", + "upload_form.edit": "Edit", "upload_form.undo": "刪除", + "upload_modal.analyzing_picture": "Analyzing picture…", + "upload_modal.apply": "Apply", + "upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog", + "upload_modal.detect_text": "Detect text from picture", + "upload_modal.edit_media": "Edit media", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "Preview ({ratio})", "upload_progress.label": "上載中……", "video.close": "關閉影片", "video.exit_fullscreen": "退出全熒幕", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 5715ef01a..136573381 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -2,27 +2,30 @@ "account.add_or_remove_from_list": "從名單中新增或移除", "account.badges.bot": "機器人", "account.block": "封鎖 @{name}", - "account.block_domain": "隱藏來自 {domain} 的所有嘟文", + "account.block_domain": "隱藏來自 {domain} 的所有內容", "account.blocked": "已封鎖", + "account.cancel_follow_request": "取消關注請求", "account.direct": "傳私訊給 @{name}", "account.domain_blocked": "已隱藏網域", "account.edit_profile": "編輯個人資料", "account.endorse": "在個人資料推薦對方", "account.follow": "關注", "account.followers": "關注者", - "account.followers.empty": "還沒有人關注這位使用者。", + "account.followers.empty": "尚沒有人關注這位使用者。", "account.follows": "正在關注", - "account.follows.empty": "這個使用者尚未關注任何使用者。", + "account.follows.empty": "這位使用者尚未關注任何使用者。", "account.follows_you": "關注了你", "account.hide_reblogs": "隱藏來自 @{name} 的轉推", - "account.link_verified_on": "此連結的所有權已在 {date} 檢查", - "account.locked_info": "此帳號的隱私狀態被設為鎖定,擁有者將手動審核可關注此帳號的人。", + "account.last_status": "上次活躍", + "account.link_verified_on": "已在 {date} 檢查此連結的擁有者權限", + "account.locked_info": "這隻帳戶的隱私狀態被設成鎖定。該擁有者會手動審核能關注這隻帳號的人。", "account.media": "媒體", "account.mention": "提及 @{name}", "account.moved_to": "{name} 已遷移至:", "account.mute": "靜音 @{name}", "account.mute_notifications": "靜音來自 @{name} 的通知", "account.muted": "已靜音", + "account.never_active": "永不", "account.posts": "嘟文", "account.posts_with_replies": "嘟文與回覆", "account.report": "檢舉 @{name}", @@ -33,22 +36,26 @@ "account.unblock_domain": "取消隱藏 {domain}", "account.unendorse": "不再於個人資料頁面推薦對方", "account.unfollow": "取消關注", - "account.unmute": "不再靜音 @{name}", - "account.unmute_notifications": "不再靜音來自 @{name} 的通知", + "account.unmute": "取消靜音 @{name}", + "account.unmute_notifications": "重新接收來自 @{name} 的通知", + "alert.rate_limited.message": "請在 {retry_time, time, medium} 過後重試", + "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生了非預期的錯誤。", "alert.unexpected.title": "哎呀!", + "autosuggest_hashtag.per_week": "{count} / 週", "boost_modal.combo": "下次您可以按 {combo} 跳過", - "bundle_column_error.body": "載入此組件時發生錯誤。", + "bundle_column_error.body": "載入此元件時發生錯誤。", "bundle_column_error.retry": "重試", "bundle_column_error.title": "網路錯誤", "bundle_modal_error.close": "關閉", - "bundle_modal_error.message": "載入此組件時發生錯誤。", + "bundle_modal_error.message": "載入此元件時發生錯誤。", "bundle_modal_error.retry": "重試", "column.blocks": "封鎖的使用者", - "column.community": "本地時間軸", + "column.community": "本機時間軸", "column.direct": "私訊", + "column.directory": "瀏覽個人資料", "column.domain_blocks": "隱藏的網域", - "column.favourites": "最愛", + "column.favourites": "收藏", "column.follow_requests": "關注請求", "column.home": "主頁", "column.lists": "名單", @@ -64,44 +71,55 @@ "column_header.show_settings": "顯示設定", "column_header.unpin": "取消釘選", "column_subheading.settings": "設定", - "community.column_settings.media_only": "僅媒體", - "compose_form.direct_message_warning": "這條嘟文只有被提及的使用者才能看到。", + "community.column_settings.media_only": "只有媒體", + "compose_form.direct_message_warning": "這條嘟文只有被提及的使用者才看得到。", "compose_form.direct_message_warning_learn_more": "了解更多", - "compose_form.hashtag_warning": "因這則嘟文設成「不公開」,因此它不會列在任何「#」標籤下。只有公開嘟文才能用「#」標籤找到。", - "compose_form.lock_disclaimer": "您的帳戶尚未{locked}。任何人都能關注您並看到您設定成僅關注者能看的嘟文。", + "compose_form.hashtag_warning": "由於這則嘟文被設定成「不公開」,所以它將不會被列在任何主題標籤下。只有公開的嘟文才能藉主題標籤找到。", + "compose_form.lock_disclaimer": "您的帳戶尚未{locked}。任何人都能關注您並看到您設定成只有關注者能看的嘟文。", "compose_form.lock_disclaimer.lock": "上鎖", "compose_form.placeholder": "您正在想些什麼?", "compose_form.poll.add_option": "新增選擇", "compose_form.poll.duration": "投票期限", "compose_form.poll.option_placeholder": "第 {number} 個選擇", "compose_form.poll.remove_option": "移除此選擇", - "compose_form.publish": "嘟掉", + "compose_form.publish": "嘟出去", "compose_form.publish_loud": "{publish}!", - "compose_form.sensitive.hide": "Mark media as sensitive", + "compose_form.sensitive.hide": "標記媒體為敏感內容", "compose_form.sensitive.marked": "此媒體被標記為敏感內容", - "compose_form.sensitive.unmarked": "此媒體未被標記為敏感內容", - "compose_form.spoiler.marked": "正文已隱藏在警告之後", + "compose_form.sensitive.unmarked": "此媒體未標記為敏感內容", + "compose_form.spoiler.marked": "正文已隱藏到警告之後", "compose_form.spoiler.unmarked": "正文未被隱藏", "compose_form.spoiler_placeholder": "請在此處寫入警告訊息", "confirmation_modal.cancel": "取消", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "封鎖並檢舉", "confirmations.block.confirm": "封鎖", - "confirmations.block.message": "你確定要封鎖 {name} ?", + "confirmations.block.message": "確定封鎖 {name} ?", "confirmations.delete.confirm": "刪除", "confirmations.delete.message": "你確定要刪除這條嘟文?", "confirmations.delete_list.confirm": "刪除", - "confirmations.delete_list.message": "確定要永久刪除此名單?", + "confirmations.delete_list.message": "確定永久刪除此名單?", "confirmations.domain_block.confirm": "隱藏整個網域", - "confirmations.domain_block.message": "確定封鎖整個 {domain} 嗎?多數情況下,封鎖或靜音幾個特定使用者應該就能滿足你的需求了。您將不能在任何公開時間軸或通知中看到來自該網域的內容。來自該網域的關注者將被移除。", + "confirmations.domain_block.message": "真的非常確定封鎖整個 {domain} 嗎?大部分情況下,你只需要封鎖或靜音少數特定的人就能滿足需求了。你將不能在任何公開的時間軸及通知中看到那個網域的內容。你來自該網域的關注者也會被移除。", + "confirmations.logout.confirm": "登出", + "confirmations.logout.message": "確定要登出嗎?", "confirmations.mute.confirm": "靜音", + "confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.", "confirmations.mute.message": "確定靜音 {name} ?", "confirmations.redraft.confirm": "刪除並重新編輯", - "confirmations.redraft.message": "你確定要刪除這條嘟文並重新編輯它嗎?這麼做將失去轉嘟和最愛,而對原始嘟文的回覆將被孤立。", + "confirmations.redraft.message": "確定刪掉這則嘟文並重新編輯嗎?將會失去這則嘟文的轉嘟及收藏,且回覆這則的嘟文將會變成獨立的嘟文。", "confirmations.reply.confirm": "回覆", "confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?", "confirmations.unfollow.confirm": "取消關注", "confirmations.unfollow.message": "真的要取消關注 {name} 嗎?", - "embed.instructions": "要嵌入此嘟文,請將以下代碼貼進你的網站。", + "conversation.delete": "刪除對話", + "conversation.mark_as_read": "標為已讀", + "conversation.open": "檢視對話", + "conversation.with": "與 {names}", + "directory.federated": "來自已知聯邦宇宙", + "directory.local": "僅來自 {domain}", + "directory.new_arrivals": "新貨", + "directory.recently_active": "最近活躍", + "embed.instructions": "要嵌入此嘟文,請將以下程式碼貼進你的網站。", "embed.preview": "他會顯示成這樣:", "emoji_button.activity": "活動", "emoji_button.custom": "自訂", @@ -109,7 +127,7 @@ "emoji_button.food": "飲食", "emoji_button.label": "插入表情符號", "emoji_button.nature": "大自然", - "emoji_button.not_found": "就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "啊就沒這表情符號吼!! (╯°□°)╯︵ ┻━┻", "emoji_button.objects": "物件", "emoji_button.people": "使用者", "emoji_button.recent": "最常使用", @@ -118,22 +136,26 @@ "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊與地點", "empty_column.account_timeline": "這裡還沒有嘟文!", - "empty_column.account_unavailable": "Profile unavailable", + "empty_column.account_unavailable": "無法取得個人資料", "empty_column.blocks": "你還沒有封鎖任何使用者。", "empty_column.community": "本地時間軸是空的。快公開嘟些文搶頭香啊!", "empty_column.direct": "您還沒有任何私訊。當您私訊別人或收到私訊時,它將於此顯示。", "empty_column.domain_blocks": "尚未隱藏任何網域。", - "empty_column.favourited_statuses": "你還沒有將任何嘟文標為最愛。最愛的嘟文將顯示於此。", - "empty_column.favourites": "還沒有人將此嘟文標為最愛。如果有人標成最愛,則會顯示在這裡。", - "empty_column.follow_requests": "您尚未收到任何關注請求。收到時會顯示於此。", - "empty_column.hashtag": "這個「#」標籤下什麼都沒有。", + "empty_column.favourited_statuses": "你還沒收藏任何嘟文。這裡將會顯示你收藏的嘟文。", + "empty_column.favourites": "還沒有人收藏這則嘟文。這裡將會顯示被收藏的嘟文。", + "empty_column.follow_requests": "您尚未收到任何關注請求。這裡將會顯示收到的關注請求。", + "empty_column.hashtag": "這個主題標籤下什麼也沒有。", "empty_column.home": "您的首頁時間軸是空的!前往 {public} 或使用搜尋功能來認識其他人。", "empty_column.home.public_timeline": "公開時間軸", - "empty_column.list": "此份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會出現在這裡。", - "empty_column.lists": "你還沒有建立任何名單。你建立的名單將會顯示在這裡。", - "empty_column.mutes": "你還沒有靜音任何使用者。", + "empty_column.list": "這份名單還沒有東西。當此名單的成員嘟出了新的嘟文時,它們就會顯示於此。", + "empty_column.lists": "你還沒有建立任何名單。這裡將會顯示你所建立的名單。", + "empty_column.mutes": "你尚未靜音任何使用者。", "empty_column.notifications": "您尚未收到任何通知,和別人互動開啟對話吧。", "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或著自己關注其他伺服器的使用者後就會有嘟文出現了", + "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", + "error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.", + "errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard", + "errors.unexpected_crash.report_issue": "Report issue", "follow_request.authorize": "授權", "follow_request.reject": "拒絕", "getting_started.developers": "開發者", @@ -146,72 +168,72 @@ "getting_started.terms": "服務條款", "hashtag.column_header.tag_mode.all": "以及{additional}", "hashtag.column_header.tag_mode.any": "或是{additional}", - "hashtag.column_header.tag_mode.none": "而不用{additional}", + "hashtag.column_header.tag_mode.none": "而無需{additional}", "hashtag.column_settings.select.no_options_message": "找不到建議", - "hashtag.column_settings.select.placeholder": "輸入「#」標籤…", + "hashtag.column_settings.select.placeholder": "輸入主題標籤…", "hashtag.column_settings.tag_mode.all": "全部", "hashtag.column_settings.tag_mode.any": "任一", - "hashtag.column_settings.tag_mode.none": "全都不要", - "hashtag.column_settings.tag_toggle": "對此欄位加入額外標籤", + "hashtag.column_settings.tag_mode.none": "全不", + "hashtag.column_settings.tag_toggle": "將額外標籤加入到這個欄位", "home.column_settings.basic": "基本", - "home.column_settings.show_reblogs": "顯示轉推", + "home.column_settings.show_reblogs": "顯示轉嘟", "home.column_settings.show_replies": "顯示回覆", "intervals.full.days": "{number, plural, one {# 天} other {# 天}}", "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}", "introduction.federation.action": "下一步", - "introduction.federation.federated.headline": "聯邦", - "introduction.federation.federated.text": "來自聯邦網路中其他伺服器的公開嘟文將會在聯邦網路時間軸中顯示。", + "introduction.federation.federated.headline": "站台聯盟", + "introduction.federation.federated.text": "來自聯盟宇宙中其他站台的公開嘟文將會在站點聯盟時間軸中顯示。", "introduction.federation.home.headline": "首頁", - "introduction.federation.home.text": "您所關注使用者所發的嘟文將顯示在首頁的訊息來源。您能關注任何伺服器上的任何人!", - "introduction.federation.local.headline": "本地", - "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本地時間軸中。", + "introduction.federation.home.text": "你關注使用者的嘟文將會在首頁動態中顯示。你可以關注任何伺服器上的任何人!", + "introduction.federation.local.headline": "本機", + "introduction.federation.local.text": "跟您同伺服器之使用者所發的公開嘟文將會顯示在本機時間軸中。", "introduction.interactions.action": "完成教學!", - "introduction.interactions.favourite.headline": "最愛", - "introduction.interactions.favourite.text": "您能稍候儲存嘟文,或者將嘟文加到最愛,讓作者知道您喜歡這嘟文。", + "introduction.interactions.favourite.headline": "關注", + "introduction.interactions.favourite.text": "您能儲存嘟文供稍候觀看,或者收藏嘟文,讓作者知道您喜歡這則嘟文。", "introduction.interactions.reblog.headline": "轉嘟", - "introduction.interactions.reblog.text": "您能透過轉嘟他人嘟文來分享給您的關注者。", + "introduction.interactions.reblog.text": "您能藉由轉嘟他人嘟文來分享給您的關注者。", "introduction.interactions.reply.headline": "回覆", - "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文。將會把這些回覆串成一串對話。", - "introduction.welcome.action": "開始!", + "introduction.interactions.reply.text": "您能回覆其他人或自己的嘟文,這麼做會把這些回覆串成一串對話。", + "introduction.welcome.action": "開始旅程吧!", "introduction.welcome.headline": "第一步", - "introduction.welcome.text": "歡迎來到聯邦!稍候您將可以廣播訊息並跨各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},十分特殊 -- 它寄管了您的個人資料,所以請記住這台伺服器的名稱。", + "introduction.welcome.text": "歡迎來到聯盟宇宙!等等你就可以廣播訊息及跨越各種各式各樣的伺服器與朋友聊天。但這台伺服器,{domain},非常特別 - 它寄管了你的個人資料,所以請記住它的名字。", "keyboard_shortcuts.back": "返回上一頁", - "keyboard_shortcuts.blocked": "開啟「封鎖的使用者」名單", + "keyboard_shortcuts.blocked": "開啟「封鎖使用者」名單", "keyboard_shortcuts.boost": "轉嘟", "keyboard_shortcuts.column": "將焦點放在其中一欄的嘟文", "keyboard_shortcuts.compose": "將焦點移至撰寫文字區塊", "keyboard_shortcuts.description": "描述", "keyboard_shortcuts.direct": "開啟私訊欄", - "keyboard_shortcuts.down": "在名單中往下移動", + "keyboard_shortcuts.down": "往下移動名單項目", "keyboard_shortcuts.enter": "檢視嘟文", - "keyboard_shortcuts.favourite": "加入最愛", - "keyboard_shortcuts.favourites": "開啟最愛名單", - "keyboard_shortcuts.federated": "開啟聯邦時間軸", + "keyboard_shortcuts.favourite": "收藏", + "keyboard_shortcuts.favourites": "開啟收藏名單", + "keyboard_shortcuts.federated": "開啟站點聯盟時間軸", "keyboard_shortcuts.heading": "鍵盤快速鍵", "keyboard_shortcuts.home": "開啟首頁時間軸", "keyboard_shortcuts.hotkey": "快速鍵", - "keyboard_shortcuts.legend": "顯示此說明", - "keyboard_shortcuts.local": "開啟本地時間軸", + "keyboard_shortcuts.legend": "顯示此列表", + "keyboard_shortcuts.local": "開啟本機時間軸", "keyboard_shortcuts.mention": "提及作者", "keyboard_shortcuts.muted": "開啟靜音使用者名單", "keyboard_shortcuts.my_profile": "開啟個人資料頁面", "keyboard_shortcuts.notifications": "開啟通知欄", "keyboard_shortcuts.pinned": "開啟釘選的嘟文名單", - "keyboard_shortcuts.profile": "開啟作者的個人資料頁", - "keyboard_shortcuts.reply": "回應嘟文", + "keyboard_shortcuts.profile": "開啟作者的個人資料頁面", + "keyboard_shortcuts.reply": "回覆", "keyboard_shortcuts.requests": "開啟關注請求名單", "keyboard_shortcuts.search": "將焦點移至搜尋框", "keyboard_shortcuts.start": "開啟「開始使用」欄位", "keyboard_shortcuts.toggle_hidden": "顯示/隱藏在內容警告之後的正文", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "顯示 / 隱藏媒體", "keyboard_shortcuts.toot": "開始發出新嘟文", "keyboard_shortcuts.unfocus": "取消輸入文字區塊 / 搜尋的焦點", - "keyboard_shortcuts.up": "在名單中往上移動", + "keyboard_shortcuts.up": "往上移動名單項目", "lightbox.close": "關閉", "lightbox.next": "下一步", "lightbox.previous": "上一步", - "lightbox.view_context": "View context", + "lightbox.view_context": "檢視內文", "lists.account.add": "新增至名單", "lists.account.remove": "從名單中移除", "lists.delete": "刪除名單", @@ -221,23 +243,24 @@ "lists.new.title_placeholder": "新名單標題", "lists.search": "搜尋您關注的使用者", "lists.subheading": "您的名單", + "load_pending": "{count, plural, other {# 個新項目}}", "loading_indicator.label": "讀取中...", "media_gallery.toggle_visible": "切換可見性", "missing_indicator.label": "找不到", "missing_indicator.sublabel": "找不到此資源", - "mute_modal.hide_notifications": "隱藏來自這個使用者的通知?", - "navigation_bar.apps": "行動應用程式", - "navigation_bar.blocks": "封鎖的使用者", - "navigation_bar.community_timeline": "本地時間軸", + "mute_modal.hide_notifications": "隱藏來自這位使用者的通知?", + "navigation_bar.apps": "封鎖的使用者", + "navigation_bar.blocks": "封鎖使用者", + "navigation_bar.community_timeline": "本機時間軸", "navigation_bar.compose": "撰寫新嘟文", "navigation_bar.direct": "私訊", "navigation_bar.discover": "探索", "navigation_bar.domain_blocks": "隱藏的網域", "navigation_bar.edit_profile": "編輯個人資料", - "navigation_bar.favourites": "最愛內容", + "navigation_bar.favourites": "收藏", "navigation_bar.filters": "靜音詞彙", "navigation_bar.follow_requests": "關注請求", - "navigation_bar.follows_and_followers": "Follows and followers", + "navigation_bar.follows_and_followers": "關注及關注者", "navigation_bar.info": "關於此伺服器", "navigation_bar.keyboard_shortcuts": "快速鍵", "navigation_bar.lists": "名單", @@ -246,7 +269,6 @@ "navigation_bar.personal": "個人", "navigation_bar.pins": "釘選的嘟文", "navigation_bar.preferences": "偏好設定", - "navigation_bar.profile_directory": "Profile directory", "navigation_bar.public_timeline": "聯邦時間軸", "navigation_bar.security": "安全性", "notification.favourite": "{name} 把你的嘟文加入了最愛", @@ -277,8 +299,10 @@ "notifications.group": "{count} 條通知", "poll.closed": "已關閉", "poll.refresh": "重新整理", + "poll.total_people": "{count, plural, one {# person} other {# people}}", "poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}", "poll.vote": "投票", + "poll.voted": "你已對此問題投票", "poll_button.add_poll": "建立投票", "poll_button.remove_poll": "移除投票", "privacy.change": "調整隱私狀態", @@ -290,6 +314,7 @@ "privacy.public.short": "公開", "privacy.unlisted.long": "公開,但不會顯示在公開時間軸", "privacy.unlisted.short": "不公開", + "refresh": "Refresh", "regeneration_indicator.label": "載入中…", "regeneration_indicator.sublabel": "你的主頁時間軸正在準備中!", "relative_time.days": "{number} 天", @@ -314,6 +339,7 @@ "search_results.accounts": "使用者", "search_results.hashtags": "主題標籤", "search_results.statuses": "嘟文", + "search_results.statuses_fts_disabled": "「依內容搜尋嘟文」未在此 Mastodon 伺服器啟用。", "search_results.total": "{count, number} 項結果", "status.admin_account": "開啟 @{name} 的管理介面", "status.admin_status": "在管理介面開啟此嘟文", @@ -352,6 +378,7 @@ "status.show_more": "顯示更多", "status.show_more_all": "顯示更多這類嘟文", "status.show_thread": "顯示討論串", + "status.uncached_media_warning": "無法使用", "status.unmute_conversation": "解除此對話的靜音", "status.unpin": "解除置頂", "suggestions.dismiss": "關閉建議", @@ -367,14 +394,22 @@ "time_remaining.moments": "剩餘時間", "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}", "trends.count_by_accounts": "{count} 位使用者在討論", + "trends.trending_now": "目前趨勢", "ui.beforeunload": "如果離開 Mastodon,你的草稿將會不見。", "upload_area.title": "拖放來上傳", "upload_button.label": "上傳媒體檔案 (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "已達到檔案上傳限制。", "upload_error.poll": "不允許在投票上傳檔案。", "upload_form.description": "為視障人士增加文字說明", - "upload_form.focus": "變更預覽", + "upload_form.edit": "編輯", "upload_form.undo": "刪除", + "upload_modal.analyzing_picture": "正在分析圖片…", + "upload_modal.apply": "套用", + "upload_modal.description_placeholder": "A quick brown fox 跳過那隻懶狗", + "upload_modal.detect_text": "從圖片偵測文字", + "upload_modal.edit_media": "編輯媒體", + "upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.", + "upload_modal.preview_label": "預覽 ({ratio})", "upload_progress.label": "上傳中...", "video.close": "關閉影片", "video.exit_fullscreen": "退出全螢幕", diff --git a/app/javascript/mastodon/reducers/alerts.js b/app/javascript/mastodon/reducers/alerts.js index 089d920c3..c62ab0dfd 100644 --- a/app/javascript/mastodon/reducers/alerts.js +++ b/app/javascript/mastodon/reducers/alerts.js @@ -14,6 +14,7 @@ export default function alerts(state = initialState, action) { key: state.size > 0 ? state.last().get('key') + 1 : 0, title: action.title, message: action.message, + message_values: action.message_values, })); case ALERT_DISMISS: return state.filterNot(item => item.get('key') === action.alert.key); diff --git a/app/javascript/mastodon/reducers/blocks.js b/app/javascript/mastodon/reducers/blocks.js new file mode 100644 index 000000000..1b6507163 --- /dev/null +++ b/app/javascript/mastodon/reducers/blocks.js @@ -0,0 +1,22 @@ +import Immutable from 'immutable'; + +import { + BLOCKS_INIT_MODAL, +} from '../actions/blocks'; + +const initialState = Immutable.Map({ + new: Immutable.Map({ + account_id: null, + }), +}); + +export default function mutes(state = initialState, action) { + switch (action.type) { + case BLOCKS_INIT_MODAL: + return state.withMutations((state) => { + state.setIn(['new', 'account_id'], action.account.get('id')); + }); + default: + return state; + } +} diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index 29c691144..c6653fe4c 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -61,6 +61,7 @@ const initialState = ImmutableMap({ is_uploading: false, progress: 0, media_attachments: ImmutableList(), + pending_media_attachments: 0, poll: null, suggestion_token: null, suggestions: ImmutableList(), @@ -103,14 +104,18 @@ function clearAll(state) { }); }; -function appendMedia(state, media) { +function appendMedia(state, media, file) { const prevSize = state.get('media_attachments').size; return state.withMutations(map => { + if (media.get('type') === 'image') { + media = media.set('file', file); + } map.update('media_attachments', list => list.push(media)); map.set('is_uploading', false); map.set('resetFileKey', Math.floor((Math.random() * 0x10000))); map.set('idempotencyKey', uuid()); + map.update('pending_media_attachments', n => n - 1); if (prevSize === 0 && (state.get('default_sensitive') || state.get('spoiler'))) { map.set('sensitive', true); @@ -144,15 +149,20 @@ const insertSuggestion = (state, position, token, completion, path) => { }); }; -const updateSuggestionTags = (state, token) => { - const prefix = token.slice(1); +const sortHashtagsByUse = (state, tags) => { + const personalHistory = state.get('tagHistory'); - return state.merge({ - suggestions: state.get('tagHistory') - .filter(tag => tag.toLowerCase().startsWith(prefix.toLowerCase())) - .slice(0, 4) - .map(tag => '#' + tag), - suggestion_token: token, + return tags.sort((a, b) => { + const usedA = personalHistory.includes(a.name); + const usedB = personalHistory.includes(b.name); + + if (usedA === usedB) { + return 0; + } else if (usedA && !usedB) { + return -1; + } else { + return 1; + } }); }; @@ -195,6 +205,42 @@ const expandMentions = status => { return fragment.innerHTML; }; +const expiresInFromExpiresAt = expires_at => { + if (!expires_at) return 24 * 3600; + const delta = (new Date(expires_at).getTime() - Date.now()) / 1000; + return [300, 1800, 3600, 21600, 86400, 259200, 604800].find(expires_in => expires_in >= delta) || 24 * 3600; +}; + +const mergeLocalHashtagResults = (suggestions, prefix, tagHistory) => { + prefix = prefix.toLowerCase(); + if (suggestions.length < 4) { + const localTags = tagHistory.filter(tag => tag.toLowerCase().startsWith(prefix) && !suggestions.some(suggestion => suggestion.type === 'hashtag' && suggestion.name.toLowerCase() === tag.toLowerCase())); + return suggestions.concat(localTags.slice(0, 4 - suggestions.length).toJS().map(tag => ({ type: 'hashtag', name: tag }))); + } else { + return suggestions; + } +}; + +const normalizeSuggestions = (state, { accounts, emojis, tags, token }) => { + if (accounts) { + return accounts.map(item => ({ id: item.id, type: 'account' })); + } else if (emojis) { + return emojis.map(item => ({ ...item, type: 'emoji' })); + } else { + return mergeLocalHashtagResults(sortHashtagsByUse(state, tags.map(item => ({ ...item, type: 'hashtag' }))), token.slice(1), state.get('tagHistory')); + } +}; + +const updateSuggestionTags = (state, token) => { + const prefix = token.slice(1); + + const suggestions = state.get('suggestions').toJS(); + return state.merge({ + suggestions: ImmutableList(mergeLocalHashtagResults(suggestions, prefix, state.get('tagHistory'))), + suggestion_token: token, + }); +}; + export default function compose(state = initialState, action) { switch(action.type) { case STORE_HYDRATE: @@ -224,6 +270,7 @@ export default function compose(state = initialState, action) { } }); case COMPOSE_SPOILER_TEXT_CHANGE: + if (!state.get('spoiler')) return state; return state .set('spoiler_text', action.text) .set('idempotencyKey', uuid()); @@ -277,11 +324,11 @@ export default function compose(state = initialState, action) { case COMPOSE_UPLOAD_CHANGE_FAIL: return state.set('is_changing_upload', false); case COMPOSE_UPLOAD_REQUEST: - return state.set('is_uploading', true); + return state.set('is_uploading', true).update('pending_media_attachments', n => n + 1); case COMPOSE_UPLOAD_SUCCESS: - return appendMedia(state, fromJS(action.media)); + return appendMedia(state, fromJS(action.media), action.file); case COMPOSE_UPLOAD_FAIL: - return state.set('is_uploading', false); + return state.set('is_uploading', false).update('pending_media_attachments', n => n - 1); case COMPOSE_UPLOAD_UNDO: return removeMedia(state, action.media_id); case COMPOSE_UPLOAD_PROGRESS: @@ -304,7 +351,7 @@ export default function compose(state = initialState, action) { case COMPOSE_SUGGESTIONS_CLEAR: return state.update('suggestions', ImmutableList(), list => list.clear()).set('suggestion_token', null); case COMPOSE_SUGGESTIONS_READY: - return state.set('suggestions', ImmutableList(action.accounts ? action.accounts.map(item => item.id) : action.emojis)).set('suggestion_token', action.token); + return state.set('suggestions', ImmutableList(normalizeSuggestions(state, action))).set('suggestion_token', action.token); case COMPOSE_SUGGESTION_SELECT: return insertSuggestion(state, action.position, action.token, action.completion, action.path); case COMPOSE_SUGGESTION_TAGS_UPDATE: @@ -352,7 +399,7 @@ export default function compose(state = initialState, action) { map.set('poll', ImmutableMap({ options: action.status.getIn(['poll', 'options']).map(x => x.get('title')), multiple: action.status.getIn(['poll', 'multiple']), - expires_in: 24 * 3600, + expires_in: expiresInFromExpiresAt(action.status.getIn(['poll', 'expires_at'])), })); } }); diff --git a/app/javascript/mastodon/reducers/conversations.js b/app/javascript/mastodon/reducers/conversations.js index 9564bffcd..975418eda 100644 --- a/app/javascript/mastodon/reducers/conversations.js +++ b/app/javascript/mastodon/reducers/conversations.js @@ -7,7 +7,10 @@ import { CONVERSATIONS_FETCH_FAIL, CONVERSATIONS_UPDATE, CONVERSATIONS_READ, + CONVERSATIONS_DELETE_SUCCESS, } from '../actions/conversations'; +import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS } from 'mastodon/actions/accounts'; +import { DOMAIN_BLOCK_SUCCESS } from 'mastodon/actions/domain_blocks'; import compareId from '../compare_id'; const initialState = ImmutableMap({ @@ -74,6 +77,10 @@ const expandNormalizedConversations = (state, conversations, next, isLoadingRece }); }; +const filterConversations = (state, accountIds) => { + return state.update('items', list => list.filterNot(item => item.get('accounts').some(accountId => accountIds.includes(accountId)))); +}; + export default function conversations(state = initialState, action) { switch (action.type) { case CONVERSATIONS_FETCH_REQUEST: @@ -96,6 +103,13 @@ export default function conversations(state = initialState, action) { return item; })); + case ACCOUNT_BLOCK_SUCCESS: + case ACCOUNT_MUTE_SUCCESS: + return filterConversations(state, [action.relationship.id]); + case DOMAIN_BLOCK_SUCCESS: + return filterConversations(state, action.accounts); + case CONVERSATIONS_DELETE_SUCCESS: + return state.update('items', list => list.filterNot(item => item.get('id') === action.id)); default: return state; } diff --git a/app/javascript/mastodon/reducers/index.js b/app/javascript/mastodon/reducers/index.js index 981ad8e64..b8d608888 100644 --- a/app/javascript/mastodon/reducers/index.js +++ b/app/javascript/mastodon/reducers/index.js @@ -15,6 +15,7 @@ import settings from './settings'; import push_notifications from './push_notifications'; import status_lists from './status_lists'; import mutes from './mutes'; +import blocks from './blocks'; import reports from './reports'; import contexts from './contexts'; import compose from './compose'; @@ -31,6 +32,8 @@ import conversations from './conversations'; import suggestions from './suggestions'; import polls from './polls'; import identity_proofs from './identity_proofs'; +import trends from './trends'; +import missed_updates from './missed_updates'; const reducers = { dropdown_menu, @@ -49,6 +52,7 @@ const reducers = { settings, push_notifications, mutes, + blocks, reports, contexts, compose, @@ -65,6 +69,8 @@ const reducers = { conversations, suggestions, polls, + trends, + missed_updates, }; export default combineReducers(reducers); diff --git a/app/javascript/mastodon/reducers/missed_updates.js b/app/javascript/mastodon/reducers/missed_updates.js new file mode 100644 index 000000000..b71d62d82 --- /dev/null +++ b/app/javascript/mastodon/reducers/missed_updates.js @@ -0,0 +1,21 @@ +import { Map as ImmutableMap } from 'immutable'; +import { NOTIFICATIONS_UPDATE } from 'mastodon/actions/notifications'; +import { APP_FOCUS, APP_UNFOCUS } from 'mastodon/actions/app'; + +const initialState = ImmutableMap({ + focused: true, + unread: 0, +}); + +export default function missed_updates(state = initialState, action) { + switch(action.type) { + case APP_FOCUS: + return state.set('focused', true).set('unread', 0); + case APP_UNFOCUS: + return state.set('focused', false); + case NOTIFICATIONS_UPDATE: + return state.get('focused') ? state : state.update('unread', x => x + 1); + default: + return state; + } +}; diff --git a/app/javascript/mastodon/reducers/modal.js b/app/javascript/mastodon/reducers/modal.js index 599a2443e..a30da2db1 100644 --- a/app/javascript/mastodon/reducers/modal.js +++ b/app/javascript/mastodon/reducers/modal.js @@ -10,7 +10,7 @@ export default function modal(state = initialState, action) { case MODAL_OPEN: return { modalType: action.modalType, modalProps: action.modalProps }; case MODAL_CLOSE: - return initialState; + return (action.modalType === undefined || action.modalType === state.modalType) ? initialState : state; default: return state; } diff --git a/app/javascript/mastodon/reducers/mutes.js b/app/javascript/mastodon/reducers/mutes.js index a96232dbd..4672e5097 100644 --- a/app/javascript/mastodon/reducers/mutes.js +++ b/app/javascript/mastodon/reducers/mutes.js @@ -7,7 +7,6 @@ import { const initialState = Immutable.Map({ new: Immutable.Map({ - isSubmitting: false, account: null, notifications: true, }), @@ -17,7 +16,6 @@ export default function mutes(state = initialState, action) { switch (action.type) { case MUTES_INIT_MODAL: return state.withMutations((state) => { - state.setIn(['new', 'isSubmitting'], false); state.setIn(['new', 'account'], action.account); state.setIn(['new', 'notifications'], true); }); diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 4d9604de9..60e901e39 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -6,19 +6,27 @@ import { NOTIFICATIONS_FILTER_SET, NOTIFICATIONS_CLEAR, NOTIFICATIONS_SCROLL_TOP, + NOTIFICATIONS_LOAD_PENDING, + NOTIFICATIONS_MOUNT, + NOTIFICATIONS_UNMOUNT, } from '../actions/notifications'; import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS, + FOLLOW_REQUEST_AUTHORIZE_SUCCESS, + FOLLOW_REQUEST_REJECT_SUCCESS, } from '../actions/accounts'; +import { DOMAIN_BLOCK_SUCCESS } from 'mastodon/actions/domain_blocks'; import { TIMELINE_DELETE, TIMELINE_DISCONNECT } from '../actions/timelines'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import compareId from '../compare_id'; const initialState = ImmutableMap({ + pendingItems: ImmutableList(), items: ImmutableList(), hasMore: true, top: false, + mounted: false, unread: 0, isLoading: false, }); @@ -31,9 +39,13 @@ const notificationToMap = notification => ImmutableMap({ status: notification.status ? notification.status.id : null, }); -const normalizeNotification = (state, notification) => { +const normalizeNotification = (state, notification, usePendingItems) => { const top = state.get('top'); + if (usePendingItems || !state.get('pendingItems').isEmpty()) { + return state.update('pendingItems', list => list.unshift(notificationToMap(notification))).update('unread', unread => unread + 1); + } + if (!top) { state = state.update('unread', unread => unread + 1); } @@ -47,7 +59,7 @@ const normalizeNotification = (state, notification) => { }); }; -const expandNormalizedNotifications = (state, notifications, next) => { +const expandNormalizedNotifications = (state, notifications, next, isLoadingRecent, usePendingItems) => { let items = ImmutableList(); notifications.forEach((n, i) => { @@ -56,7 +68,9 @@ const expandNormalizedNotifications = (state, notifications, next) => { return state.withMutations(mutable => { if (!items.isEmpty()) { - mutable.update('items', list => { + usePendingItems = isLoadingRecent && (usePendingItems || !mutable.get('pendingItems').isEmpty()); + + mutable.update(usePendingItems ? 'pendingItems' : 'items', list => { const lastIndex = 1 + list.findLastIndex( item => item !== null && (compareId(item.get('id'), items.last().get('id')) > 0 || item.get('id') === items.last().get('id')) ); @@ -77,48 +91,63 @@ const expandNormalizedNotifications = (state, notifications, next) => { }); }; -const filterNotifications = (state, relationship) => { - return state.update('items', list => list.filterNot(item => item !== null && item.get('account') === relationship.id)); +const filterNotifications = (state, accountIds, type) => { + const helper = list => list.filterNot(item => item !== null && accountIds.includes(item.get('account')) && (type === undefined || type === item.get('type'))); + return state.update('items', helper).update('pendingItems', helper); }; const updateTop = (state, top) => { if (top) { - state = state.set('unread', 0); + state = state.set('unread', state.get('pendingItems').size); } return state.set('top', top); }; const deleteByStatus = (state, statusId) => { - return state.update('items', list => list.filterNot(item => item !== null && item.get('status') === statusId)); + const helper = list => list.filterNot(item => item !== null && item.get('status') === statusId); + return state.update('items', helper).update('pendingItems', helper); }; export default function notifications(state = initialState, action) { switch(action.type) { + case NOTIFICATIONS_LOAD_PENDING: + return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0); case NOTIFICATIONS_EXPAND_REQUEST: return state.set('isLoading', true); case NOTIFICATIONS_EXPAND_FAIL: return state.set('isLoading', false); case NOTIFICATIONS_FILTER_SET: - return state.set('items', ImmutableList()).set('hasMore', true); + return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', true); case NOTIFICATIONS_SCROLL_TOP: return updateTop(state, action.top); case NOTIFICATIONS_UPDATE: - return normalizeNotification(state, action.notification); + return normalizeNotification(state, action.notification, action.usePendingItems); case NOTIFICATIONS_EXPAND_SUCCESS: - return expandNormalizedNotifications(state, action.notifications, action.next); + return expandNormalizedNotifications(state, action.notifications, action.next, action.isLoadingRecent, action.usePendingItems); case ACCOUNT_BLOCK_SUCCESS: - return filterNotifications(state, action.relationship); + return filterNotifications(state, [action.relationship.id]); + case ACCOUNT_MUTE_SUCCESS: + return action.relationship.muting_notifications ? filterNotifications(state, [action.relationship.id]) : state; + case DOMAIN_BLOCK_SUCCESS: + return filterNotifications(state, action.accounts); + case FOLLOW_REQUEST_AUTHORIZE_SUCCESS: + case FOLLOW_REQUEST_REJECT_SUCCESS: + return filterNotifications(state, [action.id], 'follow_request'); case ACCOUNT_MUTE_SUCCESS: - return action.relationship.muting_notifications ? filterNotifications(state, action.relationship) : state; + return action.relationship.muting_notifications ? filterNotifications(state, [action.relationship.id]) : state; case NOTIFICATIONS_CLEAR: - return state.set('items', ImmutableList()).set('hasMore', false); + return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', false); case TIMELINE_DELETE: return deleteByStatus(state, action.id); case TIMELINE_DISCONNECT: return action.timeline === 'home' ? - state.update('items', items => items.first() ? items.unshift(null) : items) : + state.update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items) : state; + case NOTIFICATIONS_MOUNT: + return state.set('mounted', true); + case NOTIFICATIONS_UNMOUNT: + return state.set('mounted', false); default: return state; } diff --git a/app/javascript/mastodon/reducers/push_notifications.js b/app/javascript/mastodon/reducers/push_notifications.js index 317352b79..c48cfb705 100644 --- a/app/javascript/mastodon/reducers/push_notifications.js +++ b/app/javascript/mastodon/reducers/push_notifications.js @@ -6,6 +6,7 @@ const initialState = Immutable.Map({ subscription: null, alerts: new Immutable.Map({ follow: false, + follow_request: false, favourite: false, reblog: false, mention: false, diff --git a/app/javascript/mastodon/reducers/search.js b/app/javascript/mastodon/reducers/search.js index 4758defb1..875b2d92b 100644 --- a/app/javascript/mastodon/reducers/search.js +++ b/app/javascript/mastodon/reducers/search.js @@ -3,6 +3,7 @@ import { SEARCH_CLEAR, SEARCH_FETCH_SUCCESS, SEARCH_SHOW, + SEARCH_EXPAND_SUCCESS, } from '../actions/search'; import { COMPOSE_MENTION, @@ -16,6 +17,7 @@ const initialState = ImmutableMap({ submitted: false, hidden: false, results: ImmutableMap(), + searchTerm: '', }); export default function search(state = initialState, action) { @@ -40,7 +42,10 @@ export default function search(state = initialState, action) { accounts: ImmutableList(action.results.accounts.map(item => item.id)), statuses: ImmutableList(action.results.statuses.map(item => item.id)), hashtags: fromJS(action.results.hashtags), - })).set('submitted', true); + })).set('submitted', true).set('searchTerm', action.searchTerm); + case SEARCH_EXPAND_SUCCESS: + const results = action.searchType === 'hashtags' ? fromJS(action.results.hashtags) : action.results[action.searchType].map(item => item.id); + return state.updateIn(['results', action.searchType], list => list.concat(results)); default: return state; } diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js index a0eea137f..efef2ad9a 100644 --- a/app/javascript/mastodon/reducers/settings.js +++ b/app/javascript/mastodon/reducers/settings.js @@ -10,10 +10,12 @@ import uuid from '../uuid'; const initialState = ImmutableMap({ saved: true, - onboarded: false, - skinTone: 1, + trends: ImmutableMap({ + show: true, + }), + home: ImmutableMap({ shows: ImmutableMap({ reblog: true, @@ -28,6 +30,7 @@ const initialState = ImmutableMap({ notifications: ImmutableMap({ alerts: ImmutableMap({ follow: true, + follow_request: false, favourite: true, reblog: true, mention: true, @@ -42,6 +45,7 @@ const initialState = ImmutableMap({ shows: ImmutableMap({ follow: true, + follow_request: false, favourite: true, reblog: true, mention: true, @@ -50,6 +54,7 @@ const initialState = ImmutableMap({ sounds: ImmutableMap({ follow: true, + follow_request: false, favourite: true, reblog: true, mention: true, @@ -74,10 +79,6 @@ const initialState = ImmutableMap({ body: '', }), }), - - trends: ImmutableMap({ - show: true, - }), }); const defaultColumns = fromJS([ diff --git a/app/javascript/mastodon/reducers/status_lists.js b/app/javascript/mastodon/reducers/status_lists.js index 6c5f33557..9f8f28dee 100644 --- a/app/javascript/mastodon/reducers/status_lists.js +++ b/app/javascript/mastodon/reducers/status_lists.js @@ -7,12 +7,22 @@ import { FAVOURITED_STATUSES_EXPAND_FAIL, } from '../actions/favourites'; import { + BOOKMARKED_STATUSES_FETCH_REQUEST, + BOOKMARKED_STATUSES_FETCH_SUCCESS, + BOOKMARKED_STATUSES_FETCH_FAIL, + BOOKMARKED_STATUSES_EXPAND_REQUEST, + BOOKMARKED_STATUSES_EXPAND_SUCCESS, + BOOKMARKED_STATUSES_EXPAND_FAIL, +} from '../actions/bookmarks'; +import { PINNED_STATUSES_FETCH_SUCCESS, } from '../actions/pin_statuses'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import { FAVOURITE_SUCCESS, UNFAVOURITE_SUCCESS, + BOOKMARK_SUCCESS, + UNBOOKMARK_SUCCESS, PIN_SUCCESS, UNPIN_SUCCESS, } from '../actions/interactions'; @@ -23,6 +33,11 @@ const initialState = ImmutableMap({ loaded: false, items: ImmutableList(), }), + bookmarks: ImmutableMap({ + next: null, + loaded: false, + items: ImmutableList(), + }), pins: ImmutableMap({ next: null, loaded: false, @@ -71,10 +86,24 @@ export default function statusLists(state = initialState, action) { return normalizeList(state, 'favourites', action.statuses, action.next); case FAVOURITED_STATUSES_EXPAND_SUCCESS: return appendToList(state, 'favourites', action.statuses, action.next); + case BOOKMARKED_STATUSES_FETCH_REQUEST: + case BOOKMARKED_STATUSES_EXPAND_REQUEST: + return state.setIn(['bookmarks', 'isLoading'], true); + case BOOKMARKED_STATUSES_FETCH_FAIL: + case BOOKMARKED_STATUSES_EXPAND_FAIL: + return state.setIn(['bookmarks', 'isLoading'], false); + case BOOKMARKED_STATUSES_FETCH_SUCCESS: + return normalizeList(state, 'bookmarks', action.statuses, action.next); + case BOOKMARKED_STATUSES_EXPAND_SUCCESS: + return appendToList(state, 'bookmarks', action.statuses, action.next); case FAVOURITE_SUCCESS: return prependOneToList(state, 'favourites', action.status); case UNFAVOURITE_SUCCESS: return removeOneFromList(state, 'favourites', action.status); + case BOOKMARK_SUCCESS: + return prependOneToList(state, 'bookmarks', action.status); + case UNBOOKMARK_SUCCESS: + return removeOneFromList(state, 'bookmarks', action.status); case PINNED_STATUSES_FETCH_SUCCESS: return normalizeList(state, 'pins', action.statuses, action.next); case PIN_SUCCESS: diff --git a/app/javascript/mastodon/reducers/statuses.js b/app/javascript/mastodon/reducers/statuses.js index 885cc221c..772f98bcb 100644 --- a/app/javascript/mastodon/reducers/statuses.js +++ b/app/javascript/mastodon/reducers/statuses.js @@ -3,6 +3,9 @@ import { REBLOG_FAIL, FAVOURITE_REQUEST, FAVOURITE_FAIL, + UNFAVOURITE_SUCCESS, + BOOKMARK_REQUEST, + BOOKMARK_FAIL, } from '../actions/interactions'; import { STATUS_MUTE_SUCCESS, @@ -37,8 +40,15 @@ export default function statuses(state = initialState, action) { return importStatuses(state, action.statuses); case FAVOURITE_REQUEST: return state.setIn([action.status.get('id'), 'favourited'], true); + case UNFAVOURITE_SUCCESS: + const favouritesCount = action.status.get('favourites_count'); + return state.setIn([action.status.get('id'), 'favourites_count'], favouritesCount - 1); case FAVOURITE_FAIL: return state.get(action.status.get('id')) === undefined ? state : state.setIn([action.status.get('id'), 'favourited'], false); + case BOOKMARK_REQUEST: + return state.get(action.status.get('id')) === undefined ? state : state.setIn([action.status.get('id'), 'bookmarked'], true); + case BOOKMARK_FAIL: + return state.get(action.status.get('id')) === undefined ? state : state.setIn([action.status.get('id'), 'bookmarked'], false); case REBLOG_REQUEST: return state.setIn([action.status.get('id'), 'reblogged'], true); case REBLOG_FAIL: diff --git a/app/javascript/mastodon/reducers/suggestions.js b/app/javascript/mastodon/reducers/suggestions.js index 9f4b89d58..834be728f 100644 --- a/app/javascript/mastodon/reducers/suggestions.js +++ b/app/javascript/mastodon/reducers/suggestions.js @@ -4,6 +4,8 @@ import { SUGGESTIONS_FETCH_FAIL, SUGGESTIONS_DISMISS, } from '../actions/suggestions'; +import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS } from 'mastodon/actions/accounts'; +import { DOMAIN_BLOCK_SUCCESS } from 'mastodon/actions/domain_blocks'; import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; const initialState = ImmutableMap({ @@ -24,6 +26,11 @@ export default function suggestionsReducer(state = initialState, action) { return state.set('isLoading', false); case SUGGESTIONS_DISMISS: return state.update('items', list => list.filterNot(id => id === action.id)); + case ACCOUNT_BLOCK_SUCCESS: + case ACCOUNT_MUTE_SUCCESS: + return state.update('items', list => list.filterNot(id => id === action.relationship.id)); + case DOMAIN_BLOCK_SUCCESS: + return state.update('items', list => list.filterNot(id => action.accounts.includes(id))); default: return state; } diff --git a/app/javascript/mastodon/reducers/timelines.js b/app/javascript/mastodon/reducers/timelines.js index 309a95a19..0d7222e10 100644 --- a/app/javascript/mastodon/reducers/timelines.js +++ b/app/javascript/mastodon/reducers/timelines.js @@ -8,6 +8,7 @@ import { TIMELINE_SCROLL_TOP, TIMELINE_CONNECT, TIMELINE_DISCONNECT, + TIMELINE_LOAD_PENDING, } from '../actions/timelines'; import { ACCOUNT_BLOCK_SUCCESS, @@ -25,10 +26,11 @@ const initialTimeline = ImmutableMap({ top: true, isLoading: false, hasMore: true, + pendingItems: ImmutableList(), items: ImmutableList(), }); -const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, isLoadingRecent) => { +const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, isLoadingRecent, usePendingItems) => { return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { mMap.set('isLoading', false); mMap.set('isPartial', isPartial); @@ -38,7 +40,9 @@ const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, is if (timeline.endsWith(':pinned')) { mMap.set('items', statuses.map(status => status.get('id'))); } else if (!statuses.isEmpty()) { - mMap.update('items', ImmutableList(), oldIds => { + usePendingItems = isLoadingRecent && (usePendingItems || !mMap.get('pendingItems').isEmpty()); + + mMap.update(usePendingItems ? 'pendingItems' : 'items', ImmutableList(), oldIds => { const newIds = statuses.map(status => status.get('id')); const lastIndex = oldIds.findLastIndex(id => id !== null && compareId(id, newIds.last()) >= 0) + 1; @@ -57,8 +61,17 @@ const expandNormalizedTimeline = (state, timeline, statuses, next, isPartial, is })); }; -const updateTimeline = (state, timeline, status) => { - const top = state.getIn([timeline, 'top']); +const updateTimeline = (state, timeline, status, usePendingItems) => { + const top = state.getIn([timeline, 'top']); + + if (usePendingItems || !state.getIn([timeline, 'pendingItems']).isEmpty()) { + if (state.getIn([timeline, 'pendingItems'], ImmutableList()).includes(status.get('id')) || state.getIn([timeline, 'items'], ImmutableList()).includes(status.get('id'))) { + return state; + } + + return state.update(timeline, initialTimeline, map => map.update('pendingItems', list => list.unshift(status.get('id'))).update('unread', unread => unread + 1)); + } + const ids = state.getIn([timeline, 'items'], ImmutableList()); const includesId = ids.includes(status.get('id')); const unread = state.getIn([timeline, 'unread'], 0); @@ -78,8 +91,10 @@ const updateTimeline = (state, timeline, status) => { const deleteStatus = (state, id, accountId, references, exclude_account = null) => { state.keySeq().forEach(timeline => { - if (exclude_account === null || (timeline !== `account:${exclude_account}` && !timeline.startsWith(`account:${exclude_account}:`))) - state = state.updateIn([timeline, 'items'], list => list.filterNot(item => item === id)); + if (exclude_account === null || (timeline !== `account:${exclude_account}` && !timeline.startsWith(`account:${exclude_account}:`))) { + const helper = list => list.filterNot(item => item === id); + state = state.updateIn([timeline, 'items'], helper).updateIn([timeline, 'pendingItems'], helper); + } }); // Remove reblogs of deleted status @@ -109,29 +124,31 @@ const filterTimelines = (state, relationship, statuses) => { return state; }; -const filterTimeline = (timeline, state, relationship, statuses) => - state.updateIn([timeline, 'items'], ImmutableList(), list => - list.filterNot(statusId => - statuses.getIn([statusId, 'account']) === relationship.id - )); +const filterTimeline = (timeline, state, relationship, statuses) => { + const helper = list => list.filterNot(statusId => statuses.getIn([statusId, 'account']) === relationship.id); + return state.updateIn([timeline, 'items'], ImmutableList(), helper).updateIn([timeline, 'pendingItems'], ImmutableList(), helper); +}; const updateTop = (state, timeline, top) => { return state.update(timeline, initialTimeline, map => map.withMutations(mMap => { - if (top) mMap.set('unread', 0); + if (top) mMap.set('unread', mMap.get('pendingItems').size); mMap.set('top', top); })); }; export default function timelines(state = initialState, action) { switch(action.type) { + case TIMELINE_LOAD_PENDING: + return state.update(action.timeline, initialTimeline, map => + map.update('items', list => map.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0)); case TIMELINE_EXPAND_REQUEST: return state.update(action.timeline, initialTimeline, map => map.set('isLoading', true)); case TIMELINE_EXPAND_FAIL: return state.update(action.timeline, initialTimeline, map => map.set('isLoading', false)); case TIMELINE_EXPAND_SUCCESS: - return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial, action.isLoadingRecent); + return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial, action.isLoadingRecent, action.usePendingItems); case TIMELINE_UPDATE: - return updateTimeline(state, action.timeline, fromJS(action.status)); + return updateTimeline(state, action.timeline, fromJS(action.status), action.usePendingItems); case TIMELINE_DELETE: return deleteStatus(state, action.id, action.accountId, action.references, action.reblogOf); case TIMELINE_CLEAR: @@ -149,7 +166,7 @@ export default function timelines(state = initialState, action) { return state.update( action.timeline, initialTimeline, - map => map.set('online', false).update('items', items => items.first() ? items.unshift(null) : items) + map => map.set('online', false).update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items) ); default: return state; diff --git a/app/javascript/mastodon/reducers/trends.js b/app/javascript/mastodon/reducers/trends.js new file mode 100644 index 000000000..5cecc8fca --- /dev/null +++ b/app/javascript/mastodon/reducers/trends.js @@ -0,0 +1,23 @@ +import { TRENDS_FETCH_REQUEST, TRENDS_FETCH_SUCCESS, TRENDS_FETCH_FAIL } from '../actions/trends'; +import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; + +const initialState = ImmutableMap({ + items: ImmutableList(), + isLoading: false, +}); + +export default function trendsReducer(state = initialState, action) { + switch(action.type) { + case TRENDS_FETCH_REQUEST: + return state.set('isLoading', true); + case TRENDS_FETCH_SUCCESS: + return state.withMutations(map => { + map.set('items', fromJS(action.trends)); + map.set('isLoading', false); + }); + case TRENDS_FETCH_FAIL: + return state.set('isLoading', false); + default: + return state; + } +}; diff --git a/app/javascript/mastodon/reducers/user_lists.js b/app/javascript/mastodon/reducers/user_lists.js index 8db18c5dc..a7853452f 100644 --- a/app/javascript/mastodon/reducers/user_lists.js +++ b/app/javascript/mastodon/reducers/user_lists.js @@ -1,4 +1,7 @@ import { + NOTIFICATIONS_UPDATE, +} from '../actions/notifications'; +import { FOLLOWERS_FETCH_SUCCESS, FOLLOWERS_EXPAND_SUCCESS, FOLLOWING_FETCH_SUCCESS, @@ -20,6 +23,14 @@ import { MUTES_FETCH_SUCCESS, MUTES_EXPAND_SUCCESS, } from '../actions/mutes'; +import { + DIRECTORY_FETCH_REQUEST, + DIRECTORY_FETCH_SUCCESS, + DIRECTORY_FETCH_FAIL, + DIRECTORY_EXPAND_REQUEST, + DIRECTORY_EXPAND_SUCCESS, + DIRECTORY_EXPAND_FAIL, +} from 'mastodon/actions/directory'; import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; const initialState = ImmutableMap({ @@ -45,6 +56,12 @@ const appendToList = (state, type, id, accounts, next) => { }); }; +const normalizeFollowRequest = (state, notification) => { + return state.updateIn(['follow_requests', 'items'], list => { + return list.filterNot(item => item === notification.account.id).unshift(notification.account.id); + }); +}; + export default function userLists(state = initialState, action) { switch(action.type) { case FOLLOWERS_FETCH_SUCCESS: @@ -59,6 +76,8 @@ export default function userLists(state = initialState, action) { return state.setIn(['reblogged_by', action.id], ImmutableList(action.accounts.map(item => item.id))); case FAVOURITES_FETCH_SUCCESS: return state.setIn(['favourited_by', action.id], ImmutableList(action.accounts.map(item => item.id))); + case NOTIFICATIONS_UPDATE: + return action.notification.type === 'follow_request' ? normalizeFollowRequest(state, action.notification) : state; case FOLLOW_REQUESTS_FETCH_SUCCESS: return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next); case FOLLOW_REQUESTS_EXPAND_SUCCESS: @@ -74,6 +93,16 @@ export default function userLists(state = initialState, action) { return state.setIn(['mutes', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next); case MUTES_EXPAND_SUCCESS: return state.updateIn(['mutes', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next); + case DIRECTORY_FETCH_SUCCESS: + return state.setIn(['directory', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['directory', 'isLoading'], false); + case DIRECTORY_EXPAND_SUCCESS: + return state.updateIn(['directory', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['directory', 'isLoading'], false); + case DIRECTORY_FETCH_REQUEST: + case DIRECTORY_EXPAND_REQUEST: + return state.setIn(['directory', 'isLoading'], true); + case DIRECTORY_FETCH_FAIL: + case DIRECTORY_EXPAND_FAIL: + return state.setIn(['directory', 'isLoading'], false); default: return state; } diff --git a/app/javascript/mastodon/rtl.js b/app/javascript/mastodon/rtl.js index 00870a15d..89bed6de8 100644 --- a/app/javascript/mastodon/rtl.js +++ b/app/javascript/mastodon/rtl.js @@ -20,6 +20,7 @@ export function isRtl(text) { text = text.replace(/(?:^|[^\/\w])@([a-z0-9_]+(@[a-z0-9\.\-]+)?)/ig, ''); text = text.replace(/(?:^|[^\/\w])#([\S]+)/ig, ''); text = text.replace(/\s+/g, ''); + text = text.replace(/(\w\S+\.\w{2,}\S*)/g, ''); const matches = text.match(rtlChars); diff --git a/app/javascript/mastodon/scroll.js b/app/javascript/mastodon/scroll.js index 2af07e0fb..84fe58269 100644 --- a/app/javascript/mastodon/scroll.js +++ b/app/javascript/mastodon/scroll.js @@ -26,5 +26,7 @@ const scroll = (node, key, target) => { }; }; -export const scrollRight = (node, position) => scroll(node, 'scrollLeft', position); -export const scrollTop = (node) => scroll(node, 'scrollTop', 0); +const isScrollBehaviorSupported = 'scrollBehavior' in document.documentElement.style; + +export const scrollRight = (node, position) => isScrollBehaviorSupported ? node.scrollTo({ left: position, behavior: 'smooth' }) : scroll(node, 'scrollLeft', position); +export const scrollTop = (node) => isScrollBehaviorSupported ? node.scrollTo({ top: 0, behavior: 'smooth' }) : scroll(node, 'scrollTop', 0); diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 70f08a8eb..6f1ce9602 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -1,5 +1,5 @@ import { createSelector } from 'reselect'; -import { List as ImmutableList } from 'immutable'; +import { List as ImmutableList, is } from 'immutable'; import { me } from '../initial_state'; const getAccountBase = (state, id) => state.getIn(['accounts', id], null); @@ -36,12 +36,10 @@ const toServerSideType = columnType => { } }; -export const getFilters = (state, { contextType }) => state.get('filters', ImmutableList()).filter(filter => contextType && filter.get('context').includes(toServerSideType(contextType)) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))); - const escapeRegExp = string => string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -export const regexFromFilters = filters => { +const regexFromFilters = filters => { if (filters.size === 0) { return null; } @@ -63,6 +61,27 @@ export const regexFromFilters = filters => { }).join('|'), 'i'); }; +// Memoize the filter regexps for each valid server contextType +const makeGetFiltersRegex = () => { + let memo = {}; + + return (state, { contextType }) => { + if (!contextType) return ImmutableList(); + + const serverSideType = toServerSideType(contextType); + const filters = state.get('filters', ImmutableList()).filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || Date.parse(filter.get('expires_at')) > (new Date()))); + + if (!memo[serverSideType] || !is(memo[serverSideType].filters, filters)) { + const dropRegex = regexFromFilters(filters.filter(filter => filter.get('irreversible'))); + const regex = regexFromFilters(filters); + memo[serverSideType] = { filters: filters, results: [dropRegex, regex] }; + } + return memo[serverSideType].results; + }; +}; + +export const getFiltersRegex = makeGetFiltersRegex(); + export const makeGetStatus = () => { return createSelector( [ @@ -70,10 +89,10 @@ export const makeGetStatus = () => { (state, { id }) => state.getIn(['statuses', state.getIn(['statuses', id, 'reblog'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]), (state, { id }) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]), - getFilters, + getFiltersRegex, ], - (statusBase, statusReblog, accountBase, accountReblog, filters) => { + (statusBase, statusReblog, accountBase, accountReblog, filtersRegex) => { if (!statusBase) { return null; } @@ -84,8 +103,13 @@ export const makeGetStatus = () => { statusReblog = null; } - const regex = (accountReblog || accountBase).get('id') !== me && regexFromFilters(filters); - const filtered = regex && regex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index')); + const dropRegex = (accountReblog || accountBase).get('id') !== me && filtersRegex[0]; + if (dropRegex && dropRegex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index'))) { + return null; + } + + const regex = (accountReblog || accountBase).get('id') !== me && filtersRegex[1]; + const filtered = regex && regex.test(statusBase.get('reblog') ? statusReblog.get('search_index') : statusBase.get('search_index')); return statusBase.withMutations(map => { map.set('reblog', statusReblog); @@ -104,6 +128,7 @@ export const getAlerts = createSelector([getAlertsBase], (base) => { base.forEach(item => { arr.push({ message: item.get('message'), + message_values: item.get('message_values'), title: item.get('title'), key: item.get('key'), dismissAfter: 5000, diff --git a/app/javascript/mastodon/service_worker/web_push_locales.js b/app/javascript/mastodon/service_worker/web_push_locales.js index 5ce8c7b50..1265f3cfa 100644 --- a/app/javascript/mastodon/service_worker/web_push_locales.js +++ b/app/javascript/mastodon/service_worker/web_push_locales.js @@ -16,6 +16,7 @@ filenames.forEach(filename => { filtered[locale] = { 'notification.favourite': full['notification.favourite'] || '', 'notification.follow': full['notification.follow'] || '', + 'notification.follow_request': full['notification.follow_request'] || '', 'notification.mention': full['notification.mention'] || '', 'notification.reblog': full['notification.reblog'] || '', 'notification.poll': full['notification.poll'] || '', diff --git a/app/javascript/mastodon/stream.js b/app/javascript/mastodon/stream.js index c4642344f..50f90d44c 100644 --- a/app/javascript/mastodon/stream.js +++ b/app/javascript/mastodon/stream.js @@ -1,4 +1,4 @@ -import WebSocketClient from 'websocket.js'; +import WebSocketClient from '@gamestdio/websocket'; const randomIntUpTo = max => Math.floor(Math.random() * Math.floor(max)); diff --git a/app/javascript/mastodon/utils/log_out.js b/app/javascript/mastodon/utils/log_out.js new file mode 100644 index 000000000..b43417f4b --- /dev/null +++ b/app/javascript/mastodon/utils/log_out.js @@ -0,0 +1,33 @@ +import Rails from 'rails-ujs'; + +export const logOut = () => { + const form = document.createElement('form'); + + const methodInput = document.createElement('input'); + methodInput.setAttribute('name', '_method'); + methodInput.setAttribute('value', 'delete'); + methodInput.setAttribute('type', 'hidden'); + form.appendChild(methodInput); + + const csrfToken = Rails.csrfToken(); + const csrfParam = Rails.csrfParam(); + + if (csrfParam && csrfToken) { + const csrfInput = document.createElement('input'); + csrfInput.setAttribute('name', csrfParam); + csrfInput.setAttribute('value', csrfToken); + csrfInput.setAttribute('type', 'hidden'); + form.appendChild(csrfInput); + } + + const submitButton = document.createElement('input'); + submitButton.setAttribute('type', 'submit'); + form.appendChild(submitButton); + + form.method = 'post'; + form.action = '/auth/sign_out'; + form.style.display = 'none'; + + document.body.appendChild(form); + submitButton.click(); +}; diff --git a/app/javascript/mastodon/utils/numbers.js b/app/javascript/mastodon/utils/numbers.js index fdd8269ae..f7e4ceb93 100644 --- a/app/javascript/mastodon/utils/numbers.js +++ b/app/javascript/mastodon/utils/numbers.js @@ -4,7 +4,9 @@ import { FormattedNumber } from 'react-intl'; export const shortNumberFormat = number => { if (number < 1000) { return <FormattedNumber value={number} />; - } else { + } else if (number < 1000000) { return <Fragment><FormattedNumber value={number / 1000} maximumFractionDigits={1} />K</Fragment>; + } else { + return <Fragment><FormattedNumber value={number / 1000000} maximumFractionDigits={1} />M</Fragment>; } }; diff --git a/app/javascript/mastodon/utils/resize_image.js b/app/javascript/mastodon/utils/resize_image.js index bbdbc865e..7196dc96b 100644 --- a/app/javascript/mastodon/utils/resize_image.js +++ b/app/javascript/mastodon/utils/resize_image.js @@ -31,7 +31,7 @@ const loadImage = inputFile => new Promise((resolve, reject) => { }); const getOrientation = (img, type = 'image/png') => new Promise(resolve => { - if (!['image/jpeg', 'image/webp'].includes(type)) { + if (type !== 'image/jpeg') { resolve(1); return; } @@ -67,6 +67,14 @@ const processImage = (img, { width, height, orientation, type = 'image/png' }) = context.drawImage(img, 0, 0, width, height); + // The Tor Browser and maybe other browsers may prevent reading from canvas + // and return an all-white image instead. Assume reading failed if the resized + // image is perfectly white. + const imageData = context.getImageData(0, 0, width, height); + if (imageData.data.every(value => value === 255)) { + throw 'Failed to read from canvas'; + } + canvas.toBlob(resolve, type); }); diff --git a/app/javascript/mastodon/utils/scrollbar.js b/app/javascript/mastodon/utils/scrollbar.js new file mode 100644 index 000000000..6f0ee010b --- /dev/null +++ b/app/javascript/mastodon/utils/scrollbar.js @@ -0,0 +1,36 @@ +import { isMobile } from '../is_mobile'; + +/** @type {number | null} */ +let cachedScrollbarWidth = null; + +/** + * @return {number} + */ +const getActualScrollbarWidth = () => { + const outer = document.createElement('div'); + outer.style.visibility = 'hidden'; + outer.style.overflow = 'scroll'; + document.body.appendChild(outer); + + const inner = document.createElement('div'); + outer.appendChild(inner); + + const scrollbarWidth = outer.offsetWidth - inner.offsetWidth; + outer.parentNode.removeChild(outer); + + return scrollbarWidth; +}; + +/** + * @return {number} + */ +export const getScrollbarWidth = () => { + if (cachedScrollbarWidth !== null) { + return cachedScrollbarWidth; + } + + const scrollbarWidth = isMobile(window.innerWidth) ? 0 : getActualScrollbarWidth(); + cachedScrollbarWidth = scrollbarWidth; + + return scrollbarWidth; +}; diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 69e6ba0ec..3eae1a457 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -1,6 +1,7 @@ import loadPolyfills from '../mastodon/load_polyfills'; import ready from '../mastodon/ready'; import { start } from '../mastodon/common'; +import loadKeyboardExtensions from '../mastodon/load_keyboard_extensions'; start(); @@ -14,10 +15,10 @@ function main() { const React = require('react'); const ReactDOM = require('react-dom'); const Rellax = require('rellax'); - const createHistory = require('history').createBrowserHistory; + const { createBrowserHistory } = require('history'); const scrollToDetailedStatus = () => { - const history = createHistory(); + const history = createBrowserHistory(); const detailedStatuses = document.querySelectorAll('.public-layout .detailed-status'); const location = history.location; @@ -27,6 +28,12 @@ function main() { } }; + const getEmojiAnimationHandler = (swapTo) => { + return ({ target }) => { + target.src = target.getAttribute(swapTo); + }; + }; + ready(() => { const locale = document.documentElement.lang; @@ -92,16 +99,33 @@ function main() { new Rellax('.parallax', { speed: -1 }); } - if (document.body.classList.contains('with-modals')) { - const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; - const scrollbarWidthStyle = document.createElement('style'); - scrollbarWidthStyle.id = 'scrollbar-width'; - document.head.appendChild(scrollbarWidthStyle); - scrollbarWidthStyle.sheet.insertRule(`body.with-modals--active { margin-right: ${scrollbarWidth}px; }`, 0); + delegate(document, '.custom-emoji', 'mouseover', getEmojiAnimationHandler('data-original')); + delegate(document, '.custom-emoji', 'mouseout', getEmojiAnimationHandler('data-static')); + + delegate(document, '.blocks-table button.icon-button', 'click', function(e) { + e.preventDefault(); + + const classList = this.firstElementChild.classList; + classList.toggle('fa-chevron-down'); + classList.toggle('fa-chevron-up'); + this.parentElement.parentElement.nextElementSibling.classList.toggle('hidden'); + }); + }); + + delegate(document, '.sidebar__toggle__icon', 'click', () => { + const target = document.querySelector('.sidebar ul'); + + if (target.style.display === 'block') { + target.style.display = 'none'; + } else { + target.style.display = 'block'; } }); } -loadPolyfills().then(main).catch(error => { - console.error(error); -}); +loadPolyfills() + .then(main) + .then(loadKeyboardExtensions) + .catch(error => { + console.error(error); + }); diff --git a/app/javascript/styles/application.scss b/app/javascript/styles/application.scss index 6db3bc3dc..8ebc45b62 100644 --- a/app/javascript/styles/application.scss +++ b/app/javascript/styles/application.scss @@ -13,7 +13,7 @@ @import 'mastodon/widgets'; @import 'mastodon/forms'; @import 'mastodon/accounts'; -@import 'mastodon/stream_entries'; +@import 'mastodon/statuses'; @import 'mastodon/boost'; @import 'mastodon/components'; @import 'mastodon/polls'; diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index b4fb1d709..e25a80c04 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -457,6 +457,13 @@ h5 { .status { padding-bottom: 32px; + &--highlighted { + border: 1px solid lighten($ui-base-color, 8%); + border-radius: 4px; + padding-bottom: 16px; + margin-bottom: 16px; + } + .status-header { td { font-size: 14px; diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index ee8a7d265..05e52966b 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -14,15 +14,49 @@ html { } } +.status-card__actions button, +.status-card__actions a { + color: rgba($white, 0.8); + + &:hover, + &:active, + &:focus { + color: $white; + } +} + // Change default background colors of columns .column > .scrollable, .getting-started, -.column-inline-form { +.column-inline-form, +.error-column, +.regeneration-indicator { background: $white; border: 1px solid lighten($ui-base-color, 8%); border-top: 0; } +.directory__card__img { + background: lighten($ui-base-color, 12%); +} + +.filter-form, +.directory__card__bar { + background: $white; + border-bottom: 1px solid lighten($ui-base-color, 8%); +} + +.scrollable .directory__list { + width: calc(100% + 2px); + margin-left: -1px; + margin-right: -1px; +} + +.directory__card, +.table-of-contents { + border: 1px solid lighten($ui-base-color, 8%); +} + .column-back-button, .column-header { background: $white; @@ -33,16 +67,16 @@ html { } &--slim-button { - border: 0; - top: -49px; - right: 1px; + top: -50px; + right: 0; } } .column-header__back-button, .column-header__button, .column-header__button.active, -.account__header__bar { +.account__header__bar, +.directory__card__extra { background: $white; } @@ -66,6 +100,19 @@ html { text-decoration: underline; } +.confirmation-modal__secondary-button, +.confirmation-modal__cancel-button, +.mute-modal__cancel-button, +.block-modal__cancel-button { + color: lighten($ui-base-color, 26%); + + &:hover, + &:focus, + &:active { + color: $primary-text-color; + } +} + .column-subheading { background: darken($ui-base-color, 4%); border-bottom: 1px solid lighten($ui-base-color, 8%); @@ -104,7 +151,8 @@ html { .box-widget input[type="email"], .box-widget input[type="password"], .box-widget textarea, -.statuses-grid .detailed-status { +.statuses-grid .detailed-status, +.audio-player { border: 1px solid lighten($ui-base-color, 8%); } @@ -309,11 +357,23 @@ html { .boost-modal, .confirmation-modal, .mute-modal, +.block-modal, .report-modal, .embed-modal, .error-modal, -.onboarding-modal { - background: $ui-base-color; +.onboarding-modal, +.report-modal__comment .setting-text__wrapper, +.report-modal__comment .setting-text { + background: $white; + border: 1px solid lighten($ui-base-color, 8%); +} + +.report-modal__comment { + border-right-color: lighten($ui-base-color, 8%); +} + +.report-modal__container { + border-top-color: lighten($ui-base-color, 8%); } .column-header__collapsible-inner { @@ -322,9 +382,14 @@ html { border-top: 0; } +.focal-point__preview strong { + color: $white; +} + .boost-modal__action-bar, .confirmation-modal__action-bar, .mute-modal__action-bar, +.block-modal__action-bar, .onboarding-modal__paginator, .error-modal__footer { background: darken($ui-base-color, 6%); @@ -345,9 +410,11 @@ html { .embed-modal .embed-modal__container .embed-modal__html { background: $white; + border: 1px solid lighten($ui-base-color, 8%); &:focus { - background: darken($ui-base-color, 6%); + border-color: lighten($ui-base-color, 12%); + background: $white; } } @@ -700,3 +767,10 @@ html { .compose-form .compose-form__warning { box-shadow: none; } + +.audio-player .video-player__controls button, +.audio-player .video-player__time-sep, +.audio-player .video-player__time-current, +.audio-player .video-player__time-total { + color: $primary-text-color; +} diff --git a/app/javascript/styles/mastodon-light/variables.scss b/app/javascript/styles/mastodon-light/variables.scss index 01748148f..c68944528 100644 --- a/app/javascript/styles/mastodon-light/variables.scss +++ b/app/javascript/styles/mastodon-light/variables.scss @@ -8,7 +8,7 @@ $classic-secondary-color: #d9e1e8; $classic-highlight-color: #2b90d9; // Differences -$success-green: #3c754d; +$success-green: lighten(#3c754d, 8%); $base-overlay-background: $white !default; $valid-value-color: $success-green !default; diff --git a/app/javascript/styles/mastodon/_mixins.scss b/app/javascript/styles/mastodon/_mixins.scss index faaffb30f..68cad0fde 100644 --- a/app/javascript/styles/mastodon/_mixins.scss +++ b/app/javascript/styles/mastodon/_mixins.scss @@ -22,24 +22,6 @@ color: $darker-text-color; font-size: 14px; margin: 0; - - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus, - &:active { - outline: 0 !important; - } - - &:focus { - background: lighten($ui-base-color, 4%); - } - - @media screen and (max-width: 600px) { - font-size: 16px; - } } @mixin search-popout { diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss index 61637ce96..cf16b54ac 100644 --- a/app/javascript/styles/mastodon/about.scss +++ b/app/javascript/styles/mastodon/about.scss @@ -17,109 +17,102 @@ $small-breakpoint: 960px; .rich-formatting { font-family: $font-sans-serif, sans-serif; - font-size: 16px; + font-size: 14px; font-weight: 400; - font-size: 16px; - line-height: 30px; + line-height: 1.7; + word-wrap: break-word; color: $darker-text-color; - padding-right: 10px; a { color: $highlight-text-color; text-decoration: underline; + + &:hover, + &:focus, + &:active { + text-decoration: none; + } } p, li { - font-family: $font-sans-serif, sans-serif; - font-size: 16px; - font-weight: 400; - font-size: 16px; - line-height: 30px; - margin-bottom: 12px; color: $darker-text-color; + } - a { - color: $highlight-text-color; - text-decoration: underline; - } + p { + margin-top: 0; + margin-bottom: .85em; &:last-child { margin-bottom: 0; } } - strong, - em { + strong { font-weight: 700; - color: lighten($darker-text-color, 10%); + color: $secondary-text-color; } - h1 { - font-family: $font-display, sans-serif; - font-size: 26px; - line-height: 30px; - font-weight: 500; - margin-bottom: 20px; + em { + font-style: italic; color: $secondary-text-color; + } - small { - font-family: $font-sans-serif, sans-serif; - display: block; - font-size: 18px; - font-weight: 400; - color: lighten($darker-text-color, 10%); - } + code { + font-size: 0.85em; + background: darken($ui-base-color, 8%); + border-radius: 4px; + padding: 0.2em 0.3em; } - h2 { + h1, + h2, + h3, + h4, + h5, + h6 { font-family: $font-display, sans-serif; - font-size: 22px; - line-height: 26px; + margin-top: 1.275em; + margin-bottom: .85em; font-weight: 500; - margin-bottom: 20px; color: $secondary-text-color; } + h1 { + font-size: 2em; + } + + h2 { + font-size: 1.75em; + } + h3 { - font-family: $font-display, sans-serif; - font-size: 18px; - line-height: 24px; - font-weight: 500; - margin-bottom: 20px; - color: $secondary-text-color; + font-size: 1.5em; } h4 { - font-family: $font-display, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 500; - margin-bottom: 20px; - color: $secondary-text-color; + font-size: 1.25em; } - h5 { - font-family: $font-display, sans-serif; - font-size: 14px; - line-height: 24px; - font-weight: 500; - margin-bottom: 20px; - color: $secondary-text-color; + h5, + h6 { + font-size: 1em; } - h6 { - font-family: $font-display, sans-serif; - font-size: 12px; - line-height: 24px; - font-weight: 500; - margin-bottom: 20px; - color: $secondary-text-color; + ul { + list-style: disc; + } + + ol { + list-style: decimal; } ul, ol { - margin-left: 20px; + margin: 0; + padding: 0; + padding-left: 2em; + margin-bottom: 0.85em; &[type='a'] { list-style-type: lower-alpha; @@ -130,31 +123,74 @@ $small-breakpoint: 960px; } } - ul { - list-style: disc; - } - - ol { - list-style: decimal; - } - - li > ol, - li > ul { - margin-top: 6px; - } - hr { width: 100%; height: 0; border: 0; - border-bottom: 1px solid rgba($ui-base-lighter-color, .6); - margin: 20px 0; + border-bottom: 1px solid lighten($ui-base-color, 4%); + margin: 1.7em 0; &.spacer { height: 1px; border: 0; } } + + table { + width: 100%; + border-collapse: collapse; + break-inside: auto; + margin-top: 24px; + margin-bottom: 32px; + + thead tr, + tbody tr { + border-bottom: 1px solid lighten($ui-base-color, 4%); + font-size: 1em; + line-height: 1.625; + font-weight: 400; + text-align: left; + color: $darker-text-color; + } + + thead tr { + border-bottom-width: 2px; + line-height: 1.5; + font-weight: 500; + color: $dark-text-color; + } + + th, + td { + padding: 8px; + align-self: start; + align-items: start; + word-break: break-all; + + &.nowrap { + width: 25%; + position: relative; + + &::before { + content: ' '; + visibility: hidden; + } + + span { + position: absolute; + left: 8px; + right: 8px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + } + + & > :first-child { + margin-top: 0; + } } .information-board { @@ -416,7 +452,7 @@ $small-breakpoint: 960px; } &__call-to-action { - background: darken($ui-base-color, 4%); + background: $ui-base-color; border-radius: 4px; padding: 25px 40px; overflow: hidden; diff --git a/app/javascript/styles/mastodon/accounts.scss b/app/javascript/styles/mastodon/accounts.scss index f95313a25..5dc067f0e 100644 --- a/app/javascript/styles/mastodon/accounts.scss +++ b/app/javascript/styles/mastodon/accounts.scss @@ -224,6 +224,7 @@ } .account__header__fields { + max-width: 100vw; padding: 0; margin: 15px -15px -15px; border: 0 none; diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 692d86852..de95d82bf 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -5,21 +5,66 @@ $content-width: 840px; .admin-wrapper { display: flex; justify-content: center; - height: 100%; + width: 100%; + min-height: 100vh; .sidebar-wrapper { - flex: 1 1 $sidebar-width; - height: 100%; - background: $ui-base-color; - display: flex; - justify-content: flex-end; + min-height: 100vh; + overflow: hidden; + pointer-events: none; + flex: 1 1 auto; + + &__inner { + display: flex; + justify-content: flex-end; + background: $ui-base-color; + height: 100%; + } } .sidebar { width: $sidebar-width; - height: 100%; padding: 0; - overflow-y: auto; + pointer-events: auto; + + &__toggle { + display: none; + background: lighten($ui-base-color, 8%); + height: 48px; + + &__logo { + flex: 1 1 auto; + + a { + display: inline-block; + padding: 15px; + } + + svg { + fill: $primary-text-color; + height: 20px; + position: relative; + bottom: -2px; + } + } + + &__icon { + display: block; + color: $darker-text-color; + text-decoration: none; + flex: 0 0 auto; + font-size: 20px; + padding: 15px; + } + + a { + &:hover, + &:focus, + &:active { + background: lighten($ui-base-color, 12%); + } + } + } .logo { display: block; @@ -52,6 +97,9 @@ $content-width: 840px; transition: all 200ms linear; transition-property: color, background-color; border-radius: 4px 0 0 4px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; i.fa { margin-right: 5px; @@ -99,12 +147,30 @@ $content-width: 840px; } .content-wrapper { - flex: 2 1 $content-width; - overflow: auto; + box-sizing: border-box; + width: 100%; + max-width: $content-width; + flex: 1 1 auto; + } + + @media screen and (max-width: $content-width + $sidebar-width) { + .sidebar-wrapper--empty { + display: none; + } + + .sidebar-wrapper { + width: $sidebar-width; + flex: 0 0 auto; + } + } + + @media screen and (max-width: $no-columns-breakpoint) { + .sidebar-wrapper { + width: 100%; + } } .content { - max-width: $content-width; padding: 20px 15px; padding-top: 60px; padding-left: 25px; @@ -123,6 +189,12 @@ $content-width: 840px; padding-bottom: 40px; border-bottom: 1px solid lighten($ui-base-color, 8%); margin-bottom: 40px; + + @media screen and (max-width: $no-columns-breakpoint) { + border-bottom: 0; + padding-bottom: 0; + font-weight: 700; + } } h3 { @@ -147,7 +219,7 @@ $content-width: 840px; font-size: 16px; color: $secondary-text-color; line-height: 28px; - font-weight: 400; + font-weight: 500; } .fields-group h6 { @@ -176,7 +248,7 @@ $content-width: 840px; & > p { font-size: 14px; - line-height: 18px; + line-height: 21px; color: $secondary-text-color; margin-bottom: 20px; @@ -204,49 +276,86 @@ $content-width: 840px; border: 0; } } - - .muted-hint { - color: $darker-text-color; - - a { - color: $highlight-text-color; - } - } - - .positive-hint { - color: $valid-value-color; - font-weight: 500; - } - - .negative-hint { - color: $error-value-color; - font-weight: 500; - } - - .neutral-hint { - color: $dark-text-color; - font-weight: 500; - } } @media screen and (max-width: $no-columns-breakpoint) { display: block; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - .sidebar-wrapper, - .content-wrapper { - flex: 0 0 auto; - height: auto; - overflow: initial; + .sidebar-wrapper { + min-height: 0; } .sidebar { width: 100%; padding: 0; height: auto; + + &__toggle { + display: flex; + } + + & > ul { + display: none; + } + + ul a, + ul ul a { + border-radius: 0; + border-bottom: 1px solid lighten($ui-base-color, 4%); + transition: none; + + &:hover { + transition: none; + } + } + + ul ul { + border-radius: 0; + } + + ul .simple-navigation-active-leaf a { + border-bottom-color: $ui-highlight-color; + } + } + } +} + +hr.spacer { + width: 100%; + border: 0; + margin: 20px 0; + height: 1px; +} + +body, +.admin-wrapper .content { + .muted-hint { + color: $darker-text-color; + + a { + color: $highlight-text-color; } } + + .positive-hint { + color: $valid-value-color; + font-weight: 500; + } + + .negative-hint { + color: $error-value-color; + font-weight: 500; + } + + .neutral-hint { + color: $dark-text-color; + font-weight: 500; + } + + .warning-hint { + color: $gold-star; + font-weight: 500; + } } .filters { @@ -255,10 +364,10 @@ $content-width: 840px; .filter-subset { flex: 0 0 auto; - margin: 0 40px 10px 0; + margin: 0 40px 20px 0; &:last-child { - margin-bottom: 20px; + margin-bottom: 30px; } ul { @@ -321,6 +430,22 @@ $content-width: 840px; } } +.flavour-screen { + display: block; + margin: 10px auto; + max-width: 100%; +} + +.flavour-description { + display: block; + font-size: 16px; + margin: 10px 0; + + & > p { + margin: 10px 0; + } +} + .report-accounts { display: flex; flex-wrap: wrap; @@ -720,3 +845,47 @@ a.name-tag, text-overflow: ellipsis; vertical-align: middle; } + +.admin-account-bio { + display: flex; + flex-wrap: wrap; + margin: 0 -5px; + margin-top: 20px; + + > div { + box-sizing: border-box; + padding: 0 5px; + margin-bottom: 10px; + flex: 1 0 50%; + } + + .account__header__fields, + .account__header__content { + background: lighten($ui-base-color, 8%); + border-radius: 4px; + height: 100%; + } + + .account__header__fields { + margin: 0; + border: 0; + + a { + color: lighten($ui-highlight-color, 8%); + } + + dl:first-child .verified { + border-radius: 0 4px 0 0; + } + + .verified a { + color: $valid-value-color; + } + } + + .account__header__content { + box-sizing: border-box; + padding: 20px; + color: $primary-text-color; + } +} diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss index b5a77ce94..2b10b5ad3 100644 --- a/app/javascript/styles/mastodon/basics.scss +++ b/app/javascript/styles/mastodon/basics.scss @@ -8,7 +8,7 @@ body { font-family: $font-sans-serif, sans-serif; - background: darken($ui-base-color, 8%); + background: darken($ui-base-color, 7%); font-size: 13px; line-height: 18px; font-weight: 400; @@ -35,11 +35,19 @@ body { } &.app-body { - position: absolute; - width: 100%; - height: 100%; padding: 0; - background: $ui-base-color; + + &.layout-single-column { + height: auto; + min-height: 100vh; + overflow-y: scroll; + } + + &.layout-multiple-columns { + position: absolute; + width: 100%; + height: 100%; + } &.with-modals--active { overflow-y: hidden; @@ -56,7 +64,6 @@ body { &--active { overflow-y: hidden; - margin-right: 13px; } } @@ -79,9 +86,6 @@ body { &.admin { background: darken($ui-base-color, 4%); - position: fixed; - width: 100%; - height: 100%; padding: 0; } @@ -131,12 +135,97 @@ button { .app-holder { &, - & > div { + & > div, + & > noscript { display: flex; width: 100%; - height: 100%; align-items: center; justify-content: center; outline: 0 !important; } + + & > noscript { + height: 100vh; + } +} + +.layout-single-column .app-holder { + &, + & > div { + min-height: 100vh; + } +} + +.layout-multiple-columns .app-holder { + &, + & > div { + height: 100%; + } +} + +.error-boundary, +.app-holder noscript { + flex-direction: column; + font-size: 16px; + font-weight: 400; + line-height: 1.7; + color: lighten($error-red, 4%); + text-align: center; + + & > div { + max-width: 500px; + } + + p { + margin-bottom: .85em; + + &:last-child { + margin-bottom: 0; + } + } + + a { + color: $highlight-text-color; + + &:hover, + &:focus, + &:active { + text-decoration: none; + } + } + + &__footer { + color: $dark-text-color; + font-size: 13px; + + a { + color: $dark-text-color; + } + } + + button { + display: inline; + border: 0; + background: transparent; + color: $dark-text-color; + font: inherit; + padding: 0; + margin: 0; + line-height: inherit; + cursor: pointer; + outline: 0; + transition: color 300ms linear; + text-decoration: underline; + + &:hover, + &:focus, + &:active { + text-decoration: none; + } + + &.copied { + color: $valid-value-color; + transition: none; + } + } } diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 597a8d1dc..0ec25e3f8 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3,6 +3,27 @@ -ms-overflow-style: -ms-autohiding-scrollbar; } +.link-button { + display: block; + font-size: 15px; + line-height: 20px; + color: $ui-highlight-color; + border: 0; + background: transparent; + padding: 0; + cursor: pointer; + + &:hover, + &:active { + text-decoration: underline; + } + + &:disabled { + color: $ui-primary-color; + cursor: default; + } +} + .button { background-color: $ui-highlight-color; border: 10px none; @@ -129,19 +150,28 @@ padding: 0; color: $action-button-color; border: 0; + border-radius: 4px; background: transparent; cursor: pointer; - transition: color 100ms ease-in; + transition: all 100ms ease-in; + transition-property: background-color, color; &:hover, &:active, &:focus { color: lighten($action-button-color, 7%); - transition: color 200ms ease-out; + background-color: rgba($action-button-color, 0.15); + transition: all 200ms ease-out; + transition-property: background-color, color; + } + + &:focus { + background-color: rgba($action-button-color, 0.3); } &.disabled { color: darken($action-button-color, 13%); + background-color: transparent; cursor: default; } @@ -166,10 +196,16 @@ &:active, &:focus { color: darken($lighter-text-color, 7%); + background-color: rgba($lighter-text-color, 0.15); + } + + &:focus { + background-color: rgba($lighter-text-color, 0.3); } &.disabled { color: lighten($lighter-text-color, 7%); + background-color: transparent; } &.active { @@ -197,6 +233,7 @@ .text-icon-button { color: $lighter-text-color; border: 0; + border-radius: 4px; background: transparent; cursor: pointer; font-weight: 600; @@ -204,17 +241,25 @@ padding: 0 3px; line-height: 27px; outline: 0; - transition: color 100ms ease-in; + transition: all 100ms ease-in; + transition-property: background-color, color; &:hover, &:active, &:focus { color: darken($lighter-text-color, 7%); - transition: color 200ms ease-out; + background-color: rgba($lighter-text-color, 0.15); + transition: all 200ms ease-out; + transition-property: background-color, color; + } + + &:focus { + background-color: rgba($lighter-text-color, 0.3); } &.disabled { color: lighten($lighter-text-color, 20%); + background-color: transparent; cursor: default; } @@ -347,6 +392,7 @@ .autosuggest-input, .spoiler-input { position: relative; + width: 100%; } .spoiler-input { @@ -376,6 +422,10 @@ border: 0; outline: 0; + &::placeholder { + color: $dark-text-color; + } + &:focus { outline: 0; } @@ -445,7 +495,8 @@ } .autosuggest-account, - .autosuggest-emoji { + .autosuggest-emoji, + .autosuggest-hashtag { display: flex; flex-direction: row; align-items: center; @@ -454,6 +505,29 @@ font-size: 14px; } + .autosuggest-hashtag { + justify-content: space-between; + + &__name { + flex: 1 1 auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + strong { + font-weight: 500; + } + + &__uses { + flex: 0 0 auto; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + .autosuggest-account-icon, .autosuggest-emoji img { display: block; @@ -557,6 +631,7 @@ .compose-form__upload-thumbnail { border-radius: 4px; + background-color: $base-shadow-color; background-position: center; background-size: cover; background-repeat: no-repeat; @@ -594,7 +669,8 @@ } } - .icon-button { + .icon-button, + .text-icon-button { box-sizing: content-box; padding: 0 3px; } @@ -602,18 +678,6 @@ .character-counter__wrapper { align-self: center; margin-right: 4px; - - .character-counter { - cursor: default; - font-family: $font-sans-serif, sans-serif; - font-size: 14px; - font-weight: 600; - color: $lighter-text-color; - - &.character-counter--over { - color: $warning-red; - } - } } } @@ -630,6 +694,18 @@ } } +.character-counter { + cursor: default; + font-family: $font-sans-serif, sans-serif; + font-size: 14px; + font-weight: 600; + color: $lighter-text-color; + + &.character-counter--over { + color: $warning-red; + } +} + .no-reduce-motion .spoiler-input { transition: height 0.4s ease, opacity 0.4s ease; } @@ -721,7 +797,7 @@ white-space: pre-wrap; &:last-child { - margin-bottom: 2px; + margin-bottom: 0; } } @@ -752,6 +828,10 @@ } } + a.unhandled-link { + color: lighten($ui-highlight-color, 8%); + } + .status__content__spoiler-link { background: $action-button-color; @@ -876,7 +956,8 @@ opacity: 1; animation: fade 150ms linear; - .video-player { + .video-player, + .audio-player { margin-top: 8px; } @@ -971,7 +1052,8 @@ white-space: normal; } - .video-player { + .video-player, + .audio-player { margin-top: 8px; max-width: 250px; } @@ -1082,7 +1164,8 @@ } } - .video-player { + .video-player, + .audio-player { margin-top: 8px; } } @@ -1194,14 +1277,28 @@ &-composite { @include avatar-radius; + border-radius: 50%; overflow: hidden; + position: relative; + cursor: default; & > div { - @include avatar-radius; float: left; position: relative; box-sizing: border-box; } + + &__label { + display: block; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + color: $primary-text-color; + text-shadow: 1px 1px 2px $base-shadow-color; + font-weight: 700; + font-size: 15px; + } } } @@ -1390,6 +1487,10 @@ a.account__display-name { color: inherit; } +.detailed-status .button.logo-button { + margin-bottom: 15px; +} + .detailed-status__display-name { color: $secondary-text-color; display: block; @@ -1433,6 +1534,7 @@ a.account__display-name { } .muted { + .status__content, .status__content p, .status__content a { color: $dark-text-color; @@ -1490,6 +1592,24 @@ a.account__display-name { color: $gold-star; } +.bookmark-icon.active { + color: $red-bookmark; +} + +.no-reduce-motion .icon-button.star-icon { + &.activate { + & > .fa-star { + animation: spring-rotate-in 1s linear; + } + } + + &.deactivate { + & > .fa-star { + animation: spring-rotate-out 1s linear; + } + } +} + .notification__display-name { color: inherit; font-weight: 500; @@ -1803,6 +1923,7 @@ a.account__display-name { justify-content: center; width: 100%; height: 100%; + min-height: 100vh; &__pane { height: 100%; @@ -1810,12 +1931,14 @@ a.account__display-name { pointer-events: none; display: flex; justify-content: flex-end; + min-width: 285px; &--start { justify-content: flex-start; } &__inner { + position: fixed; width: 285px; pointer-events: auto; height: 100%; @@ -1826,6 +1949,7 @@ a.account__display-name { box-sizing: border-box; width: 100%; max-width: 600px; + flex: 0 0 auto; display: flex; flex-direction: column; @@ -1836,6 +1960,26 @@ a.account__display-name { } } +.tabs-bar__wrapper { + background: darken($ui-base-color, 8%); + position: sticky; + top: 0; + z-index: 2; + padding-top: 0; + + @media screen and (min-width: $no-gap-breakpoint) { + padding-top: 10px; + } + + .tabs-bar { + margin-bottom: 0; + + @media screen and (min-width: $no-gap-breakpoint) { + margin-bottom: 10px; + } + } +} + .react-swipeable-view-container { &, .columns-area, @@ -1870,7 +2014,6 @@ a.account__display-name { flex-direction: column; width: 100%; height: 100%; - background: darken($ui-base-color, 7%); } .drawer { @@ -1996,6 +2139,24 @@ a.account__display-name { padding: 0; } + .directory__list { + display: grid; + grid-gap: 10px; + grid-template-columns: minmax(0, 50%) minmax(0, 50%); + + @media screen and (max-width: $no-gap-breakpoint) { + display: block; + } + } + + .directory__card { + margin-bottom: 0; + } + + .filter-form { + display: flex; + } + .autosuggest-textarea__textarea { font-size: 16px; } @@ -2011,8 +2172,17 @@ a.account__display-name { top: 15px; } + .scrollable { + overflow: visible; + + @supports(display: grid) { + contain: content; + } + } + @media screen and (min-width: $no-gap-breakpoint) { padding: 10px 0; + padding-top: 0; } @media screen and (min-width: 630px) { @@ -2020,7 +2190,8 @@ a.account__display-name { padding: 15px; .media-gallery, - .video-player { + .video-player, + .audio-player { margin-top: 15px; } } @@ -2062,7 +2233,8 @@ a.account__display-name { .media-gallery, &__action-bar, - .video-player { + .video-player, + .audio-player { margin-top: 10px; } } @@ -2127,17 +2299,14 @@ a.account__display-name { @media screen and (min-width: $no-gap-breakpoint) { .tabs-bar { - margin: 10px auto; - margin-bottom: 0; width: 100%; } .react-swipeable-view-container .columns-area--mobile { - height: calc(100% - 20px) !important; + height: calc(100% - 10px) !important; } .getting-started__wrapper, - .getting-started__trends, .search { margin-bottom: 10px; } @@ -2244,13 +2413,24 @@ a.account__display-name { margin-bottom: 10px; height: calc(100% - 20px); overflow-y: auto; + display: flex; + flex-direction: column; + + & > a { + flex: 0 0 auto; + } hr { + flex: 0 0 auto; border: 0; background: transparent; border-top: 1px solid lighten($ui-base-color, 4%); margin: 10px 0; } + + .flex-spacer { + background: transparent; + } } .drawer__pager { @@ -2361,6 +2541,8 @@ a.account__display-name { } .column-back-button { + box-sizing: border-box; + width: 100%; background: lighten($ui-base-color, 4%); color: $highlight-text-color; cursor: pointer; @@ -2640,8 +2822,19 @@ a.account__display-name { } &__trends { - background: $ui-base-color; flex: 0 1 auto; + opacity: 1; + animation: fade 150ms linear; + margin-top: 10px; + + h4 { + font-size: 12px; + text-transform: uppercase; + color: $darker-text-color; + padding: 10px; + font-weight: 500; + border-bottom: 1px solid lighten($ui-base-color, 8%); + } @media screen and (max-height: 810px) { .trends__item:nth-child(3) { @@ -2658,11 +2851,15 @@ a.account__display-name { @media screen and (max-height: 670px) { display: none; } - } - &__scrollable { - max-height: 100%; - overflow-y: auto; + .trends__item { + border-bottom: 0; + padding: 10px; + + &__current { + color: $darker-text-color; + } + } } } @@ -2949,37 +3146,27 @@ a.status-card.compact:hover { cursor: default; display: flex; flex: 1 1 auto; + flex-direction: column; align-items: center; justify-content: center; padding: 20px; - & > div { - width: 100%; - background: transparent; - padding-top: 0; - } - &__figure { - background: url('~images/elephant_ui_working.svg') no-repeat center 0; - width: 100%; - height: 160px; - background-size: contain; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); + &, + img { + display: block; + width: auto; + height: 160px; + margin: 0; + } } - &.missing-indicator { + &--without-header { padding-top: 20px + 48px; - - .regeneration-indicator__figure { - background-image: url('~images/elephant_ui_disappointed.svg'); - } } &__label { - margin-top: 200px; + margin-top: 30px; strong { display: block; @@ -3205,6 +3392,50 @@ a.status-card.compact:hover { animation: loader-figure 1.15s infinite cubic-bezier(0.215, 0.61, 0.355, 1); } +@keyframes spring-rotate-in { + 0% { + transform: rotate(0deg); + } + + 30% { + transform: rotate(-484.8deg); + } + + 60% { + transform: rotate(-316.7deg); + } + + 90% { + transform: rotate(-375deg); + } + + 100% { + transform: rotate(-360deg); + } +} + +@keyframes spring-rotate-out { + 0% { + transform: rotate(-360deg); + } + + 30% { + transform: rotate(124.8deg); + } + + 60% { + transform: rotate(-43.27deg); + } + + 90% { + transform: rotate(15deg); + } + + 100% { + transform: rotate(0deg); + } +} + @keyframes loader-figure { 0% { width: 0; @@ -3299,6 +3530,10 @@ a.status-card.compact:hover { height: auto; } + &--click-thru { + pointer-events: none; + } + &--hidden { display: none; } @@ -3327,6 +3562,12 @@ a.status-card.compact:hover { background: rgba($base-overlay-background, 0.8); } } + + &:disabled { + .spoiler-button__overlay__label { + background: rgba($base-overlay-background, 0.5); + } + } } } @@ -3370,6 +3611,28 @@ a.status-card.compact:hover { .column-select { &__control { @include search-input; + + &::placeholder { + color: lighten($darker-text-color, 4%); + } + + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus, + &:active { + outline: 0 !important; + } + + &:focus { + background: lighten($ui-base-color, 4%); + } + + @media screen and (max-width: 600px) { + font-size: 16px; + } } &__placeholder { @@ -3883,6 +4146,28 @@ a.status-card.compact:hover { padding-right: 30px; line-height: 18px; font-size: 16px; + + &::placeholder { + color: lighten($darker-text-color, 4%); + } + + &::-moz-focus-inner { + border: 0; + } + + &::-moz-focus-inner, + &:focus, + &:active { + outline: 0 !important; + } + + &:focus { + background: lighten($ui-base-color, 4%); + } + + @media screen and (max-width: 600px) { + font-size: 16px; + } } .search__icon { @@ -3995,6 +4280,12 @@ a.status-card.compact:hover { } } +.search-results__info { + padding: 20px; + color: $darker-text-color; + text-align: center; +} + .modal-root { position: relative; transition: opacity 0.3s linear; @@ -4033,10 +4324,13 @@ a.status-card.compact:hover { z-index: 9999; } -.video-modal { +.video-modal__container { max-width: 100vw; max-height: 100vh; - position: relative; +} + +.audio-modal__container { + width: 50vw; } .media-modal { @@ -4136,6 +4430,7 @@ a.status-card.compact:hover { } a { + pointer-events: auto; text-decoration: none; font-weight: 500; color: $ui-secondary-color; @@ -4299,7 +4594,8 @@ a.status-card.compact:hover { .confirmation-modal, .report-modal, .actions-modal, -.mute-modal { +.mute-modal, +.block-modal { background: lighten($ui-secondary-color, 8%); color: $inverted-text-color; border-radius: 8px; @@ -4353,7 +4649,8 @@ a.status-card.compact:hover { .boost-modal__action-bar, .confirmation-modal__action-bar, -.mute-modal__action-bar { +.mute-modal__action-bar, +.block-modal__action-bar { display: flex; justify-content: space-between; background: $ui-secondary-color; @@ -4381,11 +4678,13 @@ a.status-card.compact:hover { font-size: 14px; } -.mute-modal { +.mute-modal, +.block-modal { line-height: 24px; } -.mute-modal .react-toggle { +.mute-modal .react-toggle, +.block-modal .react-toggle { vertical-align: middle; } @@ -4414,7 +4713,8 @@ a.status-card.compact:hover { } } -.report-modal__statuses { +.report-modal__statuses, +.focal-point-modal__content { flex: 1 1 auto; min-height: 20vh; max-height: 80vh; @@ -4435,6 +4735,12 @@ a.status-card.compact:hover { } } +.focal-point-modal__content { + @media screen and (max-width: 480px) { + max-height: 40vh; + } +} + .report-modal__comment { padding: 20px; border-right: 1px solid $ui-secondary-color; @@ -4456,16 +4762,56 @@ a.status-card.compact:hover { padding: 10px; font-family: inherit; font-size: 14px; - resize: vertical; + resize: none; border: 0; outline: 0; border-radius: 4px; border: 1px solid $ui-secondary-color; - margin-bottom: 20px; + min-height: 100px; + max-height: 50vh; + margin-bottom: 10px; &:focus { border: 1px solid darken($ui-secondary-color, 8%); } + + &__wrapper { + background: $white; + border: 1px solid $ui-secondary-color; + margin-bottom: 10px; + border-radius: 4px; + + .setting-text { + border: 0; + margin-bottom: 0; + border-radius: 0; + + &:focus { + border: 0; + } + } + + &__modifiers { + color: $inverted-text-color; + font-family: inherit; + font-size: 14px; + background: $white; + } + } + + &__toolbar { + display: flex; + justify-content: space-between; + margin-bottom: 20px; + } + } + + .setting-text-label { + display: block; + color: $inverted-text-color; + font-size: 14px; + font-weight: 500; + margin-bottom: 10px; } .setting-toggle { @@ -4549,33 +4895,36 @@ a.status-card.compact:hover { } .confirmation-modal__action-bar, -.mute-modal__action-bar { - .confirmation-modal__secondary-button, - .confirmation-modal__cancel-button, - .mute-modal__cancel-button { - background-color: transparent; - color: $lighter-text-color; - font-size: 14px; - font-weight: 500; - - &:hover, - &:focus, - &:active { - color: darken($lighter-text-color, 4%); - } - } - +.mute-modal__action-bar, +.block-modal__action-bar { .confirmation-modal__secondary-button { flex-shrink: 1; } } +.confirmation-modal__secondary-button, +.confirmation-modal__cancel-button, +.mute-modal__cancel-button, +.block-modal__cancel-button { + background-color: transparent; + color: $lighter-text-color; + font-size: 14px; + font-weight: 500; + + &:hover, + &:focus, + &:active { + color: darken($lighter-text-color, 4%); + background-color: transparent; + } +} + .confirmation-modal__container, .mute-modal__container, +.block-modal__container, .report-modal__target { padding: 30px; font-size: 16px; - text-align: center; strong { font-weight: 500; @@ -4588,11 +4937,36 @@ a.status-card.compact:hover { } } +.confirmation-modal__container, .report-modal__target { - padding: 20px; + text-align: center; +} + +.block-modal, +.mute-modal { + &__explanation { + margin-top: 20px; + } + + .setting-toggle { + margin-top: 20px; + margin-bottom: 24px; + display: flex; + align-items: center; + + &__label { + color: $inverted-text-color; + margin: 0; + margin-left: 8px; + } + } +} + +.report-modal__target { + padding: 15px; .media-modal__close { - top: 19px; + top: 14px; right: 15px; } } @@ -4603,6 +4977,7 @@ a.status-card.compact:hover { position: absolute; top: 0; left: 0; + z-index: 9999; } .media-gallery__gifv__label { @@ -4788,70 +5163,64 @@ a.status-card.compact:hover { } /* End Media Gallery */ -/* Status Video Player */ -.status__video-player { - background: $base-overlay-background; - box-sizing: border-box; - cursor: default; /* May not be needed */ - margin-top: 8px; - overflow: hidden; - position: relative; -} +.detailed, +.fullscreen { + .video-player__volume__current, + .video-player__volume::before { + bottom: 27px; + } -.status__video-player-video { - height: 100%; - object-fit: cover; - position: relative; - top: 50%; - transform: translateY(-50%); - width: 100%; - z-index: 1; -} + .video-player__volume__handle { + bottom: 23px; + } -.status__video-player-expand, -.status__video-player-mute { - color: $primary-text-color; - opacity: 0.8; - position: absolute; - right: 4px; - text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color; } -.status__video-player-spoiler { - display: none; - color: $primary-text-color; - left: 4px; - position: absolute; - text-shadow: 0 1px 1px $base-shadow-color, 1px 0 1px $base-shadow-color; - top: 4px; - z-index: 100; +.audio-player { + box-sizing: border-box; + position: relative; + background: darken($ui-base-color, 8%); + border-radius: 4px; + padding-bottom: 44px; + direction: ltr; - &.status__video-player-spoiler--visible { - display: block; + &.editable { + border-radius: 0; + height: 100%; } -} -.status__video-player-expand { - bottom: 4px; - z-index: 100; -} + &__waveform { + padding: 15px 0; + position: relative; + overflow: hidden; -.status__video-player-mute { - top: 4px; - z-index: 5; -} + &::before { + content: ""; + display: block; + position: absolute; + border-top: 1px solid lighten($ui-base-color, 4%); + width: 100%; + height: 0; + left: 0; + top: calc(50% + 1px); + } + } -.detailed, -.fullscreen { - .video-player__volume__current, - .video-player__volume::before { - bottom: 27px; + &__progress-placeholder { + background-color: rgba(lighten($ui-highlight-color, 8%), 0.5); } - .video-player__volume__handle { - bottom: 23px; + &__wave-placeholder { + background-color: lighten($ui-base-color, 16%); } + .video-player__controls { + padding: 0 15px; + padding-top: 10px; + background: darken($ui-base-color, 8%); + border-top: 1px solid lighten($ui-base-color, 4%); + border-radius: 0 0 4px 4px; + } } .video-player { @@ -4860,6 +5229,13 @@ a.status-card.compact:hover { background: $base-shadow-color; max-width: 100%; border-radius: 4px; + box-sizing: border-box; + direction: ltr; + + &.editable { + border-radius: 0; + height: 100% !important; + } &:focus { outline: 0; @@ -4881,6 +5257,7 @@ a.status-card.compact:hover { max-height: 100% !important; width: 100% !important; height: 100% !important; + outline: 0; } } @@ -4958,6 +5335,10 @@ a.status-card.compact:hover { display: flex; justify-content: space-between; padding-bottom: 10px; + + .video-player__download__icon { + color: inherit; + } } &__buttons { @@ -5141,28 +5522,137 @@ a.status-card.compact:hover { } } -.media-spoiler-video { - background-size: cover; - background-repeat: no-repeat; - background-position: center; - cursor: pointer; - margin-top: 8px; - position: relative; - border: 0; - display: block; -} +.directory { + &__list { + width: 100%; + margin: 10px 0; + transition: opacity 100ms ease-in; -.media-spoiler-video-play-icon { - border-radius: 100px; - color: rgba($primary-text-color, 0.8); - font-size: 36px; - left: 50%; - padding: 5px; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); + &.loading { + opacity: 0.7; + } + + @media screen and (max-width: $no-gap-breakpoint) { + margin: 0; + } + } + + &__card { + box-sizing: border-box; + margin-bottom: 10px; + + &__img { + height: 125px; + position: relative; + background: darken($ui-base-color, 12%); + overflow: hidden; + + img { + display: block; + width: 100%; + height: 100%; + margin: 0; + object-fit: cover; + } + } + + &__bar { + display: flex; + align-items: center; + background: lighten($ui-base-color, 4%); + padding: 10px; + + &__name { + flex: 1 1 auto; + display: flex; + align-items: center; + text-decoration: none; + overflow: hidden; + } + + &__relationship { + width: 23px; + min-height: 1px; + flex: 0 0 auto; + } + + .avatar { + flex: 0 0 auto; + width: 48px; + height: 48px; + padding-top: 2px; + + img { + width: 100%; + height: 100%; + display: block; + margin: 0; + border-radius: 4px; + background: darken($ui-base-color, 8%); + object-fit: cover; + } + } + + .display-name { + margin-left: 15px; + text-align: left; + + strong { + font-size: 15px; + color: $primary-text-color; + font-weight: 500; + overflow: hidden; + text-overflow: ellipsis; + } + + span { + display: block; + font-size: 14px; + color: $darker-text-color; + font-weight: 400; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + + &__extra { + background: $ui-base-color; + display: flex; + align-items: center; + justify-content: center; + + .accounts-table__count { + width: 33.33%; + flex: 0 0 auto; + padding: 15px 0; + } + + .account__header__content { + box-sizing: border-box; + padding: 15px 10px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + width: 100%; + min-height: 18px + 30px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + p { + display: none; + + &:first-child { + display: inline; + } + } + + br { + display: none; + } + } + } + } } -/* End Video Player */ .account-gallery__container { display: flex; @@ -5238,6 +5728,73 @@ a.status-card.compact:hover { } } } + + &.directory__section-headline { + background: darken($ui-base-color, 2%); + border-bottom-color: transparent; + + a, + button { + &.active { + &::before { + display: none; + } + + &::after { + border-color: transparent transparent darken($ui-base-color, 7%); + } + } + } + } +} + +.filter-form { + background: $ui-base-color; + + &__column { + padding: 10px 15px; + } + + .radio-button { + display: block; + } +} + +.radio-button { + font-size: 14px; + position: relative; + display: inline-block; + padding: 6px 0; + line-height: 18px; + cursor: default; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; + + input[type=radio], + input[type=checkbox] { + display: none; + } + + &__input { + display: inline-block; + position: relative; + border: 1px solid $ui-primary-color; + box-sizing: border-box; + width: 18px; + height: 18px; + flex: 0 0 auto; + margin-right: 10px; + top: -1px; + border-radius: 50%; + vertical-align: middle; + + &.checked { + border-color: lighten($ui-highlight-color, 8%); + background: lighten($ui-highlight-color, 8%); + } + } } ::-webkit-scrollbar-thumb { @@ -5362,6 +5919,7 @@ noscript { } .embed-modal { + width: auto; max-width: 80vw; max-height: 80vh; @@ -5392,6 +5950,7 @@ noscript { font-size: 14px; margin: 0; margin-bottom: 15px; + border-radius: 4px; &::-moz-focus-inner { border: 0; @@ -5417,6 +5976,7 @@ noscript { max-width: 100%; overflow: hidden; border: 0; + border-radius: 4px; } } } @@ -5589,27 +6149,26 @@ noscript { } } -.focal-point-modal { - max-width: 80vw; - max-height: 80vh; - position: relative; -} - .focal-point { position: relative; - cursor: pointer; + cursor: move; overflow: hidden; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + background: $base-shadow-color; - &.dragging { - cursor: move; - } - - img { - max-width: 80vw; + img, + video, + canvas { + display: block; max-height: 80vh; - width: auto; + width: 100%; height: auto; - margin: auto; + margin: 0; + object-fit: contain; + background: $base-shadow-color; } &__reticle { @@ -5629,6 +6188,43 @@ noscript { top: 0; left: 0; } + + &__preview { + position: absolute; + bottom: 10px; + right: 10px; + z-index: 2; + cursor: move; + transition: opacity 0.1s ease; + + &:hover { + opacity: 0.5; + } + + strong { + color: $primary-text-color; + font-size: 14px; + font-weight: 500; + display: block; + margin-bottom: 5px; + } + + div { + border-radius: 4px; + box-shadow: 0 0 14px rgba($base-shadow-color, 0.2); + } + } + + @media screen and (max-width: 480px) { + img, + video { + max-height: 100%; + } + + &__preview { + display: none; + } + } } .account__header__content { @@ -5881,11 +6477,12 @@ noscript { &__current { flex: 0 0 auto; - width: 100px; font-size: 24px; line-height: 36px; font-weight: 500; - text-align: center; + text-align: right; + padding-right: 15px; + margin-left: 5px; color: $secondary-text-color; } @@ -5893,55 +6490,104 @@ noscript { flex: 0 0 auto; width: 50px; - path { + path:first-child { + fill: rgba($highlight-text-color, 0.25) !important; + fill-opacity: 1 !important; + } + + path:last-child { stroke: lighten($highlight-text-color, 6%) !important; } } } } -.layout-toggle { +.conversation { display: flex; + border-bottom: 1px solid lighten($ui-base-color, 8%); padding: 5px; + padding-bottom: 0; - button { - box-sizing: border-box; - flex: 0 0 50%; - background: transparent; - padding: 5px; - border: 0; + &:focus { + background: lighten($ui-base-color, 2%); + outline: 0; + } + + &__avatar { + flex: 0 0 auto; + padding: 10px; + padding-top: 12px; position: relative; + } - &:hover, - &:focus, - &:active { - svg path:first-child { - fill: lighten($ui-base-color, 16%); + &__unread { + display: inline-block; + background: $highlight-text-color; + border-radius: 50%; + width: 0.625rem; + height: 0.625rem; + margin: -.1ex .15em .1ex; + } + + &__content { + flex: 1 1 auto; + padding: 10px 5px; + padding-right: 15px; + overflow: hidden; + + &__info { + overflow: hidden; + display: flex; + flex-direction: row-reverse; + justify-content: space-between; + } + + &__relative-time { + font-size: 15px; + color: $darker-text-color; + padding-left: 15px; + } + + &__names { + color: $darker-text-color; + font-size: 15px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-bottom: 4px; + flex-basis: 90px; + flex-grow: 1; + + a { + color: $primary-text-color; + text-decoration: none; + + &:hover, + &:focus, + &:active { + text-decoration: underline; + } } } + + a { + word-break: break-word; + } } - svg { - width: 100%; - height: auto; + &--unread { + background: lighten($ui-base-color, 2%); - path:first-child { - fill: lighten($ui-base-color, 12%); + &:focus { + background: lighten($ui-base-color, 4%); } - path:last-child { - fill: darken($ui-base-color, 14%); + .conversation__content__info { + font-weight: 700; } - } - &__active { - color: $ui-highlight-color; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - background: lighten($ui-base-color, 12%); - border-radius: 50%; - padding: 0.35rem; + .conversation__content__relative-time { + color: $primary-text-color; + } } } diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss index 3564bf07b..51d9b46b0 100644 --- a/app/javascript/styles/mastodon/containers.scss +++ b/app/javascript/styles/mastodon/containers.scss @@ -141,10 +141,71 @@ grid-row: 3; } + @media screen and (max-width: $no-gap-breakpoint) { + grid-gap: 0; + grid-template-columns: minmax(0, 100%); + + .column-0 { + grid-column: 1; + } + + .column-1 { + grid-column: 1; + grid-row: 3; + } + + .column-2 { + grid-column: 1; + grid-row: 2; + } + + .column-3 { + grid-column: 1; + grid-row: 4; + } + } +} + +.grid-4 { + display: grid; + grid-gap: 10px; + grid-template-columns: repeat(4, minmax(0, 1fr)); + grid-auto-columns: 25%; + grid-auto-rows: max-content; + + .column-0 { + grid-column: 1 / 5; + grid-row: 1; + } + + .column-1 { + grid-column: 1 / 4; + grid-row: 2; + } + + .column-2 { + grid-column: 4; + grid-row: 2; + } + + .column-3 { + grid-column: 2 / 5; + grid-row: 3; + } + + .column-4 { + grid-column: 1; + grid-row: 3; + } + .landing-page__call-to-action { min-height: 100%; } + .flash-message { + margin-bottom: 10px; + } + @media screen and (max-width: 738px) { grid-template-columns: minmax(0, 50%) minmax(0, 50%); @@ -186,6 +247,11 @@ .column-3 { grid-column: 1; + grid-row: 5; + } + + .column-4 { + grid-column: 1; grid-row: 4; } } @@ -346,6 +412,20 @@ } } + .directory__card { + border-radius: 4px; + + @media screen and (max-width: $no-gap-breakpoint) { + border-radius: 0; + } + } + + .page-header { + @media screen and (max-width: $no-gap-breakpoint) { + border-bottom: 0; + } + } + .public-account-header { overflow: hidden; margin-bottom: 10px; @@ -566,7 +646,7 @@ } .counter { - width: 33.3%; + min-width: 33.3%; box-sizing: border-box; flex: 0 0 auto; color: $darker-text-color; @@ -749,14 +829,22 @@ } } - .static-icon-button { - color: $action-button-color; - font-size: 18px; + .directory__list { + display: grid; + grid-gap: 10px; + grid-template-columns: minmax(0, 50%) minmax(0, 50%); - & > span { - font-size: 14px; - font-weight: 500; + @media screen and (max-width: $no-gap-breakpoint) { + display: block; } + + .icon-button { + font-size: 18px; + } + } + + .directory__card { + margin-bottom: 0; } .card-grid { diff --git a/app/javascript/styles/mastodon/dashboard.scss b/app/javascript/styles/mastodon/dashboard.scss index e4564f062..c0944d417 100644 --- a/app/javascript/styles/mastodon/dashboard.scss +++ b/app/javascript/styles/mastodon/dashboard.scss @@ -15,6 +15,8 @@ padding: 20px; background: lighten($ui-base-color, 4%); border-radius: 4px; + box-sizing: border-box; + height: 100%; } & > a { diff --git a/app/javascript/styles/mastodon/footer.scss b/app/javascript/styles/mastodon/footer.scss index f74c004e9..00d290883 100644 --- a/app/javascript/styles/mastodon/footer.scss +++ b/app/javascript/styles/mastodon/footer.scss @@ -128,7 +128,7 @@ &:hover, &:focus, &:active { - svg path { + svg { fill: lighten($ui-base-color, 38%); } } diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 456ee4e0d..a0478bf7f 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -112,6 +112,15 @@ code { padding: 0.2em 0.4em; background: darken($ui-base-color, 12%); } + + li { + list-style: disc; + margin-left: 18px; + } + } + + ul.hint { + margin-bottom: 15px; } span.hint { @@ -245,6 +254,10 @@ code { &-6 { max-width: 50%; } + + .actions { + margin-top: 27px; + } } .fields-group:last-child, @@ -300,6 +313,13 @@ code { } } + .input.static .label_input__wrapper { + font-size: 16px; + padding: 10px; + border: 1px solid $dark-text-color; + border-radius: 4px; + } + input[type=text], input[type=number], input[type=email], @@ -318,6 +338,10 @@ code { border-radius: 4px; padding: 10px; + &::placeholder { + color: lighten($darker-text-color, 4%); + } + &:invalid { box-shadow: none; } @@ -489,6 +513,10 @@ code { &__overlay-area { position: relative; + &__blurred form { + filter: blur(2px); + } + &__overlay { position: absolute; top: 0; @@ -499,8 +527,10 @@ code { justify-content: center; align-items: center; background: rgba($ui-base-color, 0.65); - backdrop-filter: blur(2px); border-radius: 4px; + margin-left: -4px; + margin-top: -4px; + padding: 4px; &__content { text-align: center; diff --git a/app/javascript/styles/mastodon/introduction.scss b/app/javascript/styles/mastodon/introduction.scss index 222d8f60e..b44ae7306 100644 --- a/app/javascript/styles/mastodon/introduction.scss +++ b/app/javascript/styles/mastodon/introduction.scss @@ -3,9 +3,10 @@ flex-direction: column; justify-content: center; align-items: center; + height: 100vh; + background: $ui-base-color; @media screen and (max-width: 920px) { - background: darken($ui-base-color, 8%); display: block !important; } diff --git a/app/javascript/styles/mastodon/polls.scss b/app/javascript/styles/mastodon/polls.scss index 12f57b7a9..d7d850a1e 100644 --- a/app/javascript/styles/mastodon/polls.scss +++ b/app/javascript/styles/mastodon/polls.scss @@ -5,7 +5,6 @@ li { margin-bottom: 10px; position: relative; - height: 18px + 12px; } &__chart { @@ -24,13 +23,11 @@ &__text { position: relative; - display: inline-block; + display: flex; padding: 6px 0; line-height: 18px; cursor: default; - white-space: nowrap; overflow: hidden; - text-overflow: ellipsis; input[type=radio], input[type=checkbox] { @@ -82,6 +79,9 @@ top: -1px; border-radius: 50%; vertical-align: middle; + margin-top: auto; + margin-bottom: auto; + flex: 0 0 18px; &.checkbox { border-radius: 4px; @@ -91,14 +91,40 @@ border-color: $valid-value-color; background: $valid-value-color; } + + &:active, + &:focus, + &:hover { + border-width: 4px; + background: none; + } + + &::-moz-focus-inner { + outline: 0 !important; + border: 0; + } + + &:focus, + &:active { + outline: 0 !important; + } } &__number { display: inline-block; - width: 36px; + width: 52px; font-weight: 700; padding: 0 10px; + padding-left: 8px; text-align: right; + margin-top: auto; + margin-bottom: auto; + flex: 0 0 52px; + } + + &__vote__mark { + float: left; + line-height: 18px; } &__footer { @@ -151,6 +177,10 @@ button, select { flex: 1 1 50%; + + &:focus { + border-color: $highlight-text-color; + } } } diff --git a/app/javascript/styles/mastodon/rtl.scss b/app/javascript/styles/mastodon/rtl.scss index 58bc53b14..ecd166253 100644 --- a/app/javascript/styles/mastodon/rtl.scss +++ b/app/javascript/styles/mastodon/rtl.scss @@ -7,6 +7,34 @@ body.rtl { padding-right: 15px; } + .radio-button__input { + margin-right: 0; + margin-left: 10px; + } + + .directory__card__bar .display-name { + margin-left: 0; + margin-right: 15px; + } + + .display-name { + text-align: right; + } + + .notification__message { + margin-left: 0; + margin-right: 68px; + } + + .drawer__inner__mastodon > img { + transform: scaleX(-1); + } + + .notification__favourite-icon-wrapper { + left: auto; + right: -26px; + } + .landing-page__logo { margin-right: 0; margin-left: 20px; @@ -135,7 +163,6 @@ body.rtl { } .status__action-bar { - &__counter { margin-right: 0; margin-left: 11px; @@ -328,6 +355,12 @@ body.rtl { } } + .columns-area--mobile .column, + .columns-area--mobile .drawer { + padding-left: 0; + padding-right: 0; + } + .public-layout { .header { .nav-button { diff --git a/app/javascript/styles/mastodon/stream_entries.scss b/app/javascript/styles/mastodon/statuses.scss index 19ce0ab8f..19ce0ab8f 100644 --- a/app/javascript/styles/mastodon/stream_entries.scss +++ b/app/javascript/styles/mastodon/statuses.scss diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index 11ac6dfeb..62f5554ff 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -149,10 +149,6 @@ a.table-action-link { margin-top: 0; } } - - @media screen and (max-width: $no-gap-breakpoint) { - display: none; - } } &__actions, @@ -174,9 +170,17 @@ a.table-action-link { text-align: right; padding-right: 16px - 5px; } + } - @media screen and (max-width: $no-gap-breakpoint) { - display: none; + &__form { + padding: 16px; + border: 1px solid darken($ui-base-color, 8%); + border-top: 0; + background: $ui-base-color; + + .fields-row { + padding-top: 0; + margin-bottom: 0; } } @@ -186,7 +190,7 @@ a.table-action-link { background: darken($ui-base-color, 4%); @media screen and (max-width: $no-gap-breakpoint) { - &:first-child { + .optional &:first-child { border-top: 1px solid darken($ui-base-color, 8%); } } @@ -210,6 +214,52 @@ a.table-action-link { &--unpadded { padding: 0; } + + &--with-image { + display: flex; + align-items: center; + } + + &__image { + flex: 0 0 auto; + display: flex; + justify-content: center; + align-items: center; + margin-right: 10px; + + .emojione { + width: 32px; + height: 32px; + } + } + + &__text { + flex: 1 1 auto; + } + + &__extra { + flex: 0 0 auto; + text-align: right; + color: $darker-text-color; + font-weight: 500; + } + } + + .directory__tag { + margin: 0; + width: 100%; + + a { + background: transparent; + border-radius: 0; + } + } + } + + &.optional .batch-table__toolbar, + &.optional .batch-table__row__select { + @media screen and (max-width: $no-gap-breakpoint) { + display: none; } } diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index a82c44229..8602c3dde 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -6,6 +6,8 @@ $error-red: #df405a !default; // Cerise $warning-red: #ff5050 !default; // Sunset Orange $gold-star: #ca8f04 !default; // Dark Goldenrod +$red-bookmark: $warning-red; + // Values from the classic Mastodon UI $classic-base-color: #282c37; // Midnight Express $classic-primary-color: #9baec8; // Echo Blue diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss index acaf5b024..ca050a8d9 100644 --- a/app/javascript/styles/mastodon/widgets.scss +++ b/app/javascript/styles/mastodon/widgets.scss @@ -100,6 +100,16 @@ background-size: 44px 44px; } } + + .trends__item { + padding: 10px; + } +} + +.trends-widget { + h4 { + color: $darker-text-color; + } } .box-widget { @@ -109,41 +119,52 @@ box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); } -.contact-widget, -.landing-page__information.contact-widget { - box-sizing: border-box; - padding: 20px; - min-height: 100%; +.placeholder-widget { + padding: 16px; border-radius: 4px; - background: $ui-base-color; - box-shadow: 0 0 15px rgba($base-shadow-color, 0.2); + border: 2px dashed $dark-text-color; + text-align: center; + color: $darker-text-color; + margin-bottom: 10px; } .contact-widget { + min-height: 100%; font-size: 15px; color: $darker-text-color; line-height: 20px; word-wrap: break-word; font-weight: 400; + padding: 0; - strong { - font-weight: 500; + h4 { + padding: 10px; + text-transform: uppercase; + font-weight: 700; + font-size: 13px; + color: $darker-text-color; } - p { - margin-bottom: 10px; - - &:last-child { - margin-bottom: 0; - } + .account { + border-bottom: 0; + padding: 10px 0; + padding-top: 5px; } - &__mail { - margin-top: 10px; + & > a { + display: inline-block; + padding: 10px; + padding-top: 0; + color: $darker-text-color; + text-decoration: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; - a { - color: $primary-text-color; - text-decoration: none; + &:hover, + &:focus, + &:active { + text-decoration: underline; } } } @@ -324,7 +345,8 @@ &.active h4 { &, .fa, - small { + small, + .trends__item__current { color: $primary-text-color; } } @@ -337,6 +359,10 @@ &.active .avatar-stack .account__avatar { border-color: $ui-highlight-color; } + + .trends__item__current { + padding-right: 0; + } } } @@ -521,6 +547,12 @@ $fluid-breakpoint: $maximum-width + 20px; a { font-size: 14px; line-height: 20px; + } +} + +.notice-widget, +.placeholder-widget { + a { text-decoration: none; font-weight: 500; color: $ui-highlight-color; @@ -532,3 +564,38 @@ $fluid-breakpoint: $maximum-width + 20px; } } } + +.table-of-contents { + background: darken($ui-base-color, 4%); + min-height: 100%; + font-size: 14px; + border-radius: 4px; + + li a { + display: block; + font-weight: 500; + padding: 15px; + overflow: hidden; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-decoration: none; + color: $primary-text-color; + border-bottom: 1px solid lighten($ui-base-color, 4%); + + &:hover, + &:focus, + &:active { + text-decoration: underline; + } + } + + li:last-child a { + border-bottom: 0; + } + + li ul { + padding-left: 20px; + border-bottom: 1px solid lighten($ui-base-color, 4%); + } +} diff --git a/app/lib/activity_tracker.rb b/app/lib/activity_tracker.rb index ae3c11b6a..81303b715 100644 --- a/app/lib/activity_tracker.rb +++ b/app/lib/activity_tracker.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class ActivityTracker - EXPIRE_AFTER = 90.days.seconds + EXPIRE_AFTER = 6.months.seconds class << self include Redisable diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb index 66b5763a9..0ca6b92a4 100644 --- a/app/lib/activitypub/activity.rb +++ b/app/lib/activitypub/activity.rb @@ -5,7 +5,7 @@ class ActivityPub::Activity include Redisable SUPPORTED_TYPES = %w(Note Question).freeze - CONVERTED_TYPES = %w(Image Video Article Page).freeze + CONVERTED_TYPES = %w(Image Audio Video Article Page).freeze def initialize(json, account, **options) @json = json @@ -89,7 +89,7 @@ class ActivityPub::Activity def distribute(status) crawl_links(status) - notify_about_reblog(status) if reblog_of_local_account?(status) + notify_about_reblog(status) if reblog_of_local_account?(status) && !reblog_by_following_group_account?(status) notify_about_mentions(status) # Only continue if the status is supposed to have arrived in real-time. @@ -105,6 +105,10 @@ class ActivityPub::Activity status.reblog? && status.reblog.account.local? end + def reblog_by_following_group_account?(status) + status.reblog? && status.account.group? && status.reblog.account.following?(status.account) + end + def notify_about_reblog(status) NotifyService.new.call(status.reblog.account, status) end @@ -153,6 +157,14 @@ class ActivityPub::Activity fetch_remote_original_status end + def follow_request_from_object + @follow_request ||= FollowRequest.find_by(target_account: @account, uri: object_uri) unless object_uri.nil? + end + + def follow_from_object + @follow ||= ::Follow.find_by(target_account: @account, uri: object_uri) unless object_uri.nil? + end + def fetch_remote_original_status if object_uri.start_with?('http') return if ActivityPub::TagManager.instance.local_uri?(object_uri) diff --git a/app/lib/activitypub/activity/accept.rb b/app/lib/activitypub/activity/accept.rb index 348ee0d1c..7010ff43e 100644 --- a/app/lib/activitypub/activity/accept.rb +++ b/app/lib/activitypub/activity/accept.rb @@ -2,17 +2,18 @@ class ActivityPub::Activity::Accept < ActivityPub::Activity def perform + return accept_follow_for_relay if relay_follow? + return follow_request_from_object.authorize! unless follow_request_from_object.nil? + case @object['type'] when 'Follow' - accept_follow + accept_embedded_follow end end private - def accept_follow - return accept_follow_for_relay if relay_follow? - + def accept_embedded_follow target_account = account_from_uri(target_uri) return if target_account.nil? || !target_account.local? diff --git a/app/lib/activitypub/activity/announce.rb b/app/lib/activitypub/activity/announce.rb index 1aa6ee9ec..34c646668 100644 --- a/app/lib/activitypub/activity/announce.rb +++ b/app/lib/activitypub/activity/announce.rb @@ -40,7 +40,7 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity end def announceable?(status) - status.account_id == @account.id || status.public_visibility? || status.unlisted_visibility? + status.account_id == @account.id || status.distributable? end def related_to_local_activity? diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index f55dd35b2..8a12a2b08 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -25,6 +25,14 @@ class ActivityPub::Activity::Create < ActivityPub::Activity private + def audience_to + @object['to'] || @json['to'] + end + + def audience_cc + @object['cc'] || @json['cc'] + end + def process_status @tags = [] @mentions = [] @@ -41,8 +49,9 @@ class ActivityPub::Activity::Create < ActivityPub::Activity resolve_thread(@status) fetch_replies(@status) + check_for_spam distribute(@status) - forward_for_reply if @status.public_visibility? || @status.unlisted_visibility? + forward_for_reply if @status.distributable? end def find_existing_status @@ -74,7 +83,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity end def process_audience - (as_array(@object['to']) + as_array(@object['cc'])).uniq.each do |audience| + (as_array(audience_to) + as_array(audience_cc)).uniq.each do |audience| next if audience == ActivityPub::TagManager::COLLECTIONS[:public] # Unlike with tags, there is no point in resolving accounts we don't already @@ -147,12 +156,9 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def process_hashtag(tag) return if tag['name'].blank? - hashtag = tag['name'].gsub(/\A#/, '').mb_chars.downcase - hashtag = Tag.where(name: hashtag).first_or_create!(name: hashtag) - - return if @tags.include?(hashtag) - - @tags << hashtag + Tag.find_or_create_by_names(tag['name']) do |hashtag| + @tags << hashtag unless @tags.include?(hashtag) + end rescue ActiveRecord::RecordInvalid nil end @@ -191,22 +197,25 @@ class ActivityPub::Activity::Create < ActivityPub::Activity media_attachments = [] as_array(@object['attachment']).each do |attachment| - next if attachment['url'].blank? + next if attachment['url'].blank? || media_attachments.size >= 4 - href = Addressable::URI.parse(attachment['url']).normalize.to_s - media_attachment = MediaAttachment.create(account: @account, remote_url: href, description: attachment['name'].presence, focus: attachment['focalPoint'], blurhash: supported_blurhash?(attachment['blurhash']) ? attachment['blurhash'] : nil) - media_attachments << media_attachment + begin + href = Addressable::URI.parse(attachment['url']).normalize.to_s + media_attachment = MediaAttachment.create(account: @account, remote_url: href, description: attachment['name'].presence, focus: attachment['focalPoint'], blurhash: supported_blurhash?(attachment['blurhash']) ? attachment['blurhash'] : nil) + media_attachments << media_attachment - next if unsupported_media_type?(attachment['mediaType']) || skip_download? + next if unsupported_media_type?(attachment['mediaType']) || skip_download? - media_attachment.file_remote_url = href - media_attachment.save + media_attachment.file_remote_url = href + media_attachment.save + rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError + RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id) + end end media_attachments rescue Addressable::URI::InvalidURIError => e - Rails.logger.debug e - + Rails.logger.debug "Invalid URL in attachment: #{e}" media_attachments end @@ -231,25 +240,40 @@ class ActivityPub::Activity::Create < ActivityPub::Activity items = @object['oneOf'] end + voters_count = @object['votersCount'] + @account.polls.new( multiple: multiple, expires_at: expires_at, options: items.map { |item| item['name'].presence || item['content'] }.compact, - cached_tallies: items.map { |item| item.dig('replies', 'totalItems') || 0 } + cached_tallies: items.map { |item| item.dig('replies', 'totalItems') || 0 }, + voters_count: voters_count ) end def poll_vote? return false if replied_to_status.nil? || replied_to_status.preloadable_poll.nil? || !replied_to_status.local? || !replied_to_status.preloadable_poll.options.include?(@object['name']) - unless replied_to_status.preloadable_poll.expired? - replied_to_status.preloadable_poll.votes.create!(account: @account, choice: replied_to_status.preloadable_poll.options.index(@object['name']), uri: @object['id']) - ActivityPub::DistributePollUpdateWorker.perform_in(3.minutes, replied_to_status.id) unless replied_to_status.preloadable_poll.hide_totals? - end + poll_vote! unless replied_to_status.preloadable_poll.expired? true end + def poll_vote! + poll = replied_to_status.preloadable_poll + already_voted = true + RedisLock.acquire(poll_lock_options) do |lock| + if lock.acquired? + already_voted = poll.votes.where(account: @account).exists? + poll.votes.create!(account: @account, choice: poll.options.index(@object['name']), uri: @object['id']) + else + raise Mastodon::RaceConditionError + end + end + increment_voters_count! unless already_voted + ActivityPub::DistributePollUpdateWorker.perform_in(3.minutes, replied_to_status.id) unless replied_to_status.preloadable_poll.hide_totals? + end + def resolve_thread(status) return unless status.reply? && status.thread.nil? && Request.valid_url?(in_reply_to_uri) ThreadResolveWorker.perform_async(status.id, in_reply_to_uri) @@ -275,11 +299,11 @@ class ActivityPub::Activity::Create < ActivityPub::Activity end def visibility_from_audience - if equals_or_includes?(@object['to'], ActivityPub::TagManager::COLLECTIONS[:public]) + if equals_or_includes?(audience_to, ActivityPub::TagManager::COLLECTIONS[:public]) :public - elsif equals_or_includes?(@object['cc'], ActivityPub::TagManager::COLLECTIONS[:public]) + elsif equals_or_includes?(audience_cc, ActivityPub::TagManager::COLLECTIONS[:public]) :unlisted - elsif equals_or_includes?(@object['to'], @account.followers_url) + elsif equals_or_includes?(audience_to, @account.followers_url) :private else :direct @@ -288,7 +312,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def audience_includes?(account) uri = ActivityPub::TagManager.instance.uri_for(account) - equals_or_includes?(@object['to'], uri) || equals_or_includes?(@object['cc'], uri) + equals_or_includes?(audience_to, uri) || equals_or_includes?(audience_cc, uri) end def replied_to_status @@ -370,7 +394,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity end def unsupported_media_type?(mime_type) - mime_type.present? && !(MediaAttachment::IMAGE_MIME_TYPES + MediaAttachment::VIDEO_MIME_TYPES).include?(mime_type) + mime_type.present? && !MediaAttachment.supported_mime_types.include?(mime_type) end def supported_blurhash?(blurhash) @@ -380,7 +404,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def skip_download? return @skip_download if defined?(@skip_download) - @skip_download ||= DomainBlock.find_by(domain: @account.domain)&.reject_media? + @skip_download ||= DomainBlock.reject_media?(@account.domain) end def reply_to_local? @@ -399,19 +423,38 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def addresses_local_accounts? return true if @options[:delivered_to_account_id] - local_usernames = (as_array(@object['to']) + as_array(@object['cc'])).uniq.select { |uri| ActivityPub::TagManager.instance.local_uri?(uri) }.map { |uri| ActivityPub::TagManager.instance.uri_to_local_id(uri, :username) } + local_usernames = (as_array(audience_to) + as_array(audience_cc)).uniq.select { |uri| ActivityPub::TagManager.instance.local_uri?(uri) }.map { |uri| ActivityPub::TagManager.instance.uri_to_local_id(uri, :username) } return false if local_usernames.empty? Account.local.where(username: local_usernames).exists? end + def check_for_spam + SpamCheck.perform(@status) + end + def forward_for_reply return unless @json['signature'].present? && reply_to_local? ActivityPub::RawDistributionWorker.perform_async(Oj.dump(@json), replied_to_status.account_id, [@account.preferred_inbox_url]) end + def increment_voters_count! + poll = replied_to_status.preloadable_poll + unless poll.voters_count.nil? + poll.voters_count = poll.voters_count + 1 + poll.save + end + rescue ActiveRecord::StaleObjectError + poll.reload + retry + end + def lock_options { redis: Redis.current, key: "create:#{@object['id']}" } end + + def poll_lock_options + { redis: Redis.current, key: "vote:#{replied_to_status.poll_id}:#{@account.id}" } + end end diff --git a/app/lib/activitypub/activity/delete.rb b/app/lib/activitypub/activity/delete.rb index 0eb14b89c..dc9ff580c 100644 --- a/app/lib/activitypub/activity/delete.rb +++ b/app/lib/activitypub/activity/delete.rb @@ -13,8 +13,7 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity def delete_person lock_or_return("delete_in_progress:#{@account.id}") do - SuspendAccountService.new.call(@account) - @account.destroy! + SuspendAccountService.new.call(@account, reserve_username: false) end end @@ -31,7 +30,7 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity return if @status.nil? - if @status.public_visibility? || @status.unlisted_visibility? + if @status.distributable? forward_for_reply forward_for_reblogs end @@ -70,7 +69,7 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity end def delete_now! - RemoveStatusService.new.call(@status) + RemoveStatusService.new.call(@status, redraft: false) end def payload diff --git a/app/lib/activitypub/activity/flag.rb b/app/lib/activitypub/activity/flag.rb index f73b93058..1659bc61f 100644 --- a/app/lib/activitypub/activity/flag.rb +++ b/app/lib/activitypub/activity/flag.rb @@ -23,7 +23,7 @@ class ActivityPub::Activity::Flag < ActivityPub::Activity private def skip_reports? - DomainBlock.find_by(domain: @account.domain)&.reject_reports? + DomainBlock.reject_reports?(@account.domain) end def object_uris diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index 3eb88339a..ec92f4255 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -8,7 +8,7 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity return if target_account.nil? || !target_account.local? || delete_arrived_first?(@json['id']) || @account.requested?(target_account) - if target_account.blocking?(@account) || target_account.domain_blocking?(@account.domain) || target_account.moved? + if target_account.blocking?(@account) || target_account.domain_blocking?(@account.domain) || target_account.moved? || target_account.instance_actor? reject_follow_request!(target_account) return end @@ -21,7 +21,7 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity follow_request = FollowRequest.create!(account: @account, target_account: target_account, uri: @json['id']) - if target_account.locked? + if target_account.locked? || @account.silenced? NotifyService.new.call(target_account, follow_request) else AuthorizeFollowService.new.call(@account, target_account) diff --git a/app/lib/activitypub/activity/move.rb b/app/lib/activitypub/activity/move.rb index d7a5f595c..12bb82d25 100644 --- a/app/lib/activitypub/activity/move.rb +++ b/app/lib/activitypub/activity/move.rb @@ -10,17 +10,16 @@ class ActivityPub::Activity::Move < ActivityPub::Activity target_account = ActivityPub::FetchRemoteAccountService.new.call(target_uri) - return if target_account.nil? || !target_account.also_known_as.include?(origin_account.uri) + if target_account.nil? || target_account.suspended? || !target_account.also_known_as.include?(origin_account.uri) + unmark_as_processing! + return + end # In case for some reason we didn't have a redirect for the profile already, set it - origin_account.update(moved_to_account: target_account) if origin_account.moved_to_account_id.nil? + origin_account.update(moved_to_account: target_account) # Initiate a re-follow for each follower - origin_account.followers.local.select(:id).find_in_batches do |follower_accounts| - UnfollowFollowWorker.push_bulk(follower_accounts.map(&:id)) do |follower_account_id| - [follower_account_id, origin_account.id, target_account.id] - end - end + MoveWorker.perform_async(origin_account.id, target_account.id) end private @@ -40,4 +39,8 @@ class ActivityPub::Activity::Move < ActivityPub::Activity def mark_as_processing! redis.setex("move_in_progress:#{@account.id}", PROCESSING_COOLDOWN, true) end + + def unmark_as_processing! + redis.del("move_in_progress:#{@account.id}") + end end diff --git a/app/lib/activitypub/activity/reject.rb b/app/lib/activitypub/activity/reject.rb index dba21fb9a..8d771ed81 100644 --- a/app/lib/activitypub/activity/reject.rb +++ b/app/lib/activitypub/activity/reject.rb @@ -2,17 +2,19 @@ class ActivityPub::Activity::Reject < ActivityPub::Activity def perform + return reject_follow_for_relay if relay_follow? + return follow_request_from_object.reject! unless follow_request_from_object.nil? + return UnfollowService.new.call(follow_from_object.target_account, @account) unless follow_from_object.nil? + case @object['type'] when 'Follow' - reject_follow + reject_embedded_follow end end private - def reject_follow - return reject_follow_for_relay if relay_follow? - + def reject_embedded_follow target_account = account_from_uri(target_uri) return if target_account.nil? || !target_account.local? diff --git a/app/lib/activitypub/adapter.rb b/app/lib/activitypub/adapter.rb index c259c96f4..78138fb73 100644 --- a/app/lib/activitypub/adapter.rb +++ b/app/lib/activitypub/adapter.rb @@ -20,6 +20,8 @@ class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base focal_point: { 'toot' => 'http://joinmastodon.org/ns#', 'focalPoint' => { '@container' => '@list', '@id' => 'toot:focalPoint' } }, identity_proof: { 'toot' => 'http://joinmastodon.org/ns#', 'IdentityProof' => 'toot:IdentityProof' }, blurhash: { 'toot' => 'http://joinmastodon.org/ns#', 'blurhash' => 'toot:blurhash' }, + discoverable: { 'toot' => 'http://joinmastodon.org/ns#', 'discoverable' => 'toot:discoverable' }, + voters_count: { 'toot' => 'http://joinmastodon.org/ns#', 'votersCount' => 'toot:votersCount' }, }.freeze def self.default_key_transform @@ -31,21 +33,24 @@ class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base end def serializable_hash(options = nil) + named_contexts = {} + context_extensions = {} + options = serialization_options(options) - serialized_hash = serializer.serializable_hash(options) + serialized_hash = serializer.serializable_hash(options.merge(named_contexts: named_contexts, context_extensions: context_extensions)) + serialized_hash = serialized_hash.select { |k, _| options[:fields].include?(k) } if options[:fields] serialized_hash = self.class.transform_key_casing!(serialized_hash, instance_options) - { '@context' => serialized_context }.merge(serialized_hash) + { '@context' => serialized_context(named_contexts, context_extensions) }.merge(serialized_hash) end private - def serialized_context + def serialized_context(named_contexts_map, context_extensions_map) context_array = [] - serializer_options = serializer.send(:instance_options) || {} - named_contexts = [:activitystreams] + serializer._named_contexts.keys + serializer_options.fetch(:named_contexts, {}).keys - context_extensions = serializer._context_extensions.keys + serializer_options.fetch(:context_extensions, {}).keys + named_contexts = [:activitystreams] + named_contexts_map.keys + context_extensions = context_extensions_map.keys named_contexts.each do |key| context_array << NAMED_CONTEXT_MAP[key] diff --git a/app/lib/activitypub/serializer.rb b/app/lib/activitypub/serializer.rb index 07bd8c494..1fdc79310 100644 --- a/app/lib/activitypub/serializer.rb +++ b/app/lib/activitypub/serializer.rb @@ -27,4 +27,12 @@ class ActivityPub::Serializer < ActiveModel::Serializer _context_extensions[extension_name] = true end end + + def serializable_hash(adapter_options = nil, options = {}, adapter_instance = self.class.serialization_adapter_instance) + unless adapter_options&.fetch(:named_contexts, nil).nil? + adapter_options[:named_contexts].merge!(_named_contexts) + adapter_options[:context_extensions].merge!(_context_extensions) + end + super(adapter_options, options, adapter_instance) + end end diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index 595291342..ed680d762 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -17,7 +17,7 @@ class ActivityPub::TagManager case target.object_type when :person - short_account_url(target) + target.instance_actor? ? about_more_url(instance_actor: true) : short_account_url(target) when :note, :comment, :activity return activity_account_status_url(target.account, target) if target.reblog? short_account_status_url(target.account, target) @@ -29,7 +29,7 @@ class ActivityPub::TagManager case target.object_type when :person - account_url(target) + target.instance_actor? ? instance_actor_url : account_url(target) when :note, :comment, :activity return activity_account_status_url(target.account, target) if target.reblog? account_status_url(target.account, target) @@ -51,7 +51,7 @@ class ActivityPub::TagManager def replies_uri_for(target, page_params = nil) raise ArgumentError, 'target must be a local activity' unless %i(note comment activity).include?(target.object_type) && target.local? - replies_account_status_url(target.account, target, page_params) + account_status_replies_url(target.account, target, page_params) end # Primary audience of a status @@ -68,10 +68,19 @@ class ActivityPub::TagManager if status.account.silenced? # Only notify followers if the account is locally silenced account_ids = status.active_mentions.pluck(:account_id) - to = status.account.followers.where(id: account_ids).map { |account| uri_for(account) } - to.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).map { |request| uri_for(request.account) }) + to = status.account.followers.where(id: account_ids).each_with_object([]) do |account, result| + result << uri_for(account) + result << account.followers_url if account.group? + end + to.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).each_with_object([]) do |request, result| + result << uri_for(request.account) + result << request.account.followers_url if request.account.group? + end) else - status.active_mentions.map { |mention| uri_for(mention.account) } + status.active_mentions.each_with_object([]) do |mention, result| + result << uri_for(mention.account) + result << mention.account.followers_url if mention.account.group? + end end end end @@ -97,10 +106,19 @@ class ActivityPub::TagManager if status.account.silenced? # Only notify followers if the account is locally silenced account_ids = status.active_mentions.pluck(:account_id) - cc.concat(status.account.followers.where(id: account_ids).map { |account| uri_for(account) }) - cc.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).map { |request| uri_for(request.account) }) + cc.concat(status.account.followers.where(id: account_ids).each_with_object([]) do |account, result| + result << uri_for(account) + result << account.followers_url if account.group? + end) + cc.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).each_with_object([]) do |request, result| + result << uri_for(request.account) + result << request.account.followers_url if request.account.group? + end) else - cc.concat(status.active_mentions.map { |mention| uri_for(mention.account) }) + cc.concat(status.active_mentions.each_with_object([]) do |mention, result| + result << uri_for(mention.account) + result << mention.account.followers_url if mention.account.group? + end) end end @@ -119,6 +137,7 @@ class ActivityPub::TagManager def uri_to_local_id(uri, param = :id) path_params = Rails.application.routes.recognize_path(uri) + path_params[:username] = Rails.configuration.x.local_domain if path_params[:controller] == 'instance_actors' path_params[param] end diff --git a/app/lib/connection_pool/shared_connection_pool.rb b/app/lib/connection_pool/shared_connection_pool.rb new file mode 100644 index 000000000..2865a4108 --- /dev/null +++ b/app/lib/connection_pool/shared_connection_pool.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'connection_pool' +require_relative './shared_timed_stack' + +class ConnectionPool::SharedConnectionPool < ConnectionPool + def initialize(options = {}, &block) + super(options, &block) + + @available = ConnectionPool::SharedTimedStack.new(@size, &block) + end + + delegate :size, :flush, to: :@available + + def with(preferred_tag, options = {}) + Thread.handle_interrupt(Exception => :never) do + conn = checkout(preferred_tag, options) + + begin + Thread.handle_interrupt(Exception => :immediate) do + yield conn + end + ensure + checkin(preferred_tag) + end + end + end + + def checkout(preferred_tag, options = {}) + if ::Thread.current[key(preferred_tag)] + ::Thread.current[key_count(preferred_tag)] += 1 + ::Thread.current[key(preferred_tag)] + else + ::Thread.current[key_count(preferred_tag)] = 1 + ::Thread.current[key(preferred_tag)] = @available.pop(preferred_tag, options[:timeout] || @timeout) + end + end + + def checkin(preferred_tag) + if ::Thread.current[key(preferred_tag)] + if ::Thread.current[key_count(preferred_tag)] == 1 + @available.push(::Thread.current[key(preferred_tag)]) + ::Thread.current[key(preferred_tag)] = nil + else + ::Thread.current[key_count(preferred_tag)] -= 1 + end + else + raise ConnectionPool::Error, 'no connections are checked out' + end + + nil + end + + private + + def key(tag) + :"#{@key}-#{tag}" + end + + def key_count(tag) + :"#{@key_count}-#{tag}" + end +end diff --git a/app/lib/connection_pool/shared_timed_stack.rb b/app/lib/connection_pool/shared_timed_stack.rb new file mode 100644 index 000000000..14a5285c4 --- /dev/null +++ b/app/lib/connection_pool/shared_timed_stack.rb @@ -0,0 +1,95 @@ +# frozen_string_literal: true + +class ConnectionPool::SharedTimedStack + def initialize(max = 0, &block) + @create_block = block + @max = max + @created = 0 + @queue = [] + @tagged_queue = Hash.new { |hash, key| hash[key] = [] } + @mutex = Mutex.new + @resource = ConditionVariable.new + end + + def push(connection) + @mutex.synchronize do + store_connection(connection) + @resource.broadcast + end + end + + alias << push + + def pop(preferred_tag, timeout = 5.0) + deadline = current_time + timeout + + @mutex.synchronize do + loop do + return fetch_preferred_connection(preferred_tag) unless @tagged_queue[preferred_tag].empty? + + connection = try_create(preferred_tag) + return connection if connection + + to_wait = deadline - current_time + raise Timeout::Error, "Waited #{timeout} sec" if to_wait <= 0 + + @resource.wait(@mutex, to_wait) + end + end + end + + def empty? + size.zero? + end + + def size + @mutex.synchronize do + @queue.size + end + end + + def flush + @mutex.synchronize do + @queue.delete_if do |connection| + delete = !connection.in_use && (connection.dead || connection.seconds_idle >= RequestPool::MAX_IDLE_TIME) + + if delete + @tagged_queue[connection.site].delete(connection) + connection.close + @created -= 1 + end + + delete + end + end + end + + private + + def try_create(preferred_tag) + if @created == @max && !@queue.empty? + throw_away_connection = @queue.pop + @tagged_queue[throw_away_connection.site].delete(throw_away_connection) + @create_block.call(preferred_tag) + elsif @created != @max + connection = @create_block.call(preferred_tag) + @created += 1 + connection + end + end + + def fetch_preferred_connection(preferred_tag) + connection = @tagged_queue[preferred_tag].pop + @queue.delete(connection) + connection + end + + def current_time + Process.clock_gettime(Process::CLOCK_MONOTONIC) + end + + def store_connection(connection) + @tagged_queue[connection.site].push(connection) + @queue.push(connection) + end +end diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 4bc75dae8..cdb8383df 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -19,9 +19,11 @@ class FeedManager def filter?(timeline_type, status, receiver_id) if timeline_type == :home - filter_from_home?(status, receiver_id) + filter_from_home?(status, receiver_id, build_crutches(receiver_id, [status])) elsif timeline_type == :mentions filter_from_mentions?(status, receiver_id) + elsif timeline_type == :direct + filter_from_direct?(status, receiver_id) else false end @@ -29,13 +31,15 @@ class FeedManager def push_to_home(account, status) return false unless add_to_feed(:home, account.id, status, account.user&.aggregates_reblogs?) + trim(:home, account.id) PushUpdateWorker.perform_async(account.id, status.id, "timeline:#{account.id}") if push_update_required?("timeline:#{account.id}") true end def unpush_from_home(account, status) - return false unless remove_from_feed(:home, account.id, status) + return false unless remove_from_feed(:home, account.id, status, account.user&.aggregates_reblogs?) + redis.publish("timeline:#{account.id}", Oj.dump(event: :delete, payload: status.id.to_s)) true end @@ -47,24 +51,39 @@ class FeedManager should_filter &&= !(list.show_list_replies? && ListAccount.where(list_id: list.id, account_id: status.in_reply_to_account_id).exists?) return false if should_filter end + return false unless add_to_feed(:list, list.id, status, list.account.user&.aggregates_reblogs?) + trim(:list, list.id) PushUpdateWorker.perform_async(list.account_id, status.id, "timeline:list:#{list.id}") if push_update_required?("timeline:list:#{list.id}") true end def unpush_from_list(list, status) - return false unless remove_from_feed(:list, list.id, status) + return false unless remove_from_feed(:list, list.id, status, list.account.user&.aggregates_reblogs?) + redis.publish("timeline:list:#{list.id}", Oj.dump(event: :delete, payload: status.id.to_s)) true end + def push_to_direct(account, status) + return false unless add_to_feed(:direct, account.id, status) + trim(:direct, account.id) + PushUpdateWorker.perform_async(account.id, status.id, "timeline:direct:#{account.id}") + true + end + + def unpush_from_direct(account, status) + return false unless remove_from_feed(:direct, account.id, status) + redis.publish("timeline:direct:#{account.id}", Oj.dump(event: :delete, payload: status.id.to_s)) + end + def trim(type, account_id) timeline_key = key(type, account_id) reblog_key = key(type, account_id, 'reblogs') # Remove any items past the MAX_ITEMS'th entry in our feed - redis.zremrangebyrank(timeline_key, '0', (-(FeedManager::MAX_ITEMS + 1)).to_s) + redis.zremrangebyrank(timeline_key, 0, -(FeedManager::MAX_ITEMS + 1)) # Get the score of the REBLOG_FALLOFF'th item in our feed, and stop # tracking anything after it for deduplication purposes. @@ -86,16 +105,21 @@ class FeedManager def merge_into_timeline(from_account, into_account) timeline_key = key(:home, into_account.id) - query = from_account.statuses.limit(FeedManager::MAX_ITEMS / 4) + aggregate = into_account.user&.aggregates_reblogs? + query = from_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, reblog: :account).limit(FeedManager::MAX_ITEMS / 4) if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4 - oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true)&.first&.last&.to_i || 0 + oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i query = query.where('id > ?', oldest_home_score) end - query.each do |status| - next if status.direct_visibility? || status.limited_visibility? || filter?(:home, status, into_account) - add_to_feed(:home, into_account.id, status, into_account.user&.aggregates_reblogs?) + statuses = query.to_a + crutches = build_crutches(into_account.id, statuses) + + statuses.each do |status| + next if filter_from_home?(status, into_account, crutches) + + add_to_feed(:home, into_account.id, status, aggregate) end trim(:home, into_account.id) @@ -106,7 +130,7 @@ class FeedManager oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true)&.first&.last&.to_i || 0 from_account.statuses.select('id, reblog_of_id').where('id > ?', oldest_home_score).reorder(nil).find_each do |status| - remove_from_feed(:home, into_account.id, status) + remove_from_feed(:home, into_account.id, status, into_account.user&.aggregates_reblogs?) end end @@ -121,19 +145,51 @@ class FeedManager end def populate_feed(account) + limit = FeedManager::MAX_ITEMS / 2 + aggregate = account.user&.aggregates_reblogs? + timeline_key = key(:home, account.id) + + account.statuses.where.not(visibility: :direct).limit(limit).each do |status| + add_to_feed(:home, account.id, status, aggregate) + end + + account.following.includes(:account_stat).find_each do |target_account| + if redis.zcard(timeline_key) >= limit + oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i + last_status_score = Mastodon::Snowflake.id_at(account.last_status_at) + + # If the feed is full and this account has not posted more recently + # than the last item on the feed, then we can skip the whole account + # because none of its statuses would stay on the feed anyway + next if last_status_score < oldest_home_score + end + + statuses = target_account.statuses.where(visibility: [:public, :unlisted, :private]).includes(:preloadable_poll, reblog: :account).limit(limit) + crutches = build_crutches(account.id, statuses) + + statuses.each do |status| + next if filter_from_home?(status, account.id, crutches) + + add_to_feed(:home, account.id, status, aggregate) + end + + trim(:home, account.id) + end + end + + def populate_direct_feed(account) added = 0 limit = FeedManager::MAX_ITEMS / 2 max_id = nil loop do - statuses = Status.as_home_timeline(account) - .paginate_by_max_id(limit, max_id) + statuses = Status.as_direct_timeline(account, limit, max_id) break if statuses.empty? statuses.each do |status| - next if filter_from_home?(status, account) - added += 1 if add_to_feed(:home, account.id, status, account.user&.aggregates_reblogs?) + next if filter_from_direct?(status, account) + added += 1 if add_to_feed(:direct, account.id, status) end break unless added.zero? @@ -153,31 +209,33 @@ class FeedManager (context == :home ? Mute.where(account_id: receiver_id, target_account_id: account_ids).any? : Mute.where(account_id: receiver_id, target_account_id: account_ids, hide_notifications: true).any?) end - def filter_from_home?(status, receiver_id) + def filter_from_home?(status, receiver_id, crutches) return false if receiver_id == status.account_id return true if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?) return true if phrase_filtered?(status, receiver_id, :home) - check_for_blocks = status.active_mentions.pluck(:account_id) + check_for_blocks = crutches[:active_mentions][status.id] || [] check_for_blocks.concat([status.account_id]) if status.reblog? check_for_blocks.concat([status.reblog.account_id]) - check_for_blocks.concat(status.reblog.active_mentions.pluck(:account_id)) + check_for_blocks.concat(crutches[:active_mentions][status.reblog_of_id] || []) end - return true if blocks_or_mutes?(receiver_id, check_for_blocks, :home) + return true if check_for_blocks.any? { |target_account_id| crutches[:blocking][target_account_id] || crutches[:muting][target_account_id] } if status.reply? && !status.in_reply_to_account_id.nil? # Filter out if it's a reply - should_filter = !Follow.where(account_id: receiver_id, target_account_id: status.in_reply_to_account_id).exists? # and I'm not following the person it's a reply to + should_filter = !crutches[:following][status.in_reply_to_account_id] # and I'm not following the person it's a reply to should_filter &&= receiver_id != status.in_reply_to_account_id # and it's not a reply to me should_filter &&= status.account_id != status.in_reply_to_account_id # and it's not a self-reply - return should_filter + + return !!should_filter elsif status.reblog? # Filter out a reblog - should_filter = Follow.where(account_id: receiver_id, target_account_id: status.account_id, show_reblogs: false).exists? # if the reblogger's reblogs are suppressed - should_filter ||= Block.where(account_id: status.reblog.account_id, target_account_id: receiver_id).exists? # or if the author of the reblogged status is blocking me - should_filter ||= AccountDomainBlock.where(account_id: receiver_id, domain: status.reblog.account.domain).exists? # or the author's domain is blocked - return should_filter + should_filter = crutches[:hiding_reblogs][status.account_id] # if the reblogger's reblogs are suppressed + should_filter ||= crutches[:blocked_by][status.reblog.account_id] # or if the author of the reblogged status is blocking me + should_filter ||= crutches[:domain_blocking][status.reblog.account.domain] # or the author's domain is blocked + + return !!should_filter end false @@ -199,6 +257,11 @@ class FeedManager should_filter end + def filter_from_direct?(status, receiver_id) + return false if receiver_id == status.account_id + filter_from_mentions?(status, receiver_id) + end + def phrase_filtered?(status, receiver_id, context) active_filters = Rails.cache.fetch("filters:#{receiver_id}") { CustomFilter.where(account_id: receiver_id).active_irreversible.to_a }.to_a @@ -221,7 +284,8 @@ class FeedManager status = status.reblog if status.reblog? !combined_regex.match(Formatter.instance.plaintext(status)).nil? || - (status.spoiler_text.present? && !combined_regex.match(status.spoiler_text).nil?) + (status.spoiler_text.present? && !combined_regex.match(status.spoiler_text).nil?) || + (status.preloadable_poll && !combined_regex.match(status.preloadable_poll.options.join("\n\n")).nil?) end # Adds a status to an account's feed, returning true if a status was @@ -275,10 +339,11 @@ class FeedManager # with reblogs, and returning true if a status was removed. As with # `add_to_feed`, this does not trigger push updates, so callers must # do so if appropriate. - def remove_from_feed(timeline_type, account_id, status) + def remove_from_feed(timeline_type, account_id, status, aggregate_reblogs = true) timeline_key = key(timeline_type, account_id) + reblog_key = key(timeline_type, account_id, 'reblogs') - if status.reblog? + if status.reblog? && (aggregate_reblogs.nil? || aggregate_reblogs) # 1. If the reblogging status is not in the feed, stop. status_rank = redis.zrevrank(timeline_key, status.id) return false if status_rank.nil? @@ -287,6 +352,7 @@ class FeedManager reblog_set_key = key(timeline_type, account_id, "reblogs:#{status.reblog_of_id}") redis.srem(reblog_set_key, status.id) + redis.zrem(reblog_key, status.reblog_of_id) # 3. Re-insert another reblog or original into the feed if one # remains in the set. We could pick a random element, but this # set should generally be small, and it seems ideal to show the @@ -294,14 +360,43 @@ class FeedManager other_reblog = redis.smembers(reblog_set_key).map(&:to_i).min redis.zadd(timeline_key, other_reblog, other_reblog) if other_reblog + redis.zadd(reblog_key, other_reblog, status.reblog_of_id) if other_reblog # 4. Remove the reblogging status from the feed (as normal) # (outside conditional) else # If the original is getting deleted, no use for reblog references redis.del(key(timeline_type, account_id, "reblogs:#{status.id}")) + redis.zrem(reblog_key, status.id) end redis.zrem(timeline_key, status.id) end + + def build_crutches(receiver_id, statuses) + crutches = {} + + crutches[:active_mentions] = Mention.active.where(status_id: statuses.flat_map { |s| [s.id, s.reblog_of_id] }.compact).pluck(:status_id, :account_id).each_with_object({}) { |(id, account_id), mapping| (mapping[id] ||= []).push(account_id) } + + check_for_blocks = statuses.flat_map do |s| + arr = crutches[:active_mentions][s.id] || [] + arr.concat([s.account_id]) + + if s.reblog? + arr.concat([s.reblog.account_id]) + arr.concat(crutches[:active_mentions][s.reblog_of_id] || []) + end + + arr + end + + crutches[:following] = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:in_reply_to_account_id).compact).pluck(:target_account_id).each_with_object({}) { |id, mapping| mapping[id] = true } + crutches[:hiding_reblogs] = Follow.where(account_id: receiver_id, target_account_id: statuses.map { |s| s.account_id if s.reblog? }.compact, show_reblogs: false).pluck(:target_account_id).each_with_object({}) { |id, mapping| mapping[id] = true } + crutches[:blocking] = Block.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).each_with_object({}) { |id, mapping| mapping[id] = true } + crutches[:muting] = Mute.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).each_with_object({}) { |id, mapping| mapping[id] = true } + crutches[:domain_blocking] = AccountDomainBlock.where(account_id: receiver_id, domain: statuses.map { |s| s.reblog&.account&.domain }.compact).pluck(:domain).each_with_object({}) { |domain, mapping| mapping[domain] = true } + crutches[:blocked_by] = Block.where(target_account_id: receiver_id, account_id: statuses.map { |s| s.reblog&.account_id }.compact).pluck(:account_id).each_with_object({}) { |id, mapping| mapping[id] = true } + + crutches + end end diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index 8a2828bbf..9159db2a1 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -59,11 +59,10 @@ class Formatter html = "RT @#{prepend_reblog} #{html}" if prepend_reblog html = format_markdown(html) if status.content_type == 'text/markdown' html = encode_and_link_urls(html, linkable_accounts, keep_html: %w(text/markdown text/html).include?(status.content_type)) + html = reformat(html) if %w(text/markdown text/html).include?(status.content_type) html = encode_custom_emojis(html, status.emojis, options[:autoplay]) if options[:custom_emojify] - if %w(text/markdown text/html).include?(status.content_type) - html = reformat(html) - else + unless %w(text/markdown text/html).include?(status.content_type) html = simple_format(html, {}, sanitize: false) html = html.delete("\n") end @@ -116,8 +115,7 @@ class Formatter end def format_field(account, str, **options) - return reformat(str).html_safe unless account.local? # rubocop:disable Rails/OutputSafety - html = encode_and_link_urls(str, me: true) + html = account.local? ? encode_and_link_urls(str, me: true) : reformat(str) html = encode_custom_emojis(html, account.emojis, options[:autoplay]) if options[:custom_emojify] html.html_safe # rubocop:disable Rails/OutputSafety end @@ -201,11 +199,7 @@ class Formatter def encode_custom_emojis(html, emojis, animate = false) return html if emojis.empty? - emoji_map = if animate - emojis.each_with_object({}) { |e, h| h[e.shortcode] = full_asset_url(e.image.url) } - else - emojis.each_with_object({}) { |e, h| h[e.shortcode] = full_asset_url(e.image.url(:static)) } - end + emoji_map = emojis.each_with_object({}) { |e, h| h[e.shortcode] = [full_asset_url(e.image.url), full_asset_url(e.image.url(:static))] } i = -1 tag_open_index = nil @@ -221,7 +215,14 @@ class Formatter emoji = emoji_map[shortcode] if emoji - replacement = "<img draggable=\"false\" class=\"emojione\" alt=\":#{encode(shortcode)}:\" title=\":#{encode(shortcode)}:\" src=\"#{encode(emoji)}\" />" + original_url, static_url = emoji + replacement = begin + if animate + "<img draggable=\"false\" class=\"emojione\" alt=\":#{encode(shortcode)}:\" title=\":#{encode(shortcode)}:\" src=\"#{encode(original_url)}\" />" + else + "<img draggable=\"false\" class=\"emojione custom-emoji\" alt=\":#{encode(shortcode)}:\" title=\":#{encode(shortcode)}:\" src=\"#{encode(static_url)}\" data-original=\"#{original_url}\" data-static=\"#{static_url}\" />" + end + end before_html = shortname_start_index.positive? ? html[0..shortname_start_index - 1] : '' html = before_html + replacement + html[i + 1..-1] i += replacement.size - (shortcode.size + 2) - 1 @@ -315,7 +316,7 @@ class Formatter gaps = [] total_offset = 0 - escaped = html.gsub(/<[^>]*>/) do |match| + escaped = html.gsub(/<[^>]*>|&#[0-9]+;/) do |match| total_offset += match.length - 1 end_offset = Regexp.last_match.end(0) gaps << [end_offset - total_offset, total_offset] @@ -336,7 +337,7 @@ class Formatter def link_to_url(entity, options = {}) url = Addressable::URI.parse(entity[:url]) - html_attrs = { target: '_blank', rel: 'nofollow noopener' } + html_attrs = { target: '_blank', rel: 'nofollow noopener noreferrer' } html_attrs[:rel] = "me #{html_attrs[:rel]}" if options[:me] @@ -378,10 +379,10 @@ class Formatter end def hashtag_html(tag) - "<a href=\"#{encode(tag_url(tag.downcase))}\" class=\"mention hashtag\" rel=\"tag\">#<span>#{encode(tag)}</span></a>" + "<a href=\"#{encode(tag_url(tag))}\" class=\"mention hashtag\" rel=\"tag\">#<span>#{encode(tag)}</span></a>" end def mention_html(account) - "<span class=\"h-card\"><a href=\"#{encode(TagManager.instance.url_for(account))}\" class=\"u-url mention\">@<span>#{encode(account.username)}</span></a></span>" + "<span class=\"h-card\"><a href=\"#{encode(ActivityPub::TagManager.instance.url_for(account))}\" class=\"u-url mention\">@<span>#{encode(account.username)}</span></a></span>" end end diff --git a/app/lib/language_detector.rb b/app/lib/language_detector.rb index 1e90af42d..302072bcc 100644 --- a/app/lib/language_detector.rb +++ b/app/lib/language_detector.rb @@ -44,7 +44,7 @@ class LanguageDetector words = text.scan(RELIABLE_CHARACTERS_RE) if words.present? - words.reduce(0) { |acc, elem| acc + elem.size }.to_f / text.size.to_f > 0.3 + words.reduce(0) { |acc, elem| acc + elem.size }.to_f / text.size > 0.3 else false end @@ -69,7 +69,7 @@ class LanguageDetector new_text = remove_html(text) new_text.gsub!(FetchLinkCardService::URL_PATTERN, '') new_text.gsub!(Account::MENTION_RE, '') - new_text.gsub!(Tag::HASHTAG_RE, '') + new_text.gsub!(Tag::HASHTAG_RE) { |string| string.gsub(/[#_]/, '#' => '', '_' => ' ').gsub(/[a-z][A-Z]|[a-zA-Z][\d]/) { |s| s.insert(1, ' ') }.downcase } new_text.gsub!(/:#{CustomEmoji::SHORTCODE_RE_FRAGMENT}:/, '') new_text.gsub!(/\s+/, ' ') new_text diff --git a/app/lib/nodeinfo/adapter.rb b/app/lib/nodeinfo/adapter.rb new file mode 100644 index 000000000..1b48dcb98 --- /dev/null +++ b/app/lib/nodeinfo/adapter.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class NodeInfo::Adapter < ActiveModelSerializers::Adapter::Attributes + def self.default_key_transform + :camel_lower + end +end diff --git a/app/lib/ostatus/activity/base.rb b/app/lib/ostatus/activity/base.rb deleted file mode 100644 index db70f1998..000000000 --- a/app/lib/ostatus/activity/base.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true - -class OStatus::Activity::Base - include Redisable - - def initialize(xml, account = nil, **options) - @xml = xml - @account = account - @options = options - end - - def status? - [:activity, :note, :comment].include?(type) - end - - def verb - raw = @xml.at_xpath('./activity:verb', activity: OStatus::TagManager::AS_XMLNS).content - OStatus::TagManager::VERBS.key(raw) - rescue - :post - end - - def type - raw = @xml.at_xpath('./activity:object-type', activity: OStatus::TagManager::AS_XMLNS).content - OStatus::TagManager::TYPES.key(raw) - rescue - :activity - end - - def id - @xml.at_xpath('./xmlns:id', xmlns: OStatus::TagManager::XMLNS).content - end - - def url - link = @xml.xpath('./xmlns:link[@rel="alternate"]', xmlns: OStatus::TagManager::XMLNS).find { |link_candidate| link_candidate['type'] == 'text/html' } - link.nil? ? nil : link['href'] - end - - def activitypub_uri - link = @xml.xpath('./xmlns:link[@rel="alternate"]', xmlns: OStatus::TagManager::XMLNS).find { |link_candidate| ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(link_candidate['type']) } - link.nil? ? nil : link['href'] - end - - def activitypub_uri? - activitypub_uri.present? - end - - private - - def find_status(uri) - if OStatus::TagManager.instance.local_id?(uri) - local_id = OStatus::TagManager.instance.unique_tag_to_local_id(uri, 'Status') - return Status.find_by(id: local_id) - elsif ActivityPub::TagManager.instance.local_uri?(uri) - local_id = ActivityPub::TagManager.instance.uri_to_local_id(uri) - return Status.find_by(id: local_id) - end - - Status.find_by(uri: uri) - end - - def find_activitypub_status(uri, href) - tag_matches = /tag:([^,:]+)[^:]*:objectId=([\d]+)/.match(uri) - href_matches = %r{/users/([^/]+)}.match(href) - - unless tag_matches.nil? || href_matches.nil? - uri = "https://#{tag_matches[1]}/users/#{href_matches[1]}/statuses/#{tag_matches[2]}" - Status.find_by(uri: uri) - end - end -end diff --git a/app/lib/ostatus/activity/creation.rb b/app/lib/ostatus/activity/creation.rb deleted file mode 100644 index 3840c8fbf..000000000 --- a/app/lib/ostatus/activity/creation.rb +++ /dev/null @@ -1,219 +0,0 @@ -# frozen_string_literal: true - -class OStatus::Activity::Creation < OStatus::Activity::Base - def perform - if redis.exists("delete_upon_arrival:#{@account.id}:#{id}") - Rails.logger.debug "Delete for status #{id} was queued, ignoring" - return [nil, false] - end - - return [nil, false] if @account.suspended? || invalid_origin? - - RedisLock.acquire(lock_options) do |lock| - if lock.acquired? - # Return early if status already exists in db - @status = find_status(id) - return [@status, false] unless @status.nil? - @status = process_status - else - raise Mastodon::RaceConditionError - end - end - - [@status, true] - end - - def process_status - Rails.logger.debug "Creating remote status #{id}" - cached_reblog = reblog - status = nil - - # Skip if the reblogged status is not public - return if cached_reblog && !(cached_reblog.public_visibility? || cached_reblog.unlisted_visibility?) - - media_attachments = save_media.take(4) - - ApplicationRecord.transaction do - status = Status.create!( - uri: id, - url: url, - account: @account, - reblog: cached_reblog, - text: content, - spoiler_text: content_warning, - created_at: published, - override_timestamps: @options[:override_timestamps], - reply: thread?, - language: content_language, - visibility: visibility_scope, - conversation: find_or_create_conversation, - thread: thread? ? find_status(thread.first) || find_activitypub_status(thread.first, thread.second) : nil, - media_attachment_ids: media_attachments.map(&:id), - sensitive: sensitive? - ) - - save_mentions(status) - save_hashtags(status) - save_emojis(status) - end - - if thread? && status.thread.nil? && Request.valid_url?(thread.second) - Rails.logger.debug "Trying to attach #{status.id} (#{id}) to #{thread.first}" - ThreadResolveWorker.perform_async(status.id, thread.second) - end - - Rails.logger.debug "Queuing remote status #{status.id} (#{id}) for distribution" - - LinkCrawlWorker.perform_async(status.id) unless status.spoiler_text? - - # Only continue if the status is supposed to have arrived in real-time. - # Note that if @options[:override_timestamps] isn't set, the status - # may have a lower snowflake id than other existing statuses, potentially - # "hiding" it from paginated API calls - return status unless @options[:override_timestamps] || status.within_realtime_window? - - DistributionWorker.perform_async(status.id) - - status - end - - def content - @xml.at_xpath('./xmlns:content', xmlns: OStatus::TagManager::XMLNS).content - end - - def content_language - @xml.at_xpath('./xmlns:content', xmlns: OStatus::TagManager::XMLNS)['xml:lang']&.presence || 'en' - end - - def content_warning - @xml.at_xpath('./xmlns:summary', xmlns: OStatus::TagManager::XMLNS)&.content || '' - end - - def visibility_scope - @xml.at_xpath('./mastodon:scope', mastodon: OStatus::TagManager::MTDN_XMLNS)&.content&.to_sym || :public - end - - def published - @xml.at_xpath('./xmlns:published', xmlns: OStatus::TagManager::XMLNS).content - end - - def thread? - !@xml.at_xpath('./thr:in-reply-to', thr: OStatus::TagManager::THR_XMLNS).nil? - end - - def thread - thr = @xml.at_xpath('./thr:in-reply-to', thr: OStatus::TagManager::THR_XMLNS) - [thr['ref'], thr['href']] - end - - private - - def sensitive? - # OStatus-specific convention (not standard) - @xml.xpath('./xmlns:category', xmlns: OStatus::TagManager::XMLNS).any? { |category| category['term'] == 'nsfw' } - end - - def find_or_create_conversation - uri = @xml.at_xpath('./ostatus:conversation', ostatus: OStatus::TagManager::OS_XMLNS)&.attribute('ref')&.content - return if uri.nil? - - if OStatus::TagManager.instance.local_id?(uri) - local_id = OStatus::TagManager.instance.unique_tag_to_local_id(uri, 'Conversation') - return Conversation.find_by(id: local_id) - end - - Conversation.find_by(uri: uri) || Conversation.create!(uri: uri) - end - - def save_mentions(parent) - processed_account_ids = [] - - @xml.xpath('./xmlns:link[@rel="mentioned"]', xmlns: OStatus::TagManager::XMLNS).each do |link| - next if [OStatus::TagManager::TYPES[:group], OStatus::TagManager::TYPES[:collection]].include? link['ostatus:object-type'] - - mentioned_account = account_from_href(link['href']) - - next if mentioned_account.nil? || processed_account_ids.include?(mentioned_account.id) - - mentioned_account.mentions.where(status: parent).first_or_create(status: parent) - - # So we can skip duplicate mentions - processed_account_ids << mentioned_account.id - end - end - - def save_hashtags(parent) - tags = @xml.xpath('./xmlns:category', xmlns: OStatus::TagManager::XMLNS).map { |category| category['term'] }.select(&:present?) - ProcessHashtagsService.new.call(parent, tags) - end - - def save_media - do_not_download = DomainBlock.find_by(domain: @account.domain)&.reject_media? - media_attachments = [] - - @xml.xpath('./xmlns:link[@rel="enclosure"]', xmlns: OStatus::TagManager::XMLNS).each do |link| - next unless link['href'] - - media = MediaAttachment.where(status: nil, remote_url: link['href']).first_or_initialize(account: @account, status: nil, remote_url: link['href']) - parsed_url = Addressable::URI.parse(link['href']).normalize - - next if !%w(http https).include?(parsed_url.scheme) || parsed_url.host.empty? - - media.save - media_attachments << media - - next if do_not_download - - begin - media.file_remote_url = link['href'] - media.save! - rescue ActiveRecord::RecordInvalid - next - end - end - - media_attachments - end - - def save_emojis(parent) - do_not_download = DomainBlock.find_by(domain: parent.account.domain)&.reject_media? - - return if do_not_download - - @xml.xpath('./xmlns:link[@rel="emoji"]', xmlns: OStatus::TagManager::XMLNS).each do |link| - next unless link['href'] && link['name'] - - shortcode = link['name'].delete(':') - emoji = CustomEmoji.find_by(shortcode: shortcode, domain: parent.account.domain) - - next unless emoji.nil? - - emoji = CustomEmoji.new(shortcode: shortcode, domain: parent.account.domain) - emoji.image_remote_url = link['href'] - emoji.save - end - end - - def account_from_href(href) - url = Addressable::URI.parse(href).normalize - - if TagManager.instance.web_domain?(url.host) - Account.find_local(url.path.gsub('/users/', '')) - else - Account.where(uri: href).or(Account.where(url: href)).first || FetchRemoteAccountService.new.call(href) - end - end - - def invalid_origin? - return false unless id.start_with?('http') # Legacy IDs cannot be checked - - needle = Addressable::URI.parse(id).normalized_host - - !(needle.casecmp(@account.domain).zero? || - needle.casecmp(Addressable::URI.parse(@account.remote_url.presence || @account.uri).normalized_host).zero?) - end - - def lock_options - { redis: Redis.current, key: "create:#{id}" } - end -end diff --git a/app/lib/ostatus/activity/deletion.rb b/app/lib/ostatus/activity/deletion.rb deleted file mode 100644 index c98f5ee0a..000000000 --- a/app/lib/ostatus/activity/deletion.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -class OStatus::Activity::Deletion < OStatus::Activity::Base - def perform - Rails.logger.debug "Deleting remote status #{id}" - - status = Status.find_by(uri: id, account: @account) - status ||= Status.find_by(uri: activitypub_uri, account: @account) if activitypub_uri? - - if status.nil? - redis.setex("delete_upon_arrival:#{@account.id}:#{id}", 6 * 3_600, id) - else - RemoveStatusService.new.call(status) - end - end -end diff --git a/app/lib/ostatus/activity/general.rb b/app/lib/ostatus/activity/general.rb deleted file mode 100644 index 8a6aabc33..000000000 --- a/app/lib/ostatus/activity/general.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -class OStatus::Activity::General < OStatus::Activity::Base - def specialize - special_class&.new(@xml, @account, @options) - end - - private - - def special_class - case verb - when :post - OStatus::Activity::Post - when :share - OStatus::Activity::Share - when :delete - OStatus::Activity::Deletion - end - end -end diff --git a/app/lib/ostatus/activity/post.rb b/app/lib/ostatus/activity/post.rb deleted file mode 100644 index 755ed8656..000000000 --- a/app/lib/ostatus/activity/post.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -class OStatus::Activity::Post < OStatus::Activity::Creation - def perform - status, just_created = super - - if just_created - status.mentions.includes(:account).each do |mention| - mentioned_account = mention.account - next unless mentioned_account.local? - NotifyService.new.call(mentioned_account, mention) - end - end - - status - end - - private - - def reblog - nil - end -end diff --git a/app/lib/ostatus/activity/remote.rb b/app/lib/ostatus/activity/remote.rb deleted file mode 100644 index 5b204b6d8..000000000 --- a/app/lib/ostatus/activity/remote.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -class OStatus::Activity::Remote < OStatus::Activity::Base - def perform - if activitypub_uri? - find_status(activitypub_uri) || FetchRemoteStatusService.new.call(url) - else - find_status(id) || FetchRemoteStatusService.new.call(url) - end - end -end diff --git a/app/lib/ostatus/activity/share.rb b/app/lib/ostatus/activity/share.rb deleted file mode 100644 index 5ca601415..000000000 --- a/app/lib/ostatus/activity/share.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -class OStatus::Activity::Share < OStatus::Activity::Creation - def perform - return if reblog.nil? - - status, just_created = super - NotifyService.new.call(reblog.account, status) if reblog.account.local? && just_created - status - end - - def object - @xml.at_xpath('.//activity:object', activity: OStatus::TagManager::AS_XMLNS) - end - - private - - def reblog - return @reblog if defined? @reblog - - original_status = OStatus::Activity::Remote.new(object).perform - return if original_status.nil? - - @reblog = original_status.reblog? ? original_status.reblog : original_status - end -end diff --git a/app/lib/ostatus/atom_serializer.rb b/app/lib/ostatus/atom_serializer.rb deleted file mode 100644 index 9a05d96cf..000000000 --- a/app/lib/ostatus/atom_serializer.rb +++ /dev/null @@ -1,378 +0,0 @@ -# frozen_string_literal: true - -class OStatus::AtomSerializer - include RoutingHelper - include ActionView::Helpers::SanitizeHelper - - class << self - def render(element) - document = Ox::Document.new(version: '1.0') - document << element - ('<?xml version="1.0"?>' + Ox.dump(element, effort: :tolerant)).force_encoding('UTF-8') - end - end - - def author(account) - author = Ox::Element.new('author') - - uri = OStatus::TagManager.instance.uri_for(account) - - append_element(author, 'id', uri) - append_element(author, 'activity:object-type', OStatus::TagManager::TYPES[:person]) - append_element(author, 'uri', uri) - append_element(author, 'name', account.username) - append_element(author, 'email', account.local? ? account.local_username_and_domain : account.acct) - append_element(author, 'summary', Formatter.instance.simplified_format(account).to_str, type: :html) if account.note? - append_element(author, 'link', nil, rel: :alternate, type: 'text/html', href: ::TagManager.instance.url_for(account)) - append_element(author, 'link', nil, rel: :avatar, type: account.avatar_content_type, 'media:width': 120, 'media:height': 120, href: full_asset_url(account.avatar.url(:original))) if account.avatar? - append_element(author, 'link', nil, rel: :header, type: account.header_content_type, 'media:width': 700, 'media:height': 335, href: full_asset_url(account.header.url(:original))) if account.header? - account.emojis.each do |emoji| - append_element(author, 'link', nil, rel: :emoji, href: full_asset_url(emoji.image.url), name: emoji.shortcode) - end - append_element(author, 'poco:preferredUsername', account.username) - append_element(author, 'poco:displayName', account.display_name) if account.display_name? - append_element(author, 'poco:note', account.local? ? account.note : strip_tags(account.note)) if account.note? - append_element(author, 'mastodon:scope', account.locked? ? :private : :public) - - author - end - - def feed(account, stream_entries) - feed = Ox::Element.new('feed') - - add_namespaces(feed) - - append_element(feed, 'id', account_url(account, format: 'atom')) - append_element(feed, 'title', account.display_name.presence || account.username) - append_element(feed, 'subtitle', account.note) - append_element(feed, 'updated', account.updated_at.iso8601) - append_element(feed, 'logo', full_asset_url(account.avatar.url(:original))) - - feed << author(account) - - append_element(feed, 'link', nil, rel: :alternate, type: 'text/html', href: ::TagManager.instance.url_for(account)) - append_element(feed, 'link', nil, rel: :self, type: 'application/atom+xml', href: account_url(account, format: 'atom')) - append_element(feed, 'link', nil, rel: :next, type: 'application/atom+xml', href: account_url(account, format: 'atom', max_id: stream_entries.last.id)) if stream_entries.size == 20 - append_element(feed, 'link', nil, rel: :hub, href: api_push_url) - append_element(feed, 'link', nil, rel: :salmon, href: api_salmon_url(account.id)) - - stream_entries.each do |stream_entry| - feed << entry(stream_entry) - end - - feed - end - - def entry(stream_entry, root = false) - entry = Ox::Element.new('entry') - - add_namespaces(entry) if root - - append_element(entry, 'id', OStatus::TagManager.instance.uri_for(stream_entry.status)) - append_element(entry, 'published', stream_entry.created_at.iso8601) - append_element(entry, 'updated', stream_entry.updated_at.iso8601) - append_element(entry, 'title', stream_entry&.status&.title || "#{stream_entry.account.acct} deleted status") - - entry << author(stream_entry.account) if root - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[stream_entry.object_type]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[stream_entry.verb]) - - entry << object(stream_entry.target) if stream_entry.targeted? - - if stream_entry.status.nil? - append_element(entry, 'content', 'Deleted status') - elsif stream_entry.status.destroyed? - append_element(entry, 'content', 'Deleted status') - append_element(entry, 'link', nil, rel: :alternate, type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(stream_entry.status)) if stream_entry.account.local? - else - serialize_status_attributes(entry, stream_entry.status) - end - - append_element(entry, 'link', nil, rel: :alternate, type: 'text/html', href: ::TagManager.instance.url_for(stream_entry.status)) - append_element(entry, 'link', nil, rel: :self, type: 'application/atom+xml', href: account_stream_entry_url(stream_entry.account, stream_entry, format: 'atom')) - append_element(entry, 'thr:in-reply-to', nil, ref: OStatus::TagManager.instance.uri_for(stream_entry.thread), href: ::TagManager.instance.url_for(stream_entry.thread)) if stream_entry.threaded? - append_element(entry, 'ostatus:conversation', nil, ref: conversation_uri(stream_entry.status.conversation)) unless stream_entry&.status&.conversation_id.nil? - - entry - end - - def object(status) - object = Ox::Element.new('activity:object') - - append_element(object, 'id', OStatus::TagManager.instance.uri_for(status)) - append_element(object, 'published', status.created_at.iso8601) - append_element(object, 'updated', status.updated_at.iso8601) - append_element(object, 'title', status.title) - - object << author(status.account) - - append_element(object, 'activity:object-type', OStatus::TagManager::TYPES[status.object_type]) - append_element(object, 'activity:verb', OStatus::TagManager::VERBS[status.verb]) - - serialize_status_attributes(object, status) - - append_element(object, 'link', nil, rel: :alternate, type: 'text/html', href: ::TagManager.instance.url_for(status)) - append_element(object, 'thr:in-reply-to', nil, ref: OStatus::TagManager.instance.uri_for(status.thread), href: ::TagManager.instance.url_for(status.thread)) unless status.thread.nil? - append_element(object, 'ostatus:conversation', nil, ref: conversation_uri(status.conversation)) unless status.conversation_id.nil? - - object - end - - def follow_salmon(follow) - entry = Ox::Element.new('entry') - add_namespaces(entry) - - description = "#{follow.account.acct} started following #{follow.target_account.acct}" - - append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(follow.created_at, follow.id, 'Follow')) - append_element(entry, 'title', description) - append_element(entry, 'content', description, type: :html) - - entry << author(follow.account) - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:follow]) - - object = author(follow.target_account) - object.value = 'activity:object' - - entry << object - entry - end - - def follow_request_salmon(follow_request) - entry = Ox::Element.new('entry') - add_namespaces(entry) - - append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(follow_request.created_at, follow_request.id, 'FollowRequest')) - append_element(entry, 'title', "#{follow_request.account.acct} requested to follow #{follow_request.target_account.acct}") - - entry << author(follow_request.account) - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:request_friend]) - - object = author(follow_request.target_account) - object.value = 'activity:object' - - entry << object - entry - end - - def authorize_follow_request_salmon(follow_request) - entry = Ox::Element.new('entry') - add_namespaces(entry) - - append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, follow_request.id, 'FollowRequest')) - append_element(entry, 'title', "#{follow_request.target_account.acct} authorizes follow request by #{follow_request.account.acct}") - - entry << author(follow_request.target_account) - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:authorize]) - - object = Ox::Element.new('activity:object') - object << author(follow_request.account) - - append_element(object, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(object, 'activity:verb', OStatus::TagManager::VERBS[:request_friend]) - - inner_object = author(follow_request.target_account) - inner_object.value = 'activity:object' - - object << inner_object - entry << object - entry - end - - def reject_follow_request_salmon(follow_request) - entry = Ox::Element.new('entry') - add_namespaces(entry) - - append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, follow_request.id, 'FollowRequest')) - append_element(entry, 'title', "#{follow_request.target_account.acct} rejects follow request by #{follow_request.account.acct}") - - entry << author(follow_request.target_account) - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:reject]) - - object = Ox::Element.new('activity:object') - object << author(follow_request.account) - - append_element(object, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(object, 'activity:verb', OStatus::TagManager::VERBS[:request_friend]) - - inner_object = author(follow_request.target_account) - inner_object.value = 'activity:object' - - object << inner_object - entry << object - entry - end - - def unfollow_salmon(follow) - entry = Ox::Element.new('entry') - add_namespaces(entry) - - description = "#{follow.account.acct} is no longer following #{follow.target_account.acct}" - - append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, follow.id, 'Follow')) - append_element(entry, 'title', description) - append_element(entry, 'content', description, type: :html) - - entry << author(follow.account) - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:unfollow]) - - object = author(follow.target_account) - object.value = 'activity:object' - - entry << object - entry - end - - def block_salmon(block) - entry = Ox::Element.new('entry') - add_namespaces(entry) - - description = "#{block.account.acct} no longer wishes to interact with #{block.target_account.acct}" - - append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, block.id, 'Block')) - append_element(entry, 'title', description) - - entry << author(block.account) - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:block]) - - object = author(block.target_account) - object.value = 'activity:object' - - entry << object - entry - end - - def unblock_salmon(block) - entry = Ox::Element.new('entry') - add_namespaces(entry) - - description = "#{block.account.acct} no longer blocks #{block.target_account.acct}" - - append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, block.id, 'Block')) - append_element(entry, 'title', description) - - entry << author(block.account) - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:unblock]) - - object = author(block.target_account) - object.value = 'activity:object' - - entry << object - entry - end - - def favourite_salmon(favourite) - entry = Ox::Element.new('entry') - add_namespaces(entry) - - description = "#{favourite.account.acct} favourited a status by #{favourite.status.account.acct}" - - append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(favourite.created_at, favourite.id, 'Favourite')) - append_element(entry, 'title', description) - append_element(entry, 'content', description, type: :html) - - entry << author(favourite.account) - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:favorite]) - - entry << object(favourite.status) - - append_element(entry, 'thr:in-reply-to', nil, ref: OStatus::TagManager.instance.uri_for(favourite.status), href: ::TagManager.instance.url_for(favourite.status)) - - entry - end - - def unfavourite_salmon(favourite) - entry = Ox::Element.new('entry') - add_namespaces(entry) - - description = "#{favourite.account.acct} no longer favourites a status by #{favourite.status.account.acct}" - - append_element(entry, 'id', OStatus::TagManager.instance.unique_tag(Time.now.utc, favourite.id, 'Favourite')) - append_element(entry, 'title', description) - append_element(entry, 'content', description, type: :html) - - entry << author(favourite.account) - - append_element(entry, 'activity:object-type', OStatus::TagManager::TYPES[:activity]) - append_element(entry, 'activity:verb', OStatus::TagManager::VERBS[:unfavorite]) - - entry << object(favourite.status) - - append_element(entry, 'thr:in-reply-to', nil, ref: OStatus::TagManager.instance.uri_for(favourite.status), href: ::TagManager.instance.url_for(favourite.status)) - - entry - end - - private - - def append_element(parent, name, content = nil, **attributes) - element = Ox::Element.new(name) - attributes.each { |k, v| element[k] = sanitize_str(v) } - element << sanitize_str(content) unless content.nil? - parent << element - end - - def sanitize_str(raw_str) - raw_str.to_s - end - - def conversation_uri(conversation) - return conversation.uri if conversation.uri? - OStatus::TagManager.instance.unique_tag(conversation.created_at, conversation.id, 'Conversation') - end - - def add_namespaces(parent) - parent['xmlns'] = OStatus::TagManager::XMLNS - parent['xmlns:thr'] = OStatus::TagManager::THR_XMLNS - parent['xmlns:activity'] = OStatus::TagManager::AS_XMLNS - parent['xmlns:poco'] = OStatus::TagManager::POCO_XMLNS - parent['xmlns:media'] = OStatus::TagManager::MEDIA_XMLNS - parent['xmlns:ostatus'] = OStatus::TagManager::OS_XMLNS - parent['xmlns:mastodon'] = OStatus::TagManager::MTDN_XMLNS - end - - def serialize_status_attributes(entry, status) - append_element(entry, 'link', nil, rel: :alternate, type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(status)) if status.account.local? - - append_element(entry, 'summary', status.spoiler_text, 'xml:lang': status.language) if status.spoiler_text? - append_element(entry, 'content', Formatter.instance.format(status, inline_poll_options: true).to_str || '.', type: 'html', 'xml:lang': status.language) - - status.active_mentions.sort_by(&:id).each do |mentioned| - append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': OStatus::TagManager::TYPES[:person], href: OStatus::TagManager.instance.uri_for(mentioned.account)) - end - - append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': OStatus::TagManager::TYPES[:collection], href: OStatus::TagManager::COLLECTIONS[:public]) if status.public_visibility? - - status.tags.each do |tag| - append_element(entry, 'category', nil, term: tag.name) - end - - status.media_attachments.each do |media| - append_element(entry, 'link', nil, rel: :enclosure, type: media.file_content_type, length: media.file_file_size, href: full_asset_url(media.file.url(:original, false))) - end - - append_element(entry, 'category', nil, term: 'nsfw') if status.sensitive? && status.media_attachments.any? - append_element(entry, 'mastodon:scope', status.visibility) - - status.emojis.each do |emoji| - append_element(entry, 'link', nil, rel: :emoji, href: full_asset_url(emoji.image.url), name: emoji.shortcode) - end - end -end diff --git a/app/lib/request.rb b/app/lib/request.rb index e555ae6a1..42ccc6513 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -17,15 +17,22 @@ end class Request REQUEST_TARGET = '(request-target)' + # We enforce a 5s timeout on DNS resolving, 5s timeout on socket opening + # and 5s timeout on the TLS handshake, meaning the worst case should take + # about 15s in total + TIMEOUT = { connect: 5, read: 10, write: 10 }.freeze + include RoutingHelper def initialize(verb, url, **options) raise ArgumentError if url.blank? - @verb = verb - @url = Addressable::URI.parse(url).normalize - @options = options.merge(use_proxy? ? Rails.configuration.x.http_client_proxy : { socket_class: Socket }) - @headers = {} + @verb = verb + @url = Addressable::URI.parse(url).normalize + @http_client = options.delete(:http_client) + @options = options.merge(socket_class: use_proxy? ? ProxySocket : Socket) + @options = @options.merge(Rails.configuration.x.http_client_proxy) if use_proxy? + @headers = {} raise Mastodon::HostValidationError, 'Instance does not support hidden service connections' if block_hidden_service? @@ -33,8 +40,8 @@ class Request set_digest! if options.key?(:body) end - def on_behalf_of(account, key_id_format = :acct, sign_with: nil) - raise ArgumentError unless account.local? + def on_behalf_of(account, key_id_format = :uri, sign_with: nil) + raise ArgumentError, 'account must not be nil' if account.nil? @account = account @keypair = sign_with.present? ? OpenSSL::PKey::RSA.new(sign_with) : @account.keypair @@ -50,15 +57,24 @@ class Request def perform begin - response = http_client.headers(headers).public_send(@verb, @url.to_s, @options) + response = http_client.public_send(@verb, @url.to_s, @options.merge(headers: headers)) rescue => e - raise e.class, "#{e.message} on #{@url}", e.backtrace[0] + raise e.class, "#{e.message} on #{@url}", e.backtrace end begin - yield response.extend(ClientLimit) if block_given? + response = response.extend(ClientLimit) + + # If we are using a persistent connection, we have to + # read every response to be able to move forward at all. + # However, simply calling #to_s or #flush may not be safe, + # as the response body, if malicious, could be too big + # for our memory. So we use the #body_with_limit method + response.body_with_limit if http_client.persistent? + + yield response if block_given? ensure - http_client.close + http_client.close unless http_client.persistent? end end @@ -76,6 +92,10 @@ class Request %w(http https).include?(parsed_url.scheme) && parsed_url.host.present? end + + def http_client + HTTP.use(:auto_inflate).timeout(:per_operation, TIMEOUT.dup).follow(max_hops: 2) + end end private @@ -116,16 +136,8 @@ class Request end end - def timeout - # We enforce a 1s timeout on DNS resolving, 10s timeout on socket opening - # and 5s timeout on the TLS handshake, meaning the worst case should take - # about 16s in total - - { connect: 5, read: 10, write: 10 } - end - def http_client - @http_client ||= HTTP.use(:auto_inflate).timeout(:per_operation, timeout).follow(max_hops: 2) + @http_client ||= Request.http_client end def use_proxy? @@ -166,26 +178,67 @@ class Request class Socket < TCPSocket class << self def open(host, *args) - return super(host, *args) if thru_hidden_service?(host) - outer_e = nil + port = args.first - Resolv::DNS.open do |dns| - dns.timeouts = 5 + addresses = [] + begin + addresses = [IPAddr.new(host)] + rescue IPAddr::InvalidAddressError + Resolv::DNS.open do |dns| + dns.timeouts = 5 + addresses = dns.getaddresses(host).take(2) + end + end - addresses = dns.getaddresses(host).take(2) - time_slot = 10.0 / addresses.size + socks = [] + addr_by_socket = {} - addresses.each do |address| - begin - raise Mastodon::HostValidationError if PrivateAddressCheck.private_address?(IPAddr.new(address.to_s)) + addresses.each do |address| + begin + check_private_address(address) + + sock = ::Socket.new(address.is_a?(Resolv::IPv6) ? ::Socket::AF_INET6 : ::Socket::AF_INET, ::Socket::SOCK_STREAM, 0) + sockaddr = ::Socket.pack_sockaddr_in(port, address.to_s) + + sock.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1) - ::Timeout.timeout(time_slot, HTTP::TimeoutError) do - return super(address.to_s, *args) - end + sock.connect_nonblock(sockaddr) + + # If that hasn't raised an exception, we somehow managed to connect + # immediately, close pending sockets and return immediately + socks.each(&:close) + return sock + rescue IO::WaitWritable + socks << sock + addr_by_socket[sock] = sockaddr + rescue => e + outer_e = e + end + end + + until socks.empty? + _, available_socks, = IO.select(nil, socks, nil, Request::TIMEOUT[:connect]) + + if available_socks.nil? + socks.each(&:close) + raise HTTP::TimeoutError, "Connect timed out after #{Request::TIMEOUT[:connect]} seconds" + end + + available_socks.each do |sock| + socks.delete(sock) + + begin + sock.connect_nonblock(addr_by_socket[sock]) + rescue Errno::EISCONN rescue => e + sock.close outer_e = e + next end + + socks.each(&:close) + return sock end end @@ -198,11 +251,21 @@ class Request alias new open - def thru_hidden_service?(host) - Rails.configuration.x.access_to_hidden_service && /\.(onion|i2p)$/.match(host) + def check_private_address(address) + raise Mastodon::HostValidationError if PrivateAddressCheck.private_address?(IPAddr.new(address.to_s)) + end + end + end + + class ProxySocket < Socket + class << self + def check_private_address(_address) + # Accept connections to private addresses as HTTP proxies will usually + # be on local addresses + nil end end end - private_constant :ClientLimit, :Socket + private_constant :ClientLimit, :Socket, :ProxySocket end diff --git a/app/lib/request_pool.rb b/app/lib/request_pool.rb new file mode 100644 index 000000000..e5899a79a --- /dev/null +++ b/app/lib/request_pool.rb @@ -0,0 +1,114 @@ +# frozen_string_literal: true + +require_relative './connection_pool/shared_connection_pool' + +class RequestPool + def self.current + @current ||= RequestPool.new + end + + class Reaper + attr_reader :pool, :frequency + + def initialize(pool, frequency) + @pool = pool + @frequency = frequency + end + + def run + return unless frequency&.positive? + + Thread.new(frequency, pool) do |t, p| + loop do + sleep t + p.flush + end + end + end + end + + MAX_IDLE_TIME = 30 + WAIT_TIMEOUT = 5 + MAX_POOL_SIZE = ENV.fetch('MAX_REQUEST_POOL_SIZE', 512).to_i + + class Connection + attr_reader :site, :last_used_at, :created_at, :in_use, :dead, :fresh + + def initialize(site) + @site = site + @http_client = http_client + @last_used_at = nil + @created_at = current_time + @dead = false + @fresh = true + end + + def use + @last_used_at = current_time + @in_use = true + + retries = 0 + + begin + yield @http_client + rescue HTTP::ConnectionError + # It's possible the connection was closed, so let's + # try re-opening it once + + close + + if @fresh || retries.positive? + raise + else + @http_client = http_client + retries += 1 + retry + end + rescue StandardError + # If this connection raises errors of any kind, it's + # better if it gets reaped as soon as possible + + close + @dead = true + raise + end + ensure + @fresh = false + @in_use = false + end + + def seconds_idle + current_time - (@last_used_at || @created_at) + end + + def close + @http_client.close + end + + private + + def http_client + Request.http_client.persistent(@site, timeout: MAX_IDLE_TIME) + end + + def current_time + Process.clock_gettime(Process::CLOCK_MONOTONIC) + end + end + + def initialize + @pool = ConnectionPool::SharedConnectionPool.new(size: MAX_POOL_SIZE, timeout: WAIT_TIMEOUT) { |site| Connection.new(site) } + @reaper = Reaper.new(self, 30) + @reaper.run + end + + def with(site, &block) + @pool.with(site) do |connection| + ActiveSupport::Notifications.instrument('with.request_pool', miss: connection.fresh, host: connection.site) do + connection.use(&block) + end + end + end + + delegate :size, :flush, to: :@pool +end diff --git a/app/lib/sanitize_config.rb b/app/lib/sanitize_config.rb index e6e861eb9..9f5bf0125 100644 --- a/app/lib/sanitize_config.rb +++ b/app/lib/sanitize_config.rb @@ -39,7 +39,7 @@ class Sanitize end MASTODON_STRICT ||= freeze_config( - elements: %w(p br span a abbr del pre blockquote code b strong u sub i em h1 h2 h3 h4 h5 ul ol li), + elements: %w(p br span a abbr del pre blockquote code b strong u sub sup i em h1 h2 h3 h4 h5 ul ol li), attributes: { 'a' => %w(href rel class title), @@ -50,7 +50,7 @@ class Sanitize add_attributes: { 'a' => { - 'rel' => 'nofollow noopener tag', + 'rel' => 'nofollow noopener tag noreferrer', 'target' => '_blank', }, }, diff --git a/app/lib/search_query_parser.rb b/app/lib/search_query_parser.rb new file mode 100644 index 000000000..15956d4cf --- /dev/null +++ b/app/lib/search_query_parser.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class SearchQueryParser < Parslet::Parser + rule(:term) { match('[^\s":]').repeat(1).as(:term) } + rule(:quote) { str('"') } + rule(:colon) { str(':') } + rule(:space) { match('\s').repeat(1) } + rule(:operator) { (str('+') | str('-')).as(:operator) } + rule(:prefix) { (term >> colon).as(:prefix) } + rule(:shortcode) { (colon >> term >> colon.maybe).as(:shortcode) } + rule(:phrase) { (quote >> (term >> space.maybe).repeat >> quote).as(:phrase) } + rule(:clause) { (prefix.maybe >> operator.maybe >> (phrase | term | shortcode)).as(:clause) } + rule(:query) { (clause >> space.maybe).repeat.as(:query) } + root(:query) +end diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb new file mode 100644 index 000000000..6a299f59d --- /dev/null +++ b/app/lib/search_query_transformer.rb @@ -0,0 +1,88 @@ +# frozen_string_literal: true + +class SearchQueryTransformer < Parslet::Transform + class Query + attr_reader :should_clauses, :must_not_clauses, :must_clauses + + def initialize(clauses) + grouped = clauses.chunk(&:operator).to_h + @should_clauses = grouped.fetch(:should, []) + @must_not_clauses = grouped.fetch(:must_not, []) + @must_clauses = grouped.fetch(:must, []) + end + + def apply(search) + should_clauses.each { |clause| search = search.query.should(clause_to_query(clause)) } + must_clauses.each { |clause| search = search.query.must(clause_to_query(clause)) } + must_not_clauses.each { |clause| search = search.query.must_not(clause_to_query(clause)) } + search.query.minimum_should_match(1) + end + + private + + def clause_to_query(clause) + case clause + when TermClause + { multi_match: { type: 'most_fields', query: clause.term, fields: ['text', 'text.stemmed'] } } + when PhraseClause + { match_phrase: { text: { query: clause.phrase } } } + else + raise "Unexpected clause type: #{clause}" + end + end + end + + class Operator + class << self + def symbol(str) + case str + when '+' + :must + when '-' + :must_not + when nil + :should + else + raise "Unknown operator: #{str}" + end + end + end + end + + class TermClause + attr_reader :prefix, :operator, :term + + def initialize(prefix, operator, term) + @prefix = prefix + @operator = Operator.symbol(operator) + @term = term + end + end + + class PhraseClause + attr_reader :prefix, :operator, :phrase + + def initialize(prefix, operator, phrase) + @prefix = prefix + @operator = Operator.symbol(operator) + @phrase = phrase + end + end + + rule(clause: subtree(:clause)) do + prefix = clause[:prefix][:term].to_s if clause[:prefix] + operator = clause[:operator]&.to_s + + if clause[:term] + TermClause.new(prefix, operator, clause[:term].to_s) + elsif clause[:shortcode] + TermClause.new(prefix, operator, ":#{clause[:term]}:") + elsif clause[:phrase] + PhraseClause.new(prefix, operator, clause[:phrase].map { |p| p[:term].to_s }.join(' ')) + else + raise "Unexpected clause type: #{clause}" + end + end + + rule(query: sequence(:clauses)) { Query.new(clauses) } +end diff --git a/app/lib/settings/scoped_settings.rb b/app/lib/settings/scoped_settings.rb index 343996e8a..4d21e0de7 100644 --- a/app/lib/settings/scoped_settings.rb +++ b/app/lib/settings/scoped_settings.rb @@ -5,6 +5,7 @@ module Settings DEFAULTING_TO_UNSCOPED = %w( flavour skin + noindex ).freeze def initialize(object) diff --git a/app/lib/sidekiq_error_handler.rb b/app/lib/sidekiq_error_handler.rb index 23785cf05..8eb6b942d 100644 --- a/app/lib/sidekiq_error_handler.rb +++ b/app/lib/sidekiq_error_handler.rb @@ -3,9 +3,11 @@ class SidekiqErrorHandler def call(*) yield - rescue Mastodon::HostValidationError => e - Rails.logger.error "#{e.class}: #{e.message}" - Rails.logger.error e.backtrace.join("\n") + rescue Mastodon::HostValidationError # Do not retry + ensure + socket = Thread.current[:statsd_socket] + socket&.close + Thread.current[:statsd_socket] = nil end end diff --git a/app/lib/spam_check.rb b/app/lib/spam_check.rb new file mode 100644 index 000000000..5b40514fd --- /dev/null +++ b/app/lib/spam_check.rb @@ -0,0 +1,198 @@ +# frozen_string_literal: true + +class SpamCheck + include Redisable + include ActionView::Helpers::TextHelper + + # Threshold over which two Nilsimsa values are considered + # to refer to the same text + NILSIMSA_COMPARE_THRESHOLD = 95 + + # Nilsimsa doesn't work well on small inputs, so below + # this size, we check only for exact matches with MD5 + NILSIMSA_MIN_SIZE = 10 + + # How long to keep the trail of digests between updates, + # there is no reason to store it forever + EXPIRE_SET_AFTER = 1.week.seconds + + # How many digests to keep in an account's trail. If it's + # too small, spam could rotate around different message templates + MAX_TRAIL_SIZE = 10 + + # How many detected duplicates to allow through before + # considering the message as spam + THRESHOLD = 5 + + def initialize(status) + @account = status.account + @status = status + end + + def skip? + disabled? || already_flagged? || trusted? || no_unsolicited_mentions? || solicited_reply? + end + + def spam? + if insufficient_data? + false + elsif nilsimsa? + digests_over_threshold?('nilsimsa') { |_, other_digest| nilsimsa_compare_value(digest, other_digest) >= NILSIMSA_COMPARE_THRESHOLD } + else + digests_over_threshold?('md5') { |_, other_digest| other_digest == digest } + end + end + + def flag! + auto_report_status! + end + + def remember! + # The scores in sorted sets don't actually have enough bits to hold an exact + # value of our snowflake IDs, so we use it only for its ordering property. To + # get the correct status ID back, we have to save it in the string value + + redis.zadd(redis_key, @status.id, digest_with_algorithm) + redis.zremrangebyrank(redis_key, 0, -(MAX_TRAIL_SIZE + 1)) + redis.expire(redis_key, EXPIRE_SET_AFTER) + end + + def reset! + redis.del(redis_key) + end + + def hashable_text + return @hashable_text if defined?(@hashable_text) + + @hashable_text = @status.text + @hashable_text = remove_mentions(@hashable_text) + @hashable_text = strip_tags(@hashable_text) unless @status.local? + @hashable_text = normalize_unicode(@status.spoiler_text + ' ' + @hashable_text) + @hashable_text = remove_whitespace(@hashable_text) + end + + def insufficient_data? + hashable_text.blank? + end + + def digest + @digest ||= begin + if nilsimsa? + Nilsimsa.new(hashable_text).hexdigest + else + Digest::MD5.hexdigest(hashable_text) + end + end + end + + def digest_with_algorithm + if nilsimsa? + ['nilsimsa', digest, @status.id].join(':') + else + ['md5', digest, @status.id].join(':') + end + end + + class << self + def perform(status) + spam_check = new(status) + + return if spam_check.skip? + + if spam_check.spam? + spam_check.flag! + else + spam_check.remember! + end + end + end + + private + + def disabled? + !Setting.spam_check_enabled + end + + def remove_mentions(text) + return text.gsub(Account::MENTION_RE, '') if @status.local? + + Nokogiri::HTML.fragment(text).tap do |html| + mentions = @status.mentions.map { |mention| ActivityPub::TagManager.instance.url_for(mention.account) } + + html.traverse do |element| + element.unlink if element.name == 'a' && mentions.include?(element['href']) + end + end.to_s + end + + def normalize_unicode(text) + text.unicode_normalize(:nfkc).downcase + end + + def remove_whitespace(text) + text.gsub(/\s+/, ' ').strip + end + + def auto_report_status! + status_ids = Status.where(visibility: %i(public unlisted)).where(id: matching_status_ids).pluck(:id) + [@status.id] if @status.distributable? + ReportService.new.call(Account.representative, @account, status_ids: status_ids, comment: I18n.t('spam_check.spam_detected')) + end + + def already_flagged? + @account.silenced? || @account.targeted_reports.unresolved.where(account_id: -99).exists? + end + + def trusted? + @account.trust_level > Account::TRUST_LEVELS[:untrusted] + end + + def no_unsolicited_mentions? + @status.mentions.all? { |mention| mention.silent? || (!@account.local? && !mention.account.local?) || mention.account.following?(@account) } + end + + def solicited_reply? + !@status.thread.nil? && @status.thread.mentions.where(account: @account).exists? + end + + def nilsimsa_compare_value(first, second) + first = [first].pack('H*') + second = [second].pack('H*') + bits = 0 + + 0.upto(31) do |i| + bits += Nilsimsa::POPC[255 & (first[i].ord ^ second[i].ord)].ord + end + + 128 - bits # -128 <= Nilsimsa Compare Value <= 128 + end + + def nilsimsa? + hashable_text.size > NILSIMSA_MIN_SIZE + end + + def other_digests + redis.zrange(redis_key, 0, -1) + end + + def digests_over_threshold?(filter_algorithm) + other_digests.select do |record| + algorithm, other_digest, status_id = record.split(':') + + next unless algorithm == filter_algorithm + + yield algorithm, other_digest, status_id + end.size >= THRESHOLD + end + + def matching_status_ids + if nilsimsa? + other_digests.select { |record| record.start_with?('nilsimsa') && nilsimsa_compare_value(digest, record.split(':')[1]) >= NILSIMSA_COMPARE_THRESHOLD }.map { |record| record.split(':')[2] }.compact + else + other_digests.select { |record| record.start_with?('md5') && record.split(':')[1] == digest }.map { |record| record.split(':')[2] }.compact + end + end + + def redis_key + @redis_key ||= "spam_check:#{@account.id}" + end +end diff --git a/app/lib/status_finder.rb b/app/lib/status_finder.rb index 4d1aed297..22ced8bf8 100644 --- a/app/lib/status_finder.rb +++ b/app/lib/status_finder.rb @@ -13,8 +13,6 @@ class StatusFinder raise ActiveRecord::RecordNotFound unless TagManager.instance.local_url?(url) case recognized_params[:controller] - when 'stream_entries' - StreamEntry.find(recognized_params[:id]).status when 'statuses' Status.find(recognized_params[:id]) else diff --git a/app/lib/tag_manager.rb b/app/lib/tag_manager.rb index fb364cb98..c88cf4994 100644 --- a/app/lib/tag_manager.rb +++ b/app/lib/tag_manager.rb @@ -24,24 +24,16 @@ class TagManager def same_acct?(canonical, needle) return true if canonical.casecmp(needle).zero? + username, domain = needle.split('@') + local_domain?(domain) && canonical.casecmp(username).zero? end def local_url?(url) uri = Addressable::URI.parse(url).normalize domain = uri.host + (uri.port ? ":#{uri.port}" : '') - TagManager.instance.web_domain?(domain) - end - - def url_for(target) - return target.url if target.respond_to?(:local?) && !target.local? - case target.object_type - when :person - short_account_url(target) - when :note, :comment, :activity - short_account_status_url(target.account, target) - end + TagManager.instance.web_domain?(domain) end end diff --git a/app/lib/toc_generator.rb b/app/lib/toc_generator.rb new file mode 100644 index 000000000..0c8f766ca --- /dev/null +++ b/app/lib/toc_generator.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +class TOCGenerator + TARGET_ELEMENTS = %w(h1 h2 h3 h4 h5 h6).freeze + LISTED_ELEMENTS = %w(h2 h3).freeze + + class Section + attr_accessor :depth, :title, :children, :anchor + + def initialize(depth, title, anchor) + @depth = depth + @title = title + @children = [] + @anchor = anchor + end + + delegate :<<, to: :children + end + + def initialize(source_html) + @source_html = source_html + @processed = false + @target_html = '' + @headers = [] + @slugs = Hash.new { |h, k| h[k] = 0 } + end + + def html + parse_and_transform unless @processed + @target_html + end + + def toc + parse_and_transform unless @processed + @headers + end + + private + + def parse_and_transform + return if @source_html.blank? + + parsed_html = Nokogiri::HTML.fragment(@source_html) + + parsed_html.traverse do |node| + next unless TARGET_ELEMENTS.include?(node.name) + + anchor = node['id'] || node.text.parameterize.presence || 'sec' + @slugs[anchor] += 1 + anchor = "#{anchor}-#{@slugs[anchor]}" if @slugs[anchor] > 1 + + node['id'] = anchor + + next unless LISTED_ELEMENTS.include?(node.name) + + depth = node.name[1..-1] + latest_section = @headers.last + + if latest_section.nil? || latest_section.depth >= depth + @headers << Section.new(depth, node.text, anchor) + else + latest_section << Section.new(depth, node.text, anchor) + end + end + + @target_html = parsed_html.to_s + @processed = true + end +end diff --git a/app/lib/user_settings_decorator.rb b/app/lib/user_settings_decorator.rb index a95d09c5c..2f9cfe3ad 100644 --- a/app/lib/user_settings_decorator.rb +++ b/app/lib/user_settings_decorator.rb @@ -29,6 +29,7 @@ class UserSettingsDecorator user.settings['expand_spoilers'] = expand_spoilers_preference if change?('setting_expand_spoilers') user.settings['reduce_motion'] = reduce_motion_preference if change?('setting_reduce_motion') user.settings['system_font_ui'] = system_font_ui_preference if change?('setting_system_font_ui') + user.settings['system_emoji_font'] = system_emoji_font_preference if change?('setting_system_emoji_font') user.settings['noindex'] = noindex_preference if change?('setting_noindex') user.settings['hide_followers_count']= hide_followers_count_preference if change?('setting_hide_followers_count') user.settings['flavour'] = flavour_preference if change?('setting_flavour') @@ -38,6 +39,10 @@ class UserSettingsDecorator user.settings['show_application'] = show_application_preference if change?('setting_show_application') user.settings['advanced_layout'] = advanced_layout_preference if change?('setting_advanced_layout') user.settings['default_content_type']= default_content_type_preference if change?('setting_default_content_type') + user.settings['use_blurhash'] = use_blurhash_preference if change?('setting_use_blurhash') + user.settings['use_pending_items'] = use_pending_items_preference if change?('setting_use_pending_items') + user.settings['trends'] = trends_preference if change?('setting_trends') + user.settings['crop_images'] = crop_images_preference if change?('setting_crop_images') end def merged_notification_emails @@ -76,6 +81,10 @@ class UserSettingsDecorator boolean_cast_setting 'setting_system_font_ui' end + def system_emoji_font_preference + boolean_cast_setting 'setting_system_emoji_font' + end + def auto_play_gif_preference boolean_cast_setting 'setting_auto_play_gif' end @@ -132,6 +141,22 @@ class UserSettingsDecorator settings['setting_default_content_type'] end + def use_blurhash_preference + boolean_cast_setting 'setting_use_blurhash' + end + + def use_pending_items_preference + boolean_cast_setting 'setting_use_pending_items' + end + + def trends_preference + boolean_cast_setting 'setting_trends' + end + + def crop_images_preference + boolean_cast_setting 'setting_crop_images' + end + def boolean_cast_setting(key) ActiveModel::Type::Boolean.new.cast(settings[key]) end diff --git a/app/lib/webfinger_resource.rb b/app/lib/webfinger_resource.rb index a54a702a2..22d78874a 100644 --- a/app/lib/webfinger_resource.rb +++ b/app/lib/webfinger_resource.rb @@ -23,11 +23,17 @@ class WebfingerResource def username_from_url if account_show_page? path_params[:username] + elsif instance_actor_page? + Rails.configuration.x.local_domain else raise ActiveRecord::RecordNotFound end end + def instance_actor_page? + path_params[:controller] == 'instance_actors' + end + def account_show_page? path_params[:controller] == 'accounts' && path_params[:action] == 'show' end diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index db154cad5..11fd09e30 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -3,7 +3,7 @@ class AdminMailer < ApplicationMailer layout 'plain_mailer' - helper :stream_entries + helper :accounts def new_report(recipient, report) @report = report @@ -24,4 +24,14 @@ class AdminMailer < ApplicationMailer mail to: @me.user_email, subject: I18n.t('admin_mailer.new_pending_account.subject', instance: @instance, username: @account.username) end end + + def new_trending_tag(recipient, tag) + @tag = tag + @me = recipient + @instance = Rails.configuration.x.local_domain + + locale_for_account(@me) do + mail to: @me.user_email, subject: I18n.t('admin_mailer.new_trending_tag.subject', instance: @instance, name: @tag.name) + end + end end diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 66fa337c1..9d8a7886c 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -1,7 +1,8 @@ # frozen_string_literal: true class NotificationMailer < ApplicationMailer - helper :stream_entries + helper :accounts + helper :statuses add_template_helper RoutingHelper diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 8f3a4ab3a..c30bec80b 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -3,6 +3,7 @@ class UserMailer < Devise::Mailer layout 'mailer' + helper :accounts helper :application helper :instance @@ -56,6 +57,39 @@ class UserMailer < Devise::Mailer end end + def two_factor_enabled(user, **) + @resource = user + @instance = Rails.configuration.x.local_domain + + return if @resource.disabled? + + I18n.with_locale(@resource.locale || I18n.default_locale) do + mail to: @resource.email, subject: I18n.t('devise.mailer.two_factor_enabled.subject') + end + end + + def two_factor_disabled(user, **) + @resource = user + @instance = Rails.configuration.x.local_domain + + return if @resource.disabled? + + I18n.with_locale(@resource.locale || I18n.default_locale) do + mail to: @resource.email, subject: I18n.t('devise.mailer.two_factor_disabled.subject') + end + end + + def two_factor_recovery_codes_changed(user, **) + @resource = user + @instance = Rails.configuration.x.local_domain + + return if @resource.disabled? + + I18n.with_locale(@resource.locale || I18n.default_locale) do + mail to: @resource.email, subject: I18n.t('devise.mailer.two_factor_recovery_codes_changed.subject') + end + end + def welcome(user) @resource = user @instance = Rails.configuration.x.local_domain @@ -79,10 +113,11 @@ class UserMailer < Devise::Mailer end end - def warning(user, warning) + def warning(user, warning, status_ids = nil) @resource = user @warning = warning @instance = Rails.configuration.x.local_domain + @statuses = Status.where(id: status_ids).includes(:account) if status_ids.is_a?(Array) I18n.with_locale(@resource.locale || I18n.default_locale) do mail to: @resource.email, diff --git a/app/models/account.rb b/app/models/account.rb index 520b183e8..25cde6d6c 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -45,12 +45,12 @@ # also_known_as :string is an Array # silenced_at :datetime # suspended_at :datetime +# trust_level :integer # class Account < ApplicationRecord USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[a-z0-9\.\-]+[a-z0-9]+)?)/i - MIN_FOLLOWERS_DISCOVERY = 10 include AccountAssociations include AccountAvatar @@ -66,6 +66,11 @@ class Account < ApplicationRecord MAX_NOTE_LENGTH = (ENV['MAX_BIO_CHARS'] || 500).to_i MAX_FIELDS = (ENV['MAX_PROFILE_FIELDS'] || 4).to_i + TRUST_LEVELS = { + untrusted: 0, + trusted: 1, + }.freeze + enum protocol: [:ostatus, :activitypub] validates :username, presence: true @@ -75,7 +80,7 @@ class Account < ApplicationRecord validates :username, format: { with: /\A#{USERNAME_RE}\z/i }, if: -> { !local? && will_save_change_to_username? } # Local user validations - validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? } + validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' } validates_with UniqueUsernameValidator, if: -> { local? && will_save_change_to_username? } validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? } validates :display_name, length: { maximum: MAX_DISPLAY_NAME_LENGTH }, if: -> { local? && will_save_change_to_display_name? } @@ -92,16 +97,20 @@ class Account < ApplicationRecord scope :without_silenced, -> { where(silenced_at: nil) } scope :recent, -> { reorder(id: :desc) } scope :bots, -> { where(actor_type: %w(Application Service)) } + scope :groups, -> { where(actor_type: 'Group') } scope :alphabetic, -> { order(domain: :asc, username: :asc) } scope :by_domain_accounts, -> { group(:domain).select(:domain, 'COUNT(*) AS accounts_count').order('accounts_count desc') } scope :matches_username, ->(value) { where(arel_table[:username].matches("#{value}%")) } scope :matches_display_name, ->(value) { where(arel_table[:display_name].matches("#{value}%")) } scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } scope :searchable, -> { without_suspended.where(moved_to_account_id: nil) } - scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).joins(:account_stat).where(AccountStat.arel_table[:followers_count].gteq(MIN_FOLLOWERS_DISCOVERY)) } + scope :discoverable, -> { searchable.without_silenced.where(discoverable: true).left_outer_joins(:account_stat) } scope :tagged_with, ->(tag) { joins(:accounts_tags).where(accounts_tags: { tag_id: tag }) } - scope :by_recent_status, -> { order(Arel.sql('(case when account_stats.last_status_at is null then 1 else 0 end) asc, account_stats.last_status_at desc')) } + scope :by_recent_status, -> { order(Arel.sql('(case when account_stats.last_status_at is null then 1 else 0 end) asc, account_stats.last_status_at desc, accounts.id desc')) } scope :popular, -> { order('account_stats.followers_count desc') } + scope :by_domain_and_subdomains, ->(domain) { where(domain: domain).or(where(arel_table[:domain].matches('%.' + domain))) } + scope :not_excluded_by_account, ->(account) { where.not(id: account.excluded_from_timeline_account_ids) } + scope :not_domain_blocked_by_account, ->(account) { where(arel_table[:domain].eq(nil).or(arel_table[:domain].not_in(account.excluded_from_timeline_domains))) } delegate :email, :unconfirmed_email, @@ -110,6 +119,9 @@ class Account < ApplicationRecord :confirmed?, :approved?, :pending?, + :disabled?, + :unconfirmed_or_pending?, + :role, :admin?, :moderator?, :staff?, @@ -122,6 +134,8 @@ class Account < ApplicationRecord delegate :chosen_languages, to: :user, prefix: false, allow_nil: true + update_index('accounts#account', :self) + def local? domain.nil? end @@ -134,12 +148,22 @@ class Account < ApplicationRecord %w(Application Service).include? actor_type end + def instance_actor? + id == -99 + end + alias bot bot? def bot=(val) self.actor_type = ActiveModel::Type::Boolean.new.cast(val) ? 'Service' : 'Person' end + def group? + actor_type == 'Group' + end + + alias group group? + def acct local? ? username : "#{username}@#{domain}" end @@ -160,21 +184,27 @@ class Account < ApplicationRecord subscription_expires_at.present? end + def searchable? + !(suspended? || moved?) + end + def possibly_stale? last_webfingered_at.nil? || last_webfingered_at <= 1.day.ago end + def trust_level + self[:trust_level] || 0 + end + def refresh! - return if local? - ResolveAccountService.new.call(acct) + ResolveAccountService.new.call(acct) unless local? end def silenced? silenced_at.present? end - def silence!(date = nil) - date ||= Time.now.utc + def silence!(date = Time.now.utc) update!(silenced_at: date) end @@ -186,8 +216,7 @@ class Account < ApplicationRecord suspended_at.present? end - def suspend!(date = nil) - date ||= Time.now.utc + def suspend!(date = Time.now.utc) transaction do user&.disable! if local? update!(suspended_at: date) @@ -217,17 +246,7 @@ class Account < ApplicationRecord end def tags_as_strings=(tag_names) - tag_names.map! { |name| name.mb_chars.downcase.to_s } - tag_names.uniq! - - # Existing hashtags - hashtags_map = Tag.where(name: tag_names).each_with_object({}) { |tag, h| h[tag.name] = tag } - - # Initialize not yet existing hashtags - tag_names.each do |name| - next if hashtags_map.key?(name) - hashtags_map[name] = Tag.new(name: name) - end + hashtags_map = Tag.find_or_create_by_names(tag_names).each_with_object({}) { |tag, h| h[tag.name] = tag } # Remove hashtags that are to be deleted tags.each do |tag| @@ -293,21 +312,6 @@ class Account < ApplicationRecord self.fields = tmp end - def magic_key - modulus, exponent = [keypair.public_key.n, keypair.public_key.e].map do |component| - result = [] - - until component.zero? - result << [component % 256].pack('C') - component >>= 8 - end - - result.reverse.join - end - - (['RSA'] + [modulus, exponent].map { |n| Base64.urlsafe_encode64(n) }).join('.') - end - def subscription(webhook_url) @subscription ||= OStatus2::Subscription.new(remote_url, secret: secret, webhook: webhook_url, hub: hub_url) end @@ -315,10 +319,9 @@ class Account < ApplicationRecord def save_with_optional_media! save! rescue ActiveRecord::RecordInvalid - self.avatar = nil - self.header = nil - self[:avatar_remote_url] = '' - self[:header_remote_url] = '' + self.avatar = nil + self.header = nil + save! end @@ -435,12 +438,14 @@ class Account < ApplicationRecord SELECT target_account_id FROM follows WHERE account_id = ? + UNION ALL + SELECT ? ) SELECT accounts.*, (count(f.id) + 1) * ts_rank_cd(#{textsearch}, #{query}, 32) AS rank FROM accounts - LEFT OUTER JOIN follows AS f ON (accounts.id = f.account_id AND f.target_account_id = ?) OR (accounts.id = f.target_account_id AND f.account_id = ?) + LEFT OUTER JOIN follows AS f ON (accounts.id = f.account_id AND f.target_account_id = ?) WHERE accounts.id IN (SELECT * FROM first_degree) AND #{query} @@ #{textsearch} AND accounts.suspended_at IS NULL @@ -505,7 +510,7 @@ class Account < ApplicationRecord end def generate_keys - return unless local? && !Rails.env.test? + return unless local? && private_key.blank? && public_key.blank? keypair = OpenSSL::PKey::RSA.new(2048) self.private_key = keypair.to_pem @@ -519,7 +524,7 @@ class Account < ApplicationRecord end def emojifiable_text - [note, display_name, fields.map(&:value)].join(' ') + [note, display_name, fields.map(&:name), fields.map(&:value)].join(' ') end def clean_feed_manager diff --git a/app/models/account_alias.rb b/app/models/account_alias.rb new file mode 100644 index 000000000..66f8ce409 --- /dev/null +++ b/app/models/account_alias.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: account_aliases +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) +# acct :string default(""), not null +# uri :string default(""), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class AccountAlias < ApplicationRecord + belongs_to :account + + validates :acct, presence: true, domain: { acct: true } + validates :uri, presence: true + validates :uri, uniqueness: { scope: :account_id } + + before_validation :set_uri + after_create :add_to_account + after_destroy :remove_from_account + + def acct=(val) + val = val.to_s.strip + super(val.start_with?('@') ? val[1..-1] : val) + end + + private + + def set_uri + target_account = ResolveAccountService.new.call(acct) + self.uri = ActivityPub::TagManager.instance.uri_for(target_account) unless target_account.nil? + rescue Goldfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error + # Validation will take care of it + end + + def add_to_account + account.update(also_known_as: account.also_known_as + [uri]) + end + + def remove_from_account + account.update(also_known_as: account.also_known_as.reject { |x| x == uri }) + end +end diff --git a/app/models/account_domain_block.rb b/app/models/account_domain_block.rb index 7c0d60379..3aaffde9a 100644 --- a/app/models/account_domain_block.rb +++ b/app/models/account_domain_block.rb @@ -15,7 +15,7 @@ class AccountDomainBlock < ApplicationRecord include DomainNormalizable belongs_to :account - validates :domain, presence: true, uniqueness: { scope: :account_id } + validates :domain, presence: true, uniqueness: { scope: :account_id }, domain: true after_commit :remove_blocking_cache after_commit :remove_relationship_cache diff --git a/app/models/account_filter.rb b/app/models/account_filter.rb index d2503100c..c3b1fe08d 100644 --- a/app/models/account_filter.rb +++ b/app/models/account_filter.rb @@ -37,6 +37,8 @@ class AccountFilter Account.without_suspended when 'pending' accounts_with_users.merge User.pending + when 'disabled' + accounts_with_users.merge User.disabled when 'silenced' Account.silenced when 'suspended' diff --git a/app/models/account_migration.rb b/app/models/account_migration.rb new file mode 100644 index 000000000..681b5b2cd --- /dev/null +++ b/app/models/account_migration.rb @@ -0,0 +1,78 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: account_migrations +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) +# acct :string default(""), not null +# followers_count :bigint(8) default(0), not null +# target_account_id :bigint(8) +# created_at :datetime not null +# updated_at :datetime not null +# + +class AccountMigration < ApplicationRecord + COOLDOWN_PERIOD = 30.days.freeze + + belongs_to :account + belongs_to :target_account, class_name: 'Account' + + before_validation :set_target_account + before_validation :set_followers_count + + validates :acct, presence: true, domain: { acct: true } + validate :validate_migration_cooldown + validate :validate_target_account + + scope :within_cooldown, ->(now = Time.now.utc) { where(arel_table[:created_at].gteq(now - COOLDOWN_PERIOD)) } + + attr_accessor :current_password, :current_username + + def save_with_challenge(current_user) + if current_user.encrypted_password.present? + errors.add(:current_password, :invalid) unless current_user.valid_password?(current_password) + else + errors.add(:current_username, :invalid) unless account.username == current_username + end + + return false unless errors.empty? + + save + end + + def cooldown_at + created_at + COOLDOWN_PERIOD + end + + def acct=(val) + super(val.to_s.strip.gsub(/\A@/, '')) + end + + private + + def set_target_account + self.target_account = ResolveAccountService.new.call(acct) + rescue Goldfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error + # Validation will take care of it + end + + def set_followers_count + self.followers_count = account.followers_count + end + + def validate_target_account + if target_account.nil? + errors.add(:acct, I18n.t('migrations.errors.not_found')) + else + errors.add(:acct, I18n.t('migrations.errors.missing_also_known_as')) unless target_account.also_known_as.include?(ActivityPub::TagManager.instance.uri_for(account)) + errors.add(:acct, I18n.t('migrations.errors.already_moved')) if account.moved_to_account_id.present? && account.moved_to_account_id == target_account.id + errors.add(:acct, I18n.t('migrations.errors.move_to_self')) if account.id == target_account.id + end + end + + def validate_migration_cooldown + errors.add(:base, I18n.t('migrations.errors.on_cooldown')) if account.migrations.within_cooldown.exists? + end +end diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb index 9813aa84f..c84e4217c 100644 --- a/app/models/account_stat.rb +++ b/app/models/account_stat.rb @@ -11,17 +11,36 @@ # created_at :datetime not null # updated_at :datetime not null # last_status_at :datetime +# lock_version :integer default(0), not null # class AccountStat < ApplicationRecord belongs_to :account, inverse_of: :account_stat + update_index('accounts#account', :account) + def increment_count!(key) update(attributes_for_increment(key)) + rescue ActiveRecord::StaleObjectError + begin + reload_with_id + rescue ActiveRecord::RecordNotFound + # Nothing to do + else + retry + end end def decrement_count!(key) update(key => [public_send(key) - 1, 0].max) + rescue ActiveRecord::StaleObjectError + begin + reload_with_id + rescue ActiveRecord::RecordNotFound + # Nothing to do + else + retry + end end private @@ -31,4 +50,9 @@ class AccountStat < ApplicationRecord attrs[:last_status_at] = Time.now.utc if key == :statuses_count attrs end + + def reload_with_id + self.id = find_by!(account: account).id if new_record? + reload + end end diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb index 84c3f880d..e9da003a3 100644 --- a/app/models/admin/account_action.rb +++ b/app/models/admin/account_action.rb @@ -17,10 +17,17 @@ class Admin::AccountAction :type, :text, :report_id, - :warning_preset_id, - :send_email_notification + :warning_preset_id - attr_reader :warning + attr_reader :warning, :send_email_notification, :include_statuses + + def send_email_notification=(value) + @send_email_notification = ActiveModel::Type::Boolean.new.cast(value) + end + + def include_statuses=(value) + @include_statuses = ActiveModel::Type::Boolean.new.cast(value) + end def save! ApplicationRecord.transaction do @@ -28,8 +35,9 @@ class Admin::AccountAction process_warning! end - queue_email! + process_email! process_reports! + process_queue! end def report @@ -54,6 +62,8 @@ class Admin::AccountAction def process_action! case type + when 'none' + handle_resolve! when 'disable' handle_disable! when 'silence' @@ -75,19 +85,33 @@ class Admin::AccountAction # A log entry is only interesting if the warning contains # custom text from someone. Otherwise it's just noise. + log_action(:create, warning) if warning.text.present? end def process_reports! - return if report_id.blank? + # If we're doing "mark as resolved" on a single report, + # then we want to keep other reports open in case they + # contain new actionable information. + # + # Otherwise, we will mark all unresolved reports about + # the account as resolved. - authorize(report, :update?) + reports.each { |report| authorize(report, :update?) } - if type == 'none' + reports.each do |report| log_action(:resolve, report) report.resolve!(current_account) - else - Report.where(target_account: target_account).unresolved.update_all(action_taken: true, action_taken_by_account_id: current_account.id) + end + end + + def handle_resolve! + if with_report? && report.account_id == -99 && target_account.trust_level == Account::TRUST_LEVELS[:untrusted] + # This is an automated report and it is being dismissed, so it's + # a false positive, in which case update the account's trust level + # to prevent further spam checks + + target_account.update(trust_level: Account::TRUST_LEVELS[:trusted]) end end @@ -107,7 +131,6 @@ class Admin::AccountAction authorize(target_account, :suspend?) log_action(:suspend, target_account) target_account.suspend! - queue_suspension_worker! end def text_for_warning @@ -118,16 +141,32 @@ class Admin::AccountAction Admin::SuspensionWorker.perform_async(target_account.id) end - def queue_email! - return unless warnable? + def process_queue! + queue_suspension_worker! if type == 'suspend' + end - UserMailer.warning(target_account.user, warning).deliver_later! + def process_email! + UserMailer.warning(target_account.user, warning, status_ids).deliver_now! if warnable? end def warnable? send_email_notification && target_account.local? end + def status_ids + @report.status_ids if @report && include_statuses + end + + def reports + @reports ||= begin + if type == 'none' && with_report? + [report] + else + Report.where(target_account: target_account).unresolved + end + end + end + def warning_preset @warning_preset ||= AccountWarningPreset.find(warning_preset_id) if warning_preset_id.present? end diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 83134d41a..5d7d3a096 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -2,5 +2,22 @@ class ApplicationRecord < ActiveRecord::Base self.abstract_class = true + include Remotable + + class << self + def update_index(_type_name, *_args, &_block) + super if Chewy.enabled? + end + end + + def boolean_with_default(key, default_value) + value = attributes[key] + + if value.nil? + default_value + else + value + end + end end diff --git a/app/models/bookmark.rb b/app/models/bookmark.rb index 916261a17..01dc48ee7 100644 --- a/app/models/bookmark.rb +++ b/app/models/bookmark.rb @@ -3,11 +3,11 @@ # # Table name: bookmarks # -# id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# status_id :bigint(8) not null +# id :integer not null, primary key # created_at :datetime not null # updated_at :datetime not null +# account_id :integer not null +# status_id :integer not null # class Bookmark < ApplicationRecord diff --git a/app/models/concerns/account_associations.rb b/app/models/concerns/account_associations.rb index ecccaf35e..499edbf4e 100644 --- a/app/models/concerns/account_associations.rb +++ b/app/models/concerns/account_associations.rb @@ -11,7 +11,6 @@ module AccountAssociations has_many :identity_proofs, class_name: 'AccountIdentityProof', dependent: :destroy, inverse_of: :account # Timelines - has_many :stream_entries, inverse_of: :account, dependent: :destroy has_many :statuses, inverse_of: :account, dependent: :destroy has_many :favourites, inverse_of: :account, dependent: :destroy has_many :bookmarks, inverse_of: :account, dependent: :destroy @@ -32,9 +31,6 @@ module AccountAssociations has_many :media_attachments, dependent: :destroy has_many :polls, dependent: :destroy - # PuSH subscriptions - has_many :subscriptions, dependent: :destroy - # Report relationships has_many :reports, dependent: :destroy, inverse_of: :account has_many :targeted_reports, class_name: 'Report', foreign_key: :target_account_id, dependent: :destroy, inverse_of: :target_account @@ -57,6 +53,8 @@ module AccountAssociations # Account migrations belongs_to :moved_to_account, class_name: 'Account', optional: true + has_many :migrations, class_name: 'AccountMigration', dependent: :destroy, inverse_of: :account + has_many :aliases, class_name: 'AccountAlias', dependent: :destroy, inverse_of: :account # Hashtags has_and_belongs_to_many :tags diff --git a/app/models/concerns/account_avatar.rb b/app/models/concerns/account_avatar.rb index 5fff3ef5d..2d5ebfca3 100644 --- a/app/models/concerns/account_avatar.rb +++ b/app/models/concerns/account_avatar.rb @@ -3,7 +3,7 @@ module AccountAvatar extend ActiveSupport::Concern - IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze + IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze LIMIT = 2.megabytes class_methods do diff --git a/app/models/concerns/account_counters.rb b/app/models/concerns/account_counters.rb index 3581df8dd..6e25e1905 100644 --- a/app/models/concerns/account_counters.rb +++ b/app/models/concerns/account_counters.rb @@ -26,7 +26,8 @@ module AccountCounters private def save_account_stat - return unless account_stat&.changed? + return unless association(:account_stat).loaded? && account_stat&.changed? + account_stat.save end end diff --git a/app/models/concerns/account_finder_concern.rb b/app/models/concerns/account_finder_concern.rb index ccd7bfa12..a54c2174d 100644 --- a/app/models/concerns/account_finder_concern.rb +++ b/app/models/concerns/account_finder_concern.rb @@ -13,7 +13,7 @@ module AccountFinderConcern end def representative - find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')) || Account.local.without_suspended.first + Account.find(-99) end def find_local(username) diff --git a/app/models/concerns/account_header.rb b/app/models/concerns/account_header.rb index a748fdff7..067e166eb 100644 --- a/app/models/concerns/account_header.rb +++ b/app/models/concerns/account_header.rb @@ -3,7 +3,7 @@ module AccountHeader extend ActiveSupport::Concern - IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze + IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze LIMIT = 2.megabytes MAX_PIXELS = 750_000 # 1500x500px diff --git a/app/models/concerns/attachmentable.rb b/app/models/concerns/attachmentable.rb index de4cf8775..3bbc6453c 100644 --- a/app/models/concerns/attachmentable.rb +++ b/app/models/concerns/attachmentable.rb @@ -1,19 +1,31 @@ # frozen_string_literal: true -require 'mime/types' +require 'mime/types/columnar' module Attachmentable extend ActiveSupport::Concern MAX_MATRIX_LIMIT = 16_777_216 # 4096x4096px or approx. 16MB + GIF_MATRIX_LIMIT = 921_600 # 1280x720px included do before_post_process :set_file_extensions before_post_process :check_image_dimensions + before_post_process :set_file_content_type end private + def set_file_content_type + self.class.attachment_definitions.each_key do |attachment_name| + attachment = send(attachment_name) + + next if attachment.blank? || attachment.queued_for_write[:original].blank? + + attachment.instance_write :content_type, calculated_content_type(attachment) + end + end + def set_file_extensions self.class.attachment_definitions.each_key do |attachment_name| attachment = send(attachment_name) @@ -31,8 +43,9 @@ module Attachmentable next if attachment.blank? || !/image.*/.match?(attachment.content_type) || attachment.queued_for_write[:original].blank? width, height = FastImage.size(attachment.queued_for_write[:original].path) + matrix_limit = attachment.content_type == 'image/gif' ? GIF_MATRIX_LIMIT : MAX_MATRIX_LIMIT - raise Mastodon::DimensionsValidationError, "#{width}x#{height} images are not supported" if width.present? && height.present? && (width * height >= MAX_MATRIX_LIMIT) + raise Mastodon::DimensionsValidationError, "#{width}x#{height} images are not supported" if width.present? && height.present? && (width * height > matrix_limit) end end @@ -47,4 +60,12 @@ module Attachmentable extension end + + def calculated_content_type(attachment) + content_type = Paperclip.run('file', '-b --mime :file', file: attachment.queued_for_write[:original].path).split(/[:;\s]+/).first.chomp + content_type = 'video/mp4' if content_type == 'video/x-m4v' + content_type + rescue Terrapin::CommandLineError + '' + end end diff --git a/app/models/concerns/domain_normalizable.rb b/app/models/concerns/domain_normalizable.rb index fb84058fc..c00b3142f 100644 --- a/app/models/concerns/domain_normalizable.rb +++ b/app/models/concerns/domain_normalizable.rb @@ -4,7 +4,7 @@ module DomainNormalizable extend ActiveSupport::Concern included do - before_validation :normalize_domain + before_save :normalize_domain end private diff --git a/app/models/concerns/ldap_authenticable.rb b/app/models/concerns/ldap_authenticable.rb index 84ff84c4b..e3f94bb6c 100644 --- a/app/models/concerns/ldap_authenticable.rb +++ b/app/models/concerns/ldap_authenticable.rb @@ -3,24 +3,58 @@ module LdapAuthenticable extend ActiveSupport::Concern - def ldap_setup(_attributes) - self.confirmed_at = Time.now.utc - self.admin = false - self.external = true + class_methods do + def authenticate_with_ldap(params = {}) + ldap = Net::LDAP.new(ldap_options) + filter = format(Devise.ldap_search_filter, uid: Devise.ldap_uid, mail: Devise.ldap_mail, email: params[:email]) - save! - end + if (user_info = ldap.bind_as(base: Devise.ldap_base, filter: filter, password: params[:password])) + ldap_get_user(user_info.first) + end + end - class_methods do def ldap_get_user(attributes = {}) - resource = joins(:account).find_by(accounts: { username: attributes[Devise.ldap_uid.to_sym].first }) + safe_username = attributes[Devise.ldap_uid.to_sym].first + if Devise.ldap_uid_conversion_enabled + keys = Regexp.union(Devise.ldap_uid_conversion_search.chars) + replacement = Devise.ldap_uid_conversion_replace + + safe_username = safe_username.gsub(keys, replacement) + end + + resource = joins(:account).find_by(accounts: { username: safe_username }) if resource.blank? - resource = new(email: attributes[:mail].first, agreement: true, account_attributes: { username: attributes[Devise.ldap_uid.to_sym].first }) - resource.ldap_setup(attributes) + resource = new(email: attributes[Devise.ldap_mail.to_sym].first, agreement: true, account_attributes: { username: safe_username }, admin: false, external: true, confirmed_at: Time.now.utc) + resource.save! end resource end + + def ldap_options + opts = { + host: Devise.ldap_host, + port: Devise.ldap_port, + base: Devise.ldap_base, + + auth: { + method: :simple, + username: Devise.ldap_bind_dn, + password: Devise.ldap_password, + }, + + connect_timeout: 10, + } + + if [:simple_tls, :start_tls].include?(Devise.ldap_method) + opts[:encryption] = { + method: Devise.ldap_method, + tls_options: OpenSSL::SSL::SSLContext::DEFAULT_PARAMS.tap { |options| options[:verify_mode] = OpenSSL::SSL::VERIFY_NONE if Devise.ldap_tls_no_verify }, + } + end + + opts + end end end diff --git a/app/models/concerns/omniauthable.rb b/app/models/concerns/omniauthable.rb index 283033083..960784222 100644 --- a/app/models/concerns/omniauthable.rb +++ b/app/models/concerns/omniauthable.rb @@ -4,7 +4,7 @@ module Omniauthable extend ActiveSupport::Concern TEMP_EMAIL_PREFIX = 'change@me' - TEMP_EMAIL_REGEX = /\Achange@me/ + TEMP_EMAIL_REGEX = /\A#{TEMP_EMAIL_PREFIX}/.freeze included do devise :omniauthable @@ -28,8 +28,8 @@ module Omniauthable # to prevent the identity being locked with accidentally created accounts. # Note that this may leave zombie accounts (with no associated identity) which # can be cleaned up at a later date. - user = signed_in_resource || identity.user - user = create_for_oauth(auth) if user.nil? + user = signed_in_resource || identity.user + user ||= create_for_oauth(auth) if identity.user.nil? identity.user = user @@ -43,9 +43,20 @@ module Omniauthable # Check if the user exists with provided email if the provider gives us a # verified email. If no verified email was provided or the user already # exists, we assign a temporary email and ask the user to verify it on - # the next step via Auth::ConfirmationsController.finish_signup + # the next step via Auth::SetupController.show + + strategy = Devise.omniauth_configs[auth.provider.to_sym].strategy + assume_verified = strategy&.security&.assume_email_is_verified + email_is_verified = auth.info.verified || auth.info.verified_email || assume_verified + email = auth.info.verified_email || auth.info.email + email = nil unless email_is_verified + + user = User.find_by(email: email) if email_is_verified + + return user unless user.nil? + + user = User.new(user_params_from_auth(email, auth)) - user = User.new(user_params_from_auth(auth)) user.account.avatar_remote_url = auth.info.image if auth.info.image =~ /\A#{URI.regexp(%w(http https))}\z/ user.skip_confirmation! user.save! @@ -54,14 +65,7 @@ module Omniauthable private - def user_params_from_auth(auth) - strategy = Devise.omniauth_configs[auth.provider.to_sym].strategy - assume_verified = strategy.try(:security).try(:assume_email_is_verified) - email_is_verified = auth.info.verified || auth.info.verified_email || assume_verified - email = auth.info.verified_email || auth.info.email - email = email_is_verified && !User.exists?(email: auth.info.email) && email - display_name = auth.info.full_name || [auth.info.first_name, auth.info.last_name].join(' ') - + def user_params_from_auth(email, auth) { email: email || "#{TEMP_EMAIL_PREFIX}-#{auth.uid}-#{auth.provider}.com", password: Devise.friendly_token[0, 20], @@ -69,7 +73,7 @@ module Omniauthable external: true, account_attributes: { username: ensure_unique_username(auth.uid), - display_name: display_name, + display_name: auth.info.full_name || [auth.info.first_name, auth.info.last_name].join(' '), }, } end diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb index 9372a963b..b7a476c87 100644 --- a/app/models/concerns/remotable.rb +++ b/app/models/concerns/remotable.rb @@ -4,7 +4,7 @@ module Remotable extend ActiveSupport::Concern class_methods do - def remotable_attachment(attachment_name, limit) + def remotable_attachment(attachment_name, limit, suppress_errors: true) attribute_name = "#{attachment_name}_remote_url".to_sym method_name = "#{attribute_name}=".to_sym alt_method_name = "reset_#{attachment_name}!".to_sym @@ -18,11 +18,11 @@ module Remotable return end - return if !%w(http https).include?(parsed_url.scheme) || parsed_url.host.blank? || self[attribute_name] == url + return if !%w(http https).include?(parsed_url.scheme) || parsed_url.host.blank? || (self[attribute_name] == url && send("#{attachment_name}_file_name").present?) begin Request.new(:get, url).perform do |response| - next if response.code != 200 + raise Mastodon::UnexpectedResponseError, response unless (200...300).cover?(response.code) content_type = parse_content_type(response.headers.get('content-type').last) extname = detect_extname_from_content_type(content_type) @@ -41,11 +41,11 @@ module Remotable self[attribute_name] = url if has_attribute?(attribute_name) end - rescue HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError, Paperclip::Errors::NotIdentifiedByImageMagickError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e + rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError => e + Rails.logger.debug "Error fetching remote #{attachment_name}: #{e}" + raise e unless suppress_errors + rescue Paperclip::Errors::NotIdentifiedByImageMagickError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Paperclip::Error, Mastodon::DimensionsValidationError => e Rails.logger.debug "Error fetching remote #{attachment_name}: #{e}" - nil - rescue Paperclip::Error, Mastodon::DimensionsValidationError => e - Rails.logger.debug "Error processing remote #{attachment_name}: #{e}" nil end end diff --git a/app/models/concerns/streamable.rb b/app/models/concerns/streamable.rb deleted file mode 100644 index 7c9edb8ef..000000000 --- a/app/models/concerns/streamable.rb +++ /dev/null @@ -1,43 +0,0 @@ -# frozen_string_literal: true - -module Streamable - extend ActiveSupport::Concern - - included do - has_one :stream_entry, as: :activity - - after_create do - account.stream_entries.create!(activity: self, hidden: hidden?) if needs_stream_entry? - end - end - - def title - super - end - - def content - title - end - - def target - super - end - - def object_type - :activity - end - - def thread - super - end - - def hidden? - false - end - - private - - def needs_stream_entry? - account.local? - end -end diff --git a/app/models/concerns/user_roles.rb b/app/models/concerns/user_roles.rb index 58dffdc46..a42b4a172 100644 --- a/app/models/concerns/user_roles.rb +++ b/app/models/concerns/user_roles.rb @@ -13,6 +13,20 @@ module UserRoles admin? || moderator? end + def role=(value) + case value + when 'admin' + self.admin = true + self.moderator = false + when 'moderator' + self.admin = false + self.moderator = true + else + self.admin = false + self.moderator = false + end + end + def role if admin? 'admin' diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index d3cc70504..0dacaf654 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -16,6 +16,7 @@ # uri :string # image_remote_url :string # visible_in_picker :boolean default(TRUE), not null +# category_id :bigint(8) # class CustomEmoji < ApplicationRecord @@ -27,18 +28,23 @@ class CustomEmoji < ApplicationRecord :(#{SHORTCODE_RE_FRAGMENT}): (?=[^[:alnum:]:]|$)/x + IMAGE_MIME_TYPES = %w(image/png image/gif).freeze + + belongs_to :category, class_name: 'CustomEmojiCategory', optional: true has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce -strip' } } before_validation :downcase_domain - validates_attachment :image, content_type: { content_type: 'image/png' }, presence: true, size: { less_than: LIMIT } + validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true, size: { less_than: LIMIT } validates :shortcode, uniqueness: { scope: :domain }, format: { with: /\A#{SHORTCODE_RE_FRAGMENT}\z/ }, length: { minimum: 2 } - scope :local, -> { where(domain: nil) } - scope :remote, -> { where.not(domain: nil) } + scope :local, -> { where(domain: nil) } + scope :remote, -> { where.not(domain: nil) } scope :alphabetic, -> { order(domain: :asc, shortcode: :asc) } + scope :by_domain_and_subdomains, ->(domain) { where(domain: domain).or(where(arel_table[:domain].matches('%.' + domain))) } + scope :listed, -> { local.where(disabled: false).where(visible_in_picker: true) } remotable_attachment :image, LIMIT @@ -54,6 +60,12 @@ class CustomEmoji < ApplicationRecord :emoji end + def copy! + copy = self.class.find_or_initialize_by(domain: nil, shortcode: shortcode) + copy.image = image + copy.tap(&:save!) + end + class << self def from_text(text, domain) return [] if text.blank? diff --git a/app/models/custom_emoji_category.rb b/app/models/custom_emoji_category.rb new file mode 100644 index 000000000..3c87f2b2e --- /dev/null +++ b/app/models/custom_emoji_category.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: custom_emoji_categories +# +# id :bigint(8) not null, primary key +# name :string +# created_at :datetime not null +# updated_at :datetime not null +# + +class CustomEmojiCategory < ApplicationRecord + has_many :emojis, class_name: 'CustomEmoji', foreign_key: 'category_id', inverse_of: :category + + validates :name, presence: true, uniqueness: true +end diff --git a/app/models/custom_emoji_filter.rb b/app/models/custom_emoji_filter.rb index 7649055d2..15b8da1d1 100644 --- a/app/models/custom_emoji_filter.rb +++ b/app/models/custom_emoji_filter.rb @@ -11,6 +11,8 @@ class CustomEmojiFilter scope = CustomEmoji.alphabetic params.each do |key, value| + next if key.to_s == 'page' + scope.merge!(scope_for(key, value)) if value.present? end @@ -22,13 +24,13 @@ class CustomEmojiFilter def scope_for(key, value) case key.to_s when 'local' - CustomEmoji.local + CustomEmoji.local.left_joins(:category).reorder(Arel.sql('custom_emoji_categories.name ASC NULLS FIRST, custom_emojis.shortcode ASC')) when 'remote' CustomEmoji.remote when 'by_domain' - CustomEmoji.where(domain: value.downcase) + CustomEmoji.where(domain: value.strip.downcase) when 'shortcode' - CustomEmoji.search(value) + CustomEmoji.search(value.strip) else raise "Unknown filter: #{key}" end diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 342207a55..382562fb8 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -35,6 +35,13 @@ class CustomFilter < ApplicationRecord before_validation :clean_up_contexts after_commit :remove_cache + def expires_in + return @expires_in if defined?(@expires_in) + return nil if expires_at.nil? + + [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].find { |expires_in| expires_in.from_now >= expires_at } + end + private def clean_up_contexts diff --git a/app/models/direct_feed.rb b/app/models/direct_feed.rb new file mode 100644 index 000000000..c0b8a0a35 --- /dev/null +++ b/app/models/direct_feed.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +class DirectFeed < Feed + include Redisable + + def initialize(account) + @type = :direct + @id = account.id + @account = account + end + + def get(limit, max_id = nil, since_id = nil, min_id = nil) + unless redis.exists("account:#{@account.id}:regeneration") + statuses = super + return statuses unless statuses.empty? + end + from_database(limit, max_id, since_id, min_id) + end + + private + + def from_database(limit, max_id, since_id, min_id) + loop do + statuses = Status.as_direct_timeline(@account, limit, max_id, since_id, min_id) + return statuses if statuses.empty? + max_id = statuses.last.id + statuses = statuses.reject { |status| FeedManager.instance.filter?(:direct, status, @account.id) } + return statuses unless statuses.empty? + end + end +end diff --git a/app/models/domain_allow.rb b/app/models/domain_allow.rb new file mode 100644 index 000000000..5fe0e3a29 --- /dev/null +++ b/app/models/domain_allow.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: domain_allows +# +# id :bigint(8) not null, primary key +# domain :string default(""), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class DomainAllow < ApplicationRecord + include DomainNormalizable + + validates :domain, presence: true, uniqueness: true, domain: true + + scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } + + class << self + def allowed?(domain) + !rule_for(domain).nil? + end + + def rule_for(domain) + return if domain.blank? + + uri = Addressable::URI.new.tap { |u| u.host = domain.gsub(/[\/]/, '') } + + find_by(domain: uri.normalized_host) + end + end +end diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index 84c08c158..4e865b850 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -3,13 +3,15 @@ # # Table name: domain_blocks # -# id :bigint(8) not null, primary key -# domain :string default(""), not null -# created_at :datetime not null -# updated_at :datetime not null -# severity :integer default("silence") -# reject_media :boolean default(FALSE), not null -# reject_reports :boolean default(FALSE), not null +# id :bigint(8) not null, primary key +# domain :string default(""), not null +# created_at :datetime not null +# updated_at :datetime not null +# severity :integer default("silence") +# reject_media :boolean default(FALSE), not null +# reject_reports :boolean default(FALSE), not null +# private_comment :text +# public_comment :text # class DomainBlock < ApplicationRecord @@ -17,21 +19,50 @@ class DomainBlock < ApplicationRecord enum severity: [:silence, :suspend, :noop] - validates :domain, presence: true, uniqueness: true + validates :domain, presence: true, uniqueness: true, domain: true has_many :accounts, foreign_key: :domain, primary_key: :domain delegate :count, to: :accounts, prefix: true scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) } + scope :with_user_facing_limitations, -> { where(severity: [:silence, :suspend]).or(where(reject_media: true)) } + scope :by_severity, -> { order(Arel.sql('(CASE severity WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 0 END), reject_media, domain')) } - def self.blocked?(domain) - where(domain: domain, severity: :suspend).exists? + class << self + def suspend?(domain) + !!rule_for(domain)&.suspend? + end + + def silence?(domain) + !!rule_for(domain)&.silence? + end + + def reject_media?(domain) + !!rule_for(domain)&.reject_media? + end + + def reject_reports?(domain) + !!rule_for(domain)&.reject_reports? + end + + alias blocked? suspend? + + def rule_for(domain) + return if domain.blank? + + uri = Addressable::URI.new.tap { |u| u.host = domain.gsub(/[\/]/, '') } + segments = uri.normalized_host.split('.') + variants = segments.map.with_index { |_, i| segments[i..-1].join('.') } + + where(domain: variants[0..-2]).order(Arel.sql('char_length(domain) desc')).first + end end def stricter_than?(other_block) - return true if suspend? + return true if suspend? return false if other_block.suspend? && (silence? || noop?) return false if other_block.silence? && noop? + (reject_media || !other_block.reject_media) && (reject_reports || !other_block.reject_reports) end diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb index 0fcd36477..bc70dea25 100644 --- a/app/models/email_domain_block.rb +++ b/app/models/email_domain_block.rb @@ -12,7 +12,7 @@ class EmailDomainBlock < ApplicationRecord include DomainNormalizable - validates :domain, presence: true, uniqueness: true + validates :domain, presence: true, uniqueness: true, domain: true def self.block?(email) _, domain = email.split('@', 2) diff --git a/app/models/favourite.rb b/app/models/favourite.rb index 17f8c9fa6..bf0ec4449 100644 --- a/app/models/favourite.rb +++ b/app/models/favourite.rb @@ -13,7 +13,7 @@ class Favourite < ApplicationRecord include Paginable - update_index('statuses#status', :status) if Chewy.enabled? + update_index('statuses#status', :status) belongs_to :account, inverse_of: :favourites belongs_to :status, inverse_of: :favourites diff --git a/app/models/featured_tag.rb b/app/models/featured_tag.rb index d06ae26a8..e02ae0705 100644 --- a/app/models/featured_tag.rb +++ b/app/models/featured_tag.rb @@ -23,7 +23,7 @@ class FeaturedTag < ApplicationRecord validate :validate_featured_tags_limit, on: :create def name=(str) - self.tag = Tag.find_or_initialize_by(name: str.strip.delete('#').mb_chars.downcase.to_s) + self.tag = Tag.find_or_create_by_names(str.strip)&.first end def increment(timestamp) diff --git a/app/models/feed.rb b/app/models/feed.rb index 0e8943ff8..36e0c1e0a 100644 --- a/app/models/feed.rb +++ b/app/models/feed.rb @@ -9,6 +9,11 @@ class Feed end def get(limit, max_id = nil, since_id = nil, min_id = nil) + limit = limit.to_i + max_id = max_id.to_i if max_id.present? + since_id = since_id.to_i if since_id.present? + min_id = min_id.to_i if min_id.present? + from_redis(limit, max_id, since_id, min_id) end diff --git a/app/models/form/account_batch.rb b/app/models/form/account_batch.rb index f1b7a4566..0b285fde9 100644 --- a/app/models/form/account_batch.rb +++ b/app/models/form/account_batch.rb @@ -69,6 +69,6 @@ class Form::AccountBatch records = accounts.includes(:user) records.each { |account| authorize(account.user, :reject?) } - .each { |account| SuspendAccountService.new.call(account, including_user: true, destroy: true, skip_distribution: true) } + .each { |account| SuspendAccountService.new.call(account, reserve_email: false, reserve_username: false) } end end diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 0e9bfb265..3398af169 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -34,6 +34,12 @@ class Form::AdminSettings mascot show_reblogs_in_public_timelines show_replies_in_public_timelines + spam_check_enabled + trends + trendable_by_default + show_domain_blocks + show_domain_blocks_rationale + noindex ).freeze BOOLEAN_KEYS = %i( @@ -49,6 +55,10 @@ class Form::AdminSettings enable_keybase show_reblogs_in_public_timelines show_replies_in_public_timelines + spam_check_enabled + trends + trendable_by_default + noindex ).freeze UPLOAD_KEYS = %i( @@ -70,6 +80,8 @@ class Form::AdminSettings validates :site_contact_email, :site_contact_username, presence: true validates :site_contact_username, existing_username: true validates :bootstrap_timeline_accounts, existing_username: { multiple: true } + validates :show_domain_blocks, inclusion: { in: %w(disabled users all) } + validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) } def initialize(_attributes = {}) super diff --git a/app/models/form/challenge.rb b/app/models/form/challenge.rb new file mode 100644 index 000000000..40c99649c --- /dev/null +++ b/app/models/form/challenge.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class Form::Challenge + include ActiveModel::Model + + attr_accessor :current_password, :current_username, + :return_to +end diff --git a/app/models/form/custom_emoji_batch.rb b/app/models/form/custom_emoji_batch.rb new file mode 100644 index 000000000..076e8c9e3 --- /dev/null +++ b/app/models/form/custom_emoji_batch.rb @@ -0,0 +1,106 @@ +# frozen_string_literal: true + +class Form::CustomEmojiBatch + include ActiveModel::Model + include Authorization + include AccountableConcern + + attr_accessor :custom_emoji_ids, :action, :current_account, + :category_id, :category_name, :visible_in_picker + + def save + case action + when 'update' + update! + when 'list' + list! + when 'unlist' + unlist! + when 'enable' + enable! + when 'disable' + disable! + when 'copy' + copy! + when 'delete' + delete! + end + end + + private + + def custom_emojis + CustomEmoji.where(id: custom_emoji_ids) + end + + def update! + custom_emojis.each { |custom_emoji| authorize(custom_emoji, :update?) } + + category = begin + if category_id.present? + CustomEmojiCategory.find(category_id) + elsif category_name.present? + CustomEmojiCategory.create!(name: category_name) + end + end + + custom_emojis.each do |custom_emoji| + custom_emoji.update(category_id: category&.id) + log_action :update, custom_emoji + end + end + + def list! + custom_emojis.each { |custom_emoji| authorize(custom_emoji, :update?) } + + custom_emojis.each do |custom_emoji| + custom_emoji.update(visible_in_picker: true) + log_action :update, custom_emoji + end + end + + def unlist! + custom_emojis.each { |custom_emoji| authorize(custom_emoji, :update?) } + + custom_emojis.each do |custom_emoji| + custom_emoji.update(visible_in_picker: false) + log_action :update, custom_emoji + end + end + + def enable! + custom_emojis.each { |custom_emoji| authorize(custom_emoji, :enable?) } + + custom_emojis.each do |custom_emoji| + custom_emoji.update(disabled: false) + log_action :enable, custom_emoji + end + end + + def disable! + custom_emojis.each { |custom_emoji| authorize(custom_emoji, :disable?) } + + custom_emojis.each do |custom_emoji| + custom_emoji.update(disabled: true) + log_action :disable, custom_emoji + end + end + + def copy! + custom_emojis.each { |custom_emoji| authorize(custom_emoji, :copy?) } + + custom_emojis.each do |custom_emoji| + copied_custom_emoji = custom_emoji.copy! + log_action :create, copied_custom_emoji + end + end + + def delete! + custom_emojis.each { |custom_emoji| authorize(custom_emoji, :destroy?) } + + custom_emojis.each do |custom_emoji| + custom_emoji.destroy + log_action :destroy, custom_emoji + end + end +end diff --git a/app/models/form/delete_confirmation.rb b/app/models/form/delete_confirmation.rb index 0884a09b8..99d04b331 100644 --- a/app/models/form/delete_confirmation.rb +++ b/app/models/form/delete_confirmation.rb @@ -3,5 +3,5 @@ class Form::DeleteConfirmation include ActiveModel::Model - attr_accessor :password + attr_accessor :password, :username end diff --git a/app/models/form/migration.rb b/app/models/form/migration.rb deleted file mode 100644 index c2a8655e1..000000000 --- a/app/models/form/migration.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -class Form::Migration - include ActiveModel::Validations - - attr_accessor :acct, :account - - def initialize(attrs = {}) - @account = attrs[:account] - @acct = attrs[:account].acct unless @account.nil? - @acct = attrs[:acct].gsub(/\A@/, '').strip unless attrs[:acct].nil? - end - - def valid? - return false unless super - set_account - errors.empty? - end - - private - - def set_account - self.account = (ResolveAccountService.new.call(acct) if account.nil? && acct.present?) - end -end diff --git a/app/models/form/redirect.rb b/app/models/form/redirect.rb new file mode 100644 index 000000000..a7961f8e8 --- /dev/null +++ b/app/models/form/redirect.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +class Form::Redirect + include ActiveModel::Model + + attr_accessor :account, :target_account, :current_password, + :current_username + + attr_reader :acct + + validates :acct, presence: true, domain: { acct: true } + validate :validate_target_account + + def valid_with_challenge?(current_user) + if current_user.encrypted_password.present? + errors.add(:current_password, :invalid) unless current_user.valid_password?(current_password) + else + errors.add(:current_username, :invalid) unless account.username == current_username + end + + return false unless errors.empty? + + set_target_account + valid? + end + + def acct=(val) + @acct = val.to_s.strip.gsub(/\A@/, '') + end + + private + + def set_target_account + @target_account = ResolveAccountService.new.call(acct) + rescue Goldfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error + # Validation will take care of it + end + + def validate_target_account + if target_account.nil? + errors.add(:acct, I18n.t('migrations.errors.not_found')) + else + errors.add(:acct, I18n.t('migrations.errors.already_moved')) if account.moved_to_account_id.present? && account.moved_to_account_id == target_account.id + errors.add(:acct, I18n.t('migrations.errors.move_to_self')) if account.id == target_account.id + end + end +end diff --git a/app/models/form/status_batch.rb b/app/models/form/status_batch.rb index 933dfdaca..c4943a7ea 100644 --- a/app/models/form/status_batch.rb +++ b/app/models/form/status_batch.rb @@ -34,7 +34,8 @@ class Form::StatusBatch def delete_statuses Status.where(id: status_ids).reorder(nil).find_each do |status| - RemovalWorker.perform_async(status.id) + status.discard + RemovalWorker.perform_async(status.id, immediate: true) Tombstone.find_or_create_by(uri: status.uri, account: status.account, by_moderator: true) log_action :destroy, status end diff --git a/app/models/form/tag_batch.rb b/app/models/form/tag_batch.rb new file mode 100644 index 000000000..fd517a1a6 --- /dev/null +++ b/app/models/form/tag_batch.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class Form::TagBatch + include ActiveModel::Model + include Authorization + + attr_accessor :tag_ids, :action, :current_account + + def save + case action + when 'approve' + approve! + when 'reject' + reject! + end + end + + private + + def tags + Tag.where(id: tag_ids) + end + + def approve! + tags.each { |tag| authorize(tag, :update?) } + tags.update_all(trendable: true, reviewed_at: Time.now.utc) + end + + def reject! + tags.each { |tag| authorize(tag, :update?) } + tags.update_all(trendable: false, reviewed_at: Time.now.utc) + end +end diff --git a/app/models/form/two_factor_confirmation.rb b/app/models/form/two_factor_confirmation.rb index b8cf76d05..27ada6533 100644 --- a/app/models/form/two_factor_confirmation.rb +++ b/app/models/form/two_factor_confirmation.rb @@ -3,5 +3,5 @@ class Form::TwoFactorConfirmation include ActiveModel::Model - attr_accessor :code + attr_accessor :otp_attempt end diff --git a/app/models/home_feed.rb b/app/models/home_feed.rb index ba7564983..1fd506138 100644 --- a/app/models/home_feed.rb +++ b/app/models/home_feed.rb @@ -7,19 +7,7 @@ class HomeFeed < Feed @account = account end - def get(limit, max_id = nil, since_id = nil, min_id = nil) - if redis.exists("account:#{@account.id}:regeneration") - from_database(limit, max_id, since_id, min_id) - else - super - end - end - - private - - def from_database(limit, max_id, since_id, min_id) - Status.as_home_timeline(@account) - .paginate_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id) - .reject { |status| FeedManager.instance.filter?(:home, status, @account.id) } + def regenerating? + redis.exists("account:#{@id}:regeneration") end end diff --git a/app/models/instance.rb b/app/models/instance.rb index 7bf000d40..3c740f8a2 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -7,16 +7,13 @@ class Instance def initialize(resource) @domain = resource.domain - @accounts_count = resource.is_a?(DomainBlock) ? nil : resource.accounts_count - @domain_block = resource.is_a?(DomainBlock) ? resource : DomainBlock.find_by(domain: domain) + @accounts_count = resource.respond_to?(:accounts_count) ? resource.accounts_count : nil + @domain_block = resource.is_a?(DomainBlock) ? resource : DomainBlock.rule_for(domain) + @domain_allow = resource.is_a?(DomainAllow) ? resource : DomainAllow.rule_for(domain) end - def cached_sample_accounts - Rails.cache.fetch("#{cache_key}/sample_accounts", expires_in: 12.hours) { Account.where(domain: domain).searchable.joins(:account_stat).popular.limit(3) } - end - - def cached_accounts_count - @accounts_count || Rails.cache.fetch("#{cache_key}/count", expires_in: 12.hours) { Account.where(domain: domain).count } + def countable? + @accounts_count.present? end def to_param diff --git a/app/models/instance_filter.rb b/app/models/instance_filter.rb index 848fff53e..8bfab826d 100644 --- a/app/models/instance_filter.rb +++ b/app/models/instance_filter.rb @@ -12,6 +12,10 @@ class InstanceFilter scope = DomainBlock scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present? scope.order(id: :desc) + elsif params[:allowed].present? + scope = DomainAllow + scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present? + scope.order(id: :desc) else scope = Account.remote scope = scope.matches_domain(params[:by_domain]) if params[:by_domain].present? diff --git a/app/models/invite.rb b/app/models/invite.rb index fe2322462..29d25eae8 100644 --- a/app/models/invite.rb +++ b/app/models/invite.rb @@ -12,20 +12,23 @@ # created_at :datetime not null # updated_at :datetime not null # autofollow :boolean default(FALSE), not null +# comment :text # class Invite < ApplicationRecord include Expireable - belongs_to :user + belongs_to :user, inverse_of: :invites has_many :users, inverse_of: :invite scope :available, -> { where(expires_at: nil).or(where('expires_at >= ?', Time.now.utc)) } + validates :comment, length: { maximum: 420 } + before_validation :set_code def valid_for_use? - (max_uses.nil? || uses < max_uses) && !expired? + (max_uses.nil? || uses < max_uses) && !expired? && !(user.nil? || user.disabled?) end private diff --git a/app/models/list_account.rb b/app/models/list_account.rb index 87b498224..785923c4c 100644 --- a/app/models/list_account.rb +++ b/app/models/list_account.rb @@ -6,13 +6,13 @@ # id :bigint(8) not null, primary key # list_id :bigint(8) not null # account_id :bigint(8) not null -# follow_id :bigint(8) not null +# follow_id :bigint(8) # class ListAccount < ApplicationRecord belongs_to :list belongs_to :account - belongs_to :follow + belongs_to :follow, optional: true validates :account_id, uniqueness: { scope: :list_id } @@ -21,6 +21,6 @@ class ListAccount < ApplicationRecord private def set_follow - self.follow = Follow.find_by(account_id: list.account_id, target_account_id: account.id) + self.follow = Follow.find_by!(account_id: list.account_id, target_account_id: account.id) unless list.account_id == account.id end end diff --git a/app/models/marker.rb b/app/models/marker.rb new file mode 100644 index 000000000..a5bd2176a --- /dev/null +++ b/app/models/marker.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: markers +# +# id :bigint(8) not null, primary key +# user_id :bigint(8) +# timeline :string default(""), not null +# last_read_id :bigint(8) default(0), not null +# lock_version :integer default(0), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class Marker < ApplicationRecord + TIMELINES = %w(home notifications).freeze + + belongs_to :user + + validates :timeline, :last_read_id, presence: true + validates :timeline, inclusion: { in: TIMELINES } +end diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 70a671b4a..e05879188 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -24,16 +24,18 @@ class MediaAttachment < ApplicationRecord self.inheritance_column = nil - enum type: [:image, :gifv, :video, :audio, :unknown] + enum type: [:image, :gifv, :video, :unknown, :audio] - IMAGE_FILE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.webp'].freeze - VIDEO_FILE_EXTENSIONS = ['.webm', '.mp4', '.m4v', '.mov'].freeze - AUDIO_FILE_EXTENSIONS = ['.mp3', '.m4a', '.wav', '.ogg'].freeze + MAX_DESCRIPTION_LENGTH = 1_500 - IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze - VIDEO_MIME_TYPES = ['video/webm', 'video/mp4', 'video/quicktime'].freeze - VIDEO_CONVERTIBLE_MIME_TYPES = ['video/webm', 'video/quicktime'].freeze - AUDIO_MIME_TYPES = ['audio/mpeg', 'audio/mp4', 'audio/vnd.wav', 'audio/wav', 'audio/x-wav', 'audio/x-wave', 'audio/ogg',].freeze + IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif).freeze + VIDEO_FILE_EXTENSIONS = %w(.webm .mp4 .m4v .mov).freeze + AUDIO_FILE_EXTENSIONS = %w(.ogg .oga .mp3 .wav .flac .opus .aac .m4a .3gp .wma).freeze + + IMAGE_MIME_TYPES = %w(image/jpeg image/png image/gif).freeze + VIDEO_MIME_TYPES = %w(video/webm video/mp4 video/quicktime video/ogg).freeze + VIDEO_CONVERTIBLE_MIME_TYPES = %w(video/webm video/quicktime).freeze + AUDIO_MIME_TYPES = %w(audio/wave audio/wav audio/x-wav audio/x-pn-wave audio/ogg audio/mpeg audio/mp3 audio/webm audio/flac audio/aac audio/m4a audio/x-m4a audio/mp4 audio/3gpp video/x-ms-asf).freeze BLURHASH_OPTIONS = { x_comp: 4, @@ -53,55 +55,73 @@ class MediaAttachment < ApplicationRecord }, }.freeze - AUDIO_STYLES = { + VIDEO_STYLES = { + small: { + convert_options: { + output: { + 'loglevel' => 'fatal', + vf: 'scale=\'min(400\, iw):min(400\, ih)\':force_original_aspect_ratio=decrease', + }, + }, + format: 'png', + time: 0, + file_geometry_parser: FastGeometryParser, + blurhash: BLURHASH_OPTIONS, + }, + original: { - format: 'mp4', + keep_same_format: true, convert_options: { output: { - filter_complex: '"[0:a]compand,showwaves=s=640x360:mode=line,format=yuv420p[v]"', - map: '"[v]" -map 0:a', - threads: 2, - vcodec: 'libx264', - acodec: 'aac', - movflags: '+faststart', + 'loglevel' => 'fatal', + 'map_metadata' => '-1', + 'c:v' => 'copy', + 'c:a' => 'copy', }, }, }, }.freeze - VIDEO_STYLES = { - small: { + AUDIO_STYLES = { + original: { + format: 'mp3', + content_type: 'audio/mpeg', convert_options: { output: { - vf: 'scale=\'min(400\, iw):min(400\, ih)\':force_original_aspect_ratio=decrease', + 'loglevel' => 'fatal', + 'map_metadata' => '-1', + 'q:a' => 2, }, }, - format: 'png', - time: 0, - file_geometry_parser: FastGeometryParser, - blurhash: BLURHASH_OPTIONS, }, }.freeze VIDEO_FORMAT = { format: 'mp4', + content_type: 'video/mp4', convert_options: { output: { 'loglevel' => 'fatal', 'movflags' => 'faststart', - 'pix_fmt' => 'yuv420p', - 'vf' => 'scale=\'trunc(iw/2)*2:trunc(ih/2)*2\'', - 'vsync' => 'cfr', - 'c:v' => 'h264', - 'b:v' => '500K', - 'maxrate' => '1300K', - 'bufsize' => '1300K', - 'crf' => 18, + 'pix_fmt' => 'yuv420p', + 'vf' => 'scale=\'trunc(iw/2)*2:trunc(ih/2)*2\'', + 'vsync' => 'cfr', + 'c:v' => 'h264', + 'maxrate' => '1300K', + 'bufsize' => '1300K', + 'frames:v' => 60 * 60 * 3, + 'crf' => 18, + 'map_metadata' => '-1', }, }, }.freeze - IMAGE_LIMIT = (ENV['MAX_IMAGE_SIZE'] || 8.megabytes).to_i + VIDEO_CONVERTED_STYLES = { + small: VIDEO_STYLES[:small], + original: VIDEO_FORMAT, + }.freeze + + IMAGE_LIMIT = (ENV['MAX_IMAGE_SIZE'] || 10.megabytes).to_i VIDEO_LIMIT = (ENV['MAX_VIDEO_SIZE'] || 40.megabytes).to_i belongs_to :account, inverse_of: :media_attachments, optional: true @@ -111,22 +131,23 @@ class MediaAttachment < ApplicationRecord has_attached_file :file, styles: ->(f) { file_styles f }, processors: ->(f) { file_processors f }, - convert_options: { all: '-quality 90 -strip' } + convert_options: { all: '-quality 90 -strip +set modify-date +set create-date' } validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES - validates_attachment_size :file, less_than: IMAGE_LIMIT, unless: :video_or_gifv? - validates_attachment_size :file, less_than: VIDEO_LIMIT, if: :video_or_gifv? - remotable_attachment :file, VIDEO_LIMIT + validates_attachment_size :file, less_than: IMAGE_LIMIT, unless: :larger_media_format? + validates_attachment_size :file, less_than: VIDEO_LIMIT, if: :larger_media_format? + remotable_attachment :file, VIDEO_LIMIT, suppress_errors: false include Attachmentable validates :account, presence: true - validates :description, length: { maximum: 420 }, if: :local? + validates :description, length: { maximum: MAX_DESCRIPTION_LENGTH }, if: :local? scope :attached, -> { where.not(status_id: nil).or(where.not(scheduled_status_id: nil)) } scope :unattached, -> { where(status_id: nil, scheduled_status_id: nil) } scope :local, -> { where(remote_url: '') } scope :remote, -> { where.not(remote_url: '') } + scope :cached, -> { remote.where.not(file_file_name: nil) } default_scope { order(id: :asc) } @@ -138,8 +159,12 @@ class MediaAttachment < ApplicationRecord file.blank? && remote_url.present? end - def video_or_gifv? - video? || gifv? + def larger_media_format? + video? || gifv? || audio? + end + + def audio_or_video? + audio? || video? end def to_param @@ -171,37 +196,37 @@ class MediaAttachment < ApplicationRecord before_save :set_meta class << self + def supported_mime_types + IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES + end + + def supported_file_extensions + IMAGE_FILE_EXTENSIONS + VIDEO_FILE_EXTENSIONS + AUDIO_FILE_EXTENSIONS + end + private def file_styles(f) - if f.instance.file_content_type == 'image/gif' - { - small: IMAGE_STYLES[:small], - original: VIDEO_FORMAT, - } - elsif IMAGE_MIME_TYPES.include? f.instance.file_content_type + if f.instance.file_content_type == 'image/gif' || VIDEO_CONVERTIBLE_MIME_TYPES.include?(f.instance.file_content_type) + VIDEO_CONVERTED_STYLES + elsif IMAGE_MIME_TYPES.include?(f.instance.file_content_type) IMAGE_STYLES - elsif AUDIO_MIME_TYPES.include? f.instance.file_content_type - AUDIO_STYLES - elsif VIDEO_CONVERTIBLE_MIME_TYPES.include?(f.instance.file_content_type) - { - small: VIDEO_STYLES[:small], - original: VIDEO_FORMAT, - } - else + elsif VIDEO_MIME_TYPES.include?(f.instance.file_content_type) VIDEO_STYLES + else + AUDIO_STYLES end end def file_processors(f) if f.file_content_type == 'image/gif' [:gif_transcoder, :blurhash_transcoder] - elsif VIDEO_MIME_TYPES.include? f.file_content_type - [:video_transcoder, :blurhash_transcoder] - elsif AUDIO_MIME_TYPES.include? f.file_content_type - [:audio_transcoder] + elsif VIDEO_MIME_TYPES.include?(f.file_content_type) + [:video_transcoder, :blurhash_transcoder, :type_corrector] + elsif AUDIO_MIME_TYPES.include?(f.file_content_type) + [:transcoder, :type_corrector] else - [:lazy_thumbnail, :blurhash_transcoder] + [:lazy_thumbnail, :blurhash_transcoder, :type_corrector] end end end @@ -220,16 +245,26 @@ class MediaAttachment < ApplicationRecord end def prepare_description - self.description = description.strip[0...420] unless description.nil? + self.description = description.strip[0...MAX_DESCRIPTION_LENGTH] unless description.nil? end def set_type_and_extension - self.type = VIDEO_MIME_TYPES.include?(file_content_type) ? :video : AUDIO_MIME_TYPES.include?(file_content_type) ? :audio : :image + self.type = begin + if VIDEO_MIME_TYPES.include?(file_content_type) + :video + elsif AUDIO_MIME_TYPES.include?(file_content_type) + :audio + else + :image + end + end end def set_meta meta = populate_meta + return if meta == {} + file.instance_write :meta, meta end @@ -252,7 +287,7 @@ class MediaAttachment < ApplicationRecord width: width, height: height, size: "#{width}x#{height}", - aspect: width.to_f / height.to_f, + aspect: width.to_f / height, } end @@ -267,11 +302,12 @@ class MediaAttachment < ApplicationRecord frame_rate: movie.frame_rate, duration: movie.duration, bitrate: movie.bitrate, - } + }.compact end def reset_parent_cache return if status_id.nil? + Rails.cache.delete("statuses/#{status_id}") end end diff --git a/app/models/notification.rb b/app/models/notification.rb index 498673ff1..ad7528f50 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -42,7 +42,7 @@ class Notification < ApplicationRecord validates :activity_type, inclusion: { in: TYPE_CLASS_MAP.values } scope :browserable, ->(exclude_types = [], account_id = nil) { - types = TYPE_CLASS_MAP.values - activity_types_from_types(exclude_types + [:follow_request]) + types = TYPE_CLASS_MAP.values - activity_types_from_types(exclude_types) if account_id.nil? where(activity_type: types) else @@ -50,7 +50,7 @@ class Notification < ApplicationRecord end } - cache_associated :from_account, status: STATUS_INCLUDES, mention: [status: STATUS_INCLUDES], favourite: [:account, status: STATUS_INCLUDES], follow: :account, poll: [status: STATUS_INCLUDES] + cache_associated :from_account, status: STATUS_INCLUDES, mention: [status: STATUS_INCLUDES], favourite: [:account, status: STATUS_INCLUDES], follow: :account, follow_request: :account, poll: [status: STATUS_INCLUDES] def type @type ||= TYPE_CLASS_MAP.invert[activity_type].to_sym @@ -69,10 +69,6 @@ class Notification < ApplicationRecord end end - def browserable? - type != :follow_request - end - class << self def cache_ids select(:id, :updated_at, :activity_type, :activity_id) diff --git a/app/models/poll.rb b/app/models/poll.rb index 8f72c7b11..b5deafcc2 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -16,6 +16,7 @@ # created_at :datetime not null # updated_at :datetime not null # lock_version :integer default(0), not null +# voters_count :bigint(8) # class Poll < ApplicationRecord @@ -35,7 +36,7 @@ class Poll < ApplicationRecord scope :attached, -> { where.not(status_id: nil) } scope :unattached, -> { where(status_id: nil) } - before_validation :prepare_options + before_validation :prepare_options, if: :local? before_validation :prepare_votes_count after_initialize :prepare_cached_tallies @@ -54,6 +55,10 @@ class Poll < ApplicationRecord account.id == account_id || votes.where(account: account).exists? end + def own_votes(account) + votes.where(account: account).pluck(:choice) + end + delegate :local?, to: :account def remote? diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index f26ea0c74..4e89fbf85 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -25,7 +25,7 @@ # class PreviewCard < ApplicationRecord - IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze + IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze LIMIT = 1.megabytes self.inheritance_column = false @@ -43,8 +43,14 @@ class PreviewCard < ApplicationRecord validates_attachment_size :image, less_than: LIMIT remotable_attachment :image, LIMIT + scope :cached, -> { where.not(image_file_name: [nil, '']) } + before_save :extract_dimensions, if: :link? + def missing_image? + width.present? && height.present? && image_file_name.blank? + end + def save_with_optional_image! save! rescue ActiveRecord::RecordInvalid diff --git a/app/models/relay.rb b/app/models/relay.rb index 6934a5c62..8c8a97db3 100644 --- a/app/models/relay.rb +++ b/app/models/relay.rb @@ -12,8 +12,6 @@ # class Relay < ApplicationRecord - PRESET_RELAY = 'https://relay.joinmastodon.org/inbox' - validates :inbox_url, presence: true, uniqueness: true, url: true, if: :will_save_change_to_inbox_url? enum state: [:idle, :pending, :accepted, :rejected] @@ -74,7 +72,6 @@ class Relay < ApplicationRecord end def ensure_disabled - return unless enabled? - disable! + disable! if enabled? end end diff --git a/app/models/remote_follow.rb b/app/models/remote_follow.rb index 2537de36c..5ea535287 100644 --- a/app/models/remote_follow.rb +++ b/app/models/remote_follow.rb @@ -2,24 +2,26 @@ class RemoteFollow include ActiveModel::Validations + include RoutingHelper attr_accessor :acct, :addressable_template - validates :acct, presence: true + validates :acct, presence: true, domain: { acct: true } - def initialize(attrs = nil) - @acct = attrs[:acct].gsub(/\A@/, '').strip if !attrs.nil? && !attrs[:acct].nil? + def initialize(attrs = {}) + @acct = normalize_acct(attrs[:acct]) end def valid? return false unless super - populate_template + fetch_template! + errors.empty? end def subscribe_address_for(account) - addressable_template.expand(uri: account.local_username_and_domain).to_s + addressable_template.expand(uri: ActivityPub::TagManager.instance.uri_for(account)).to_s end def interact_address_for(status) @@ -28,8 +30,32 @@ class RemoteFollow private - def populate_template - if acct.blank? || redirect_url_link.nil? || redirect_url_link.template.nil? + def normalize_acct(value) + return if value.blank? + + username, domain = value.strip.gsub(/\A@/, '').split('@') + + domain = begin + if TagManager.instance.local_domain?(domain) + nil + else + TagManager.instance.normalize_domain(domain) + end + end + + [username, domain].compact.join('@') + rescue Addressable::URI::InvalidURIError + value + end + + def fetch_template! + return missing_resource_error if acct.blank? + + _, domain = acct.split('@') + + if domain.nil? + @addressable_template = Addressable::Template.new("#{authorize_interaction_url}?uri={uri}") + elsif redirect_url_link.nil? || redirect_url_link.template.nil? missing_resource_error else @addressable_template = Addressable::Template.new(redirect_uri_template) @@ -45,7 +71,7 @@ class RemoteFollow end def acct_resource - @_acct_resource ||= Goldfinger.finger("acct:#{acct}") + @acct_resource ||= Goldfinger.finger("acct:#{acct}") rescue Goldfinger::Error, HTTP::ConnectionError nil end diff --git a/app/models/remote_profile.rb b/app/models/remote_profile.rb deleted file mode 100644 index 742d2b56f..000000000 --- a/app/models/remote_profile.rb +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: true - -class RemoteProfile - include ActiveModel::Model - - attr_reader :document - - def initialize(body) - @document = Nokogiri::XML.parse(body, nil, 'utf-8') - end - - def root - @root ||= document.at_xpath('/atom:feed|/atom:entry', atom: OStatus::TagManager::XMLNS) - end - - def author - @author ||= root.at_xpath('./atom:author|./dfrn:owner', atom: OStatus::TagManager::XMLNS, dfrn: OStatus::TagManager::DFRN_XMLNS) - end - - def hub_link - @hub_link ||= link_href_from_xml(root, 'hub') - end - - def display_name - @display_name ||= author.at_xpath('./poco:displayName', poco: OStatus::TagManager::POCO_XMLNS)&.content - end - - def note - @note ||= author.at_xpath('./atom:summary|./poco:note', atom: OStatus::TagManager::XMLNS, poco: OStatus::TagManager::POCO_XMLNS)&.content - end - - def scope - @scope ||= author.at_xpath('./mastodon:scope', mastodon: OStatus::TagManager::MTDN_XMLNS)&.content - end - - def avatar - @avatar ||= link_href_from_xml(author, 'avatar') - end - - def header - @header ||= link_href_from_xml(author, 'header') - end - - def emojis - @emojis ||= author.xpath('./xmlns:link[@rel="emoji"]', xmlns: OStatus::TagManager::XMLNS) - end - - def locked? - scope == 'private' - end - - private - - def link_href_from_xml(xml, type) - xml.at_xpath(%(./atom:link[@rel="#{type}"]/@href), atom: OStatus::TagManager::XMLNS)&.content - end -end diff --git a/app/models/report.rb b/app/models/report.rb index 86c303798..fb2e040ee 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -17,6 +17,8 @@ # class Report < ApplicationRecord + include Paginable + belongs_to :account belongs_to :target_account, class_name: 'Account' belongs_to :action_taken_by_account, class_name: 'Account', optional: true @@ -26,6 +28,7 @@ class Report < ApplicationRecord scope :unresolved, -> { where(action_taken: false) } scope :resolved, -> { where(action_taken: true) } + scope :with_accounts, -> { includes([:account, :target_account, :action_taken_by_account, :assigned_account].each_with_object({}) { |k, h| h[k] = { user: [:invite_request, :invite] } }) } validates :comment, length: { maximum: 1000 } @@ -40,7 +43,7 @@ class Report < ApplicationRecord end def statuses - Status.where(id: status_ids).includes(:account, :media_attachments, :mentions) + Status.with_discarded.where(id: status_ids).includes(:account, :media_attachments, :mentions) end def media_attachments @@ -56,6 +59,7 @@ class Report < ApplicationRecord end def resolve!(acting_account) + RemovalWorker.push_bulk(Status.with_discarded.discarded.where(id: status_ids).pluck(:id)) { |status_id| [status_id, { immediate: true }] } update!(action_taken: true, action_taken_by_account_id: acting_account.id) end diff --git a/app/models/report_filter.rb b/app/models/report_filter.rb index 56ab28df7..abf53cbab 100644 --- a/app/models/report_filter.rb +++ b/app/models/report_filter.rb @@ -9,14 +9,18 @@ class ReportFilter def results scope = Report.unresolved + params.each do |key, value| scope = scope.merge scope_for(key, value) end + scope end def scope_for(key, value) case key.to_sym + when :by_target_domain + Report.where(target_account: Account.where(domain: value)) when :resolved Report.resolved when :account_id diff --git a/app/models/status.rb b/app/models/status.rb index 5ddce72de..c189d19bf 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -25,21 +25,24 @@ # full_status_text :text default(""), not null # poll_id :bigint(8) # content_type :string +# deleted_at :datetime # class Status < ApplicationRecord before_destroy :unlink_from_conversations + include Discard::Model include Paginable - include Streamable include Cacheable include StatusThreadingConcern + self.discard_column = :deleted_at + # If `override_timestamps` is set at creation time, Snowflake ID creation # will be based on current time instead of `created_at` attr_accessor :override_timestamps - update_index('statuses#status', :proper) if Chewy.enabled? + update_index('statuses#status', :proper) enum visibility: [:public, :unlisted, :private, :direct, :limited], _suffix: :visibility @@ -65,7 +68,6 @@ class Status < ApplicationRecord has_and_belongs_to_many :preview_cards has_one :notification, as: :activity, dependent: :destroy - has_one :stream_entry, as: :activity, inverse_of: :status has_one :status_stat, inverse_of: :status has_one :poll, inverse_of: :status, dependent: :destroy @@ -79,10 +81,10 @@ class Status < ApplicationRecord accepts_nested_attributes_for :poll - default_scope { recent } + default_scope { recent.kept } scope :recent, -> { reorder(id: :desc) } - scope :remote, -> { where(local: false).or(where.not(uri: nil)) } + scope :remote, -> { where(local: false).where.not(uri: nil) } scope :local, -> { where(local: true).or(where(uri: nil)) } scope :without_replies, -> { where('statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id') } @@ -113,13 +115,11 @@ class Status < ApplicationRecord :status_stat, :tags, :preview_cards, - :stream_entry, :preloadable_poll, account: :account_stat, active_mentions: { account: :account_stat }, reblog: [ :application, - :stream_entry, :tags, :preview_cards, :media_attachments, @@ -136,12 +136,14 @@ class Status < ApplicationRecord REAL_TIME_WINDOW = 6.hours def searchable_by(preloaded = nil) - ids = [account_id] + ids = [] + + ids << account_id if local? if preloaded.nil? - ids += mentions.pluck(:account_id) - ids += favourites.pluck(:account_id) - ids += reblogs.pluck(:account_id) + ids += mentions.where(account: Account.local).pluck(:account_id) + ids += favourites.where(account: Account.local).pluck(:account_id) + ids += reblogs.where(account: Account.local).pluck(:account_id) else ids += preloaded.mentions[id] || [] ids += preloaded.favourites[id] || [] @@ -204,7 +206,7 @@ class Status < ApplicationRecord end def hidden? - private_visibility? || direct_visibility? || limited_visibility? + !distributable? end def distributable? @@ -221,6 +223,10 @@ class Status < ApplicationRecord !sensitive? && with_media? end + def reported? + @reported ||= Report.where(target_account: account).unresolved.where('? = ANY(status_ids)', id).exists? + end + def emojis return @emojis if defined?(@emojis) @@ -285,10 +291,6 @@ class Status < ApplicationRecord where(language: nil).or where(language: account.chosen_languages) end - def as_home_timeline(account) - where(account: [account] + account.following).where(visibility: [:public, :unlisted, :private]) - end - def as_direct_timeline(account, limit = 20, max_id = nil, since_id = nil, cache_ids = false) # direct timeline is mix of direct message from_me and to_me. # 2 queries are executed with pagination. @@ -356,7 +358,7 @@ class Status < ApplicationRecord end def reblogs_map(status_ids, account_id) - select('reblog_of_id').where(reblog_of_id: status_ids).where(account_id: account_id).reorder(nil).each_with_object({}) { |s, h| h[s.reblog_of_id] = true } + unscoped.select('reblog_of_id').where(reblog_of_id: status_ids).where(account_id: account_id).each_with_object({}) { |s, h| h[s.reblog_of_id] = true } end def mutes_map(conversation_ids, account_id) @@ -459,13 +461,16 @@ class Status < ApplicationRecord '👁' end + def status_stat + super || build_status_stat + end + private def update_status_stat!(attrs) return if marked_for_destruction? || destroyed? - record = status_stat || build_status_stat - record.update(attrs) + status_stat.update(attrs) end def store_uri @@ -523,7 +528,8 @@ class Status < ApplicationRecord end def update_statistics - return unless public_visibility? || unlisted_visibility? + return unless distributable? + ActivityTracker.increment('activity:statuses:local') end @@ -532,7 +538,7 @@ class Status < ApplicationRecord account&.increment_count!(:statuses_count) reblog&.increment_count!(:reblogs_count) if reblog? - thread&.increment_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?) + thread&.increment_count!(:replies_count) if in_reply_to_id.present? && distributable? end def decrement_counter_caches @@ -540,7 +546,7 @@ class Status < ApplicationRecord account&.decrement_count!(:statuses_count) reblog&.decrement_count!(:reblogs_count) if reblog? - thread&.decrement_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?) + thread&.decrement_count!(:replies_count) if in_reply_to_id.present? && distributable? end def unlink_from_conversations diff --git a/app/models/stream_entry.rb b/app/models/stream_entry.rb deleted file mode 100644 index edd30487e..000000000 --- a/app/models/stream_entry.rb +++ /dev/null @@ -1,59 +0,0 @@ -# frozen_string_literal: true -# == Schema Information -# -# Table name: stream_entries -# -# id :bigint(8) not null, primary key -# activity_id :bigint(8) -# activity_type :string -# created_at :datetime not null -# updated_at :datetime not null -# hidden :boolean default(FALSE), not null -# account_id :bigint(8) -# - -class StreamEntry < ApplicationRecord - include Paginable - - belongs_to :account, inverse_of: :stream_entries - belongs_to :activity, polymorphic: true - belongs_to :status, foreign_type: 'Status', foreign_key: 'activity_id', inverse_of: :stream_entry - - validates :account, :activity, presence: true - - STATUS_INCLUDES = [:account, :stream_entry, :conversation, :media_attachments, :tags, mentions: :account, reblog: [:stream_entry, :account, :conversation, :media_attachments, :tags, mentions: :account], thread: [:stream_entry, :account]].freeze - - default_scope { where(activity_type: 'Status') } - scope :recent, -> { reorder(id: :desc) } - scope :with_includes, -> { includes(:account, status: STATUS_INCLUDES) } - - delegate :target, :title, :content, :thread, :local_only?, - to: :status, - allow_nil: true - - def object_type - orphaned? || targeted? ? :activity : status.object_type - end - - def verb - orphaned? ? :delete : status.verb - end - - def targeted? - [:follow, :request_friend, :authorize, :reject, :unfollow, :block, :unblock, :share, :favorite].include? verb - end - - def threaded? - (verb == :favorite || object_type == :comment) && !thread.nil? - end - - def mentions - orphaned? ? [] : status.active_mentions.map(&:account) - end - - private - - def orphaned? - status.nil? - end -end diff --git a/app/models/subscription.rb b/app/models/subscription.rb deleted file mode 100644 index 79b81828d..000000000 --- a/app/models/subscription.rb +++ /dev/null @@ -1,62 +0,0 @@ -# frozen_string_literal: true -# == Schema Information -# -# Table name: subscriptions -# -# id :bigint(8) not null, primary key -# callback_url :string default(""), not null -# secret :string -# expires_at :datetime -# confirmed :boolean default(FALSE), not null -# created_at :datetime not null -# updated_at :datetime not null -# last_successful_delivery_at :datetime -# domain :string -# account_id :bigint(8) not null -# - -class Subscription < ApplicationRecord - MIN_EXPIRATION = 1.day.to_i - MAX_EXPIRATION = 30.days.to_i - - belongs_to :account - - validates :callback_url, presence: true - validates :callback_url, uniqueness: { scope: :account_id } - - scope :confirmed, -> { where(confirmed: true) } - scope :future_expiration, -> { where(arel_table[:expires_at].gt(Time.now.utc)) } - scope :expired, -> { where(arel_table[:expires_at].lt(Time.now.utc)) } - scope :active, -> { confirmed.future_expiration } - - def lease_seconds=(value) - self.expires_at = future_expiration(value) - end - - def lease_seconds - (expires_at - Time.now.utc).to_i - end - - def expired? - Time.now.utc > expires_at - end - - before_validation :set_min_expiration - - private - - def future_expiration(value) - Time.now.utc + future_offset(value).seconds - end - - def future_offset(seconds) - [ - [MIN_EXPIRATION, seconds.to_i].max, - MAX_EXPIRATION, - ].min - end - - def set_min_expiration - self.lease_seconds = 0 unless expires_at - end -end diff --git a/app/models/tag.rb b/app/models/tag.rb index 7db76d157..d3a7e1e6d 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -3,38 +3,55 @@ # # Table name: tags # -# id :bigint(8) not null, primary key -# name :string default(""), not null -# created_at :datetime not null -# updated_at :datetime not null +# id :bigint(8) not null, primary key +# name :string default(""), not null +# created_at :datetime not null +# updated_at :datetime not null +# usable :boolean +# trendable :boolean +# listable :boolean +# reviewed_at :datetime +# requested_review_at :datetime +# last_status_at :datetime +# max_score :float +# max_score_at :datetime # class Tag < ApplicationRecord has_and_belongs_to_many :statuses has_and_belongs_to_many :accounts - has_and_belongs_to_many :sample_accounts, -> { searchable.discoverable.popular.limit(3) }, class_name: 'Account' + has_and_belongs_to_many :sample_accounts, -> { local.discoverable.popular.limit(3) }, class_name: 'Account' has_many :featured_tags, dependent: :destroy, inverse_of: :tag has_one :account_tag_stat, dependent: :destroy - HASHTAG_NAME_RE = '[[:word:]_]*[[:alpha:]_·][[:word:]_]*' - HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i + HASHTAG_SEPARATORS = "_\u00B7\u200c" + HASHTAG_NAME_RE = "([[:word:]_][[:word:]#{HASHTAG_SEPARATORS}]*[[:alpha:]#{HASHTAG_SEPARATORS}][[:word:]#{HASHTAG_SEPARATORS}]*[[:word:]_])|([[:word:]_]*[[:alpha:]][[:word:]_]*)" + HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i - validates :name, presence: true, uniqueness: true, format: { with: /\A#{HASHTAG_NAME_RE}\z/i } + validates :name, presence: true, format: { with: /\A(#{HASHTAG_NAME_RE})\z/i } + validate :validate_name_change, if: -> { !new_record? && name_changed? } - scope :discoverable, -> { joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).where(account_tag_stats: { hidden: false }).order(Arel.sql('account_tag_stats.accounts_count desc')) } - scope :hidden, -> { where(account_tag_stats: { hidden: true }) } + scope :reviewed, -> { where.not(reviewed_at: nil) } + scope :unreviewed, -> { where(reviewed_at: nil) } + scope :pending_review, -> { unreviewed.where.not(requested_review_at: nil) } + scope :usable, -> { where(usable: [true, nil]) } + scope :listable, -> { where(listable: [true, nil]) } + scope :trendable, -> { Setting.trendable_by_default ? where(trendable: [true, nil]) : where(trendable: true) } + scope :discoverable, -> { listable.joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).order(Arel.sql('account_tag_stats.accounts_count desc')) } scope :most_used, ->(account) { joins(:statuses).where(statuses: { account: account }).group(:id).order(Arel.sql('count(*) desc')) } + scope :matches_name, ->(value) { where(arel_table[:name].matches("#{value}%")) } delegate :accounts_count, :accounts_count=, :increment_count!, :decrement_count!, - :hidden?, to: :account_tag_stat after_save :save_account_tag_stat + update_index('tags#tag', :self) + def account_tag_stat super || build_account_tag_stat end @@ -47,6 +64,40 @@ class Tag < ApplicationRecord name end + def usable + boolean_with_default('usable', true) + end + + alias usable? usable + + def listable + boolean_with_default('listable', true) + end + + alias listable? listable + + def trendable + boolean_with_default('trendable', Setting.trendable_by_default) + end + + alias trendable? trendable + + def requires_review? + reviewed_at.nil? + end + + def reviewed? + reviewed_at.present? + end + + def requested_review? + requested_review_at.present? + end + + def trending? + TrendingTags.trending?(self) + end + def history days = [] @@ -64,22 +115,50 @@ class Tag < ApplicationRecord end class << self - def search_for(term, limit = 5, offset = 0) - pattern = sanitize_sql_like(term.strip) + '%' + def find_or_create_by_names(name_or_names) + Array(name_or_names).map(&method(:normalize)).uniq { |str| str.mb_chars.downcase.to_s }.map do |normalized_name| + tag = matching_name(normalized_name).first || create!(name: normalized_name) + + yield tag if block_given? - Tag.where('lower(name) like lower(?)', pattern) - .order(:name) - .limit(limit) - .offset(offset) + tag + end + end + + def search_for(term, limit = 5, offset = 0, options = {}) + normalized_term = normalize(term.strip).mb_chars.downcase.to_s + pattern = sanitize_sql_like(normalized_term) + '%' + query = Tag.listable.where(arel_table[:name].lower.matches(pattern)) + query = query.where(arel_table[:name].lower.eq(normalized_term).or(arel_table[:reviewed_at].not_eq(nil))) if options[:exclude_unreviewed] + + query.order(Arel.sql('length(name) ASC, name ASC')) + .limit(limit) + .offset(offset) end def find_normalized(name) - find_by(name: name.mb_chars.downcase.to_s) + matching_name(name).first end def find_normalized!(name) find_normalized(name) || raise(ActiveRecord::RecordNotFound) end + + def matching_name(name_or_names) + names = Array(name_or_names).map { |name| normalize(name).mb_chars.downcase.to_s } + + if names.size == 1 + where(arel_table[:name].lower.eq(names.first)) + else + where(arel_table[:name].lower.in(names)) + end + end + + private + + def normalize(str) + str.gsub(/\A#/, '') + end end private @@ -88,4 +167,8 @@ class Tag < ApplicationRecord return unless account_tag_stat&.changed? account_tag_stat.save end + + def validate_name_change + errors.add(:name, I18n.t('tags.does_not_match_previous_name')) unless name_was.mb_chars.casecmp(name.mb_chars).zero? + end end diff --git a/app/models/tag_filter.rb b/app/models/tag_filter.rb new file mode 100644 index 000000000..8921e186b --- /dev/null +++ b/app/models/tag_filter.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +class TagFilter + attr_reader :params + + def initialize(params) + @params = params + end + + def results + scope = Tag.unscoped + + params.each do |key, value| + next if key.to_s == 'page' + + scope.merge!(scope_for(key, value.to_s.strip)) if value.present? + end + + scope.order(id: :desc) + end + + private + + def scope_for(key, value) + case key.to_s + when 'directory' + Tag.discoverable + when 'reviewed' + Tag.reviewed.order(reviewed_at: :desc) + when 'unreviewed' + Tag.unreviewed + when 'pending_review' + Tag.pending_review.order(requested_review_at: :desc) + when 'popular' + Tag.order('max_score DESC NULLS LAST') + when 'active' + Tag.order('last_status_at DESC NULLS LAST') + when 'name' + Tag.matches_name(value) + else + raise "Unknown filter: #{key}" + end + end +end diff --git a/app/models/trending_tags.rb b/app/models/trending_tags.rb index 148535c21..c69f6d3c3 100644 --- a/app/models/trending_tags.rb +++ b/app/models/trending_tags.rb @@ -5,23 +5,100 @@ class TrendingTags EXPIRE_HISTORY_AFTER = 7.days.seconds EXPIRE_TRENDS_AFTER = 1.day.seconds THRESHOLD = 5 + LIMIT = 10 + REVIEW_THRESHOLD = 3 + MAX_SCORE_COOLDOWN = 2.days.freeze + MAX_SCORE_HALFLIFE = 2.hours.freeze class << self include Redisable def record_use!(tag, account, at_time = Time.now.utc) - return if disallowed_hashtags.include?(tag.name) || account.silenced? || account.bot? + return if account.silenced? || account.bot? || !tag.usable? || !(tag.trendable? || tag.requires_review?) increment_historical_use!(tag.id, at_time) increment_unique_use!(tag.id, account.id, at_time) - increment_vote!(tag.id, at_time) + increment_use!(tag.id, at_time) + + tag.update(last_status_at: Time.now.utc) if tag.last_status_at.nil? || tag.last_status_at < 12.hours.ago + end + + def update!(at_time = Time.now.utc) + tag_ids = redis.smembers("#{KEY}:used:#{at_time.beginning_of_day.to_i}") + redis.zrange(KEY, 0, -1) + tags = Tag.where(id: tag_ids.uniq) + + # First pass to calculate scores and update the set + + tags.each do |tag| + expected = redis.pfcount("activity:tags:#{tag.id}:#{(at_time - 1.day).beginning_of_day.to_i}:accounts").to_f + expected = 1.0 if expected.zero? + observed = redis.pfcount("activity:tags:#{tag.id}:#{at_time.beginning_of_day.to_i}:accounts").to_f + max_time = tag.max_score_at + max_score = tag.max_score + max_score = 0 if max_time.nil? || max_time < (at_time - MAX_SCORE_COOLDOWN) + + score = begin + if expected > observed || observed < THRESHOLD + 0 + else + ((observed - expected)**2) / expected + end + end + + if score > max_score + max_score = score + max_time = at_time + + # Not interested in triggering any callbacks for this + tag.update_columns(max_score: max_score, max_score_at: max_time) + end + + decaying_score = max_score * (0.5**((at_time.to_f - max_time.to_f) / MAX_SCORE_HALFLIFE.to_f)) + + if decaying_score.zero? + redis.zrem(KEY, tag.id) + else + redis.zadd(KEY, decaying_score, tag.id) + end + end + + users_for_review = User.staff.includes(:account).to_a.select(&:allows_trending_tag_emails?) + + # Second pass to notify about previously unreviewed trends + + tags.each do |tag| + current_rank = redis.zrevrank(KEY, tag.id) + needs_review_notification = tag.requires_review? && !tag.requested_review? + rank_passes_threshold = current_rank.present? && current_rank <= REVIEW_THRESHOLD + + next unless !tag.trendable? && rank_passes_threshold && needs_review_notification + + tag.touch(:requested_review_at) + + users_for_review.each do |user| + AdminMailer.new_trending_tag(user.account, tag).deliver_later! + end + end + + # Trim older items + + redis.zremrangebyrank(KEY, 0, -(LIMIT + 1)) + redis.zremrangebyscore(KEY, '(0.3', '-inf') end - def get(limit) - key = "#{KEY}:#{Time.now.utc.beginning_of_day.to_i}" - tag_ids = redis.zrevrange(key, 0, limit - 1).map(&:to_i) - tags = Tag.where(id: tag_ids).to_a.each_with_object({}) { |tag, h| h[tag.id] = tag } - tag_ids.map { |tag_id| tags[tag_id] }.compact + def get(limit, filtered: true) + tag_ids = redis.zrevrange(KEY, 0, LIMIT - 1).map(&:to_i) + + tags = Tag.where(id: tag_ids) + tags = tags.trendable if filtered + tags = tags.each_with_object({}) { |tag, h| h[tag.id] = tag } + + tag_ids.map { |tag_id| tags[tag_id] }.compact.take(limit) + end + + def trending?(tag) + rank = redis.zrevrank(KEY, tag.id) + rank.present? && rank < LIMIT end private @@ -38,28 +115,10 @@ class TrendingTags redis.expire(key, EXPIRE_HISTORY_AFTER) end - def increment_vote!(tag_id, at_time) - key = "#{KEY}:#{at_time.beginning_of_day.to_i}" - expected = redis.pfcount("activity:tags:#{tag_id}:#{(at_time - 1.day).beginning_of_day.to_i}:accounts").to_f - expected = 1.0 if expected.zero? - observed = redis.pfcount("activity:tags:#{tag_id}:#{at_time.beginning_of_day.to_i}:accounts").to_f - - if expected > observed || observed < THRESHOLD - redis.zrem(key, tag_id.to_s) - else - score = ((observed - expected)**2) / expected - redis.zadd(key, score, tag_id.to_s) - end - - redis.expire(key, EXPIRE_TRENDS_AFTER) - end - - def disallowed_hashtags - return @disallowed_hashtags if defined?(@disallowed_hashtags) - - @disallowed_hashtags = Setting.disallowed_hashtags.nil? ? [] : Setting.disallowed_hashtags - @disallowed_hashtags = @disallowed_hashtags.split(' ') if @disallowed_hashtags.is_a? String - @disallowed_hashtags = @disallowed_hashtags.map(&:downcase) + def increment_use!(tag_id, at_time) + key = "#{KEY}:used:#{at_time.beginning_of_day.to_i}" + redis.sadd(key, tag_id) + redis.expire(key, EXPIRE_HISTORY_AFTER) end end end diff --git a/app/models/user.rb b/app/models/user.rb index c24741ff1..49cfc25ca 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -73,6 +73,8 @@ class User < ApplicationRecord has_many :applications, class_name: 'Doorkeeper::Application', as: :owner has_many :backups, inverse_of: :user + has_many :invites, inverse_of: :user + has_many :markers, inverse_of: :user, dependent: :destroy has_one :invite_request, class_name: 'UserInviteRequest', inverse_of: :user, dependent: :destroy accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? } @@ -87,8 +89,9 @@ class User < ApplicationRecord scope :approved, -> { where(approved: true) } scope :confirmed, -> { where.not(confirmed_at: nil) } scope :enabled, -> { where(disabled: false) } + scope :disabled, -> { where(disabled: true) } scope :inactive, -> { where(arel_table[:current_sign_in_at].lt(ACTIVE_DURATION.ago)) } - scope :active, -> { confirmed.where(arel_table[:current_sign_in_at].gteq(ACTIVE_DURATION.ago)).joins(:account).where.not(accounts: { suspended_at: nil }) } + scope :active, -> { confirmed.where(arel_table[:current_sign_in_at].gteq(ACTIVE_DURATION.ago)).joins(:account).where(accounts: { suspended_at: nil }) } scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) } scope :emailable, -> { confirmed.enabled.joins(:account).merge(Account.searchable) } @@ -105,7 +108,9 @@ class User < ApplicationRecord delegate :auto_play_gif, :default_sensitive, :unfollow_modal, :boost_modal, :favourite_modal, :delete_modal, :reduce_motion, :system_font_ui, :noindex, :flavour, :skin, :display_media, :hide_network, :hide_followers_count, :expand_spoilers, :default_language, :aggregate_reblogs, :show_application, - :advanced_layout, :default_content_type, to: :settings, prefix: :setting, allow_nil: false + :advanced_layout, :use_blurhash, :use_pending_items, :trends, :crop_images, + :default_content_type, :system_emoji_font, + to: :settings, prefix: :setting, allow_nil: false attr_reader :invite_code attr_writer :external @@ -160,7 +165,15 @@ class User < ApplicationRecord end def active_for_authentication? - super && approved? + true + end + + def functional? + confirmed? && approved? && !disabled? && !account.suspended? + end + + def unconfirmed_or_pending? + !(confirmed? && approved?) end def inactive_message @@ -201,6 +214,10 @@ class User < ApplicationRecord settings.notification_emails['pending_account'] end + def allows_trending_tag_emails? + settings.notification_emails['trending_tag'] + end + def hides_network? @hides_network ||= settings.hide_network end @@ -248,17 +265,20 @@ class User < ApplicationRecord end def password_required? - return false if Devise.pam_authentication || Devise.ldap_authentication + return false if external? + super end def send_reset_password_instructions - return false if encrypted_password.blank? && (Devise.pam_authentication || Devise.ldap_authentication) + return false if encrypted_password.blank? + super end def reset_password!(new_password, new_password_confirmation) - return false if encrypted_password.blank? && (Devise.pam_authentication || Devise.ldap_authentication) + return false if encrypted_password.blank? + super end diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb index b57807d1c..c5dbb58ba 100644 --- a/app/models/web/push_subscription.rb +++ b/app/models/web/push_subscription.rb @@ -20,6 +20,10 @@ class Web::PushSubscription < ApplicationRecord has_one :session_activation, foreign_key: 'web_push_subscription_id', inverse_of: :web_push_subscription + validates :endpoint, presence: true + validates :key_p256dh, presence: true + validates :key_auth, presence: true + def push(notification) I18n.with_locale(associated_user&.locale || I18n.default_locale) do push_payload(payload_for_notification(notification), 48.hours.seconds) diff --git a/app/policies/domain_allow_policy.rb b/app/policies/domain_allow_policy.rb new file mode 100644 index 000000000..5030453bb --- /dev/null +++ b/app/policies/domain_allow_policy.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class DomainAllowPolicy < ApplicationPolicy + def create? + admin? + end + + def destroy? + admin? + end +end diff --git a/app/policies/status_policy.rb b/app/policies/status_policy.rb index 5e3282681..fa5c0dd9c 100644 --- a/app/policies/status_policy.rb +++ b/app/policies/status_policy.rb @@ -19,7 +19,7 @@ class StatusPolicy < ApplicationPolicy elsif private? owned? || following_author? || mention_exists? else - current_account.nil? || !author_blocking? + current_account.nil? || (!author_blocking? && !author_blocking_domain?) end end @@ -65,6 +65,12 @@ class StatusPolicy < ApplicationPolicy end end + def author_blocking_domain? + return false if current_account.nil? || current_account.domain.nil? + + author.domain_blocking?(current_account.domain) + end + def blocking_author? return false if current_account.nil? diff --git a/app/policies/subscription_policy.rb b/app/policies/subscription_policy.rb deleted file mode 100644 index ac9a8a6c4..000000000 --- a/app/policies/subscription_policy.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -class SubscriptionPolicy < ApplicationPolicy - def index? - admin? - end -end diff --git a/app/policies/tag_policy.rb b/app/policies/tag_policy.rb index c63de01db..aaf70fcab 100644 --- a/app/policies/tag_policy.rb +++ b/app/policies/tag_policy.rb @@ -5,11 +5,11 @@ class TagPolicy < ApplicationPolicy staff? end - def hide? + def show? staff? end - def unhide? + def update? staff? end end diff --git a/app/presenters/account_relationships_presenter.rb b/app/presenters/account_relationships_presenter.rb index b05673a3d..08614b67c 100644 --- a/app/presenters/account_relationships_presenter.rb +++ b/app/presenters/account_relationships_presenter.rb @@ -6,7 +6,7 @@ class AccountRelationshipsPresenter :endorsed def initialize(account_ids, current_account_id, **options) - @account_ids = account_ids.map { |a| a.is_a?(Account) ? a.id : a } + @account_ids = account_ids.map { |a| a.is_a?(Account) ? a.id : a.to_i } @current_account_id = current_account_id @following = cached[:following].merge(Account.following_map(@uncached_account_ids, @current_account_id)) diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb index 534752932..ee559037f 100644 --- a/app/presenters/instance_presenter.rb +++ b/app/presenters/instance_presenter.rb @@ -20,8 +20,8 @@ class InstancePresenter Rails.cache.fetch('user_count') { User.confirmed.joins(:account).merge(Account.without_suspended).count } end - def active_user_count - Rails.cache.fetch('active_user_count') { Redis.current.pfcount(*(0..3).map { |i| "activity:logins:#{i.weeks.ago.utc.to_date.cweek}" }) } + def active_user_count(weeks = 4) + Rails.cache.fetch("active_user_count/#{weeks}") { Redis.current.pfcount(*(0...weeks).map { |i| "activity:logins:#{i.weeks.ago.utc.to_date.cweek}" }) } end def status_count @@ -33,7 +33,7 @@ class InstancePresenter end def sample_accounts - Rails.cache.fetch('sample_accounts', expires_in: 12.hours) { Account.discoverable.popular.limit(3) } + Rails.cache.fetch('sample_accounts', expires_in: 12.hours) { Account.local.discoverable.popular.limit(3) } end def version_number diff --git a/app/presenters/status_relationships_presenter.rb b/app/presenters/status_relationships_presenter.rb index 64e688d87..3cc905a75 100644 --- a/app/presenters/status_relationships_presenter.rb +++ b/app/presenters/status_relationships_presenter.rb @@ -1,7 +1,8 @@ # frozen_string_literal: true class StatusRelationshipsPresenter - attr_reader :reblogs_map, :favourites_map, :mutes_map, :pins_map + attr_reader :reblogs_map, :favourites_map, :mutes_map, :pins_map, + :bookmarks_map def initialize(statuses, current_account_id = nil, **options) if current_account_id.nil? diff --git a/app/serializers/activitypub/activity_serializer.rb b/app/serializers/activitypub/activity_serializer.rb index c06d5c87c..d0edad786 100644 --- a/app/serializers/activitypub/activity_serializer.rb +++ b/app/serializers/activitypub/activity_serializer.rb @@ -4,6 +4,7 @@ class ActivityPub::ActivitySerializer < ActivityPub::Serializer attributes :id, :type, :actor, :published, :to, :cc has_one :proper, key: :object, serializer: ActivityPub::NoteSerializer, if: :serialize_object? + attribute :proper_uri, key: :object, unless: :serialize_object? attribute :atom_uri, if: :announce? diff --git a/app/serializers/activitypub/actor_serializer.rb b/app/serializers/activitypub/actor_serializer.rb index 0644219fb..aa64936a7 100644 --- a/app/serializers/activitypub/actor_serializer.rb +++ b/app/serializers/activitypub/actor_serializer.rb @@ -6,12 +6,14 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer context :security context_extensions :manually_approves_followers, :featured, :also_known_as, - :moved_to, :property_value, :hashtag, :emoji, :identity_proof + :moved_to, :property_value, :identity_proof, + :discoverable attributes :id, :type, :following, :followers, :inbox, :outbox, :featured, :preferred_username, :name, :summary, - :url, :manually_approves_followers + :url, :manually_approves_followers, + :discoverable has_one :public_key, serializer: ActivityPub::PublicKeySerializer @@ -39,11 +41,19 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer delegate :moved?, to: :object def id - account_url(object) + object.instance_actor? ? instance_actor_url : account_url(object) end def type - object.bot? ? 'Service' : 'Person' + if object.instance_actor? + 'Application' + elsif object.bot? + 'Service' + elsif object.group? + 'Group' + else + 'Person' + end end def following @@ -55,7 +65,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer end def inbox - account_inbox_url(object) + object.instance_actor? ? instance_actor_inbox_url : account_inbox_url(object) end def outbox @@ -95,7 +105,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer end def url - short_account_url(object) + object.instance_actor? ? about_more_url(instance_actor: true) : short_account_url(object) end def avatar_exists? @@ -130,6 +140,8 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer end class TagSerializer < ActivityPub::Serializer + context_extensions :hashtag + include RoutingHelper attributes :type, :href, :name diff --git a/app/serializers/activitypub/move_serializer.rb b/app/serializers/activitypub/move_serializer.rb new file mode 100644 index 000000000..5675875fa --- /dev/null +++ b/app/serializers/activitypub/move_serializer.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +class ActivityPub::MoveSerializer < ActivityPub::Serializer + attributes :id, :type, :target, :actor + attribute :virtual_object, key: :object + + def id + [ActivityPub::TagManager.instance.uri_for(object.account), '#moves/', object.id].join + end + + def type + 'Move' + end + + def target + ActivityPub::TagManager.instance.uri_for(object.target_account) + end + + def virtual_object + ActivityPub::TagManager.instance.uri_for(object.account) + end + + def actor + ActivityPub::TagManager.instance.uri_for(object.account) + end +end diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb index 7225b2319..dce506fa2 100644 --- a/app/serializers/activitypub/note_serializer.rb +++ b/app/serializers/activitypub/note_serializer.rb @@ -1,8 +1,7 @@ # frozen_string_literal: true class ActivityPub::NoteSerializer < ActivityPub::Serializer - context_extensions :atom_uri, :conversation, :sensitive, - :hashtag, :emoji, :focal_point, :blurhash + context_extensions :atom_uri, :conversation, :sensitive, :voters_count attributes :id, :type, :summary, :in_reply_to, :published, :url, @@ -24,8 +23,10 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer attribute :end_time, if: :poll_and_expires? attribute :closed, if: :poll_and_expired? + attribute :voters_count, if: :poll_and_voters_count? + def id - raise Mastodon::NotPermittedError, 'Local-only statuses should not be serialized' if object.local_only? + raise Mastodon::NotPermittedError, 'Local-only statuses should not be serialized' if object.local_only? && !instance_options[:allow_local_only] ActivityPub::TagManager.instance.uri_for(object) end @@ -56,7 +57,7 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer type: :unordered, part_of: ActivityPub::TagManager.instance.replies_uri_for(object), items: replies.map(&:second), - next: last_id ? ActivityPub::TagManager.instance.replies_uri_for(object, page: true, min_id: last_id) : nil + next: last_id ? ActivityPub::TagManager.instance.replies_uri_for(object, page: true, min_id: last_id) : ActivityPub::TagManager.instance.replies_uri_for(object, page: true, only_other_accounts: true) ) ) end @@ -143,6 +144,10 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer alias end_time closed + def voters_count + object.preloadable_poll.voters_count + end + def poll_and_expires? object.preloadable_poll&.expires_at&.present? end @@ -151,7 +156,13 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer object.preloadable_poll&.expired? end + def poll_and_voters_count? + object.preloadable_poll&.voters_count + end + class MediaAttachmentSerializer < ActivityPub::Serializer + context_extensions :blurhash, :focal_point + include RoutingHelper attributes :type, :media_type, :url, :name, :blurhash @@ -199,6 +210,8 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer end class TagSerializer < ActivityPub::Serializer + context_extensions :hashtag + include RoutingHelper attributes :type, :href, :name diff --git a/app/serializers/activitypub/update_poll_serializer.rb b/app/serializers/activitypub/update_poll_serializer.rb index b894f309f..1d47b9764 100644 --- a/app/serializers/activitypub/update_poll_serializer.rb +++ b/app/serializers/activitypub/update_poll_serializer.rb @@ -14,7 +14,7 @@ class ActivityPub::UpdatePollSerializer < ActivityPub::Serializer end def actor - ActivityPub::TagManager.instance.uri_for(object) + ActivityPub::TagManager.instance.uri_for(object.account) end def to diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index efed199f3..e5e88c200 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -26,6 +26,7 @@ class InitialStateSerializer < ActiveModel::Serializer access_token: object.token, locale: I18n.locale, domain: Rails.configuration.x.local_domain, + title: instance_presenter.site_title, admin: object.admin&.id&.to_s, search_enabled: Chewy.enabled?, repository: Mastodon::Version.repository, @@ -34,21 +35,33 @@ class InitialStateSerializer < ActiveModel::Serializer invites_enabled: Setting.min_invite_role == 'user', mascot: instance_presenter.mascot&.file&.url, profile_directory: Setting.profile_directory, + trends: Setting.trends, } if object.current_account - store[:me] = object.current_account.id.to_s - store[:unfollow_modal] = object.current_account.user.setting_unfollow_modal - store[:boost_modal] = object.current_account.user.setting_boost_modal - store[:favourite_modal] = object.current_account.user.setting_favourite_modal - store[:delete_modal] = object.current_account.user.setting_delete_modal - store[:auto_play_gif] = object.current_account.user.setting_auto_play_gif - store[:display_media] = object.current_account.user.setting_display_media - store[:expand_spoilers] = object.current_account.user.setting_expand_spoilers - store[:reduce_motion] = object.current_account.user.setting_reduce_motion - store[:advanced_layout] = object.current_account.user.setting_advanced_layout - store[:is_staff] = object.current_account.user.staff? + store[:me] = object.current_account.id.to_s + store[:unfollow_modal] = object.current_account.user.setting_unfollow_modal + store[:boost_modal] = object.current_account.user.setting_boost_modal + store[:favourite_modal] = object.current_account.user.setting_favourite_modal + store[:delete_modal] = object.current_account.user.setting_delete_modal + store[:auto_play_gif] = object.current_account.user.setting_auto_play_gif + store[:display_media] = object.current_account.user.setting_display_media + store[:expand_spoilers] = object.current_account.user.setting_expand_spoilers + store[:reduce_motion] = object.current_account.user.setting_reduce_motion + store[:advanced_layout] = object.current_account.user.setting_advanced_layout + store[:use_blurhash] = object.current_account.user.setting_use_blurhash + store[:use_pending_items] = object.current_account.user.setting_use_pending_items + store[:is_staff] = object.current_account.user.staff? + store[:trends] = Setting.trends && object.current_account.user.setting_trends store[:default_content_type] = object.current_account.user.setting_default_content_type + store[:system_emoji_font] = object.current_account.user.setting_system_emoji_font + store[:crop_images] = object.current_account.user.setting_crop_images + else + store[:auto_play_gif] = Setting.auto_play_gif + store[:display_media] = Setting.display_media + store[:reduce_motion] = Setting.reduce_motion + store[:use_blurhash] = Setting.use_blurhash + store[:crop_images] = Setting.crop_images end store @@ -76,7 +89,7 @@ class InitialStateSerializer < ActiveModel::Serializer end def media_attachments - { accept_content_types: MediaAttachment::IMAGE_FILE_EXTENSIONS + MediaAttachment::VIDEO_FILE_EXTENSIONS + MediaAttachment::AUDIO_FILE_EXTENSIONS + MediaAttachment::IMAGE_MIME_TYPES + MediaAttachment::VIDEO_MIME_TYPES + MediaAttachment::AUDIO_MIME_TYPES } + { accept_content_types: MediaAttachment.supported_file_extensions + MediaAttachment.supported_mime_types } end private diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb index 28127437d..21ec0d4be 100644 --- a/app/serializers/manifest_serializer.rb +++ b/app/serializers/manifest_serializer.rb @@ -55,6 +55,8 @@ class ManifestSerializer < ActiveModel::Serializer { url_template: 'share?title={title}&text={text}&url={url}', action: 'share', + method: 'GET', + enctype: 'application/x-www-form-urlencoded', params: { title: 'title', text: 'text', diff --git a/app/serializers/nodeinfo/discovery_serializer.rb b/app/serializers/nodeinfo/discovery_serializer.rb new file mode 100644 index 000000000..07ab2a6ee --- /dev/null +++ b/app/serializers/nodeinfo/discovery_serializer.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class NodeInfo::DiscoverySerializer < ActiveModel::Serializer + include RoutingHelper + + attribute :links + + def links + [{ rel: 'http://nodeinfo.diaspora.software/ns/schema/2.0', href: nodeinfo_schema_url }] + end +end diff --git a/app/serializers/nodeinfo/serializer.rb b/app/serializers/nodeinfo/serializer.rb new file mode 100644 index 000000000..7ff8aabec --- /dev/null +++ b/app/serializers/nodeinfo/serializer.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +class NodeInfo::Serializer < ActiveModel::Serializer + include RoutingHelper + + attributes :version, :software, :protocols, :usage, :open_registrations + + def version + '2.0' + end + + def software + { name: 'mastodon', version: Mastodon::Version.to_s } + end + + def services + { outbound: [], inbound: [] } + end + + def protocols + %w(activitypub) + end + + def usage + { + users: { + total: instance_presenter.user_count, + active_month: instance_presenter.active_user_count(4), + active_halfyear: instance_presenter.active_user_count(24), + }, + + local_posts: instance_presenter.status_count, + } + end + + def open_registrations + Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode + end + + private + + def instance_presenter + @instance_presenter ||= InstancePresenter.new + end +end diff --git a/app/serializers/rest/account_serializer.rb b/app/serializers/rest/account_serializer.rb index c34d23452..7bdb5d7ff 100644 --- a/app/serializers/rest/account_serializer.rb +++ b/app/serializers/rest/account_serializer.rb @@ -3,9 +3,9 @@ class REST::AccountSerializer < ActiveModel::Serializer include RoutingHelper - attributes :id, :username, :acct, :display_name, :locked, :bot, :created_at, + attributes :id, :username, :acct, :display_name, :locked, :bot, :discoverable, :group, :created_at, :note, :url, :avatar, :avatar_static, :header, :header_static, - :followers_count, :following_count, :statuses_count + :followers_count, :following_count, :statuses_count, :last_status_at has_one :moved_to_account, key: :moved, serializer: REST::AccountSerializer, if: :moved_and_not_nested? has_many :emojis, serializer: REST::CustomEmojiSerializer @@ -29,7 +29,7 @@ class REST::AccountSerializer < ActiveModel::Serializer end def url - TagManager.instance.url_for(object) + ActivityPub::TagManager.instance.url_for(object) end def avatar diff --git a/app/serializers/rest/admin/account_serializer.rb b/app/serializers/rest/admin/account_serializer.rb new file mode 100644 index 000000000..f579d3302 --- /dev/null +++ b/app/serializers/rest/admin/account_serializer.rb @@ -0,0 +1,77 @@ +# frozen_string_literal: true + +class REST::Admin::AccountSerializer < ActiveModel::Serializer + attributes :id, :username, :domain, :created_at, + :email, :ip, :role, :confirmed, :suspended, + :silenced, :disabled, :approved, :locale, + :invite_request + + attribute :created_by_application_id, if: :created_by_application? + attribute :invited_by_account_id, if: :invited? + + has_one :account, serializer: REST::AccountSerializer + + def id + object.id.to_s + end + + def email + object.user_email + end + + def ip + object.user_current_sign_in_ip.to_s.presence + end + + def role + object.user_role + end + + def suspended + object.suspended? + end + + def silenced + object.silenced? + end + + def confirmed + object.user_confirmed? + end + + def disabled + object.user_disabled? + end + + def approved + object.user_approved? + end + + def account + object + end + + def locale + object.user_locale + end + + def created_by_application_id + object.user&.created_by_application_id&.to_s&.presence + end + + def invite_request + object.user&.invite_request&.text + end + + def invited_by_account_id + object.user&.invite&.user&.account_id&.to_s&.presence + end + + def invited? + object.user&.invited? + end + + def created_by_application? + object.user&.created_by_application_id&.present? + end +end diff --git a/app/serializers/rest/admin/report_serializer.rb b/app/serializers/rest/admin/report_serializer.rb new file mode 100644 index 000000000..7a77132c0 --- /dev/null +++ b/app/serializers/rest/admin/report_serializer.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class REST::Admin::ReportSerializer < ActiveModel::Serializer + attributes :id, :action_taken, :comment, :created_at, :updated_at + + has_one :account, serializer: REST::Admin::AccountSerializer + has_one :target_account, serializer: REST::Admin::AccountSerializer + has_one :assigned_account, serializer: REST::Admin::AccountSerializer + has_one :action_taken_by_account, serializer: REST::Admin::AccountSerializer + + has_many :statuses, serializer: REST::StatusSerializer + + def id + object.id.to_s + end +end diff --git a/app/serializers/rest/credential_account_serializer.rb b/app/serializers/rest/credential_account_serializer.rb index fb195eb07..be0d763dc 100644 --- a/app/serializers/rest/credential_account_serializer.rb +++ b/app/serializers/rest/credential_account_serializer.rb @@ -12,6 +12,7 @@ class REST::CredentialAccountSerializer < REST::AccountSerializer language: user.setting_default_language, note: object.note, fields: object.fields.map(&:to_h), + follow_requests_count: FollowRequest.where(target_account: object).limit(40).count, } end end diff --git a/app/serializers/rest/custom_emoji_serializer.rb b/app/serializers/rest/custom_emoji_serializer.rb index 65686a866..aff58e4d9 100644 --- a/app/serializers/rest/custom_emoji_serializer.rb +++ b/app/serializers/rest/custom_emoji_serializer.rb @@ -5,6 +5,8 @@ class REST::CustomEmojiSerializer < ActiveModel::Serializer attributes :shortcode, :url, :static_url, :visible_in_picker + attribute :category, if: :category_loaded? + def url full_asset_url(object.image.url) end @@ -12,4 +14,12 @@ class REST::CustomEmojiSerializer < ActiveModel::Serializer def static_url full_asset_url(object.image.url(:static)) end + + def category + object.category.name + end + + def category_loaded? + object.association(:category).loaded? && object.category.present? + end end diff --git a/app/serializers/rest/featured_tag_serializer.rb b/app/serializers/rest/featured_tag_serializer.rb new file mode 100644 index 000000000..08121ff16 --- /dev/null +++ b/app/serializers/rest/featured_tag_serializer.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class REST::FeaturedTagSerializer < ActiveModel::Serializer + attributes :id, :name, :statuses_count, :last_status_at + + def id + object.id.to_s + end +end diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index 98c53c84a..e913f0c64 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -3,9 +3,9 @@ class REST::InstanceSerializer < ActiveModel::Serializer include RoutingHelper - attributes :uri, :title, :description, :email, + attributes :uri, :title, :short_description, :description, :email, :version, :urls, :stats, :thumbnail, :max_toot_chars, :poll_limits, - :languages, :registrations + :languages, :registrations, :approval_required has_one :contact_account, serializer: REST::AccountSerializer @@ -19,6 +19,10 @@ class REST::InstanceSerializer < ActiveModel::Serializer Setting.site_title end + def short_description + Setting.site_short_description + end + def description Setting.site_description end @@ -68,6 +72,10 @@ class REST::InstanceSerializer < ActiveModel::Serializer Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode end + def approval_required + Setting.registrations_mode == 'approved' + end + private def instance_presenter diff --git a/app/serializers/rest/marker_serializer.rb b/app/serializers/rest/marker_serializer.rb new file mode 100644 index 000000000..2eaf3d507 --- /dev/null +++ b/app/serializers/rest/marker_serializer.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class REST::MarkerSerializer < ActiveModel::Serializer + attributes :last_read_id, :version, :updated_at + + def last_read_id + object.last_read_id.to_s + end + + def version + object.lock_version + end +end diff --git a/app/serializers/rest/poll_serializer.rb b/app/serializers/rest/poll_serializer.rb index 356c45b83..df6ebd0d4 100644 --- a/app/serializers/rest/poll_serializer.rb +++ b/app/serializers/rest/poll_serializer.rb @@ -2,12 +2,13 @@ class REST::PollSerializer < ActiveModel::Serializer attributes :id, :expires_at, :expired, - :multiple, :votes_count + :multiple, :votes_count, :voters_count has_many :loaded_options, key: :options has_many :emojis, serializer: REST::CustomEmojiSerializer attribute :voted, if: :current_user? + attribute :own_votes, if: :current_user? def id object.id.to_s @@ -21,6 +22,10 @@ class REST::PollSerializer < ActiveModel::Serializer object.voted?(current_user.account) end + def own_votes + object.own_votes(current_user.account) + end + def current_user? !current_user.nil? end diff --git a/app/serializers/rest/search_serializer.rb b/app/serializers/rest/search_serializer.rb index 157f543ae..ee9b421eb 100644 --- a/app/serializers/rest/search_serializer.rb +++ b/app/serializers/rest/search_serializer.rb @@ -1,12 +1,7 @@ # frozen_string_literal: true class REST::SearchSerializer < ActiveModel::Serializer - attributes :hashtags - has_many :accounts, serializer: REST::AccountSerializer has_many :statuses, serializer: REST::StatusSerializer - - def hashtags - object.hashtags.map(&:name) - end + has_many :hashtags, serializer: REST::TagSerializer end diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index b07937014..023913028 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -61,7 +61,7 @@ class REST::StatusSerializer < ActiveModel::Serializer end def uri - OStatus::TagManager.instance.uri_for(object) + ActivityPub::TagManager.instance.uri_for(object) end def content @@ -69,7 +69,7 @@ class REST::StatusSerializer < ActiveModel::Serializer end def url - TagManager.instance.url_for(object) + ActivityPub::TagManager.instance.url_for(object) end def favourited @@ -97,8 +97,8 @@ class REST::StatusSerializer < ActiveModel::Serializer end def bookmarked - if instance_options && instance_options[:bookmarks] - instance_options[:bookmarks].bookmarks_map[object.id] || false + if instance_options && instance_options[:relationships] + instance_options[:relationships].bookmarks_map[object.id] || false else current_user.account.bookmarked?(object) end @@ -143,7 +143,7 @@ class REST::StatusSerializer < ActiveModel::Serializer end def url - TagManager.instance.url_for(object.account) + ActivityPub::TagManager.instance.url_for(object.account) end def acct diff --git a/app/serializers/rest/v2/search_serializer.rb b/app/serializers/rest/v2/search_serializer.rb deleted file mode 100644 index cdb6b3a53..000000000 --- a/app/serializers/rest/v2/search_serializer.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -class REST::V2::SearchSerializer < ActiveModel::Serializer - has_many :accounts, serializer: REST::AccountSerializer - has_many :statuses, serializer: REST::StatusSerializer - has_many :hashtags, serializer: REST::TagSerializer -end diff --git a/app/serializers/rest/web_push_subscription_serializer.rb b/app/serializers/rest/web_push_subscription_serializer.rb index 7fd952a56..194cc0a8c 100644 --- a/app/serializers/rest/web_push_subscription_serializer.rb +++ b/app/serializers/rest/web_push_subscription_serializer.rb @@ -4,7 +4,7 @@ class REST::WebPushSubscriptionSerializer < ActiveModel::Serializer attributes :id, :endpoint, :alerts, :server_key def alerts - object.data&.dig('alerts') || {} + (object.data&.dig('alerts') || {}).each_with_object({}) { |(k, v), h| h[k] = ActiveModel::Type::Boolean.new.cast(v) } end def server_key diff --git a/app/serializers/rss/account_serializer.rb b/app/serializers/rss/account_serializer.rb index 88eca79ed..ee972ff96 100644 --- a/app/serializers/rss/account_serializer.rb +++ b/app/serializers/rss/account_serializer.rb @@ -2,15 +2,15 @@ class RSS::AccountSerializer include ActionView::Helpers::NumberHelper - include StreamEntriesHelper + include AccountsHelper include RoutingHelper - def render(account, statuses) + def render(account, statuses, tag) builder = RSSBuilder.new builder.title("#{display_name(account)} (@#{account.local_username_and_domain})") .description(account_description(account)) - .link(TagManager.instance.url_for(account)) + .link(tag.present? ? short_account_tag_url(account, tag) : short_account_url(account)) .logo(full_pack_url('media/images/logo.svg')) .accent_color('2b90d9') @@ -20,12 +20,12 @@ class RSS::AccountSerializer statuses.each do |status| builder.item do |item| item.title(status.title) - .link(TagManager.instance.url_for(status)) + .link(ActivityPub::TagManager.instance.url_for(status)) .pub_date(status.created_at) .description(status.spoiler_text.presence || Formatter.instance.format(status, inline_poll_options: true).to_str) status.media_attachments.each do |media| - item.enclosure(full_asset_url(media.file.url(:original, false)), media.file.content_type, length: media.file.size) + item.enclosure(full_asset_url(media.file.url(:original, false)), media.file.content_type, media.file.size) end end end @@ -33,7 +33,7 @@ class RSS::AccountSerializer builder.to_xml end - def self.render(account, statuses) - new.render(account, statuses) + def self.render(account, statuses, tag) + new.render(account, statuses, tag) end end diff --git a/app/serializers/rss/tag_serializer.rb b/app/serializers/rss/tag_serializer.rb index 644380149..ea26189a2 100644 --- a/app/serializers/rss/tag_serializer.rb +++ b/app/serializers/rss/tag_serializer.rb @@ -3,7 +3,6 @@ class RSS::TagSerializer include ActionView::Helpers::NumberHelper include ActionView::Helpers::SanitizeHelper - include StreamEntriesHelper include RoutingHelper def render(tag, statuses) @@ -18,12 +17,12 @@ class RSS::TagSerializer statuses.each do |status| builder.item do |item| item.title(status.title) - .link(TagManager.instance.url_for(status)) + .link(ActivityPub::TagManager.instance.url_for(status)) .pub_date(status.created_at) .description(status.spoiler_text.presence || Formatter.instance.format(status).to_str) status.media_attachments.each do |media| - item.enclosure(full_asset_url(media.file.url(:original, false)), media.file.content_type, length: media.file.size) + item.enclosure(full_asset_url(media.file.url(:original, false)), media.file.content_type, media.file.size) end end end diff --git a/app/serializers/webfinger_serializer.rb b/app/serializers/webfinger_serializer.rb index 8c0b07702..c67363b8f 100644 --- a/app/serializers/webfinger_serializer.rb +++ b/app/serializers/webfinger_serializer.rb @@ -10,17 +10,25 @@ class WebfingerSerializer < ActiveModel::Serializer end def aliases - [short_account_url(object), account_url(object)] + if object.instance_actor? + [instance_actor_url] + else + [short_account_url(object), account_url(object)] + end end def links - [ - { rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: short_account_url(object) }, - { rel: 'http://schemas.google.com/g/2010#updates-from', type: 'application/atom+xml', href: account_url(object, format: 'atom') }, - { rel: 'self', type: 'application/activity+json', href: account_url(object) }, - { rel: 'salmon', href: api_salmon_url(object.id) }, - { rel: 'magic-public-key', href: "data:application/magic-public-key,#{object.magic_key}" }, - { rel: 'http://ostatus.org/schema/1.0/subscribe', template: "#{authorize_interaction_url}?uri={uri}" }, - ] + if object.instance_actor? + [ + { rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: about_more_url(instance_actor: true) }, + { rel: 'self', type: 'application/activity+json', href: instance_actor_url }, + ] + else + [ + { rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: short_account_url(object) }, + { rel: 'self', type: 'application/activity+json', href: account_url(object) }, + { rel: 'http://ostatus.org/schema/1.0/subscribe', template: "#{authorize_interaction_url}?uri={uri}" }, + ] + end end end diff --git a/app/services/account_search_service.rb b/app/services/account_search_service.rb index 7bdffbbd2..d217dabb3 100644 --- a/app/services/account_search_service.rb +++ b/app/services/account_search_service.rb @@ -4,98 +4,177 @@ class AccountSearchService < BaseService attr_reader :query, :limit, :offset, :options, :account def call(query, account = nil, options = {}) - @query = query.strip - @limit = options[:limit].to_i - @offset = options[:offset].to_i - @options = options - @account = account + @acct_hint = query&.start_with?('@') + @query = query&.strip&.gsub(/\A@/, '') + @limit = options[:limit].to_i + @offset = options[:offset].to_i + @options = options + @account = account - search_service_results + search_service_results.compact.uniq end private def search_service_results - return [] if query_blank_or_hashtag? || limit < 1 + return [] if query.blank? || limit < 1 - if resolving_non_matching_remote_account? - [ResolveAccountService.new.call("#{query_username}@#{query_domain}")].compact - else - search_results_and_exact_match.compact.uniq.slice(0, limit) - end + [exact_match] + search_results end - def resolving_non_matching_remote_account? - options[:resolve] && !exact_match && !domain_is_local? - end + def exact_match + return unless offset.zero? && username_complete? - def search_results_and_exact_match - exact = [exact_match] - return exact if !exact[0].nil? && limit == 1 - exact + search_results.to_a - end + return @exact_match if defined?(@exact_match) - def query_blank_or_hashtag? - query.blank? || query.start_with?('#') + @exact_match = begin + if options[:resolve] + ResolveAccountService.new.call(query) + elsif domain_is_local? + Account.find_local(query_username) + else + Account.find_remote(query_username, query_domain) + end + end end - def split_query_string - @_split_query_string ||= query.gsub(/\A@/, '').split('@') - end + def search_results + return [] if limit_for_non_exact_results.zero? - def query_username - @_query_username ||= split_query_string.first || '' + @search_results ||= begin + results = from_elasticsearch if Chewy.enabled? + results ||= from_database + results + end end - def query_domain - @_query_domain ||= query_without_split? ? nil : split_query_string.last + def from_database + if account + advanced_search_results + else + simple_search_results + end end - def query_without_split? - split_query_string.size == 1 + def advanced_search_results + Account.advanced_search_for(terms_for_query, account, limit_for_non_exact_results, options[:following], offset) end - def domain_is_local? - @_domain_is_local ||= TagManager.instance.local_domain?(query_domain) + def simple_search_results + Account.search_for(terms_for_query, limit_for_non_exact_results, offset) end - def search_from - options[:following] && account ? account.following : Account - end + def from_elasticsearch + must_clauses = [{ multi_match: { query: terms_for_query, fields: likely_acct? ? %w(acct.edge_ngram acct) : %w(acct.edge_ngram acct display_name.edge_ngram display_name), type: 'most_fields', operator: 'and' } }] + should_clauses = [] - def exact_match - @_exact_match ||= begin - if domain_is_local? - search_from.without_suspended.find_local(query_username) - else - search_from.without_suspended.find_remote(query_username, query_domain) + if account + return [] if options[:following] && following_ids.empty? + + if options[:following] + must_clauses << { terms: { id: following_ids } } + elsif following_ids.any? + should_clauses << { terms: { id: following_ids, boost: 100 } } end end + + query = { bool: { must: must_clauses, should: should_clauses } } + functions = [reputation_score_function, followers_score_function, time_distance_function] + + records = AccountsIndex.query(function_score: { query: query, functions: functions, boost_mode: 'multiply', score_mode: 'avg' }) + .limit(limit_for_non_exact_results) + .offset(offset) + .objects + .compact + + ActiveRecord::Associations::Preloader.new.preload(records, :account_stat) + + records + rescue Faraday::ConnectionFailed, Parslet::ParseFailed + nil end - def search_results - @_search_results ||= begin - if account - advanced_search_results - else - simple_search_results - end - end + def reputation_score_function + { + script_score: { + script: { + source: "(doc['followers_count'].value + 0.0) / (doc['followers_count'].value + doc['following_count'].value + 1)", + }, + }, + } end - def advanced_search_results - Account.advanced_search_for(terms_for_query, account, limit, options[:following], offset) + def followers_score_function + { + field_value_factor: { + field: 'followers_count', + modifier: 'log2p', + missing: 0, + }, + } end - def simple_search_results - Account.search_for(terms_for_query, limit, offset) + def time_distance_function + { + gauss: { + last_status_at: { + scale: '30d', + offset: '30d', + decay: 0.3, + }, + }, + } + end + + def following_ids + @following_ids ||= account.active_relationships.pluck(:target_account_id) + [account.id] + end + + def limit_for_non_exact_results + if exact_match? + limit - 1 + else + limit + end end def terms_for_query if domain_is_local? query_username else - "#{query_username} #{query_domain}" + query end end + + def split_query_string + @split_query_string ||= query.split('@') + end + + def query_username + @query_username ||= split_query_string.first || '' + end + + def query_domain + @query_domain ||= query_without_split? ? nil : split_query_string.last + end + + def query_without_split? + split_query_string.size == 1 + end + + def domain_is_local? + @domain_is_local ||= TagManager.instance.local_domain?(query_domain) + end + + def exact_match? + exact_match.present? + end + + def username_complete? + query.include?('@') && "@#{query}" =~ Account::MENTION_RE + end + + def likely_acct? + @acct_hint || username_complete? + end end diff --git a/app/services/activitypub/fetch_featured_collection_service.rb b/app/services/activitypub/fetch_featured_collection_service.rb index 6a137b520..2c2770466 100644 --- a/app/services/activitypub/fetch_featured_collection_service.rb +++ b/app/services/activitypub/fetch_featured_collection_service.rb @@ -4,13 +4,12 @@ class ActivityPub::FetchFeaturedCollectionService < BaseService include JsonLdHelper def call(account) - return if account.featured_collection_url.blank? + return if account.featured_collection_url.blank? || account.suspended? || account.local? @account = account @json = fetch_resource(@account.featured_collection_url, true) return unless supported_context? - return if @account.suspended? || @account.local? case @json['type'] when 'Collection', 'CollectionPage' diff --git a/app/services/activitypub/fetch_remote_account_service.rb b/app/services/activitypub/fetch_remote_account_service.rb index 3c2044941..d65c8f951 100644 --- a/app/services/activitypub/fetch_remote_account_service.rb +++ b/app/services/activitypub/fetch_remote_account_service.rb @@ -2,18 +2,22 @@ class ActivityPub::FetchRemoteAccountService < BaseService include JsonLdHelper + include DomainControlHelper SUPPORTED_TYPES = %w(Application Group Organization Person Service).freeze # Does a WebFinger roundtrip on each call, unless `only_key` is true def call(uri, id: true, prefetched_body: nil, break_on_redirect: false, only_key: false) + return if domain_not_allowed?(uri) return ActivityPub::TagManager.instance.uri_to_resource(uri, Account) if ActivityPub::TagManager.instance.local_uri?(uri) - @json = if prefetched_body.nil? - fetch_resource(uri, id) - else - body_to_json(prefetched_body, compare_id: id ? uri : nil) - end + @json = begin + if prefetched_body.nil? + fetch_resource(uri, id) + else + body_to_json(prefetched_body, compare_id: id ? uri : nil) + end + end return if !supported_context? || !expected_type? || (break_on_redirect && @json['movedTo'].present?) diff --git a/app/services/activitypub/fetch_remote_poll_service.rb b/app/services/activitypub/fetch_remote_poll_service.rb index 854a32d05..1c79ecf11 100644 --- a/app/services/activitypub/fetch_remote_poll_service.rb +++ b/app/services/activitypub/fetch_remote_poll_service.rb @@ -5,7 +5,9 @@ class ActivityPub::FetchRemotePollService < BaseService def call(poll, on_behalf_of = nil) json = fetch_resource(poll.status.uri, true, on_behalf_of) + return unless supported_context?(json) + ActivityPub::ProcessPollService.new.call(poll, json) end end diff --git a/app/services/activitypub/fetch_remote_status_service.rb b/app/services/activitypub/fetch_remote_status_service.rb index 469821032..cf4f62899 100644 --- a/app/services/activitypub/fetch_remote_status_service.rb +++ b/app/services/activitypub/fetch_remote_status_service.rb @@ -5,18 +5,18 @@ class ActivityPub::FetchRemoteStatusService < BaseService # Should be called when uri has already been checked for locality def call(uri, id: true, prefetched_body: nil, on_behalf_of: nil) - @json = if prefetched_body.nil? - fetch_resource(uri, id, on_behalf_of) - else - body_to_json(prefetched_body, compare_id: id ? uri : nil) - end + @json = begin + if prefetched_body.nil? + fetch_resource(uri, id, on_behalf_of) + else + body_to_json(prefetched_body, compare_id: id ? uri : nil) + end + end - return unless supported_context? && expected_type? - - return if actor_id.nil? || !trustworthy_attribution?(@json['id'], actor_id) + return if !(supported_context? && expected_type?) || actor_id.nil? || !trustworthy_attribution?(@json['id'], actor_id) actor = ActivityPub::TagManager.instance.uri_to_resource(actor_id, Account) - actor = ActivityPub::FetchRemoteAccountService.new.call(actor_id, id: true) if actor.nil? || needs_update(actor) + actor = ActivityPub::FetchRemoteAccountService.new.call(actor_id, id: true) if actor.nil? || needs_update?(actor) return if actor.nil? || actor.suspended? @@ -46,7 +46,7 @@ class ActivityPub::FetchRemoteStatusService < BaseService equals_or_includes_any?(@json['type'], ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES) end - def needs_update(actor) + def needs_update?(actor) actor.possibly_stale? end end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index ad22d37fe..cef658e19 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -2,11 +2,12 @@ class ActivityPub::ProcessAccountService < BaseService include JsonLdHelper + include DomainControlHelper # Should be called with confirmed valid JSON # and WebFinger-resolved username and domain def call(username, domain, json, options = {}) - return if json['inbox'].blank? || unsupported_uri_scheme?(json['id']) + return if json['inbox'].blank? || unsupported_uri_scheme?(json['id']) || domain_not_allowed?(domain) @options = options @json = json @@ -55,7 +56,7 @@ class ActivityPub::ProcessAccountService < BaseService @account.domain = @domain @account.private_key = nil @account.suspended_at = domain_block.created_at if auto_suspend? - @account.silenced_at = domain_block.created_at if auto_silence? + @account.silenced_at = domain_block.created_at if auto_silence? end def update_account @@ -82,6 +83,7 @@ class ActivityPub::ProcessAccountService < BaseService @account.fields = property_values || {} @account.also_known_as = as_array(@json['alsoKnownAs'] || []).map { |item| value_or_id(item) } @account.actor_type = actor_type + @account.discoverable = @json['discoverable'] || false end def set_fetchable_attributes! @@ -205,7 +207,7 @@ class ActivityPub::ProcessAccountService < BaseService def domain_block return @domain_block if defined?(@domain_block) - @domain_block = DomainBlock.find_by(domain: @domain) + @domain_block = DomainBlock.rule_for(@domain) end def key_changed? diff --git a/app/services/activitypub/process_collection_service.rb b/app/services/activitypub/process_collection_service.rb index 881df478b..a2a2e7071 100644 --- a/app/services/activitypub/process_collection_service.rb +++ b/app/services/activitypub/process_collection_service.rb @@ -8,9 +8,7 @@ class ActivityPub::ProcessCollectionService < BaseService @json = Oj.load(body, mode: :strict) @options = options - return unless supported_context? - return if different_actor? && verify_account!.nil? - return if @account.suspended? || @account.local? + return if !supported_context? || (different_actor? && verify_account!.nil?) || @account.suspended? || @account.local? case @json['type'] when 'Collection', 'CollectionPage' diff --git a/app/services/activitypub/process_poll_service.rb b/app/services/activitypub/process_poll_service.rb index 61357abd3..903b6a78a 100644 --- a/app/services/activitypub/process_poll_service.rb +++ b/app/services/activitypub/process_poll_service.rb @@ -5,6 +5,7 @@ class ActivityPub::ProcessPollService < BaseService def call(poll, json) @json = json + return unless expected_type? previous_expires_at = poll.expires_at @@ -27,7 +28,9 @@ class ActivityPub::ProcessPollService < BaseService end end - latest_options = items.map { |item| item['name'].presence || item['content'] } + voters_count = @json['votersCount'] + + latest_options = items.map { |item| item['name'].presence || item['content'] }.compact # If for some reasons the options were changed, it invalidates all previous # votes, so we need to remove them @@ -38,7 +41,8 @@ class ActivityPub::ProcessPollService < BaseService last_fetched_at: Time.now.utc, expires_at: expires_at, options: latest_options, - cached_tallies: items.map { |item| item.dig('replies', 'totalItems') || 0 } + cached_tallies: items.map { |item| item.dig('replies', 'totalItems') || 0 }, + voters_count: voters_count ) rescue ActiveRecord::StaleObjectError poll.reload diff --git a/app/services/after_block_domain_from_account_service.rb b/app/services/after_block_domain_from_account_service.rb index a87c2e792..f50bde261 100644 --- a/app/services/after_block_domain_from_account_service.rb +++ b/app/services/after_block_domain_from_account_service.rb @@ -10,12 +10,24 @@ class AfterBlockDomainFromAccountService < BaseService @account = account @domain = domain + clear_notifications! + remove_follows! reject_existing_followers! reject_pending_follow_requests! end private + def remove_follows! + @account.active_relationships.where(account: Account.where(domain: @domain)).includes(:target_account).reorder(nil).find_each do |follow| + UnfollowService.new.call(@account, follow.target_account) + end + end + + def clear_notifications! + Notification.where(account: @account).where(from_account: Account.where(domain: @domain)).in_batches.delete_all + end + def reject_existing_followers! @account.passive_relationships.where(account: Account.where(domain: @domain)).includes(:account).reorder(nil).find_each do |follow| reject_follow!(follow) diff --git a/app/services/after_block_service.rb b/app/services/after_block_service.rb index 706db0d63..2a0e10a79 100644 --- a/app/services/after_block_service.rb +++ b/app/services/after_block_service.rb @@ -2,43 +2,25 @@ class AfterBlockService < BaseService def call(account, target_account) - clear_home_feed(account, target_account) - clear_notifications(account, target_account) - clear_conversations(account, target_account) + @account = account + @target_account = target_account + + clear_home_feed! + clear_notifications! + clear_conversations! end private - def clear_home_feed(account, target_account) - FeedManager.instance.clear_from_timeline(account, target_account) + def clear_home_feed! + FeedManager.instance.clear_from_timeline(@account, @target_account) end - def clear_conversations(account, target_account) - AccountConversation.where(account: account) - .where('? = ANY(participant_account_ids)', target_account.id) - .in_batches - .destroy_all + def clear_conversations! + AccountConversation.where(account: @account).where('? = ANY(participant_account_ids)', @target_account.id).in_batches.destroy_all end - def clear_notifications(account, target_account) - Notification.where(account: account) - .joins(:follow) - .where(activity_type: 'Follow', follows: { account_id: target_account.id }) - .delete_all - - Notification.where(account: account) - .joins(mention: :status) - .where(activity_type: 'Mention', statuses: { account_id: target_account.id }) - .delete_all - - Notification.where(account: account) - .joins(:favourite) - .where(activity_type: 'Favourite', favourites: { account_id: target_account.id }) - .delete_all - - Notification.where(account: account) - .joins(:status) - .where(activity_type: 'Status', statuses: { account_id: target_account.id }) - .delete_all + def clear_notifications! + Notification.where(account: @account).where(from_account: @target_account).in_batches.delete_all end end diff --git a/app/services/app_sign_up_service.rb b/app/services/app_sign_up_service.rb index 6dee9cd81..c9739c77d 100644 --- a/app/services/app_sign_up_service.rb +++ b/app/services/app_sign_up_service.rb @@ -4,9 +4,10 @@ class AppSignUpService < BaseService def call(app, params) return unless allowed_registrations? - user_params = params.slice(:email, :password, :agreement, :locale) - account_params = params.slice(:username) - user = User.create!(user_params.merge(created_by_application: app, password_confirmation: user_params[:password], account_attributes: account_params)) + user_params = params.slice(:email, :password, :agreement, :locale) + account_params = params.slice(:username) + invite_request_params = { text: params[:reason] } + user = User.create!(user_params.merge(created_by_application: app, password_confirmation: user_params[:password], account_attributes: account_params, invite_request_attributes: invite_request_params)) Doorkeeper::AccessToken.create!(application: app, resource_owner_id: user.id, diff --git a/app/services/authorize_follow_service.rb b/app/services/authorize_follow_service.rb index 29b8700c7..49bef727e 100644 --- a/app/services/authorize_follow_service.rb +++ b/app/services/authorize_follow_service.rb @@ -11,25 +11,17 @@ class AuthorizeFollowService < BaseService follow_request.authorize! end - create_notification(follow_request) unless source_account.local? + create_notification(follow_request) if !source_account.local? && source_account.activitypub? follow_request end private def create_notification(follow_request) - if follow_request.account.ostatus? - NotificationWorker.perform_async(build_xml(follow_request), follow_request.target_account_id, follow_request.account_id) - elsif follow_request.account.activitypub? - ActivityPub::DeliveryWorker.perform_async(build_json(follow_request), follow_request.target_account_id, follow_request.account.inbox_url) - end + ActivityPub::DeliveryWorker.perform_async(build_json(follow_request), follow_request.target_account_id, follow_request.account.inbox_url) end def build_json(follow_request) Oj.dump(serialize_payload(follow_request, ActivityPub::AcceptFollowSerializer)) end - - def build_xml(follow_request) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request)) - end end diff --git a/app/services/backup_service.rb b/app/services/backup_service.rb index 5fcc98057..cc9fb1f4e 100644 --- a/app/services/backup_service.rb +++ b/app/services/backup_service.rb @@ -149,7 +149,8 @@ class BackupService < BaseService ActiveModelSerializers::SerializableResource.new( object, serializer: serializer, - adapter: ActivityPub::Adapter + adapter: ActivityPub::Adapter, + allow_local_only: true, ).as_json end @@ -163,5 +164,7 @@ class BackupService < BaseService io.write(buffer) end end + rescue Errno::ENOENT + Rails.logger.warn "Could not backup file #{filename}: file not found" end end diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index 02f7076f7..31237337a 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class BatchedRemoveStatusService < BaseService - include StreamEntryRenderer include Redisable # Delete given statuses and reblogs of them @@ -9,19 +8,16 @@ class BatchedRemoveStatusService < BaseService # Dispatch Salmon deletes, unique per domain, of the deleted statuses, but only local ones # Remove statuses from home feeds # Push delete events to streaming API for home feeds and public feeds - # @param [Status] statuses A preferably batched array of statuses + # @param [Enumerable<Status>] statuses A preferably batched array of statuses # @param [Hash] options # @option [Boolean] :skip_side_effects def call(statuses, **options) - statuses = Status.where(id: statuses.map(&:id)).includes(:account, :stream_entry).flat_map { |status| [status] + status.reblogs.includes(:account, :stream_entry).to_a } + statuses = Status.where(id: statuses.map(&:id)).includes(:account).flat_map { |status| [status] + status.reblogs.includes(:account).to_a } @mentions = statuses.each_with_object({}) { |s, h| h[s.id] = s.active_mentions.includes(:account).to_a } @tags = statuses.each_with_object({}) { |s, h| h[s.id] = s.tags.pluck(:name) } - @stream_entry_batches = [] - @salmon_batches = [] - @json_payloads = statuses.each_with_object({}) { |s, h| h[s.id] = Oj.dump(event: :delete, payload: s.id.to_s) } - @activity_xml = {} + @json_payloads = statuses.each_with_object({}) { |s, h| h[s.id] = Oj.dump(event: :delete, payload: s.id.to_s) } # Ensure that rendered XML reflects destroyed state statuses.each do |status| @@ -39,29 +35,17 @@ class BatchedRemoveStatusService < BaseService unpush_from_home_timelines(account, account_statuses) unpush_from_list_timelines(account, account_statuses) - - batch_stream_entries(account, account_statuses) if account.local? end # Cannot be batched statuses.each do |status| unpush_from_public_timelines(status) unpush_from_direct_timelines(status) if status.direct_visibility? - batch_salmon_slaps(status) if status.local? end - - Pubsubhubbub::RawDistributionWorker.push_bulk(@stream_entry_batches) { |batch| batch } - NotificationWorker.push_bulk(@salmon_batches) { |batch| batch } end private - def batch_stream_entries(account, statuses) - statuses.each do |status| - @stream_entry_batches << [build_xml(status.stream_entry), account.id] - end - end - def unpush_from_home_timelines(account, statuses) recipients = account.followers_for_local_distribution.to_a @@ -97,8 +81,8 @@ class BatchedRemoveStatusService < BaseService end @tags[status.id].each do |hashtag| - redis.publish("timeline:hashtag:#{hashtag}", payload) - redis.publish("timeline:hashtag:#{hashtag}:local", payload) if status.local? + redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", payload) + redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", payload) if status.local? end end end @@ -107,25 +91,9 @@ class BatchedRemoveStatusService < BaseService payload = @json_payloads[status.id] redis.pipelined do @mentions[status.id].each do |mention| - redis.publish("timeline:direct:#{mention.account.id}", payload) if mention.account.local? + FeedManager.instance.unpush_from_direct(mention.account, status) if mention.account.local? end - redis.publish("timeline:direct:#{status.account.id}", payload) if status.account.local? - end - end - - def batch_salmon_slaps(status) - return if @mentions[status.id].empty? - - recipients = @mentions[status.id].map(&:account).reject(&:local?).select(&:ostatus?).uniq(&:domain).map(&:id) - - recipients.each do |recipient_id| - @salmon_batches << [build_xml(status.stream_entry), status.account_id, recipient_id] + FeedManager.instance.unpush_from_direct(status.account, status) if status.account.local? end end - - def build_xml(stream_entry) - return @activity_xml[stream_entry.id] if @activity_xml.key?(stream_entry.id) - - @activity_xml[stream_entry.id] = stream_entry_to_xml(stream_entry) - end end diff --git a/app/services/block_domain_service.rb b/app/services/block_domain_service.rb index 497f0394b..9f0860674 100644 --- a/app/services/block_domain_service.rb +++ b/app/services/block_domain_service.rb @@ -3,21 +3,30 @@ class BlockDomainService < BaseService attr_reader :domain_block - def call(domain_block) + def call(domain_block, update = false) @domain_block = domain_block process_domain_block! + process_retroactive_updates! if update end private - def process_domain_block! - clear_media! if domain_block.reject_media? + def process_retroactive_updates! + # If the domain block severity has been changed, undo the appropriate limitations + scope = Account.by_domain_and_subdomains(domain_block.domain) + + scope.where(silenced_at: domain_block.created_at).in_batches.update_all(silenced_at: nil) unless domain_block.silence? + scope.where(suspended_at: domain_block.created_at).in_batches.update_all(suspended_at: nil) unless domain_block.suspend? + end + def process_domain_block! if domain_block.silence? silence_accounts! elsif domain_block.suspend? suspend_accounts! end + + clear_media! if domain_block.reject_media? end def invalidate_association_caches! @@ -44,8 +53,7 @@ class BlockDomainService < BaseService def suspend_accounts! blocked_domain_accounts.without_suspended.reorder(nil).find_each do |account| - UnsubscribeService.new.call(account) if account.subscribed? - SuspendAccountService.new.call(account, suspended_at: @domain_block.created_at) + SuspendAccountService.new.call(account, reserve_username: true, suspended_at: @domain_block.created_at) end end @@ -76,7 +84,7 @@ class BlockDomainService < BaseService end def blocked_domain_accounts - Account.where(domain: blocked_domain) + Account.by_domain_and_subdomains(blocked_domain) end def media_from_blocked_domain @@ -84,6 +92,6 @@ class BlockDomainService < BaseService end def emojis_from_blocked_domains - CustomEmoji.where(domain: blocked_domain) + CustomEmoji.by_domain_and_subdomains(blocked_domain) end end diff --git a/app/services/block_service.rb b/app/services/block_service.rb index 9050a4858..266a0f4b9 100644 --- a/app/services/block_service.rb +++ b/app/services/block_service.rb @@ -8,30 +8,22 @@ class BlockService < BaseService UnfollowService.new.call(account, target_account) if account.following?(target_account) UnfollowService.new.call(target_account, account) if target_account.following?(account) - RejectFollowService.new.call(account, target_account) if target_account.requested?(account) + RejectFollowService.new.call(target_account, account) if target_account.requested?(account) block = account.block!(target_account) BlockWorker.perform_async(account.id, target_account.id) - create_notification(block) unless target_account.local? + create_notification(block) if !target_account.local? && target_account.activitypub? block end private def create_notification(block) - if block.target_account.ostatus? - NotificationWorker.perform_async(build_xml(block), block.account_id, block.target_account_id) - elsif block.target_account.activitypub? - ActivityPub::DeliveryWorker.perform_async(build_json(block), block.account_id, block.target_account.inbox_url) - end + ActivityPub::DeliveryWorker.perform_async(build_json(block), block.account_id, block.target_account.inbox_url) end def build_json(block) Oj.dump(serialize_payload(block, ActivityPub::BlockSerializer)) end - - def build_xml(block) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.block_salmon(block)) - end end diff --git a/app/services/bootstrap_timeline_service.rb b/app/services/bootstrap_timeline_service.rb index db2c83e5d..c489601c1 100644 --- a/app/services/bootstrap_timeline_service.rb +++ b/app/services/bootstrap_timeline_service.rb @@ -17,7 +17,11 @@ class BootstrapTimelineService < BaseService def autofollow_bootstrap_timeline_accounts! bootstrap_timeline_accounts.each do |target_account| - FollowService.new.call(@source_account, target_account) + begin + FollowService.new.call(@source_account, target_account) + rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError + nil + end end end @@ -40,7 +44,9 @@ class BootstrapTimelineService < BaseService def local_unlocked_accounts(usernames) Account.local + .without_suspended .where(username: usernames) .where(locked: false) + .where(moved_to_account_id: nil) end end diff --git a/app/services/concerns/author_extractor.rb b/app/services/concerns/author_extractor.rb deleted file mode 100644 index c2419e9ec..000000000 --- a/app/services/concerns/author_extractor.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -module AuthorExtractor - def author_from_xml(xml, update_profile = true) - return nil if xml.nil? - - # Try <email> for acct - acct = xml.at_xpath('./xmlns:author/xmlns:email', xmlns: OStatus::TagManager::XMLNS)&.content - - # Try <name> + <uri> - if acct.blank? - username = xml.at_xpath('./xmlns:author/xmlns:name', xmlns: OStatus::TagManager::XMLNS)&.content - uri = xml.at_xpath('./xmlns:author/xmlns:uri', xmlns: OStatus::TagManager::XMLNS)&.content - - return nil if username.blank? || uri.blank? - - domain = Addressable::URI.parse(uri).normalized_host - acct = "#{username}@#{domain}" - end - - ResolveAccountService.new.call(acct, update_profile: update_profile) - end -end diff --git a/app/services/concerns/payloadable.rb b/app/services/concerns/payloadable.rb index 13d9c3548..7f9f21c4b 100644 --- a/app/services/concerns/payloadable.rb +++ b/app/services/concerns/payloadable.rb @@ -14,6 +14,6 @@ module Payloadable end def signing_enabled? - true + ENV['AUTHORIZED_FETCH'] != 'true' && !Rails.configuration.x.whitelist_mode end end diff --git a/app/services/concerns/stream_entry_renderer.rb b/app/services/concerns/stream_entry_renderer.rb deleted file mode 100644 index 9f6c8a082..000000000 --- a/app/services/concerns/stream_entry_renderer.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -module StreamEntryRenderer - def stream_entry_to_xml(stream_entry) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.entry(stream_entry, true)) - end -end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index b66dc342e..72f716dc5 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -37,6 +37,7 @@ class FanOutOnWriteService < BaseService def deliver_to_self(status) Rails.logger.debug "Delivering status #{status.id} to author" FeedManager.instance.push_to_home(status.account, status) + FeedManager.instance.push_to_direct(status.account, status) if status.direct_visibility? end def deliver_to_followers(status) @@ -76,8 +77,8 @@ class FanOutOnWriteService < BaseService Rails.logger.debug "Delivering status #{status.id} to hashtags" status.tags.pluck(:name).each do |hashtag| - Redis.current.publish("timeline:hashtag:#{hashtag}", @payload) - Redis.current.publish("timeline:hashtag:#{hashtag}:local", @payload) if status.local? + Redis.current.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", @payload) + Redis.current.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", @payload) if status.local? end end @@ -98,11 +99,9 @@ class FanOutOnWriteService < BaseService def deliver_to_direct_timelines(status) Rails.logger.debug "Delivering status #{status.id} to direct timelines" - status.mentions.includes(:account).each do |mention| - Redis.current.publish("timeline:direct:#{mention.account.id}", @payload) if mention.account.local? + FeedInsertWorker.push_bulk(status.mentions.includes(:account).map(&:account).select { |mentioned_account| mentioned_account.local? }) do |account| + [status.id, account.id, :direct] end - - Redis.current.publish("timeline:direct:#{status.account.id}", @payload) if status.account.local? end def deliver_to_own_conversation(status) diff --git a/app/services/favourite_service.rb b/app/services/favourite_service.rb index 128a24ad6..02b26458a 100644 --- a/app/services/favourite_service.rb +++ b/app/services/favourite_service.rb @@ -30,8 +30,6 @@ class FavouriteService < BaseService if status.account.local? NotifyService.new.call(status.account, favourite) - elsif status.account.ostatus? - NotificationWorker.perform_async(build_xml(favourite), favourite.account_id, status.account_id) elsif status.account.activitypub? ActivityPub::DeliveryWorker.perform_async(build_json(favourite), favourite.account_id, status.account.inbox_url) end @@ -46,8 +44,4 @@ class FavouriteService < BaseService def build_json(favourite) Oj.dump(serialize_payload(favourite, ActivityPub::LikeSerializer)) end - - def build_xml(favourite) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.favourite_salmon(favourite)) - end end diff --git a/app/services/fetch_atom_service.rb b/app/services/fetch_atom_service.rb deleted file mode 100644 index d6508a988..000000000 --- a/app/services/fetch_atom_service.rb +++ /dev/null @@ -1,93 +0,0 @@ -# frozen_string_literal: true - -class FetchAtomService < BaseService - include JsonLdHelper - - def call(url) - return if url.blank? - - result = process(url) - - # retry without ActivityPub - result ||= process(url) if @unsupported_activity - - result - rescue OpenSSL::SSL::SSLError => e - Rails.logger.debug "SSL error: #{e}" - nil - rescue HTTP::ConnectionError => e - Rails.logger.debug "HTTP ConnectionError: #{e}" - nil - end - - private - - def process(url, terminal = false) - @url = url - perform_request { |response| process_response(response, terminal) } - end - - def perform_request(&block) - accept = 'text/html' - accept = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams", application/atom+xml, ' + accept unless @unsupported_activity - - Request.new(:get, @url).add_headers('Accept' => accept).perform(&block) - end - - def process_response(response, terminal = false) - return nil if response.code != 200 - - if response.mime_type == 'application/atom+xml' - [@url, { prefetched_body: response.body_with_limit }, :ostatus] - elsif ['application/activity+json', 'application/ld+json'].include?(response.mime_type) - body = response.body_with_limit - json = body_to_json(body) - if supported_context?(json) && equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) && json['inbox'].present? - [json['id'], { prefetched_body: body, id: true }, :activitypub] - elsif supported_context?(json) && expected_type?(json) - [json['id'], { prefetched_body: body, id: true }, :activitypub] - else - @unsupported_activity = true - nil - end - elsif !terminal - link_header = response['Link'] && parse_link_header(response) - - if link_header&.find_link(%w(rel alternate)) - process_link_headers(link_header) - elsif response.mime_type == 'text/html' - process_html(response) - end - end - end - - def expected_type?(json) - equals_or_includes_any?(json['type'], ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES) - end - - def process_html(response) - page = Nokogiri::HTML(response.body_with_limit) - - json_link = page.xpath('//link[@rel="alternate"]').find { |link| ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(link['type']) } - atom_link = page.xpath('//link[@rel="alternate"]').find { |link| link['type'] == 'application/atom+xml' } - - result ||= process(json_link['href'], terminal: true) unless json_link.nil? || @unsupported_activity - result ||= process(atom_link['href'], terminal: true) unless atom_link.nil? - - result - end - - def process_link_headers(link_header) - json_link = link_header.find_link(%w(rel alternate), %w(type application/activity+json)) || link_header.find_link(%w(rel alternate), ['type', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"']) - atom_link = link_header.find_link(%w(rel alternate), %w(type application/atom+xml)) - - result ||= process(json_link.href, terminal: true) unless json_link.nil? || @unsupported_activity - result ||= process(atom_link.href, terminal: true) unless atom_link.nil? - - result - end - - def parse_link_header(response) - LinkHeader.parse(response['Link'].is_a?(Array) ? response['Link'].first : response['Link']) - end -end diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb index 494aaed75..5d4a7c303 100644 --- a/app/services/fetch_link_card_service.rb +++ b/app/services/fetch_link_card_service.rb @@ -22,14 +22,14 @@ class FetchLinkCardService < BaseService RedisLock.acquire(lock_options) do |lock| if lock.acquired? @card = PreviewCard.find_by(url: @url) - process_url if @card.nil? || @card.updated_at <= 2.weeks.ago + process_url if @card.nil? || @card.updated_at <= 2.weeks.ago || @card.missing_image? else raise Mastodon::RaceConditionError end end attach_card if @card&.persisted? - rescue HTTP::Error, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e + rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e Rails.logger.debug "Error fetching link #{@url}: #{e}" nil end @@ -39,11 +39,11 @@ class FetchLinkCardService < BaseService def process_url @card ||= PreviewCard.new(url: @url) - failed = Request.new(:head, @url).perform do |res| - res.code != 405 && res.code != 501 && (res.code != 200 || res.mime_type != 'text/html') - end + attempt_oembed || attempt_opengraph + end - return if failed + def html + return @html if defined?(@html) Request.new(:get, @url).perform do |res| if res.code == 200 && res.mime_type == 'text/html' @@ -54,10 +54,6 @@ class FetchLinkCardService < BaseService @html_charset = nil end end - - return if @html.nil? - - attempt_oembed || attempt_opengraph end def attach_card @@ -71,7 +67,7 @@ class FetchLinkCardService < BaseService else html = Nokogiri::HTML(@status.text) links = html.css('a') - urls = links.map { |a| Addressable::URI.parse(a['href']).normalize unless skip_link?(a) }.compact + urls = links.map { |a| Addressable::URI.parse(a['href']) unless skip_link?(a) }.compact.map(&:normalize).compact end urls.reject { |uri| bad_url?(uri) }.first @@ -84,22 +80,27 @@ class FetchLinkCardService < BaseService def mention_link?(a) @status.mentions.any? do |mention| - a['href'] == TagManager.instance.url_for(mention.account) + a['href'] == ActivityPub::TagManager.instance.url_for(mention.account) end end def skip_link?(a) # Avoid links for hashtags and mentions (microformats) - a['rel']&.include?('tag') || a['class']&.include?('u-url') || mention_link?(a) + a['rel']&.include?('tag') || a['class']&.match?(/u-url|h-card/) || mention_link?(a) end def attempt_oembed - service = FetchOEmbedService.new - embed = service.call(@url, html: @html) - url = Addressable::URI.parse(service.endpoint_url) + service = FetchOEmbedService.new + url_domain = Addressable::URI.parse(@url).normalized_host + cached_endpoint = Rails.cache.read("oembed_endpoint:#{url_domain}") + + embed = service.call(@url, cached_endpoint: cached_endpoint) unless cached_endpoint.nil? + embed ||= service.call(@url, html: html) unless html.nil? return false if embed.nil? + url = Addressable::URI.parse(service.endpoint_url) + @card.type = embed[:type] @card.title = embed[:title] || '' @card.author_name = embed[:author_name] || '' @@ -133,6 +134,8 @@ class FetchLinkCardService < BaseService end def attempt_opengraph + return if html.nil? + detector = CharlockHolmes::EncodingDetector.new detector.strip_tags = true diff --git a/app/services/fetch_oembed_service.rb b/app/services/fetch_oembed_service.rb index 10176cfb9..76d971bc5 100644 --- a/app/services/fetch_oembed_service.rb +++ b/app/services/fetch_oembed_service.rb @@ -1,13 +1,20 @@ # frozen_string_literal: true class FetchOEmbedService + ENDPOINT_CACHE_EXPIRES_IN = 24.hours.freeze + attr_reader :url, :options, :format, :endpoint_url def call(url, options = {}) @url = url @options = options - discover_endpoint! + if @options[:cached_endpoint] + parse_cached_endpoint! + else + discover_endpoint! + end + fetch! end @@ -32,10 +39,32 @@ class FetchOEmbedService return if @endpoint_url.blank? @endpoint_url = (Addressable::URI.parse(@url) + @endpoint_url).to_s + + cache_endpoint! rescue Addressable::URI::InvalidURIError @endpoint_url = nil end + def parse_cached_endpoint! + cached = @options[:cached_endpoint] + + return if cached[:endpoint].nil? || cached[:format].nil? + + @endpoint_url = Addressable::Template.new(cached[:endpoint]).expand(url: @url).to_s + @format = cached[:format] + end + + def cache_endpoint! + url_domain = Addressable::URI.parse(@url).normalized_host + + endpoint_hash = { + endpoint: @endpoint_url.gsub(/(=(http[s]?(%3A|:)(\/\/|%2F%2F)))([^&]*)/i, '={url}'), + format: @format, + } + + Rails.cache.write("oembed_endpoint:#{url_domain}", endpoint_hash, expires_in: ENDPOINT_CACHE_EXPIRES_IN) + end + def fetch! return if @endpoint_url.blank? diff --git a/app/services/fetch_remote_account_service.rb b/app/services/fetch_remote_account_service.rb index cfc560022..3cd06e30f 100644 --- a/app/services/fetch_remote_account_service.rb +++ b/app/services/fetch_remote_account_service.rb @@ -1,45 +1,17 @@ # frozen_string_literal: true class FetchRemoteAccountService < BaseService - include AuthorExtractor - def call(url, prefetched_body = nil, protocol = :ostatus) if prefetched_body.nil? - resource_url, resource_options, protocol = FetchAtomService.new.call(url) + resource_url, resource_options, protocol = FetchResourceService.new.call(url) else resource_url = url resource_options = { prefetched_body: prefetched_body } end case protocol - when :ostatus - process_atom(resource_url, **resource_options) when :activitypub ActivityPub::FetchRemoteAccountService.new.call(resource_url, **resource_options) end end - - private - - def process_atom(url, prefetched_body:) - xml = Nokogiri::XML(prefetched_body) - xml.encoding = 'utf-8' - - account = author_from_xml(xml.at_xpath('/xmlns:feed', xmlns: OStatus::TagManager::XMLNS), false) - - UpdateRemoteProfileService.new.call(xml, account) if account.present? && trusted_domain?(url, account) - - account - rescue TypeError - Rails.logger.debug "Unparseable URL given: #{url}" - nil - rescue Nokogiri::XML::XPath::SyntaxError - Rails.logger.debug 'Invalid XML or missing namespace' - nil - end - - def trusted_domain?(url, account) - domain = Addressable::URI.parse(url).normalized_host - domain.casecmp(account.domain).zero? || domain.casecmp(Addressable::URI.parse(account.remote_url.presence || account.uri).normalized_host).zero? - end end diff --git a/app/services/fetch_remote_status_service.rb b/app/services/fetch_remote_status_service.rb index 9c3008035..208dc7809 100644 --- a/app/services/fetch_remote_status_service.rb +++ b/app/services/fetch_remote_status_service.rb @@ -1,45 +1,17 @@ # frozen_string_literal: true class FetchRemoteStatusService < BaseService - include AuthorExtractor - def call(url, prefetched_body = nil, protocol = :ostatus) if prefetched_body.nil? - resource_url, resource_options, protocol = FetchAtomService.new.call(url) + resource_url, resource_options, protocol = FetchResourceService.new.call(url) else resource_url = url resource_options = { prefetched_body: prefetched_body } end case protocol - when :ostatus - process_atom(resource_url, **resource_options) when :activitypub ActivityPub::FetchRemoteStatusService.new.call(resource_url, **resource_options) end end - - private - - def process_atom(url, prefetched_body:) - Rails.logger.debug "Processing Atom for remote status at #{url}" - - xml = Nokogiri::XML(prefetched_body) - xml.encoding = 'utf-8' - - account = author_from_xml(xml.at_xpath('/xmlns:entry', xmlns: OStatus::TagManager::XMLNS)) - domain = Addressable::URI.parse(url).normalized_host - - return nil unless !account.nil? && confirmed_domain?(domain, account) - - statuses = ProcessFeedService.new.call(prefetched_body, account) - statuses.first - rescue Nokogiri::XML::XPath::SyntaxError - Rails.logger.debug 'Invalid XML or missing namespace' - nil - end - - def confirmed_domain?(domain, account) - account.domain.nil? || domain.casecmp(account.domain).zero? || domain.casecmp(Addressable::URI.parse(account.remote_url.presence || account.uri).normalized_host).zero? - end end diff --git a/app/services/fetch_resource_service.rb b/app/services/fetch_resource_service.rb new file mode 100644 index 000000000..3676d899d --- /dev/null +++ b/app/services/fetch_resource_service.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +class FetchResourceService < BaseService + include JsonLdHelper + + ACCEPT_HEADER = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams", text/html' + + def call(url) + return if url.blank? + + process(url) + rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e + Rails.logger.debug "Error fetching resource #{@url}: #{e}" + nil + end + + private + + def process(url, terminal = false) + @url = url + + perform_request { |response| process_response(response, terminal) } + end + + def perform_request(&block) + Request.new(:get, @url).add_headers('Accept' => ACCEPT_HEADER).on_behalf_of(Account.representative).perform(&block) + end + + def process_response(response, terminal = false) + return nil if response.code != 200 + + if ['application/activity+json', 'application/ld+json'].include?(response.mime_type) + body = response.body_with_limit + json = body_to_json(body) + + [json['id'], { prefetched_body: body, id: true }, :activitypub] if supported_context?(json) && (equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) || expected_type?(json)) + elsif !terminal + link_header = response['Link'] && parse_link_header(response) + + if link_header&.find_link(%w(rel alternate)) + process_link_headers(link_header) + elsif response.mime_type == 'text/html' + process_html(response) + end + end + end + + def expected_type?(json) + equals_or_includes_any?(json['type'], ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES) + end + + def process_html(response) + page = Nokogiri::HTML(response.body_with_limit) + json_link = page.xpath('//link[@rel="alternate"]').find { |link| ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(link['type']) } + + process(json_link['href'], terminal: true) unless json_link.nil? + end + + def process_link_headers(link_header) + json_link = link_header.find_link(%w(rel alternate), %w(type application/activity+json)) || link_header.find_link(%w(rel alternate), ['type', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"']) + + process(json_link.href, terminal: true) unless json_link.nil? + end + + def parse_link_header(response) + LinkHeader.parse(response['Link'].is_a?(Array) ? response['Link'].first : response['Link']) + end +end diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb index 0305e2d62..dc47804c0 100644 --- a/app/services/follow_service.rb +++ b/app/services/follow_service.rb @@ -8,12 +8,12 @@ class FollowService < BaseService # @param [Account] source_account From which to follow # @param [String, Account] uri User URI to follow in the form of username@domain (or account record) # @param [true, false, nil] reblogs Whether or not to show reblogs, defaults to true - def call(source_account, target_account, reblogs: nil) + def call(source_account, target_account, reblogs: nil, bypass_locked: false) reblogs = true if reblogs.nil? target_account = ResolveAccountService.new.call(target_account, skip_webfinger: true) raise ActiveRecord::RecordNotFound if target_account.nil? || target_account.id == source_account.id || target_account.suspended? - raise Mastodon::NotPermittedError if target_account.blocking?(source_account) || source_account.blocking?(target_account) || target_account.moved? + raise Mastodon::NotPermittedError if target_account.blocking?(source_account) || source_account.blocking?(target_account) || target_account.moved? || (!target_account.local? && target_account.ostatus?) || source_account.domain_blocking?(target_account.domain) if source_account.following?(target_account) # We're already following this account, but we'll call follow! again to @@ -30,9 +30,9 @@ class FollowService < BaseService ActivityTracker.increment('activity:interactions') - if target_account.locked? || target_account.activitypub? + if (target_account.locked? && !bypass_locked) || source_account.silenced? || target_account.activitypub? request_follow(source_account, target_account, reblogs: reblogs) - else + elsif target_account.local? direct_follow(source_account, target_account, reblogs: reblogs) end end @@ -44,9 +44,6 @@ class FollowService < BaseService if target_account.local? LocalNotificationWorker.perform_async(target_account.id, follow_request.id, follow_request.class.name) - elsif target_account.ostatus? - NotificationWorker.perform_async(build_follow_request_xml(follow_request), source_account.id, target_account.id) - AfterRemoteFollowRequestWorker.perform_async(follow_request.id) elsif target_account.activitypub? ActivityPub::DeliveryWorker.perform_async(build_json(follow_request), source_account.id, target_account.inbox_url) end @@ -57,27 +54,12 @@ class FollowService < BaseService def direct_follow(source_account, target_account, reblogs: true) follow = source_account.follow!(target_account, reblogs: reblogs) - if target_account.local? - LocalNotificationWorker.perform_async(target_account.id, follow.id, follow.class.name) - else - Pubsubhubbub::SubscribeWorker.perform_async(target_account.id) unless target_account.subscribed? - NotificationWorker.perform_async(build_follow_xml(follow), source_account.id, target_account.id) - AfterRemoteFollowWorker.perform_async(follow.id) - end - + LocalNotificationWorker.perform_async(target_account.id, follow.id, follow.class.name) MergeWorker.perform_async(target_account.id, source_account.id) follow end - def build_follow_request_xml(follow_request) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.follow_request_salmon(follow_request)) - end - - def build_follow_xml(follow) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.follow_salmon(follow)) - end - def build_json(follow_request) Oj.dump(serialize_payload(follow_request, ActivityPub::FollowSerializer)) end diff --git a/app/services/hashtag_query_service.rb b/app/services/hashtag_query_service.rb index 5773d78c6..196de0639 100644 --- a/app/services/hashtag_query_service.rb +++ b/app/services/hashtag_query_service.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class HashtagQueryService < BaseService + LIMIT_PER_MODE = 4 + def call(tag, params, account = nil, local = false) tags = tags_for(Array(tag.name) | Array(params[:any])).pluck(:id) all = tags_for(params[:all]) @@ -14,7 +16,7 @@ class HashtagQueryService < BaseService private - def tags_for(tags) - Tag.where(name: tags.map(&:downcase)) if tags.presence + def tags_for(names) + Tag.matching_name(Array(names).take(LIMIT_PER_MODE)) if names.present? end end diff --git a/app/services/move_service.rb b/app/services/move_service.rb new file mode 100644 index 000000000..da0c62c4e --- /dev/null +++ b/app/services/move_service.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +class MoveService < BaseService + def call(migration) + @migration = migration + @source_account = migration.account + @target_account = migration.target_account + + update_redirect! + process_local_relationships! + distribute_update! + distribute_move! + end + + private + + def update_redirect! + @source_account.update!(moved_to_account: @target_account) + end + + def process_local_relationships! + MoveWorker.perform_async(@source_account.id, @target_account.id) + end + + def distribute_update! + ActivityPub::UpdateDistributionWorker.perform_async(@source_account.id) + end + + def distribute_move! + ActivityPub::MoveDistributionWorker.perform_async(@migration.id) + end +end diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index b5c721589..9364a6ae8 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -9,7 +9,7 @@ class NotifyService < BaseService return if recipient.user.nil? || blocked? create_notification! - push_notification! if @notification.browserable? + push_notification! push_to_conversation! if direct_message? send_email! if email_enabled? rescue ActiveRecord::RecordInvalid diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index c2584e090..936e6ac55 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -49,7 +49,13 @@ class PostStatusService < BaseService def preprocess_attributes! if @text.blank? && @options[:spoiler_text].present? @text = '.' - @text = @media.find(&:video?) ? '📹' : '🖼' if @media.size > 0 + if @media.find(&:video?) || @media.find(&:gifv?) + @text = '📹' + elsif @media.find(&:audio?) + @text = '🎵' + elsif @media.find(&:image?) + @text = '🖼' + end end @visibility = @options[:visibility] || @account.user&.setting_default_privacy @visibility = :unlisted if @visibility == :public && @account.silenced? @@ -91,12 +97,7 @@ class PostStatusService < BaseService def postprocess_status! LinkCrawlWorker.perform_async(@status.id) unless @status.spoiler_text? DistributionWorker.perform_async(@status.id) - - unless @status.local_only? - Pubsubhubbub::DistributionWorker.perform_async(@status.stream_entry.id) - ActivityPub::DistributionWorker.perform_async(@status.id) - end - + ActivityPub::DistributionWorker.perform_async(@status.id) unless @status.local_only? PollExpirationNotifyWorker.perform_at(@status.poll.expires_at, @status.poll.id) if @status.poll end @@ -107,7 +108,7 @@ class PostStatusService < BaseService @media = @account.media_attachments.where(status_id: nil).where(id: @options[:media_ids].take(4).map(&:to_i)) - raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:video?) + raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:audio_or_video?) end def language_from_option(str) @@ -183,7 +184,7 @@ class PostStatusService < BaseService def poll_attributes return if @options[:poll].blank? - @options[:poll].merge(account: @account) + @options[:poll].merge(account: @account, voters_count: 0) end def scheduled_options diff --git a/app/services/precompute_feed_service.rb b/app/services/precompute_feed_service.rb index 076dedaca..029c2f6e5 100644 --- a/app/services/precompute_feed_service.rb +++ b/app/services/precompute_feed_service.rb @@ -3,6 +3,7 @@ class PrecomputeFeedService < BaseService def call(account) FeedManager.instance.populate_feed(account) + FeedManager.instance.populate_direct_feed(account) ensure Redis.current.del("account:#{account.id}:regeneration") end diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb deleted file mode 100644 index 30a9dd85e..000000000 --- a/app/services/process_feed_service.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -class ProcessFeedService < BaseService - def call(body, account, **options) - @options = options - - xml = Nokogiri::XML(body) - xml.encoding = 'utf-8' - - update_author(body, account) - process_entries(xml, account) - end - - private - - def update_author(body, account) - RemoteProfileUpdateWorker.perform_async(account.id, body.force_encoding('UTF-8'), true) - end - - def process_entries(xml, account) - xml.xpath('//xmlns:entry', xmlns: OStatus::TagManager::XMLNS).reverse_each.map { |entry| process_entry(entry, account) }.compact - end - - def process_entry(xml, account) - activity = OStatus::Activity::General.new(xml, account, @options) - activity.specialize&.perform if activity.status? - rescue ActiveRecord::RecordInvalid => e - Rails.logger.debug "Nothing was saved for #{activity.id} because: #{e}" - nil - end -end diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index d5ec076a8..e8e139b05 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -5,16 +5,14 @@ class ProcessHashtagsService < BaseService tags = Extractor.extract_hashtags(status.text) if status.local? records = [] - tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |name| - tag = Tag.where(name: name).first_or_create(name: name) - + Tag.find_or_create_by_names(tags) do |tag| status.tags << tag records << tag TrendingTags.record_use!(tag, status.account, status.created_at) if status.public_visibility? end - return unless status.public_visibility? || status.unlisted_visibility? + return unless status.distributable? status.account.featured_tags.where(tag_id: records.map(&:id)).each do |featured_tag| featured_tag.increment(status.created_at) diff --git a/app/services/process_interaction_service.rb b/app/services/process_interaction_service.rb deleted file mode 100644 index 1fca3832b..000000000 --- a/app/services/process_interaction_service.rb +++ /dev/null @@ -1,151 +0,0 @@ -# frozen_string_literal: true - -class ProcessInteractionService < BaseService - include AuthorExtractor - include Authorization - - # Record locally the remote interaction with our user - # @param [String] envelope Salmon envelope - # @param [Account] target_account Account the Salmon was addressed to - def call(envelope, target_account) - body = salmon.unpack(envelope) - - xml = Nokogiri::XML(body) - xml.encoding = 'utf-8' - - account = author_from_xml(xml.at_xpath('/xmlns:entry', xmlns: OStatus::TagManager::XMLNS)) - - return if account.nil? || account.suspended? - - if salmon.verify(envelope, account.keypair) - RemoteProfileUpdateWorker.perform_async(account.id, body.force_encoding('UTF-8'), true) - - case verb(xml) - when :follow - follow!(account, target_account) unless target_account.locked? || target_account.blocking?(account) || target_account.domain_blocking?(account.domain) - when :request_friend - follow_request!(account, target_account) unless !target_account.locked? || target_account.blocking?(account) || target_account.domain_blocking?(account.domain) - when :authorize - authorize_follow_request!(account, target_account) - when :reject - reject_follow_request!(account, target_account) - when :unfollow - unfollow!(account, target_account) - when :favorite - favourite!(xml, account) - when :unfavorite - unfavourite!(xml, account) - when :post - add_post!(body, account) if mentions_account?(xml, target_account) - when :share - add_post!(body, account) unless status(xml).nil? - when :delete - delete_post!(xml, account) - when :block - reflect_block!(account, target_account) - when :unblock - reflect_unblock!(account, target_account) - end - end - rescue HTTP::Error, OStatus2::BadSalmonError, Mastodon::NotPermittedError - nil - end - - private - - def mentions_account?(xml, account) - xml.xpath('/xmlns:entry/xmlns:link[@rel="mentioned"]', xmlns: OStatus::TagManager::XMLNS).each { |mention_link| return true if [OStatus::TagManager.instance.uri_for(account), OStatus::TagManager.instance.url_for(account)].include?(mention_link.attribute('href').value) } - false - end - - def verb(xml) - raw = xml.at_xpath('//activity:verb', activity: OStatus::TagManager::AS_XMLNS).content - OStatus::TagManager::VERBS.key(raw) - rescue - :post - end - - def follow!(account, target_account) - follow = account.follow!(target_account) - FollowRequest.find_by(account: account, target_account: target_account)&.destroy - NotifyService.new.call(target_account, follow) - end - - def follow_request!(account, target_account) - return if account.requested?(target_account) - - follow_request = FollowRequest.create!(account: account, target_account: target_account) - NotifyService.new.call(target_account, follow_request) - end - - def authorize_follow_request!(account, target_account) - follow_request = FollowRequest.find_by(account: target_account, target_account: account) - follow_request&.authorize! - Pubsubhubbub::SubscribeWorker.perform_async(account.id) unless account.subscribed? - end - - def reject_follow_request!(account, target_account) - follow_request = FollowRequest.find_by(account: target_account, target_account: account) - follow_request&.reject! - end - - def unfollow!(account, target_account) - account.unfollow!(target_account) - FollowRequest.find_by(account: account, target_account: target_account)&.destroy - end - - def reflect_block!(account, target_account) - UnfollowService.new.call(target_account, account) if target_account.following?(account) - account.block!(target_account) - end - - def reflect_unblock!(account, target_account) - UnblockService.new.call(account, target_account) - end - - def delete_post!(xml, account) - status = Status.find(xml.at_xpath('//xmlns:id', xmlns: OStatus::TagManager::XMLNS).content) - - return if status.nil? - - authorize_with account, status, :destroy? - - RemovalWorker.perform_async(status.id) - end - - def favourite!(xml, from_account) - current_status = status(xml) - - return if current_status.nil? - - favourite = current_status.favourites.where(account: from_account).first_or_create!(account: from_account) - NotifyService.new.call(current_status.account, favourite) - end - - def unfavourite!(xml, from_account) - current_status = status(xml) - - return if current_status.nil? - - favourite = current_status.favourites.where(account: from_account).first - favourite&.destroy - end - - def add_post!(body, account) - ProcessingWorker.perform_async(account.id, body.force_encoding('UTF-8')) - end - - def status(xml) - uri = activity_id(xml) - return nil unless OStatus::TagManager.instance.local_id?(uri) - Status.find(OStatus::TagManager.instance.unique_tag_to_local_id(uri, 'Status')) - end - - def activity_id(xml) - xml.at_xpath('//activity:object', activity: OStatus::TagManager::AS_XMLNS).at_xpath('./xmlns:id', xmlns: OStatus::TagManager::XMLNS).content - end - - def salmon - @salmon ||= OStatus2::Salmon.new - end -end diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index 1804e0c93..19de37717 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class ProcessMentionsService < BaseService - include StreamEntryRenderer include Payloadable # Scan status for mentions and fetch remote mentioned users, create @@ -34,6 +33,7 @@ class ProcessMentionsService < BaseService end status.save! + check_for_spam(status) mentions.each { |mention| create_notification(mention) } end @@ -41,7 +41,7 @@ class ProcessMentionsService < BaseService private def mention_undeliverable?(mentioned_account) - mentioned_account.nil? || (!mentioned_account.local? && mentioned_account.ostatus? && @status.stream_entry.hidden?) + mentioned_account.nil? || (!mentioned_account.local? && mentioned_account.ostatus?) end def create_notification(mention) @@ -49,17 +49,11 @@ class ProcessMentionsService < BaseService if mentioned_account.local? LocalNotificationWorker.perform_async(mentioned_account.id, mention.id, mention.class.name) - elsif mentioned_account.ostatus? && !@status.stream_entry.hidden? && !@status.local_only? - NotificationWorker.perform_async(ostatus_xml, @status.account_id, mentioned_account.id) elsif mentioned_account.activitypub? && !@status.local_only? ActivityPub::DeliveryWorker.perform_async(activitypub_json, mention.status.account_id, mentioned_account.inbox_url) end end - def ostatus_xml - @ostatus_xml ||= stream_entry_to_xml(@status.stream_entry) - end - def activitypub_json return @activitypub_json if defined?(@activitypub_json) @activitypub_json = Oj.dump(serialize_payload(@status, ActivityPub::ActivitySerializer, signer: @status.account)) @@ -68,4 +62,8 @@ class ProcessMentionsService < BaseService def resolve_account_service ResolveAccountService.new end + + def check_for_spam(status) + SpamCheck.perform(status) + end end diff --git a/app/services/pubsubhubbub/subscribe_service.rb b/app/services/pubsubhubbub/subscribe_service.rb deleted file mode 100644 index 550da6328..000000000 --- a/app/services/pubsubhubbub/subscribe_service.rb +++ /dev/null @@ -1,53 +0,0 @@ -# frozen_string_literal: true - -class Pubsubhubbub::SubscribeService < BaseService - URL_PATTERN = /\A#{URI.regexp(%w(http https))}\z/ - - attr_reader :account, :callback, :secret, - :lease_seconds, :domain - - def call(account, callback, secret, lease_seconds, verified_domain = nil) - @account = account - @callback = Addressable::URI.parse(callback).normalize.to_s - @secret = secret - @lease_seconds = lease_seconds - @domain = verified_domain - - process_subscribe - end - - private - - def process_subscribe - if account.nil? - ['Invalid topic URL', 422] - elsif !valid_callback? - ['Invalid callback URL', 422] - elsif blocked_domain? - ['Callback URL not allowed', 403] - else - confirm_subscription - ['', 202] - end - end - - def confirm_subscription - subscription = locate_subscription - Pubsubhubbub::ConfirmationWorker.perform_async(subscription.id, 'subscribe', secret, lease_seconds) - end - - def valid_callback? - callback.present? && callback =~ URL_PATTERN - end - - def blocked_domain? - DomainBlock.blocked? Addressable::URI.parse(callback).host - end - - def locate_subscription - subscription = Subscription.find_or_initialize_by(account: account, callback_url: callback) - subscription.domain = domain - subscription.save! - subscription - end -end diff --git a/app/services/pubsubhubbub/unsubscribe_service.rb b/app/services/pubsubhubbub/unsubscribe_service.rb deleted file mode 100644 index 646150f7b..000000000 --- a/app/services/pubsubhubbub/unsubscribe_service.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -class Pubsubhubbub::UnsubscribeService < BaseService - attr_reader :account, :callback - - def call(account, callback) - @account = account - @callback = Addressable::URI.parse(callback).normalize.to_s - - process_unsubscribe - end - - private - - def process_unsubscribe - if account.nil? - ['Invalid topic URL', 422] - else - confirm_unsubscribe unless subscription.nil? - ['', 202] - end - end - - def confirm_unsubscribe - Pubsubhubbub::ConfirmationWorker.perform_async(subscription.id, 'unsubscribe') - end - - def subscription - @_subscription ||= Subscription.find_by(account: account, callback_url: callback) - end -end diff --git a/app/services/reblog_service.rb b/app/services/reblog_service.rb index 09403bae0..0b12f143c 100644 --- a/app/services/reblog_service.rb +++ b/app/services/reblog_service.rb @@ -2,7 +2,6 @@ class ReblogService < BaseService include Authorization - include StreamEntryRenderer include Payloadable # Reblog a status and notify its remote author @@ -24,11 +23,7 @@ class ReblogService < BaseService reblog = account.statuses.create!(reblog: reblogged_status, text: '', visibility: visibility) DistributionWorker.perform_async(reblog.id) - - unless reblogged_status.local_only? - Pubsubhubbub::DistributionWorker.perform_async(reblog.stream_entry.id) - ActivityPub::DistributionWorker.perform_async(reblog.id) - end + ActivityPub::DistributionWorker.perform_async(reblog.id) unless reblogged_status.local_only? create_notification(reblog) bump_potential_friendship(account, reblog) @@ -43,8 +38,6 @@ class ReblogService < BaseService if reblogged_status.account.local? LocalNotificationWorker.perform_async(reblogged_status.account_id, reblog.id, reblog.class.name) - elsif reblogged_status.account.ostatus? - NotificationWorker.perform_async(stream_entry_to_xml(reblog.stream_entry), reblog.account_id, reblogged_status.account_id) elsif reblogged_status.account.activitypub? && !reblogged_status.account.following?(reblog.account) ActivityPub::DeliveryWorker.perform_async(build_json(reblog), reblog.account_id, reblogged_status.account.inbox_url) end diff --git a/app/services/reject_follow_service.rb b/app/services/reject_follow_service.rb index f87d0ba91..bc0000c8c 100644 --- a/app/services/reject_follow_service.rb +++ b/app/services/reject_follow_service.rb @@ -6,25 +6,17 @@ class RejectFollowService < BaseService def call(source_account, target_account) follow_request = FollowRequest.find_by!(account: source_account, target_account: target_account) follow_request.reject! - create_notification(follow_request) unless source_account.local? + create_notification(follow_request) if !source_account.local? && source_account.activitypub? follow_request end private def create_notification(follow_request) - if follow_request.account.ostatus? - NotificationWorker.perform_async(build_xml(follow_request), follow_request.target_account_id, follow_request.account_id) - elsif follow_request.account.activitypub? - ActivityPub::DeliveryWorker.perform_async(build_json(follow_request), follow_request.target_account_id, follow_request.account.inbox_url) - end + ActivityPub::DeliveryWorker.perform_async(build_json(follow_request), follow_request.target_account_id, follow_request.account.inbox_url) end def build_json(follow_request) Oj.dump(serialize_payload(follow_request, ActivityPub::RejectFollowSerializer)) end - - def build_xml(follow_request) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request)) - end end diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index 98972fc70..1ddce675c 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -1,19 +1,23 @@ # frozen_string_literal: true class RemoveStatusService < BaseService - include StreamEntryRenderer include Redisable include Payloadable + # Delete a status + # @param [Status] status + # @param [Hash] options + # @option [Boolean] :redraft + # @option [Boolean] :immediate + # @option [Boolean] :original_removed def call(status, **options) - @payload = Oj.dump(event: :delete, payload: status.id.to_s) - @status = status - @account = status.account - @tags = status.tags.pluck(:name).to_a - @mentions = status.active_mentions.includes(:account).to_a - @reblogs = status.reblogs.includes(:account).to_a - @stream_entry = status.stream_entry - @options = options + @payload = Oj.dump(event: :delete, payload: status.id.to_s) + @status = status + @account = status.account + @tags = status.tags.pluck(:name).to_a + @mentions = status.active_mentions.includes(:account).to_a + @reblogs = status.reblogs.includes(:account).to_a + @options = options RedisLock.acquire(lock_options) do |lock| if lock.acquired? @@ -26,8 +30,10 @@ class RemoveStatusService < BaseService remove_from_public remove_from_media if status.media_attachments.any? remove_from_direct if status.direct_visibility? + remove_from_spam_check + remove_media - @status.destroy! + @status.destroy! if @options[:immediate] || !@status.reported? else raise Mastodon::RaceConditionError end @@ -48,6 +54,7 @@ class RemoveStatusService < BaseService def remove_from_self FeedManager.instance.unpush_from_home(@account, @status) + FeedManager.instance.unpush_from_direct(@account, @status) if @status.direct_visibility? end def remove_from_followers @@ -79,11 +86,6 @@ class RemoveStatusService < BaseService target_accounts << @status.reblog.account if @status.reblog? && !@status.reblog.account.local? target_accounts.uniq!(&:id) - # Ostatus - NotificationWorker.push_bulk(target_accounts.select(&:ostatus?).uniq(&:domain)) do |target_account| - [salmon_xml, @account.id, target_account.id] - end - # ActivityPub ActivityPub::DeliveryWorker.push_bulk(target_accounts.select(&:activitypub?).uniq(&:preferred_inbox_url)) do |target_account| [signed_activity_json, @account.id, target_account.preferred_inbox_url] @@ -91,9 +93,6 @@ class RemoveStatusService < BaseService end def remove_from_remote_followers - # OStatus - Pubsubhubbub::RawDistributionWorker.perform_async(salmon_xml, @account.id) - # ActivityPub ActivityPub::DeliveryWorker.push_bulk(@account.followers.inboxes) do |inbox_url| [signed_activity_json, @account.id, inbox_url] @@ -112,10 +111,6 @@ class RemoveStatusService < BaseService end end - def salmon_xml - @salmon_xml ||= stream_entry_to_xml(@stream_entry) - end - def signed_activity_json @signed_activity_json ||= Oj.dump(serialize_payload(@status, @status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteSerializer, signer: @account)) end @@ -138,8 +133,8 @@ class RemoveStatusService < BaseService return unless @status.public_visibility? @tags.each do |hashtag| - redis.publish("timeline:hashtag:#{hashtag}", @payload) - redis.publish("timeline:hashtag:#{hashtag}:local", @payload) if @status.local? + redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", @payload) + redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", @payload) if @status.local? end end @@ -159,9 +154,18 @@ class RemoveStatusService < BaseService def remove_from_direct @mentions.each do |mention| - Redis.current.publish("timeline:direct:#{mention.account.id}", @payload) if mention.account.local? + FeedManager.instance.unpush_from_direct(mention.account, @status) if mention.account.local? end - Redis.current.publish("timeline:direct:#{@account.id}", @payload) if @account.local? + end + + def remove_media + return if @options[:redraft] || (!@options[:immediate] && @status.reported?) + + @status.media_attachments.destroy_all + end + + def remove_from_spam_check + redis.zremrangebyscore("spam_check:#{@status.account_id}", @status.id, @status.id) end def lock_options diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index 11e33a83a..12e6544a0 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -1,89 +1,113 @@ # frozen_string_literal: true class ResolveAccountService < BaseService - include OStatus2::MagicKey include JsonLdHelper + include DomainControlHelper - DFRN_NS = 'http://purl.org/macgirvin/dfrn/1.0' + class WebfingerRedirectError < StandardError; end - # Find or create a local account for a remote user. - # When creating, look up the user's webfinger and fetch all - # important information from their feed - # @param [String, Account] uri User URI in the form of username@domain + # Find or create an account record for a remote user. When creating, + # look up the user's webfinger and fetch ActivityPub data + # @param [String, Account] uri URI in the username@domain format or account record # @param [Hash] options + # @option options [Boolean] :redirected Do not follow further Webfinger redirects + # @option options [Boolean] :skip_webfinger Do not attempt to refresh account data # @return [Account] def call(uri, options = {}) + return if uri.blank? + + process_options!(uri, options) + + # First of all we want to check if we've got the account + # record with the URI already, and if so, we can exit early + + return if domain_not_allowed?(@domain) + + @account ||= Account.find_remote(@username, @domain) + + return @account if @account&.local? || !webfinger_update_due? + + # At this point we are in need of a Webfinger query, which may + # yield us a different username/domain through a redirect + + process_webfinger!(@uri) + + # Because the username/domain pair may be different than what + # we already checked, we need to check if we've already got + # the record with that URI, again + + return if domain_not_allowed?(@domain) + + @account ||= Account.find_remote(@username, @domain) + + return @account if @account&.local? || !webfinger_update_due? + + # Now it is certain, it is definitely a remote account, and it + # either needs to be created, or updated from fresh data + + process_account! + rescue Goldfinger::Error, WebfingerRedirectError, Oj::ParseError => e + Rails.logger.debug "Webfinger query for #{@uri} failed: #{e}" + nil + end + + private + + def process_options!(uri, options) @options = options if uri.is_a?(Account) @account = uri @username = @account.username @domain = @account.domain - uri = "#{@username}@#{@domain}" - - return @account if @account.local? || !webfinger_update_due? else @username, @domain = uri.split('@') - - return Account.find_local(@username) if TagManager.instance.local_domain?(@domain) - - @account = Account.find_remote(@username, @domain) - - return @account unless webfinger_update_due? end - Rails.logger.debug "Looking up webfinger for #{uri}" + @domain = begin + if TagManager.instance.local_domain?(@domain) + nil + else + TagManager.instance.normalize_domain(@domain) + end + end - @webfinger = Goldfinger.finger("acct:#{uri}") + @uri = [@username, @domain].compact.join('@') + end + def process_webfinger!(uri, redirected = false) + @webfinger = Goldfinger.finger("acct:#{uri}") confirmed_username, confirmed_domain = @webfinger.subject.gsub(/\Aacct:/, '').split('@') if confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? @username = confirmed_username @domain = confirmed_domain - elsif options[:redirected].nil? - return call("#{confirmed_username}@#{confirmed_domain}", options.merge(redirected: true)) + @uri = uri + elsif !redirected + return process_webfinger!("#{confirmed_username}@#{confirmed_domain}", true) else - Rails.logger.debug 'Requested and returned acct URIs do not match' - return + raise WebfingerRedirectError, "The URI #{uri} tries to hijack #{@username}@#{@domain}" end - return if links_missing? - return Account.find_local(@username) if TagManager.instance.local_domain?(@domain) + @domain = nil if TagManager.instance.local_domain?(@domain) + end + + def process_account! + return unless activitypub_ready? RedisLock.acquire(lock_options) do |lock| if lock.acquired? @account = Account.find_remote(@username, @domain) - if activitypub_ready? || @account&.activitypub? - handle_activitypub - else - handle_ostatus - end + next if (@account.present? && !@account.activitypub?) || actor_json.nil? + + @account = ActivityPub::ProcessAccountService.new.call(@username, @domain, actor_json) else raise Mastodon::RaceConditionError end end @account - rescue Goldfinger::Error => e - Rails.logger.debug "Webfinger query for #{uri} unsuccessful: #{e}" - nil - end - - private - - def links_missing? - !(activitypub_ready? || ostatus_ready?) - end - - def ostatus_ready? - !(@webfinger.link('http://schemas.google.com/g/2010#updates-from').nil? || - @webfinger.link('salmon').nil? || - @webfinger.link('http://webfinger.net/rel/profile-page').nil? || - @webfinger.link('magic-public-key').nil? || - canonical_uri.nil? || - hub_url.nil?) end def webfinger_update_due? @@ -91,113 +115,13 @@ class ResolveAccountService < BaseService end def activitypub_ready? - !@webfinger.link('self').nil? && - ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(@webfinger.link('self').type) && - !actor_json.nil? && - actor_json['inbox'].present? - end - - def handle_ostatus - create_account if @account.nil? - update_account - update_account_profile if update_profile? - end - - def update_profile? - @options[:update_profile] - end - - def handle_activitypub - return if actor_json.nil? - - @account = ActivityPub::ProcessAccountService.new.call(@username, @domain, actor_json) - rescue Oj::ParseError - nil - end - - def create_account - Rails.logger.debug "Creating new remote account for #{@username}@#{@domain}" - - @account = Account.new(username: @username, domain: @domain) - @account.suspended_at = domain_block.created_at if auto_suspend? - @account.silenced_at = domain_block.created_at if auto_silence? - @account.private_key = nil - end - - def update_account - @account.last_webfingered_at = Time.now.utc - @account.protocol = :ostatus - @account.remote_url = atom_url - @account.salmon_url = salmon_url - @account.url = url - @account.public_key = public_key - @account.uri = canonical_uri - @account.hub_url = hub_url - @account.save! - end - - def auto_suspend? - domain_block&.suspend? - end - - def auto_silence? - domain_block&.silence? - end - - def domain_block - return @domain_block if defined?(@domain_block) - @domain_block = DomainBlock.find_by(domain: @domain) - end - - def atom_url - @atom_url ||= @webfinger.link('http://schemas.google.com/g/2010#updates-from').href - end - - def salmon_url - @salmon_url ||= @webfinger.link('salmon').href + !@webfinger.link('self').nil? && ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(@webfinger.link('self').type) end def actor_url @actor_url ||= @webfinger.link('self').href end - def url - @url ||= @webfinger.link('http://webfinger.net/rel/profile-page').href - end - - def public_key - @public_key ||= magic_key_to_pem(@webfinger.link('magic-public-key').href) - end - - def canonical_uri - return @canonical_uri if defined?(@canonical_uri) - - author_uri = atom.at_xpath('/xmlns:feed/xmlns:author/xmlns:uri') - - if author_uri.nil? - owner = atom.at_xpath('/xmlns:feed').at_xpath('./dfrn:owner', dfrn: DFRN_NS) - author_uri = owner.at_xpath('./xmlns:uri') unless owner.nil? - end - - @canonical_uri = author_uri.nil? ? nil : author_uri.content - end - - def hub_url - return @hub_url if defined?(@hub_url) - - hubs = atom.xpath('//xmlns:link[@rel="hub"]') - @hub_url = hubs.empty? || hubs.first['href'].nil? ? nil : hubs.first['href'] - end - - def atom_body - return @atom_body if defined?(@atom_body) - - @atom_body = Request.new(:get, atom_url).perform do |response| - raise Mastodon::UnexpectedResponseError, response unless response.code == 200 - response.body_with_limit - end - end - def actor_json return @actor_json if defined?(@actor_json) @@ -205,15 +129,6 @@ class ResolveAccountService < BaseService @actor_json = supported_context?(json) && equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) ? json : nil end - def atom - return @atom if defined?(@atom) - @atom = Nokogiri::XML(atom_body) - end - - def update_account_profile - RemoteProfileUpdateWorker.perform_async(@account.id, atom_body.force_encoding('UTF-8'), false) - end - def lock_options { redis: Redis.current, key: "resolve:#{@username}@#{@domain}" } end diff --git a/app/services/resolve_url_service.rb b/app/services/resolve_url_service.rb index b98759bf6..4e971a4b8 100644 --- a/app/services/resolve_url_service.rb +++ b/app/services/resolve_url_service.rb @@ -4,64 +4,57 @@ class ResolveURLService < BaseService include JsonLdHelper include Authorization - attr_reader :url - def call(url, on_behalf_of: nil) - @url = url + @url = url @on_behalf_of = on_behalf_of - return process_local_url if local_url? - - process_url unless fetched_atom_feed.nil? + if local_url? + process_local_url + elsif !fetched_resource.nil? + process_url + end end private def process_url - if equals_or_includes_any?(type, %w(Application Group Organization Person Service)) - FetchRemoteAccountService.new.call(atom_url, body, protocol) - elsif equals_or_includes_any?(type, %w(Note Article Image Video Page Question)) - FetchRemoteStatusService.new.call(atom_url, body, protocol) + if equals_or_includes_any?(type, ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) + FetchRemoteAccountService.new.call(resource_url, body, protocol) + elsif equals_or_includes_any?(type, ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES) + status = FetchRemoteStatusService.new.call(resource_url, body, protocol) + authorize_with @on_behalf_of, status, :show? unless status.nil? + status + elsif fetched_resource.nil? && @on_behalf_of.present? + # It may happen that the resource is a private toot, and thus not fetchable, + # but we can return the toot if we already know about it. + status = Status.find_by(uri: @url) || Status.find_by(url: @url) + authorize_with @on_behalf_of, status, :show? unless status.nil? + status end end - def fetched_atom_feed - @_fetched_atom_feed ||= FetchAtomService.new.call(url) + def fetched_resource + @fetched_resource ||= FetchResourceService.new.call(@url) end - def atom_url - fetched_atom_feed.first + def resource_url + fetched_resource.first end def body - fetched_atom_feed.second[:prefetched_body] + fetched_resource.second[:prefetched_body] end def protocol - fetched_atom_feed.third + fetched_resource.third end def type return json_data['type'] if protocol == :activitypub - - case xml_root - when 'feed' - 'Person' - when 'entry' - 'Note' - end end def json_data - @_json_data ||= body_to_json(body) - end - - def xml_root - xml_data.root.name - end - - def xml_data - @_xml_data ||= Nokogiri::XML(body, nil, 'utf-8') + @json_data ||= body_to_json(body) end def local_url? @@ -73,10 +66,7 @@ class ResolveURLService < BaseService return unless recognized_params[:action] == 'show' - if recognized_params[:controller] == 'stream_entries' - status = StreamEntry.find_by(id: recognized_params[:id])&.status - check_local_status(status) - elsif recognized_params[:controller] == 'statuses' + if recognized_params[:controller] == 'statuses' status = Status.find_by(id: recognized_params[:id]) check_local_status(status) elsif recognized_params[:controller] == 'accounts' @@ -86,10 +76,10 @@ class ResolveURLService < BaseService def check_local_status(status) return if status.nil? + authorize_with @on_behalf_of, status, :show? status rescue Mastodon::NotPermittedError - # Do not disclose the existence of status the user is not authorized to see nil end end diff --git a/app/services/search_service.rb b/app/services/search_service.rb index e0da61dac..090fd409b 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -2,7 +2,7 @@ class SearchService < BaseService def call(query, account, limit, options = {}) - @query = query.strip + @query = query&.strip @account = account @options = options @limit = limit.to_i @@ -10,8 +10,10 @@ class SearchService < BaseService @resolve = options[:resolve] || false default_results.tap do |results| + next if @query.blank? + if url_query? - results.merge!(url_resource_results) unless url_resource.nil? + results.merge!(url_resource_results) unless url_resource.nil? || (@options[:type].present? && url_resource_symbol != @options[:type].to_sym) elsif @query.present? results[:accounts] = perform_accounts_search! if account_searchable? results[:statuses] = perform_statuses_search! if full_text_searchable? @@ -33,8 +35,7 @@ class SearchService < BaseService end def perform_statuses_search! - definition = StatusesIndex.filter(term: { searchable_by: @account.id }) - .query(multi_match: { type: 'most_fields', query: @query, operator: 'and', fields: %w(text text.stemmed) }) + definition = parsed_query.apply(StatusesIndex.filter(term: { searchable_by: @account.id })) if @options[:account_id].present? definition = definition.filter(term: { account_id: @options[:account_id] }) @@ -53,15 +54,16 @@ class SearchService < BaseService preloaded_relations = relations_map_for_account(@account, account_ids, account_domains) results.reject { |status| StatusFilter.new(status, @account, preloaded_relations).filtered? } - rescue Faraday::ConnectionFailed + rescue Faraday::ConnectionFailed, Parslet::ParseFailed [] end def perform_hashtags_search! - Tag.search_for( - @query.gsub(/\A#/, ''), - @limit, - @offset + TagSearchService.new.call( + @query, + limit: @limit, + offset: @offset, + exclude_unreviewed: @options[:exclude_unreviewed] ) end @@ -70,7 +72,7 @@ class SearchService < BaseService end def url_query? - @options[:type].blank? && @query =~ /\Ahttps?:\/\// + @resolve && @query =~ /\Ahttps?:\/\// end def url_resource_results @@ -120,4 +122,8 @@ class SearchService < BaseService domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, account.id), } end + + def parsed_query + SearchQueryTransformer.new.apply(SearchQueryParser.new.parse(@query)) + end end diff --git a/app/services/send_interaction_service.rb b/app/services/send_interaction_service.rb deleted file mode 100644 index 3419043e5..000000000 --- a/app/services/send_interaction_service.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -class SendInteractionService < BaseService - # Send an Atom representation of an interaction to a remote Salmon endpoint - # @param [String] Entry XML - # @param [Account] source_account - # @param [Account] target_account - def call(xml, source_account, target_account) - @xml = xml - @source_account = source_account - @target_account = target_account - - return if !target_account.ostatus? || block_notification? - - build_request.perform do |delivery| - raise Mastodon::UnexpectedResponseError, delivery unless delivery.code > 199 && delivery.code < 300 - end - end - - private - - def build_request - request = Request.new(:post, @target_account.salmon_url, body: envelope) - request.add_headers('Content-Type' => 'application/magic-envelope+xml') - request - end - - def envelope - salmon.pack(@xml, @source_account.keypair) - end - - def block_notification? - DomainBlock.blocked?(@target_account.domain) - end - - def salmon - @salmon ||= OStatus2::Salmon.new - end -end diff --git a/app/services/subscribe_service.rb b/app/services/subscribe_service.rb deleted file mode 100644 index 83fd64396..000000000 --- a/app/services/subscribe_service.rb +++ /dev/null @@ -1,58 +0,0 @@ -# frozen_string_literal: true - -class SubscribeService < BaseService - def call(account) - return if account.hub_url.blank? - - @account = account - @account.secret = SecureRandom.hex - - build_request.perform do |response| - if response_failed_permanently? response - # We're not allowed to subscribe. Fail and move on. - @account.secret = '' - @account.save! - elsif response_successful? response - # The subscription will be confirmed asynchronously. - @account.save! - else - # The response was either a 429 rate limit, or a 5xx error. - # We need to retry at a later time. Fail loudly! - raise Mastodon::UnexpectedResponseError, response - end - end - end - - private - - def build_request - request = Request.new(:post, @account.hub_url, form: subscription_params) - request.on_behalf_of(some_local_account) if some_local_account - request - end - - def subscription_params - { - 'hub.topic': @account.remote_url, - 'hub.mode': 'subscribe', - 'hub.callback': api_subscription_url(@account.id), - 'hub.verify': 'async', - 'hub.secret': @account.secret, - 'hub.lease_seconds': 7.days.seconds, - } - end - - def some_local_account - @some_local_account ||= Account.local.without_suspended.first - end - - # Any response in the 3xx or 4xx range, except for 429 (rate limit) - def response_failed_permanently?(response) - (response.status.redirect? || response.status.client_error?) && !response.status.too_many_requests? - end - - # Any response in the 2xx range - def response_successful?(response) - response.status.success? - end -end diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index a5ce3dbd9..ecc893931 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -15,7 +15,6 @@ class SuspendAccountService < BaseService favourites follow_requests list_accounts - media_attachments mute_relationships muted_by_relationships notifications @@ -24,8 +23,6 @@ class SuspendAccountService < BaseService report_notes scheduled_statuses status_pins - stream_entries - subscriptions ).freeze ASSOCIATIONS_ON_DESTROY = %w( @@ -34,14 +31,26 @@ class SuspendAccountService < BaseService targeted_reports ).freeze - # Suspend an account and remove as much of its data as possible + # Suspend or remove an account and remove as much of its data + # as possible. If it's a local account and it has not been confirmed + # or never been approved, then side effects are skipped and both + # the user and account records are removed fully. Otherwise, + # it is controlled by options. # @param [Account] # @param [Hash] options - # @option [Boolean] :including_user Remove the user record as well - # @option [Boolean] :destroy Remove the account record instead of suspending + # @option [Boolean] :reserve_email Keep user record. Only applicable for local accounts + # @option [Boolean] :reserve_username Keep account record + # @option [Boolean] :skip_side_effects Side effects are ActivityPub and streaming API payloads + # @option [Time] :suspended_at Only applicable when :reserve_username is true def call(account, **options) @account = account - @options = options + @options = { reserve_username: true, reserve_email: true }.merge(options) + + if @account.local? && @account.user_unconfirmed_or_pending? + @options[:reserve_email] = false + @options[:reserve_username] = false + @options[:skip_side_effects] = true + end reject_follows! purge_user! @@ -62,25 +71,39 @@ class SuspendAccountService < BaseService def purge_user! return if !@account.local? || @account.user.nil? - if @options[:including_user] - @account.user.destroy - else + if @options[:reserve_email] @account.user.disable! + @account.user.invites.where(uses: 0).destroy_all + else + @account.user.destroy end end def purge_content! - distribute_delete_actor! if @account.local? && !@options[:skip_distribution] + distribute_delete_actor! if @account.local? && !@options[:skip_side_effects] @account.statuses.reorder(nil).find_in_batches do |statuses| - BatchedRemoveStatusService.new.call(statuses, skip_side_effects: @options[:destroy]) + statuses.reject! { |status| reported_status_ids.include?(status.id) } if @options[:reserve_username] + BatchedRemoveStatusService.new.call(statuses, skip_side_effects: @options[:skip_side_effects]) + end + + @account.media_attachments.reorder(nil).find_each do |media_attachment| + next if @options[:reserve_username] && reported_status_ids.include?(media_attachment.status_id) + + media_attachment.destroy + end + + @account.polls.reorder(nil).find_each do |poll| + next if @options[:reserve_username] && reported_status_ids.include?(poll.status_id) + + poll.destroy end associations_for_destruction.each do |association_name| destroy_all(@account.public_send(association_name)) end - @account.destroy if @options[:destroy] + @account.destroy unless @options[:reserve_username] end def purge_profile! @@ -88,11 +111,13 @@ class SuspendAccountService < BaseService # there is no point wasting time updating # its values first - return if @options[:destroy] + return unless @options[:reserve_username] @account.silenced_at = nil @account.suspended_at = @options[:suspended_at] || Time.now.utc @account.locked = false + @account.memorial = false + @account.discoverable = false @account.display_name = '' @account.note = '' @account.fields = [] @@ -100,6 +125,7 @@ class SuspendAccountService < BaseService @account.followers_count = 0 @account.following_count = 0 @account.moved_to_account = nil + @account.trust_level = :untrusted @account.avatar.destroy @account.header.destroy @account.save! @@ -135,11 +161,15 @@ class SuspendAccountService < BaseService Account.inboxes - delivery_inboxes end + def reported_status_ids + @reported_status_ids ||= Report.where(target_account: @account).unresolved.pluck(:status_ids).flatten.uniq + end + def associations_for_destruction - if @options[:destroy] - ASSOCIATIONS_ON_SUSPEND + ASSOCIATIONS_ON_DESTROY - else + if @options[:reserve_username] ASSOCIATIONS_ON_SUSPEND + else + ASSOCIATIONS_ON_SUSPEND + ASSOCIATIONS_ON_DESTROY end end end diff --git a/app/services/tag_search_service.rb b/app/services/tag_search_service.rb new file mode 100644 index 000000000..b78d65625 --- /dev/null +++ b/app/services/tag_search_service.rb @@ -0,0 +1,87 @@ +# frozen_string_literal: true + +class TagSearchService < BaseService + def call(query, options = {}) + @query = query.strip.gsub(/\A#/, '') + @offset = options.delete(:offset).to_i + @limit = options.delete(:limit).to_i + @options = options + + results = from_elasticsearch if Chewy.enabled? + results ||= from_database + + results + end + + private + + def from_elasticsearch + query = { + function_score: { + query: { + multi_match: { + query: @query, + fields: %w(name.edge_ngram name), + type: 'most_fields', + operator: 'and', + }, + }, + + functions: [ + { + field_value_factor: { + field: 'usage', + modifier: 'log2p', + missing: 0, + }, + }, + + { + gauss: { + last_status_at: { + scale: '7d', + offset: '14d', + decay: 0.5, + }, + }, + }, + ], + + boost_mode: 'multiply', + }, + } + + filter = { + bool: { + should: [ + { + term: { + reviewed: { + value: true, + }, + }, + }, + + { + match: { + name: { + query: @query, + }, + }, + }, + ], + }, + } + + definition = TagsIndex.query(query) + definition = definition.filter(filter) if @options[:exclude_unreviewed] + + definition.limit(@limit).offset(@offset).objects.compact + rescue Faraday::ConnectionFailed, Parslet::ParseFailed + nil + end + + def from_database + Tag.search_for(@query, @limit, @offset, @options) + end +end diff --git a/app/services/unallow_domain_service.rb b/app/services/unallow_domain_service.rb new file mode 100644 index 000000000..bd1ad328d --- /dev/null +++ b/app/services/unallow_domain_service.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class UnallowDomainService < BaseService + def call(domain_allow) + Account.where(domain: domain_allow.domain).find_each do |account| + SuspendAccountService.new.call(account, reserve_username: false) + end + + domain_allow.destroy + end +end diff --git a/app/services/unblock_domain_service.rb b/app/services/unblock_domain_service.rb index 9b8526fbe..d502d9e49 100644 --- a/app/services/unblock_domain_service.rb +++ b/app/services/unblock_domain_service.rb @@ -10,23 +10,9 @@ class UnblockDomainService < BaseService end def process_retroactive_updates - blocked_accounts.in_batches.update_all(update_options) unless domain_block.noop? - end - - def blocked_accounts - scope = Account.where(domain: domain_block.domain) - if domain_block.silence? - scope.where(silenced_at: @domain_block.created_at) - else - scope.where(suspended_at: @domain_block.created_at) - end - end - - def update_options - { domain_block_impact => nil } - end + scope = Account.by_domain_and_subdomains(domain_block.domain) - def domain_block_impact - domain_block.silence? ? :silenced_at : :suspended_at + scope.where(silenced_at: domain_block.created_at).in_batches.update_all(silenced_at: nil) unless domain_block.noop? + scope.where(suspended_at: domain_block.created_at).in_batches.update_all(suspended_at: nil) if domain_block.suspend? end end diff --git a/app/services/unblock_service.rb b/app/services/unblock_service.rb index 95a858e9f..c263ac8af 100644 --- a/app/services/unblock_service.rb +++ b/app/services/unblock_service.rb @@ -7,25 +7,17 @@ class UnblockService < BaseService return unless account.blocking?(target_account) unblock = account.unblock!(target_account) - create_notification(unblock) unless target_account.local? + create_notification(unblock) if !target_account.local? && target_account.activitypub? unblock end private def create_notification(unblock) - if unblock.target_account.ostatus? - NotificationWorker.perform_async(build_xml(unblock), unblock.account_id, unblock.target_account_id) - elsif unblock.target_account.activitypub? - ActivityPub::DeliveryWorker.perform_async(build_json(unblock), unblock.account_id, unblock.target_account.inbox_url) - end + ActivityPub::DeliveryWorker.perform_async(build_json(unblock), unblock.account_id, unblock.target_account.inbox_url) end def build_json(unblock) Oj.dump(serialize_payload(unblock, ActivityPub::UndoBlockSerializer)) end - - def build_xml(block) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.unblock_salmon(block)) - end end diff --git a/app/services/unfavourite_service.rb b/app/services/unfavourite_service.rb index dcc890b7d..37917a64f 100644 --- a/app/services/unfavourite_service.rb +++ b/app/services/unfavourite_service.rb @@ -6,7 +6,7 @@ class UnfavouriteService < BaseService def call(account, status) favourite = Favourite.find_by!(account: account, status: status) favourite.destroy! - create_notification(favourite) unless status.local? + create_notification(favourite) if !status.account.local? && status.account.activitypub? favourite end @@ -14,19 +14,10 @@ class UnfavouriteService < BaseService def create_notification(favourite) status = favourite.status - - if status.account.ostatus? - NotificationWorker.perform_async(build_xml(favourite), favourite.account_id, status.account_id) - elsif status.account.activitypub? - ActivityPub::DeliveryWorker.perform_async(build_json(favourite), favourite.account_id, status.account.inbox_url) - end + ActivityPub::DeliveryWorker.perform_async(build_json(favourite), favourite.account_id, status.account.inbox_url) end def build_json(favourite) Oj.dump(serialize_payload(favourite, ActivityPub::UndoLikeSerializer)) end - - def build_xml(favourite) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.unfavourite_salmon(favourite)) - end end diff --git a/app/services/unfollow_service.rb b/app/services/unfollow_service.rb index 17dc29735..151f3674f 100644 --- a/app/services/unfollow_service.rb +++ b/app/services/unfollow_service.rb @@ -6,9 +6,12 @@ class UnfollowService < BaseService # Unfollow and notify the remote user # @param [Account] source_account Where to unfollow from # @param [Account] target_account Which to unfollow - def call(source_account, target_account) + # @param [Hash] options + # @option [Boolean] :skip_unmerge + def call(source_account, target_account, options = {}) @source_account = source_account @target_account = target_account + @options = options unfollow! || undo_follow_request! end @@ -21,9 +24,11 @@ class UnfollowService < BaseService return unless follow follow.destroy! - create_notification(follow) unless @target_account.local? - create_reject_notification(follow) if @target_account.local? && !@source_account.local? - UnmergeWorker.perform_async(@target_account.id, @source_account.id) + + create_notification(follow) if !@target_account.local? && @target_account.activitypub? + create_reject_notification(follow) if @target_account.local? && !@source_account.local? && @source_account.activitypub? + UnmergeWorker.perform_async(@target_account.id, @source_account.id) unless @options[:skip_unmerge] + follow end @@ -33,21 +38,17 @@ class UnfollowService < BaseService return unless follow_request follow_request.destroy! + create_notification(follow_request) unless @target_account.local? + follow_request end def create_notification(follow) - if follow.target_account.ostatus? - NotificationWorker.perform_async(build_xml(follow), follow.account_id, follow.target_account_id) - elsif follow.target_account.activitypub? - ActivityPub::DeliveryWorker.perform_async(build_json(follow), follow.account_id, follow.target_account.inbox_url) - end + ActivityPub::DeliveryWorker.perform_async(build_json(follow), follow.account_id, follow.target_account.inbox_url) end def create_reject_notification(follow) - # Rejecting an already-existing follow request - return unless follow.account.activitypub? ActivityPub::DeliveryWorker.perform_async(build_reject_json(follow), follow.target_account_id, follow.account.inbox_url) end @@ -58,8 +59,4 @@ class UnfollowService < BaseService def build_reject_json(follow) Oj.dump(serialize_payload(follow, ActivityPub::RejectFollowSerializer)) end - - def build_xml(follow) - OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.unfollow_salmon(follow)) - end end diff --git a/app/services/unsubscribe_service.rb b/app/services/unsubscribe_service.rb deleted file mode 100644 index 95c1fb4fc..000000000 --- a/app/services/unsubscribe_service.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -class UnsubscribeService < BaseService - def call(account) - return if account.hub_url.blank? - - @account = account - - begin - build_request.perform do |response| - Rails.logger.debug "PuSH unsubscribe for #{@account.acct} failed: #{response.status}" unless response.status.success? - end - rescue HTTP::Error, OpenSSL::SSL::SSLError => e - Rails.logger.debug "PuSH unsubscribe for #{@account.acct} failed: #{e}" - end - - @account.secret = '' - @account.subscription_expires_at = nil - @account.save! - end - - private - - def build_request - Request.new(:post, @account.hub_url, form: subscription_params) - end - - def subscription_params - { - 'hub.topic': @account.remote_url, - 'hub.mode': 'unsubscribe', - 'hub.callback': api_subscription_url(@account.id), - 'hub.verify': 'async', - } - end -end diff --git a/app/services/update_account_service.rb b/app/services/update_account_service.rb index 01756a73d..4172d5774 100644 --- a/app/services/update_account_service.rb +++ b/app/services/update_account_service.rb @@ -20,7 +20,9 @@ class UpdateAccountService < BaseService private def authorize_all_follow_requests(account) - AuthorizeFollowWorker.push_bulk(FollowRequest.where(target_account: account).select(:account_id, :target_account_id)) do |req| + follow_requests = FollowRequest.where(target_account: account) + follow_requests = follow_requests.preload(:account).select { |req| !req.account.silenced? } + AuthorizeFollowWorker.push_bulk(follow_requests) do |req| [req.account_id, req.target_account_id] end end diff --git a/app/services/update_remote_profile_service.rb b/app/services/update_remote_profile_service.rb deleted file mode 100644 index 68d36addf..000000000 --- a/app/services/update_remote_profile_service.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -class UpdateRemoteProfileService < BaseService - attr_reader :account, :remote_profile - - def call(body, account, resubscribe = false) - @account = account - @remote_profile = RemoteProfile.new(body) - - return if remote_profile.root.nil? - - update_account unless remote_profile.author.nil? - - old_hub_url = account.hub_url - account.hub_url = remote_profile.hub_link if remote_profile.hub_link.present? && remote_profile.hub_link != old_hub_url - - account.save_with_optional_media! - - Pubsubhubbub::SubscribeWorker.perform_async(account.id) if resubscribe && account.hub_url != old_hub_url - end - - private - - def update_account - account.display_name = remote_profile.display_name || '' - account.note = remote_profile.note || '' - account.locked = remote_profile.locked? - - if !account.suspended? && !DomainBlock.find_by(domain: account.domain)&.reject_media? - if remote_profile.avatar.present? - account.avatar_remote_url = remote_profile.avatar - else - account.avatar_remote_url = '' - account.avatar.destroy - end - - if remote_profile.header.present? - account.header_remote_url = remote_profile.header - else - account.header_remote_url = '' - account.header.destroy - end - - save_emojis if remote_profile.emojis.present? - end - end - - def save_emojis - do_not_download = DomainBlock.find_by(domain: account.domain)&.reject_media? - - return if do_not_download - - remote_profile.emojis.each do |link| - next unless link['href'] && link['name'] - - shortcode = link['name'].delete(':') - emoji = CustomEmoji.find_by(shortcode: shortcode, domain: account.domain) - - next unless emoji.nil? - - emoji = CustomEmoji.new(shortcode: shortcode, domain: account.domain) - emoji.image_remote_url = link['href'] - emoji.save - end - end -end diff --git a/app/services/verify_salmon_service.rb b/app/services/verify_salmon_service.rb deleted file mode 100644 index 205b35d8b..000000000 --- a/app/services/verify_salmon_service.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -class VerifySalmonService < BaseService - include AuthorExtractor - - def call(payload) - body = salmon.unpack(payload) - - xml = Nokogiri::XML(body) - xml.encoding = 'utf-8' - - account = author_from_xml(xml.at_xpath('/xmlns:entry', xmlns: OStatus::TagManager::XMLNS)) - - if account.nil? - false - else - salmon.verify(payload, account.keypair) - end - end - - private - - def salmon - @salmon ||= OStatus2::Salmon.new - end -end diff --git a/app/services/vote_service.rb b/app/services/vote_service.rb index 0eeb8fd56..cb7dce6e8 100644 --- a/app/services/vote_service.rb +++ b/app/services/vote_service.rb @@ -12,12 +12,24 @@ class VoteService < BaseService @choices = choices @votes = [] - ApplicationRecord.transaction do - @choices.each do |choice| - @votes << @poll.votes.create!(account: @account, choice: choice) + already_voted = true + + RedisLock.acquire(lock_options) do |lock| + if lock.acquired? + already_voted = @poll.votes.where(account: @account).exists? + + ApplicationRecord.transaction do + @choices.each do |choice| + @votes << @poll.votes.create!(account: @account, choice: choice) + end + end + else + raise Mastodon::RaceConditionError end end + increment_voters_count! unless already_voted + ActivityTracker.increment('activity:interactions') if @poll.account.local? @@ -53,4 +65,18 @@ class VoteService < BaseService def build_json(vote) Oj.dump(serialize_payload(vote, ActivityPub::VoteSerializer)) end + + def increment_voters_count! + unless @poll.voters_count.nil? + @poll.voters_count = @poll.voters_count + 1 + @poll.save + end + rescue ActiveRecord::StaleObjectError + @poll.reload + retry + end + + def lock_options + { redis: Redis.current, key: "vote:#{@poll.id}:#{@account.id}" } + end end diff --git a/app/validators/disallowed_hashtags_validator.rb b/app/validators/disallowed_hashtags_validator.rb index ee06b20f6..d745b767f 100644 --- a/app/validators/disallowed_hashtags_validator.rb +++ b/app/validators/disallowed_hashtags_validator.rb @@ -4,24 +4,7 @@ class DisallowedHashtagsValidator < ActiveModel::Validator def validate(status) return unless status.local? && !status.reblog? - @status = status - tags = select_tags - - status.errors.add(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) unless tags.empty? - end - - private - - def select_tags - tags = Extractor.extract_hashtags(@status.text) - tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase } - end - - def disallowed_hashtags - return @disallowed_hashtags if @disallowed_hashtags - - @disallowed_hashtags = Setting.disallowed_hashtags.nil? ? [] : Setting.disallowed_hashtags - @disallowed_hashtags = @disallowed_hashtags.split(' ') if @disallowed_hashtags.is_a? String - @disallowed_hashtags = @disallowed_hashtags.map(&:downcase) + disallowed_hashtags = Tag.matching_name(Extractor.extract_hashtags(status.text)).reject(&:usable?) + status.errors.add(:text, I18n.t('statuses.disallowed_hashtags', tags: disallowed_hashtags.map(&:name).join(', '), count: disallowed_hashtags.size)) unless disallowed_hashtags.empty? end end diff --git a/app/validators/domain_validator.rb b/app/validators/domain_validator.rb new file mode 100644 index 000000000..6e4a854ff --- /dev/null +++ b/app/validators/domain_validator.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class DomainValidator < ActiveModel::EachValidator + def validate_each(record, attribute, value) + return if value.blank? + + domain = begin + if options[:acct] + value.split('@').last + else + value + end + end + + record.errors.add(attribute, I18n.t('domain_validator.invalid_domain')) unless compliant?(domain) + end + + private + + def compliant?(value) + Addressable::URI.new.tap { |uri| uri.host = value } + rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError + false + end +end diff --git a/app/validators/email_mx_validator.rb b/app/validators/email_mx_validator.rb index 96fbedcfc..9b5009966 100644 --- a/app/validators/email_mx_validator.rb +++ b/app/validators/email_mx_validator.rb @@ -14,6 +14,7 @@ class EmailMxValidator < ActiveModel::Validator return true if domain.nil? + domain = TagManager.instance.normalize_domain(domain) hostnames = [] ips = [] @@ -29,6 +30,8 @@ class EmailMxValidator < ActiveModel::Validator end ips.empty? || on_blacklist?(hostnames + ips) + rescue Addressable::URI::InvalidURIError + true end def on_blacklist?(values) diff --git a/app/validators/poll_validator.rb b/app/validators/poll_validator.rb index 9d7321cad..8259a62e5 100644 --- a/app/validators/poll_validator.rb +++ b/app/validators/poll_validator.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true class PollValidator < ActiveModel::Validator - MAX_OPTIONS = 4 - MAX_OPTION_CHARS = 25 + MAX_OPTIONS = 5 + MAX_OPTION_CHARS = 100 MAX_EXPIRATION = 1.month.freeze MIN_EXPIRATION = 5.minutes.freeze diff --git a/app/validators/unique_username_validator.rb b/app/validators/unique_username_validator.rb index fb67105dd..4e24e3f5f 100644 --- a/app/validators/unique_username_validator.rb +++ b/app/validators/unique_username_validator.rb @@ -1,10 +1,12 @@ # frozen_string_literal: true +# See also: USERNAME_RE in the Account class + class UniqueUsernameValidator < ActiveModel::Validator def validate(account) return if account.username.nil? - normalized_username = account.username.downcase.delete('.') + normalized_username = account.username.downcase scope = Account.where(domain: nil).where('lower(username) = ?', normalized_username) scope = scope.where.not(id: account.id) if account.persisted? diff --git a/app/views/about/_domain_blocks.html.haml b/app/views/about/_domain_blocks.html.haml new file mode 100644 index 000000000..e0c5df41d --- /dev/null +++ b/app/views/about/_domain_blocks.html.haml @@ -0,0 +1,12 @@ +%table + %thead + %tr + %th= t('about.unavailable_content_description.domain') + %th= t('about.unavailable_content_description.reason') + %tbody + - domain_blocks.each do |domain_block| + %tr + %td.nowrap + %span{ title: domain_block.domain }= domain_block.domain + %td + = domain_block.public_comment if display_blocks_rationale? diff --git a/app/views/about/_login.html.haml b/app/views/about/_login.html.haml index d286f0d3c..fa58f04d7 100644 --- a/app/views/about/_login.html.haml +++ b/app/views/about/_login.html.haml @@ -1,4 +1,4 @@ -= simple_form_for(new_user, url: user_session_path) do |f| += simple_form_for(new_user, url: user_session_path, namespace: 'login') do |f| .fields-group - if use_seamless_external_login? = f.input :email, placeholder: t('simple_form.labels.defaults.username_or_email'), input_html: { 'aria-label' => t('simple_form.labels.defaults.username_or_email') }, hint: false diff --git a/app/views/about/_registration.html.haml b/app/views/about/_registration.html.haml index ff32ec8c4..af28e2174 100644 --- a/app/views/about/_registration.html.haml +++ b/app/views/about/_registration.html.haml @@ -1,5 +1,5 @@ -= simple_form_for(new_user, url: user_registration_path) do |f| - .simple_form__overlay-area +.simple_form__overlay-area{ class: (closed_registrations? && @instance_presenter.closed_registrations_message.present?) ? 'simple_form__overlay-area__blurred' : '' } + = simple_form_for(new_user, url: user_registration_path, namespace: 'registration') do |f| %p.lead= t('about.federation_hint_html', instance: content_tag(:strong, site_hostname)) .fields-group @@ -21,8 +21,8 @@ .actions = f.button :button, sign_up_message, type: :submit, class: 'button button-primary', disabled: closed_registrations? - - if closed_registrations? && @instance_presenter.closed_registrations_message.present? - .simple_form__overlay-area__overlay - .simple_form__overlay-area__overlay__content.rich-formatting - .block-icon= fa_icon 'warning' - = @instance_presenter.closed_registrations_message.html_safe + - if closed_registrations? && @instance_presenter.closed_registrations_message.present? + .simple_form__overlay-area__overlay + .simple_form__overlay-area__overlay__content.rich-formatting + .block-icon= fa_icon 'warning' + = @instance_presenter.closed_registrations_message.html_safe diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml index f02a7906a..03be3f423 100644 --- a/app/views/about/more.html.haml +++ b/app/views/about/more.html.haml @@ -4,7 +4,7 @@ - content_for :header_tags do = render partial: 'shared/og' -.grid-3 +.grid-4 .column-0 .public-account-header.public-account-header--no-bar .public-account-header__image @@ -27,20 +27,53 @@ = image_tag @instance_presenter.mascot&.file&.url || asset_pack_path('media/images/elephant_ui_plane.svg'), alt: '' .column-2 - .landing-page__information.contact-widget - %p - %strong= t 'about.administered_by' + .contact-widget + %h4= t 'about.administered_by' = account_link_to(@instance_presenter.contact_account) - if @instance_presenter.site_contact_email.present? - %p.contact-widget__mail - %strong - = succeed ':' do - = t 'about.contact' - %br/ - = mail_to @instance_presenter.site_contact_email, nil, title: @instance_presenter.site_contact_email + %h4 + = succeed ':' do + = t 'about.contact' + + = mail_to @instance_presenter.site_contact_email, nil, title: @instance_presenter.site_contact_email .column-3 - .box-widget - .rich-formatting= @instance_presenter.site_extended_description.html_safe.presence || t('about.extended_description_html') + = render 'application/flashes' + + - if @contents.blank? && (!display_blocks? || @blocks&.empty?) + = nothing_here + - else + .box-widget + .rich-formatting + = @contents.html_safe + + - if display_blocks? && !@blocks.empty? + %h2#unavailable-content= t('about.unavailable_content') + + %p= t('about.unavailable_content_html') + + - if (blocks = @blocks.select(&:reject_media?)) && !blocks.empty? + %p= t('about.unavailable_content_description.rejecting_media') + = render partial: 'domain_blocks', locals: { domain_blocks: blocks } + - if (blocks = @blocks.select(&:silence?)) && !blocks.empty? + %p= t('about.unavailable_content_description.silenced') + = render partial: 'domain_blocks', locals: { domain_blocks: blocks } + - if (blocks = @blocks.select(&:suspend?)) && !blocks.empty? + %p= t('about.unavailable_content_description.suspended') + = render partial: 'domain_blocks', locals: { domain_blocks: blocks } + + .column-4 + %ul.table-of-contents + - @table_of_contents.each do |item| + %li + = link_to item.title, "##{item.anchor}" + + - unless item.children.empty? + %ul + - item.children.each do |sub_item| + %li= link_to sub_item.title, "##{sub_item.anchor}" + + - if display_blocks? && !@blocks.empty? + %li= link_to t('about.unavailable_content'), '#unavailable-content' diff --git a/app/views/about/show.html.haml b/app/views/about/show.html.haml index f24f4e195..e0ec98ec9 100644 --- a/app/views/about/show.html.haml +++ b/app/views/about/show.html.haml @@ -38,7 +38,7 @@ %small= t('about.browse_public_posts') .directory__tag - = link_to 'https://joinmastodon.org/apps', target: '_blank', rel: 'noopener' do + = link_to 'https://joinmastodon.org/apps', target: '_blank', rel: 'noopener noreferrer' do %h4 = fa_icon 'tablet fw' = t('about.get_apps') @@ -52,13 +52,12 @@ .hero-widget__img = image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('media/images/preview.jpg'), alt: @instance_presenter.site_title - - if @instance_presenter.site_short_description.present? - .hero-widget__text - %p - = @instance_presenter.site_short_description.html_safe.presence - = link_to about_more_path do - = t('about.learn_more') - = fa_icon 'angle-double-right' + .hero-widget__text + %p + = @instance_presenter.site_short_description.html_safe.presence || t('about.about_mastodon_html') + = link_to about_more_path do + = t('about.learn_more') + = fa_icon 'angle-double-right' .hero-widget__footer .hero-widget__footer__column diff --git a/app/views/accounts/_moved.html.haml b/app/views/accounts/_moved.html.haml index 7a777bfea..a82f277b1 100644 --- a/app/views/accounts/_moved.html.haml +++ b/app/views/accounts/_moved.html.haml @@ -3,10 +3,10 @@ .moved-account-widget .moved-account-widget__message = fa_icon 'suitcase' - = t('accounts.moved_html', name: content_tag(:bdi, content_tag(:strong, display_name(account, custom_emojify: true), class: :emojify)), new_profile_link: link_to(content_tag(:strong, safe_join(['@', content_tag(:span, moved_to_account.acct)])), TagManager.instance.url_for(moved_to_account), class: 'mention')) + = t('accounts.moved_html', name: content_tag(:bdi, content_tag(:strong, display_name(account, custom_emojify: true), class: :emojify)), new_profile_link: link_to(content_tag(:strong, safe_join(['@', content_tag(:span, moved_to_account.acct)])), ActivityPub::TagManager.instance.url_for(moved_to_account), class: 'mention')) .moved-account-widget__card - = link_to TagManager.instance.url_for(moved_to_account), class: 'detailed-status__display-name p-author h-card', target: '_blank', rel: 'me noopener' do + = link_to ActivityPub::TagManager.instance.url_for(moved_to_account), class: 'detailed-status__display-name p-author h-card', target: '_blank', rel: 'me noopener noreferrer' do .detailed-status__display-avatar .account__avatar-overlay .account__avatar-overlay-base{ style: "background-image: url('#{moved_to_account.avatar.url(:original)}')" } diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml index 950e61847..9c26dbabc 100644 --- a/app/views/accounts/show.html.haml +++ b/app/views/accounts/show.html.haml @@ -5,11 +5,9 @@ %meta{ name: 'description', content: account_description(@account) }/ - if @account.user&.setting_noindex - %meta{ name: 'robots', content: 'noindex' }/ + %meta{ name: 'robots', content: 'noindex, noarchive' }/ - %link{ rel: 'salmon', href: api_salmon_url(@account.id) }/ - %link{ rel: 'alternate', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }/ - %link{ rel: 'alternate', type: 'application/rss+xml', href: account_url(@account, format: 'rss') }/ + %link{ rel: 'alternate', type: 'application/rss+xml', href: @rss_url }/ %link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/ - if @older_url @@ -40,12 +38,12 @@ - else .activity-stream.activity-stream--under-tabs - if params[:page].to_i.zero? - = render partial: 'stream_entries/status', collection: @pinned_statuses, as: :status, locals: { pinned: true } + = render partial: 'statuses/status', collection: @pinned_statuses, as: :status, locals: { pinned: true } - if @newer_url .entry= link_to_more @newer_url - = render partial: 'stream_entries/status', collection: @statuses, as: :status + = render partial: 'statuses/status', collection: @statuses, as: :status - if @older_url .entry= link_to_more @older_url @@ -58,24 +56,33 @@ = render 'bio', account: @account - - unless @endorsed_accounts.empty? + - if @endorsed_accounts.empty? && @account.id == current_account&.id + .placeholder-widget= t('accounts.endorsements_hint') + - elsif !@endorsed_accounts.empty? .endorsements-widget %h4= t 'accounts.choices_html', name: content_tag(:bdi, display_name(@account, custom_emojify: true)) - @endorsed_accounts.each do |account| = account_link_to account - - @account.featured_tags.order(statuses_count: :desc).each do |featured_tag| - .directory__tag{ class: params[:tag] == featured_tag.name ? 'active' : nil } - = link_to short_account_tag_path(@account, featured_tag.tag) do - %h4 - = fa_icon 'hashtag' - = featured_tag.name - %small - - if featured_tag.last_status_at.nil? - = t('accounts.nothing_here') - - else - %time{ datetime: featured_tag.last_status_at.iso8601, title: l(featured_tag.last_status_at) }= l featured_tag.last_status_at - .trends__item__current= number_to_human featured_tag.statuses_count, strip_insignificant_zeros: true + - if @featured_hashtags.empty? && @account.id == current_account&.id + .placeholder-widget + = t('accounts.featured_tags_hint') + = link_to settings_featured_tags_path do + = t('featured_tags.add_new') + = fa_icon 'chevron-right fw' + - else + - @featured_hashtags.each do |featured_tag| + .directory__tag{ class: params[:tag] == featured_tag.name ? 'active' : nil } + = link_to short_account_tag_path(@account, featured_tag.tag) do + %h4 + = fa_icon 'hashtag' + = featured_tag.name + %small + - if featured_tag.last_status_at.nil? + = t('accounts.nothing_here') + - else + %time.formatted{ datetime: featured_tag.last_status_at.iso8601, title: l(featured_tag.last_status_at) }= l featured_tag.last_status_at + .trends__item__current= number_to_human featured_tag.statuses_count, strip_insignificant_zeros: true = render 'application/sidebar' diff --git a/app/views/admin/account_actions/new.html.haml b/app/views/admin/account_actions/new.html.haml index 97286c8e5..20fbeef33 100644 --- a/app/views/admin/account_actions/new.html.haml +++ b/app/views/admin/account_actions/new.html.haml @@ -13,6 +13,10 @@ .fields-group = f.input :send_email_notification, as: :boolean, wrapper: :with_label + - if params[:report_id].present? + .fields-group + = f.input :include_statuses, as: :boolean, wrapper: :with_label + %hr.spacer/ - unless @warning_presets.empty? diff --git a/app/views/admin/accounts/_account.html.haml b/app/views/admin/accounts/_account.html.haml index eba3ad804..b057d3e42 100644 --- a/app/views/admin/accounts/_account.html.haml +++ b/app/views/admin/accounts/_account.html.haml @@ -19,4 +19,4 @@ = table_link_to 'times', t('admin.accounts.reject'), reject_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:reject, account.user) - else = table_link_to 'circle', t('admin.accounts.web'), web_path("accounts/#{account.id}") - = table_link_to 'globe', t('admin.accounts.public'), TagManager.instance.url_for(account) + = table_link_to 'globe', t('admin.accounts.public'), ActivityPub::TagManager.instance.url_for(account) diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml index 7494c9fa2..9f1e3816b 100644 --- a/app/views/admin/accounts/show.html.haml +++ b/app/views/admin/accounts/show.html.haml @@ -3,6 +3,34 @@ = render 'application/card', account: @account +- account = @account +- proofs = account.identity_proofs.active +- fields = account.fields +- unless fields.empty? && proofs.empty? && account.note.blank? + .admin-account-bio + - unless fields.empty? && proofs.empty? + %div + .account__header__fields + - proofs.each do |proof| + %dl + %dt= proof.provider.capitalize + %dd.verified + = link_to fa_icon('check'), proof.badge.proof_url, class: 'verified__mark', title: t('accounts.link_verified_on', date: l(proof.updated_at)) + = link_to proof.provider_username, proof.badge.profile_url + + - fields.each do |field| + %dl + %dt.emojify{ title: field.name }= Formatter.instance.format_field(account, field.name, custom_emojify: true) + %dd{ title: field.value, class: custom_field_classes(field) } + - if field.verified? + %span.verified__mark{ title: t('accounts.link_verified_on', date: l(field.verified_at)) } + = fa_icon 'check' + = Formatter.instance.format_field(account, field.value, custom_emojify: true) + + - if account.note.present? + %div + .account__header__content.emojify= Formatter.instance.simplified_format(account, custom_emojify: true) + .dashboard__counters{ style: 'margin-top: 10px' } %div = link_to admin_account_statuses_path(@account.id) do @@ -115,12 +143,15 @@ %th= t('admin.accounts.most_recent_ip') %td= @account.user_current_sign_in_ip %td + - if @account.user_current_sign_in_ip + = table_link_to 'search', t('admin.accounts.search_same_ip'), admin_accounts_path(ip: @account.user_current_sign_in_ip) %tr %th= t('admin.accounts.most_recent_activity') %td - if @account.user_current_sign_in_at %time.formatted{ datetime: @account.user_current_sign_in_at.iso8601, title: l(@account.user_current_sign_in_at) }= l @account.user_current_sign_in_at + %td - if @account.user&.invited? %tr @@ -174,7 +205,7 @@ - unless @account.local? - if DomainBlock.where(domain: @account.domain).exists? - = link_to t('admin.domain_blocks.undo'), admin_instance_path(@account.domain), class: 'button' + = link_to t('admin.domain_blocks.view'), admin_instance_path(@account.domain), class: 'button' - else = link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @account.domain), class: 'button button--destructive' diff --git a/app/views/admin/custom_emojis/_custom_emoji.html.haml b/app/views/admin/custom_emojis/_custom_emoji.html.haml index fbaa9a174..526c844e9 100644 --- a/app/views/admin/custom_emojis/_custom_emoji.html.haml +++ b/app/views/admin/custom_emojis/_custom_emoji.html.haml @@ -1,28 +1,35 @@ -%tr - %td - = custom_emoji_tag(custom_emoji) - %td - %samp= ":#{custom_emoji.shortcode}:" - %td - - if custom_emoji.local? - = t('admin.accounts.location.local') - - else - = link_to custom_emoji.domain, admin_custom_emojis_path(by_domain: custom_emoji.domain) - %td - - if custom_emoji.local? - - if custom_emoji.visible_in_picker - = table_link_to 'eye', t('admin.custom_emojis.listed'), admin_custom_emoji_path(custom_emoji, custom_emoji: { visible_in_picker: false }, page: params[:page], **@filter_params), method: :patch +.batch-table__row + %label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox + = f.check_box :custom_emoji_ids, { multiple: true, include_hidden: false }, custom_emoji.id + .batch-table__row__content.batch-table__row__content--with-image + .batch-table__row__content__image + = custom_emoji_tag(custom_emoji, animate = current_account&.user&.setting_auto_play_gif) + + .batch-table__row__content__text + %samp= ":#{custom_emoji.shortcode}:" + + - if custom_emoji.local? + %span.account-role.bot= custom_emoji.category&.name || t('admin.custom_emojis.uncategorized') + + .batch-table__row__content__extra + - if custom_emoji.local? + = t('admin.accounts.location.local') - else - = table_link_to 'eye-slash', t('admin.custom_emojis.unlisted'), admin_custom_emoji_path(custom_emoji, custom_emoji: { visible_in_picker: true }, page: params[:page], **@filter_params), method: :patch - - else - - if custom_emoji.local_counterpart.present? - = link_to safe_join([custom_emoji_tag(custom_emoji.local_counterpart), t('admin.custom_emojis.overwrite')]), copy_admin_custom_emoji_path(custom_emoji, page: params[:page], **@filter_params), method: :post, class: 'table-action-link' + = custom_emoji.domain + + - if custom_emoji.local_counterpart.present? + • + = t('admin.accounts.location.local') + + %br/ + + - if custom_emoji.disabled? + = t('admin.custom_emojis.disabled') - else - = table_link_to 'copy', t('admin.custom_emojis.copy'), copy_admin_custom_emoji_path(custom_emoji, page: params[:page], **@filter_params), method: :post - %td - - if custom_emoji.disabled? - = table_link_to 'power-off', t('admin.custom_emojis.enable'), enable_admin_custom_emoji_path(custom_emoji, page: params[:page], **@filter_params), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } - - else - = table_link_to 'power-off', t('admin.custom_emojis.disable'), disable_admin_custom_emoji_path(custom_emoji, page: params[:page], **@filter_params), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } - %td - = table_link_to 'times', t('admin.custom_emojis.delete'), admin_custom_emoji_path(custom_emoji, page: params[:page], **@filter_params), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } + = t('admin.custom_emojis.enabled') + - if custom_emoji.local? + • + - if custom_emoji.visible_in_picker? + = t('admin.custom_emojis.listed') + - else + = t('admin.custom_emojis.unlisted') diff --git a/app/views/admin/custom_emojis/index.html.haml b/app/views/admin/custom_emojis/index.html.haml index 3a119276c..4fbadee90 100644 --- a/app/views/admin/custom_emojis/index.html.haml +++ b/app/views/admin/custom_emojis/index.html.haml @@ -20,8 +20,7 @@ = form_tag admin_custom_emojis_url, method: 'GET', class: 'simple_form' do .fields-group - Admin::FilterHelper::CUSTOM_EMOJI_FILTERS.each do |key| - - if params[key].present? - = hidden_field_tag key, params[key] + = hidden_field_tag key, params[key] if params[key].present? - %i(shortcode by_domain).each do |key| .input.string.optional @@ -31,18 +30,54 @@ %button= t('admin.accounts.search') = link_to t('admin.accounts.reset'), admin_custom_emojis_path, class: 'button negative' -.table-wrapper - %table.table - %thead - %tr - %th= t('admin.custom_emojis.emoji') - %th= t('admin.custom_emojis.shortcode') - %th= t('admin.accounts.domain') - %th - %th - %th - %tbody - = render @custom_emojis += form_for(@form, url: batch_admin_custom_emojis_path) do |f| + = hidden_field_tag :page, params[:page] || 1 + + - Admin::FilterHelper::CUSTOM_EMOJI_FILTERS.each do |key| + = hidden_field_tag key, params[key] if params[key].present? + + .batch-table + .batch-table__toolbar + %label.batch-table__toolbar__select.batch-checkbox-all + = check_box_tag :batch_checkbox_all, nil, false + .batch-table__toolbar__actions + - if params[:local] == '1' + = f.button safe_join([fa_icon('save'), t('generic.save_changes')]), name: :update, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + + = f.button safe_join([fa_icon('eye'), t('admin.custom_emojis.list')]), name: :list, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + + = f.button safe_join([fa_icon('eye-slash'), t('admin.custom_emojis.unlist')]), name: :unlist, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + + = f.button safe_join([fa_icon('power-off'), t('admin.custom_emojis.enable')]), name: :enable, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + + = f.button safe_join([fa_icon('power-off'), t('admin.custom_emojis.disable')]), name: :disable, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + + = f.button safe_join([fa_icon('times'), t('admin.custom_emojis.delete')]), name: :delete, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + + - unless params[:local] == '1' + = f.button safe_join([fa_icon('copy'), t('admin.custom_emojis.copy')]), name: :copy, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + + - if params[:local] == '1' + .batch-table__form.simple_form + .fields-row + .fields-group.fields-row__column.fields-row__column-6 + .input.select.optional + .label_input + = f.select :category_id, options_from_collection_for_select(CustomEmojiCategory.all, 'id', 'name'), prompt: t('admin.custom_emojis.assign_category'), class: 'select optional', 'aria-label': t('admin.custom_emojis.assign_category') + + .fields-group.fields-row__column.fields-row__column-6 + .input.string.optional + .label_input + = f.text_field :category_name, class: 'string optional', placeholder: t('admin.custom_emojis.create_new_category'), 'aria-label': t('admin.custom_emojis.create_new_category') + + .batch-table__body + - if @custom_emojis.empty? + = nothing_here 'nothing-here--under-tabs' + - else + = render partial: 'custom_emoji', collection: @custom_emojis, locals: { f: f } = paginate @custom_emojis + +%hr.spacer/ + = link_to t('admin.custom_emojis.upload'), new_admin_custom_emoji_path, class: 'button' diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index 76dbf4388..249e12563 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -4,27 +4,43 @@ .dashboard__counters %div = link_to admin_accounts_url(local: 1, recent: 1) do - .dashboard__counters__num= number_with_delimiter @users_count + .dashboard__counters__num{ title: number_with_delimiter(@users_count, strip_insignificant_zeros: true) } + = number_to_human @users_count, strip_insignificant_zeros: true .dashboard__counters__label= t 'admin.dashboard.total_users' %div %div - .dashboard__counters__num= number_with_delimiter @registrations_week + .dashboard__counters__num{ title: number_with_delimiter(@registrations_week, strip_insignificant_zeros: true) } + = number_to_human @registrations_week, strip_insignificant_zeros: true .dashboard__counters__label= t 'admin.dashboard.week_users_new' %div %div - .dashboard__counters__num= number_with_delimiter @logins_week + .dashboard__counters__num{ title: number_with_delimiter(@logins_week, strip_insignificant_zeros: true) } + = number_to_human @logins_week, strip_insignificant_zeros: true .dashboard__counters__label= t 'admin.dashboard.week_users_active' %div - %div - .dashboard__counters__num= number_with_delimiter @interactions_week - .dashboard__counters__label= t 'admin.dashboard.week_interactions' + = link_to admin_pending_accounts_path do + .dashboard__counters__num{ title: number_with_delimiter(@pending_users_count, strip_insignificant_zeros: true) } + = number_to_human @pending_users_count, strip_insignificant_zeros: true + .dashboard__counters__label= t 'admin.dashboard.pending_users' %div = link_to admin_reports_url do - .dashboard__counters__num= number_with_delimiter @reports_count + .dashboard__counters__num{ title: number_with_delimiter(@reports_count, strip_insignificant_zeros: true) } + = number_to_human @reports_count, strip_insignificant_zeros: true .dashboard__counters__label= t 'admin.dashboard.open_reports' %div + = link_to admin_tags_path(pending_review: '1') do + .dashboard__counters__num{ title: number_with_delimiter(@pending_tags_count, strip_insignificant_zeros: true) } + = number_to_human @pending_tags_count, strip_insignificant_zeros: true + .dashboard__counters__label= t 'admin.dashboard.pending_tags' + %div + %div + .dashboard__counters__num{ title: number_with_delimiter(@interactions_week, strip_insignificant_zeros: true) } + = number_to_human @interactions_week, strip_insignificant_zeros: true + .dashboard__counters__label= t 'admin.dashboard.week_interactions' + %div = link_to sidekiq_url do - .dashboard__counters__num= number_with_delimiter @queue_backlog + .dashboard__counters__num{ title: number_with_delimiter(@queue_backlog, strip_insignificant_zeros: true) } + = number_to_human @queue_backlog, strip_insignificant_zeros: true .dashboard__counters__label= t 'admin.dashboard.backlog' .dashboard__widgets @@ -52,7 +68,11 @@ %li = feature_hint(link_to(t('admin.dashboard.keybase'), edit_admin_settings_path), @keybase_integration) %li + = feature_hint(link_to(t('admin.dashboard.trends'), edit_admin_settings_path), @trends_enabled) + %li = feature_hint(link_to(t('admin.dashboard.feature_relay'), admin_relays_path), @relay_enabled) + %li + = feature_hint(link_to(t('admin.dashboard.feature_spam_check'), edit_admin_settings_path), @spam_check_enabled) .dashboard__widgets__versions %div @@ -91,6 +111,10 @@ %li = feature_hint(t('admin.dashboard.single_user_mode'), @single_user_mode) %li + = feature_hint(t('admin.dashboard.authorized_fetch_mode'), @authorized_fetch) + %li + = feature_hint(t('admin.dashboard.whitelist_mode'), @whitelist_enabled) + %li = feature_hint('LDAP', @ldap_enabled) %li = feature_hint('CAS', @cas_enabled) @@ -107,5 +131,5 @@ %ul - @trending_hashtags.each do |tag| %li - = link_to "##{tag.name}", web_url("timelines/tag/#{tag.name}") + = link_to content_tag(:span, "##{tag.name}", class: !tag.trendable? && !tag.reviewed? ? 'warning-hint' : (!tag.trendable? ? 'negative-hint' : nil)), admin_tag_path(tag.id) %span.pull-right= number_with_delimiter(tag.history[0][:accounts].to_i) diff --git a/app/views/admin/domain_allows/new.html.haml b/app/views/admin/domain_allows/new.html.haml new file mode 100644 index 000000000..85ab7e464 --- /dev/null +++ b/app/views/admin/domain_allows/new.html.haml @@ -0,0 +1,11 @@ +- content_for :page_title do + = t('admin.domain_allows.add_new') + += simple_form_for @domain_allow, url: admin_domain_allows_path do |f| + = render 'shared/error_messages', object: @domain_allow + + .fields-group + = f.input :domain, wrapper: :with_label, label: t('admin.domain_blocks.domain'), required: true + + .actions + = f.button :button, t('admin.domain_allows.add_new'), type: :submit diff --git a/app/views/admin/domain_blocks/edit.html.haml b/app/views/admin/domain_blocks/edit.html.haml new file mode 100644 index 000000000..8669bb6d1 --- /dev/null +++ b/app/views/admin/domain_blocks/edit.html.haml @@ -0,0 +1,27 @@ +- content_for :page_title do + = t('admin.domain_blocks.edit') + += simple_form_for @domain_block, url: admin_domain_block_path(@domain_block), method: :put do |f| + = render 'shared/error_messages', object: @domain_block + + .fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :domain, wrapper: :with_label, label: t('admin.domain_blocks.domain'), hint: t('admin.domain_blocks.new.hint'), required: true, readonly: true, disabled: true + + .fields-row__column.fields-row__column-6.fields-group + = f.input :severity, collection: DomainBlock.severities.keys, wrapper: :with_label, include_blank: false, label_method: lambda { |type| t("admin.domain_blocks.new.severity.#{type}") }, hint: t('admin.domain_blocks.new.severity.desc_html') + + .fields-group + = f.input :reject_media, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_media'), hint: I18n.t('admin.domain_blocks.reject_media_hint') + + .fields-group + = f.input :reject_reports, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reports'), hint: I18n.t('admin.domain_blocks.reject_reports_hint') + + .field-group + = f.input :private_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.private_comment'), hint: t('admin.domain_blocks.private_comment_hint'), rows: 6 + + .field-group + = f.input :public_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.public_comment'), hint: t('admin.domain_blocks.public_comment_hint'), rows: 6 + + .actions + = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/admin/domain_blocks/new.html.haml b/app/views/admin/domain_blocks/new.html.haml index 3a4963489..a643825df 100644 --- a/app/views/admin/domain_blocks/new.html.haml +++ b/app/views/admin/domain_blocks/new.html.haml @@ -17,5 +17,11 @@ .fields-group = f.input :reject_reports, as: :boolean, wrapper: :with_label, label: I18n.t('admin.domain_blocks.reject_reports'), hint: I18n.t('admin.domain_blocks.reject_reports_hint') + .field-group + = f.input :private_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.private_comment'), hint: t('admin.domain_blocks.private_comment_hint'), rows: 6 + + .field-group + = f.input :public_comment, wrapper: :with_label, label: I18n.t('admin.domain_blocks.public_comment'), hint: t('admin.domain_blocks.public_comment_hint'), rows: 6 + .actions = f.button :button, t('.create'), type: :submit diff --git a/app/views/admin/domain_blocks/show.html.haml b/app/views/admin/domain_blocks/show.html.haml index dca4dbac7..e64aaa629 100644 --- a/app/views/admin/domain_blocks/show.html.haml +++ b/app/views/admin/domain_blocks/show.html.haml @@ -1,6 +1,18 @@ - content_for :page_title do = t('admin.domain_blocks.show.title', domain: @domain_block.domain) +- if @domain_block.private_comment.present? + .speech-bubble + .speech-bubble__bubble + = simple_format(h(@domain_block.private_comment)) + .speech-bubble__owner= t 'admin.instances.private_comment' + +- if @domain_block.public_comment.present? + .speech-bubble + .speech-bubble__bubble + = simple_format(h(@domain_block.public_comment)) + .speech-bubble__owner= t 'admin.instances.public_comment' + = simple_form_for @domain_block, url: admin_domain_block_path(@domain_block), method: :delete do |f| - unless (@domain_block.noop?) diff --git a/app/views/admin/instances/index.html.haml b/app/views/admin/instances/index.html.haml index 9574c3147..1d85aa75e 100644 --- a/app/views/admin/instances/index.html.haml +++ b/app/views/admin/instances/index.html.haml @@ -6,24 +6,30 @@ %strong= t('admin.instances.moderation.title') %ul %li= filter_link_to t('admin.instances.moderation.all'), limited: nil - %li= filter_link_to t('admin.instances.moderation.limited'), limited: '1' + + - unless whitelist_mode? + %li= filter_link_to t('admin.instances.moderation.limited'), limited: '1' %div{ style: 'flex: 1 1 auto; text-align: right' } - = link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path, class: 'button' + - if whitelist_mode? + = link_to t('admin.domain_allows.add_new'), new_admin_domain_allow_path, class: 'button' + - else + = link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path, class: 'button' -= form_tag admin_instances_url, method: 'GET', class: 'simple_form' do - .fields-group - - Admin::FilterHelper::INSTANCES_FILTERS.each do |key| - - if params[key].present? - = hidden_field_tag key, params[key] +- unless whitelist_mode? + = form_tag admin_instances_url, method: 'GET', class: 'simple_form' do + .fields-group + - Admin::FilterHelper::INSTANCES_FILTERS.each do |key| + - if params[key].present? + = hidden_field_tag key, params[key] - - %i(by_domain).each do |key| - .input.string.optional - = text_field_tag key, params[key], class: 'string optional', placeholder: I18n.t("admin.instances.#{key}") + - %i(by_domain).each do |key| + .input.string.optional + = text_field_tag key, params[key], class: 'string optional', placeholder: I18n.t("admin.instances.#{key}") - .actions - %button= t('admin.accounts.search') - = link_to t('admin.accounts.reset'), admin_instances_path, class: 'button negative' + .actions + %button= t('admin.accounts.search') + = link_to t('admin.accounts.reset'), admin_instances_path, class: 'button negative' %hr.spacer/ @@ -33,21 +39,26 @@ %h4 = instance.domain %small - = t('admin.instances.known_accounts', count: instance.cached_accounts_count) - - if instance.domain_block + - first_item = true - if !instance.domain_block.noop? - • = t("admin.domain_blocks.severity.#{instance.domain_block.severity}") - - if instance.domain_block.reject_media? - • - = t('admin.domain_blocks.rejecting_media') - - if instance.domain_block.reject_reports? - • - = t('admin.domain_blocks.rejecting_reports') - - .avatar-stack - - instance.cached_sample_accounts.each do |account| - = image_tag current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url, width: 48, height: 48, alt: '', class: 'account__avatar' + - first_item = false + - unless instance.domain_block.suspend? + - if instance.domain_block.reject_media? + - unless first_item + • + = t('admin.domain_blocks.rejecting_media') + - first_item = false + - if instance.domain_block.reject_reports? + - unless first_item + • + = t('admin.domain_blocks.rejecting_reports') + - elsif whitelist_mode? + = t('admin.accounts.whitelisted') + - else + = t('admin.accounts.no_limits_imposed') + - if instance.countable? + .trends__item__current{ title: t('admin.instances.known_accounts', count: instance.accounts_count) }= number_to_human instance.accounts_count, strip_insignificant_zeros: true = paginate paginated_instances diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml index c7992a490..49a666a5a 100644 --- a/app/views/admin/instances/show.html.haml +++ b/app/views/admin/instances/show.html.haml @@ -19,7 +19,7 @@ .dashboard__counters__num= number_with_delimiter @blocks_count .dashboard__counters__label= t 'admin.instances.total_blocked_by_us' %div - %div + = link_to admin_reports_path(by_target_domain: @instance.domain) do .dashboard__counters__num= number_with_delimiter @reports_count .dashboard__counters__label= t 'admin.instances.total_reported' %div @@ -31,6 +31,18 @@ = fa_icon 'times' .dashboard__counters__label= t 'admin.instances.delivery_available' +- if @private_comment.present? + .speech-bubble + .speech-bubble__bubble + = simple_format(h(@private_comment)) + .speech-bubble__owner= t 'admin.instances.private_comment' + +- if @public_comment.present? + .speech-bubble + .speech-bubble__bubble + = simple_format(h(@public_comment)) + .speech-bubble__owner= t 'admin.instances.public_comment' + %hr.spacer/ %div{ style: 'overflow: hidden' } @@ -38,7 +50,10 @@ = link_to t('admin.accounts.title'), admin_accounts_path(remote: '1', by_domain: @instance.domain), class: 'button' %div{ style: 'float: right' } - - if @domain_block + - if @domain_allow + = link_to t('admin.domain_allows.undo'), admin_domain_allow_path(@domain_allow), class: 'button button--destructive', data: { confirm: t('admin.accounts.are_you_sure'), method: :delete } + - elsif @domain_block + = link_to t('admin.domain_blocks.edit'), edit_admin_domain_block_path(@domain_block), class: 'button' = link_to t('admin.domain_blocks.undo'), admin_domain_block_path(@domain_block), class: 'button' - else = link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @instance.domain), class: 'button' diff --git a/app/views/admin/reports/_status.html.haml b/app/views/admin/reports/_status.html.haml index b3c145120..425d315e1 100644 --- a/app/views/admin/reports/_status.html.haml +++ b/app/views/admin/reports/_status.html.haml @@ -16,11 +16,14 @@ - video = status.proper.media_attachments.first = react_component :video, src: video.file.url(:original), preview: video.file.url(:small), sensitive: !current_account&.user&.show_all_media? && status.proper.sensitive? || current_account&.user&.hide_all_media?, width: 610, height: 343, inline: true, alt: video.description - else - = react_component :media_gallery, height: 343, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, 'autoPlayGif': current_account&.user&.setting_auto_play_gif, media: status.proper.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } + = react_component :media_gallery, height: 343, sensitive: !current_account&.user&.show_all_media? && status.proper.sensitive? || current_account&.user&.hide_all_media?, 'autoPlayGif': current_account&.user&.setting_auto_play_gif, media: status.proper.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } .detailed-status__meta - = link_to TagManager.instance.url_for(status), class: 'detailed-status__datetime', target: stream_link_target, rel: 'noopener' do + = link_to ActivityPub::TagManager.instance.url_for(status), class: 'detailed-status__datetime', target: stream_link_target, rel: 'noopener noreferrer' do %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) + - if status.discarded? + · + %span.negative-hint= t('admin.statuses.deleted') · - if status.reblog? = fa_icon('retweet fw') diff --git a/app/views/admin/reports/index.html.haml b/app/views/admin/reports/index.html.haml index d73faccb0..b09472270 100644 --- a/app/views/admin/reports/index.html.haml +++ b/app/views/admin/reports/index.html.haml @@ -8,6 +8,20 @@ %li= filter_link_to t('admin.reports.unresolved'), resolved: nil %li= filter_link_to t('admin.reports.resolved'), resolved: '1' += form_tag admin_reports_url, method: 'GET', class: 'simple_form' do + .fields-group + - Admin::FilterHelper::REPORT_FILTERS.each do |key| + - if params[key].present? + = hidden_field_tag key, params[key] + + - %i(by_target_domain).each do |key| + .input.string.optional + = text_field_tag key, params[key], class: 'string optional', placeholder: I18n.t("admin.reports.#{key}") + + .actions + %button= t('admin.accounts.search') + = link_to t('admin.accounts.reset'), admin_reports_path, class: 'button negative' + - @reports.group_by(&:target_account_id).each do |target_account_id, reports| - target_account = reports.first.target_account .report-card @@ -28,7 +42,9 @@ - reports.each do |report| .report-card__summary__item .report-card__summary__item__reported-by - - if report.account.local? + - if report.account.instance_actor? + = site_hostname + - elsif report.account.local? = admin_account_link_to report.account - else = report.account.domain diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml index fc430e19e..0b84e1788 100644 --- a/app/views/admin/reports/show.html.haml +++ b/app/views/admin/reports/show.html.haml @@ -26,7 +26,9 @@ %td= table_link_to 'file', pluralize(@report.target_account.targeted_moderation_notes.count, t('admin.reports.account.note')), admin_reports_path(target_account_id: @report.target_account.id) %tr %th= t('admin.reports.reported_by') - - if @report.account.local? + - if @report.account.instance_actor? + %td{ colspan: 3 }= site_hostname + - elsif @report.account.local? %td= admin_account_link_to @report.account %td= table_link_to 'flag', pluralize(@report.account.targeted_reports.count, t('admin.reports.account.report')), admin_reports_path(target_account_id: @report.account.id) %td= table_link_to 'file', pluralize(@report.account.targeted_moderation_notes.count, t('admin.reports.account.note')), admin_reports_path(target_account_id: @report.account.id) diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index a8c9f6a58..ba66aeff8 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -20,10 +20,10 @@ = f.input :site_contact_email, wrapper: :with_label, label: t('admin.settings.contact_information.email') .fields-group - = f.input :site_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description.title'), hint: t('admin.settings.site_description.desc_html'), input_html: { rows: 4 } + = f.input :site_short_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_short_description.title'), hint: t('admin.settings.site_short_description.desc_html'), input_html: { rows: 2 } .fields-group - = f.input :site_short_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_short_description.title'), hint: t('admin.settings.site_short_description.desc_html'), input_html: { rows: 2 } + = f.input :site_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description.title'), hint: t('admin.settings.site_description.desc_html'), input_html: { rows: 2 } .fields-row .fields-row__column.fields-row__column-6.fields-group @@ -42,11 +42,12 @@ %hr.spacer/ - .fields-group - = f.input :timeline_preview, as: :boolean, wrapper: :with_label, label: t('admin.settings.timeline_preview.title'), hint: t('admin.settings.timeline_preview.desc_html') + - unless whitelist_mode? + .fields-group + = f.input :timeline_preview, as: :boolean, wrapper: :with_label, label: t('admin.settings.timeline_preview.title'), hint: t('admin.settings.timeline_preview.desc_html') - .fields-group - = f.input :show_known_fediverse_at_about_page, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_known_fediverse_at_about_page.title'), hint: t('admin.settings.show_known_fediverse_at_about_page.desc_html') + .fields-group + = f.input :show_known_fediverse_at_about_page, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_known_fediverse_at_about_page.title'), hint: t('admin.settings.show_known_fediverse_at_about_page.desc_html') .fields-group = f.input :show_staff_badge, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_staff_badge.title'), hint: t('admin.settings.show_staff_badge.desc_html') @@ -54,17 +55,27 @@ .fields-group = f.input :open_deletion, as: :boolean, wrapper: :with_label, label: t('admin.settings.registrations.deletion.title'), hint: t('admin.settings.registrations.deletion.desc_html') - .fields-group - = f.input :activity_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.activity_api_enabled.title'), hint: t('admin.settings.activity_api_enabled.desc_html') + - unless whitelist_mode? + .fields-group + = f.input :activity_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.activity_api_enabled.title'), hint: t('admin.settings.activity_api_enabled.desc_html') - .fields-group - = f.input :peers_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.peers_api_enabled.title'), hint: t('admin.settings.peers_api_enabled.desc_html') + .fields-group + = f.input :peers_api_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.peers_api_enabled.title'), hint: t('admin.settings.peers_api_enabled.desc_html') - .fields-group - = f.input :preview_sensitive_media, as: :boolean, wrapper: :with_label, label: t('admin.settings.preview_sensitive_media.title'), hint: t('admin.settings.preview_sensitive_media.desc_html') + .fields-group + = f.input :preview_sensitive_media, as: :boolean, wrapper: :with_label, label: t('admin.settings.preview_sensitive_media.title'), hint: t('admin.settings.preview_sensitive_media.desc_html') - .fields-group - = f.input :profile_directory, as: :boolean, wrapper: :with_label, label: t('admin.settings.profile_directory.title'), hint: t('admin.settings.profile_directory.desc_html') + .fields-group + = f.input :profile_directory, as: :boolean, wrapper: :with_label, label: t('admin.settings.profile_directory.title'), hint: t('admin.settings.profile_directory.desc_html') + + .fields-group + = f.input :trends, as: :boolean, wrapper: :with_label, label: t('admin.settings.trends.title'), hint: t('admin.settings.trends.desc_html') + + .fields-group + = f.input :trendable_by_default, as: :boolean, wrapper: :with_label, label: t('admin.settings.trendable_by_default.title'), hint: t('admin.settings.trendable_by_default.desc_html') + + .fields-group + = f.input :noindex, as: :boolean, wrapper: :with_label, label: t('admin.settings.default_noindex.title'), hint: t('admin.settings.default_noindex.desc_html') .fields-group = f.input :hide_followers_count, as: :boolean, wrapper: :with_label, label: t('admin.settings.hide_followers_count.title'), hint: t('admin.settings.hide_followers_count.desc_html') @@ -78,14 +89,23 @@ .fields-group = f.input :show_replies_in_public_timelines, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_replies_in_public_timelines.title'), hint: t('admin.settings.show_replies_in_public_timelines.desc_html') + .fields-group + = f.input :spam_check_enabled, as: :boolean, wrapper: :with_label, label: t('admin.settings.spam_check_enabled.title'), hint: t('admin.settings.spam_check_enabled.desc_html') + %hr.spacer/ .fields-group = f.input :min_invite_role, wrapper: :with_label, collection: %i(disabled user moderator admin), label: t('admin.settings.registrations.min_invite_role.title'), label_method: lambda { |role| role == :disabled ? t('admin.settings.registrations.min_invite_role.disabled') : t("admin.accounts.roles.#{role}") }, include_blank: false, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li' + .fields-row + .fields-row__column.fields-row__column-6.fields-group + = f.input :show_domain_blocks, wrapper: :with_label, collection: %i(disabled users all), label: t('admin.settings.domain_blocks.title'), label_method: lambda { |value| t("admin.settings.domain_blocks.#{value}") }, include_blank: false, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li' + .fields-row__column.fields-row__column-6.fields-group + = f.input :show_domain_blocks_rationale, wrapper: :with_label, collection: %i(disabled users all), label: t('admin.settings.domain_blocks_rationale.title'), label_method: lambda { |value| t("admin.settings.domain_blocks.#{value}") }, include_blank: false, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li' + .fields-group + = f.input :site_extended_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description_extended.title'), hint: t('admin.settings.site_description_extended.desc_html'), input_html: { rows: 8 } unless whitelist_mode? = f.input :closed_registrations_message, as: :text, wrapper: :with_block_label, label: t('admin.settings.registrations.closed_message.title'), hint: t('admin.settings.registrations.closed_message.desc_html'), input_html: { rows: 8 } - = f.input :site_extended_description, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_description_extended.title'), hint: t('admin.settings.site_description_extended.desc_html'), input_html: { rows: 8 } = f.input :site_terms, wrapper: :with_block_label, as: :text, label: t('admin.settings.site_terms.title'), hint: t('admin.settings.site_terms.desc_html'), input_html: { rows: 8 } = f.input :custom_css, wrapper: :with_block_label, as: :text, input_html: { rows: 8 }, label: t('admin.settings.custom_css.title'), hint: t('admin.settings.custom_css.desc_html') diff --git a/app/views/admin/subscriptions/_subscription.html.haml b/app/views/admin/subscriptions/_subscription.html.haml deleted file mode 100644 index 1dec8e396..000000000 --- a/app/views/admin/subscriptions/_subscription.html.haml +++ /dev/null @@ -1,18 +0,0 @@ -%tr - %td - %samp= subscription.account.acct - %td - %samp= subscription.callback_url - %td - - if subscription.confirmed? - %i.fa.fa-check - %td{ style: "color: #{subscription.expired? ? 'red' : 'inherit'};" } - %time.time-ago{ datetime: subscription.expires_at.iso8601, title: l(subscription.expires_at) } - = precede subscription.expired? ? '-' : '' do - = time_ago_in_words(subscription.expires_at) - %td - - if subscription.last_successful_delivery_at? - %time.formatted{ datetime: subscription.last_successful_delivery_at.iso8601, title: l(subscription.last_successful_delivery_at) } - = l subscription.last_successful_delivery_at - - else - %i.fa.fa-times diff --git a/app/views/admin/subscriptions/index.html.haml b/app/views/admin/subscriptions/index.html.haml deleted file mode 100644 index 83704c8ee..000000000 --- a/app/views/admin/subscriptions/index.html.haml +++ /dev/null @@ -1,16 +0,0 @@ -- content_for :page_title do - = t('admin.subscriptions.title') - -.table-wrapper - %table.table - %thead - %tr - %th= t('admin.subscriptions.topic') - %th= t('admin.subscriptions.callback_url') - %th= t('admin.subscriptions.confirmed') - %th= t('admin.subscriptions.expires_in') - %th= t('admin.subscriptions.last_delivery') - %tbody - = render @subscriptions - -= paginate @subscriptions diff --git a/app/views/admin/tags/_tag.html.haml b/app/views/admin/tags/_tag.html.haml index 961b83f93..670f3bc05 100644 --- a/app/views/admin/tags/_tag.html.haml +++ b/app/views/admin/tags/_tag.html.haml @@ -1,12 +1,20 @@ -%tr - %td - = link_to explore_hashtag_path(tag) do - = fa_icon 'hashtag' - = tag.name - %td - = t('directories.people', count: tag.accounts_count) - %td - - if tag.hidden? - = table_link_to 'eye', t('admin.tags.unhide'), unhide_admin_tag_path(tag.id, **@filter_params), method: :post - - else - = table_link_to 'eye-slash', t('admin.tags.hide'), hide_admin_tag_path(tag.id, **@filter_params), method: :post +.batch-table__row + %label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox + = f.check_box :tag_ids, { multiple: true, include_hidden: false }, tag.id + + .directory__tag + = link_to admin_tag_path(tag.id) do + %h4 + = fa_icon 'hashtag' + = tag.name + + %small + = t('admin.tags.in_directory', count: tag.accounts_count) + • + = t('admin.tags.unique_uses_today', count: tag.history.first[:accounts]) + + - if tag.trending? + = fa_icon 'fire fw' + = t('admin.tags.trending_right_now') + + .trends__item__current= number_to_human tag.history.first[:uses], strip_insignificant_zeros: true diff --git a/app/views/admin/tags/index.html.haml b/app/views/admin/tags/index.html.haml index 4ba395860..298ac59e9 100644 --- a/app/views/admin/tags/index.html.haml +++ b/app/views/admin/tags/index.html.haml @@ -3,17 +3,74 @@ .filters .filter-subset - %strong= t('admin.reports.status') + %strong= t('admin.tags.context') %ul - %li= filter_link_to t('admin.tags.visible'), hidden: nil - %li= filter_link_to t('admin.tags.hidden'), hidden: '1' - -.table-wrapper - %table.table - %thead - %tr - %th= t('admin.tags.name') - %th= t('admin.tags.accounts') - %th - %tbody - = render @tags + %li= filter_link_to t('generic.all'), directory: nil + %li= filter_link_to t('admin.tags.directory'), directory: '1' + + .filter-subset + %strong= t('admin.tags.review') + %ul + %li= filter_link_to t('generic.all'), reviewed: nil, unreviewed: nil, pending_review: nil + %li= filter_link_to t('admin.tags.unreviewed'), unreviewed: '1', reviewed: nil, pending_review: nil + %li= filter_link_to t('admin.tags.reviewed'), reviewed: '1', unreviewed: nil, pending_review: nil + %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{Tag.pending_review.count})"], ' '), pending_review: '1', reviewed: nil, unreviewed: nil + + .filter-subset + %strong= t('generic.order_by') + %ul + %li= filter_link_to t('admin.tags.most_recent'), popular: nil, active: nil + %li= filter_link_to t('admin.tags.most_popular'), popular: '1', active: nil + %li= filter_link_to t('admin.tags.last_active'), active: '1', popular: nil + += form_tag admin_tags_url, method: 'GET', class: 'simple_form' do + .fields-group + - Admin::FilterHelper::TAGS_FILTERS.each do |key| + = hidden_field_tag key, params[key] if params[key].present? + + - %i(name).each do |key| + .input.string.optional + = text_field_tag key, params[key], class: 'string optional', placeholder: I18n.t("admin.tags.#{key}") + + .actions + %button= t('admin.accounts.search') + = link_to t('admin.accounts.reset'), admin_tags_path, class: 'button negative' + +%hr.spacer/ + += form_for(@form, url: batch_admin_tags_path) do |f| + = hidden_field_tag :page, params[:page] || 1 + = hidden_field_tag :name, params[:name] if params[:name].present? + + - Admin::FilterHelper::TAGS_FILTERS.each do |key| + = hidden_field_tag key, params[key] if params[key].present? + + .batch-table.optional + .batch-table__toolbar + %label.batch-table__toolbar__select.batch-checkbox-all + = check_box_tag :batch_checkbox_all, nil, false + .batch-table__toolbar__actions + - if params[:pending_review] == '1' + = f.button safe_join([fa_icon('check'), t('admin.accounts.approve')]), name: :approve, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + + = f.button safe_join([fa_icon('times'), t('admin.accounts.reject')]), name: :reject, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') } + - else + %span.neutral-hint= t('generic.no_batch_actions_available') + + .batch-table__body + - if @tags.empty? + = nothing_here 'nothing-here--under-tabs' + - else + = render partial: 'tag', collection: @tags, locals: { f: f } + += paginate @tags + +- if params[:pending_review] == '1' + %hr.spacer/ + + %div{ style: 'overflow: hidden' } + %div{ style: 'float: right' } + = link_to t('admin.accounts.reject_all'), reject_all_admin_tags_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' + + %div + = link_to t('admin.accounts.approve_all'), approve_all_admin_tags_path, method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml new file mode 100644 index 000000000..c9a147587 --- /dev/null +++ b/app/views/admin/tags/show.html.haml @@ -0,0 +1,52 @@ +- content_for :page_title do + = "##{@tag.name}" + +.dashboard__counters + %div + = link_to tag_url(@tag), target: '_blank', rel: 'noopener noreferrer' do + .dashboard__counters__num= number_with_delimiter @accounts_today + .dashboard__counters__label= t 'admin.tags.accounts_today' + %div + %div + .dashboard__counters__num= number_with_delimiter @accounts_week + .dashboard__counters__label= t 'admin.tags.accounts_week' + %div + - if @tag.accounts_count > 0 + = link_to explore_hashtag_path(@tag) do + .dashboard__counters__num= number_with_delimiter @tag.accounts_count + .dashboard__counters__label= t 'admin.tags.directory' + - else + %div + .dashboard__counters__num= number_with_delimiter @tag.accounts_count + .dashboard__counters__label= t 'admin.tags.directory' + +%hr.spacer/ + += simple_form_for @tag, url: admin_tag_path(@tag.id) do |f| + = render 'shared/error_messages', object: @tag + + .fields-group + = f.input :name, wrapper: :with_block_label + + .fields-group + = f.input :usable, as: :boolean, wrapper: :with_label + = f.input :trendable, as: :boolean, wrapper: :with_label, disabled: !Setting.trends + = f.input :listable, as: :boolean, wrapper: :with_label, disabled: !Setting.profile_directory + + .actions + = f.button :button, t('generic.save_changes'), type: :submit + +%hr.spacer/ + +%h3= t 'admin.tags.breakdown' + +.table-wrapper + %table.table + %tbody + - total = @usage_by_domain.sum(&:last).to_f + + - @usage_by_domain.each do |(domain, count)| + %tr + %th= domain || site_hostname + %td= number_to_percentage((count / total) * 100, precision: 1) + %td= number_with_delimiter count diff --git a/app/views/admin_mailer/new_trending_tag.text.erb b/app/views/admin_mailer/new_trending_tag.text.erb new file mode 100644 index 000000000..e4bfdc591 --- /dev/null +++ b/app/views/admin_mailer/new_trending_tag.text.erb @@ -0,0 +1,5 @@ +<%= raw t('application_mailer.salutation', name: display_name(@me)) %> + +<%= raw t('admin_mailer.new_trending_tag.body', name: @tag.name) %> + +<%= raw t('application_mailer.view')%> <%= admin_tags_url(pending_review: '1') %> diff --git a/app/views/application/_card.html.haml b/app/views/application/_card.html.haml index e6059b035..808dce514 100644 --- a/app/views/application/_card.html.haml +++ b/app/views/application/_card.html.haml @@ -1,7 +1,7 @@ -- account_url = local_assigns[:admin] ? admin_account_path(account.id) : TagManager.instance.url_for(account) +- account_url = local_assigns[:admin] ? admin_account_path(account.id) : ActivityPub::TagManager.instance.url_for(account) .card.h-card - = link_to account_url, target: '_blank', rel: 'noopener' do + = link_to account_url, target: '_blank', rel: 'noopener noreferrer' do .card__img = image_tag account.header.url, alt: '' .card__bar @@ -9,7 +9,7 @@ = image_tag account.avatar.url, alt: '', width: 48, height: 48, class: 'u-photo' .display-name - %span{id: "default_account_display_name", style: "display:none;"}= account.username + %span{ id: "default_account_display_name", style: "display: none" }= account.username %bdi %strong.emojify.p-name= display_name(account, custom_emojify: true) %span diff --git a/app/views/application/_sidebar.html.haml b/app/views/application/_sidebar.html.haml index b5ce5845e..7ec91c06a 100644 --- a/app/views/application/_sidebar.html.haml +++ b/app/views/application/_sidebar.html.haml @@ -3,4 +3,14 @@ = image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('media/images/preview.jpg'), alt: @instance_presenter.site_title .hero-widget__text - %p= @instance_presenter.site_short_description.html_safe.presence || @instance_presenter.site_description.html_safe.presence || t('about.generic_description', domain: site_hostname) + %p= @instance_presenter.site_short_description.html_safe.presence || t('about.about_mastodon_html') + +- if Setting.trends && !(user_signed_in? && !current_user.setting_trends) + - trends = TrendingTags.get(3) + + - unless trends.empty? + .endorsements-widget.trends-widget + %h4.emojify= t('footer.trending_now') + + - trends.each do |tag| + = react_component :hashtag, hashtag: ActiveModelSerializers::SerializableResource.new(tag, serializer: REST::TagSerializer).as_json diff --git a/app/views/auth/challenges/new.html.haml b/app/views/auth/challenges/new.html.haml new file mode 100644 index 000000000..9aef2c35d --- /dev/null +++ b/app/views/auth/challenges/new.html.haml @@ -0,0 +1,15 @@ +- content_for :page_title do + = t('challenge.prompt') + += simple_form_for @challenge, url: request.get? ? auth_challenge_path : '' do |f| + = f.input :return_to, as: :hidden + + .field-group + = f.input :current_password, wrapper: :with_block_label, input_html: { :autocomplete => 'off', :autofocus => true }, label: t('challenge.prompt'), required: true + + .actions + = f.button :button, t('challenge.confirm'), type: :submit + + %p.hint.subtle-hint= t('challenge.hint_html') + +.form-footer= render 'auth/shared/links' diff --git a/app/views/auth/confirmations/finish_signup.html.haml b/app/views/auth/confirmations/finish_signup.html.haml deleted file mode 100644 index 9d09b74e1..000000000 --- a/app/views/auth/confirmations/finish_signup.html.haml +++ /dev/null @@ -1,15 +0,0 @@ -- content_for :page_title do - = t('auth.confirm_email') - -= simple_form_for(current_user, as: 'user', url: finish_signup_path, html: { role: 'form'}) do |f| - - if @show_errors && current_user.errors.any? - #error_explanation - - current_user.errors.full_messages.each do |msg| - = msg - %br - - .fields-group - = f.input :email, wrapper: :with_label, required: true, hint: false - - .actions - = f.submit t('auth.confirm_email'), class: 'button' diff --git a/app/views/auth/registrations/_sessions.html.haml b/app/views/auth/registrations/_sessions.html.haml index d7d96a1bb..395e36a9f 100644 --- a/app/views/auth/registrations/_sessions.html.haml +++ b/app/views/auth/registrations/_sessions.html.haml @@ -1,6 +1,8 @@ -%h4= t 'sessions.title' +%h3= t 'sessions.title' %p.muted-hint= t 'sessions.explanation' +%hr.spacer/ + .table-wrapper %table.table.inline-table %thead diff --git a/app/views/auth/registrations/_status.html.haml b/app/views/auth/registrations/_status.html.haml new file mode 100644 index 000000000..47112dae0 --- /dev/null +++ b/app/views/auth/registrations/_status.html.haml @@ -0,0 +1,22 @@ +%h3= t('auth.status.account_status') + +.simple_form + %p.hint + - if @user.account.suspended? + %span.negative-hint= t('user_mailer.warning.explanation.suspend') + - elsif @user.disabled? + %span.negative-hint= t('user_mailer.warning.explanation.disable') + - elsif @user.account.silenced? + %span.warning-hint= t('user_mailer.warning.explanation.silence') + - elsif !@user.confirmed? + %span.warning-hint= t('auth.status.confirming') + = link_to t('auth.didnt_get_confirmation'), new_user_confirmation_path + - elsif !@user.approved? + %span.warning-hint= t('auth.status.pending') + - elsif @user.account.moved_to_account_id.present? + %span.positive-hint= t('auth.status.redirecting_to', acct: @user.account.moved_to_account.acct) + = link_to t('migrations.cancel'), settings_migration_path + - else + %span.positive-hint= t('auth.status.functional') + +%hr.spacer/ diff --git a/app/views/auth/registrations/edit.html.haml b/app/views/auth/registrations/edit.html.haml index 694461fdf..a155c75c9 100644 --- a/app/views/auth/registrations/edit.html.haml +++ b/app/views/auth/registrations/edit.html.haml @@ -1,25 +1,28 @@ - content_for :page_title do - = t('auth.security') + = t('settings.account_settings') + += render 'status' + +%h3= t('auth.security') = simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, class: 'auth_edit' }) do |f| = render 'shared/error_messages', object: resource - if !use_seamless_external_login? || resource.encrypted_password.present? - .fields-group - = f.input :email, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }, required: true, hint: false - - .fields-group - = f.input :current_password, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.current_password'), :autocomplete => 'off' }, required: true - - .fields-group - = f.input :password, wrapper: :with_label, label: t('simple_form.labels.defaults.new_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.new_password'), :autocomplete => 'off' }, hint: false - - .fields-group - = f.input :password_confirmation, wrapper: :with_label, label: t('simple_form.labels.defaults.confirm_new_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_new_password'), :autocomplete => 'off' } - + .fields-row + .fields-row__column.fields-group.fields-row__column-6 + = f.input :email, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }, required: true, disabled: current_account.suspended? + .fields-row__column.fields-group.fields-row__column-6 + = f.input :current_password, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.current_password'), :autocomplete => 'off' }, required: true, disabled: current_account.suspended?, hint: false + + .fields-row + .fields-row__column.fields-group.fields-row__column-6 + = f.input :password, wrapper: :with_label, label: t('simple_form.labels.defaults.new_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.new_password'), :autocomplete => 'off' }, hint: t('simple_form.hints.defaults.password'), disabled: current_account.suspended? + .fields-row__column.fields-group.fields-row__column-6 + = f.input :password_confirmation, wrapper: :with_label, label: t('simple_form.labels.defaults.confirm_new_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_new_password'), :autocomplete => 'off' }, disabled: current_account.suspended? .actions - = f.button :button, t('generic.save_changes'), type: :submit + = f.button :button, t('generic.save_changes'), type: :submit, class: 'button', disabled: current_account.suspended? - else %p.hint= t('users.seamless_external_login') @@ -27,7 +30,18 @@ = render 'sessions' -- if open_deletion? +%hr.spacer/ + +%h3= t('auth.migrate_account') +%p.muted-hint= t('auth.migrate_account_html', path: settings_migration_path) + +%hr.spacer/ + +%h3= t('migrations.incoming_migrations') +%p.muted-hint= t('migrations.incoming_migrations_html', path: settings_aliases_path) + +- if open_deletion? && !current_account.suspended? %hr.spacer/ - %h4= t('auth.delete_account') + + %h3= t('auth.delete_account') %p.muted-hint= t('auth.delete_account_html', path: settings_delete_path) diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index b4a7cced5..e807c8d86 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -2,7 +2,7 @@ = t('auth.register') - content_for :header_tags do - = render partial: 'shared/og' + = render partial: 'shared/og', locals: { description: description_for_sign_up } = simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| = render 'shared/error_messages', object: resource @@ -33,7 +33,7 @@ = f.input :invite_code, as: :hidden .fields-group - = f.input :agreement, as: :boolean, wrapper: :with_label, label: t('auth.checkbox_agreement_html', rules_path: about_more_path, terms_path: terms_path) + = f.input :agreement, as: :boolean, wrapper: :with_label, label: whitelist_mode? ? t('auth.checkbox_agreement_without_rules_html', terms_path: terms_path) : t('auth.checkbox_agreement_html', rules_path: about_more_path, terms_path: terms_path) .actions = f.button :button, @invite.present? ? t('auth.register') : sign_up_message, type: :submit diff --git a/app/views/auth/setup/show.html.haml b/app/views/auth/setup/show.html.haml new file mode 100644 index 000000000..c14fed56f --- /dev/null +++ b/app/views/auth/setup/show.html.haml @@ -0,0 +1,20 @@ +- content_for :page_title do + = t('auth.setup.title') + +- if missing_email? + = simple_form_for(@user, url: auth_setup_path) do |f| + = render 'shared/error_messages', object: @user + + .fields-group + %p.hint= t('auth.setup.email_below_hint_html') + + .fields-group + = f.input :email, required: true, hint: false, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' } + + .actions + = f.submit t('admin.accounts.change_email.label'), class: 'button' +- else + .simple_form + %p.hint= t('auth.setup.email_settings_hint_html', email: content_tag(:strong, @user.email)) + +.form-footer= render 'auth/shared/links' diff --git a/app/views/auth/shared/_links.html.haml b/app/views/auth/shared/_links.html.haml index 3c68ccd22..66ed5b93f 100644 --- a/app/views/auth/shared/_links.html.haml +++ b/app/views/auth/shared/_links.html.haml @@ -1,12 +1,18 @@ %ul.no-list - - if controller_name != 'sessions' - %li= link_to t('auth.login'), new_session_path(resource_name) + - if user_signed_in? + %li= link_to t('settings.account_settings'), edit_user_registration_path + - else + - if controller_name != 'sessions' + %li= link_to t('auth.login'), new_user_session_path - - if devise_mapping.registerable? && controller_name != 'registrations' - %li= link_to t('auth.register'), available_sign_up_path + - if controller_name != 'registrations' + %li= link_to t('auth.register'), available_sign_up_path - - if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' - %li= link_to t('auth.forgot_password'), new_password_path(resource_name) + - if controller_name != 'passwords' && controller_name != 'registrations' + %li= link_to t('auth.forgot_password'), new_user_password_path - - if devise_mapping.confirmable? && controller_name != 'confirmations' - %li= link_to t('auth.didnt_get_confirmation'), new_confirmation_path(resource_name) + - if controller_name != 'confirmations' && (!user_signed_in? || !current_user.confirmed? || current_user.unconfirmed_email.present?) + %li= link_to t('auth.didnt_get_confirmation'), new_user_confirmation_path + + - if user_signed_in? && controller_name != 'setup' + %li= link_to t('auth.logout'), destroy_user_session_path, data: { method: :delete } diff --git a/app/views/authorize_interactions/_post_follow_actions.html.haml b/app/views/authorize_interactions/_post_follow_actions.html.haml index 561c60137..dd71160e2 100644 --- a/app/views/authorize_interactions/_post_follow_actions.html.haml +++ b/app/views/authorize_interactions/_post_follow_actions.html.haml @@ -1,4 +1,4 @@ .post-follow-actions %div= link_to t('authorize_follow.post_follow.web'), web_url("accounts/#{@resource.id}"), class: 'button button--block' - %div= link_to t('authorize_follow.post_follow.return'), TagManager.instance.url_for(@resource), class: 'button button--block' + %div= link_to t('authorize_follow.post_follow.return'), ActivityPub::TagManager.instance.url_for(@resource), class: 'button button--block' %div= t('authorize_follow.post_follow.close') diff --git a/app/views/directories/index.html.haml b/app/views/directories/index.html.haml index 6608a5dcb..dee99475a 100644 --- a/app/views/directories/index.html.haml +++ b/app/views/directories/index.html.haml @@ -14,58 +14,43 @@ %h1= t('directories.explore_mastodon', title: site_title) %p= t('directories.explanation') -.grid - .column-0 - - if @accounts.empty? - = nothing_here - - else - .directory - %table.accounts-table - %tbody - - @accounts.each do |account| - %tr - %td= account_link_to account - %td.accounts-table__count.optional - = number_to_human account.statuses_count, strip_insignificant_zeros: true - %small= t('accounts.posts', count: account.statuses_count).downcase - %td.accounts-table__count.optional - = hide_followers_count?(account) ? '-' : (number_to_human account.followers_count, strip_insignificant_zeros: true) - %small= t('accounts.followers', count: account.followers_count).downcase - %td.accounts-table__count - - if account.last_status_at.present? - %time.time-ago{ datetime: account.last_status_at.iso8601, title: l(account.last_status_at) }= l account.last_status_at - - else - \- - %small= t('accounts.last_active') - - = paginate @accounts - - .column-1 - - if user_signed_in? - .box-widget.notice-widget - - if current_account.discoverable? - - if current_account.followers_count < Account::MIN_FOLLOWERS_DISCOVERY - %p= t('directories.enabled_but_waiting', min_followers: Account::MIN_FOLLOWERS_DISCOVERY) - - else - %p= t('directories.enabled') - - else - %p= t('directories.how_to_enable') - - = link_to settings_profile_path do - = t('settings.edit_profile') - = fa_icon 'chevron-right fw' - - - if @tags.empty? && !user_signed_in? - .nothing-here - - else - - @tags.each do |tag| - .directory__tag{ class: tag.id == @tag&.id ? 'active' : nil } - = link_to explore_hashtag_path(tag) do - %h4 - = fa_icon 'hashtag' - = tag.name - %small= t('directories.people', count: tag.accounts_count) - - .avatar-stack - - tag.cached_sample_accounts.each do |account| - = image_tag current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url, width: 48, height: 48, alt: '', class: 'account__avatar' +- if @accounts.empty? + = nothing_here +- else + .directory__list + - @accounts.each do |account| + .directory__card + .directory__card__img + = image_tag account.header.url, alt: '' + .directory__card__bar + = link_to TagManager.instance.url_for(account), class: 'directory__card__bar__name' do + .avatar + = image_tag account.avatar.url, alt: '', width: 48, height: 48, class: 'u-photo' + + .display-name + %span{ id: "default_account_display_name", style: "display: none" }= account.username + %bdi + %strong.emojify.p-name= display_name(account, custom_emojify: true) + %span= acct(account) + .directory__card__bar__relationship.account__relationship + = minimal_account_action_button(account) + + .directory__card__extra + .account__header__content.emojify= Formatter.instance.simplified_format(account, custom_emojify: true) + + .directory__card__extra + .accounts-table__count + = number_to_human account.statuses_count, strip_insignificant_zeros: true + %small= t('accounts.posts', count: account.statuses_count).downcase + .accounts-table__count + = hide_followers_count?(account) ? '-' : (number_to_human account.followers_count, strip_insignificant_zeros: true) + %small= t('accounts.followers', count: account.followers_count).downcase + .accounts-table__count + - if account.last_status_at.present? + %time.time-ago{ datetime: account.last_status_at.iso8601, title: l(account.last_status_at) }= l account.last_status_at + - else + = t('accounts.never_active') + + %small= t('accounts.last_active') + + = paginate @accounts diff --git a/app/views/errors/400.html.haml b/app/views/errors/400.html.haml new file mode 100644 index 000000000..11fbdd40c --- /dev/null +++ b/app/views/errors/400.html.haml @@ -0,0 +1,5 @@ +- content_for :page_title do + = t('errors.400') + +- content_for :content do + = t('errors.400') diff --git a/app/views/errors/406.html.haml b/app/views/errors/406.html.haml new file mode 100644 index 000000000..0ef815df3 --- /dev/null +++ b/app/views/errors/406.html.haml @@ -0,0 +1,5 @@ +- content_for :page_title do + = t('errors.406') + +- content_for :content do + = t('errors.406') diff --git a/app/views/errors/503.html.haml b/app/views/errors/503.html.haml new file mode 100644 index 000000000..b0c895aa5 --- /dev/null +++ b/app/views/errors/503.html.haml @@ -0,0 +1,5 @@ +- content_for :page_title do + = t('errors.503') + +- content_for :content do + = t('errors.503') diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml index 6c5268b61..9530e612a 100644 --- a/app/views/home/index.html.haml +++ b/app/views/home/index.html.haml @@ -5,7 +5,7 @@ = preload_link_tag asset_pack_path('features/notifications.js'), crossorigin: 'anonymous' %meta{name: 'applicationServerKey', content: Rails.configuration.x.vapid_public_key} - %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json) + = render_initial_state .app-holder#mastodon{ data: { props: Oj.dump(default_props) } } %noscript diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml index a0cb7c4fe..fc690409c 100644 --- a/app/views/layouts/admin.html.haml +++ b/app/views/layouts/admin.html.haml @@ -1,11 +1,21 @@ - content_for :content do .admin-wrapper .sidebar-wrapper - .sidebar - = link_to root_path do - = image_pack_tag 'logo.svg', class: 'logo', alt: 'Mastodon' + .sidebar-wrapper__inner + .sidebar + = link_to root_path do + = image_pack_tag 'logo.svg', class: 'logo', alt: 'Mastodon' + + .sidebar__toggle + .sidebar__toggle__logo + = link_to root_path do + = svg_logo_full + + = link_to '#', class: 'sidebar__toggle__icon' do + = fa_icon 'bars' + + = render_navigation - = render_navigation .content-wrapper .content %h2= yield :page_title @@ -14,4 +24,6 @@ = yield + .sidebar-wrapper.sidebar-wrapper--empty + = render template: 'layouts/application' diff --git a/app/views/layouts/public.html.haml b/app/views/layouts/public.html.haml index 92df0bfbe..fb9ac5cec 100644 --- a/app/views/layouts/public.html.haml +++ b/app/views/layouts/public.html.haml @@ -1,3 +1,6 @@ +- content_for :header_tags do + = render_initial_state + - content_for :content do .public-layout - unless @hide_navbar @@ -7,10 +10,13 @@ = link_to root_url, class: 'brand' do = svg_logo_full - = link_to t('directories.directory'), explore_path, class: 'nav-link optional' if Setting.profile_directory - = link_to t('about.about_this'), about_more_path, class: 'nav-link optional' - = link_to t('about.apps'), 'https://joinmastodon.org/apps', class: 'nav-link optional' + - unless whitelist_mode? + = link_to t('directories.directory'), explore_path, class: 'nav-link optional' if Setting.profile_directory + = link_to t('about.about_this'), about_more_path, class: 'nav-link optional' + = link_to t('about.apps'), 'https://joinmastodon.org/apps', class: 'nav-link optional' + .nav-center + .nav-right - if user_signed_in? = link_to t('settings.back'), root_url, class: 'nav-link nav-button webapp-btn' diff --git a/app/views/notification_mailer/_status.html.haml b/app/views/notification_mailer/_status.html.haml index 57b5688bd..e992e5563 100644 --- a/app/views/notification_mailer/_status.html.haml +++ b/app/views/notification_mailer/_status.html.haml @@ -1,4 +1,5 @@ - i ||= 0 +- highlighted ||= false %table.email-table{ cellspacing: 0, cellpadding: 0, dir: 'ltr' } %tbody @@ -14,7 +15,7 @@ %table.column{ cellspacing: 0, cellpadding: 0 } %tbody %tr - %td.column-cell.padded.status + %td.column-cell.padded.status{ class: highlighted ? 'status--highlighted' : '' } %table.status-header{ cellspacing: 0, cellpadding: 0 } %tbody %tr @@ -32,5 +33,13 @@ %div{ dir: rtl_status?(status) ? 'rtl' : 'ltr' } = Formatter.instance.format(status) + - if status.media_attachments.size > 0 + %p + - status.media_attachments.each do |a| + - if status.local? + = link_to medium_url(a), medium_url(a) + - else + = link_to a.remote_url, a.remote_url + %p.status-footer = link_to l(status.created_at), web_url("statuses/#{status.id}") diff --git a/app/views/oauth/authorized_applications/index.html.haml b/app/views/oauth/authorized_applications/index.html.haml index 19af5f55d..7b77108a9 100644 --- a/app/views/oauth/authorized_applications/index.html.haml +++ b/app/views/oauth/authorized_applications/index.html.haml @@ -16,8 +16,8 @@ - if application.website.blank? = application.name - else - = link_to application.name, application.website, target: '_blank', rel: 'noopener' - %th!= application.scopes.map { |scope| t(scope, scope: [:doorkeeper, :scopes]) }.join('<br />') + = link_to application.name, application.website, target: '_blank', rel: 'noopener noreferrer' + %th!= application.scopes.map { |scope| t(scope, scope: [:doorkeeper, :scopes]) }.join(', ') %td= l application.created_at %td - unless application.superapp? diff --git a/app/views/public_timelines/show.html.haml b/app/views/public_timelines/show.html.haml index f80157c67..063089a7f 100644 --- a/app/views/public_timelines/show.html.haml +++ b/app/views/public_timelines/show.html.haml @@ -3,11 +3,14 @@ - content_for :header_tags do %meta{ name: 'robots', content: 'noindex' }/ - %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json) .page-header %h1= t('about.see_whats_happening') - %p= t('about.browse_public_posts') + + - if Setting.show_known_fediverse_at_about_page + %p= t('about.browse_public_posts') + - else + %p= t('about.browse_local_posts') #mastodon-timeline{ data: { props: Oj.dump(default_props) }} #modal-container diff --git a/app/views/relationships/show.html.haml b/app/views/relationships/show.html.haml index 1de4e373f..408390a35 100644 --- a/app/views/relationships/show.html.haml +++ b/app/views/relationships/show.html.haml @@ -5,8 +5,8 @@ .filter-subset %strong= t 'relationships.relationship' %ul - %li= filter_link_to t('accounts.following', count: current_account.following_count), relationship: nil - %li= filter_link_to t('accounts.followers', count: current_account.followers_count), relationship: 'followed_by' + %li= filter_link_to t('relationships.following'), relationship: nil + %li= filter_link_to t('relationships.followers'), relationship: 'followed_by' %li= filter_link_to t('relationships.mutual'), relationship: 'mutual' .filter-subset diff --git a/app/views/remote_interaction/new.html.haml b/app/views/remote_interaction/new.html.haml index c8c08991f..2cc0fcb93 100644 --- a/app/views/remote_interaction/new.html.haml +++ b/app/views/remote_interaction/new.html.haml @@ -7,7 +7,7 @@ .public-layout .activity-stream.activity-stream--highlighted - = render 'stream_entries/status', status: @status + = render 'statuses/status', status: @status = simple_form_for @remote_follow, as: :remote_follow, url: remote_interaction_path(@status) do |f| = render 'shared/error_messages', object: @remote_follow diff --git a/app/views/remote_unfollows/_card.html.haml b/app/views/remote_unfollows/_card.html.haml deleted file mode 100644 index 9abcfd37e..000000000 --- a/app/views/remote_unfollows/_card.html.haml +++ /dev/null @@ -1,13 +0,0 @@ -.account-card - .detailed-status__display-name - %div - = image_tag account.avatar.url(:original), alt: '', width: 48, height: 48, class: 'avatar' - - %span.display-name - - account_url = local_assigns[:admin] ? admin_account_path(account.id) : TagManager.instance.url_for(account) - = link_to account_url, class: 'detailed-status__display-name p-author h-card', target: '_blank', rel: 'noopener' do - %strong.emojify= display_name(account, custom_emojify: true) - %span @#{account.acct} - - - if account.note? - .account__header__content.emojify= Formatter.instance.simplified_format(account) diff --git a/app/views/remote_unfollows/_post_follow_actions.html.haml b/app/views/remote_unfollows/_post_follow_actions.html.haml deleted file mode 100644 index 2a9c062e9..000000000 --- a/app/views/remote_unfollows/_post_follow_actions.html.haml +++ /dev/null @@ -1,4 +0,0 @@ -.post-follow-actions - %div= link_to t('authorize_follow.post_follow.web'), web_url("accounts/#{@account.id}"), class: 'button button--block' - %div= link_to t('authorize_follow.post_follow.return'), TagManager.instance.url_for(@account), class: 'button button--block' - %div= t('authorize_follow.post_follow.close') diff --git a/app/views/remote_unfollows/error.html.haml b/app/views/remote_unfollows/error.html.haml deleted file mode 100644 index cb63f02be..000000000 --- a/app/views/remote_unfollows/error.html.haml +++ /dev/null @@ -1,3 +0,0 @@ -.form-container - .flash-message#error_explanation - = t('remote_unfollow.error') diff --git a/app/views/remote_unfollows/success.html.haml b/app/views/remote_unfollows/success.html.haml deleted file mode 100644 index b007eedc7..000000000 --- a/app/views/remote_unfollows/success.html.haml +++ /dev/null @@ -1,10 +0,0 @@ -- content_for :page_title do - = t('remote_unfollow.title', acct: @account.acct) - -.form-container - .follow-prompt - %h2= t('remote_unfollow.unfollowed') - - = render 'application/card', account: @account - - = render 'post_follow_actions' diff --git a/app/views/settings/aliases/index.html.haml b/app/views/settings/aliases/index.html.haml new file mode 100644 index 000000000..5b6986368 --- /dev/null +++ b/app/views/settings/aliases/index.html.haml @@ -0,0 +1,29 @@ +- content_for :page_title do + = t('settings.aliases') + += simple_form_for @alias, url: settings_aliases_path do |f| + = render 'shared/error_messages', object: @alias + + %p.hint= t('aliases.hint_html') + + %hr.spacer/ + + .fields-group + = f.input :acct, wrapper: :with_block_label, input_html: { autocapitalize: 'none', autocorrect: 'off' } + + .actions + = f.button :button, t('aliases.add_new'), type: :submit, class: 'button' + +%hr.spacer/ + +.table-wrapper + %table.table.inline-table + %thead + %tr + %th= t('simple_form.labels.account_alias.acct') + %th + %tbody + - @aliases.each do |account_alias| + %tr + %td= account_alias.acct + %td= table_link_to 'trash', t('aliases.remove'), settings_alias_path(account_alias), data: { method: :delete } diff --git a/app/views/settings/deletes/show.html.haml b/app/views/settings/deletes/show.html.haml index b246f83a1..08792e0af 100644 --- a/app/views/settings/deletes/show.html.haml +++ b/app/views/settings/deletes/show.html.haml @@ -2,15 +2,28 @@ = t('settings.delete') = simple_form_for @confirmation, url: settings_delete_path, method: :delete do |f| - .warning - %strong - = fa_icon('warning') - = t('deletes.warning_title') - = t('deletes.warning_html') + %p.hint= t('deletes.warning.before') - %p.hint= t('deletes.description_html') + %ul.hint + - if current_user.confirmed? && current_user.approved? + %li.warning-hint= t('deletes.warning.irreversible') + %li.warning-hint= t('deletes.warning.username_unavailable') + %li.warning-hint= t('deletes.warning.data_removal') + %li.warning-hint= t('deletes.warning.caches') + - else + %li.positive-hint= t('deletes.warning.email_change_html', path: edit_user_registration_path) + %li.positive-hint= t('deletes.warning.email_reconfirmation_html', path: new_user_confirmation_path) + %li.positive-hint= t('deletes.warning.email_contact_html', email: Setting.site_contact_email) + %li.positive-hint= t('deletes.warning.username_available') - = f.input :password, placeholder: t('simple_form.labels.defaults.current_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.current_password'), :autocomplete => 'off' }, hint: t('deletes.confirm_password') + %p.hint= t('deletes.warning.more_details_html', terms_path: terms_path) + + %hr.spacer/ + + - if current_user.encrypted_password.present? + = f.input :password, wrapper: :with_block_label, input_html: { :autocomplete => 'off' }, hint: t('deletes.confirm_password') + - else + = f.input :username, wrapper: :with_block_label, input_html: { :autocomplete => 'off' }, hint: t('deletes.confirm_username') .actions = f.button :button, t('deletes.proceed'), type: :submit, class: 'negative' diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml index b13cea976..76ff76bd9 100644 --- a/app/views/settings/exports/show.html.haml +++ b/app/views/settings/exports/show.html.haml @@ -37,12 +37,16 @@ %td= number_with_delimiter @export.total_domain_blocks %td= table_link_to 'download', t('exports.csv'), settings_exports_domain_blocks_path(format: :csv) +%hr.spacer/ + %p.muted-hint= t('exports.archive_takeout.hint_html') - if policy(:backup).create? %p= link_to t('exports.archive_takeout.request'), settings_export_path, class: 'button', method: :post - unless @backups.empty? + %hr.spacer/ + .table-wrapper %table.table %thead diff --git a/app/views/settings/featured_tags/index.html.haml b/app/views/settings/featured_tags/index.html.haml index 5f69517f3..6734d027c 100644 --- a/app/views/settings/featured_tags/index.html.haml +++ b/app/views/settings/featured_tags/index.html.haml @@ -1,6 +1,10 @@ - content_for :page_title do = t('settings.featured_tags') +%p= t('featured_tags.hint_html') + +%hr.spacer/ + = simple_form_for @featured_tag, url: settings_featured_tags_path do |f| = render 'shared/error_messages', object: @featured_tag diff --git a/app/views/settings/migration/redirects/new.html.haml b/app/views/settings/migration/redirects/new.html.haml new file mode 100644 index 000000000..017450f4b --- /dev/null +++ b/app/views/settings/migration/redirects/new.html.haml @@ -0,0 +1,27 @@ +- content_for :page_title do + = t('settings.migrate') + += simple_form_for @redirect, url: settings_migration_redirect_path do |f| + %p.hint= t('migrations.warning.before') + + %ul.hint + %li.warning-hint= t('migrations.warning.redirect') + %li.warning-hint= t('migrations.warning.other_data') + %li.warning-hint= t('migrations.warning.disabled_account') + + %hr.spacer/ + + = render 'shared/error_messages', object: @redirect + + .fields-row + .fields-row__column.fields-group.fields-row__column-6 + = f.input :acct, wrapper: :with_block_label, input_html: { autocapitalize: 'none', autocorrect: 'off' }, label: t('simple_form.labels.account_migration.acct'), hint: t('simple_form.hints.account_migration.acct') + + .fields-row__column.fields-group.fields-row__column-6 + - if current_user.encrypted_password.present? + = f.input :current_password, wrapper: :with_block_label, input_html: { :autocomplete => 'off' }, required: true + - else + = f.input :current_username, wrapper: :with_block_label, input_html: { :autocomplete => 'off' }, required: true + + .actions + = f.button :button, t('migrations.set_redirect'), type: :submit, class: 'button button--destructive' diff --git a/app/views/settings/migrations/show.html.haml b/app/views/settings/migrations/show.html.haml index c69061d50..078eaebc6 100644 --- a/app/views/settings/migrations/show.html.haml +++ b/app/views/settings/migrations/show.html.haml @@ -1,17 +1,89 @@ - content_for :page_title do = t('settings.migrate') -= simple_form_for @migration, as: :migration, url: settings_migration_path, html: { method: :put } do |f| - - if @migration.account - %p.hint= t('migrations.currently_redirecting') +.simple_form + - if current_account.moved_to_account.present? + .fields-row + .fields-row__column.fields-group.fields-row__column-6 + = render 'application/card', account: current_account.moved_to_account + .fields-row__column.fields-group.fields-row__column-6 + %p.hint + %span.positive-hint= t('migrations.redirecting_to', acct: current_account.moved_to_account.acct) - .fields-group - = render partial: 'application/card', locals: { account: @migration.account } + %p.hint= t('migrations.cancel_explanation') + + %p.hint= link_to t('migrations.cancel'), settings_migration_redirect_path, data: { method: :delete } + - else + %p.hint + %span.positive-hint= t('migrations.not_redirecting') + +%hr.spacer/ + +%h3= t('auth.migrate_account') + += simple_form_for @migration, url: settings_migration_path do |f| + - if on_cooldown? + %p.hint + %span.warning-hint= t('migrations.on_cooldown', count: ((@cooldown.cooldown_at - Time.now.utc) / 1.day.seconds).ceil) + - else + %p.hint= t('migrations.warning.before') + + %ul.hint + %li.warning-hint= t('migrations.warning.followers') + %li.warning-hint= t('migrations.warning.redirect') + %li.warning-hint= t('migrations.warning.other_data') + %li.warning-hint= t('migrations.warning.backreference_required') + %li.warning-hint= t('migrations.warning.cooldown') + %li.warning-hint= t('migrations.warning.disabled_account') + + %p.hint= t('migrations.warning.only_redirect_html', path: new_settings_migration_redirect_path) + + %hr.spacer/ = render 'shared/error_messages', object: @migration - .fields-group - = f.input :acct, placeholder: t('migrations.acct') + .fields-row + .fields-row__column.fields-group.fields-row__column-6 + = f.input :acct, wrapper: :with_block_label, input_html: { autocapitalize: 'none', autocorrect: 'off' }, disabled: on_cooldown? + + .fields-row__column.fields-group.fields-row__column-6 + - if current_user.encrypted_password.present? + = f.input :current_password, wrapper: :with_block_label, input_html: { :autocomplete => 'off' }, required: true, disabled: on_cooldown? + - else + = f.input :current_username, wrapper: :with_block_label, input_html: { :autocomplete => 'off' }, required: true, disabled: on_cooldown? .actions - = f.button :button, t('migrations.proceed'), type: :submit, class: 'negative' + = f.button :button, t('migrations.proceed_with_move'), type: :submit, class: 'button button--destructive', disabled: on_cooldown? + +- unless @migrations.empty? + %hr.spacer/ + + %h3= t 'migrations.past_migrations' + + %hr.spacer/ + + .table-wrapper + %table.table.inline-table + %thead + %tr + %th= t('migrations.acct') + %th= t('migrations.followers_count') + %th + %tbody + - @migrations.each do |migration| + %tr + %td + - if migration.target_account.present? + = compact_account_link_to migration.target_account + - else + = migration.acct + + %td= number_with_delimiter migration.followers_count + + %td + %time.time-ago{ datetime: migration.created_at.iso8601, title: l(migration.created_at) }= l(migration.created_at) + +%hr.spacer/ + +%h3= t 'migrations.incoming_migrations' +%p.muted-hint= t('migrations.incoming_migrations_html', path: settings_aliases_path) diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index 9577c10b5..f1e3d2e97 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -15,9 +15,23 @@ %h4= t 'appearance.animations_and_accessibility' .fields-group + = f.input :setting_use_pending_items, as: :boolean, wrapper: :with_label + + .fields-group = f.input :setting_auto_play_gif, as: :boolean, wrapper: :with_label, recommended: true = f.input :setting_reduce_motion, as: :boolean, wrapper: :with_label = f.input :setting_system_font_ui, as: :boolean, wrapper: :with_label + = f.input :setting_system_emoji_font, as: :boolean, wrapper: :with_label + + %h4= t 'appearance.toot_layout' + + .fields-group + = f.input :setting_crop_images, as: :boolean, wrapper: :with_label + + %h4= t 'appearance.discovery' + + .fields-group + = f.input :setting_trends, as: :boolean, wrapper: :with_label %h4= t 'appearance.confirmation_dialogs' @@ -33,6 +47,9 @@ = f.input :setting_display_media, collection: ['default', 'show_all', 'hide_all'],label_method: lambda { |item| t("simple_form.hints.defaults.setting_display_media_#{item}") }, hint: false, as: :radio_buttons, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', wrapper: :with_floating_label .fields-group + = f.input :setting_use_blurhash, as: :boolean, wrapper: :with_label + + .fields-group = f.input :setting_expand_spoilers, as: :boolean, wrapper: :with_label .actions diff --git a/app/views/settings/preferences/notifications/show.html.haml b/app/views/settings/preferences/notifications/show.html.haml index acc646fc3..a496be21b 100644 --- a/app/views/settings/preferences/notifications/show.html.haml +++ b/app/views/settings/preferences/notifications/show.html.haml @@ -4,6 +4,10 @@ = simple_form_for current_user, url: settings_preferences_notifications_path, html: { method: :put } do |f| = render 'shared/error_messages', object: current_user + %h4= t 'notifications.email_events' + + %p.hint= t 'notifications.email_events_hint' + .fields-group = f.simple_fields_for :notification_emails, hash_to_object(current_user.settings.notification_emails) do |ff| = ff.input :follow, as: :boolean, wrapper: :with_label @@ -15,11 +19,14 @@ - if current_user.staff? = ff.input :report, as: :boolean, wrapper: :with_label = ff.input :pending_account, as: :boolean, wrapper: :with_label + = ff.input :trending_tag, as: :boolean, wrapper: :with_label .fields-group = f.simple_fields_for :notification_emails, hash_to_object(current_user.settings.notification_emails) do |ff| = ff.input :digest, as: :boolean, wrapper: :with_label + %h4= t 'notifications.other_settings' + .fields-group = f.simple_fields_for :interactions, hash_to_object(current_user.settings.interactions) do |ff| = ff.input :must_be_follower, as: :boolean, wrapper: :with_label diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index 9f794ca6b..f5d928233 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -28,7 +28,7 @@ - if Setting.profile_directory .fields-group - = f.input :discoverable, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.discoverable_html', min_followers: Account::MIN_FOLLOWERS_DISCOVERY, path: explore_path), recommended: true + = f.input :discoverable, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.discoverable'), recommended: true %hr.spacer/ @@ -60,6 +60,11 @@ %h6= t('auth.migrate_account') %p.muted-hint= t('auth.migrate_account_html', path: settings_migration_path) +%hr.spacer/ + +%h6= t 'migrations.incoming_migrations' +%p.muted-hint= t('migrations.incoming_migrations_html', path: settings_aliases_path) + - if open_deletion? %hr.spacer/ diff --git a/app/views/settings/two_factor_authentication/confirmations/new.html.haml b/app/views/settings/two_factor_authentication/confirmations/new.html.haml index e64155299..86cf1f695 100644 --- a/app/views/settings/two_factor_authentication/confirmations/new.html.haml +++ b/app/views/settings/two_factor_authentication/confirmations/new.html.haml @@ -12,7 +12,7 @@ %samp.qr-alternative__code= current_user.otp_secret.scan(/.{4}/).join(' ') .fields-group - = f.input :code, wrapper: :with_label, hint: t('two_factor_authentication.code_hint'), label: t('simple_form.labels.defaults.otp_attempt'), input_html: { :autocomplete => 'off' }, required: true + = f.input :otp_attempt, wrapper: :with_label, hint: t('two_factor_authentication.code_hint'), label: t('simple_form.labels.defaults.otp_attempt'), input_html: { :autocomplete => 'off' }, required: true .actions = f.button :button, t('two_factor_authentication.enable'), type: :submit diff --git a/app/views/settings/two_factor_authentications/show.html.haml b/app/views/settings/two_factor_authentications/show.html.haml index 259bcd1ef..f1eecd000 100644 --- a/app/views/settings/two_factor_authentications/show.html.haml +++ b/app/views/settings/two_factor_authentications/show.html.haml @@ -2,33 +2,35 @@ = t('settings.two_factor_authentication') - if current_user.otp_required_for_login - %p.positive-hint - = fa_icon 'check' - = ' ' - = t 'two_factor_authentication.enabled' + %p.hint + %span.positive-hint + = fa_icon 'check' + = ' ' + = t 'two_factor_authentication.enabled' - %hr/ + %hr.spacer/ = simple_form_for @confirmation, url: settings_two_factor_authentication_path, method: :delete do |f| - = f.input :code, wrapper: :with_label, hint: t('two_factor_authentication.code_hint'), label: t('simple_form.labels.defaults.otp_attempt'), input_html: { :autocomplete => 'off' }, required: true + .fields-group + = f.input :otp_attempt, wrapper: :with_block_label, hint: t('two_factor_authentication.code_hint'), label: t('simple_form.labels.defaults.otp_attempt'), input_html: { :autocomplete => 'off' }, required: true .actions - = f.button :button, t('two_factor_authentication.disable'), type: :submit + = f.button :button, t('two_factor_authentication.disable'), type: :submit, class: 'negative' - %hr/ + %hr.spacer/ - %h6= t('two_factor_authentication.recovery_codes') - %p.muted-hint - = t('two_factor_authentication.lost_recovery_codes') - = link_to t('two_factor_authentication.generate_recovery_codes'), - settings_two_factor_authentication_recovery_codes_path, - data: { method: :post } + %h3= t('two_factor_authentication.recovery_codes') + %p.muted-hint= t('two_factor_authentication.lost_recovery_codes') + + %hr.spacer/ + + .simple_form + = link_to t('two_factor_authentication.generate_recovery_codes'), settings_two_factor_authentication_recovery_codes_path, data: { method: :post }, class: 'block-button' - else .simple_form %p.hint= t('two_factor_authentication.description_html') - = link_to t('two_factor_authentication.setup'), - settings_two_factor_authentication_path, - data: { method: :post }, - class: 'block-button' + %hr.spacer/ + + = link_to t('two_factor_authentication.setup'), settings_two_factor_authentication_path, data: { method: :post }, class: 'block-button' diff --git a/app/views/shared/_og.html.haml b/app/views/shared/_og.html.haml index 67238fc8b..c8f12974e 100644 --- a/app/views/shared/_og.html.haml +++ b/app/views/shared/_og.html.haml @@ -1,5 +1,5 @@ -- thumbnail = @instance_presenter.thumbnail -- description = strip_tags(@instance_presenter.site_short_description.presence || @instance_presenter.site_description.presence || t('about.about_mastodon_html')) +- thumbnail = @instance_presenter.thumbnail +- description ||= strip_tags(@instance_presenter.site_short_description.presence || t('about.about_mastodon_html')) %meta{ name: 'description', content: description }/ diff --git a/app/views/shares/show.html.haml b/app/views/shares/show.html.haml index 4c0390c42..28910d3ab 100644 --- a/app/views/shares/show.html.haml +++ b/app/views/shares/show.html.haml @@ -1,4 +1,4 @@ - content_for :header_tags do - %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json) + = render_initial_state #mastodon-compose{ data: { props: Oj.dump(default_props) } } diff --git a/app/views/stream_entries/_attachment_list.html.haml b/app/views/statuses/_attachment_list.html.haml index d9706f47b..d9706f47b 100644 --- a/app/views/stream_entries/_attachment_list.html.haml +++ b/app/views/statuses/_attachment_list.html.haml diff --git a/app/views/stream_entries/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml index 95b96feef..3fa52d3f2 100644 --- a/app/views/stream_entries/_detailed_status.html.haml +++ b/app/views/statuses/_detailed_status.html.haml @@ -1,6 +1,6 @@ .detailed-status.detailed-status--flex .p-author.h-card - = link_to TagManager.instance.url_for(status.account), class: 'detailed-status__display-name u-url', target: stream_link_target, rel: 'noopener' do + = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'detailed-status__display-name u-url', target: stream_link_target, rel: 'noopener' do .detailed-status__display-avatar - if current_account&.user&.setting_auto_play_gif || autoplay = image_tag status.account.avatar_original_url, width: 48, height: 48, alt: '', class: 'account__avatar u-photo' @@ -20,34 +20,38 @@ %p{ :style => ('margin-bottom: 0' unless current_account&.user&.setting_expand_spoilers) }< %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)} %button.status__content__spoiler-link= t('statuses.show_more') - .e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" } + .e-content{ style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" } = Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) - if status.preloadable_poll = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do - = render partial: 'stream_entries/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } + = render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } - if !status.media_attachments.empty? - if status.media_attachments.first.video? - video = status.media_attachments.first = react_component :video, src: video.file.url(:original), preview: video.file.url(:small), blurhash: video.blurhash, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 670, height: 380, detailed: true, inline: true, alt: video.description do - = render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments } + = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + - elsif status.media_attachments.first.audio? + - audio = status.media_attachments.first + = react_component :audio, src: audio.file.url(:original), height: 130, alt: audio.description, preload: true, duration: audio.file.meta.dig(:original, :duration) do + = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - else = react_component :media_gallery, height: 380, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, standalone: true, 'autoPlayGif': current_account&.user&.setting_auto_play_gif || autoplay, 'reduceMotion': current_account&.user&.setting_reduce_motion, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do - = render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments } + = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - elsif status.preview_card = react_component :card, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json .detailed-status__meta %data.dt-published{ value: status.created_at.to_time.iso8601 } - = link_to TagManager.instance.url_for(status), class: 'detailed-status__datetime u-url u-uid', target: stream_link_target, rel: 'noopener' do + = link_to ActivityPub::TagManager.instance.url_for(status), class: 'detailed-status__datetime u-url u-uid', target: stream_link_target, rel: 'noopener noreferrer' do %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) · - if status.application && @account.user&.setting_show_application - if status.application.website.blank? %strong.detailed-status__application= status.application.name - else - = link_to status.application.name, status.application.website, class: 'detailed-status__application', target: '_blank', rel: 'noopener' + = link_to status.application.name, status.application.website, class: 'detailed-status__application', target: '_blank', rel: 'noopener noreferrer' · = link_to remote_interaction_path(status, type: :reply), class: 'modal-button detailed-status__link' do - if status.in_reply_to_id.nil? diff --git a/app/views/stream_entries/_og_description.html.haml b/app/views/statuses/_og_description.html.haml index a7b18424d..a7b18424d 100644 --- a/app/views/stream_entries/_og_description.html.haml +++ b/app/views/statuses/_og_description.html.haml diff --git a/app/views/stream_entries/_og_image.html.haml b/app/views/statuses/_og_image.html.haml index 67f9274b6..67f9274b6 100644 --- a/app/views/stream_entries/_og_image.html.haml +++ b/app/views/statuses/_og_image.html.haml diff --git a/app/views/stream_entries/_poll.html.haml b/app/views/statuses/_poll.html.haml index ba34890df..d1aba6ef9 100644 --- a/app/views/stream_entries/_poll.html.haml +++ b/app/views/statuses/_poll.html.haml @@ -1,15 +1,20 @@ - show_results = (user_signed_in? && poll.voted?(current_account)) || poll.expired? +- own_votes = user_signed_in? ? poll.own_votes(current_account) : [] +- total_votes_count = poll.voters_count || poll.votes_count .poll %ul - - poll.loaded_options.each do |option| + - poll.loaded_options.each_with_index do |option, index| %li - if show_results - - percent = poll.votes_count > 0 ? 100 * option.votes_count / poll.votes_count : 0 + - percent = total_votes_count > 0 ? 100 * option.votes_count / total_votes_count : 0 %span.poll__chart{ style: "width: #{percent}%" } %label.poll__text>< - %span.poll__number= percent.round + %span.poll__number>< + - if own_votes.include?(index) + %i.poll__vote__mark.fa.fa-check + = percent.round = Formatter.instance.format_poll_option(status, option, autoplay: autoplay) - else %label.poll__text>< @@ -20,7 +25,10 @@ %button.button.button-secondary{ disabled: true } = t('statuses.poll.vote') - %span= t('statuses.poll.total_votes', count: poll.votes_count) + - if poll.voters_count.nil? + %span= t('statuses.poll.total_votes', count: poll.votes_count) + - else + %span= t('statuses.poll.total_people', count: poll.voters_count) - unless poll.expires_at.nil? · diff --git a/app/views/stream_entries/_simple_status.html.haml b/app/views/statuses/_simple_status.html.haml index d383d3443..e9c22d9ba 100644 --- a/app/views/stream_entries/_simple_status.html.haml +++ b/app/views/statuses/_simple_status.html.haml @@ -1,11 +1,11 @@ .status .status__info - = link_to TagManager.instance.url_for(status), class: 'status__relative-time u-url u-uid', target: stream_link_target, rel: 'noopener' do + = link_to ActivityPub::TagManager.instance.url_for(status), class: 'status__relative-time u-url u-uid', target: stream_link_target, rel: 'noopener noreferrer' do %time.time-ago{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at) %data.dt-published{ value: status.created_at.to_time.iso8601 } .p-author.h-card - = link_to TagManager.instance.url_for(status.account), class: 'status__display-name u-url', target: stream_link_target, rel: 'noopener' do + = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'status__display-name u-url', target: stream_link_target, rel: 'noopener noreferrer' do .status__avatar %div - if current_account&.user&.setting_auto_play_gif || autoplay @@ -24,20 +24,24 @@ %p{ :style => ('margin-bottom: 0' unless current_account&.user&.setting_expand_spoilers) }< %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)} %button.status__content__spoiler-link= t('statuses.show_more') - .e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }< + .e-content{ style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }< = Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) - if status.preloadable_poll = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do - = render partial: 'stream_entries/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } + = render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay } - if !status.media_attachments.empty? - if status.media_attachments.first.video? - video = status.media_attachments.first = react_component :video, src: video.file.url(:original), preview: video.file.url(:small), blurhash: video.blurhash, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 610, height: 343, inline: true, alt: video.description do - = render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments } + = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } + - elsif status.media_attachments.first.audio? + - audio = status.media_attachments.first + = react_component :audio, src: audio.file.url(:original), height: 110, alt: audio.description, duration: audio.file.meta.dig(:original, :duration) do + = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - else = react_component :media_gallery, height: 343, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, 'autoPlayGif': current_account&.user&.setting_auto_play_gif || autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do - = render partial: 'stream_entries/attachment_list', locals: { attachments: status.media_attachments } + = render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments } - elsif status.preview_card = react_component :card, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json @@ -50,9 +54,9 @@ = fa_icon 'reply-all fw' .status__action-bar__counter__label= obscured_counter status.replies_count = link_to remote_interaction_path(status, type: :reblog), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do - - if status.public_visibility? || status.unlisted_visibility? + - if status.distributable? = fa_icon 'retweet fw' - - elsif status.private_visibility? + - elsif status.private_visibility? || status.limited_visibility? = fa_icon 'lock fw' - else = fa_icon 'envelope fw' diff --git a/app/views/stream_entries/_status.html.haml b/app/views/statuses/_status.html.haml index 83887cd87..0e3652503 100644 --- a/app/views/stream_entries/_status.html.haml +++ b/app/views/statuses/_status.html.haml @@ -17,9 +17,9 @@ - if status.reply? && include_threads - if @next_ancestor .entry{ class: entry_classes } - = link_to_more TagManager.instance.url_for(@next_ancestor) + = link_to_more ActivityPub::TagManager.instance.url_for(@next_ancestor) - = render partial: 'stream_entries/status', collection: @ancestors, as: :status, locals: { is_predecessor: true, direct_reply_id: status.in_reply_to_id }, autoplay: autoplay + = render partial: 'statuses/status', collection: @ancestors, as: :status, locals: { is_predecessor: true, direct_reply_id: status.in_reply_to_id }, autoplay: autoplay .entry{ class: entry_classes } @@ -28,7 +28,7 @@ .status__prepend-icon-wrapper %i.status__prepend-icon.fa.fa-fw.fa-retweet %span - = link_to TagManager.instance.url_for(status.account), class: 'status__display-name muted' do + = link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'status__display-name muted' do %bdi %strong.emojify= display_name(status.account, custom_emojify: true) = t('stream_entries.reblogged') @@ -39,18 +39,18 @@ %span = t('stream_entries.pinned') - = render (centered ? 'stream_entries/detailed_status' : 'stream_entries/simple_status'), status: status.proper, autoplay: autoplay + = render (centered ? 'statuses/detailed_status' : 'statuses/simple_status'), status: status.proper, autoplay: autoplay - if include_threads - if @since_descendant_thread_id .entry{ class: entry_classes } = link_to_more short_account_status_url(status.account.username, status, max_descendant_thread_id: @since_descendant_thread_id + 1) - @descendant_threads.each do |thread| - = render partial: 'stream_entries/status', collection: thread[:statuses], as: :status, locals: { is_successor: true, parent_id: status.id }, autoplay: autoplay + = render partial: 'statuses/status', collection: thread[:statuses], as: :status, locals: { is_successor: true, parent_id: status.id }, autoplay: autoplay - if thread[:next_status] .entry{ class: entry_classes } - = link_to_more TagManager.instance.url_for(thread[:next_status]) + = link_to_more ActivityPub::TagManager.instance.url_for(thread[:next_status]) - if @next_descendant_thread .entry{ class: entry_classes } = link_to_more short_account_status_url(status.account.username, status, since_descendant_thread_id: @max_descendant_thread_id - 1) diff --git a/app/views/statuses/embed.html.haml b/app/views/statuses/embed.html.haml new file mode 100644 index 000000000..6f2ec646f --- /dev/null +++ b/app/views/statuses/embed.html.haml @@ -0,0 +1,3 @@ +- cache @status do + .activity-stream.activity-stream--headless + = render 'status', status: @status, centered: true, autoplay: @autoplay diff --git a/app/views/statuses/show.html.haml b/app/views/statuses/show.html.haml new file mode 100644 index 000000000..0f22d106b --- /dev/null +++ b/app/views/statuses/show.html.haml @@ -0,0 +1,24 @@ +- content_for :page_title do + = t('statuses.title', name: display_name(@account), quote: truncate(@status.spoiler_text.presence || @status.text, length: 50, omission: '…', escape: false)) + +- content_for :header_tags do + - if @account.user&.setting_noindex + %meta{ name: 'robots', content: 'noindex, noarchive' }/ + + %link{ rel: 'alternate', type: 'application/json+oembed', href: api_oembed_url(url: short_account_status_url(@account, @status), format: 'json') }/ + %link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@status) }/ + + = opengraph 'og:site_name', site_title + = opengraph 'og:type', 'article' + = opengraph 'og:title', "#{display_name(@account)} (@#{@account.local_username_and_domain})" + = opengraph 'og:url', short_account_status_url(@account, @status) + + = render 'og_description', activity: @status + = render 'og_image', activity: @status, account: @account + +.grid + .column-0 + .activity-stream.h-entry + = render partial: 'status', locals: { status: @status, include_threads: true } + .column-1 + = render 'application/sidebar' diff --git a/app/views/stream_entries/embed.html.haml b/app/views/stream_entries/embed.html.haml deleted file mode 100644 index 4871c101e..000000000 --- a/app/views/stream_entries/embed.html.haml +++ /dev/null @@ -1,3 +0,0 @@ -- cache @stream_entry.activity do - .activity-stream.activity-stream--headless - = render "stream_entries/#{@type}", @type.to_sym => @stream_entry.activity, centered: true, autoplay: @autoplay diff --git a/app/views/stream_entries/show.html.haml b/app/views/stream_entries/show.html.haml deleted file mode 100644 index 0e81c4f68..000000000 --- a/app/views/stream_entries/show.html.haml +++ /dev/null @@ -1,25 +0,0 @@ -- content_for :page_title do - = t('statuses.title', name: display_name(@account), quote: truncate(@stream_entry.activity.spoiler_text.presence || @stream_entry.activity.text, length: 50, omission: '…', escape: false)) - -- content_for :header_tags do - - if @account.user&.setting_noindex - %meta{ name: 'robots', content: 'noindex' }/ - - %link{ rel: 'alternate', type: 'application/atom+xml', href: account_stream_entry_url(@account, @stream_entry, format: 'atom') }/ - %link{ rel: 'alternate', type: 'application/json+oembed', href: api_oembed_url(url: account_stream_entry_url(@account, @stream_entry), format: 'json') }/ - %link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@stream_entry.activity) }/ - - = opengraph 'og:site_name', site_title - = opengraph 'og:type', 'article' - = opengraph 'og:title', "#{display_name(@account)} (@#{@account.local_username_and_domain})" - = opengraph 'og:url', short_account_status_url(@account, @stream_entry.activity) - - = render 'stream_entries/og_description', activity: @stream_entry.activity - = render 'stream_entries/og_image', activity: @stream_entry.activity, account: @account - -.grid - .column-0 - .activity-stream.h-entry - = render partial: "stream_entries/#{@type}", locals: { @type.to_sym => @stream_entry.activity, include_threads: true } - .column-1 - = render 'application/sidebar' diff --git a/app/views/tags/show.html.haml b/app/views/tags/show.html.haml index 1a9c58983..74d44bd7b 100644 --- a/app/views/tags/show.html.haml +++ b/app/views/tags/show.html.haml @@ -5,7 +5,6 @@ %meta{ name: 'robots', content: 'noindex' }/ %link{ rel: 'alternate', type: 'application/rss+xml', href: tag_url(@tag, format: 'rss') }/ - %script#initial-state{ type: 'application/json' }!= json_escape(@initial_state_json) = render 'og' .page-header diff --git a/app/views/user_mailer/two_factor_disabled.html.haml b/app/views/user_mailer/two_factor_disabled.html.haml new file mode 100644 index 000000000..651c6f940 --- /dev/null +++ b/app/views/user_mailer/two_factor_disabled.html.haml @@ -0,0 +1,43 @@ +%table.email-table{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.email-body + .email-container + %table.content-section{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.content-cell.hero + .email-row + .col-6 + %table.column{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.column-cell.text-center.padded + %table.hero-icon.alert-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td + = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' + + %h1= t 'devise.mailer.two_factor_disabled.title' + %p.lead= t 'devise.mailer.two_factor_disabled.explanation' + +%table.email-table{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.email-body + .email-container + %table.content-section{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.content-cell.content-start + %table.column{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.column-cell.button-cell + %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.button-primary + = link_to edit_user_registration_url do + %span= t('settings.account_settings') diff --git a/app/views/user_mailer/two_factor_disabled.text.erb b/app/views/user_mailer/two_factor_disabled.text.erb new file mode 100644 index 000000000..73be1ddc2 --- /dev/null +++ b/app/views/user_mailer/two_factor_disabled.text.erb @@ -0,0 +1,7 @@ +<%= t 'devise.mailer.two_factor_disabled.title' %> + +=== + +<%= t 'devise.mailer.two_factor_disabled.explanation' %> + +=> <%= edit_user_registration_url %> diff --git a/app/views/user_mailer/two_factor_enabled.html.haml b/app/views/user_mailer/two_factor_enabled.html.haml new file mode 100644 index 000000000..fc31bd979 --- /dev/null +++ b/app/views/user_mailer/two_factor_enabled.html.haml @@ -0,0 +1,43 @@ +%table.email-table{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.email-body + .email-container + %table.content-section{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.content-cell.hero + .email-row + .col-6 + %table.column{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.column-cell.text-center.padded + %table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td + = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' + + %h1= t 'devise.mailer.two_factor_enabled.title' + %p.lead= t 'devise.mailer.two_factor_enabled.explanation' + +%table.email-table{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.email-body + .email-container + %table.content-section{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.content-cell.content-start + %table.column{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.column-cell.button-cell + %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.button-primary + = link_to edit_user_registration_url do + %span= t('settings.account_settings') diff --git a/app/views/user_mailer/two_factor_enabled.text.erb b/app/views/user_mailer/two_factor_enabled.text.erb new file mode 100644 index 000000000..4319dddbf --- /dev/null +++ b/app/views/user_mailer/two_factor_enabled.text.erb @@ -0,0 +1,7 @@ +<%= t 'devise.mailer.two_factor_enabled.title' %> + +=== + +<%= t 'devise.mailer.two_factor_enabled.explanation' %> + +=> <%= edit_user_registration_url %> diff --git a/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml b/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml new file mode 100644 index 000000000..833708868 --- /dev/null +++ b/app/views/user_mailer/two_factor_recovery_codes_changed.html.haml @@ -0,0 +1,43 @@ +%table.email-table{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.email-body + .email-container + %table.content-section{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.content-cell.hero + .email-row + .col-6 + %table.column{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.column-cell.text-center.padded + %table.hero-icon.alert-icon{ align: 'center', cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td + = image_tag full_pack_url('media/images/mailer/icon_lock_open.png'), alt: '' + + %h1= t 'devise.mailer.two_factor_recovery_codes_changed.title' + %p.lead= t 'devise.mailer.two_factor_recovery_codes_changed.explanation' + +%table.email-table{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.email-body + .email-container + %table.content-section{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.content-cell.content-start + %table.column{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.column-cell.button-cell + %table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.button-primary + = link_to edit_user_registration_url do + %span= t('settings.account_settings') diff --git a/app/views/user_mailer/two_factor_recovery_codes_changed.text.erb b/app/views/user_mailer/two_factor_recovery_codes_changed.text.erb new file mode 100644 index 000000000..6ed12fc08 --- /dev/null +++ b/app/views/user_mailer/two_factor_recovery_codes_changed.text.erb @@ -0,0 +1,7 @@ +<%= t 'devise.mailer.two_factor_recovery_codes_changed.title' %> + +=== + +<%= t 'devise.mailer.two_factor_recovery_codes_changed.explanation' %> + +=> <%= edit_user_registration_url %> diff --git a/app/views/user_mailer/warning.html.haml b/app/views/user_mailer/warning.html.haml index 72ea5e5d2..5a2911ecb 100644 --- a/app/views/user_mailer/warning.html.haml +++ b/app/views/user_mailer/warning.html.haml @@ -42,6 +42,14 @@ - unless @warning.text.blank? = Formatter.instance.linkify(@warning.text) + - if !@statuses.nil? && !@statuses.empty? + %p + %strong= t('user_mailer.warning.statuses') + +- if !@statuses.nil? && !@statuses.empty? + - @statuses.each_with_index do |status, i| + = render 'notification_mailer/status', status: status, i: i + 1, highlighted: true + %table.email-table{ cellspacing: 0, cellpadding: 0 } %tbody %tr @@ -50,7 +58,7 @@ %table.content-section{ cellspacing: 0, cellpadding: 0 } %tbody %tr - %td.content-cell + %td.content-cell{ class: @statuses.nil? || @statuses.empty? ? '' : 'content-start' } %table.column{ cellspacing: 0, cellpadding: 0 } %tbody %tr @@ -61,3 +69,20 @@ %td.button-primary = link_to about_more_url do %span= t 'user_mailer.warning.review_server_policies' + +%table.email-table{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.email-body + .email-container + %table.content-section{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.content-cell + .email-row + .col-6 + %table.column{ cellspacing: 0, cellpadding: 0 } + %tbody + %tr + %td.column-cell.text-center + %p= t 'user_mailer.warning.get_in_touch', instance: @instance diff --git a/app/views/user_mailer/warning.text.erb b/app/views/user_mailer/warning.text.erb index b4f2402cb..bb6610c79 100644 --- a/app/views/user_mailer/warning.text.erb +++ b/app/views/user_mailer/warning.text.erb @@ -7,3 +7,16 @@ <% end %> <%= @warning.text %> +<% if !@statuses.nil? && !@statuses.empty? %> +<%= t('user_mailer.warning.statuses') %> + +<% @statuses.each do |status| %> + +<%= render 'notification_mailer/status', status: status %> +--- +<% end %> +<% else %> +--- +<% end %> + +<%= t 'user_mailer.warning.get_in_touch', instance: @instance %> diff --git a/app/views/well_known/webfinger/show.xml.ruby b/app/views/well_known/webfinger/show.xml.ruby deleted file mode 100644 index 968c8c138..000000000 --- a/app/views/well_known/webfinger/show.xml.ruby +++ /dev/null @@ -1,44 +0,0 @@ -doc = Ox::Document.new(version: '1.0') - -doc << Ox::Element.new('XRD').tap do |xrd| - xrd['xmlns'] = 'http://docs.oasis-open.org/ns/xri/xrd-1.0' - - xrd << (Ox::Element.new('Subject') << @account.to_webfinger_s) - xrd << (Ox::Element.new('Alias') << short_account_url(@account)) - xrd << (Ox::Element.new('Alias') << account_url(@account)) - - xrd << Ox::Element.new('Link').tap do |link| - link['rel'] = 'http://webfinger.net/rel/profile-page' - link['type'] = 'text/html' - link['href'] = short_account_url(@account) - end - - xrd << Ox::Element.new('Link').tap do |link| - link['rel'] = 'http://schemas.google.com/g/2010#updates-from' - link['type'] = 'application/atom+xml' - link['href'] = account_url(@account, format: 'atom') - end - - xrd << Ox::Element.new('Link').tap do |link| - link['rel'] = 'self' - link['type'] = 'application/activity+json' - link['href'] = account_url(@account) - end - - xrd << Ox::Element.new('Link').tap do |link| - link['rel'] = 'salmon' - link['href'] = api_salmon_url(@account.id) - end - - xrd << Ox::Element.new('Link').tap do |link| - link['rel'] = 'magic-public-key' - link['href'] = "data:application/magic-public-key,#{@account.magic_key}" - end - - xrd << Ox::Element.new('Link').tap do |link| - link['rel'] = 'http://ostatus.org/schema/1.0/subscribe' - link['template'] = "#{authorize_interaction_url}?acct={uri}" - end -end - -('<?xml version="1.0" encoding="UTF-8"?>' + Ox.dump(doc, effort: :tolerant)).force_encoding('UTF-8') diff --git a/app/workers/activitypub/delivery_worker.rb b/app/workers/activitypub/delivery_worker.rb index 5e4c391f0..5457d9d4b 100644 --- a/app/workers/activitypub/delivery_worker.rb +++ b/app/workers/activitypub/delivery_worker.rb @@ -2,6 +2,7 @@ class ActivityPub::DeliveryWorker include Sidekiq::Worker + include JsonLdHelper STOPLIGHT_FAILURE_THRESHOLD = 10 STOPLIGHT_COOLDOWN = 60 @@ -17,27 +18,35 @@ class ActivityPub::DeliveryWorker @json = json @source_account = Account.find(source_account_id) @inbox_url = inbox_url + @host = Addressable::URI.parse(inbox_url).normalized_site + @performed = false perform_request - - failure_tracker.track_success! - rescue => e - failure_tracker.track_failure! - raise e.class, "Delivery failed for #{inbox_url}: #{e.message}", e.backtrace[0] + ensure + if @performed + failure_tracker.track_success! + else + failure_tracker.track_failure! + end end private - def build_request - request = Request.new(:post, @inbox_url, body: @json) - request.on_behalf_of(@source_account, :uri, sign_with: @options[:sign_with]) - request.add_headers(HEADERS) + def build_request(http_client) + Request.new(:post, @inbox_url, body: @json, http_client: http_client).tap do |request| + request.on_behalf_of(@source_account, :uri, sign_with: @options[:sign_with]) + request.add_headers(HEADERS) + end end def perform_request light = Stoplight(@inbox_url) do - build_request.perform do |response| - raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) + request_pool.with(@host) do |http_client| + build_request(http_client).perform do |response| + raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) + + @performed = true + end end end @@ -46,15 +55,11 @@ class ActivityPub::DeliveryWorker .run end - def response_successful?(response) - (200...300).cover?(response.code) - end - - def response_error_unsalvageable?(response) - (400...500).cover?(response.code) && ![401, 408, 429].include?(response.code) - end - def failure_tracker @failure_tracker ||= DeliveryFailureTracker.new(@inbox_url) end + + def request_pool + RequestPool.current + end end diff --git a/app/workers/activitypub/move_distribution_worker.rb b/app/workers/activitypub/move_distribution_worker.rb new file mode 100644 index 000000000..bf1c0e7ae --- /dev/null +++ b/app/workers/activitypub/move_distribution_worker.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class ActivityPub::MoveDistributionWorker + include Sidekiq::Worker + include Payloadable + + sidekiq_options queue: 'push' + + def perform(migration_id) + @migration = AccountMigration.find(migration_id) + @account = @migration.account + + ActivityPub::DeliveryWorker.push_bulk(inboxes) do |inbox_url| + [signed_payload, @account.id, inbox_url] + end + + ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url| + [signed_payload, @account.id, inbox_url] + end + rescue ActiveRecord::RecordNotFound + true + end + + private + + def inboxes + @inboxes ||= @migration.account.followers.inboxes + end + + def signed_payload + @signed_payload ||= Oj.dump(serialize_payload(@migration, ActivityPub::MoveSerializer, signer: @account)) + end +end diff --git a/app/workers/admin/suspension_worker.rb b/app/workers/admin/suspension_worker.rb index ae8b24d8c..83c815efd 100644 --- a/app/workers/admin/suspension_worker.rb +++ b/app/workers/admin/suspension_worker.rb @@ -6,6 +6,6 @@ class Admin::SuspensionWorker sidekiq_options queue: 'pull' def perform(account_id, remove_user = false) - SuspendAccountService.new.call(Account.find(account_id), including_user: remove_user) + SuspendAccountService.new.call(Account.find(account_id), reserve_username: true, reserve_email: !remove_user) end end diff --git a/app/workers/after_remote_follow_request_worker.rb b/app/workers/after_remote_follow_request_worker.rb index 84eb6ade2..ce9c65834 100644 --- a/app/workers/after_remote_follow_request_worker.rb +++ b/app/workers/after_remote_follow_request_worker.rb @@ -5,27 +5,5 @@ class AfterRemoteFollowRequestWorker sidekiq_options queue: 'pull', retry: 5 - attr_reader :follow_request - - def perform(follow_request_id) - @follow_request = FollowRequest.find(follow_request_id) - process_follow_service if processing_required? - rescue ActiveRecord::RecordNotFound - true - end - - private - - def process_follow_service - follow_request.destroy - FollowService.new.call(follow_request.account, updated_account.acct) - end - - def processing_required? - !updated_account.nil? && !updated_account.locked? - end - - def updated_account - @_updated_account ||= FetchRemoteAccountService.new.call(follow_request.target_account.remote_url) - end + def perform(follow_request_id); end end diff --git a/app/workers/after_remote_follow_worker.rb b/app/workers/after_remote_follow_worker.rb index edab83f85..d9719f2bf 100644 --- a/app/workers/after_remote_follow_worker.rb +++ b/app/workers/after_remote_follow_worker.rb @@ -5,27 +5,5 @@ class AfterRemoteFollowWorker sidekiq_options queue: 'pull', retry: 5 - attr_reader :follow - - def perform(follow_id) - @follow = Follow.find(follow_id) - process_follow_service if processing_required? - rescue ActiveRecord::RecordNotFound - true - end - - private - - def process_follow_service - follow.destroy - FollowService.new.call(follow.account, updated_account.acct) - end - - def updated_account - @_updated_account ||= FetchRemoteAccountService.new.call(follow.target_account.remote_url) - end - - def processing_required? - !updated_account.nil? && updated_account.locked? - end + def perform(follow_id); end end diff --git a/app/workers/domain_block_worker.rb b/app/workers/domain_block_worker.rb index 884477829..35518d6b5 100644 --- a/app/workers/domain_block_worker.rb +++ b/app/workers/domain_block_worker.rb @@ -3,8 +3,8 @@ class DomainBlockWorker include Sidekiq::Worker - def perform(domain_block_id) - BlockDomainService.new.call(DomainBlock.find(domain_block_id)) + def perform(domain_block_id, update = false) + BlockDomainService.new.call(DomainBlock.find(domain_block_id), update) rescue ActiveRecord::RecordNotFound true end diff --git a/app/workers/feed_insert_worker.rb b/app/workers/feed_insert_worker.rb index 1ae3c877b..546f5c0c2 100644 --- a/app/workers/feed_insert_worker.rb +++ b/app/workers/feed_insert_worker.rb @@ -13,6 +13,8 @@ class FeedInsertWorker when :list @list = List.find(id) @follower = @list.account + when :direct + @account = Account.find(id) end check_and_insert @@ -29,7 +31,12 @@ class FeedInsertWorker def feed_filtered? # Note: Lists are a variation of home, so the filtering rules # of home apply to both - FeedManager.instance.filter?(:home, @status, @follower.id) + case @type + when :home, :list + FeedManager.instance.filter?(:home, @status, @follower.id) + when :direct + FeedManager.instance.filter?(:direct, @status, @account.id) + end end def perform_push @@ -38,6 +45,8 @@ class FeedInsertWorker FeedManager.instance.push_to_home(@follower, @status) when :list FeedManager.instance.push_to_list(@list, @status) + when :direct + FeedManager.instance.push_to_direct(@account, @status) end end end diff --git a/app/workers/maintenance/destroy_media_worker.rb b/app/workers/maintenance/destroy_media_worker.rb deleted file mode 100644 index cde33d6d7..000000000 --- a/app/workers/maintenance/destroy_media_worker.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -class Maintenance::DestroyMediaWorker - include Sidekiq::Worker - - sidekiq_options queue: 'pull' - - def perform(media_attachment_id) - media = media_attachment_id.is_a?(MediaAttachment) ? media_attachment_id : MediaAttachment.find(media_attachment_id) - media.destroy - rescue ActiveRecord::RecordNotFound - true - end -end diff --git a/app/workers/maintenance/redownload_account_media_worker.rb b/app/workers/maintenance/redownload_account_media_worker.rb deleted file mode 100644 index 6afbe6e19..000000000 --- a/app/workers/maintenance/redownload_account_media_worker.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -class Maintenance::RedownloadAccountMediaWorker - include Sidekiq::Worker - - sidekiq_options queue: 'pull', retry: false - - def perform(account_id) - account = account_id.is_a?(Account) ? account_id : Account.find(account_id) - account.reset_avatar! - account.reset_header! - account.save - rescue ActiveRecord::RecordNotFound - true - end -end diff --git a/app/workers/maintenance/uncache_media_worker.rb b/app/workers/maintenance/uncache_media_worker.rb deleted file mode 100644 index 4bc62ef75..000000000 --- a/app/workers/maintenance/uncache_media_worker.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -class Maintenance::UncacheMediaWorker - include Sidekiq::Worker - - sidekiq_options queue: 'pull' - - def perform(media_attachment_id) - media = media_attachment_id.is_a?(MediaAttachment) ? media_attachment_id : MediaAttachment.find(media_attachment_id) - - return if media.file.blank? - - media.file.destroy - media.save - rescue ActiveRecord::RecordNotFound - true - end -end diff --git a/app/workers/move_worker.rb b/app/workers/move_worker.rb new file mode 100644 index 000000000..595730226 --- /dev/null +++ b/app/workers/move_worker.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class MoveWorker + include Sidekiq::Worker + + def perform(source_account_id, target_account_id) + @source_account = Account.find(source_account_id) + @target_account = Account.find(target_account_id) + + if @target_account.local? && @source_account.local? + rewrite_follows! + else + queue_follow_unfollows! + end + rescue ActiveRecord::RecordNotFound + true + end + + private + + def rewrite_follows! + @source_account.passive_relationships + .where(account: Account.local) + .where.not(account: @target_account.followers.local) + .where.not(account_id: @target_account.id) + .in_batches + .update_all(target_account_id: @target_account.id) + end + + def queue_follow_unfollows! + bypass_locked = @target_account.local? + + @source_account.followers.local.select(:id).find_in_batches do |accounts| + UnfollowFollowWorker.push_bulk(accounts.map(&:id)) { |follower_id| [follower_id, @source_account.id, @target_account.id, bypass_locked] } + end + end +end diff --git a/app/workers/notification_worker.rb b/app/workers/notification_worker.rb index da1d6ab45..1c0f001cf 100644 --- a/app/workers/notification_worker.rb +++ b/app/workers/notification_worker.rb @@ -5,7 +5,5 @@ class NotificationWorker sidekiq_options queue: 'push', retry: 5 - def perform(xml, source_account_id, target_account_id) - SendInteractionService.new.call(xml, Account.find(source_account_id), Account.find(target_account_id)) - end + def perform(xml, source_account_id, target_account_id); end end diff --git a/app/workers/processing_worker.rb b/app/workers/processing_worker.rb index 978c3aba2..cf3bd8397 100644 --- a/app/workers/processing_worker.rb +++ b/app/workers/processing_worker.rb @@ -5,7 +5,5 @@ class ProcessingWorker sidekiq_options backtrace: true - def perform(account_id, body) - ProcessFeedService.new.call(body, Account.find(account_id), override_timestamps: true) - end + def perform(account_id, body); end end diff --git a/app/workers/pubsubhubbub/confirmation_worker.rb b/app/workers/pubsubhubbub/confirmation_worker.rb index c0e7b677e..783a8c95f 100644 --- a/app/workers/pubsubhubbub/confirmation_worker.rb +++ b/app/workers/pubsubhubbub/confirmation_worker.rb @@ -2,81 +2,8 @@ class Pubsubhubbub::ConfirmationWorker include Sidekiq::Worker - include RoutingHelper sidekiq_options queue: 'push', retry: false - attr_reader :subscription, :mode, :secret, :lease_seconds - - def perform(subscription_id, mode, secret = nil, lease_seconds = nil) - @subscription = Subscription.find(subscription_id) - @mode = mode - @secret = secret - @lease_seconds = lease_seconds - process_confirmation - end - - private - - def process_confirmation - prepare_subscription - - callback_get_with_params - logger.debug "Confirming PuSH subscription for #{subscription.callback_url} with challenge #{challenge}: #{@callback_response_body}" - - update_subscription - end - - def update_subscription - if successful_subscribe? - subscription.save! - elsif successful_unsubscribe? - subscription.destroy! - end - end - - def successful_subscribe? - subscribing? && response_matches_challenge? - end - - def successful_unsubscribe? - (unsubscribing? && response_matches_challenge?) || !subscription.confirmed? - end - - def response_matches_challenge? - @callback_response_body == challenge - end - - def subscribing? - mode == 'subscribe' - end - - def unsubscribing? - mode == 'unsubscribe' - end - - def callback_get_with_params - Request.new(:get, subscription.callback_url, params: callback_params).perform do |response| - @callback_response_body = response.body_with_limit - end - end - - def callback_params - { - 'hub.topic': account_url(subscription.account, format: :atom), - 'hub.mode': mode, - 'hub.challenge': challenge, - 'hub.lease_seconds': subscription.lease_seconds, - } - end - - def prepare_subscription - subscription.secret = secret - subscription.lease_seconds = lease_seconds - subscription.confirmed = true - end - - def challenge - @_challenge ||= SecureRandom.hex - end + def perform(subscription_id, mode, secret = nil, lease_seconds = nil); end end diff --git a/app/workers/pubsubhubbub/delivery_worker.rb b/app/workers/pubsubhubbub/delivery_worker.rb index 619bfa48a..1260060bd 100644 --- a/app/workers/pubsubhubbub/delivery_worker.rb +++ b/app/workers/pubsubhubbub/delivery_worker.rb @@ -2,80 +2,8 @@ class Pubsubhubbub::DeliveryWorker include Sidekiq::Worker - include RoutingHelper sidekiq_options queue: 'push', retry: 3, dead: false - sidekiq_retry_in do |count| - 5 * (count + 1) - end - - attr_reader :subscription, :payload - - def perform(subscription_id, payload) - @subscription = Subscription.find(subscription_id) - @payload = payload - process_delivery unless blocked_domain? - rescue => e - raise e.class, "Delivery failed for #{subscription&.callback_url}: #{e.message}", e.backtrace[0] - end - - private - - def process_delivery - callback_post_payload do |payload_delivery| - raise Mastodon::UnexpectedResponseError, payload_delivery unless response_successful? payload_delivery - end - - subscription.touch(:last_successful_delivery_at) - end - - def callback_post_payload(&block) - request = Request.new(:post, subscription.callback_url, body: payload) - request.add_headers(headers) - request.perform(&block) - end - - def blocked_domain? - DomainBlock.blocked?(host) - end - - def host - Addressable::URI.parse(subscription.callback_url).normalized_host - end - - def headers - { - 'Content-Type' => 'application/atom+xml', - 'Link' => link_header, - }.merge(signature_headers.to_h) - end - - def link_header - LinkHeader.new([hub_link_header, self_link_header]).to_s - end - - def hub_link_header - [api_push_url, [%w(rel hub)]] - end - - def self_link_header - [account_url(subscription.account, format: :atom), [%w(rel self)]] - end - - def signature_headers - { 'X-Hub-Signature' => payload_signature } if subscription.secret? - end - - def payload_signature - "sha1=#{hmac_payload_digest}" - end - - def hmac_payload_digest - OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), subscription.secret, payload) - end - - def response_successful?(payload_delivery) - payload_delivery.code > 199 && payload_delivery.code < 300 - end + def perform(subscription_id, payload); end end diff --git a/app/workers/pubsubhubbub/distribution_worker.rb b/app/workers/pubsubhubbub/distribution_worker.rb index fed5e917d..75bac5d6f 100644 --- a/app/workers/pubsubhubbub/distribution_worker.rb +++ b/app/workers/pubsubhubbub/distribution_worker.rb @@ -5,28 +5,5 @@ class Pubsubhubbub::DistributionWorker sidekiq_options queue: 'push' - def perform(stream_entry_ids) - stream_entries = StreamEntry.where(id: stream_entry_ids).includes(:status).reject { |e| e.status.nil? || e.status.hidden? } - - return if stream_entries.empty? - - @account = stream_entries.first.account - @subscriptions = active_subscriptions.to_a - - distribute_public!(stream_entries) - end - - private - - def distribute_public!(stream_entries) - @payload = OStatus::AtomSerializer.render(OStatus::AtomSerializer.new.feed(@account, stream_entries)) - - Pubsubhubbub::DeliveryWorker.push_bulk(@subscriptions) do |subscription_id| - [subscription_id, @payload] - end - end - - def active_subscriptions - Subscription.where(account: @account).active.pluck(:id) - end + def perform(stream_entry_ids); end end diff --git a/app/workers/pubsubhubbub/raw_distribution_worker.rb b/app/workers/pubsubhubbub/raw_distribution_worker.rb index 16962a623..ece9c80ac 100644 --- a/app/workers/pubsubhubbub/raw_distribution_worker.rb +++ b/app/workers/pubsubhubbub/raw_distribution_worker.rb @@ -5,18 +5,5 @@ class Pubsubhubbub::RawDistributionWorker sidekiq_options queue: 'push' - def perform(xml, source_account_id) - @account = Account.find(source_account_id) - @subscriptions = active_subscriptions.to_a - - Pubsubhubbub::DeliveryWorker.push_bulk(@subscriptions) do |subscription| - [subscription.id, xml] - end - end - - private - - def active_subscriptions - Subscription.where(account: @account).active.select('id, callback_url, domain') - end + def perform(xml, source_account_id); end end diff --git a/app/workers/pubsubhubbub/subscribe_worker.rb b/app/workers/pubsubhubbub/subscribe_worker.rb index 2e176d1c1..b861b5e67 100644 --- a/app/workers/pubsubhubbub/subscribe_worker.rb +++ b/app/workers/pubsubhubbub/subscribe_worker.rb @@ -5,30 +5,5 @@ class Pubsubhubbub::SubscribeWorker sidekiq_options queue: 'push', retry: 10, unique: :until_executed, dead: false - sidekiq_retry_in do |count| - case count - when 0 - 30.minutes.seconds - when 1 - 2.hours.seconds - when 2 - 12.hours.seconds - else - 24.hours.seconds * (count - 2) - end - end - - sidekiq_retries_exhausted do |msg, _e| - account = Account.find(msg['args'].first) - Sidekiq.logger.error "PuSH subscription attempts for #{account.acct} exhausted. Unsubscribing" - ::UnsubscribeService.new.call(account) - end - - def perform(account_id) - account = Account.find(account_id) - logger.debug "PuSH re-subscribing to #{account.acct}" - ::SubscribeService.new.call(account) - rescue => e - raise e.class, "Subscribe failed for #{account&.acct}: #{e.message}", e.backtrace[0] - end + def perform(account_id); end end diff --git a/app/workers/pubsubhubbub/unsubscribe_worker.rb b/app/workers/pubsubhubbub/unsubscribe_worker.rb index a271715b7..0c1c263f6 100644 --- a/app/workers/pubsubhubbub/unsubscribe_worker.rb +++ b/app/workers/pubsubhubbub/unsubscribe_worker.rb @@ -5,11 +5,5 @@ class Pubsubhubbub::UnsubscribeWorker sidekiq_options queue: 'push', retry: false, unique: :until_executed, dead: false - def perform(account_id) - account = Account.find(account_id) - logger.debug "PuSH unsubscribing from #{account.acct}" - ::UnsubscribeService.new.call(account) - rescue ActiveRecord::RecordNotFound - true - end + def perform(account_id); end end diff --git a/app/workers/redownload_media_worker.rb b/app/workers/redownload_media_worker.rb new file mode 100644 index 000000000..98e995918 --- /dev/null +++ b/app/workers/redownload_media_worker.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class RedownloadMediaWorker + include Sidekiq::Worker + include ExponentialBackoff + + sidekiq_options queue: 'pull', retry: 3 + + def perform(id) + media_attachment = MediaAttachment.find(id) + + return if media_attachment.remote_url.blank? + + media_attachment.reset_file! + media_attachment.save + rescue ActiveRecord::RecordNotFound + true + end +end diff --git a/app/workers/remote_profile_update_worker.rb b/app/workers/remote_profile_update_worker.rb index 03585ad2d..01e8daf8f 100644 --- a/app/workers/remote_profile_update_worker.rb +++ b/app/workers/remote_profile_update_worker.rb @@ -5,9 +5,5 @@ class RemoteProfileUpdateWorker sidekiq_options queue: 'pull' - def perform(account_id, body, resubscribe) - UpdateRemoteProfileService.new.call(body, Account.find(account_id), resubscribe) - rescue ActiveRecord::RecordNotFound - true - end + def perform(account_id, body, resubscribe); end end diff --git a/app/workers/removal_worker.rb b/app/workers/removal_worker.rb index 19a660dd3..2a1eaa89b 100644 --- a/app/workers/removal_worker.rb +++ b/app/workers/removal_worker.rb @@ -3,8 +3,8 @@ class RemovalWorker include Sidekiq::Worker - def perform(status_id) - RemoveStatusService.new.call(Status.find(status_id)) + def perform(status_id, options = {}) + RemoveStatusService.new.call(Status.with_discarded.find(status_id), **options.symbolize_keys) rescue ActiveRecord::RecordNotFound true end diff --git a/app/workers/salmon_worker.rb b/app/workers/salmon_worker.rb index d37d40432..10200b06c 100644 --- a/app/workers/salmon_worker.rb +++ b/app/workers/salmon_worker.rb @@ -5,9 +5,5 @@ class SalmonWorker sidekiq_options backtrace: true - def perform(account_id, body) - ProcessInteractionService.new.call(body, Account.find(account_id)) - rescue Nokogiri::XML::XPath::SyntaxError, ActiveRecord::RecordNotFound - true - end + def perform(account_id, body); end end diff --git a/app/workers/scheduler/feed_cleanup_scheduler.rb b/app/workers/scheduler/feed_cleanup_scheduler.rb index bf5e20757..4933f1753 100644 --- a/app/workers/scheduler/feed_cleanup_scheduler.rb +++ b/app/workers/scheduler/feed_cleanup_scheduler.rb @@ -9,6 +9,7 @@ class Scheduler::FeedCleanupScheduler def perform clean_home_feeds! clean_list_feeds! + clean_direct_feeds! end private @@ -21,6 +22,10 @@ class Scheduler::FeedCleanupScheduler clean_feeds!(inactive_list_ids, :list) end + def clean_direct_feeds! + clean_feeds!(inactive_account_ids, :direct) + end + def clean_feeds!(ids, type) reblogged_id_sets = {} diff --git a/app/workers/scheduler/ip_cleanup_scheduler.rb b/app/workers/scheduler/ip_cleanup_scheduler.rb index 42620332e..4f44078d8 100644 --- a/app/workers/scheduler/ip_cleanup_scheduler.rb +++ b/app/workers/scheduler/ip_cleanup_scheduler.rb @@ -9,7 +9,7 @@ class Scheduler::IpCleanupScheduler def perform time_ago = RETENTION_PERIOD.ago - SessionActivation.where('updated_at < ?', time_ago).destroy_all - User.where('last_sign_in_at < ?', time_ago).update_all(last_sign_in_ip: nil) + SessionActivation.where('updated_at < ?', time_ago).in_batches.destroy_all + User.where('last_sign_in_at < ?', time_ago).where.not(last_sign_in_ip: nil).in_batches.update_all(last_sign_in_ip: nil) end end diff --git a/app/workers/scheduler/subscriptions_cleanup_scheduler.rb b/app/workers/scheduler/subscriptions_cleanup_scheduler.rb index 5fba120f6..75fe681a9 100644 --- a/app/workers/scheduler/subscriptions_cleanup_scheduler.rb +++ b/app/workers/scheduler/subscriptions_cleanup_scheduler.rb @@ -5,7 +5,5 @@ class Scheduler::SubscriptionsCleanupScheduler sidekiq_options unique: :until_executed, retry: 0 - def perform - Subscription.expired.in_batches.delete_all - end + def perform; end end diff --git a/app/workers/scheduler/subscriptions_scheduler.rb b/app/workers/scheduler/subscriptions_scheduler.rb index d5873bccb..6903cadc7 100644 --- a/app/workers/scheduler/subscriptions_scheduler.rb +++ b/app/workers/scheduler/subscriptions_scheduler.rb @@ -5,13 +5,5 @@ class Scheduler::SubscriptionsScheduler sidekiq_options unique: :until_executed, retry: 0 - def perform - Pubsubhubbub::SubscribeWorker.push_bulk(expiring_accounts.pluck(:id)) - end - - private - - def expiring_accounts - Account.expiring(1.day.from_now).partitioned - end + def perform; end end diff --git a/app/workers/scheduler/trending_tags_scheduler.rb b/app/workers/scheduler/trending_tags_scheduler.rb new file mode 100644 index 000000000..77f0d5747 --- /dev/null +++ b/app/workers/scheduler/trending_tags_scheduler.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class Scheduler::TrendingTagsScheduler + include Sidekiq::Worker + + sidekiq_options unique: :until_executed, retry: 0 + + def perform + TrendingTags.update! if Setting.trends + end +end diff --git a/app/workers/unfollow_follow_worker.rb b/app/workers/unfollow_follow_worker.rb index 50d3bf034..b6e665a41 100644 --- a/app/workers/unfollow_follow_worker.rb +++ b/app/workers/unfollow_follow_worker.rb @@ -5,13 +5,16 @@ class UnfollowFollowWorker sidekiq_options queue: 'pull' - def perform(follower_account_id, old_target_account_id, new_target_account_id) + def perform(follower_account_id, old_target_account_id, new_target_account_id, bypass_locked = false) follower_account = Account.find(follower_account_id) old_target_account = Account.find(old_target_account_id) new_target_account = Account.find(new_target_account_id) - FollowService.new.call(follower_account, new_target_account) - UnfollowService.new.call(follower_account, old_target_account) + follow = follower_account.active_relationships.find_by(target_account: old_target_account) + reblogs = follow&.show_reblogs? + + FollowService.new.call(follower_account, new_target_account, reblogs: reblogs, bypass_locked: bypass_locked) + UnfollowService.new.call(follower_account, old_target_account, skip_unmerge: true) rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError true end diff --git a/app/workers/web/push_notification_worker.rb b/app/workers/web/push_notification_worker.rb index 8e8a35973..46aeaa30b 100644 --- a/app/workers/web/push_notification_worker.rb +++ b/app/workers/web/push_notification_worker.rb @@ -3,7 +3,7 @@ class Web::PushNotificationWorker include Sidekiq::Worker - sidekiq_options backtrace: true + sidekiq_options backtrace: true, retry: 5 def perform(subscription_id, notification_id) subscription = ::Web::PushSubscription.find(subscription_id) @@ -11,7 +11,13 @@ class Web::PushNotificationWorker subscription.push(notification) unless notification.activity.nil? rescue Webpush::ResponseError => e - subscription.destroy! if (400..499).cover?(e.response.code.to_i) + code = e.response.code.to_i + + if (400..499).cover?(code) && ![408, 429].include?(code) + subscription.destroy! + else + raise e + end rescue ActiveRecord::RecordNotFound true end diff --git a/babel.config.js b/babel.config.js index 55efafc40..9be5b547a 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,30 +1,39 @@ module.exports = (api) => { const env = api.env(); + const reactOptions = { + development: false, + }; + const envOptions = { - debug: false, loose: true, modules: false, + debug: false, }; const config = { presets: [ - '@babel/react', + ['@babel/react', reactOptions], ['@babel/env', envOptions], ], plugins: [ - '@babel/syntax-dynamic-import', - ['@babel/proposal-object-rest-spread', { useBuiltIns: true }], ['@babel/proposal-decorators', { legacy: true }], '@babel/proposal-class-properties', - ['react-intl', { messagesDir: './build/messages/' }], + ['react-intl', { messagesDir: './build/messages' }], 'preval', ], + overrides: [ + { + test: /tesseract\.js/, + presets: [ + ['@babel/env', { ...envOptions, modules: 'commonjs' }], + ], + }, + ], }; switch (env) { case 'production': - envOptions.debug = false; config.plugins.push(...[ 'lodash', [ @@ -49,11 +58,8 @@ module.exports = (api) => { ]); break; case 'development': + reactOptions.development = true; envOptions.debug = true; - config.plugins.push(...[ - '@babel/transform-react-jsx-source', - '@babel/transform-react-jsx-self', - ]); break; case 'test': envOptions.modules = 'commonjs'; diff --git a/boxfile.yml b/boxfile.yml index 08526a57c..1bc3929c8 100644 --- a/boxfile.yml +++ b/boxfile.yml @@ -67,6 +67,9 @@ deploy.config: bin/tootctl search deploy fi - bin/tootctl cache clear + after_live: + worker.sidekiq: + - bin/tootctl search deploy web.web: diff --git a/config/application.rb b/config/application.rb index 150fdce6c..e1f7ae707 100644 --- a/config/application.rb +++ b/config/application.rb @@ -10,10 +10,12 @@ require_relative '../app/lib/exceptions' require_relative '../lib/paperclip/lazy_thumbnail' require_relative '../lib/paperclip/gif_transcoder' require_relative '../lib/paperclip/video_transcoder' -require_relative '../lib/paperclip/audio_transcoder' +require_relative '../lib/paperclip/type_corrector' require_relative '../lib/mastodon/snowflake' require_relative '../lib/mastodon/version' -require_relative '../lib/devise/ldap_authenticatable' +require_relative '../lib/devise/two_factor_ldap_authenticatable' +require_relative '../lib/devise/two_factor_pam_authenticatable' +require_relative '../lib/chewy/strategy/custom_sidekiq' Dotenv::Railtie.load @@ -37,11 +39,11 @@ module Mastodon # All translations from config/locales/*.rb,yml are auto loaded. # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] config.i18n.available_locales = [ - :en, :ar, :ast, :bg, :bn, + :br, :ca, :co, :cs, @@ -49,8 +51,11 @@ module Mastodon :da, :de, :el, + :en, :eo, + :'es-AR', :es, + :et, :eu, :fa, :fi, @@ -68,29 +73,35 @@ module Mastodon :ja, :ka, :kk, + :kn, :ko, :lt, :lv, + :mk, + :ml, + :mr, :ms, :nl, + :nn, :no, :oc, :pl, - :pt, :'pt-BR', + :'pt-PT', :ro, :ru, :sk, :sl, :sq, - :sr, :'sr-Latn', + :sr, :sv, :ta, :te, :th, :tr, :uk, + :ur, :'zh-CN', :'zh-HK', :'zh-TW', @@ -114,6 +125,9 @@ module Mastodon Doorkeeper::AuthorizationsController.layout 'modal' Doorkeeper::AuthorizedApplicationsController.layout 'admin' Doorkeeper::Application.send :include, ApplicationExtension + Devise::FailureApp.send :include, AbstractController::Callbacks + Devise::FailureApp.send :include, HttpAcceptLanguage::EasyAccess + Devise::FailureApp.send :include, Localized end end end diff --git a/config/deploy.rb b/config/deploy.rb index f0db50788..4dc36c65c 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -lock '3.11.0' +lock '3.11.2' set :repo_url, ENV.fetch('REPO', 'https://github.com/tootsuite/mastodon.git') set :branch, ENV.fetch('BRANCH', 'master') diff --git a/config/environments/production.rb b/config/environments/production.rb index fbb059a79..d617a297a 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -71,13 +71,22 @@ Rails.application.configure do # Better log formatting config.lograge.enabled = true + config.lograge.custom_payload do |controller| + if controller.respond_to?(:signed_request?) && controller.signed_request? + { key: controller.signature_key_id } + end + end + # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false config.action_mailer.perform_caching = false # E-mails - config.action_mailer.default_options = { from: ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost') } + config.action_mailer.default_options = { + from: ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost'), + reply_to: ENV['SMTP_REPLY_TO'] + } config.action_mailer.smtp_settings = { :port => ENV['SMTP_PORT'], diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index e3bede60d..1e223fbde 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -61,3 +61,6 @@ ignore_unused: - 'admin.action_logs.actions.*' - 'themes.*' - 'statuses.attached.*' + +ignore_inconsistent_interpolations: + - '*.one' diff --git a/config/initializers/0_duplicate_migrations.rb b/config/initializers/0_duplicate_migrations.rb new file mode 100644 index 000000000..4ab806587 --- /dev/null +++ b/config/initializers/0_duplicate_migrations.rb @@ -0,0 +1,40 @@ +# Some migrations have been present in glitch-soc for a long time and have then +# been merged in upstream Mastodon, under a different version number. +# +# This puts us in an uneasy situation in which if we remove upstream's +# migration file, people migrating from upstream will end up having a conflict +# with their already-ran migration. +# +# On the other hand, if we keep upstream's migration and remove our own, +# any current glitch-soc user will have a conflict during migration. +# +# For lack of a better solution, as those migrations are indeed identical, +# we decided monkey-patching Rails' Migrator to completely ignore the duplicate, +# keeping only the one that has run, or an arbitrary one. + +ALLOWED_DUPLICATES = [20180410220657, 20180831171112].freeze + +module ActiveRecord + class Migrator + def self.new(direction, migrations, target_version = nil) + migrated = Set.new(Base.connection.migration_context.get_all_versions) + + migrations.group_by(&:name).each do |name, duplicates| + if duplicates.length > 1 && duplicates.all? { |m| ALLOWED_DUPLICATES.include?(m.version) } + # We have a set of allowed duplicates. Keep the migrated one, if any. + non_migrated = duplicates.reject { |m| migrated.include?(m.version.to_i) } + + if duplicates.length == non_migrated.length || non_migrated.length == 0 + # There weren't any migrated one, so we have to pick one “canonical” migration + migrations = migrations - duplicates[1..-1] + else + # Just reject every duplicate which hasn't been migrated yet + migrations = migrations - non_migrated + end + end + end + + super(direction, migrations, target_version) + end + end +end diff --git a/config/initializers/2_whitelist_mode.rb b/config/initializers/2_whitelist_mode.rb new file mode 100644 index 000000000..a17ad07a2 --- /dev/null +++ b/config/initializers/2_whitelist_mode.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Rails.application.configure do + config.x.whitelist_mode = ENV['WHITELIST_MODE'] == 'true' +end diff --git a/config/initializers/active_model_serializers.rb b/config/initializers/active_model_serializers.rb index 329a5fb2c..0e69e1d96 100644 --- a/config/initializers/active_model_serializers.rb +++ b/config/initializers/active_model_serializers.rb @@ -3,22 +3,3 @@ ActiveModelSerializers.config.tap do |config| end ActiveSupport::Notifications.unsubscribe(ActiveModelSerializers::Logging::RENDER_EVENT) - -class ActiveModel::Serializer::Reflection - # We monkey-patch this method so that when we include associations in a serializer, - # the nested serializers can send information about used contexts upwards back to - # the root. We do this via instance_options because the nesting can be dynamic. - def build_association(parent_serializer, parent_serializer_options, include_slice = {}) - serializer = options[:serializer] - - parent_serializer_options.merge!(named_contexts: serializer._named_contexts, context_extensions: serializer._context_extensions) if serializer.respond_to?(:_named_contexts) - - association_options = { - parent_serializer: parent_serializer, - parent_serializer_options: parent_serializer_options, - include_slice: include_slice, - } - - ActiveModel::Serializer::Association.new(self, association_options) - end -end diff --git a/config/initializers/chewy.rb b/config/initializers/chewy.rb index d5347f2bf..9ff0dccc1 100644 --- a/config/initializers/chewy.rb +++ b/config/initializers/chewy.rb @@ -12,8 +12,9 @@ Chewy.settings = { sidekiq: { queue: 'pull' }, } -Chewy.root_strategy = enabled ? :sidekiq : :bypass -Chewy.request_strategy = enabled ? :sidekiq : :bypass +Chewy.root_strategy = :custom_sidekiq +Chewy.request_strategy = :custom_sidekiq +Chewy.use_after_commit_callbacks = false module Chewy class << self diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index 2fe1a33fa..810aa2880 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -35,8 +35,8 @@ if Rails.env.production? p.style_src :self, :unsafe_inline, assets_host p.media_src :self, :data, *data_hosts p.frame_src :self, :https - p.worker_src :self, assets_host - p.connect_src :self, :blob, Rails.configuration.x.streaming_api_base_url, *data_hosts + p.worker_src :self, :blob, assets_host + p.connect_src :self, :blob, :data, Rails.configuration.x.streaming_api_base_url, *data_hosts p.manifest_src :self, assets_host end end diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index cd9bacf68..59e69ad37 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -53,6 +53,8 @@ module Devise @@ldap_base = nil mattr_accessor :ldap_uid @@ldap_uid = nil + mattr_accessor :ldap_mail + @@ldap_mail = nil mattr_accessor :ldap_bind_dn @@ldap_bind_dn = nil mattr_accessor :ldap_password @@ -61,6 +63,12 @@ module Devise @@ldap_tls_no_verify = false mattr_accessor :ldap_search_filter @@ldap_search_filter = nil + mattr_accessor :ldap_uid_conversion_enabled + @@ldap_uid_conversion_enabled = false + mattr_accessor :ldap_uid_conversion_search + @@ldap_uid_conversion_search = nil + mattr_accessor :ldap_uid_conversion_replace + @@ldap_uid_conversion_replace = nil class Strategies::PamAuthenticatable def valid? @@ -71,8 +79,8 @@ end Devise.setup do |config| config.warden do |manager| - manager.default_strategies(scope: :user).unshift :ldap_authenticatable if Devise.ldap_authentication - manager.default_strategies(scope: :user).unshift :pam_authenticatable if Devise.pam_authentication + manager.default_strategies(scope: :user).unshift :two_factor_ldap_authenticatable if Devise.ldap_authentication + manager.default_strategies(scope: :user).unshift :two_factor_pam_authenticatable if Devise.pam_authentication manager.default_strategies(scope: :user).unshift :two_factor_authenticatable manager.default_strategies(scope: :user).unshift :two_factor_backupable end @@ -363,7 +371,11 @@ Devise.setup do |config| config.ldap_bind_dn = ENV.fetch('LDAP_BIND_DN') config.ldap_password = ENV.fetch('LDAP_PASSWORD') config.ldap_uid = ENV.fetch('LDAP_UID', 'cn') + config.ldap_mail = ENV.fetch('LDAP_MAIL', 'mail') config.ldap_tls_no_verify = ENV['LDAP_TLS_NO_VERIFY'] == 'true' - config.ldap_search_filter = ENV.fetch('LDAP_SEARCH_FILTER', '%{uid}=%{email}') + config.ldap_search_filter = ENV.fetch('LDAP_SEARCH_FILTER', '(|(%{uid}=%{email})(%{mail}=%{email}))') + config.ldap_uid_conversion_enabled = ENV['LDAP_UID_CONVERSION_ENABLED'] == 'true' + config.ldap_uid_conversion_search = ENV.fetch('LDAP_UID_CONVERSION_SEARCH', '.,- ') + config.ldap_uid_conversion_replace = ENV.fetch('LDAP_UID_CONVERSION_REPLACE', '_') end end diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index 2a963b32b..7784bec62 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -8,8 +8,20 @@ Doorkeeper.configure do end resource_owner_from_credentials do |_routes| - user = User.find_by(email: request.params[:username]) - user if !user&.otp_required_for_login? && user&.valid_password?(request.params[:password]) + if Devise.ldap_authentication + user = User.authenticate_with_ldap({ :email => request.params[:username], :password => request.params[:password] }) + end + + if Devise.pam_authentication + user ||= User.authenticate_with_ldap({ :email => request.params[:username], :password => request.params[:password] }) + end + + if user.nil? + user = User.find_by(email: request.params[:username]) + user = nil unless user.valid_password?(request.params[:password]) + end + + user if !user&.otp_required_for_login? end # If you want to restrict access to the web interface for adding oauth authorized applications, you need to declare the block below. @@ -82,7 +94,13 @@ Doorkeeper.configure do :'read:search', :'read:statuses', :follow, - :push + :push, + :'admin:read', + :'admin:read:accounts', + :'admin:read:reports', + :'admin:write', + :'admin:write:accounts', + :'admin:write:reports' # Change the way client credentials are retrieved from the request object. # By default it retrieves first from the `HTTP_AUTHORIZATION` header, then diff --git a/config/initializers/health_check.rb b/config/initializers/health_check.rb new file mode 100644 index 000000000..6f1e78fed --- /dev/null +++ b/config/initializers/health_check.rb @@ -0,0 +1,8 @@ +HealthCheck.setup do |config| + config.uri = 'health' + + config.standard_checks = %w(database migrations cache) + config.full_checks = %w(database migrations cache) + + config.include_error_in_response_body = false +end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index bf0cb52a3..c65153b0a 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -18,4 +18,5 @@ ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym 'PubSubHubbub' inflect.acronym 'ActivityStreams' inflect.acronym 'JsonLd' + inflect.acronym 'NodeInfo' end diff --git a/config/initializers/instrumentation.rb b/config/initializers/instrumentation.rb deleted file mode 100644 index 8483f2be2..000000000 --- a/config/initializers/instrumentation.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -instrumentation_hostname = ENV.fetch('INSTRUMENTATION_HOSTNAME') { 'localhost' } - -ActiveSupport::Notifications.subscribe(/process_action.action_controller/) do |*args| - event = ActiveSupport::Notifications::Event.new(*args) - controller = event.payload[:controller] - action = event.payload[:action] - format = event.payload[:format] || 'all' - format = 'all' if format == '*/*' - status = event.payload[:status] - key = "#{controller}.#{action}.#{format}.#{instrumentation_hostname}" - - ActiveSupport::Notifications.instrument :performance, action: :measure, measurement: "#{key}.total_duration", value: event.duration - ActiveSupport::Notifications.instrument :performance, action: :measure, measurement: "#{key}.db_time", value: event.payload[:db_runtime] - ActiveSupport::Notifications.instrument :performance, action: :measure, measurement: "#{key}.view_time", value: event.payload[:view_runtime] - ActiveSupport::Notifications.instrument :performance, measurement: "#{key}.status.#{status}" -end diff --git a/config/initializers/json_ld.rb b/config/initializers/json_ld.rb index d5575d135..3ed3c4b31 100644 --- a/config/initializers/json_ld.rb +++ b/config/initializers/json_ld.rb @@ -1,3 +1,4 @@ # frozen_string_literal: true require_relative '../../lib/json_ld/security' +require_relative '../../lib/json_ld/identity' diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index ce4185e02..96607b7ce 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -1,10 +1,11 @@ # frozen_string_literal: true -Paperclip.options[:read_timeout] = 60 - Paperclip.interpolates :filename do |attachment, style| - return attachment.original_filename if style == :original - [basename(attachment, style), extension(attachment, style)].delete_if(&:blank?).join('.') + if style == :original + attachment.original_filename + else + [basename(attachment, style), extension(attachment, style)].delete_if(&:blank?).join('.') + end end Paperclip::Attachment.default_options.merge!( @@ -24,21 +25,27 @@ if ENV['S3_ENABLED'] == 'true' storage: :s3, s3_protocol: s3_protocol, s3_host_name: s3_hostname, + s3_headers: { + 'X-Amz-Multipart-Threshold' => ENV.fetch('S3_MULTIPART_THRESHOLD') { 15.megabytes }.to_i, 'Cache-Control' => 'public, max-age=315576000, immutable', }, + s3_permissions: ENV.fetch('S3_PERMISSION') { 'public-read' }, s3_region: s3_region, + s3_credentials: { bucket: ENV['S3_BUCKET'], access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], }, + s3_options: { signature_version: ENV.fetch('S3_SIGNATURE_VERSION') { 'v4' }, - http_open_timeout: 5, + http_open_timeout: ENV.fetch('S3_OPEN_TIMEOUT'){ '5' }.to_i, http_read_timeout: 5, http_idle_timeout: 5, + retry_limit: 0, } ) @@ -47,6 +54,7 @@ if ENV['S3_ENABLED'] == 'true' endpoint: ENV['S3_ENDPOINT'], force_path_style: true ) + Paperclip::Attachment.default_options[:url] = ':s3_path_url' end @@ -72,6 +80,7 @@ elsif ENV['SWIFT_ENABLED'] == 'true' openstack_region: ENV['SWIFT_REGION'], openstack_cache_ttl: ENV.fetch('SWIFT_CACHE_TTL') { 60 }, }, + fog_directory: ENV['SWIFT_CONTAINER'], fog_host: ENV['SWIFT_OBJECT_URL'], fog_public: true @@ -80,7 +89,7 @@ else Paperclip::Attachment.default_options.merge!( storage: :filesystem, use_timestamp: true, - path: (ENV['PAPERCLIP_ROOT_PATH'] || ':rails_root/public/system') + '/:class/:attachment/:id_partition/:style/:filename', - url: (ENV['PAPERCLIP_ROOT_URL'] || '/system') + '/:class/:attachment/:id_partition/:style/:filename', + path: ENV.fetch('PAPERCLIP_ROOT_PATH', ':rails_root/public/system') + '/:class/:attachment/:id_partition/:style/:filename', + url: ENV.fetch('PAPERCLIP_ROOT_URL', '/system') + '/:class/:attachment/:id_partition/:style/:filename', ) end diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb index 24ba16ae3..273cac9ca 100644 --- a/config/initializers/rack_attack.rb +++ b/config/initializers/rack_attack.rb @@ -65,7 +65,7 @@ class Rack::Attack req.authenticated_user_id if req.post? && req.path.start_with?('/api/v1/media') end - throttle('throttle_media_proxy', limit: 30, period: 30.minutes) do |req| + throttle('throttle_media_proxy', limit: 30, period: 10.minutes) do |req| req.remote_ip if req.path.start_with?('/media_proxy') end diff --git a/config/initializers/statsd.rb b/config/initializers/statsd.rb index ce83fd9de..93ea1d1e4 100644 --- a/config/initializers/statsd.rb +++ b/config/initializers/statsd.rb @@ -3,10 +3,10 @@ if ENV['STATSD_ADDR'].present? host, port = ENV['STATSD_ADDR'].split(':') - statsd = ::Statsd.new(host, port) - statsd.namespace = ENV.fetch('STATSD_NAMESPACE') { ['Mastodon', Rails.env].join('.') } + $statsd = ::Statsd.new(host, port) + $statsd.namespace = ENV.fetch('STATSD_NAMESPACE') { ['Mastodon', Rails.env].join('.') } - ::NSA.inform_statsd(statsd) do |informant| + ::NSA.inform_statsd($statsd) do |informant| informant.collect(:action_controller, :web) informant.collect(:active_record, :db) informant.collect(:active_support_cache, :cache) diff --git a/config/locales/activerecord.bg.yml b/config/locales/activerecord.bg.yml index d0e375da9..a1f60b45a 100644 --- a/config/locales/activerecord.bg.yml +++ b/config/locales/activerecord.bg.yml @@ -1 +1,7 @@ +--- bg: + activerecord: + attributes: + poll: + expires_at: Краен срок + options: Избори diff --git a/config/locales/activerecord.bn.yml b/config/locales/activerecord.bn.yml index 152c69829..e0e6ac90c 100644 --- a/config/locales/activerecord.bn.yml +++ b/config/locales/activerecord.bn.yml @@ -1 +1,17 @@ +--- bn: + activerecord: + attributes: + poll: + expires_at: শেষ হবে + options: বিকল্প + errors: + models: + account: + attributes: + username: + invalid: শুধুমাত্র অক্ষর, সংখ্যা এবং _ বেবহার করা যাবে + status: + attributes: + reblog: + taken: লেখাটি ইতিপূর্বে ছিল diff --git a/config/locales/activerecord.br.yml b/config/locales/activerecord.br.yml new file mode 100644 index 000000000..77fc4f2a1 --- /dev/null +++ b/config/locales/activerecord.br.yml @@ -0,0 +1,13 @@ +--- +br: + activerecord: + attributes: + poll: + expires_at: Deiziad termen + options: Dibaboù + errors: + models: + account: + attributes: + username: + invalid: nemet lizherennoù, niverennoù ha isbarrennigoù diff --git a/config/locales/activerecord.cy.yml b/config/locales/activerecord.cy.yml index 265530124..92fba043f 100644 --- a/config/locales/activerecord.cy.yml +++ b/config/locales/activerecord.cy.yml @@ -1,6 +1,10 @@ --- cy: activerecord: + attributes: + poll: + expires_at: Terfyn amser + options: Dewisiadau errors: models: account: diff --git a/config/locales/activerecord.da.yml b/config/locales/activerecord.da.yml index 5e7266ef1..e7367a4af 100644 --- a/config/locales/activerecord.da.yml +++ b/config/locales/activerecord.da.yml @@ -1,6 +1,10 @@ --- da: activerecord: + attributes: + poll: + expires_at: Deadline + options: Valgmuligheder errors: models: account: diff --git a/config/locales/activerecord.es-AR.yml b/config/locales/activerecord.es-AR.yml new file mode 100644 index 000000000..4cdd90278 --- /dev/null +++ b/config/locales/activerecord.es-AR.yml @@ -0,0 +1,17 @@ +--- +es-AR: + activerecord: + attributes: + poll: + expires_at: Fecha límite + options: Opciones + errors: + models: + account: + attributes: + username: + invalid: sólo letras, números y subguiones ("_") + status: + attributes: + reblog: + taken: del estado ya existe diff --git a/config/locales/activerecord.et.yml b/config/locales/activerecord.et.yml new file mode 100644 index 000000000..5679a91fe --- /dev/null +++ b/config/locales/activerecord.et.yml @@ -0,0 +1,17 @@ +--- +et: + activerecord: + attributes: + poll: + expires_at: Tähtaeg + options: Valikud + errors: + models: + account: + attributes: + username: + invalid: ainult tähtmärgid, numbrid ja alakriipsud + status: + attributes: + reblog: + taken: staatusel juba eksisteerib diff --git a/config/locales/activerecord.fa.yml b/config/locales/activerecord.fa.yml index 1cd50eec7..d3b01a158 100644 --- a/config/locales/activerecord.fa.yml +++ b/config/locales/activerecord.fa.yml @@ -1,6 +1,10 @@ --- fa: activerecord: + attributes: + poll: + expires_at: مهلت + options: گزینهها errors: models: account: diff --git a/config/locales/activerecord.fi.yml b/config/locales/activerecord.fi.yml index 23c538b19..305042c42 100644 --- a/config/locales/activerecord.fi.yml +++ b/config/locales/activerecord.fi.yml @@ -1 +1,13 @@ +--- fi: + activerecord: + attributes: + poll: + expires_at: Määräaika + options: Vaihtoehdot + errors: + models: + account: + attributes: + username: + invalid: vain kirjaimia, numeroita ja alaviivoja diff --git a/config/locales/activerecord.hi.yml b/config/locales/activerecord.hi.yml new file mode 100644 index 000000000..d758a5b53 --- /dev/null +++ b/config/locales/activerecord.hi.yml @@ -0,0 +1 @@ +hi: diff --git a/config/locales/activerecord.hu.yml b/config/locales/activerecord.hu.yml index 52314c50c..ca5fbacb4 100644 --- a/config/locales/activerecord.hu.yml +++ b/config/locales/activerecord.hu.yml @@ -1 +1,17 @@ +--- hu: + activerecord: + attributes: + poll: + expires_at: Határidő + options: Lehetőségek + errors: + models: + account: + attributes: + username: + invalid: csak betűk, számok vagy alávonás + status: + attributes: + reblog: + taken: már létezik ehhez a bejegyzéshez diff --git a/config/locales/activerecord.id.yml b/config/locales/activerecord.id.yml index 9fa093e9d..673d002e3 100644 --- a/config/locales/activerecord.id.yml +++ b/config/locales/activerecord.id.yml @@ -1,6 +1,10 @@ --- id: activerecord: + attributes: + poll: + expires_at: Tenggat waktu + options: Pilihan errors: models: account: diff --git a/config/locales/activerecord.it.yml b/config/locales/activerecord.it.yml index 4cec9fb63..70afdaef1 100644 --- a/config/locales/activerecord.it.yml +++ b/config/locales/activerecord.it.yml @@ -1,12 +1,16 @@ --- it: activerecord: + attributes: + poll: + expires_at: Scadenza + options: Scelte errors: models: account: attributes: username: - invalid: solo lettere, numeri e trattino basso + invalid: solo lettere, numeri e trattini bassi status: attributes: reblog: diff --git a/config/locales/activerecord.kn.yml b/config/locales/activerecord.kn.yml new file mode 100644 index 000000000..d094088d8 --- /dev/null +++ b/config/locales/activerecord.kn.yml @@ -0,0 +1 @@ +kn: diff --git a/config/locales/activerecord.mk.yml b/config/locales/activerecord.mk.yml new file mode 100644 index 000000000..8b9144a98 --- /dev/null +++ b/config/locales/activerecord.mk.yml @@ -0,0 +1 @@ +mk: diff --git a/config/locales/activerecord.ml.yml b/config/locales/activerecord.ml.yml new file mode 100644 index 000000000..6931a683d --- /dev/null +++ b/config/locales/activerecord.ml.yml @@ -0,0 +1 @@ +ml: diff --git a/config/locales/activerecord.mr.yml b/config/locales/activerecord.mr.yml new file mode 100644 index 000000000..6e4ffece9 --- /dev/null +++ b/config/locales/activerecord.mr.yml @@ -0,0 +1,13 @@ +--- +mr: + activerecord: + attributes: + poll: + expires_at: संपण्याची वेळ + options: पर्याय + errors: + models: + account: + attributes: + username: + invalid: फक्त अक्षरे, अंक आणि अंडरस्कोर चिन्ह diff --git a/config/locales/activerecord.nn.yml b/config/locales/activerecord.nn.yml new file mode 100644 index 000000000..777f4e600 --- /dev/null +++ b/config/locales/activerecord.nn.yml @@ -0,0 +1 @@ +nn: diff --git a/config/locales/activerecord.pt-BR.yml b/config/locales/activerecord.pt-BR.yml index 85150c1e7..3f2b6aaaa 100644 --- a/config/locales/activerecord.pt-BR.yml +++ b/config/locales/activerecord.pt-BR.yml @@ -10,7 +10,7 @@ pt-BR: account: attributes: username: - invalid: apenas letras, números e underscores + invalid: apenas letras, números e '_' são permitidos status: attributes: reblog: diff --git a/config/locales/activerecord.pt.yml b/config/locales/activerecord.pt-PT.yml index 556fcfc4f..cbb053a90 100644 --- a/config/locales/activerecord.pt.yml +++ b/config/locales/activerecord.pt-PT.yml @@ -1,5 +1,5 @@ --- -pt: +pt-PT: activerecord: errors: models: diff --git a/config/locales/activerecord.sl.yml b/config/locales/activerecord.sl.yml index d98e3b676..1df109579 100644 --- a/config/locales/activerecord.sl.yml +++ b/config/locales/activerecord.sl.yml @@ -1,6 +1,10 @@ --- sl: activerecord: + attributes: + poll: + expires_at: Rok + options: Izbire errors: models: account: diff --git a/config/locales/activerecord.sv.yml b/config/locales/activerecord.sv.yml index 0ae4906d7..8d142e7ac 100644 --- a/config/locales/activerecord.sv.yml +++ b/config/locales/activerecord.sv.yml @@ -1,9 +1,13 @@ --- sv: activerecord: + attributes: + poll: + expires_at: Tidsgräns + options: Val errors: models: account: attributes: username: - invalid: enbart bokstäver, siffror och understreck + invalid: endast bokstäver, siffror och understrykning diff --git a/config/locales/activerecord.ta.yml b/config/locales/activerecord.ta.yml index 4320953ce..b89c564f2 100644 --- a/config/locales/activerecord.ta.yml +++ b/config/locales/activerecord.ta.yml @@ -1 +1,17 @@ +--- ta: + activerecord: + attributes: + poll: + expires_at: இறுதிகட்டம் + options: தேர்வுகள் + errors: + models: + account: + attributes: + username: + invalid: எழுத்துக்கள், எண்கள் மற்றும் அடிக்கோடு + status: + attributes: + reblog: + taken: அந்த நிலையறிக்கை ஏற்கனவே உள்ளது diff --git a/config/locales/activerecord.th.yml b/config/locales/activerecord.th.yml index 7890ed80c..6719422a2 100644 --- a/config/locales/activerecord.th.yml +++ b/config/locales/activerecord.th.yml @@ -1,6 +1,10 @@ --- th: activerecord: + attributes: + poll: + expires_at: กำหนดเวลาสิ้นสุด + options: ทางเลือก errors: models: account: diff --git a/config/locales/activerecord.tr.yml b/config/locales/activerecord.tr.yml index 1cc2d9876..8ce55599c 100644 --- a/config/locales/activerecord.tr.yml +++ b/config/locales/activerecord.tr.yml @@ -1,6 +1,10 @@ --- tr: activerecord: + attributes: + poll: + expires_at: Son Teslim Tarihi + options: Seçenekler errors: models: account: diff --git a/config/locales/activerecord.uk.yml b/config/locales/activerecord.uk.yml index 00b2b8d8b..ffbf59346 100644 --- a/config/locales/activerecord.uk.yml +++ b/config/locales/activerecord.uk.yml @@ -1,12 +1,16 @@ --- uk: activerecord: + attributes: + poll: + expires_at: Кінцевий термін + options: Варіанти вибору errors: models: account: attributes: username: - invalid: тільки букви, цифри та нижні підкреслювання + invalid: тільки літери, цифри та підкреслення status: attributes: reblog: diff --git a/config/locales/activerecord.ur.yml b/config/locales/activerecord.ur.yml new file mode 100644 index 000000000..2cace5883 --- /dev/null +++ b/config/locales/activerecord.ur.yml @@ -0,0 +1 @@ +ur: diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml index cb82c0526..4f938a7f5 100644 --- a/config/locales/activerecord.zh-TW.yml +++ b/config/locales/activerecord.zh-TW.yml @@ -1 +1,17 @@ +--- zh-TW: + activerecord: + attributes: + poll: + expires_at: 截止時間 + options: 選擇 + errors: + models: + account: + attributes: + username: + invalid: 只能有字母、數字及底線 + status: + attributes: + reblog: + taken: 嘟文已經存在 diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 8da2de5ec..13f509836 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -5,18 +5,19 @@ ar: about_mastodon_html: ماستدون شبكة اجتماعية مبنية على أسُس بروتوكولات برمجيات الويب الحرة و مفتوحة المصدر. و هو لامركزي تمامًا كالبريد الإلكتروني. about_this: عن مثيل الخادوم هذا active_count_after: نشط + active_footnote: مستخدم نشيط شهريا (MAU) administered_by: 'يُديره:' api: واجهة برمجة التطبيقات apps: تطبيقات الأجهزة المحمولة + apps_platforms: إستخدم ماستودون في iOS، أندرويد وأنظمة أخرى + browse_directory: تصفح دليل الصفحات التعريفية وصفّي بحسب الإهتمام + browse_public_posts: تصفح تيارًا مباشرًا مِن منشورات عامة على ماستدون contact: للتواصل معنا contact_missing: لم يتم تعيينه contact_unavailable: غير متوفر discover_users: اكتشف مستخدِمين documentation: الدليل - extended_description_html: | - <h3>مكان جيد للقواعد</h3> - <p>لم يتم بعد إدخال الوصف الطويل.</p> - generic_description: "%{domain} هو سيرفر من بين سيرفرات الشبكة" + federation_hint_html: بواسطة حساب في %{instance} ستتمكن من تتبع أناس في أي خادم ماستدون وأكثر. get_apps: جرّب تطبيقا على الموبايل hosted_on: ماستدون مُستضاف على %{domain} learn_more: تعلم المزيد @@ -34,6 +35,10 @@ ar: status_count_before: نشروا tagline: اتبع أصدقائك وصديقاتك واكتشف آخرين وأخريات terms: شروط الخدمة + unavailable_content: محتوى غير متوفر + unavailable_content_description: + domain: الخادم + reason: 'السبب:' user_count_after: few: مستخدمين many: مستخدمين @@ -58,8 +63,9 @@ ar: last_active: آخر نشاط link_verified_on: تم التحقق مِن مالك هذا الرابط بتاريخ %{date} media: الوسائط - moved_html: "%{name} إنتقلَ إلى %{new_profile_link} :" + moved_html: "%{name} إنتقلَ إلى %{new_profile_link}:" network_hidden: إنّ المعطيات غير متوفرة + never_active: أبدا nothing_here: لا يوجد أي شيء هنا! people_followed_by: الأشخاص الذين يتبعهم %{name} people_who_follow: الأشخاص الذين يتبعون %{name} @@ -79,7 +85,7 @@ ar: admin: المدير bot: روبوت moderator: مُشرِف - unavailable: الحساب غير متوفر + unavailable: الصفحة التعريفية غير متوفرة unfollow: إلغاء المتابعة admin: account_actions: @@ -151,12 +157,12 @@ ar: outbox_url: رابط صندوق الصادر pending: في انتظار المراجعة perform_full_suspension: تعليق الحساب - profile_url: رابط الملف الشخصي + profile_url: رابط الصفحة التعريفية promote: ترقية protocol: البروتوكول public: عمومي push_subscription_expires: انتهاء الاشتراك ”PuSH“ - redownload: تحديث الصفحة الشخصية + redownload: انعش الصفحة التعريفية reject: ارفض reject_all: ارفض الكل remove_avatar: حذف الصورة الرمزية @@ -194,6 +200,7 @@ ar: username: اسم المستخدم warn: تحذير web: الويب + whitelisted: في القائمة البيضاء action_logs: actions: assigned_to_self_report: قام %{name} بتعيين التقرير %{target} لأنفسهم @@ -229,19 +236,24 @@ ar: deleted_status: "(منشور محذوف)" title: سِجلّ التفتيش و المعاينة custom_emojis: + assign_category: اسند فئة by_domain: النطاق copied_msg: تم إنشاء نسخة محلية للإيموجي بنجاح copy: نسخ copy_failed_msg: فشلت عملية إنشاء نسخة محلية لهذا الإيموجي + create_new_category: انشئ فئة جديدة created_msg: تم إنشاء الإيموجي بنجاح! delete: حذف destroyed_msg: تمت عملية تدمير الإيموجي بنجاح! disable: تعطيل + disabled: مُعطَّل disabled_msg: تمت عملية تعطيل ذلك الإيموجي بنجاح emoji: إيموجي enable: تفعيل + enabled: مُشغَّل enabled_msg: تم تنشيط ذاك الإيموجي بنجاح image_hint: ملف PNG إلى غاية حجم 50 ك.ب + list: القائمة listed: مُدرَج new: title: إضافة إيموجي خاص جديد @@ -249,22 +261,27 @@ ar: shortcode: الترميز المُصَغّر shortcode_hint: على الأقل حرفين، و فقط رموز أبجدية عددية و أسطر سفلية title: الإيموجي الخاصة + uncategorized: غير مصنّف unlisted: غير مدرج update_failed_msg: تعذرت عملية تحديث ذاك الإيموجي updated_msg: تم تحديث الإيموجي بنجاح! upload: رفع dashboard: + authorized_fetch_mode: الوضع الآمن backlog: الأعمال المتراكمة config: الإعداد feature_deletions: الحسابات المحذوفة feature_invites: روابط الدعوات - feature_profile_directory: دليل الحسابات + feature_profile_directory: دليل الملفات التعريفية feature_registrations: التسجيلات feature_relay: المُرحّل الفديرالي + feature_spam_check: مكافح البريد المزعج feature_timeline_preview: معاينة الخيط الزمني features: الميّزات hidden_service: الفيديرالية مع الخدمات الخفية - open_reports: فتح الشكاوى + open_reports: شكاوي مفتوحة + pending_tags: وسوم في انتظار المراجعة + pending_users: مستخدمين في انتظار مراجعة recent_users: أحدث المستخدِمين search: البحث النصي الكامل single_user_mode: وضع المستخدِم الأوحد @@ -272,24 +289,33 @@ ar: space: المساحة المستخدَمة title: لوح المراقبة total_users: إجمالي المستخدِمين - trends: المؤشرات + trends: المتداوَلة week_interactions: تفاعُلات هذا الأسبوع - week_users_active: نشط هذا الأسبوع + week_users_active: نشطاء هذا الأسبوع week_users_new: مستخدِمين هذا الأسبوع + whitelist_mode: وضع القائمة البيضاء + domain_allows: + add_new: إضافة النطاق إلى القائمة البيضاء + created_msg: تمت إضافة النطاق إلى القائمة البيضاء بنجاح + destroyed_msg: تمت إزالة النطاق مِن القائمة البيضاء + undo: إزالة من القائمة البيضاء domain_blocks: add_new: إضافة حجب جديد لنطاق created_msg: إنّ حجب النطاق حيز التشغيل destroyed_msg: تم إلغاء الحجب المفروض على النطاق domain: النطاق + edit: تحرير النطاق المحظور new: create: إنشاء حظر hint: لن تمنع كتلة المجال إنشاء إدخالات حساب في قاعدة البيانات ، ولكنها ستطبق طرق الإشراف المحددة بأثر رجعي وتلقائي على هذه الحسابات. severity: - desc_html: "<strong>Silence</strong> سيجعل مشاركات الحساب غير مرئية لأي شخص لا يتبعها. <strong>Suspend</strong> سيزيل كل محتوى الحساب ووسائطه وبيانات ملفه الشخصي. Use <strong>None</strong> إذا كنت تريد فقط رفض ملفات الوسائط." + desc_html: "<strong>Silence</strong> سيجعل مشاركات الحساب غير مرئية لأي شخص لا يتبعها. <strong>Suspend</strong> سيزيل كل محتوى الحساب ووسائطه وبيانات ملفه التعريفي. Use <strong>None</strong> إذا كنت تريد فقط رفض ملفات الوسائط." noop: لا شيء silence: كتم suspend: تعليق title: حجب نطاق جديد + private_comment: تعليق خاص + public_comment: تعليق للعلن reject_media: رفض ملفات الوسائط reject_media_hint: يزيل ملفات الوسائط المخزنة محليًا ويرفض تنزيل أي ملفات في المستقبل. غير ذي صلة للتعليق reject_reports: رفض التقارير @@ -300,9 +326,9 @@ ar: affected_accounts: few: "%{count} حسابات معنية في قاعدة البيانات" many: "%{count} حسابات معنية في قاعدة البيانات" - one: حساب واحد معني في قاعدة البيانات + one: حساب واحد %{count} معني في قاعدة البيانات other: "%{count} حسابات معنية في قاعدة البيانات" - two: "%{count} حسابات معنية في قاعدة البيانات" + two: حسابين %{count} معنيين في قاعدة البيانات zero: "%{count} حسابات معنية في قاعدة البيانات" retroactive: silence: إلغاء الكتم عن كافة الحسابات المتواجدة على هذا النطاق @@ -337,6 +363,8 @@ ar: all: كافتها limited: محدود title: الإشراف + private_comment: تعليق خاص + public_comment: تعليق للعلن title: الفديرالية total_blocked_by_us: المحجوبة مِن طرفنا total_followed_by_them: يُتابِعونها @@ -413,6 +441,10 @@ ar: custom_css: desc_html: يقوم بتغيير المظهر بواسطة سي أس أس يُحمَّل على كافة الصفحات title: سي أس أس مخصص + domain_blocks: + all: للجميع + domain_blocks_rationale: + title: اظهر السبب hero: desc_html: معروض على الصفحة الأولى. لا يقل عن 600 × 100 بكسل. عند عدم التعيين ، تعود الصورة إلى النسخة المصغرة على سبيل المثال title: الصورة الرأسية @@ -424,7 +456,7 @@ ar: title: إظهار الصور الحساسة في مُعاينات أوبن غراف profile_directory: desc_html: السماح للمستخدمين الكشف عن حساباتهم - title: تفعيل سجل الملفات الشخصية + title: تفعيل دليل الصفحات التعريفية registrations: closed_message: desc_html: يتم عرضه على الصفحة الرئيسية عندما يتم غلق تسجيل الحسابات الجديدة. يمكنكم إستخدام علامات الأيتش تي أم أل HTML @@ -437,6 +469,7 @@ ar: title: المستخدِمون المصرح لهم لإرسال الدعوات registrations_mode: modes: + approved: طلب الموافقة لازم عند إنشاء حساب none: لا أحد يمكنه إنشاء حساب open: يمكن للجميع إنشاء حساب title: طريقة إنشاء الحسابات @@ -458,6 +491,8 @@ ar: desc_html: يمكنك كتابة سياسة الخصوصية الخاصة بك ، شروط الخدمة أو غيرها من القوانين. يمكنك استخدام علامات HTML title: شروط الخدمة المخصصة site_title: اسم مثيل الخادم + spam_check_enabled: + title: مكافحة البريد المزعج thumbnail: desc_html: يستخدم للعروض السابقة عبر Open Graph و API. 1200x630px موصى به title: الصورة الرمزية المصغرة لمثيل الخادوم @@ -465,12 +500,15 @@ ar: desc_html: عرض الخيط العمومي على صفحة الاستقبال title: مُعاينة الخيط العام title: إعدادات الموقع + trends: + title: الوسوم المتداولة statuses: back_to_account: العودة إلى صفحة الحساب batch: delete: حذف nsfw_off: تعيينه كمنشور غير حساس nsfw_on: تعيينه كمنشور حساس + deleted: محذوف failed_to_execute: خطأ في التفعيل media: title: الوسائط @@ -478,20 +516,23 @@ ar: no_status_selected: لم يطرأ أي تغيير على أي منشور بما أنه لم يتم اختيار أي واحد title: منشورات الحساب with_media: تحتوي على وسائط - subscriptions: - callback_url: عاود الاتصال بالعنوان - confirmed: مؤكَّد - expires_in: تنتهي مدة صلاحيتها في - last_delivery: آخر إيداع - topic: الموضوع tags: - accounts: الحسابات - hidden: المخفية - hide: الإخفاء عن سجل الحسابات + accounts_today: استخدامات هذا اليوم + accounts_week: استخدامات هذا الأسبوع + context: السياق + directory: في دليل حسابات المستخدمين + in_directory: "%{count} في سجل حسابات المستخدمين" + last_active: آخر نشاط + most_popular: الأكثر شعبية + most_recent: الأحدث name: الوسم + review: حالة المراجعة + reviewed: مُراجَع title: الوسوم - unhide: إظهاره في سجل حسابات المستخدمين - visible: ظاهر + trending_right_now: متداول اللحظة + unique_uses_today: "%{count} منشورات اليوم" + unreviewed: غير مُراجَع + updated_msg: تم تحديث إعدادات الوسوم بنجاح title: الإدارة warning_presets: add_new: إضافة واحد جديد @@ -508,13 +549,17 @@ ar: subject: تقرير جديد ل%{instance} (#%{id}) appearance: advanced_web_interface: واجهة الويب المتقدمة + animations_and_accessibility: الإتاحة والحركة confirmation_dialogs: نوافذ التأكيد + discovery: استكشاف sensitive_content: محتوى حساس + toot_layout: تصميم التبويق application_mailer: notification_preferences: تعديل خيارات البريد الإلكتروني salutation: "%{name}،" settings: 'تغيير تفضيلات البريد الإلكتروني: %{link}' - view_profile: عرض الملف الشخصي + view: 'اعرض:' + view_profile: اعرض الصفحة التعريفية view_status: عرض المنشور applications: created: تم إنشاء التطبيق بنجاح @@ -528,9 +573,12 @@ ar: apply_for_account: اطلب دعوة change_password: الكلمة السرية checkbox_agreement_html: أوافق على <a href="%{rules_path}" target="_blank">قواعد الخادم</a> و <a href="%{terms_path}" target="_blank">شروط الخدمة</a> - confirm_email: تأكيد عنوان البريد الإلكتروني + checkbox_agreement_without_rules_html: أوافق على <a href="%{terms_path}" target="_blank">شروط الخدمة</a> delete_account: حذف حساب delete_account_html: إن كنت ترغب في حذف حسابك يُمكنك <a href="%{path}">المواصلة هنا</a>. سوف يُطلَبُ منك التأكيد قبل الحذف. + description: + prefix_invited_by_user: يدعوك @%{name} للاتحاق بخادم ماستدون هذا! + prefix_sign_up: أنشئ حسابًا على ماستدون اليوم! didnt_get_confirmation: لم تتلق تعليمات التأكيد ؟ forgot_password: نسيت كلمة المرور ؟ invalid_reset_password_token: رمز إعادة تعيين كلمة المرور غير صالح أو منتهي الصلاحية. يرجى طلب واحد جديد. @@ -548,6 +596,12 @@ ar: reset_password: إعادة تعيين كلمة المرور security: الأمان set_new_password: إدخال كلمة مرور جديدة + setup: + title: الضبط + status: + account_status: حالة الحساب + functional: حسابك جاهز. + redirecting_to: حسابك غير نشط لأنه تم تحويله حاليا إلى %{acct}. trouble_logging_in: هل صادفتكم مشكلة في الولوج؟ authorize_follow: already_following: أنت تتابع بالفعل هذا الحساب @@ -557,9 +611,13 @@ ar: following: 'مرحى! أنت الآن تتبع:' post_follow: close: أو يمكنك إغلاق هذه النافذة. - return: عرض الملف الشخصي للمستخدم + return: اظهر الملف التعريفي للمستخدم web: واصل إلى الويب title: إتباع %{acct} + challenge: + confirm: واصل + invalid_password: الكلمة السرية خاطئة + prompt: أكِّد الكلمة السرية للمواصلة datetime: distance_in_words: about_x_hours: "%{count}سا" @@ -575,26 +633,30 @@ ar: x_months: "%{count} شه" x_seconds: "%{count}ث" deletes: - bad_password_msg: محاولة جيدة يا هاكرز ! كلمة السر خاطئة + challenge_not_passed: المعلومات التي أدخلتها لم تكن صحيحة confirm_password: قم بإدخال كلمتك السرية الحالية للتحقق من هويتك + confirm_username: ادخل اسم المستخدم الخاص بك لتأكيد الإجراء proceed: حذف حساب success_msg: تم حذف حسابك بنجاح - warning_title: توافر المحتوى المنشور و المبعثَر + warning: + before: 'يرجى قراءة هذه الملاحظات بتأنّي قبل المواصلة:' + data_removal: سوف تُحذَف منشوراتك والبيانات الأخرى نهائيا + email_change_html: بإمكانك <a href="%{path}">تغيير عنوان بريدك الإلكتروني</a> دون أن يُحذف حسابك + irreversible: لن يكون بإمكانك استرجاع أو إعادة تنشيط حسابك + more_details_html: للمزيد مِن التفاصيل ، يرجى الإطلاع على <a href="%{terms_path}">سياسة الخصوصية</a>. + username_available: سيصبح اسم مستخدمك متوفرا ثانية + username_unavailable: سيبقى اسم المستخدم الخاص بك غير متوفر directories: - directory: سِجلّ الحسابات - enabled: إنّ حسابك الآن ضمن فهرس المستخدِمين. + directory: سِجلّ الصفحات التعريفية explanation: استكشف مستخدِمين آخرين حسب المواضيع التي تهمهم explore_mastodon: استكشف %{title} - people: - few: "%{count} شخص" - many: "%{count} شخص" - one: "%{count} شخص" - other: "%{count} شخص" - two: "%{count} شخص" - zero: "%{count} شخص" + domain_validator: + invalid_domain: ليس بإسم نطاق صالح errors: + '400': The request you submitted was invalid or malformed. '403': ليس لك الصلاحيات الكافية لعرض هذه الصفحة. '404': إنّ الصفحة التي تبحث عنها لا وجود لها أصلا. + '406': This page is not available in the requested format. '410': إنّ الصفحة التي تبحث عنها لم تعد موجودة. '422': content: فشل التحقق الآمن. ربما منعتَ كعكات الكوكيز؟ @@ -603,6 +665,7 @@ ar: '500': content: نحن متأسفون، لقد حدث خطأ ما مِن جانبنا. title: هذه الصفحة خاطئة + '503': The page could not be served due to a temporary server failure. noscript_html: يرجى تفعيل الجافا سكريبت لاستخدام تطبيق الويب لماستدون، أو عِوض ذلك قوموا بتجريب إحدى <a href="%{apps_path}">التطبيقات الأصلية</a> الدّاعمة لماستدون على منصّتكم. existing_username_validator: not_found_multiple: تعذر العثور على %{usernames} @@ -611,8 +674,8 @@ ar: date: التاريخ download: تنزيل نسخة لحسابك hint_html: بإمكانك طلب نسخة كاملة لـ <strong>كافة تبويقاتك و الوسائط التي قمت بنشرها</strong>. البيانات المُصدَّرة ستكون محفوظة على شكل نسق ActivityPub و باستطاعتك قراءتها بأي برنامج يدعم هذا النسق. يُمكنك طلب نسخة كل 7 أيام. - in_progress: عملية جمع نسخة لبيانات حسابك جارية... - request: طلب نسخة لحسابك + in_progress: جارٍ انشاء نسخة لبيانات حسابك… + request: اطلب نسخة مِن حسابك size: الحجم blocks: قمت بحظر csv: CSV @@ -622,7 +685,7 @@ ar: mutes: قُمتَ بكتم storage: ذاكرة التخزين featured_tags: - add_new: إضافة واحد + add_new: أضف واحدًا جديدا filters: contexts: home: الخيط الزمني الرئيسي @@ -643,6 +706,7 @@ ar: developers: المطورون more: المزيد… resources: الموارد + trending_now: المتداولة الآن generic: all: الكل changes_saved_msg: تم حفظ التعديلات بنجاح! @@ -717,9 +781,21 @@ ar: too_many: لا يمكن إرفاق أكثر من 4 ملفات migrations: acct: username@domain للحساب الجديد - currently_redirecting: 'تم تحويل رابط ملفك الشخصي إلى:' - proceed: حفظ - updated_msg: تم تحديث إعدادات ترحيل حسابك بنجاح! + cancel: ألغِ التوجيه + cancelled_msg: تم إلغاء التوجيه بنجاح. + errors: + move_to_self: لا يمكنه أن يكون الحساب الحالي + not_found: تعذر العثور عليه + on_cooldown: إنّك في مرحلة الجمود + followers_count: المتابِعين عند الإنتقال + incoming_migrations: الانتقال مِن حساب آخر + not_redirecting: حاليا ، حسابك لا يقوم بالتحويل إلى أي حساب آخر. + past_migrations: التهجيرات السابقة + proceed_with_move: انقل مشارِكيك + redirecting_to: حسابك موجَّه إلى %{acct}. + set_redirect: تعين إعادة التوجيه + warning: + before: 'يرجى قراءة هذه الملاحظات بتأنّي قبل المواصلة:' moderation: title: الإشراف notification_mailer: @@ -753,15 +829,15 @@ ar: follow_request: action: إدارة طلبات المتابَعة body: طلب %{name} متابعتك - subject: 'متابع مُعلّق : %{name}' + subject: 'متابع مُعلّق: %{name}' title: طلب متابَعة جديد mention: action: الرد - body: 'أشار إليك %{name} في :' + body: 'أشار إليك %{name} في:' subject: لقد قام %{name} بذِكرك title: إشارة جديدة reblog: - body: 'قام %{name} بترقية منشورك :' + body: 'قام %{name} بترقية منشورك:' subject: قام %{name} بترقية منشورك title: ترقية جديدة number: @@ -784,6 +860,7 @@ ar: errors: already_voted: لقد قمت بالتصويت على استطلاع الرأي هذا مِن قبل duplicate_options: يحتوي على عناصر مكررة + duration_too_long: بعيد جدا في المستقبَل duration_too_short: مبكّر جدا expired: لقد انتهى استطلاع الرأي preferences: @@ -796,6 +873,7 @@ ar: last_active: آخر نشاط most_recent: الأحدث moved: هاجر + mutual: متبادل primary: رئيسي relationship: العلاقة remove_selected_domains: احذف كافة المتابِعين القادمين مِن النطاقات المختارة @@ -818,10 +896,9 @@ ar: reply: proceed: المواصلة إلى الرد prompt: 'ترغب في الرد على هذا التبويق:' - remote_unfollow: - error: خطأ - title: العنوان - unfollowed: غير متابَع + scheduled_statuses: + over_total_limit: لقد بلغت حد الـ %{limit} مِن التبويقات المبرمَجة + too_soon: يجب أن يكون تاريخ البرمجة في المستقبَل sessions: activity: آخر نشاط browser: المتصفح @@ -871,7 +948,7 @@ ar: back: عودة إلى ماستدون delete: حذف الحسابات development: التطوير - edit_profile: تعديل الملف الشخصي + edit_profile: عدّل الصفحة التعريفية export: تصدير البيانات featured_tags: الوسوم الشائعة identity_proofs: دلائل الهوية @@ -880,9 +957,11 @@ ar: migrate: تهجير الحساب notifications: الإخطارات preferences: التفضيلات - profile: الملف الشخصي + profile: الملف التعريفي relationships: المتابِعون والمتابَعون two_factor_authentication: المُصادقة بخُطوَتَيْن + spam_check: + spam_detected: هذا إبلاغ تلقائي. تم اكتشاف منشورات عشوائية غير مرغوب فيها. statuses: attached: description: 'مُرفَق: %{attached}' @@ -918,6 +997,20 @@ ar: private: لا يمكن تدبيس تبويق لم يُنشر للعامة reblog: لا يمكن تثبيت ترقية poll: + total_people: + few: "%{count} أشخاص" + many: "%{count} أشخاص" + one: "%{count} شخص واحد" + other: "%{count} شخصا" + two: "%{count} شخصين" + zero: "%{count} شخص" + total_votes: + few: "%{count} أصوات" + many: "%{count} أصوات" + one: صوت واحد %{count} + other: "%{count} صوتا" + two: صوتين %{count} + zero: بدون صوت %{count} vote: صوّت show_more: أظهر المزيد sign_in_to_participate: قم بتسجيل الدخول للمشاركة في هذه المحادثة @@ -939,6 +1032,10 @@ ar: contrast: ماستدون (تباين عالٍ) default: ماستدون (داكن) mastodon-light: ماستدون (فاتح) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: قم بإدخال الرمز المُوَلّد عبر تطبيق المصادقة للتأكيد description_html: في حال تفعيل <strong>المصادقة بخطوتين </strong>، فتسجيل الدخول يتطلب منك أن يكون بحوزتك هاتفك النقال قصد توليد الرمز الذي سيتم إدخاله. @@ -961,6 +1058,7 @@ ar: title: المغادرة بأرشيف الحساب warning: review_server_policies: مراجعة شروط السيرفر + statuses: 'خصيصا لـ:' subject: disable: تم تجميد حسابك %{acct} none: تحذير إلى %{acct} @@ -968,22 +1066,23 @@ ar: title: disable: الحساب مُجمَّد none: تحذير + silence: الحساب محدود suspend: الحساب مُعلَّق welcome: - edit_profile_action: تهيئة الملف الشخصي - edit_profile_step: يُمكنك·كي تخصيص ملفك الشخصي عن طريق تحميل صورة رمزية ورأسية و بتعديل اسمك·كي العلني وأكثر. و إن أردت·تي معاينة المتابِعين و المتابعات الجُدد قبيل السماح لهم·ن بمتابَعتك فيمكنك·كي تأمين حسابك·كي. + edit_profile_action: تهيئة الملف التعريفي + edit_profile_step: يُمكنك·كي تخصيص صفحتك التعريفية عن طريق تحميل صورة رمزية ورأسية و بتعديل اسمك·كي العلني وأكثر. و إن أردت·تي معاينة المتابِعين و المتابعات الجُدد قبيل السماح لهم·ن بمتابَعتك فيمكنك·كي تأمين حسابك·كي. explanation: ها هي بعض النصائح قبل بداية الاستخدام final_action: اشرَع في النشر final_step: |- - يمكنك الشروع في النشر في الحين! حتى و إن لم كنت لا تمتلك متابِعين بعدُ، يمكن للآخرين الإطلاع على منشوراتك الموجهة للجمهور على الخيط المحلي أو إن قمت باستخدام وسوم. + يمكنك الشروع في النشر في الحين! حتى و إن لم كنت لا تمتلك متابِعين بعدُ، يمكن للآخرين الإطلاع على منشوراتك الموجهة للجمهور على الخيط العام المحلي أو إن قمت باستخدام وسوم. ابدأ بتقديم نفسك باستعمال وسم #introductions. full_handle: عنوانك الكامل full_handle_hint: هذا هو ما يجب تقديمه لأصدقائك قصد أن يكون بإمكانهم متابَعتك أو مُراسَلتك حتى و إن كانت حساباتهم على خوادم أخرى. review_preferences_action: تعديل التفضيلات subject: أهلًا بك على ماستدون tip_federated_timeline: الخيط الزمني الفديرالي هو بمثابة شبه نظرة شاملة على شبكة ماستدون. غير أنه لا يشمل إلا على الأشخاص المتابَعين مِن طرف جيرانك و جاراتك، لذا فهذا الخيط لا يعكس كافة الشبكة برُمّتها. - tip_following: أنت تتبع تلقائيا مديري و مديرات الخادم. للعثور على أشخاص مميزين أو قد تهمك حساباتهم بإمكانك الإطلاع على الخيوط المحلية و كذا الفدرالية. - tip_local_timeline: الخيط الزمني المحلي هو بمثابة نظرة سريعة على الأشخاص المتواجدين على %{instance} يمكن اعتبارهم كجيرانك وجاراتك الأقرب إليك! + tip_following: أنت تتبع تلقائيا مديري و مديرات الخادم. للعثور على أشخاص مميزين أو قد تهمك حساباتهم بإمكانك الإطلاع على الخيوط العامة المحلية و كذا الفدرالية. + tip_local_timeline: الخيط العام المحلي هو بمثابة نظرة سريعة على الأشخاص المتواجدين على %{instance} يمكن اعتبارهم كجيرانك وجاراتك الأقرب إليك! tips: نصائح title: أهلاً بك، %{name}! users: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index ec545ca57..ed8aef235 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -8,9 +8,6 @@ ast: contact_missing: Nun s'afitó contact_unavailable: N/D documentation: Documentación - extended_description_html: | - <h3>Un llugar bonu pa les regles</h3> - <p>Entá nun se configuró la descripción estendida.</p> hosted_on: Mastodon ta agospiáu en %{domain} learn_more: Deprendi más source_code: Códigu fonte @@ -131,21 +128,19 @@ ast: half_a_minute: Púramente agora less_than_x_seconds: Púramente agora deletes: - bad_password_msg: "¡Bon intentu, crackers! Contraseña incorreuta" confirm_password: Introduz la contraseña pa verificar la to identidá - directories: - people: - one: "%{count} persona" - other: "%{count} persones" errors: + '400': The request you submitted was invalid or malformed. '403': Nun tienes permisu pa ver esta páxina. '404': La páxina que tabes guetando nun esiste. + '406': This page is not available in the requested format. '410': La páxina que tabes guetando yá nun esiste. '422': content: Falló la verificación de seguranza. ¿Tas bloquiando les cookies? title: Falló la verificación de seguranza '429': Ficiéronse milenta solicitúes '500': + '503': The page could not be served due to a temporary server failure. exports: archive_takeout: date: Data @@ -201,7 +196,6 @@ ast: too_many: Nun puen axuntase más de 4 ficheros migrations: acct: nome_usuariu@dominiu de la cuenta nueva - proceed: Guardar notification_mailer: digest: body: Equí hai un resume de los mensaxes que nun viesti dende la última visita'l %{since} @@ -227,8 +221,6 @@ ast: no_account_html: "¿Nun tienes una cuenta? Pues <a href='%{sign_up_path}' target='_blank'>rexistrate equí</a>" proceed: Siguir prompt: 'Vas siguir a:' - remote_unfollow: - error: Fallu sessions: browser: Restolador browsers: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index e11340542..85431bc8d 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -48,12 +48,15 @@ bg: x_months: "%{count} м" x_seconds: "%{count} сек" errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': '429': Throttled '500': + '503': The page could not be served due to a temporary server failure. exports: blocks: Вашите блокирания follows: Вашите следвания diff --git a/config/locales/bn.yml b/config/locales/bn.yml index b3eb0bd62..24f0a654a 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -11,19 +11,19 @@ bn: apps: মোবাইল অ্যাপ apps_platforms: মাস্টাডন আইওএস, এন্ড্রোইড বা অন্য মাধ্যমে ব্যবহার করুন browse_directory: একটি ব্যবহারকারীদের তালিকা দেখুন এবং পছন্দ অনুসারে খুজুন + browse_local_posts: এই সার্ভার থেকে সর্বজনীন পোস্টগুলির একটি লাইভ স্ট্রিম ব্রাউজ করুন browse_public_posts: মাস্টাডনে নতুন প্রকাশ্য লেখাগুলো সরাসরি দেখুন contact: যোগাযোগ contact_missing: নেই contact_unavailable: প্রযোজ্য নয় discover_users: ব্যবহারকারীদের দেখুন documentation: ব্যবহারবিলি - extended_description_html: | - <h3>নিয়মের জন্য উপযুক্ত জায়গা</h3> - <p>বিস্তারিত বিবরণ এখনো যুক্ত করা হয়নি</p> federation_hint_html: "%{instance}তে একটা নিবন্ধন থাকলে আপনি যেকোনো মাস্টাডন বা এধরণের অন্যান্য সার্ভারের মানুষের সাথে যুক্ত হতে পারবেন ।" - generic_description: নেটওয়ার্কের ভেতরে %{domain} একটি সার্ভার get_apps: মোবাইল এপ্প একটা ব্যবহার করতে পারেন hosted_on: এই মাস্টাডনটি আছে %{domain} এ + instance_actor_flash: 'এই অ্যাকাউন্টটি ভার্চুয়াল এক্টর যা নিজে কোনও সার্ভারের প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং কোনও পৃথক ব্যবহারকারী নয়। এটি ফেডারেশনের উদ্দেশ্যে ব্যবহৃত হয় এবং আপনি যদি পুরো ইনস্ট্যান্স ব্লক করতে না চান তবে অবরুদ্ধ করা উচিত নয়, সেক্ষেত্রে আপনার ডোমেন ব্লক ব্যবহার করা উচিত। + +' learn_more: বিস্তারিত জানুন privacy_policy: গোপনীয়তা নীতি see_whats_happening: কী কী হচ্ছে দেখুন @@ -35,6 +35,14 @@ bn: status_count_before: কে লিখেছে tagline: পরিচিতজনদের সাথে যুক্ত হন এবং নতুনদের সাথে পরিচিত হন terms: ব্যবহারের শর্তাবলী + unavailable_content: অনুপলব্ধ সামগ্রী + unavailable_content_description: + domain: সার্ভার + reason: কারণ + rejecting_media: 'এই সার্ভারগুলি থেকে মিডিয়া ফাইলগুলি প্রক্রিয়া করা বা সংরক্ষণ করা হবে না এবং কোনও থাম্বনেইল প্রদর্শিত হবে না, মূল ফাইলটিতে ম্যানুয়াল ক্লিক-মাধ্যমে প্রয়োজন:' + silenced: 'এই সার্ভারগুলির পোস্টগুলি জনসাধারণের টাইমলাইন এবং কথোপকথনে লুকানো থাকবে এবং আপনি যদি তাদের অনুসরণ না করেন তবে তাদের ব্যবহারকারীর ইন্টারঅ্যাকশন থেকে কোনও বিজ্ঞপ্তি উত্পন্ন হবে না:' + suspended: 'এই সার্ভারগুলি থেকে কোনও ডেটা প্রক্রিয়াজাতকরণ, সংরক্ষণ বা আদান-প্রদান করা হবে না, এই সার্ভারগুলির ব্যবহারকারীদের সাথে কোনও মিথস্ক্রিয়া বা যোগাযোগকে অসম্ভব করে তুলেছে:' + unavailable_content_html: ম্যাস্টোডন সাধারণত আপনাকে ফেদিভার্স এ অন্য কোনও সার্ভারের ব্যবহারকারীদের থেকে সামগ্রী দেখতে এবং তাদের সাথে আলাপচারিতা করার অনুমতি দেয়। এই ব্যতিক্রম যে এই বিশেষ সার্ভারে তৈরি করা হয়েছে। user_count_after: one: ব্যবহারকারী other: জনের @@ -42,6 +50,8 @@ bn: what_is_mastodon: মাস্টাডনটি কি ? accounts: choices_html: "%{name} বাছাই:" + endorsements_hint: আপনি ওয়েব ইন্টারফেস থেকে অনুসরণ করা লোকেদের প্রচার করতে পারেন এবং তারা এখানে প্রদর্শিত হবে। + featured_tags_hint: আপনি এখানে নির্দিষ্ট হ্যাশট্যাগগুলি বৈশিষ্ট্যযুক্ত করতে পারেন যেটা এখানে প্রদর্শিত হবে। follow: যুক্ত followers: one: যুক্ত আছে @@ -53,6 +63,7 @@ bn: media: ছবি বা ভিডিও moved_html: "%{name} চলে গেছে %{new_profile_link} তে:" network_hidden: এই তথ্যটি নেই + never_active: কখনও না nothing_here: এখানে কিছুই নেই! people_followed_by: "%{name} যাদেরকে অনুসরণ করে" people_who_follow: যারা %{name} কে অনুসরণ করে @@ -134,18 +145,70 @@ bn: moderation_notes: প্রশাসনের কিছু লেখা most_recent_activity: সর্বশেষ কার্যক্রম most_recent_ip: সর্বশেষ আইপি(IP) + no_account_selected: কোনও অ্যাকাউন্টই নির্বাচন করা হয়নি বলে কোনও অ্যাকাউন্ট পরিবর্তন করা হয়নি no_limits_imposed: কোন সীমা আরোপ করা নেই not_subscribed: সাবস্ক্রাইব নেই outbox_url: চিঠি পাঠানোর বাক্স লিংক pending: পয্র্যবেক্ষণের অপেক্ষায় আছে perform_full_suspension: বাতিল করা + profile_url: প্রোফাইল URL + promote: প্রচার + protocol: প্রোটোকল + public: সর্বজনীন + push_subscription_expires: PuSH সাবস্ক্রিপশনের মেয়াদ শেষ হয়ে গেছে + redownload: প্রোফাইল সতেজ করুন + reject: প্রত্যাখ্যান করুন + reject_all: সব প্রত্যাখ্যান করুন + remove_avatar: অবতার অপসারণ করুন + remove_header: হেডার এর ছবি অপসারণ করুন + resend_confirmation: + already_confirmed: এই ব্যবহারকারী ইতিমধ্যে নিশ্চিত করা আছে + send: নিশ্চিতকরণ ইমেল পুনরায় পাঠান + success: নিশ্চিতকরণের ইমেল সফলভাবে পাঠানো হয়েছে! + reset: পুনরায় সেট করুন + reset_password: পাসওয়ার্ড পুনঃস্থাপন করুন + resubscribe: পুনরায় সদস্যতা নিন + role: অনুমতিসমূহ + roles: + admin: পরিচালক + moderator: নিয়ামক + staff: কর্মী + user: ব্যবহারকারী + salmon_url: সালমন URL + search: অনুসন্ধান + search_same_ip: একই IP সহ অন্যান্য ব্যবহারকারীরা + shared_inbox_url: ভাগ করা ইনবক্স URL + show: + created_reports: তৈরি করা রিপোর্টগুলি + targeted_reports: অন্যদের দ্বারা প্রতিবেদনগুলি + silence: নীরব + silenced: নীরব করা হয়েছে + statuses: স্থিতিগুলি + subscribe: সদস্যতা + suspended: স্থগিত করা হয়েছে + time_in_queue: কাতারে অপেক্ষা করছে %{time} + title: একাউন্ট সমূহ + unconfirmed_email: অনিশ্চিত ইমেল + undo_silenced: নীরবতা পূর্বাবস্থা + undo_suspension: স্থগিতকরণ পূর্বাবস্থায় ফেরাও + unsubscribe: সদস্যতা ত্যাগ করুন + username: ব্যবহারকারীর নাম + warn: সতর্ক + web: ওয়েব + whitelisted: সাদাতালিকাযুক্ত + action_logs: + actions: + assigned_to_self_report: "%{name} তাদের জন্য %{target} রিপোর্ট অর্পণ করেছিলেন" errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': '429': Throttled '500': + '503': The page could not be served due to a temporary server failure. invites: expires_in: '1800': 30 minutes diff --git a/config/locales/br.yml b/config/locales/br.yml new file mode 100644 index 000000000..3710084e7 --- /dev/null +++ b/config/locales/br.yml @@ -0,0 +1,20 @@ +--- +br: + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Throttled + '500': + '503': The page could not be served due to a temporary server failure. + invites: + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day diff --git a/config/locales/ca.yml b/config/locales/ca.yml index a5d96cc1c..b8436efd2 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -11,19 +11,19 @@ ca: apps: Apps mòbils apps_platforms: Utilitza Mastodon des de iOS, Android i altres plataformes browse_directory: Navega per el directori de perfils i filtra segons interessos + browse_local_posts: Navega un flux en directe de publicacions d’aquest servidor browse_public_posts: Navega per una transmissió en directe de publicacions públiques a Mastodon contact: Contacte contact_missing: No configurat contact_unavailable: N/D discover_users: Descobreix usuaris documentation: Documentació - extended_description_html: | - <h3>Un bon lloc per les regles</h3> - <p>Encara no s'ha configurat la descripció ampliada.</p> federation_hint_html: Amb un compte de %{instance} podràs seguir persones de qualsevol servidor Mastodon i altres. - generic_description: "%{domain} és un servidor a la xarxa" get_apps: Prova una aplicació mòbil hosted_on: Mastodon allotjat a %{domain} + instance_actor_flash: | + Aquest compte és un actor virtual utilitzat per a representar al propi servidor i no cap usuari individual. + S'utilitza per a propòsits de federació i no ha de ser bloquejat si no voleu bloquejar tota la instància, en aquest cas hauríeu d'utilitzar un bloqueig de domini. learn_more: Més informació privacy_policy: Política de privacitat see_whats_happening: Mira què està passant @@ -35,6 +35,14 @@ ca: status_count_before: Que han escrit tagline: Segueix els teus amics i descobreix-ne de nous terms: Termes del servei + unavailable_content: Contingut no disponible + unavailable_content_description: + domain: Servidor + reason: Raó + rejecting_media: 'Els arxius multimèdia d''aquests servidors no seran processats o emmagatzemats i cap miniatura serà mostrada, requerint clic manual a través de l''arxiu original:' + silenced: 'Les publicacions d''aquests servidors seran amagades en les línies de temps públiques i converses, i cap notificació serà generada de les interaccions dels seus usuaris, llevat que estiguis seguint-los:' + suspended: 'Cap dada d''aquests servidors serà processada, emmagatzemada o intercanviada, fent impossible qualsevol interacció o comunicació amb els usuaris d''aquests servidors:' + unavailable_content_html: Mastodon generalment et permet per veure contingut i interaccionar amb usuaris de qualsevol altre servidor en el fedivers. Aquestes són les excepcions que s'han fet en aquest servidor particular. user_count_after: one: usuari other: usuaris @@ -42,6 +50,8 @@ ca: what_is_mastodon: Què és Mastodon? accounts: choices_html: 'Eleccions de %{name}:' + endorsements_hint: Pots recomanar persones que segueixes a l'interfície de web, que apareixeran aquí. + featured_tags_hint: Pots presentar etiquetes específiques que seràn mostrades aquí. follow: Segueix followers: one: Seguidor @@ -53,6 +63,7 @@ ca: media: Mèdia moved_html: "%{name} s'ha mogut a %{new_profile_link}:" network_hidden: Aquesta informació no està disponible + never_active: Mai nothing_here: No hi ha res aquí! people_followed_by: Usuaris seguits per %{name} people_who_follow: Usuaris que segueixen %{name} @@ -165,6 +176,7 @@ ca: user: Usuari salmon_url: URL Salmon search: Cerca + search_same_ip: Altres usuaris amb la mateixa IP shared_inbox_url: URL de la safata d'entrada compartida show: created_reports: Informes creats @@ -183,6 +195,7 @@ ca: username: Nom d'usuari warn: Avís web: Web + whitelisted: Llista blanca action_logs: actions: assigned_to_self_report: "%{name} han assignat l'informe %{target} a ells mateixos" @@ -190,10 +203,12 @@ ca: confirm_user: "%{name} ha confirmat l'adreça de correu electrònic de l'usuari %{target}" create_account_warning: "%{name} ha enviat un avís a %{target}" create_custom_emoji: "%{name} ha pujat un nou emoji %{target}" + create_domain_allow: "%{name} ha afegit a la llista blanca el domini %{target}" create_domain_block: "%{name} ha blocat el domini %{target}" create_email_domain_block: "%{name} ha afegit a la llista negra el domini del correu electrònic %{target}" demote_user: "%{name} ha degradat l'usuari %{target}" destroy_custom_emoji: "%{name} ha destruït l'emoji %{target}" + destroy_domain_allow: "%{name} ha eliminat el domini %{target} de la llista blanca" destroy_domain_block: "%{name} ha desblocat el domini %{target}" destroy_email_domain_block: "%{name} ha afegit a la llista negra el domini de correu electrònic %{target}" destroy_status: "%{name} eliminat l'estat per %{target}" @@ -218,19 +233,24 @@ ca: deleted_status: "(toot suprimit)" title: Registre d'auditoria custom_emojis: + assign_category: Assigna una categoria by_domain: Domini copied_msg: S'ha creat correctament la còpia local de l'emoji copy: Copia copy_failed_msg: No s'ha pogut fer una còpia local d'aquest emoji + create_new_category: Crea una categoria nova created_msg: Emoji creat amb èxit! delete: Suprimeix destroyed_msg: Emojo s'ha destruït amb èxit! disable: Inhabilita + disabled: Desactivat disabled_msg: S'ha inhabilitat l'emoji amb èxit emoji: Emoji enable: Habilita + enabled: Activat enabled_msg: S'ha habilitat amb èxit emoji image_hint: PNG de fins a 50 KB + list: Llista listed: Enumerat new: title: Afegeix emoji personalitzat nou @@ -238,11 +258,14 @@ ca: shortcode: Codi curt shortcode_hint: Com a mínim 2 caràcters, només caràcters alfanumèrics i guions baixos title: Emojis personalitzats + uncategorized: Sense categoria + unlist: No llistat unlisted: Sense classificar update_failed_msg: No s'ha pogut actualitzar aquest emoji updated_msg: Emoji s'ha actualitzat correctament! upload: Carrega dashboard: + authorized_fetch_mode: Mode d'obtenció autoritzat backlog: treballs en espera config: Configuració feature_deletions: Supressions del compte @@ -250,10 +273,13 @@ ca: feature_profile_directory: Directori de perfils feature_registrations: Registres feature_relay: Relay de la Federació + feature_spam_check: Anti-spam feature_timeline_preview: Vista previa de línia de temps features: Característiques hidden_service: Federació amb serveis ocults open_reports: informes oberts + pending_tags: etiquetes pendents de revisar + pending_users: usuaris pendents de revisar recent_users: Usuaris recents search: Cerca de text complet single_user_mode: Mode d'usuari únic @@ -265,11 +291,18 @@ ca: week_interactions: interaccions d'aquesta setmana week_users_active: usuaris actius aquesta setmana week_users_new: nous usuaris aquest setmana + whitelist_mode: Mode llista blanca + domain_allows: + add_new: Dominis autoritzats + created_msg: El domini ha estat correctament autoritzat + destroyed_msg: S'ha esborrat el domini de la llista blanca + undo: Treure de la llista blanca domain_blocks: add_new: Afegir nou bloqueig de domini created_msg: El bloqueig de domini ara s'està processant destroyed_msg: El bloqueig de domini s'ha desfet domain: Domini + edit: Editar el bloqueig del domini existing_domain_block_html: Ja has imposat uns limits més estrictes a %{name}, l'hauries de <a href="%{unblock_url}">desbloquejar-lo</a> primer. new: create: Crea un bloqueig @@ -280,6 +313,10 @@ ca: silence: Silenci suspend: Suspensió title: Bloqueig de domini nou + private_comment: Comentari privat + private_comment_hint: Comentari sobre aquesta limitació del domini per a ús intern dels moderadors. + public_comment: Comentari públic + public_comment_hint: Comentari pel públic general sobre aquesta limitació del domini, si la publicació de la llista de limitacions de domini està habilitada. reject_media: Rebutja els fitxers multimèdia reject_media_hint: Elimina els fitxers multimèdia emmagatzemats localment i impedeix baixar-ne cap en el futur. Irrellevant en les suspensions reject_reports: Rebutja informes @@ -299,6 +336,7 @@ ca: title: Desfés el bloqueig de domini de %{domain} undo: Desfés undo: Desfés el bloqueig del domini + view: Veure el bloqueig del domini email_domain_blocks: add_new: Afegir nou created_msg: S'ha creat el bloc de domini de correu electrònic @@ -322,6 +360,8 @@ ca: all: Totes limited: Limitades title: Moderació + private_comment: Comentari privat + public_comment: Comentari públic title: Federació total_blocked_by_us: Bloquejats per nosaltres total_followed_by_them: Seguits per ells @@ -351,6 +391,7 @@ ca: pending: S'està esperant l'aprovació del relay save_and_enable: Desa i activa setup: Configura una connexió de relay + signatures_not_enabled: Els relays no treballaran correctament mentre estiguin habilitats el mode segur o llista blanca status: Estat title: Relays report_notes: @@ -399,6 +440,16 @@ ca: custom_css: desc_html: Modifica l'aspecte amb CSS carregat a cada pàgina title: CSS personalitzat + default_noindex: + desc_html: Afecta a tots els usuaris que no han canviat aquest ajustament ells mateixos + title: Configurar per defecte als usuaris fora de l'indexació dels motor de cerca + domain_blocks: + all: Per a tothom + disabled: Per a ningú + title: Mostra els bloquejos de domini + users: Per als usuaris locals en línia + domain_blocks_rationale: + title: Mostra el raonament hero: desc_html: Es mostra en pàgina frontal. Recomanat al menys 600x100px. Si no es configura es mostrarà el del servidor title: Imatge d’heroi @@ -449,6 +500,9 @@ ca: desc_html: Pots escriure la teva pròpia política de privadesa, els termes del servei o d'altres normes legals. Pots utilitzar etiquetes HTML title: Termes del servei personalitzats site_title: Nom del servidor + spam_check_enabled: + desc_html: Mastodon pot auto-silenciar i informar automàticament de comptes basat en mesures com ara la detecció de comptes que envien missatges repetits no sol·licitats. Pot haver-hi falsos positius. + title: Anti-spam thumbnail: desc_html: S'utilitza per obtenir visualitzacions prèvies a través d'OpenGraph i API. Es recomana 1200x630px title: Miniatura del servidor @@ -456,12 +510,19 @@ ca: desc_html: Mostra la línia de temps pública a la pàgina inicial title: Vista prèvia de la línia de temps title: Configuració del lloc + trendable_by_default: + desc_html: Afecta a les etiquetes que no s'havien rebutjat prèviament + title: Permet que les etiquetes passin a la tendència sense revisió prèvia + trends: + desc_html: Mostra públicament les etiquetes revisades anteriorment que actualment estan en tendència + title: Etiquetes tendència statuses: back_to_account: Torna a la pàgina del compte batch: delete: Suprimeix nsfw_off: Marcar com a no sensible nsfw_on: Marcar com a sensible + deleted: Esborrats failed_to_execute: No s'ha pogut executar media: title: Contingut multimèdia @@ -469,21 +530,24 @@ ca: no_status_selected: No s’han canviat els estatus perquè cap no ha estat seleccionat title: Estats del compte with_media: Amb contingut multimèdia - subscriptions: - callback_url: URL de retorn - confirmed: Confirmat - expires_in: Expira en - last_delivery: Últim lliurament - title: WebSub - topic: Tema tags: - accounts: Comptes - hidden: Amagat - hide: Ocult del directori + accounts_today: Usos únics actuals + accounts_week: Usos únics d'aquesta setmana + breakdown: Desglossament de l’ús actual per origen + context: Context + directory: En el directori + in_directory: "%{count} en el directori" + last_active: Darrer actiu + most_popular: Més populars + most_recent: Més recent name: Etiqueta + review: Revisar l'estat + reviewed: Revisades title: Etiquetes - unhide: Mostra en el directori - visible: Visible + trending_right_now: Actualment en tendència + unique_uses_today: "%{count} publicacions d'avui" + unreviewed: Sense revisar + updated_msg: Ajustaments d'etiquetes actualitzats amb èxit title: Administració warning_presets: add_new: Afegir nou @@ -499,12 +563,23 @@ ca: body: "%{reporter} ha informat de %{target}" body_remote: Algú des de el domini %{domain} ha informat sobre %{target} subject: Informe nou per a %{instance} (#%{id}) + new_trending_tag: + body: 'La etiqueta #%{name} està actualment en tendència però no s''ha revisat prèviament. No es mostrarà públicament tret que ho permetis o guardis el formulari tal com està per a no tornar a escoltar res al respecte.' + subject: Nova etiqueta pendent de revisió a %{instance} (#%{name}) + aliases: + add_new: Crear àlies + created_msg: Nou àlies creat amb èxit. Ara pots iniciar el moviment des de'l compte vell. + deleted_msg: Àlies eliminat amb èxit. Moure't des d'aquell compte a aquests ja no serà possible. + hint_html: Si et vols moure des d'un altre compte a aquest, aquí pots crear un àlies, el qual és requerit abans que puguis procedir a moure els seguidors del compte vell a aquest. Aquesta acció és per si mateixa <strong>inofensiva i reversible</strong>. <strong>La migració del compte és iniciada des de'l compte vell</strong>. + remove: Desvincular l'àlies appearance: advanced_web_interface: Interfície web avançada advanced_web_interface_hint: 'Si vols fer ús de tota l''amplada de la teva pantalla, l''interfície web avançada et permet configurar diverses columnes per a veure molta més informació al mateix temps: Inici, notificacions, línia de temps federada i qualsevol número de llistes i etiquetes.' animations_and_accessibility: Animacions i accessibilitat confirmation_dialogs: Diàlegs de confirmació + discovery: Descobriment sensitive_content: Contingut sensible + toot_layout: Disseny del tut application_mailer: notification_preferences: Canvia les preferències de correu salutation: "%{name}," @@ -524,9 +599,13 @@ ca: apply_for_account: Demana una invitació change_password: Contrasenya checkbox_agreement_html: Estic d'acord amb les <a href="%{rules_path}" target="_blank">normes del servidor</a> i <a href="%{terms_path}" target="_blank"> els termes del servei</a> - confirm_email: Confirmar correu electrònic + checkbox_agreement_without_rules_html: Acepto els <a href="%{terms_path}" target="_blank">termes del servei</a> delete_account: Suprimeix el compte delete_account_html: Si vols suprimir el compte pots <a href="%{path}">fer-ho aquí</a>. Se't demanarà confirmació. + description: + prefix_invited_by_user: "@%{name} t'ha invitat a unir-te a aquest servidor de Mastodon!" + prefix_sign_up: Registra't avui a Mastodon! + suffix: Amb un compte seràs capaç de seguir persones, publicar i intercanviar missatges amb usuaris de qualsevol servidor de Mastodon i més! didnt_get_confirmation: No has rebut el correu de confirmació? forgot_password: Has oblidat la contrasenya? invalid_reset_password_token: L'enllaç de restabliment de la contrasenya no és vàlid o ha caducat. Torna-ho a provar. @@ -544,6 +623,16 @@ ca: reset_password: Restableix la contrasenya security: Seguretat set_new_password: Estableix una contrasenya nova + setup: + email_below_hint_html: Si l’adreça de correu electrònic següent és incorrecta, podeu canviar-la aquí i rebre un nou correu electrònic de confirmació. + email_settings_hint_html: El correu electrònic de confirmació es va enviar a %{email}. Si aquesta adreça de correu electrònic no és correcta, la podeu canviar a la configuració del compte. + title: Configuració + status: + account_status: Estat del compte + confirming: Esperant que es completi la confirmació del correu electrònic. + functional: El teu compte és plenament operatiu. + pending: La vostra sol·licitud està pendent de revisió pel nostre personal. Això pot trigar una mica. Rebreu un correu electrònic quan sigui aprovada. + redirecting_to: El teu compte és inactiu perquè actualment està redirigint a %{acct}. trouble_logging_in: Problemes per iniciar la sessió? authorize_follow: already_following: Ja estàs seguint aquest compte @@ -556,6 +645,11 @@ ca: return: Mostra el perfil de l'usuari web: Vés a la web title: Segueix %{acct} + challenge: + confirm: Continua + hint_html: "<strong>Pista:</strong> No et preguntarem un altre cop la teva contrasenya en la pròxima hora." + invalid_password: Contrasenya no vàlida + prompt: Confirmi la contrasenya per a continuar datetime: distance_in_words: about_x_hours: "%{count} h" @@ -571,26 +665,33 @@ ca: x_months: "%{count} mesos" x_seconds: "%{count} s" deletes: - bad_password_msg: Bon intent hackers! La contrasenya no és correcta + challenge_not_passed: L'informació que has entrat no és correcte confirm_password: Introdueix la contrasenya actual per a verificar la identitat - description_html: Això eliminarà de forma <strong>irreversible i permanent</strong> el contingut del teu compte i el desactivarà. El teu nom d'usuari romandrà reservat per evitar que algú volgués fer-se passar per tu. + confirm_username: Escriu el teu nom d'usuari per a confirmar el procediment proceed: Suprimeix el compte success_msg: El compte s'ha eliminat correctament - warning_html: Només és garantida l'eliminació del contingut d'aquest servidor en particular. El contingut que s'ha compartit àmpliament deixa petjades. Els servidors fora de línia i els que ja no estan subscrits no actualitzaran les seves bases de dades. - warning_title: Disponibilitat de contingut disseminat + warning: + before: 'Abans de procedir si us plau llegeix amb cura aquestes notes:' + caches: El contingut que ha estat memoritzat en la memòria cau per altres servidors pot persistir + data_removal: Les teves publicacions i altres dades seran permanentment eliminades + email_change_html: Pots <a href="%{path}">canviar la teva adreça de correu electrònic</a> sense eliminar el teu compte + email_contact_html: Si encara no arriba pots enviar un correu electrònic a <a href="mailto:%{email}">%{email}</a> per a demanar ajuda + email_reconfirmation_html: Si no estàs rebent el correu electrònic de confirmació <a href="%{path}">pots demanar-lo un altre cop</a> + irreversible: No seràs capaç de restaurar o reactivar el teu compte + more_details_html: Per a més detalls, llegeix la <a href="%{terms_path}">política de privadesa</a>. + username_available: El teu nom d'usuari esdevindrà altre cop disponible + username_unavailable: El teu nom d'usuari quedarà inutilitzable directories: directory: Directori de perfils - enabled: Actualment estàs inclòs al directori. - enabled_but_waiting: Has optat per aparèixer al directori però encara no tens el nombre mínim de seguidors (%{min_followers}) per ser-hi. explanation: Descobreix usuaris segons els seus interessos explore_mastodon: Explora %{title} - how_to_enable: Actualment no tens activat ser al directori. Pots optar-hi a continuació. Utilitza etiquetes en el teu text bio per incloure't sota etiquetes especifiques! - people: - one: "%{count} persona" - other: "%{count} gent" + domain_validator: + invalid_domain: no es un nom de domini vàlid errors: + '400': La sol·licitud que vas emetre no era vàlida o no era correcta. '403': No tens permís per a veure aquesta pàgina. '404': La pàgina que estàs cercant no és aquí. + '406': Aquesta pàgina no está disponible en el format demanat. '410': La pàgina que estàs cercant ja no existeix. '422': content: La verificació de seguretat ha fallat. Tens les galetes blocades? @@ -599,6 +700,7 @@ ca: '500': content: Ho sentim, però alguna cosa ha fallat a la nostra banda. title: Aquesta pàgina no es correcta + '503': La pàgina no podria ser servida a causa d'un error temporal del servidor. noscript_html: Per a utilitzar Mastodon, activa el JavaScript. També pots provar una de les <a href="%{apps_path}"> aplicacions natives</a> de Mastodon per a la vostra plataforma. existing_username_validator: not_found: no s'ha pogut trobar cap usuari local amb aquest nom d'usuari @@ -622,6 +724,7 @@ ca: add_new: Afegir nova errors: limit: Ja has mostrat la quantitat màxima d'etiquetes + hint_html: "<strong>Què son les etiquetes destacades?</strong> Es mostren de manera destacada en el teu perfil públic i permeten a les persones navegar per les teves publicacions amb aquestes etiquetes. Són una gran eina per fer un seguiment de treballs creatius o de projectes a llarg termini." filters: contexts: home: Línia de temps Inici @@ -642,10 +745,12 @@ ca: developers: Desenvolupadors more: Més… resources: Recursos + trending_now: En tendència generic: all: Tot changes_saved_msg: Els canvis s'han desat correctament! copy: Copia + no_batch_actions_available: Cap accions de lot disponibles en aquesta pàgina order_by: Ordena per save_changes: Desa els canvis validation_errors: @@ -717,9 +822,34 @@ ca: too_many: No es poden adjuntar més de 4 fitxers migrations: acct: usuari@domini del nou compte - currently_redirecting: 'El teu perfil està configurat com a redirecció a:' - proceed: Desa - updated_msg: La configuració de la migració del compte s'ha actualitzat correctament! + cancel: Cancel·la redirecció + cancel_explanation: Cancel·lant la redirecció reactivará el teu compte actual però no recuperarà els seguidors que han estat moguts a aquell compte. + cancelled_msg: Redirecció cancel·lada amb èxit. + errors: + already_moved: és el mateix compte al que ja t'has mogut + missing_also_known_as: no fa referencia a aquest compte + move_to_self: no pot ser el compte actual + not_found: podria no ser trobat + on_cooldown: Estàs en temps de recuperació + followers_count: Seguidors en el moment del moviment + incoming_migrations: Movent des d'un compte diferent + incoming_migrations_html: Per a moure't des d'un altre compte a aquest, primer necessites <a href="%{path}">crear un àlies de compte</a>. + moved_msg: El teu compte ara està redirigint a %{acct} i els teus seguidors estan sent moguts. + not_redirecting: El teu compte no està redirigint actualment a cap altre. + on_cooldown: Recentment has emigrat el teu compte. Aquesta funció esdevindrà un altre cop disponible en %{count} dies. + past_migrations: Migracions passades + proceed_with_move: Moure seguidors + redirecting_to: El teu compte està redirigint a %{acct}. + set_redirect: Ajusta la redirecció + warning: + backreference_required: El compte nou primer ha de ser configurat per a referenciar aquest + before: 'Abans de procedir si us plau llegeix amb cura aquestes notes:' + cooldown: Després de moure't hi ha un període de recuperació durant el qual no seràs capaç de moure't un altre cop + disabled_account: El teu compte actual no serà plenament utilitzable després. Tanmateix, tindràs accés a exportació de dades així com reactivació. + followers: Aquesta acció mourà tots els seguidors des de l'actual al compte nou + only_redirect_html: Alternativament, pots <a href="%{path}">posar només una redirecció en el teu perfil</a>. + other_data: Cap altre dada serà moguda automàticament + redirect: El perfil del teu compte actual serà actualitzat amb un avís de redirecció i serà exclòs de les cerques moderation: title: Moderació notification_mailer: @@ -816,10 +946,6 @@ ca: reply: proceed: Procedir a respondre prompt: 'Vols respondre a aquest toot:' - remote_unfollow: - error: Error - title: Títol - unfollowed: Sense seguir scheduled_statuses: over_daily_limit: Has superat el límit de %{limit} toots programats per a aquell dia over_total_limit: Has superat el limit de %{limit} toots programats @@ -868,6 +994,7 @@ ca: settings: account: Compte account_settings: Ajustos del compte + aliases: Àlies de compte appearance: Aparènça authorized_apps: Aplicacions autoritzades back: Torna a Mastodon @@ -885,6 +1012,8 @@ ca: profile: Perfil relationships: Seguits i seguidors two_factor_authentication: Autenticació de dos factors + spam_check: + spam_detected: Aquest és un informe automàtic. S'ha detectat spam. statuses: attached: description: 'Adjunt: %{attached}' @@ -908,6 +1037,9 @@ ca: private: No es pot fixar el toot no públic reblog: No es pot fixar un impuls poll: + total_people: + one: "%{count} persona" + other: "%{count} persones" total_votes: one: "%{count} vot" other: "%{count} vots" @@ -926,6 +1058,8 @@ ca: pinned: Toot fixat reblogged: ha impulsat sensitive_content: Contingut sensible + tags: + does_not_match_previous_name: no coincideix amb el nom anterior terms: body_html: | <h2>Política de Privacitat</h2> @@ -1043,7 +1177,9 @@ ca: disable: Mentre el teu compte estigui congelat les dades romandran intactes però no pots dur a terme cap acció fins que no estigui desbloquejat. silence: Mentre el teu compte estigui limitat només les persones que ja et segueixen veuen les teves dades en aquest servidor i pots ser exclòs de diverses llistes públiques. No obstant això, d'altres encara poden seguir-te manualment. suspend: El teu compte s'ha suspès i tots els teus toots i fitxers multimèdia penjats s'han eliminat irreversiblement d'aquest servidor i dels servidors on tenies seguidors. + get_in_touch: Pots respondre a aquest correu electrònic per a contactar amb el personal de %{instance}. review_server_policies: Revisa les polítiques del servidor + statuses: 'Concretament, per:' subject: disable: S'ha congelat el teu compte %{acct} none: Avís per a %{acct} diff --git a/config/locales/co.yml b/config/locales/co.yml index b3d14fdb5..f14f4e9ea 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -11,19 +11,19 @@ co: apps: Applicazione per u telefuninu apps_platforms: Utilizà Mastodon dapoi à iOS, Android è altre piattaforme browse_directory: Navigà un'annuariu di i prufili è filtra per interessi - browse_public_posts: Navigà un flussu di i statuti publichi nant'à Mastodon + browse_local_posts: Navigà un flussu di statuti pubblichi da stu servore + browse_public_posts: Navigà un flussu di i statuti pubblichi nant'à Mastodon contact: Cuntattu contact_missing: Mancante contact_unavailable: Micca dispunibule discover_users: Scopre utilizatori documentation: Ducumentazione - extended_description_html: | - <h3>Una bona piazza per e regule</h3> - <p>A descrizzione stesa ùn hè micca stata riempiuta.</p> federation_hint_html: Cù un contu nant'à %{instance} puderete siguità ghjente da tutti i servori Mastodon è ancu più d'altri. - generic_description: "%{domain} hè un servore di a rete" get_apps: Pruvà un'applicazione di telefuninu hosted_on: Mastodon allughjatu nant’à %{domain} + instance_actor_flash: | + Stu contu ghjè un'attore virtuale chì ghjove à riprisentà u servore sanu è micca un veru utilizatore. + Hè utilizatu da a federazione è ùn deve micca esse bluccatu eccettu s'e voi vulete bluccà tuttu u servore, in quellu casu duvereste utilizà un blucchime di duminiu. learn_more: Amparà di più privacy_policy: Pulitica di vita privata see_whats_happening: Vede cio chì si passa @@ -35,6 +35,14 @@ co: status_count_before: chì anu pubblicatu tagline: Siguità amichi è scopre ancu di più altri terms: Cundizione di u serviziu + unavailable_content: Cuntinutu micca dispunibule + unavailable_content_description: + domain: Servore + reason: 'Ragione:' + rejecting_media: I fugliali media da stu servore ùn saranu micca arregistrati è e vignette ùn saranu micca affissate, duverete cliccà manualmente per accede à l'altru servore è vedeli. + silenced: I statuti da stu servore ùn saranu mai visti tranne nant'a vostra pagina d'accolta s'e voi siguitate l'autore. + suspended: Ùn puderete micca siguità qualsiasi nant'à stu servore, i dati versu o da quallà ùn saranu mai accessi, scambiati o arregistrati. + unavailable_content_html: Mastodon vi parmette in generale di vede u cuntinutu è interagisce cù l'utilizatori di tutti l'altri servori di u fediversu. Quessi sò l'eccezzione fatte nant'à stu servore in particulare. user_count_after: one: utilizatore other: utilizatori @@ -42,6 +50,8 @@ co: what_is_mastodon: Quale hè Mastodon? accounts: choices_html: "%{name} ricumanda:" + endorsements_hint: Pudete appughjà i conti chì siguitate dapoi l'interfaccia web, è saranu mustrati quì. + featured_tags_hint: Pudete mette in mostra qualchì hashtag chì saranu affissati quì. follow: Siguità followers: one: Abbunatu·a @@ -53,6 +63,7 @@ co: media: Media moved_html: "%{name} hà cambiatu di contu, avà hè nant’à %{new_profile_link}:" network_hidden: St'infurmazione ùn hè micca dispunibule + never_active: Mai nothing_here: Ùn c’hè nunda quì! people_followed_by: Seguitati da %{name} people_who_follow: Seguitanu %{name} @@ -165,6 +176,7 @@ co: user: Utilizatore salmon_url: URL di Salmon search: Cercà + search_same_ip: Altri utilizatori cù listessa IP shared_inbox_url: URL di l’inbox spartuta show: created_reports: Signalamenti fatti @@ -183,6 +195,7 @@ co: username: Cugnome warn: Averte web: Web + whitelisted: In a lista bianca action_logs: actions: assigned_to_self_report: "%{name} s’hè assignatu u signalamentu %{target}" @@ -190,10 +203,12 @@ co: confirm_user: "%{name} hà cunfirmatu l’indirizzu e-mail di %{target}" create_account_warning: "%{name} hà mandatu un'avertimentu à %{target}" create_custom_emoji: "%{name} hà caricatu una nov’emoji %{target}" + create_domain_allow: "%{name} hà messu u duminiu %{target} nant’a lista bianca" create_domain_block: "%{name} hà bluccatu u duminiu %{target}" create_email_domain_block: "%{name} hà messu u duminiu e-mail %{target} nant’a lista nera" demote_user: "%{name} hà ritrugradatu l’utilizatore %{target}" destroy_custom_emoji: "%{name} hà sguassatu l'emoji %{target}" + destroy_domain_allow: "%{name} hà sguassatu u duminiu %{target} da a lista bianca" destroy_domain_block: "%{name} hà sbluccatu u duminiu %{target}" destroy_email_domain_block: "%{name} hà messu u duminiu e-mail %{target} nant’a lista bianca" destroy_status: "%{name} hà toltu u statutu di %{target}" @@ -218,31 +233,39 @@ co: deleted_status: "(statutu sguassatu)" title: Ghjurnale d’audit custom_emojis: + assign_category: Aghjunghje categuria by_domain: Duminiu copied_msg: Copia lucale di l’emoji creata copy: Cupià copy_failed_msg: Ùn s’hè micca pussutu creà una copia di l’emoji + create_new_category: Creà nova categuria created_msg: L’emoji hè stata creata! delete: Toglie destroyed_msg: L’emoji hè stata tolta! disable: Disattivà + disabled: Disattivatu disabled_msg: L’emoji hè stata disattivata emoji: Emoji enable: Attivà + enabled: Attivate enabled_msg: L’emoji hè stata attivata image_hint: PNG di 50Ko o menu + list: Listà listed: Listata new: - title: Aghjustà una nov’emoji + title: Aghjunghje una nov’emoji overwrite: Soprascrive shortcode: Accorta shortcode_hint: 2 caratteri o più, solu lettere, numeri è liniette basse title: Emoji parsunalizate + uncategorized: Micca categurizatu + unlist: Slistà unlisted: Micca listata update_failed_msg: Ùn s’hè micca pussutu mette à ghjornu l’emoji updated_msg: L’emoji hè stata messa à ghjornu! upload: Caricà dashboard: + authorized_fetch_mode: Modu ricuperazione auturizata backlog: travagli in attesa config: Cunfigurazione feature_deletions: Sguassamenti di conti @@ -250,10 +273,13 @@ co: feature_profile_directory: Annuariu di i prufili feature_registrations: Arregistramenti feature_relay: Ripetitore di federazione + feature_spam_check: Anti-spam feature_timeline_preview: Vista di a linea pubblica features: Funziunalità hidden_service: Federazione cù servizii piattati open_reports: signalamenti aperti + pending_tags: hashtag in attesa di verificazione + pending_users: utilizatori in attesa di rivista recent_users: Utilizatori ricenti search: Ricerca di testu sanu single_user_mode: Modu utilizatore unicu @@ -265,11 +291,18 @@ co: week_interactions: interazzione sta settimana week_users_active: attivi sta settimana week_users_new: utilizatori sta settimana + whitelist_mode: Modu lista bianca + domain_allows: + add_new: Aghjunghje à a lista bianca + created_msg: U duminiu hè statu aghjuntu à a lista bianca + destroyed_msg: U duminiu hè statu sguassatu da a lista bianca + undo: Toglie di a lista bianca domain_blocks: - add_new: Aghjustà novu blucchime di duminiu + add_new: Aghjunghje novu blucchime di duminiu created_msg: U blucchime di u duminiu hè attivu destroyed_msg: U blucchime di u duminiu ùn hè più attivu domain: Duminiu + edit: Mudificà u blucchime di duminiu existing_domain_block_html: Avete digià impostu limite più strette nant'à %{name}, duvete <a href="%{unblock_url}">sbluccallu</a> primu. new: create: Creà un blucchime @@ -280,6 +313,10 @@ co: silence: Silenzà suspend: Suspende title: Novu blucchime di duminiu + private_comment: Cummentariu privatu + private_comment_hint: Cummentariu nant'à a limitazione di stu duminiu per l'usu internu di i muderatori. + public_comment: Cummentariu pubblicu + public_comment_hint: Cummentariu nant'à a limitazione di stu duminiu per u pubblicu generale, s'ella hè attivata a rivelazione di a lista di limitazione di duminiu. reject_media: Righjittà i fugliali media reject_media_hint: Sguassa tutti i media caricati è ricusa caricamenti futuri. Inutile per una suspensione reject_reports: Righjittà i rapporti @@ -299,8 +336,9 @@ co: title: Ùn bluccà più u duminiu %{domain} undo: Annullà undo: Annullà u blucchime di duminiu + view: Vede blucchime di duminiu email_domain_blocks: - add_new: Aghjustà + add_new: Aghjunghje created_msg: U blucchime di u duminiu d’e-mail hè attivu delete: Toglie destroyed_msg: U blucchime di u duminiu d’e-mail ùn hè più attivu @@ -322,6 +360,8 @@ co: all: Tuttu limited: Limitatu title: Muderazione + private_comment: Cummentariu privatu + public_comment: Cummentariu pubblicu title: Federazione total_blocked_by_us: Bluccati da noi total_followed_by_them: Siguitati da elli @@ -339,7 +379,7 @@ co: pending_accounts: title: Conti in attesa (%{count}) relays: - add_new: Aghjustà un ripetitore + add_new: Aghjunghje un ripetitore delete: Sguassà description_html: Un <strong>ripetitore di federazione</strong> ghjè un servore intermediariu chì manda statuti pubblichi trà l'istanze abbunate. <strong>Pò aiutà l'istanze chjuche è mezane à scuprì u cuntinutu di u fediverse</strong> senza chì l'utilizatori appianu bisognu di seguità tutti i conti di l'altri servori. disable: Disattivà @@ -351,6 +391,7 @@ co: pending: In attesa di l'apprubazione di u ripetitore save_and_enable: Salvà è attivà setup: Creà una cunnessione cù un ripetitore + signatures_not_enabled: I ripetitori ùn marchjeranu micca currettamente mentre chì u modu sicurizatu o à lista bianca hè attivatu status: Statutu title: Ripetitori report_notes: @@ -399,6 +440,16 @@ co: custom_css: desc_html: Mudificà l'apparenza cù CSS caricatu nant'à ogni pagina title: CSS persunalizatu + default_noindex: + desc_html: Tocca tutti quelli ch'ùn anu micca cambiatu stu parametru + title: Ritirà l'utilizatori di l'indicazione nant'à i mutori di ricerca + domain_blocks: + all: À tutti + disabled: À nimu + title: Mustrà blucchime di duminiu + users: À l'utilizatori lucali cunnettati + domain_blocks_rationale: + title: Vede ragiò hero: desc_html: Affissatu nant’a pagina d’accolta. Ricumandemu almenu 600x100px. S’ellu ùn hè micca definiti, a vignetta di u servore sarà usata title: Ritrattu di cuprendula @@ -449,6 +500,9 @@ co: desc_html: Quì pudete scrive e vostre regule di cunfidenzialità, cundizione d’usu o altre menzione legale. Pudete fà usu di marchi HTML title: Termini persunalizati site_title: Nome di u servore + spam_check_enabled: + desc_html: Mastodon pò autosilenzà è autosignalà conti, per esempiu ditettendu quelli chì mandanu missaghji micca sullicitati à ripetizione. Ci ponu esse falzi pusitivi. + title: Anti-spam thumbnail: desc_html: Utilizatu per viste cù OpenGraph è l’API. Ricumandemu 1200x630px title: Vignetta di u servore @@ -456,37 +510,47 @@ co: desc_html: Vede a linea pubblica nant’a pagina d’accolta title: Vista di e linee title: Parametri di u situ + trendable_by_default: + desc_html: Ùn affetta micca quelli chì sò digià stati ricusati + title: Auturizà l'hashtag à esse in tindenze senza verificazione + trends: + desc_html: Mustrà à u pubblicu i hashtag chì sò stati digià verificati è chì sò in e tendenze avà + title: Tendenze di hashtag statuses: back_to_account: Ritornu à a pagina di u contu batch: delete: Toglie nsfw_off: Indicà cum’è micca sensibile nsfw_on: Indicà cum’è sensibile + deleted: Sguassatu failed_to_execute: Esecuzione impussibule media: title: Media no_media: Nisun media no_status_selected: I statuti ùn sò micca stati mudificati perchè manc'unu era selezziunatu - title: Statutu di u contu + title: Statuti di u contu with_media: Cù media - subscriptions: - callback_url: URL di richjama - confirmed: Cunfirmatu - expires_in: Spira in - last_delivery: Ultima arricata - title: WebSub - topic: Sughjettu tags: - accounts: Conti - hidden: Piattatu - hide: Piattà di l'annuariu + accounts_today: Usi unichi oghji + accounts_week: Usi unichi sta settimana + breakdown: Ditagli di l'usu d'oghji per origine + context: Cuntestu + directory: In l'annuariu + in_directory: "%{count} in l'annuariu" + last_active: Ultima attività + most_popular: Più pupulari + most_recent: Più ricente name: Hashtag + review: Statutu di verificazione + reviewed: Verificatu title: Hashtag - unhide: Mustrà in l'annuariu - visible: Visibile + trending_right_now: Tendenze avà + unique_uses_today: "%{count} pustendu oghji" + unreviewed: Micca verificatu + updated_msg: Parametri di i hashtag messi à ghjornu title: Amministrazione warning_presets: - add_new: Aghjustà nova + add_new: Aghjunghje delete: Sguassà edit: Cambià edit_preset: Cambià a preselezzione d'avertimentu @@ -499,12 +563,23 @@ co: body: "%{reporter} hà palisatu %{target}" body_remote: Qualch’unu da %{domain} hà palisatu %{target} subject: Novu signalamentu nant’à %{instance} (#%{id}) + new_trending_tag: + body: 'U hashtag #%{name} hè in e tendenze oghji, mà ùn hè micca verificatu. Ùn sarà micca mustratu à u pubblicu eccettu s''ellu hè auturizatu, o pudete ancu salvà u furmulariu cusì per ùn mai più avè à ne sente parlà.' + subject: Novu hashtag in attesa di rivista nant'à %{instance} (#%{name}) + aliases: + add_new: Creà un pseudonimu + created_msg: Novu pseudonimu creatu. Pudete avà inizià u trasferimentu da u vechju contu. + deleted_msg: U pseudonimu hè statu sguassatu. Ùn si puderà più migrà da questu contu à quellu. + hint_html: Per traslucà da un altru contu à questu, quì pudete creà un pseudonimu o "alias", riquisitu per trasferì l'abbunati da u vechju contu à u novu. St'azzione sola <strong>ùn face nunda</strong> è pò esse <strong>annullata senza prublemi</strong>. <strong>A migrazione hè principiata dapoi u vechju contu</strong>. + remove: Sguassà u pseudonimu appearance: advanced_web_interface: Interfaccia web avanzata advanced_web_interface_hint: 'S''è voi vulete fà usu di a larghezza sana di u vostru screnu, l''interfaccia web avanzata vi permette di cunfigurà parechje culonne sfarente per vede tutta l''infurmazione chì vulete vede in listessu tempu: Accolta, nutificazione, linea pubblica, è tutti l''hashtag è liste chì vulete.' animations_and_accessibility: Animazione è accessibilità confirmation_dialogs: Pop-up di cunfirmazione + discovery: Scuperta sensitive_content: Cuntinutu sensibile + toot_layout: Urganizazione application_mailer: notification_preferences: Cambià e priferenze e-mail salutation: "%{name}," @@ -524,9 +599,13 @@ co: apply_for_account: Dumandà un'invitazione change_password: Chjave d’accessu checkbox_agreement_html: Sò d'accunsentu cù e <a href="%{rules_path}" target="_blank">regule di u servore</a> è i <a href="%{terms_path}" target="_blank">termini di u serviziu</a> - confirm_email: Cunfirmà l’e-mail + checkbox_agreement_without_rules_html: Accettu i <a href="%{terms_path}" target="_blank">termini di u serviziu</a> delete_account: Sguassà u contu delete_account_html: S’è voi vulete toglie u vostru contu <a href="%{path}">ghjè quì</a>. Duverete cunfirmà a vostra scelta. + description: + prefix_invited_by_user: "@%{name} v'invita à raghjunghje stu servore di Mastodon!" + prefix_sign_up: Arregistratevi nant'à Mastodon oghji! + suffix: Cù un contu, puderete siguità l'altri, pustà statuti è scambià missaghji cù l'utilizatori di tutti i servori Mastodon è ancu di più! didnt_get_confirmation: Ùn avete micca ricevutu l’istruzione di cunfirmazione? forgot_password: Chjave scurdata? invalid_reset_password_token: U ligame di riinizializazione di a chjave d’accessu hè spiratu o ùn hè micca validu. Pudete dumandà un'altru ligame. @@ -544,6 +623,16 @@ co: reset_password: Cambià a chjave d’accessu security: Sicurità set_new_password: Creà una nova chjave d’accessu + setup: + email_below_hint_html: S'è l'indirizzu e-mail quì sottu ùn hè micca currettu, pudete cambiallu quì è riceve un novu e-mail di cunfirmazione. + email_settings_hint_html: L'e-mail di cunfirmazione hè statu mandatu à l'indirizzu %{email}. S'ellu ùn hè micca currettu, pudete cambiallu in i parametri di u contu. + title: Stallazione + status: + account_status: Statutu di u contu + confirming: In attesa di a cumplezzione di a cunfirmazione di l'e-mail. + functional: U vostru contu hè uperaziunale. + pending: A vostra dumanda hè in attesa di rivista da a squadra di muderazione. Quessa pò piglià un certu tempu. Avete da riceve un'e-mail s'ella hè appruvata. + redirecting_to: U vostru contu hè inattivu perchè riindirizza versu %{acct}. trouble_logging_in: Difficultà per cunnettavi? authorize_follow: already_following: Site digià abbunatu·a à stu contu @@ -556,6 +645,11 @@ co: return: Vede u prufile di l’utilizatore web: Andà à l’interfaccia web title: Siguità %{acct} + challenge: + confirm: Cuntinuvà + hint_html: "<strong>Astuzia:</strong> Ùn avemu micca da dumandavvi stu codice per l'ore chì vene." + invalid_password: Chjave d'accessu micca curretta + prompt: Cunfirmà a chjave d'accessu per cuntinuvà datetime: distance_in_words: about_x_hours: "%{count}o" @@ -571,26 +665,33 @@ co: x_months: "%{count}Me" x_seconds: "%{count}s" deletes: - bad_password_msg: È nò! Sta chjave ùn hè curretta + challenge_not_passed: L'infurmazione entrata ùn era micca curretta confirm_password: Entrate a vostra chjave d’accessu attuale per verificà a vostra identità - description_html: U contu sarà deattivatu è u cuntenutu sarà sguassatu di manera <strong>permanente è irreversibile</strong>. Ùn sarà micca pussibule piglià stu cugnome torna per evità l’impusture. + confirm_username: Entrà u vostru cugnome per cunfirmà a prucedura proceed: Sguassà u contu success_msg: U vostru contu hè statu sguassatu - warning_html: Pudete esse sicuru·a solu chì u cuntenutu sarà sguassatu di stu servore. S’ellu hè statu spartutu in altrò, sarà forse sempre quallà. I servori scunettati è quelli ch'ùn sò più abbunati à e vostre pubblicazione ùn anu micca da mette à ghjornu e so database. - warning_title: Dispunibilità di i cuntenuti sparsi + warning: + before: 'Nanz''à cuntinuà, leghjete ste note attentamente:' + caches: U cuntinutu indè u cache di l'altri servori sarà forse cunservatu + data_removal: I vostri posti è dati saranu sguassati di manera permanente + email_change_html: Pudete <a href="%{path}">cambià u vostr'indirizzu e-mail</a> senza toglie u vostru contu + email_contact_html: S'ellu ùn hè sempre micca rimettu, pudete dumandà aiutu à <a href="mailto:%{email}">%{email}</a> + email_reconfirmation_html: S'e voi ùn ricevete micca l'e-mail di cunfirmazione, pudete <a href="%{path}">richiestà un'altru</a> + irreversible: Ùn puderete micca ricuperà o riattivà u vostru contu + more_details_html: Per più di ditagli, videte a <a href="%{terms_path}">pulitica di vita privata</a>. + username_available: U vostru cugnome riduvinterà dispunibule + username_unavailable: U vostru cugnome ùn sarà sempre micca dispunibule directories: directory: Annuariu di i prufili - enabled: Site inscrittu·a indè l'annuariu. - enabled_but_waiting: Avete sceltu d'esse inscrittu·a indè l'annuariu, mà ùn avete micca ancu u numeru minimale d'abbunati (%{min_followers}) per esse listatu·a. explanation: Scopre utilizatori à partesi di i so centri d'interessu explore_mastodon: Scopre à %{title} - how_to_enable: Ùn site micca ancu inscrittu·a indè l'annuariu. Pudete inscrive vi quì sottu. Utilizate qualchi hashtag indè a vostra biugrafia per esse listatu·a indè tag specifichi! - people: - one: "%{count} persona" - other: "%{count} persone" + domain_validator: + invalid_domain: ùn hè micca un nome di duminiu currettu errors: + '400': A richiesta mandata ùn era micca valida o curretta. '403': Ùn site micca auturizatu·a à vede sta pagina. '404': Sta pagina ùn esiste micca quì. + '406': A pagina ùn hè micca dispunivule in u furmatu riquisitu. '410': Sta pagina ùn esiste più quì. '422': content: C’hè statu un prublemu cù a verificazione di sicurità. Forse bluccate cookies? @@ -599,6 +700,7 @@ co: '500': content: Scusate, mà c’hè statu un prublemu cù u nostru servore. title: Sta pagina ùn hè curretta + '503': A pagina ùn hè micca stata servita per via di un prublemu timpuraneu di u servore. noscript_html: Mastodon nant’à u web hà bisognu di JavaScript per funziunà. Pudete ancu pruvà <a href="%{apps_path}">l’applicazione native</a> per a vostra piattaforma. existing_username_validator: not_found: ùn si pudeva micca truvà un'utilizatore lucale cù stu cugnome @@ -619,9 +721,10 @@ co: mutes: Piattate storage: I vostri media featured_tags: - add_new: Aghjustà novu + add_new: Aghjunghje errors: limit: Avete digià messu in mostra u numeru massimale di hashtag + hint_html: "<strong>Quale sò i hashtag in mostra?</strong> Sò messi in vista nant'à u vostru prufile pubblicu è permettenu à a ghjente di vede i vostri statuti ch'annu stu hashtag. Sò una bona manere di mustrà e vostre opere creative o i prughjetti à longu termine." filters: contexts: home: Accolta @@ -637,15 +740,17 @@ co: delete: Toglie title: Filtri new: - title: Aghjustà un novu filtru + title: Aghjunghje un novu filtru footer: developers: Sviluppatori more: Di più… resources: Risorze + trending_now: Tindenze d'avà generic: all: Tuttu changes_saved_msg: Cambiamenti salvati! copy: Cupià + no_batch_actions_available: Alcun'azzione di gruppu nant'à sta pagina order_by: Urdinà da save_changes: Salvà e mudificazione validation_errors: @@ -674,7 +779,7 @@ co: imports: modes: merge: Unisce - merge_long: Cunservà i dati esistenti è aghjustà i novi + merge_long: Cunservà i dati esistenti è aghjunghje i novi overwrite: Soprascrive overwrite_long: Rimpiazzà i dati esistenti cù i novi preface: Pudete impurtà certi dati, cumu e persone chì seguitate o bluccate nant’à u vostru contu, nant’à stu servore à partesi di fugliali creati nant’à un’altru. @@ -717,9 +822,34 @@ co: too_many: Ùn si pò micca aghjunghje più di 4 fugliali migrations: acct: cugnome@duminiu di u novu contu - currently_redirecting: 'U vostru prufile riindiriza tuttu versu à:' - proceed: Salvà - updated_msg: I paramettri di migrazione sò stati messi à ghjornu! + cancel: Annullà ridirezzione + cancel_explanation: L'annullazione di a ridirezzione hà da riattivà stu contu, mà ùn si puderà micca ricuperà l'abbunati chì sò digià stati trasferriti à l'altru contu. + cancelled_msg: Ridirezzione annullata. + errors: + already_moved: hè digià u contu induve avede traslucatu + missing_also_known_as: ùn fà micca riferenza à stu contu + move_to_self: ùn pò micca esse u contu attuale + not_found: ùn hè micca statu trovu + on_cooldown: Perioda di ricuperazione + followers_count: Abbunati à u mumentu di trasferimentu + incoming_migrations: Traslucà da un'altru contu + incoming_migrations_html: Per spustà da stu contu à un'altru, primu duvete <a href="%{path}">creà un pseudonimu di contu</a>. + moved_msg: Avà u vostru contu riindirizza versu %{acct} è i vostri abbunati sò in corsu di trasferimentu. + not_redirecting: U vostru contu ùn riindirizza micca ancu versu un'altru contu. + on_cooldown: Avede digià migratu u vostru contu. Sta funzionne sarà torna dispunibule in %{count} ghjorni. + past_migrations: Anziane migrazione + proceed_with_move: Trasferì l'abbunati + redirecting_to: U vostru contu riindirizza versu à %{acct}. + set_redirect: Creà ridirezzione + warning: + backreference_required: U novu contu deve prima esse cunfiguratu per fà rifirenza cù un pseudonimu à quessu contu + before: 'Nanz''à cuntinuà, leghjete ste note attentamente:' + cooldown: Dopu à a traslucazione, c'hè una perioda di ricuperazione in quella ùn puderete micca cambià torna di contu + disabled_account: U contu attuale ùn puderà più esse utilizatu dop'à st'azzione. Però, puderete accede à a spurtazione di dati o riattivà u contu. + followers: St'azzione hà da spiazzà tutti l'abbunati di u contu attuale nant'à u novu contu + only_redirect_html: Pudete ancu <a href="%{path}">mette solu una ridirezzione nant'à u vostru prufile</a>. + other_data: L'altri dati ùn saranu micca autumaticamente trasferiti + redirect: U prufile di u vostru contu attuale sarà messu à ghjornu cù una nutificazione di ridirezzione è sarà sclusu di e ricerche moderation: title: Muderazione notification_mailer: @@ -809,17 +939,13 @@ co: remote_interaction: favourite: proceed: Cuntinuà per favurisce - prompt: 'Vulete aghjustà stu statutu à i vostri favuriti:' + prompt: 'Vulete aghjunghje stu statutu à i vostri favuriti:' reblog: proceed: Cuntinuà per sparte prompt: 'Vulete sparte stu statutu:' reply: proceed: Cuntinuà per risponde prompt: 'Vulete risponde à stu statutu:' - remote_unfollow: - error: Errore - title: Titulu - unfollowed: Disabbunatu scheduled_statuses: over_daily_limit: Avete trapassatu a limita di %{limit} statuti planificati per stu ghjornu over_total_limit: Avete trapassatu a limita di %{limit} statuti planificati @@ -868,6 +994,7 @@ co: settings: account: Contu account_settings: Parametri di u contu + aliases: Pseudonimi di contu appearance: Apparenza authorized_apps: Applicazione auturizate back: Ritornu nant’à Mastodon @@ -885,6 +1012,8 @@ co: profile: Prufile relationships: Abbunamenti è abbunati two_factor_authentication: Identificazione à dui fattori + spam_check: + spam_detected: Quessu ghjè un rapportu automaticu. Un spam hè statu ditettatu. statuses: attached: description: 'Aghjuntu: %{attached}' @@ -908,6 +1037,9 @@ co: private: Ùn pudete micca puntarulà un statutu ch’ùn hè micca pubblicu reblog: Ùn pudete micca puntarulà una spartera poll: + total_people: + one: "%{count} persona" + other: "%{count} persone" total_votes: one: "%{count} votu" other: "%{count} voti" @@ -926,6 +1058,8 @@ co: pinned: Statutu puntarulatu reblogged: hà spartutu sensitive_content: Cuntenutu sensibile + tags: + does_not_match_previous_name: ùn currisponde micca à l'anzianu nome terms: body_html: | <h2>Politique de confidentialité</h2> @@ -1031,7 +1165,7 @@ co: recovery_codes: Codici di ricuperazione recovery_codes_regenerated: Codici di ricuperazione ricreati recovery_instructions_html: Pudete fà usu di i codici quì sottu per sempre avè accessu à u vostru contu s’ellu hè statu persu u vostru telefuninu. <strong>Guardateli in una piazza sicura</strong>. Per esempiu, stampati è cunservati cù altri ducumenti impurtanti. - setup: Installà + setup: Attivà wrong_code: U codice ùn hè micca currettu! Site sicuru che l’ora di u telefuninu è di u servore sò esatte? user_mailer: backup_ready: @@ -1043,7 +1177,9 @@ co: disable: Quandu u vostru contu hè ghjacciatu, i vostri dati stannu intatti, mà ùn pudete fà nunda fin'à ch'ellu sia sbluccatu. silence: Quandu u vostru contu hè limitatu, solu quelli chì sò digià abbunati à u vostru contu viderenu i vostri statuti nant'à quessu servore, è puderete esse esclusu·a di parechje liste pubbliche. Però, altri conti puderenu sempre seguitavi. suspend: U vostru contu hè statu suspesu, è tutti i vo statuti è fugliali media caricati sò stati sguassati di manera irreversibile di stu servore, è di i servori induve aviate abbunati. + get_in_touch: Pudete risponde à quest'e-mail per cuntattà a squadra di muderazione di %{instance}. review_server_policies: Leghje e pulitiche di u servore + statuses: 'Più pricisamente, per:' subject: disable: U vostru contu %{acct} hè statu ghjacciatu none: Avertimentu pè %{acct} diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 574754738..478169d70 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -2,7 +2,7 @@ cs: about: about_hashtag_html: Tohle jsou veřejné tooty označené hashtagem <strong>#%{hashtag}</strong>. Pokud máte účet kdekoliv ve fedivesmíru, můžete s nimi interagovat. - about_mastodon_html: Mastodon je sociální síť založená na otevřených webových protokolech a svobodném, otevřeném softwaru. Je decentralizovaná jako e-mail. + about_mastodon_html: 'Sociální síť budoucnosti: žádné reklamy, žádné korporátní sledování, etický design a decentralizace! S Mastodonem vlastníte svoje data!' about_this: O tomto serveru active_count_after: aktivních active_footnote: Měsíční aktivní uživatelé (MAU) @@ -11,32 +11,40 @@ cs: apps: Mobilní aplikace apps_platforms: Používejte Mastodon z iOS, Androidu a jiných platforem browse_directory: Prozkoumejte adresář profilů a filtrujte dle zájmů + browse_local_posts: Prozkoumejte živý proud veřejných příspěvků z tohoto serveru browse_public_posts: Prozkoumejte živý proud veřejných příspěvků na Mastodonu contact: Kontakt contact_missing: Nenastaveno contact_unavailable: Neuvedeno discover_users: Objevujte uživatele documentation: Dokumentace - extended_description_html: | - <h3>Dobré místo pro pravidla</h3> - <p>Rozšířený popis ještě nebyl nastaven.</p> federation_hint_html: S účtem na %{instance} můžete sledovat lidi na jakémkoliv serveru Mastodon a jiných službách. - generic_description: "%{domain} je jedním ze serverů v síti" get_apps: Vyzkoušejte mobilní aplikaci hosted_on: Mastodon na adrese %{domain} + instance_actor_flash: | + Tento účet je virtuální aktér, který představuje server samotný a ne jedotlivého uživatele. + Používá se pro účely federace a nesmí být blokován, pokud nechcete blokovat celý server. V tomto případě použijte doménovou blokaci. learn_more: Zjistit více privacy_policy: Zásady soukromí see_whats_happening: Podívejte se, co se děje server_stats: 'Statistika serveru:' source_code: Zdrojový kód status_count_after: - few: příspěvky - many: příspěvků - one: příspěvek - other: příspěvků + few: tooty + many: tootů + one: toot + other: tootů status_count_before: Kteří napsali tagline: Sledujte své přátele a objevujte nové terms: Podmínky používání + unavailable_content: Nedostupný obsah + unavailable_content_description: + domain: Server + reason: Důvod + rejecting_media: 'Mediální soubory z tohoto serveru nebudou zpracovány a nebudou zobrazeny žádné náhledy. Pro prohlédnutí médií bude třeba manuálně přejít na druhý server:' + silenced: 'Příspěvky z těchto serverů nebudou zobrazeny ve veřejných časových osách a konverzacích a nebudou generována oznámení o interakcích uživatelů z toho serveru, pokud je nesledujete:' + suspended: 'Žádná data z těchto serverů nebudou zpracována, ukládána ani vyměňována, čímž bude znemožněna jakákoliv interakce či komunikace s uživateli z těchto serverů:' + unavailable_content_html: Mastodon vám obvykle dovoluje prohlížet si obsah a komunikovat s uživateli z jakéhokoliv dalšího serveru ve fedivesmíru. Tohle jsou výjimky, které byly zavedeny na tomto konkrétním serveru. user_count_after: few: uživatelé many: uživatelů @@ -46,6 +54,8 @@ cs: what_is_mastodon: Co je Mastodon? accounts: choices_html: 'Volby uživatele %{name}:' + endorsements_hint: Z webového rozhraní můžete podpořit lidi, které sledujete. Ti se poté zobrazí zde. + featured_tags_hint: Můžete vybrat konkrétní hashtagy, které se zobrazí zde. follow: Sledovat followers: few: Sledující @@ -59,6 +69,7 @@ cs: media: Média moved_html: "%{name} se přesunul/a na %{new_profile_link}:" network_hidden: Tato informace není k dispozici + never_active: Nikdy nothing_here: Tady nic není! people_followed_by: Lidé, které sleduje %{name} people_who_follow: Lidé, kteří sledují uživatele %{name} @@ -141,7 +152,7 @@ cs: title: Moderování moderation_notes: Moderátorské poznámky most_recent_activity: Nejnovější aktivita - most_recent_ip: Nejnovější IP + most_recent_ip: Nejnovější IP adresa no_account_selected: Nebyl změněn žádný účet, neboť žádný nebyl zvolen no_limits_imposed: Nejsou nastavena žádná omezení not_subscribed: Neodebírá @@ -173,6 +184,7 @@ cs: user: Uživatel salmon_url: URL Salmon search: Hledat + search_same_ip: Další uživatelé se stejnou IP adresou shared_inbox_url: URL sdílené příchozí schránky show: created_reports: Vytvořená nahlášení @@ -191,6 +203,7 @@ cs: username: Uživatelské jméno warn: Varovat web: Web + whitelisted: Na bílé listině action_logs: actions: assigned_to_self_report: "%{name} přidělil/a hlášení %{target} sobě" @@ -198,10 +211,12 @@ cs: confirm_user: "%{name} potvrdil/a e-mailovou adresu uživatele %{target}" create_account_warning: "%{name} poslal/a varování uživateli %{target}" create_custom_emoji: "%{name} nahrál/a nové emoji %{target}" + create_domain_allow: "%{name} přidal/a doménu %{target} na bílou listinu" create_domain_block: "%{name} zablokoval/a doménu %{target}" create_email_domain_block: "%{name} přidal/a e-mailovou doménu %{target} na černou listinu" demote_user: "%{name} degradoval/a uživatele %{target}" destroy_custom_emoji: "%{name} zničil/a emoji %{target}" + destroy_domain_allow: "%{name} odebral/a doménu %{target} z bílé listiny" destroy_domain_block: "%{name} odblokoval/a doménu %{target}" destroy_email_domain_block: "%{name} odebral/a e-mailovou doménu %{target} z černé listiny" destroy_status: "%{name} odstranil/a toot uživatele %{target}" @@ -226,19 +241,24 @@ cs: deleted_status: "(smazaný toot)" title: Záznam auditu custom_emojis: + assign_category: Přiřadit kategorii by_domain: Doména copied_msg: Místní kopie emoji byla úspěšně vytvořena copy: Kopírovat copy_failed_msg: Nebylo možné vytvořit místní kopii tohoto emoji + create_new_category: Vytvořit novou kategorii created_msg: Emoji úspěšně vytvořeno! delete: Smazat destroyed_msg: Emoji úspěšně zničeno! disable: Zakázat + disabled: Zakázáno disabled_msg: Emoji bylo úspěšně zakázáno emoji: Emoji enable: Povolit + enabled: Povoleno enabled_msg: Emoji bylo úspěšně povoleno image_hint: PNG až do 50 KB + list: Uvést listed: Uvedeno new: title: Přidat nové vlastní emoji @@ -246,11 +266,14 @@ cs: shortcode: Zkratka shortcode_hint: Alespoň 2 znaky, pouze alfanumerické znaky a podtržítka title: Vlastní emoji + uncategorized: Nezařazená + unlist: Neuvést unlisted: Neuvedeno update_failed_msg: Nebylo možné aktualizovat toto emoji updated_msg: Emoji úspěšně aktualizováno! upload: Nahrát dashboard: + authorized_fetch_mode: Zabezpečený režim backlog: opožděné úlohy config: Konfigurace feature_deletions: Smazání účtů @@ -258,10 +281,13 @@ cs: feature_profile_directory: Adresář profilů feature_registrations: Registrace feature_relay: Federovací most + feature_spam_check: Antispam feature_timeline_preview: Náhled časové osy features: Vlastnosti hidden_service: Federace se skrytými službami open_reports: otevřená hlášení + pending_tags: hashtagů čeká na posouzení + pending_users: uživatelů recent_users: Nedávní uživatelé search: Fulltextové vyhledávání single_user_mode: Režim jednoho uživatele @@ -273,11 +299,18 @@ cs: week_interactions: interakcí tento týden week_users_active: aktivních tento týden week_users_new: uživatelů tento týden + whitelist_mode: Režim bílé listiny + domain_allows: + add_new: Přidat doménu na bílou listinu + created_msg: Doména byla úspěšně přidána na bílou listinu + destroyed_msg: Doména byla odstraněna z bílé listiny + undo: Odstranit z bílé listiny domain_blocks: add_new: Přidat novou blokaci domény created_msg: Blokace domény se právě vyřizuje destroyed_msg: Blokace domény byla zrušena domain: Doména + edit: Upravit doménovou blokaci existing_domain_block_html: Pro účet %{name} jste již nastavil/a přísnější omezení, musíte jej nejdříve <a href="%{unblock_url}">odblokovat</a>. new: create: Vytvořit blokaci @@ -288,6 +321,10 @@ cs: silence: Utišit suspend: Pozastavit title: Nová doménová blokace + private_comment: Soukromý komentář + private_comment_hint: Komentář o tomto omezení domény pro vnitřní použití moderátory. + public_comment: Veřejný komentář + public_comment_hint: Komentář o tomto omezení domény pro obecnou veřejnost, pokud je povoleno zobrazování seznamu omezení domén. reject_media: Odmítat mediální soubory reject_media_hint: Odstraní lokálně uložené mediální soubory a odmítne jejich stahování v budoucnosti. Nepodstatné pro pozastavení reject_reports: Odmítat nahlášení @@ -309,6 +346,7 @@ cs: title: Zrušit blokaci domény %{domain} undo: Odvolat undo: Odvolat blokaci domény + view: Zobrazit doménovou blokaci email_domain_blocks: add_new: Přidat nový created_msg: E-mailová doména úspěšně přidána na černou listinu @@ -334,6 +372,8 @@ cs: all: Všechny limited: Omezené title: Moderování + private_comment: Soukromý komentář + public_comment: Veřejný komentář title: Federace total_blocked_by_us: Blokované námi total_followed_by_them: Sledované jimi @@ -363,6 +403,7 @@ cs: pending: Čekám na souhlas mostu save_and_enable: Uložit a povolit setup: Nastavit připojení k mostu + signatures_not_enabled: Mosty nebudou fungovat správně, dokud je povolen zabezpečený režim nebo režim bílé listiny status: Stav title: Mosty report_notes: @@ -411,11 +452,21 @@ cs: custom_css: desc_html: Pozměnit vzhled pomocí šablony CSS načtené na každé stránce title: Vlastní CSS + default_noindex: + desc_html: Ovlivňuje všechny uživatele, kteří toto nastavení sami nezměnili + title: Odhlásit uživatele z indexování vyhledávačemi ve výchozím stavu + domain_blocks: + all: Všem + disabled: Nikomu + title: Zobrazit doménové blokace + users: Přihlášeným místním uživatelům + domain_blocks_rationale: + title: Zobrazit odůvodnění hero: desc_html: Zobrazuje se na hlavní stránce. Doporučuje se rozlišení alespoň 600x100 px. Pokud toto není nastaveno, bude zobrazena miniatura serveru title: Hlavní obrázek mascot: - desc_html: Zobrazuje se na hlavní stránce. Doporučuje se rozlišení alespoň 293x205 px. Pokud toto není nastaveno, bude zobrazen výchozí maskot + desc_html: Zobrazuje se na několika stránkách. Doporučuje se rozlišení alespoň 293x205 px. Pokud toto není nastaveno, bude zobrazen výchozí maskot title: Obrázek maskota peers_api_enabled: desc_html: Domény, na které tento server narazil ve fedivesmíru @@ -443,8 +494,8 @@ cs: open: Kdokoliv se může registrovat title: Režim registrací show_known_fediverse_at_about_page: - desc_html: Je-li tohle zapnuto, zobrazí se v náhledu tooty z celého známého fedivesmíru. Jinak budou zobrazeny pouze místní tooty. - title: Zobrazit na náhledu časové osy celý známý fedivesmír + desc_html: Je-li tohle vypnuto, bude veřejná časová osa, na kterou odkazuje hlavní stránka serveru, omezena pouze na místní obsah + title: Zobrazit na nepřihlášené stránce časové osy federovaný obsah show_staff_badge: desc_html: Zobrazit na stránce uživatele odznak člena personálu title: Zobrazit odznak personálu @@ -455,25 +506,35 @@ cs: desc_html: Dobré místo pro vaše pravidla, pokyny a jiné věci, které váš server odlišují od ostatních. Lze použít HTML značky title: Vlastní rozšířené informace site_short_description: - desc_html: Zobrazen v postranním panelu a meta značkách. Popište, co je Mastodon a díky čemu je tento server zvláštní v jediném odstavci. + desc_html: Zobrazen v postranním panelu a meta značkách. Popište, co je Mastodon a díky čemu je tento server zvláštní, v jediném odstavci. title: Krátký popis serveru site_terms: desc_html: Můžete si napsat vlastní zásady soukromí, podmínky používání či jiné legality. Můžete použít HTML značky title: Vlastní podmínky používání site_title: Název serveru + spam_check_enabled: + desc_html: Mastodon může automaticky nahlašovat účty, které opakovaně odesílají nevyžádané zprávy. Mohou se najít špatné shody. + title: Antispamová automatizace thumbnail: desc_html: Používáno pro náhledy přes OpenGraph a API. Doporučuje se rozlišení 1200x630px title: Miniatura serveru timeline_preview: - desc_html: Zobrazit na hlavní straně veřejnou časovou osu - title: Náhled časové osy + desc_html: Zobrazit na hlavní straně odkaz na veřejnou časovou osu a povolit přístup na veřejnou časovou osu pomocí API bez autentizace + title: Povolit neautentizovaný přístup k časové ose title: Nastavení stránky + trendable_by_default: + desc_html: Ovlivňuje hashtagy, které nebyly dříve zakázány + title: Dovolit hashtagům zobrazit se na trendech bez předchozího posouzení + trends: + desc_html: Veřejně zobrazit předtím schválené hashtagy, které jsou aktuálně populární + title: Populární hashtagy statuses: back_to_account: Zpět na stránku účtu batch: delete: Smazat nsfw_off: Označit, že není citlivý nsfw_on: Označit jako citlivý + deleted: Smazáno failed_to_execute: Nepodařilo se vykonat media: title: Média @@ -481,21 +542,24 @@ cs: no_status_selected: Nebyly změněny žádné tooty, neboť žádné nebyly vybrány title: Tooty účtu with_media: S médii - subscriptions: - callback_url: Zpáteční URL - confirmed: Potvrzeno - expires_in: Vyprší v - last_delivery: Poslední doručení - title: WebSub - topic: Téma tags: - accounts: Účty - hidden: Skryté - hide: Skrýt z adresáře + accounts_today: Jedinečná použití dnes + accounts_week: Jedinečná použití tento týden + breakdown: Přehled dnešního používání podle zdroje + context: Kontext + directory: V adresáři + in_directory: "%{count} v adresáři" + last_active: Naposledy aktivní + most_popular: Nejpopulárnější + most_recent: Nejnovější name: Hashtag + review: Stav schválení + reviewed: Schválen title: Hashtagy - unhide: Zobrazit v adresáři - visible: Viditelné + trending_right_now: Aktuální trendy + unique_uses_today: "%{count} dnes píše" + unreviewed: Neposouzeno + updated_msg: Nastavení hashtagu bylo úspěšně aktualizováno title: Administrace warning_presets: add_new: Přidat nové @@ -511,12 +575,23 @@ cs: body: "%{reporter} nahlásil/a uživatele %{target}" body_remote: Někdo z %{domain} nahlásil uživatele %{target} subject: Nové nahlášení pro %{instance} (#%{id}) + new_trending_tag: + body: 'Hashtag #%{name} je dnes populární, nebyl však dříve schválen. Nebude zobrazen veřejně, pokud to nedovolíte. Můžete také pouze uložit formulář tak, jak je, a nikdy o něm opět neslyšet.' + subject: Nový hashtag ke schválení na %{instance} (#%{name}) + aliases: + add_new: Vytvořit alias + created_msg: Nový alias byl úspěšně vytvořen. Nyní můžete zahájit přesun ze starého účtu. + deleted_msg: Alias byl úspěšně odstraněn. Přesun z tamtoho účtu na tento již nebude možný. + hint_html: Chcete-li se přesunout z jiného účtu na tento, můžete si zde vytvořit alias, který je vyžadován předtím, než můžete pokračovat přesunem sledujících ze starého účtu na tento. Tato akce sama o sobě je <strong>neškodná a vratná</strong>. <strong>Přesun účtu se zahajuje ze starého účtu</strong>. + remove: Odpojit alias appearance: advanced_web_interface: Pokročilé webové rozhraní advanced_web_interface_hint: 'Chcete-li využít celé šířky vaší obrazovky, dovolí vám pokročilé webové rozhraní nastavit si mnoho různých sloupců, takže můžete vidět ve stejnou chvíli tolik informací, kolik chcete: domovskou časovou osu, oznámení, federovanou časovou osu a libovolný počet seznamů a hashtagů.' animations_and_accessibility: Animace a přístupnost confirmation_dialogs: Potvrzovací dialogy + discovery: Objevování sensitive_content: Citlivý obsah + toot_layout: Rozložení tootů application_mailer: notification_preferences: Změnit volby e-mailu salutation: "%{name}," @@ -536,9 +611,13 @@ cs: apply_for_account: Vyžádat si pozvánku change_password: Heslo checkbox_agreement_html: Souhlasím s <a href="%{rules_path}" target="_blank">pravidly serveru</a> a <a href="%{terms_path}" target="_blank">podmínkami používání</a> - confirm_email: Potvrdit e-mail + checkbox_agreement_without_rules_html: Souhlasím s <a href="%{terms_path}" target="_blank">podmínkami používání</a> delete_account: Odstranit účet delete_account_html: Chcete-li odstranit svůj účet, <a href="%{path}">pokračujte zde</a>. Budete požádán/a o potvrzení. + description: + prefix_invited_by_user: "@%{name} vás zve, abyste se přidal/a na tento server Mastodon!" + prefix_sign_up: Registrujte se na Mastodonu již dnes! + suffix: S účtem budete moci sledovat lidi, psát příspěvky a vyměňovat si zprávy s uživateli z kteréhokoliv serveru Mastodon a dalších služeb! didnt_get_confirmation: Neobdržel/a jste pokyny pro potvrzení? forgot_password: Zapomněl/a jste heslo? invalid_reset_password_token: Token pro obnovení hesla je buď neplatný, nebo vypršel. Prosím vyžádejte si nový. @@ -556,6 +635,16 @@ cs: reset_password: Obnovit heslo security: Zabezpečení set_new_password: Nastavit nové heslo + setup: + email_below_hint_html: Pokud je níže uvedená e-mailová adresa nesprávná, můžete ji změnit zde a obdržet nový potvrzovací e-mail. + email_settings_hint_html: Potvrzovací e-mail byl odeslán na %{email}. Pokud je tato adresa nesprávná, můžete ji změnit v nastavení účtu. + title: Nastavení + status: + account_status: Stav účtu + confirming: Čekám na dokončení potvrzení e-mailu. + functional: Váš účet je zcela funkční. + pending: Váš požadavek čeká na schválení naším personálem. To může nějakou dobu trvat. Pokud bude váš požadavek schválen, obdržíte e-mail. + redirecting_to: Váš účet je neaktivní, protože právě přesměrovává na účet %{acct}. trouble_logging_in: Problémy s přihlašováním? authorize_follow: already_following: Tento účet již sledujete @@ -568,6 +657,11 @@ cs: return: Zobrazit profil uživatele web: Přejít na web title: Sledovat uživatele %{acct} + challenge: + confirm: Pokračovat + hint_html: "<strong>Tip:</strong> Po dobu hodiny vás nebudeme znovu žádat o heslo." + invalid_password: Neplatné heslo + prompt: Pokračujte potvrzením hesla datetime: distance_in_words: about_x_hours: "%{count} hod" @@ -583,28 +677,33 @@ cs: x_months: "%{count} mesíců" x_seconds: "%{count} s" deletes: - bad_password_msg: Dobrý pokus, hackeři! Nesprávné heslo + challenge_not_passed: Informace, které jste zadal/a, nejsou správné confirm_password: Zadejte svoje současné heslo pro ověření vaší identity - description_html: Tímto <strong>trvale a nenávratně</strong> odstraníte obsah z vašeho účtu a deaktivujete ho. Vaše uživatelské jméno zůstane rezervované pro zabránění budoucím napodobováním. + confirm_username: Zadáním svého uživatelského jména potvrdíte proces proceed: Odstranit účet success_msg: Váš účet byl úspěšně odstraněn - warning_html: Pouze vymazání obsahu z tohoto konkrétního serveru je zaručeno. Obsah, který byl široce sdílen, po sobě pravděpodobně zanechá stopy. U offline serverů a serverů, které vaše aktualizace již neodebírají, nebudou databáze aktualizovány. - warning_title: Dostupnost rozšířeného obsahu + warning: + before: 'Před pokračováním si prosím pečlivě přečtěte tyto poznámky:' + caches: Obsah, který byl uložen do cache jiných serverů, nemusí být smazán + data_removal: Vaše příspěvky a další data budou trvale smazána + email_change_html: Můžete si <a href="%{path}">změnit svou e-mailovou adresu</a> bez smazání účtu + email_contact_html: Pokud stále nepřijde, můžete požádat o pomoc zasláním e-mailu na <a href="mailto:%{email}">%{email}</a> + email_reconfirmation_html: Pokud neobdržíte potvrzovací e-mail, můžete si ho <a href="%{path}">vyžádat znovu</a> + irreversible: Nebudete moci obnovit nebo znovu aktivovat váš účet + more_details_html: Více detailů najdete v <a href="%{terms_path}">zásadách soukromí</a>. + username_available: Vaše uživatelské jméno bude opět dostupné + username_unavailable: Vaše uživatelské jméno zůstane nedostupným directories: directory: Adresář profilů - enabled: Aktuálně jste v adresáři uveden/a. - enabled_but_waiting: Přihlásil/a jste se k uvedení v adresáři, ale ještě nemáte minimální počet sledujících (%{min_followers}) pro uvedení. explanation: Objevujte uživatele podle jejich zájmů explore_mastodon: Prozkoumejte %{title} - how_to_enable: Aktuálně nejste přihlášen/a do adresáře. Přihlásit se můžete níže. Použijte ve svém popisu profilu hashtagy, abyste mohl/a být uveden/a pod konkrétními hashtagy! - people: - few: "%{count} lidé" - many: "%{count} lidí" - one: "%{count} člověk" - other: "%{count} lidí" + domain_validator: + invalid_domain: není platné doménové jméno errors: + '400': Požadavek, který jste odeslal/a, byl neplatný nebo poškozený. '403': Nemáte povolení zobrazit tuto stránku. '404': Stránka, kterou hledáte, tu není. + '406': Tato stránka není dostupná v požadovaném formátu. '410': Stránka, kterou hledáte, tu již neexistuje. '422': content: Bezpečnostní ověření selhalo. Neblokujete cookies? @@ -613,6 +712,7 @@ cs: '500': content: Omlouváme se, ale něco se u nás pokazilo. title: Tato stránka není správná + '503': Stránku nelze načíst kvůli dočasnému selhání serveru. noscript_html: Pro použití webové aplikace Mastodon prosím povolte JavaScript. Nebo zkuste jednu z <a href="%{apps_path}">nativních aplikací</a> pro Mastodon pro vaši platformu. existing_username_validator: not_found: nelze najít místního uživatele s tímto uživatelským jménem @@ -636,6 +736,7 @@ cs: add_new: Přidat nový errors: limit: Již jste zvýraznil/a maximální počet hashtagů + hint_html: "<strong>Co jsou zvýrazněné hashtagy?</strong> Zobrazují se prominentně na vašem veřejném profilu a dovolují lidem prohlížet si vaše veřejné příspěvky konkrétně pod těmi hashtagy. Je to skvělý nástroj pro sledování kreativních děl nebo dlouhodobých projektů." filters: contexts: home: Domovská časová osa @@ -656,10 +757,12 @@ cs: developers: Vývojáři more: Více… resources: Zdroje + trending_now: Aktuální trendy generic: all: Všechny changes_saved_msg: Změny byly úspěšně uloženy! copy: Kopírovat + no_batch_actions_available: Pro tuto stránku nejsou dostupny žádné souhrnné akce order_by: Seřadit od save_changes: Uložit změny validation_errors: @@ -713,7 +816,7 @@ cs: '604800': 1 týden '86400': 1 den expires_in_prompt: Nikdy - generate: Vygenerovat + generate: Vygenerovat pozvánku invited_by: 'Byl/a jste pozván/a uživatelem:' max_uses: few: "%{count} použití" @@ -734,10 +837,35 @@ cs: images_and_video: K tootu, který již obsahuje obrázky, nelze připojit video too_many: Nelze připojit více než 4 soubory migrations: - acct: přezdívka@doména nového účtu - currently_redirecting: 'Váš profil má nastaveno přesměrování na:' - proceed: Uložit - updated_msg: Vaše nastavení přesunutí účtu bylo úspěšně aktualizováno! + acct: Přesunuto na + cancel: Zrušit přesměrování + cancel_explanation: Zrušením přesměrování znovu aktivujete svůj aktuální účet, ale nevrátí se vám sledující, kteří byli přesměrováni na druhý účet. + cancelled_msg: Přesměrování bylo úspěšně zrušeno. + errors: + already_moved: je stejný účet, na který jste se již přesunul/a + missing_also_known_as: neodkazuje na tento účet + move_to_self: nemůže být aktuální účet + not_found: nemohl být nalezen + on_cooldown: Probíhá období odpočinku + followers_count: Sledující v době přesunu + incoming_migrations: Přesun z jiného účtu + incoming_migrations_html: Chcete-li se přesunout z jiného účtu na tento, potřebujete si nejprve <a href="%{path}">vytvořit alias účtu</a>. + moved_msg: Váš účet nyní přesměrovává na účet %{acct} a vaši sledující se na něj přesouvají. + not_redirecting: Váš účet aktuálně nepřesměrovává na žádný jiný účet. + on_cooldown: Nedávno jste přesunul/a svůj účet. Tato funkce bude opět dostupná za %{count} dní. + past_migrations: Předchozí přesuny + proceed_with_move: Přesunout sledující + redirecting_to: Váš účet přesměrovává na účet %{acct}. + set_redirect: Nastavit přesměrování + warning: + backreference_required: Nový účet musí být nejprve nastaven, aby odkazoval zpátky na tento + before: 'Před pokračováním si prosím pečlivě přečtěte tyto poznámky:' + cooldown: Po přesunu nastane období odpočinku, kdy se nebudete moci opět přesunout + disabled_account: Váš aktuální účet nebude poté zcela použitelný. Budete však mít přístup k datovým exportům a budete ho moci znovu aktivovat. + followers: Touto akcí přesunete všechny sledující z aktuálního účtu na nový účet + only_redirect_html: Alternativně můžete <a href="%{path}">nastavit pouze přesměrování na váš profil</a>. + other_data: Žádná další data nebudou přesunuta automaticky + redirect: Profil vašeho aktuálního účtu bude aktualizován s oznámením o přesměrování a bude vyloučen z hledání moderation: title: Moderování notification_mailer: @@ -838,10 +966,6 @@ cs: reply: proceed: Pokračovat k odpovězení prompt: 'Chcete odpovědět na tento toot:' - remote_unfollow: - error: Chyba - title: Nadpis - unfollowed: Už nesledujete scheduled_statuses: over_daily_limit: Překročil/a jste limit %{limit} plánovaných tootů pro tento den over_total_limit: Překročil/a jste limit %{limit} plánovaných tootů @@ -890,6 +1014,7 @@ cs: settings: account: Účet account_settings: Nastavení účtu + aliases: Aliasy účtů appearance: Vzhled authorized_apps: Autorizované aplikace back: Zpět na Mastodon @@ -901,12 +1026,14 @@ cs: identity_proofs: Důkazy identity import: Import import_and_export: Import a export - migrate: Přesunutí účtu + migrate: Přesun účtu notifications: Oznámení preferences: Předvolby profile: Profil relationships: Sledovaní a sledující two_factor_authentication: Dvoufázové ověřování + spam_check: + spam_detected: Tohle je automatizované nahlášení. Byl detekován spam. statuses: attached: description: 'Přiloženo: %{attached}' @@ -936,6 +1063,11 @@ cs: private: Nelze připnout neveřejné tooty reblog: Nelze připnout boost poll: + total_people: + few: "%{count} lidé" + many: "%{count} lidí" + one: "%{count} člověk" + other: "%{count} lidí" total_votes: few: "%{count} hlasy" many: "%{count} hlasů" @@ -956,6 +1088,8 @@ cs: pinned: Připnutý toot reblogged: boostnul/a sensitive_content: Citlivý obsah + tags: + does_not_match_previous_name: se neshoduje s předchozím názvem terms: body_html: | <h2>Zásady soukromí</h2> @@ -1073,7 +1207,9 @@ cs: disable: Zatímco je váš účet zmražen, zůstávají data vašeho účtu nedotčená, ale nemůžete vykonávat žádné akce, dokud nebude odemčen. silence: Zatímco je váš účet omezen, mohou vaše tooty na tomto serveru vidět pouze lidé, kteří váš již sledují, a můžete být vyloučen/a z různých veřejných výpisů. Ostatní vás však pořád mohou manuálně sledovat. suspend: Váš účet byl pozastaven a všechny vaše tooty a vaše nahrané mediální soubory byly nenávratně odstraněny z tohoto serveru a serverů, na kterých jste měl/a sledující. + get_in_touch: Můžete odpovědět na tento e-mail a spojit se s personálem serveru %{instance}. review_server_policies: Posoudit politiku serveru + statuses: 'Konkrétně kvůli:' subject: disable: Váš účet %{acct} byl zmražen none: Varování pro uživatele %{acct} diff --git a/config/locales/cy.yml b/config/locales/cy.yml index adf6bc1d0..aa0974a1a 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -17,13 +17,12 @@ cy: contact_unavailable: Ddim yn berthnasol discover_users: Darganfod defnyddwyr documentation: Dogfennaeth - extended_description_html: | - <h3>Lle da ar gyfer rheolau</h3> - <p>Nid yw'r disgrifiad estynedig wedi ei osod eto.</p> federation_hint_html: Gyda cyfrif ar %{instance}, gallwch dilyn pobl ar unrhyw gweinydd Mastodon, a thu hwnt. - generic_description: Mae %{domain} yn un gweinydd yn y rhwydwaith get_apps: Rhowch gynnig ar ap dyfeis symudol hosted_on: Mastodon wedi ei weinyddu ar %{domain} + instance_actor_flash: | + Mae'r cyfrif hwn yn actor rhithwir a ddefnyddir i gynrychioli'r gweinydd ei hun ac nid unrhyw ddefnyddiwr unigol. + Fe'i defnyddir at ddibenion ffederasiwn ac ni ddylid ei rwystro oni bai eich bod am rwystro'r achos cyfan, ac os felly dylech ddefnyddio bloc parth. learn_more: Dysu mwy privacy_policy: Polisi preifatrwydd see_whats_happening: Gweld beth sy'n digwydd @@ -39,6 +38,14 @@ cy: status_count_before: Ysgriffennwyd gan tagline: Dilyn ffrindiau a darganfod rhai newydd terms: Telerau gwasanaeth + unavailable_content: Cynnwys nad yw ar gael + unavailable_content_description: + domain: Gweinydd + reason: 'Rheswm:' + rejecting_media: Ni fydd ffeiliau cyfryngau o'r gweinydd hwn yn cael eu prosesu ac ni fydd unrhyw fawd yn cael eu harddangos, sy'n gofyn am glicio â llaw i'r gweinydd arall. + silenced: Ni fydd swyddi o'r gweinydd hwn yn ymddangos yn unman heblaw eich porthiant cartref os dilynwch yr awdur. + suspended: Ni fyddwch yn gallu dilyn unrhyw un o'r gweinydd hwn, ac ni fydd unrhyw ddata ohono'n cael ei brosesu na'i storio, ac ni chyfnewidir unrhyw ddata. + unavailable_content_html: Yn gyffredinol, mae Mastodon yn caniatáu ichi weld cynnwys gan unrhyw weinyddwr arall yn y ffederasiwn a rhyngweithio â hi. Dyma'r eithriadau a wnaed ar y gweinydd penodol hwn. user_count_after: few: defnyddwyr many: defnyddwyr @@ -50,6 +57,8 @@ cy: what_is_mastodon: Beth yw Mastodon? accounts: choices_html: 'Dewisiadau %{name}:' + endorsements_hint: Gallwch gymeradwyo pobl rydych chi'n eu dilyn o'r rhyngwyneb gwe, a byddan nhw'n ymddangos yma. + featured_tags_hint: Gallwch ychwanegu hashnodau penodol a fydd yn cael eu harddangos yma. follow: Dilynwch followers: few: Dilynwyr @@ -65,6 +74,7 @@ cy: media: Cyfryngau moved_html: 'Mae %{name} wedi symud i %{new_profile_link}:' network_hidden: Nid yw'r wybodaeth hyn ar gael + never_active: Peidiwch byth nothing_here: Does dim byd yma! people_followed_by: Pobl y mae %{name} yn ei ddilyn people_who_follow: Pobl sy'n dilyn %{name} @@ -160,7 +170,7 @@ cy: promote: Hyrwyddo protocol: Protocol public: Cyhoeddus - push_subscription_expires: Tanysgrifiad PuSH yn dod i ben + push_subscription_expires: Tanysgrifiad gwthiadwy yn dod i ben redownload: Adnewyddu proffil reject: Gwrthod reject_all: Gwrthod pob un @@ -181,6 +191,7 @@ cy: user: Defnyddiwr salmon_url: URL Eog search: Chwilio + search_same_ip: Defnyddwyr eraill gyda'r un IP shared_inbox_url: URL Mewnflwch wedi ei rannu show: created_reports: Adroddiadau a wnaed @@ -199,6 +210,7 @@ cy: username: Enw defnyddiwr warn: Rhybuddio web: Gwe + whitelisted: Rhestredig wen action_logs: actions: assigned_to_self_report: Aseiniodd %{name} adroddiad %{target} i'w hunan @@ -234,19 +246,24 @@ cy: deleted_status: "(statws wedi ei ddileu)" title: Log archwilio custom_emojis: + assign_category: Neilltuo categori by_domain: Parth copied_msg: Llwyddwyd i greu copi lleol o'r emoji copy: Copïo copy_failed_msg: Methwyd i greu copi lleol o'r emoji hwnnw + create_new_category: Create new category created_msg: Llwyddwyd i greu emoji! delete: Dileu destroyed_msg: Llwyddwyd i ddinistrio emojo! disable: Diffodd + disabled: Wedi'i ddiffodd disabled_msg: Llwyddwyd i ddiffodd yr emoji hwnnw emoji: Emoji enable: Galluogi + enabled: Wedi ei alluogi enabled_msg: Llwyddwyd i alluogi yr emoji hwnnw image_hint: PNG hyd at 50KB + list: Rhestr listed: Rhestredig new: title: Ychwanegu emoji personol newydd @@ -254,11 +271,14 @@ cy: shortcode: Byrgod shortcode_hint: O leiaf 2 nodyn, dim ond nodau alffaniwmerig a tanlinellau title: Emoji unigryw + uncategorized: Heb gategori + unlist: Dad-restru unlisted: Heb eu rhestru update_failed_msg: Methwyd a diweddaru'r emoji hwnnw updated_msg: Llwyddwyd i ddiweddaru'r emoji! upload: Uwchlwytho dashboard: + authorized_fetch_mode: Modd nôl awdurdodedig backlog: tasgau heb eu cwblhau config: Cyfluniad feature_deletions: Dileadau cyfrif @@ -266,10 +286,13 @@ cy: feature_profile_directory: Cyfeiriadur proffil feature_registrations: Cofrestriadau feature_relay: Relái ffederasiwn + feature_spam_check: Gwrth-sbam feature_timeline_preview: Rhagolwg o'r ffrwd features: Nodweddion hidden_service: Ffederasiwn a gwasanaethau cudd open_reports: adroddiadau agored + pending_tags: hashnodau yn aros am adolygiad + pending_users: defnyddwyr yn aros am adolygiad recent_users: Defnyddwyr diweddar search: Chwilio testun llawn single_user_mode: Modd un defnyddiwr @@ -281,11 +304,18 @@ cy: week_interactions: ymadweithiau yr wythnos hon week_users_active: gweithredol yr wythnos hon week_users_new: defnyddwyr yr wythnos hon + whitelist_mode: Modd rhestr wen + domain_allows: + add_new: Rhestrwch parth + created_msg: Rhestrwyd wen parth yn llwyddiannus + destroyed_msg: Mae parth wedi'i dynnu o'r rhestr wen + undo: Tynnwch o'r rhestr wen domain_blocks: add_new: Ychwanegu bloc parth newydd created_msg: Mae'r bloc parth nawr yn cael ei brosesu destroyed_msg: Mae'r bloc parth wedi ei ddadwneud domain: Parth + edit: Golygu bloc parth existing_domain_block_html: Rydych yn barod wedi gosod cyfyngau fwy llym ar %{name}, mae rhaid i chi ei <a href="%{unblock_url}">ddadblocio</a> yn gyntaf. new: create: Creu bloc @@ -296,6 +326,10 @@ cy: silence: Tawelwch suspend: Atal title: Blocio parth newydd + private_comment: Sylw preifat + private_comment_hint: Sylw am gyfyngiadau y barth ar gyfer defnydd mewnol gan y cymedrolwyr. + public_comment: Sylw cyhoeddus + public_comment_hint: Sylw am gyfyngiadau y parth hon ar gyfer y cyhoedd, os mae hysbysu'r rhestr o gyfyngiadau parth wedi'i alluogi. reject_media: Gwrthod dogfennau cyfryngau reject_media_hint: Dileu dogfennau cyfryngau wedi eu cadw yn lleol ac yn gwrthod i lawrlwytho unrhyw rai yn y dyfodol. Amherthnasol i ataliadau reject_reports: Gwrthod adroddiadau @@ -319,6 +353,7 @@ cy: title: Dadwneud blocio parth ar gyfer %{domain} undo: Dadwneud undo: Dadwneud bloc parth + view: Gweld bloc parth email_domain_blocks: add_new: Ychwanegu created_msg: Llwyddwyd i ychwanegu parth e-bost i'r gosbrestr @@ -346,6 +381,8 @@ cy: all: Pob limited: Gyfyngedig title: Goruwchwyliad + private_comment: Sylw preifat + public_comment: Sylw cyhoeddus title: Ffederasiwn total_blocked_by_us: Wedi'i bloc gan ni total_followed_by_them: Yn dilyn ganynt @@ -375,6 +412,7 @@ cy: pending: Aros am gymeradywaeth i'r relái save_and_enable: Cadw a galluogi setup: Sefydlu cysylltiad relái + signatures_not_enabled: Ni fydd cyfnewidau yn gweithio'n iawn pan mae modd diogel neu restr gwyn wedi'i alluogi status: Statws title: Cyfnewidwyr report_notes: @@ -423,6 +461,16 @@ cy: custom_css: desc_html: Addasu gwedd gyda CSS wedi lwytho ar bob tudalen title: CSS wedi'i addasu + default_noindex: + desc_html: Yn effeithio pob defnyddwr sydd heb newid y gosodiad ei hun + title: Eithrio defnyddwyr o fynegai peiriannau chwilio yn rhagosodiedig + domain_blocks: + all: I bawb + disabled: I neb + title: Dangos rhwystriadau parth + users: I ddefnyddwyr lleol mewngofnodadwy + domain_blocks_rationale: + title: Dangos rhesymwaith hero: desc_html: Yn cael ei arddangos ar y dudadlen flaen. Awgrymir 600x100px oleia. Pan nad yw wedi ei osod, mae'n ymddangos fel mân-lun yr achos title: Delwedd arwr @@ -473,6 +521,9 @@ cy: desc_html: Mae modd i chi ysgrifennu polisi preifatrwydd, termau gwasanaeth a cyfreitheg arall eich hun. Mae modd defnyddio tagiau HTML title: Termau gwasanaeth wedi eu haddasu site_title: Enw'r achos + spam_check_enabled: + desc_html: Gall Mastodon adrodd cyrfifau sy'n anfon negeseuon niferus na chrefwyd yn awtomatig. Efallai fydd yna positifau anwir. + title: Awtomeiddiad gwrth-sbam thumbnail: desc_html: Ceith ei ddefnyddio ar gyfer rhagolygon drwy OpenGraph a'r API. Argymhellir 1200x630px title: Mân-lun yr achos @@ -480,12 +531,19 @@ cy: desc_html: Dangos ffrwd gyhoeddus ar y dudalen lanio title: Rhagolwg o'r ffrwd title: Gosodiadau'r wefan + trendable_by_default: + desc_html: Yn ddylanwadu ar hashnodau sydd heb ei rhwystro yn y gorffenol + title: Gadael hashnodau i dueddu heb adolygiad cynt + trends: + desc_html: Arddangos hashnodau a adolygwyd yn gynt yn gyhoeddus sydd yn tueddu yn bresennol + title: Hashnodau tueddig statuses: back_to_account: Yn ôl i dudalen y cyfrif batch: delete: Dileu nsfw_off: Marcio fel nad yw'n sensitif nsfw_on: Marcio'n sensitif + deleted: Dilëwyd failed_to_execute: Methwyd a gweithredu media: title: Cyfryngau @@ -493,21 +551,24 @@ cy: no_status_selected: Ni newidwyd dim statws achos ni ddewiswyd dim un title: Statysau cyfrif with_media: A chyfryngau - subscriptions: - callback_url: URL galw-nôl - confirmed: Wedi'i gadarnhau - expires_in: Dod i ben ymhen - last_delivery: Danfoniad diwethaf - title: WebSub - topic: Pwnc tags: - accounts: Cyfrifon - hidden: Cudd - hide: Cuddio o gyfeiriadur + accounts_today: Defyddau unigol heddiw + accounts_week: Defnyddau unigol yr wythnos hon + breakdown: Ymddatodiad o ddefnyddiaeth heddiw wrth ffynhonnell + context: Cyd-destun + directory: O fewn y gyfeiriadur + in_directory: "%{count} yn y gyfeiriadur" + last_active: Yn weithredol ddiwethaf + most_popular: Mwyaf poblogaidd + most_recent: Mwyaf diweddar name: Hashnod + review: Adolygu statws + reviewed: Wedi'i adolygu title: Hashnodau - unhide: Dangoswch yn y cyfeiriadur - visible: Gweladwy + trending_right_now: Yn tueddu nawr + unique_uses_today: "%{count} yn postio heddiw" + unreviewed: Heb ei adolygu + updated_msg: Gosodiadau hashnodau wedi'i diweddaru'n llwyddiannus title: Gweinyddiaeth warning_presets: add_new: Ychwanegu newydd @@ -523,12 +584,23 @@ cy: body: Mae %{reporter} wedi cwyno am %{target} body_remote: Mae rhywun o %{domain} wedi cwyno am %{target} subject: Cwyn newydd am %{instance} (#%{id}) + new_trending_tag: + body: 'Mae''r hashnod #%{name} yn tueddu heddiw, ond nid yw''r hashnod wedi''i adolygu''n gynt. Ni fydd o''n cael ei arddangos yn gyhoeddus oni bai bod chi''n ei ganiataú, neu arbedwch y ffurflen fel y mae i fyth clywed amdano eto.' + subject: Hashnod newydd i fynnu ar gyfer adolygiad ar %{instance} (%{name}) + aliases: + add_new: Creu enw arall + created_msg: Wedi creu enw arall yn llwyddianus. Gallwch nawr dechrau'r symudiad o'r hen gyfrif. + deleted_msg: Wedi tynnu enw arall yn llwyddianus. Ni fydd symud o'r cyfrif hynny i'r cyfrif hon yn bosib. + hint_html: Os hoffech symyd o gyfrif arall i'r cyfrif hon, gallwch creu enw arall fama, sydd yn angenrheidiol cyn i chi dechrau symyd ddilynwyr o'r hen gyfrif i'r cyfrif hon. Mae'r gweithred hon yn <strong>ddiniwed ac yn gildroadwy</strong>. <strong>Caiff symudiad y cyfrif ei dechrau o'r hen gyfrif</strong>. + remove: Dadgysylltu'r enw arall appearance: advanced_web_interface: Rhyngwyneb gwe uwch advanced_web_interface_hint: 'Os hoffech gwneud defnydd o gyd o''ch lled sgrin, mae''r rhyngwyneb gwe uwch yn gadael i chi ffurfweddu sawl colofn wahanol i weld cymaint o wybodaeth â hoffech: Catref, hysbysiadau, ffrwd y ffedysawd, unrhyw nifer o rhestrau ac hashnodau.' animations_and_accessibility: Animeiddiau ac hygyrchedd confirmation_dialogs: Deialog cadarnhau + discovery: Darganfyddiad sensitive_content: Cynnwys sensitif + toot_layout: Gosodiad tŵt application_mailer: notification_preferences: Newid gosodiadau e-bost salutation: "%{name}," @@ -548,9 +620,13 @@ cy: apply_for_account: Gofyn am wahoddiad change_password: Cyfrinair checkbox_agreement_html: Rydw i'n cytuno i'r <a href="%{rules_path}" target="_blank">rheolau'r gweinydd</a> a'r <a href="%{terms_path}" target="_blank">telerau gwasanaeth</a> - confirm_email: Cadarnhau e-bost + checkbox_agreement_without_rules_html: Rydw i'n cytuno i <a href="%{terms_path}" target="_blank">Delerau y Gwasanaeth</a> delete_account: Dileu cyfrif delete_account_html: Os hoffech chi ddileu eich cyfrif, mae modd <a href="%{path}">parhau yma</a>. Bydd gofyn i chi gadarnhau. + description: + prefix_invited_by_user: Mae @%{name} yn eich wahodd i ymuno â'r gweinidd Mastodon hon! + prefix_sign_up: Cofrestru ar Fastodon heddiw! + suffix: Gyda cyfrif, byddwch yn gallu dilyn pobl, postio dilysiadau a chyfnewid negeseuon gyda defnyddwyr o unrhyw gweinydd Mastodon ac mwy! didnt_get_confirmation: Heb dderbyn cyfarwyddiadau cadarnhau? forgot_password: Wedi anghofio'ch cyfrinair? invalid_reset_password_token: Tocyn ailosod cyfrinair yn annilys neu wedi dod i ben. Gwnewch gais am un newydd os gwelwch yn dda. @@ -568,6 +644,16 @@ cy: reset_password: Ailosod cyfrinair security: Diogelwch set_new_password: Gosod cyfrinair newydd + setup: + email_below_hint_html: Os mae'r ebost isod yn anghywir, gallwch ei newid fama a derbyn ebost cadarnhad newydd. + email_settings_hint_html: Caiff yr ebost cadarnhad ei anfon i %{email}. Os nad yw'r ebost hon yn gywir, gallwch ei newid yn ngosodiadau'r cyfrif. + title: Gosodiad + status: + account_status: Statws cyfrif + confirming: Aros i gadarnhad e-bost gael ei gwblhau. + functional: Mae eich cyfrif yn gwbl weithredol. + pending: Mae'ch cais yn aros i gael ei adolygu gan ein staff. Gall hyn gymryd cryn amser. Byddwch yn derbyn e-bost os caiff eich cais ei gymeradwyo. + redirecting_to: Mae eich cyfrif yn anactif oherwydd ei fod ar hyn o bryd yn ailgyfeirio i %{acct}. trouble_logging_in: Trafferdd mewngofnodi? authorize_follow: already_following: Yr ydych yn dilyn y cyfrif hwn yn barod @@ -580,6 +666,11 @@ cy: return: Dangos proffil y defnyddiwr web: I'r wê title: Dilyn %{acct} + challenge: + confirm: Parhau + hint_html: "<strong>Awgrym:</strong> Ni fyddwn yn gofyn i chi am eich cyfrinair eto am yr awr nesaf." + invalid_password: Cyfrinair annilys + prompt: Cadarnhewch gyfrinair i barhau datetime: distance_in_words: about_x_hours: "%{count}awr" @@ -595,23 +686,33 @@ cy: x_months: "%{count}mis" x_seconds: "%{count}eiliad" deletes: - bad_password_msg: Go dda, hacwyr! Cyfrinair anghywir + challenge_not_passed: Nid oedd y wybodaeth a nodoch yn gywir confirm_password: Mewnbynnwch eich cyfrinair presennol i gadarnhau mai chi sydd yno - description_html: Bydd hyn yn cael gwared ar gynnwys o'ch cyfrif <strong>am byth heb fodd i'w adfer</strong> ac yn diffodd y cyfrif. Caiff eich eich enw defnyddiwr ei gadw i atal unrhyw ddynwarediadau yn y dyfodol. + confirm_username: Rhowch eich enw defnyddiwr i gadarnhau'r weithdrefn proceed: Dileu cyfrif success_msg: Llwyddwyd i ddileu eich cyfrif - warning_html: Dim ond dileu cynnwys o'r achos hwn ellid bod yn sicr ei fod wedi ei ddileu. Mae cynnwys sydd wedi ei rannu'n eang yn debygol o adael olion. Ni fydd gweinyddwyr all-lein a gweinyddwyr sydd wedi dad-danysgrifio o'ch diwedderiadau ddim yn diweddaru eu cronfeydd data. - warning_title: Argaeledd cynnwys wedi'i rannu + warning: + before: 'Cyn bwrw ymlaen, darllenwch y nodiadau hyn yn ofalus:' + caches: Efallai bydd cynnwys sydd wedi'i storio dros dro gan weinyddau eraill yn barhau + data_removal: Bydd eich pyst a'ch data arall yn cael ei ddileu am fyth + email_change_html: Gallwch <a href="%{path}">newid eich cyfeiriad ebost</a> heb ddileu eich cyfrif + email_contact_html: Os nad yw hi'n cyrraedd, gallwch ebostio <a href="mailto:%{email}">%{email}</a> am gymorth + email_reconfirmation_html: Os nad ydych yn derbyn yr ebost cadarnhad, gallwch <a href="%{path}">ceisio amdani eto</a> + irreversible: Ni fyddwch yn gallu adfer nac ail-greu eich cyfrif + more_details_html: Am fwy o fanylion, gwelwch y <a href="%{terms_path}">polisi preifatrwydd</a>. + username_available: Bydd eich enw defnyddiwr ar gael eto + username_unavailable: Ni fydd eich enw defnyddiwr ar gael directories: directory: Cyfeiriadur proffil - enabled: Rydych chi wedi'ch rhestru yn y cyfeiriadur ar hyn o bryd. - enabled_but_waiting: Rydych wedi dewis i chi gael eich rhestru yn y cyfeiriadur, ond nid oes gennych y nifer lleiaf o ddilynwyr (%{min_followers}) i'w rhestru eto. explanation: Darganfod defnyddwyr yn seiliedig ar eu diddordebau explore_mastodon: Archwilio %{title} - how_to_enable: Ar hyn o bryd nid ydych chi wedi dewis y cyfeiriadur. Gallwch ddewis i mewn isod. Defnyddiwch hashnodau yn eich bio-destun i'w restru dan hashnodau penodol! + domain_validator: + invalid_domain: ddim yn enw parth dilys errors: + '400': Roedd y cais wnaethoch cyflwyno yn annilys neu'n gamffurfiedig. '403': Nid oes gennych ganiatad i weld y dudalen hon. '404': Nid yw'r dudalen yr oeddech yn chwilio amdani'n bodoli. + '406': Nid yw'r dudalen ar gael yn y fformat ceisiedig. '410': Nid yw'r dudalen yr oeddech yn chwilio amdani'n bodoli mwyach. '422': content: Methwyd i ddilysu diogelwch. A ydych chi'n blocio cwcîs? @@ -620,6 +721,7 @@ cy: '500': content: Mae'n ddrwg gennym ni, ond fe aeth rhywbeth o'i le ar ein rhan ni. title: Nid yw'r dudalen hon yn gywir + '503': Ni chaiff y dudalen ei weini oherwydd gwall gweinydd dros dro. noscript_html: I ddefnyddio ap gwe Mastodon, galluogwch JavaScript os gwlwch yn dda. Fel arall, gallwch drio un o'r <a href="%{apps_path}">apiau cynhenid</a> ar gyfer Mastodon ar eich platfform. existing_username_validator: not_found: ni ddarganfwyd defnyddiwr lleol gyda'r enw cyfrif hynny @@ -643,6 +745,7 @@ cy: add_new: Ychwanegu errors: limit: Yr ydych yn barod wedi cynnwys yr uchafswm o hashnodau + hint_html: "<strong>Beth yw hashnodau nodedig?</strong> Mae'r rhain yn cael ei arddangos yn amlwg ar eich proffil cyhoeddus ac yn gadael i bobl pori eich pyst cyhoeddus o dan y hashnodau rhain yn benodol. Rydynt yn declyn grêt ar gyfer tracio gweithiau creadigol neu brosiectau hir-dymor." filters: contexts: home: Ffrwd gartref @@ -663,10 +766,12 @@ cy: developers: Datblygwyr more: Mwy… resources: Adnoddau + trending_now: Yn tueddu nawr generic: all: Popeth changes_saved_msg: Llwyddwyd i gadw y newidiadau! copy: Copïo + no_batch_actions_available: Dim gweithredau llwyth ar gael ar y dudalen hon order_by: Trefnu wrth save_changes: Cadw newidiadau validation_errors: @@ -746,9 +851,34 @@ cy: too_many: Ni ellir ychwanegu mwy na 4 dogfen migrations: acct: enwdefnyddiwr@parth y cyfrif newydd - currently_redirecting: 'Mae eich proffil wedi ei osod i ailgyfeirio i:' - proceed: Cadw - updated_msg: Diweddarwyd gosodiad mudo eich cyfrif yn llwyddiannus! + cancel: Canslo ailgyfeirio + cancel_explanation: Bydd diddymu'r ailgyfeiriad yn ail-actifadu eich cyfrif bresennol, ond ni fydd hi'n dychwelyd dilynwyr sydd wedi'i symud i'r cyfrif hynny. + cancelled_msg: Wedi diddymu'r ailgyfeiriad yn llwyddiannus. + errors: + already_moved: yw'r un cyfrif rydych barod wedi symud i + missing_also_known_as: yn olgyfeirio at y gyfrif hon + move_to_self: dim ym gallu bod y cyfrif presennol + not_found: ni ellid dod o hyd iddo + on_cooldown: Rydych ar oeriad + followers_count: Dilynwyr at amser y symudiad + incoming_migrations: Symud o gyfrif wahanol + incoming_migrations_html: I symud o gyfrif arall i'r un hon, yn gyntaf mae'n rhaid i chi greu <a href="%{path}">enw arall ar gyfer y cyfrif</a>. + moved_msg: Mae eich cyfrif nawr yn ailgyfeirio at %{acct} ac mae eich dilynwyr yn cael ei symud ar draws. + not_redirecting: Nid yw eich cyfrif yn ailgyfeirio at gyfrif arall yn bresennol. + on_cooldown: Rydych wedi mudo eich cyfrif yn diweddar. Bydd y swyddogaeth hon ar gael eto mewn %{count} diwrnod. + past_migrations: Ymfudiadau yn y gorffennol + proceed_with_move: Symud dilynwyr + redirecting_to: Mae eich cyfrif yn ailgyfeirio at %{acct}. + set_redirect: Gosod ailgyfeiriad + warning: + backreference_required: Bydd rhaid i'r cyfrif newydd olgyfeirio at y cyfrif hon yn gyntaf + before: 'Cyn bwrw ymlaen, darllenwch y nodiadau hyn yn ofalus:' + cooldown: Ar ôl symud, bydd yna cyfnod oeriad trwy pa ystod ni fyddwch yn gallu symud eto + disabled_account: Ni fydd eich cyfrif presennol yn gwbl ddefyddiedig ar ôl hyn. Er hynny, byddwch dal gyda fynediad at allforiad data ac hefyd ail-actifadu. + followers: Bydd y gweithred hon yn symud pob un o'ch dilynwyr o'r cyfrif presennol i'r cyfrif newydd + only_redirect_html: Fel arall, gallwch <a href="%{path}">dim ond ychwanegu ailgyfeiriad ar eich proffil</a>. + other_data: Ni fydd unrhyw data arall yn cael ei symud yn awtomatig + redirect: Bydd proffil eich cyfrif presennol yn cael ei diweddaru gyda hysbysiad ailgyfeirio ac yn cael ei eithrio o chwiliadau moderation: title: Goruwchwyliad notification_mailer: @@ -842,37 +972,87 @@ cy: no_account_html: Heb gyfrif? Mae modd i chi <a href='%{sign_up_path}' target='_blank'>gofrestru yma</a> proceed: Ymlaen i ddilyn prompt: 'Yr ydych am ddilyn:' - remote_unfollow: - error: Gwall - title: Teitl - unfollowed: Dad-ddilynwyd + reason_html: |- + <strong>Pam yw'r cam hyn yn angenrheidiol? </strong> + Efallai nid yw <code>%{instance}</code> yn gweinydd ble wnaethoch gofrestru, felly mae'n rhaid i ni ailarweinio chi at eich gweinydd catref yn gyntaf. + remote_interaction: + favourite: + proceed: Ymlaen i hoffi + prompt: 'Hoffech hoffi''r tŵt hon:' + reblog: + proceed: Ymlaen i fŵstio + prompt: 'Hoffech fŵstio''r tŵt hon:' + reply: + proceed: Ymlaen i ateb + prompt: 'Hoffech ateb y tŵt hon:' + scheduled_statuses: + over_daily_limit: Rydych wedi rhagori'r cyfwng o %{limit} o dŵtiau rhestredig ar y dydd hynny + over_total_limit: Rydych wedi rhagori'r cyfwng o %{limit} o dŵtiau rhestredig + too_soon: Mae rhaid i'r dydd rhestredig fod yn y dyfodol sessions: activity: Gweithgaredd ddiwethaf browser: Porwr browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Porwr anhysbys + ie: Internet Explorer + micro_messenger: MicroMessenger nokia: Porwr Nokia S40 Ovi + opera: Opera + otter: Otter + phantom_js: PhantomJS qq: Porwr QQ + safari: Safari + uc_browser: UCBrowser + weibo: Weibo current_session: Sesiwn cyfredol description: "%{browser} ar %{platform}" explanation: Dyma'r porwyr gwê sydd wedi mewngofnodi i'ch cyfrif Mastododon ar hyn o bryd. + ip: IP platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: OS Chrome + firefox_os: OS Firefox + ios: iOS + linux: Linux + mac: Mac other: platfform anhysbys + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Ffôn Windows revoke: Diddymu revoke_success: Sesiwn wedi ei ddiddymu yn llwyddiannus title: Sesiynau settings: + account: Cyfrif + account_settings: Gosodiadau'r cyfrif + aliases: Aliasau cyfrif + appearance: Arddangosiad authorized_apps: Apiau awdurdodedig back: Yn ôl i Mastodon delete: Dileu cyfrif development: Datblygu edit_profile: Golygu proffil export: Allforio data + featured_tags: Hashnodau Nodedig + identity_proofs: Profiadau Hunaniaeth import: Mewnforio + import_and_export: Mewnfori ac allfori migrate: Mudo cyfrif notifications: Hysbysiadau preferences: Dewisiadau + profile: Proffil + relationships: Dilynion a dilynwyr two_factor_authentication: Awdurdodi dau-gam + spam_check: + spam_detected: Mae hyn yn adrodd awtomatig. Caiff sbam ei ganfod. statuses: attached: description: 'Ynghlwm: %{attached}' @@ -907,8 +1087,25 @@ cy: ownership: Ni ellir pinio tŵt rhywun arall private: Ni ellir pinio tŵt nad yw'n gyhoeddus reblog: Ni ellir pinio bŵstiau + poll: + total_people: + few: "%{count} o bobl" + many: "%{count} o bobl" + one: "%{count} berson" + other: "%{count} o bobl" + two: "%{count} o bobl" + zero: "%{count} berson" + total_votes: + few: "%{count} o bleidleisiau" + many: "%{count} o bleidleisiau" + one: "%{count} bleidlais" + other: "%{count} o bleidleisiau" + two: "%{count} o bleidleisiau" + zero: "%{count} pleidlais" + vote: Pleidleisio show_more: Dangos mwy sign_in_to_participate: Mengofnodwch i gymryd rhan yn y sgwrs + title: '%{name}: "%{quote}"' visibilities: private: Dilynwyr yn unig private_long: Dangos i ddilynwyr yn unig @@ -920,6 +1117,8 @@ cy: pinned: Tŵt wedi'i binio reblogged: hybwyd sensitive_content: Cynnwys sensitif + tags: + does_not_match_previous_name: ddim yn cyfateb i'r enw blaenorol terms: body_html: | <h2>Polisi Preifatrwydd</h2> @@ -1007,6 +1206,10 @@ cy: contrast: Mastodon (Cyferbyniad uchel) default: Mastodon (Tywyll) mastodon-light: Mastodon (golau) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: Mewnbynwch y côd a grewyd gan eich ap dilysu i gadarnhau description_html: Os ydych yn galluogi <strong>awdurdodi dau-gam</strong>, bydd mewngofnodi yn gofyn i chi fod a'ch ffôn gerllaw er mwyn cynhyrchu tocyn i chi gael mewnbynnu. @@ -1031,7 +1234,11 @@ cy: warning: explanation: disable: Er bod eich cyfrif wedi'i rewi, mae eich data cyfrif yn parhau i fod yn gyfan, ond ni allwch chi berfformio unrhyw gamau nes ei ddatgloi. + silence: Pan mae eich cyfrif yn gyfyngiedig, dim ond pobl sydd yn barod yn eich dilyn yn gweld eich tŵtiau ar y gweinydd hon, a efallai byddwch yn cael eich tynnu o restrau cyhoeddus. Er hyn, gall eraill eich dilyn chi wrth law. + suspend: Mae eich cyfrif wedi cael ei wahardd, a mae gyd o'ch tŵtiau a'ch ffeiliau cyfrwng uwchlwythadwy wedi cael eu tynnu or gweinydd yn barhaol, ac o weinyddau ble yr oedd eich dilynwyr. + get_in_touch: Gallwch ymateb i'r e-bost hwn i gysylltu â staff %{instance}. review_server_policies: Adolygu polisïau'r gweinydd + statuses: 'Yn benodol, ar gyfer:' subject: disable: Mae'ch cyfrif %{acct} wedi'i rewi none: Rhybudd am %{acct} @@ -1056,7 +1263,7 @@ cy: tip_federated_timeline: Mae'r ffrwd ffederasiwn yn olwg firehose o'r rhwydwaith Mastodon. Ond mae ond yn cynnwys y bobl mae eich cymdogion wedi ymrestru iddynt, felly nid yw'n gyflawn. tip_following: Rydych yn dilyn goruwchwyliwr eich gweinydd yn ddiofyn. I ganfod pobl mwy diddorol, edrychwch ar y ffrydiau lleol a'r rhai wedi ei ffedereiddio. tip_local_timeline: Mae'r ffrwd leol yn olwg firehose o bobl ar %{instance}. Dyma eich cymdogion agosaf! - tip_mobile_webapp: Os yw eich porwr gwe yn cynnig i ch ychwanegu Mastodon i'ch sgrîn gartref, mae modd i chi dderbyn hysbysiadau push. Mewn sawl modd mae'n gweithio fel ap cynhenid! + tip_mobile_webapp: Os yw eich porwr gwe yn cynnig i chi ychwanegu Mastodon i'ch sgrîn gartref, mae modd i chi dderbyn hysbysiadau gwthiadwy. Mewn sawl modd mae'n gweithio fel ap cynhenid! tips: Awgrymiadau title: Croeso, %{name}! users: diff --git a/config/locales/da.yml b/config/locales/da.yml index da6ab1054..982c712a8 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -4,23 +4,28 @@ da: about_hashtag_html: Disse er offentlige trut der indeholder tagget <strong>#%{hashtag}</strong>. Du kan interagere med dem hvis du har en konto hvor som helst i fediverset. about_mastodon_html: Mastodon er et socialt netværk der er baseret på åbne web protokoller og frit, open-source source software. Der er decentraliseret ligesom e-mail tjenester. about_this: Om + active_count_after: aktive administered_by: 'Administreret af:' + api: API apps: Apps til mobilen apps_platforms: Brug Mastodon på iOS, Android og andre platformer contact: Kontakt contact_missing: Ikke sat contact_unavailable: Ikke tilgængeligt + discover_users: Opdag brugere documentation: Dokumentation - extended_description_html: | - <h3>Et godt sted for regler</h3> - <p>Den udvidede beskrivelse er endnu ikke blevet opsat.</p> - generic_description: "%{domain} er en server i netværket" + get_apps: Prøv en mobil app hosted_on: Mostodon hostet på %{domain} learn_more: Lær mere privacy_policy: Privatlivspolitik + see_whats_happening: Se hvad der sker source_code: Kildekode + status_count_after: + one: status + other: statusser status_count_before: Som har skrevet terms: Vilkår for service + unavailable_content: Utilgængeligt indhold user_count_after: one: bruger other: brugere @@ -34,10 +39,12 @@ da: other: Følgere following: Følger joined: Tilmeldt den %{date} + last_active: sidst aktiv link_verified_on: Ejerskabet af dette link blev tjekket den %{date} media: Medier moved_html: "%{name} er flyttet til %{new_profile_link}:" network_hidden: Denne information er ikke tilgængelig + never_active: Aldrig nothing_here: Der er intet her! people_followed_by: Folk som %{name} følger people_who_follow: Folk der følger %{name} @@ -53,6 +60,7 @@ da: admin: Administrator bot: Robot moderator: Moderator + unavailable: Profil utilgængelig unfollow: Følg ikke længere admin: account_actions: @@ -63,6 +71,8 @@ da: delete: Slet destroyed_msg: Moderator notat succesfuldt destrueret! accounts: + approve: Godkend + approve_all: Godkend alle are_you_sure: Er du sikker? avatar: Profilbillede by_domain: Domæne @@ -76,6 +86,7 @@ da: confirm: Bekræft confirmed: Bekræftet confirming: Bekræfter + deleted: Slettet demote: Degrader disable: Deaktiver disable_two_factor_authentication: Deaktiver 2FA @@ -90,7 +101,9 @@ da: followers_url: Link til følgere follows: Følger inbox_url: Link til indbakke + invited_by: Inviteret af ip: IP-adresse + joined: Tilmeldt den location: all: Alle local: Lokalt @@ -100,7 +113,9 @@ da: media_attachments: Medie bilag memorialize: Omdan til et memoriam moderation: + active: Aktiv all: Alle + pending: Afventer silenced: Dæmpet suspended: Udelukket title: Moderasion @@ -116,6 +131,8 @@ da: public: Offentligt push_subscription_expires: PuSH abonnement udløber redownload: Opdater profil + reject: Afvis + reject_all: Afvis alle remove_avatar: Fjern profilbillede resend_confirmation: already_confirmed: Denne bruger er allerede blevet bekræftet @@ -132,6 +149,7 @@ da: user: Bruger salmon_url: Salmon-URL search: Søg + search_same_ip: Andre brugere med den samme IP-adresse shared_inbox_url: Link til delt indbakke show: created_reports: Anmeldelser oprettet @@ -147,15 +165,20 @@ da: undo_suspension: Fortryd udelukkelse unsubscribe: Abonner ikke længere username: Brugernavn + warn: Advar + whitelisted: Hvidlistet action_logs: actions: assigned_to_self_report: "%{name} tildelte anmeldelsen %{target} til sig selv" change_email_user: "%{name} ændrede email adressen for brugeren %{target}" confirm_user: "%{name} bekræftede %{target}s email adresse" + create_account_warning: "%{name} sendte en advarsel til %{target}" create_custom_emoji: "%{name} uploadede humørikonet %{target}" + create_domain_allow: "%{name} godkendte domænet %{target}" create_domain_block: "%{name} blokerede domænet %{target}" create_email_domain_block: "%{name} sortlistede email domænet %{target}" demote_user: "%{name} degraderede %{target}" + destroy_domain_allow: "%{name} fjernede godkendelsen af domænet %{target}" destroy_domain_block: "%{name} fjernede blokeringen af domænet %{target}" destroy_email_domain_block: "%{name} hvid-listede email domænet %{target}" destroy_status: "%{name} fjernede statussen fra %{target}" @@ -184,13 +207,16 @@ da: copied_msg: Succesfuldt oprettede en lokal kopi af humørikonet copy: Kopier copy_failed_msg: Kunne ikke oprette en lokal kopi af dette humørikon + create_new_category: Opret ny kategori created_msg: Humørikon succesfuldt oprettet! delete: Slet destroyed_msg: Emojo succesfuldt destrueret! disable: Deaktiver + disabled: Deaktiveret disabled_msg: Succesfuldt deaktiverede det humørikon emoji: Humørikon enable: Aktiver + enabled: Aktiveret enabled_msg: Succesfuldt aktiverede det humørikon image_hint: PNG op til 50KB listed: Listet @@ -209,6 +235,7 @@ da: config: Konfiguration feature_deletions: Konto sletninger feature_invites: Invitations links + feature_profile_directory: Profilliste feature_registrations: Registreringer feature_relay: Føderations relæ features: Funktioner @@ -224,6 +251,8 @@ da: week_interactions: interaktioner denne uge week_users_active: aktive denne uge week_users_new: brugere denne uge + domain_allows: + undo: Fjern fra hvidliste domain_blocks: add_new: Tilføj ny domain block created_msg: Domæne blokade bliver nu behandlet @@ -238,6 +267,8 @@ da: silence: Dæmp suspend: Udeluk title: Ny domæne blokering + private_comment: Privat kommentar + public_comment: Offentlig kommentar reject_media: Afvis medie filer reject_media_hint: Fjerner lokalt lagrede multimedie filer og nægter at hente nogen i fremtiden. Irrelevant for udelukkelser reject_reports: Afvis anmeldelser @@ -263,8 +294,18 @@ da: title: Email sortliste followers: back_to_account: Tilbage til konto + title: "%{acct}'s følgere" instances: + by_domain: Domæne + moderation: + all: Alle + limited: Begrænset + private_comment: Privat kommentar + public_comment: Offentlig kommentar title: Førderation + total_blocked_by_us: Blokeret af os + total_followed_by_them: Fulgt af dem + total_followed_by_us: Fulgt af os invites: deactivate_all: Deaktiver alle filter: @@ -286,6 +327,7 @@ da: pending: Venter på godkendelse fra relæet save_and_enable: Gem og aktiver setup: Opsæt en videresendelses forbindelse + status: Status title: Videresendelser report_notes: created_msg: Anmeldelse note blev oprettet! @@ -315,6 +357,7 @@ da: reported_by: Anmeldt af resolved: Løst resolved_msg: Anmeldelse er sat til at være løst! + status: Status title: Anmeldelser unassign: Utildel unresolved: Uløst @@ -332,6 +375,9 @@ da: custom_css: desc_html: Ændre udseendet med CSS indlæst på hver side title: Brugerdefineret CSS + domain_blocks: + all: Til alle + disabled: Til ingen hero: desc_html: Vist på forsiden. Mindst 600x100px anbefales. Hvis ikke sat, vil dette falde tilbage til billedet fra serveren title: Billede af helt @@ -351,6 +397,10 @@ da: min_invite_role: disabled: Ingen title: Tillad invitationer af + registrations_mode: + modes: + none: Ingen kan tilmelde sig + open: Alle kan tilmelde sig show_known_fediverse_at_about_page: desc_html: Når slået til, vil det vise trut fra hele det kendte fedivers på forhåndsvisning. Ellers vil det kun vise lokale trut. title: Vis kendte fedivers på tidslinje forhåndsvisning @@ -383,6 +433,7 @@ da: delete: Slet nsfw_off: Marker som værende ikke følsomt nsfw_on: Marker som værende følsomt + deleted: Slettet failed_to_execute: Udførelsen kunne ikke lade sig gøre media: title: Multimedier @@ -390,23 +441,27 @@ da: no_status_selected: Ingen statusser blev ændret eller ingen blev valgt title: Konto statusser with_media: Med multimedier - subscriptions: - callback_url: Callback-URL - confirmed: Bekræftet - expires_in: Udløber om - last_delivery: Sidste levering - title: Websub - topic: Emne tags: - accounts: Kontoer - hidden: Skjult + accounts_today: Unikke brug i dag + accounts_week: Unikke brug denne uge + context: Kontekst + last_active: Sidst aktiv + most_popular: Mest populære + most_recent: Seneste + warning_presets: + delete: Slet + edit: Rediger admin_mailer: new_report: body: "%{reporter} har anmeldt %{target}" body_remote: Nogen fra %{domain} har anmeldt %{target} subject: Ny anmeldelse for %{instance} (#%{id}) + appearance: + discovery: Opdagelse + sensitive_content: Følsomt indhold application_mailer: notification_preferences: Ændre email præferencer + salutation: "%{name}" settings: 'Ændre email præferencer: %{link}' view: 'Se:' view_profile: Se profil @@ -420,10 +475,12 @@ da: warning: Vær meget forsigtig med disse data. Del dem aldrig med nogen! your_token: Din adgangs token auth: + apply_for_account: Anmod om en invitation change_password: Kodeord - confirm_email: Bekræft email delete_account: Slet konto delete_account_html: Hvis du ønsker at slette din konto, kan du <a href="%{path}">gøre det her</a>. Du vil blive bedt om bekræftelse. + description: + prefix_sign_up: Tilmeld dig Mastodon i dag! didnt_get_confirmation: Har du endnu ikke modtaget instrukser for bekræftelse? forgot_password: Glemt dit kodeord? invalid_reset_password_token: Adgangskode nulstillings token er ugyldig eller udløbet. Anmod venligst om en ny. @@ -433,10 +490,14 @@ da: migrate_account_html: Hvis du ønsker at omdirigere denne konto til en anden, kan du <a href="%{path}">gøre det her</a>. or_log_in_with: Eller log in med register: Opret dig + registration_closed: "%{instance} accepterer ikke nye medlemmer" resend_confirmation: Gensend bekræftelses instrukser reset_password: Nulstil kodeord security: Sikkerhed set_new_password: Sæt et nyt kodeord + status: + account_status: Kontostatus + trouble_logging_in: Har du problemer med at logge på? authorize_follow: already_following: Du følger allerede denne konto error: Der opstod desværre en fejl under søgningen af denne fjerne konto @@ -448,6 +509,10 @@ da: return: Vis brugerens profil web: Gå til web title: Følg %{acct} + challenge: + confirm: Fortsæt + invalid_password: Ugyldig adgangskode + prompt: Bekræft din adgangskode for at fortsætte datetime: distance_in_words: about_x_hours: "%{count}t" @@ -459,16 +524,20 @@ da: over_x_years: "%{count}år" x_months: "%{count}md" deletes: - bad_password_msg: Godt forsøg, hackere! Forkert kodeord confirm_password: Indtast dit nuværende kodeord for at bekræfte din identitet - description_html: Dette vil <strong>permanent, uigenkaldeligt</strong> fjerne indhold fra din konto samt deaktivere den. Dit brugernavn vil forblive reserveret for at forhindre fremtidige efterligninger. proceed: Slet konto success_msg: Din konto er nu blevet slettet - warning_html: Kun sletning af indhold fra denne specifikke server er garanteret. Indhold der er blevet delt rundt omkring vil sandsynligvis efterlade spor. Offline servere og servere der ikke længere abonnerer på dine opdateringer vil ikke opdatere deres databaser. - warning_title: Tilgængelighed af delt indhold + warning: + username_available: Dit brugernavn vil blive tilgængeligt igen + username_unavailable: Dit brugernavn vil forblive utilgængeligt + directories: + directory: Profilliste + explore_mastodon: Uforsk %{title} errors: + '400': The request you submitted was invalid or malformed. '403': Du har ikke tilladelse til at se denne side. '404': Den side du leder efter findes ikke. + '406': This page is not available in the requested format. '410': Den side du leder efter findes ikke mere. '422': content: Sikkerhedsbekræftelse mislykkedes. Blokerer du cookies? @@ -477,7 +546,11 @@ da: '500': content: Beklager men der gik noget galt i vores ende. title: Siden er ikke korrekt + '503': The page could not be served due to a temporary server failure. noscript_html: For at bruge Mastodon web applikationen, aktiver JavaScript. Alternativt kan du prøve en af disse <a href="%{apps_path}">apps</a> til Mastodon for din platform. + existing_username_validator: + not_found: kunne ikke finde en lokal bruger med dette brugenavn + not_found_multiple: kunne ikke finde %{usernames} exports: archive_takeout: date: Dato @@ -487,7 +560,9 @@ da: request: Anmod om dit arkiv size: Størrelse blocks: Du blokerer + csv: CSV follows: Du følger + lists: Lister mutes: Du dæmper storage: Medie lager filters: @@ -510,14 +585,22 @@ da: developers: Udviklere more: Mere… resources: Ressourcer + trending_now: Hot lige nu generic: + all: Alle changes_saved_msg: Ændringerne blev gemt! copy: Kopier + order_by: Sorter efter save_changes: Gem ændringer validation_errors: one: Der er noget der ikke er helt som det bør være! Tag lige et kig på følgende fejl forneden other: Der er noget der ikke er helt som det bør være! Tag lige et kig på følgende %{count} fejl forneden + identity_proofs: + i_am_html: Jeg er %{username} på %{service}. + identity: Identitet imports: + modes: + overwrite: Overskriv preface: Du kan importere data du har eksporteret fra en anden server, så som en liste over folk du følger eller blokerer. success: Dine data blev succesfuldt uploaded og vil nu blive behandlet hurtigst muligt types: @@ -557,9 +640,9 @@ da: too_many: Kan ikke vedhæfte mere en 4 filer migrations: acct: username@domain af den nye konto - currently_redirecting: 'Din profil er sat til at henvise til:' - proceed: Gem - updated_msg: Dine konti migrærings indstillinger blev opdateret! + errors: + not_found: kunne ikke bive fundet + proceed_with_move: Flyt følgere moderation: title: Moderatering notification_mailer: @@ -608,20 +691,33 @@ da: older: Ældre prev: Forrige truncate: "...…" + polls: + errors: + already_voted: Du har allerede stemt i denne afstemning + duration_too_long: er for langt ude i fremtiden + duration_too_short: er for tidligy + expired: Denne afstemning er allerede afsluttet preferences: other: Andet + public_timelines: Offentlige tidslinjer + relationships: + activity: Aktivitet for konto + last_active: Sidst aktiv + most_recent: Seneste + moved: Flyttet + mutual: Fælles + primary: Primær + relationship: Relation + status: Status for konto remote_follow: acct: Indtast dit brugernavn@domæne du vil handle fra missing_resource: Kunne ikke finde det påkrævede omdirigerings link for din konto no_account_html: Har du ikke en konto? Du kan <a href='%{sign_up_path}' target='_blank'>oprette dig her</a> proceed: Fortsæt for at følge prompt: 'Du er ved at følge:' - remote_unfollow: - error: Fejl - title: Titel - unfollowed: Følger ikke længere sessions: activity: Sidste aktivitet + browser: Browser browsers: alipay: Ali-pay blackberry: Blackberry OS @@ -643,11 +739,15 @@ da: current_session: Nuværrende session description: "%{browser} på %{platform}" explanation: Disse er de web browsere der på nuværende tidspunkt er logget ind på din Mastodon konto. + ip: IP platforms: adobe_air: Adobe air + android: Android blackberry: Blackberry OS chrome_os: Chromeos firefox_os: Firefox Os + ios: iOS + linux: Linux mac: Mac. other: ukendt platform windows: Microsoft windows @@ -657,6 +757,9 @@ da: revoke_success: Sessionen blev tilbagekaldt title: Sessioner settings: + account: Konto + account_settings: Kontoindstillinger + appearance: Udseende authorized_apps: Godkendte apps back: Tilbage til Mastodon delete: Sletning af konto @@ -664,9 +767,12 @@ da: edit_profile: Rediger profil export: Data eksportering import: Importer + import_and_export: Importer og eksporter migrate: Konto migrering notifications: Notifikationer preferences: Præferencer + profile: Profil + relationships: Følger og følgere two_factor_authentication: To-faktor godkendelse statuses: attached: @@ -674,6 +780,9 @@ da: image: one: "%{count} billede" other: "%{count} billeder" + video: + one: "%{count} video" + other: "%{count} videoer" boosted_from_html: Fremhævet fra %{acct_link} content_warning: 'Advarsel om indhold: %{warning}' disallowed_hashtags: @@ -687,6 +796,8 @@ da: ownership: Du kan ikke fastgøre en anden persons trut private: Ikke offentlige trut kan ikke blive fastgjort reblog: Fremhævede trut kan ikke fastgøres + poll: + vote: Stem show_more: Vis mere sign_in_to_participate: Log ind for at deltage i samtalen visibilities: @@ -728,6 +839,9 @@ da: explanation: Din anmodning for fuld backup af din Mastodon konto. Den er nu klar til at blive hentet! subject: Dit arkiv er klar til at blive hentet ned title: Udpluk af arkiv + warning: + title: + none: Advarsel welcome: edit_profile_action: Opsæt profil edit_profile_step: Du kan skræddersy din profil ved at uploade et profilbillede, overskrift, ændre dit visningsnavn og mere. Hvis du kunne tænke dig at gennemse nye følgere før de må følge dig, kan du låse din konto. @@ -751,3 +865,5 @@ da: otp_lost_help_html: Hvis du har mistet adgang til begge, kan du få kontakt via %{email} seamless_external_login: Du er logget ind via en ekstern service, så er kodeord og e-mail indstillinger ikke tilgængelige. signed_in_as: 'Logget ind som:' + verification: + verification: Verificering diff --git a/config/locales/de.yml b/config/locales/de.yml index cfdaacab0..490ee947e 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -5,25 +5,25 @@ de: about_mastodon_html: Mastodon ist ein soziales Netzwerk. Es basiert auf offenen Web-Protokollen und freier, quelloffener Software. Es ist dezentral (so wie E-Mail!). about_this: Über diesen Server active_count_after: aktiv - active_footnote: Monatlich Aktive Nutzer_innen (MAU) + active_footnote: Monatlich Aktive User (MAU) administered_by: 'Betrieben von:' api: API apps: Mobile Apps apps_platforms: Benutze Mastodon auf iOS, Android und anderen Plattformen browse_directory: Durchsuche das Profilverzeichnis und filtere nach Interessen + browse_local_posts: Durchsuche einen Live-Stream von öffentlichen Beiträgen von diesem Server browse_public_posts: Stöbere durch öffentliche Beiträge auf Mastodon contact: Kontakt contact_missing: Nicht angegeben contact_unavailable: Nicht verfügbar - discover_users: Benutzer_innen entdecken + discover_users: Benutzer entdecken documentation: Dokumentation - extended_description_html: | - <h3>Ein hervorragender Ort für Regeln</h3> - <p>Die erweiterte Beschreibung wurde von dem Administrator noch nicht eingestellt.</p> - federation_hint_html: Mit einem Konto auf %{instance} wirst du in der Lage sein Nutzer_innen auf beliebigen Mastodon-Servern und darüber hinaus zu folgen. - generic_description: "%{domain} ist ein Server im Fediversum" + federation_hint_html: Mit einem Account auf %{instance} wirst du in der Lage sein Nutzern auf irgendeinem Mastodon-Server und darüber hinaus zu folgen. get_apps: Versuche eine mobile App hosted_on: Mastodon, gehostet auf %{domain} + instance_actor_flash: | + Dieses Konto ist ein virtueller Akteur, der den Server selbst und nicht einen einzelnen Benutzer repräsentiert. + Dieser wird für Föderationszwecke verwendet und sollte nicht blockiert werden, es sei denn du möchtest die gesamte Instanz blockieren. learn_more: Mehr erfahren privacy_policy: Datenschutzerklärung see_whats_happening: Finde heraus, was gerade in der Welt los ist @@ -35,6 +35,14 @@ de: status_count_before: mit tagline: Finde deine Freunde und entdecke neue terms: Nutzungsbedingungen + unavailable_content: Nicht verfügbarer Inhalt + unavailable_content_description: + domain: Server + reason: 'Grund:' + rejecting_media: Mediendateien dieses Servers werden nicht verarbeitet und keine Thumbnails werden angezeigt, was manuelles anklicken auf den anderen Server erfordert. + silenced: Beiträge von diesem Server werden nirgends angezeigt, außer in deiner Startseite, wenn du der Person folgst, die den Beitrag verfasst hat. + suspended: Du kannst niemanden von diesem Server folgen, und keine Daten werden verarbeitet oder gespeichert und keine Daten ausgetauscht. + unavailable_content_html: Mastodon erlaubt es dir generell, mit Inhalten zu interagieren, diese anzuzeigen und mit anderen Nutzern im Fediversum über Server hinweg zu interagieren. Dies sind die Ausnahmen, die auf diesem bestimmten Server gemacht wurden. user_count_after: one: Profil other: Profile @@ -42,10 +50,12 @@ de: what_is_mastodon: Was ist Mastodon? accounts: choices_html: "%{name} empfiehlt:" + endorsements_hint: Du kannst Personen, denen du über die Weboberfläche folgst, auswählen, und sie werden hier angezeigt. + featured_tags_hint: Du kannst spezifische Hashtags, die hier angezeigt werden, angeben. follow: Folgen followers: - one: Folger_innen - other: Folger_innen + one: Folgender + other: Folgende following: Folgt joined: Beigetreten am %{date} last_active: zuletzt aktiv @@ -53,6 +63,7 @@ de: media: Medien moved_html: "%{name} ist auf %{new_profile_link} umgezogen:" network_hidden: Diese Informationen sind nicht verfügbar + never_active: Nie nothing_here: Hier gibt es nichts! people_followed_by: Profile, denen %{name} folgt people_who_follow: Profile, die %{name} folgen @@ -108,8 +119,8 @@ de: enable: Freischalten enabled: Freigegeben feed_url: Feed-URL - followers: Folger_innen - followers_url: URL der Folger_innen + followers: Folgende + followers_url: URL des Folgenden follows: Folgt header: Titelbild inbox_url: Posteingangs-URL @@ -165,6 +176,7 @@ de: user: Nutzer salmon_url: Salmon-URL search: Suche + search_same_ip: Andere Benutzer mit derselben IP shared_inbox_url: Geteilte Posteingang-URL show: created_reports: Erstellte Meldungen @@ -183,6 +195,7 @@ de: username: Profilname warn: Warnen web: Web + whitelisted: Auf der Whitelist action_logs: actions: assigned_to_self_report: "%{name} hat sich die Meldung %{target} selbst zugewiesen" @@ -218,19 +231,24 @@ de: deleted_status: "(gelöschter Beitrag)" title: Überprüfungsprotokoll custom_emojis: + assign_category: Kategorie zuweisen by_domain: Domain copied_msg: Eine lokale Kopie des Emojis wurde erstellt copy: Kopieren copy_failed_msg: Es konnte keine lokale Kopie des Emojis erstellt werden + create_new_category: Neue Kategorie erstellen created_msg: Emoji erstellt! delete: Löschen destroyed_msg: Emoji gelöscht! disable: Deaktivieren + disabled: Deaktiviert disabled_msg: Das Emoji wurde deaktiviert emoji: Emoji enable: Aktivieren + enabled: Aktiviert enabled_msg: Das Emoji wurde aktiviert image_hint: PNG bis zu 50 kB + list: Liste listed: Gelistet new: title: Eigenes Emoji hinzufügen @@ -238,11 +256,14 @@ de: shortcode: Kürzel shortcode_hint: Mindestens 2 Zeichen, nur Buchstaben, Ziffern und Unterstriche title: Eigene Emojis + uncategorized: Nicht kategorisiert + unlist: Nicht listen unlisted: Ungelistet update_failed_msg: Konnte dieses Emoji nicht aktualisieren updated_msg: Emoji erfolgreich aktualisiert! upload: Hochladen dashboard: + authorized_fetch_mode: Autorisierter Abruf-Modus backlog: Rückständige Jobs config: Konfiguration feature_deletions: Kontolöschung @@ -250,26 +271,36 @@ de: feature_profile_directory: Profilverzeichnis feature_registrations: Offene Anmeldung feature_relay: Föderationsrelais + feature_spam_check: Anti-Spam feature_timeline_preview: Zeitleistenvorschau features: Funktionen hidden_service: Föderation mit versteckten Diensten open_reports: Ausstehende Meldungen + pending_tags: Hashtags, die auf eine Überprüfung warten + pending_users: Benutzer, die auf eine Überprüfung warten recent_users: Neueste Nutzer search: Volltextsuche single_user_mode: Einzelnutzermodus software: Software space: Speicherverbrauch title: Übersicht - total_users: Benutzer_innen insgesamt + total_users: Benutzer insgesamt trends: Trends week_interactions: Interaktionen diese Woche week_users_active: Aktiv diese Woche - week_users_new: Benutzer_innen diese Woche + week_users_new: Benutzer diese Woche + whitelist_mode: Whitelist-Modus + domain_allows: + add_new: Whitelist-Domain + created_msg: Domain wurde erfolgreich zur Whitelist hinzugefügt + destroyed_msg: Domain wurde von der Whitelist entfernt + undo: Von der Whitelist entfernen domain_blocks: add_new: Neue Domainblockade hinzufügen created_msg: Die Domain-Blockade wird nun durchgeführt destroyed_msg: Die Domain-Blockade wurde rückgängig gemacht domain: Domain + edit: Domainblockade bearbeiten existing_domain_block_html: Es gibt schon eine Blockade für %{name}, diese muss erst <a href="%{unblock_url}">aufgehoben</a> werden. new: create: Blockade einrichten @@ -280,6 +311,10 @@ de: silence: Stummschaltung suspend: Sperre title: Neue Domain-Blockade + private_comment: Privater Kommentar + private_comment_hint: Kommentar zu dieser Domain-Beschränkung für die interne Nutzung durch die Moderatoren. + public_comment: Öffentlicher Kommentar + public_comment_hint: Kommentar zu dieser Domain-Beschränkung für die allgemeine Öffentlichkeit, wenn das Veröffentlichen der Blockliste aktiviert ist. reject_media: Mediendateien ablehnen reject_media_hint: Entfernt lokal gespeicherte Mediendateien und verhindert deren künftiges Herunterladen. Für Sperren irrelevant reject_reports: Meldungen ablehnen @@ -299,6 +334,7 @@ de: title: Domain-Blockade für %{domain} zurücknehmen undo: Zurücknehmen undo: Domainblockade zurücknehmen + view: Zeige Domain-Blockade email_domain_blocks: add_new: Neue hinzufügen created_msg: E-Mail-Domain-Blockade erfolgreich erstellt @@ -311,7 +347,7 @@ de: title: E-Mail-Domain-Blockade followers: back_to_account: Zurück zum Konto - title: "%{acct}'s Folger_innen" + title: "%{acct}'s Follower" instances: by_domain: Domain delivery_available: Zustellung funktioniert @@ -322,6 +358,8 @@ de: all: Alle limited: Beschränkt title: Moderation + private_comment: Privater Kommentar + public_comment: Öffentlicher Kommentar title: Föderation total_blocked_by_us: Von uns blockiert total_followed_by_them: Gefolgt von denen @@ -351,6 +389,7 @@ de: pending: Warte auf Zustimmung des Relays save_and_enable: Speichern und aktivieren setup: Relaisverbindung einrichten + signatures_not_enabled: Relais funktionieren nicht korrekt, während der sichere Modus oder der Whitelist-Modus aktiviert ist status: Zustand title: Relais report_notes: @@ -399,6 +438,16 @@ de: custom_css: desc_html: Verändere das Aussehen mit CSS, dass auf jeder Seite geladen wird title: Benutzerdefiniertes CSS + default_noindex: + desc_html: Beeinflusst alle Benutzer, die diese Einstellung nicht selbst geändert haben + title: Benutzer aus Suchmaschinen-Indizierung standardmäßig herausnehmen + domain_blocks: + all: An alle + disabled: An niemanden + title: Zeige Domain-Blockaden + users: Für angemeldete lokale Benutzer + domain_blocks_rationale: + title: Rationale anzeigen hero: desc_html: Wird auf der Startseite angezeigt. Mindestens 600x100px sind empfohlen. Wenn es nicht gesetzt wurde, wird das Server-Thumbnail dafür verwendet title: Bild für Einstiegsseite @@ -449,6 +498,9 @@ de: desc_html: Hier kannst du deine eigenen Geschäftsbedingungen, Datenschutzerklärung und anderes rechtlich Relevante eintragen. Du kannst HTML-Tags nutzen title: Benutzerdefinierte Geschäftsbedingungen site_title: Name des Servers + spam_check_enabled: + desc_html: Mastodon kann automatisch Server stummschalten und automatisch Konten melden basierend auf Maßnahmen wie die Erkennung von Konten, die wiederholt unerwünschte Nachrichten senden. Es können hierbei mögliche Probleme auftreten. + title: Anti-Spam thumbnail: desc_html: Wird für die Vorschau via OpenGraph und API verwendet. 1200×630 px wird empfohlen title: Vorschaubild des Servers @@ -456,12 +508,19 @@ de: desc_html: Auf der Einstiegsseite die öffentliche Zeitleiste anzeigen title: Zeitleisten-Vorschau title: Server-Einstellungen + trendable_by_default: + desc_html: Betroffene Hashtags, die bisher nicht gesperrt wurden + title: Hashtags ohne vorherige Überprüfung erlauben zu trenden + trends: + desc_html: Zuvor überprüfte Hashtags öffentlich anzeigen, die derzeit angesagt sind + title: Trendende Hashtags statuses: back_to_account: Zurück zum Konto batch: delete: Löschen nsfw_off: Als nicht heikel markieren nsfw_on: Als heikel markieren + deleted: Gelöscht failed_to_execute: Ausführen fehlgeschlagen media: title: Medien @@ -469,21 +528,24 @@ de: no_status_selected: Keine Beiträge wurden geändert, weil keine ausgewählt wurden title: Beiträge des Kontos with_media: Mit Medien - subscriptions: - callback_url: Callback-URL - confirmed: Bestätigt - expires_in: Verfällt in - last_delivery: Letzte Zustellung - title: WebSub - topic: Thema tags: - accounts: Konten - hidden: Versteckt - hide: Vom Profilverzeichnis verstecken + accounts_today: Einzigartige Nutzungen heute + accounts_week: Einzigartige Nutzung dieser Woche + breakdown: Heruntergebrochene Statistiken der heutigen Nutzung nach Quelle + context: Kontext + directory: Im Verzeichnis + in_directory: "%{count} im Verzeichnis" + last_active: Zuletzt aktiv + most_popular: Am beliebtesten + most_recent: Neuste name: Hashtag + review: Prüfstatus + reviewed: Überprüft title: Hashtags - unhide: Zeige in Verzeichnis - visible: Sichtbar + trending_right_now: Aktuell in den Trends + unique_uses_today: "%{count} Beiträge heute" + unreviewed: Nicht überprüft + updated_msg: Hashtageinstellungen wurden erfolgreich aktualisiert title: Administration warning_presets: add_new: Neu hinzufügen @@ -499,12 +561,23 @@ de: body: "%{reporter} hat %{target} gemeldet" body_remote: Jemand von %{domain} hat %{target} gemeldet subject: Neue Meldung auf %{instance} (#%{id}) + new_trending_tag: + body: 'Der Hashtag #%{name} ist heute am trenden, aber wurde vorher noch nicht überprüft. Er wird nicht öffentlich angezeigt, es sei denn du erlaubst es oder speicherst das Formular ab und vergisst es.' + subject: Neuer Hashtag zur Überprüfung auf %{instance} verfügbar (#%{name}) + aliases: + add_new: Alias erstellen + created_msg: Ein neuer Alias wurde erfolgreich erstellt. Du kannst nun den Wechsel vom alten Konto starten. + deleted_msg: Der Alias wurde erfolgreich entfernt. Aus diesem Konto zu diesem zu verschieben ist nicht mehr möglich. + hint_html: Wenn du von einem Konto zu einem anderem Konto wechseln möchtest, dann kannst du einen Alias erstellen, welcher benötigt wird bevor du deine Folgenden vom altem Account zu diesen migrierst. Die Aktion alleine ist <strong>harmlos und widerruflich</strong>. <strong>Die Kontenmigration wird vom altem Konto aus eingeleitet</strong>. + remove: Alle Aliase aufheben appearance: advanced_web_interface: Fortgeschrittene Benutzeroberfläche advanced_web_interface_hint: Wenn du mehr aus deiner Bildschirmbreite herausholen möchtest, erlaubt dir die fortgeschrittene Benutzeroberfläche viele unterschiedliche Spalten auf einmal zu sehen, wie z.B. deine Startseite, Benachrichtigungen, das gesamte bekannte Netz, deine Listen und beliebige Hashtags. animations_and_accessibility: Animationen und Barrierefreiheit confirmation_dialogs: Bestätigungsfenster + discovery: Entdecken sensitive_content: Heikle Inhalte + toot_layout: Beitragslayout application_mailer: notification_preferences: Ändere E-Mail-Einstellungen salutation: "%{name}," @@ -524,9 +597,13 @@ de: apply_for_account: Eine Einladung anfragen change_password: Passwort checkbox_agreement_html: Ich akzeptiere die <a href="%{rules_path}" target="_blank">Server-Regeln</a> und die <a href="%{terms_path}" target="_blank">Nutzungsbedingungen</a> - confirm_email: E-Mail bestätigen + checkbox_agreement_without_rules_html: Ich stimme den <a href="%{terms_path}" target="_blank">Nutzungsbedingungen</a> zu delete_account: Konto löschen delete_account_html: Falls du dein Konto löschen willst, kannst du <a href="%{path}">hier damit fortfahren</a>. Du wirst um Bestätigung gebeten werden. + description: + prefix_invited_by_user: "@%{name} lädt dich ein, diesem Server von Mastodon beizutreten!" + prefix_sign_up: Melde dich heute bei Mastodon an! + suffix: Mit einem Konto kannst du Leuten folgen, Updates veröffentlichen und Nachrichten mit Benutzern von jedem Mastodon-Server austauschen und mehr! didnt_get_confirmation: Keine Bestätigungs-Mail erhalten? forgot_password: Passwort vergessen? invalid_reset_password_token: Das Token zum Zurücksetzen des Passworts ist ungültig oder abgelaufen. Bitte fordere ein neues an. @@ -544,6 +621,16 @@ de: reset_password: Passwort zurücksetzen security: Sicherheit set_new_password: Neues Passwort setzen + setup: + email_below_hint_html: Wenn die unten stehende E-Mail-Adresse falsch ist, kannst du sie hier ändern und eine neue Bestätigungs-E-Mail erhalten. + email_settings_hint_html: Die Bestätigungs-E-Mail wurde an %{email} gesendet. Wenn diese E-Mail-Adresse nicht korrekt ist, kannst du sie in den Einstellungen ändern. + title: Konfiguration + status: + account_status: Kontostatus + confirming: Warte auf die Bestätigung der E-Mail. + functional: Dein Konto ist voll funktionsfähig. + pending: Deine Bewerbung wird von unseren Mitarbeitern noch überprüft. Dies kann einige Zeit dauern. Du erhältst eine E-Mail, wenn deine Bewerbung genehmigt wurde. + redirecting_to: Dein Konto ist inaktiv, da es derzeit zu %{acct} umgeleitet wird. trouble_logging_in: Schwierigkeiten beim Anmelden? authorize_follow: already_following: Du folgst diesem Konto bereits @@ -556,6 +643,11 @@ de: return: Zeige das Profil web: In der Benutzeroberfläche öffnen title: "%{acct} folgen" + challenge: + confirm: Fortfahren + hint_html: "<strong>Hinweis:</strong> Wir werden dich für die nächste Stunde nicht erneut nach deinem Passwort fragen." + invalid_password: Ungültiges Passwort + prompt: Gib dein Passwort ein um fortzufahren datetime: distance_in_words: about_x_hours: "%{count}h" @@ -571,26 +663,33 @@ de: x_months: "%{count}mo" x_seconds: "%{count}s" deletes: - bad_password_msg: Falsches Passwort + challenge_not_passed: Die eingegebenen Informationen waren nicht korrekt confirm_password: Gib dein derzeitiges Passwort ein, um deine Identität zu bestätigen - description_html: Hiermit wird <strong>dauerhaft und unwiederbringlich</strong> der Inhalt deines Kontos gelöscht und dein Konto deaktiviert. Dein Profilname wird reserviert, um künftige Imitationen zu verhindern. + confirm_username: Gib deinen Benutzernamen ein, um das Verfahren zu bestätigen proceed: Konto löschen success_msg: Dein Konto wurde erfolgreich gelöscht - warning_html: Wir können nur dafür garantieren, dass die Inhalte auf diesem einen Server gelöscht werden. Bei Inhalten, die weit verbreitet wurden, ist es wahrscheinlich, dass Spuren bleiben werden. Server, die offline sind oder keine Benachrichtigungen von deinem Konto mehr empfangen, werden ihre Datenbanken nicht bereinigen. - warning_title: Verfügbarkeit verstreuter Inhalte + warning: + before: 'Bevor du fortfährst, lese bitte diese Punkte sorgfältig durch:' + caches: Inhalte, die von anderen Servern zwischengespeichert wurden, können weiterhin bestehen + data_removal: Deine Beiträge und andere Daten werden dauerhaft entfernt + email_change_html: Du kannst <a href="%{path}">deine E-Mail-Adresse ändern</a>, ohne dein Konto zu löschen + email_contact_html: Wenn die Bestätigungs-E-Mail immer noch nicht ankam, kannst du eine E-Mail an <a href="mailto:%{email}">%{email}</a> senden, um weitere Hilfe zu erhalten + email_reconfirmation_html: Wenn du die Bestätigungs-E-Mail nicht erhalten hast, kannst du sie <a href="%{path}">erneut anfordern</a> + irreversible: Du kannst dein Konto nicht reaktivieren + more_details_html: Weitere Details findest du in der <a href="%{terms_path}">Datenschutzrichtlinie</a>. + username_available: Dein Benutzername wird wieder verfügbar + username_unavailable: Dein Benutzername bleibt nicht verfügbar directories: directory: Profilverzeichnis - enabled: Du bist gerade in dem Verzeichnis gelistet. - enabled_but_waiting: Du bist damit einverstanden im Verzeichnis aufgelistet zu werden, aber du hast noch nicht genug Folger_innen (%{min_followers}). - explanation: Entdecke Benutzer_innen basierend auf deren Interessen + explanation: Entdecke Benutzer basierend auf deren Interessen explore_mastodon: Entdecke %{title} - how_to_enable: Du hast dich gerade nicht dazu entschieden im Verzeichnis gelistet zu werden. Du kannst dich unten dafür eintragen. Benutze Hashtags in deiner Profilbeschreibung, um unter spezifischen Hashtags gelistet zu werden! - people: - one: "%{count} Person" - other: "%{count} Leute" + domain_validator: + invalid_domain: ist kein gültiger Domain-Name errors: + '400': Die Anfrage, die du gesendet hast, war ungültig oder fehlerhaft. '403': Dir fehlt die Befugnis, diese Seite sehen zu können. '404': Die Seite nach der du gesucht hast wurde nicht gefunden. + '406': Diese Seite ist im gewünschten Format nicht verfügbar. '410': Die Seite nach der du gesucht hast existiert hier nicht mehr. '422': content: Sicherheitsüberprüfung fehlgeschlagen. Blockierst du Cookies? @@ -599,6 +698,7 @@ de: '500': content: Bitte verzeih, etwas ist bei uns schief gegangen. title: Diese Seite ist kaputt + '503': Die Seite konnte wegen eines temporären Serverfehlers nicht angezeigt werden. noscript_html: Bitte aktiviere JavaScript, um die Mastodon-Web-Anwendung zu verwenden. Alternativ kannst du auch eine der <a href="%{apps_path}">nativen Mastodon-Anwendungen</a> für deine Plattform probieren. existing_username_validator: not_found: kann lokalen Benutzer nicht mit diesem Nuternamen finden @@ -622,6 +722,7 @@ de: add_new: Neu hinzufügen errors: limit: Du hast bereits die maximale Anzahl an empfohlenen Hashtags erreicht + hint_html: "<strong>Was sind empfohlene Hashtags?</strong> Sie werden in deinem öffentlichen Profil deutlich angezeigt und ermöglichen es den Menschen, deine öffentlichen Beiträge speziell unter diesen Hashtags zu durchsuchen. Sie sind ein großartiges Werkzeug, um kreative Werke oder langfristige Projekte zu verfolgen." filters: contexts: home: Startseite @@ -642,10 +743,12 @@ de: developers: Entwickler more: Mehr… resources: Ressourcen + trending_now: In den Trends generic: all: Alle changes_saved_msg: Änderungen gespeichert! copy: Kopieren + no_batch_actions_available: Keine Massenaktionen auf dieser Seite verfügbar order_by: Sortieren nach save_changes: Änderungen speichern validation_errors: @@ -717,9 +820,34 @@ de: too_many: Es können nicht mehr als 4 Dateien angehängt werden migrations: acct: benutzername@domain des neuen Kontos - currently_redirecting: 'Deine Profilweiterleitung wurde gesetzt auf:' - proceed: Speichern - updated_msg: Deine Konto-Migrationseinstellungen wurden erfolgreich aktualisiert! + cancel: Umleitung abbrechen + cancel_explanation: Das Abbrechen der Umleitung wird dein aktuelles Konto erneut aktivieren, aber keine Folgenden, die auf dieses Konto verschoben wurden, zurückholen. + cancelled_msg: Die Umleitung wurde erfolgreich abgebrochen. + errors: + already_moved: ist das gleiche Konto, zu dem du bereits umgezogen bist + missing_also_known_as: referenziert nicht zurück auf dieses Konto + move_to_self: darf nicht das aktuelles Konto sein + not_found: kann nicht gefunden werden + on_cooldown: Die Abklingzeit läuft gerade + followers_count: Folgende zur Zeit des Verschiebens + incoming_migrations: Ziehe von einem anderen Konto um + incoming_migrations_html: Um von einem anderen Konto zu diesem zu wechseln, musst du zuerst <a href="%{path}">einen Kontoalias</a> erstellen. + moved_msg: Dein Konto wird jetzt zu %{acct} weitergeleitet und deine Folgende werden verschoben. + not_redirecting: Dein Konto wird derzeit nicht auf ein anderes Konto weitergeleitet. + on_cooldown: Du hast dein Konto vor kurzem migriert. Diese Funktion wird in %{count} Tagen wieder verfügbar sein. + past_migrations: Vorherige Migrationen + proceed_with_move: Folgende verschieben + redirecting_to: Dein Konto wird zu %{acct} weitergeleitet. + set_redirect: Umleitung einrichten + warning: + backreference_required: Das neue Konto muss zuerst so konfiguriert werden, dass es auf das alte Konto referenziert + before: 'Bevor du fortfährst, lese bitte diese Hinweise sorgfältig durch:' + cooldown: Nach dem Migrieren wird es eine Abklingzeit geben, in der du das Konto nicht noch einmal migrieren kannst + disabled_account: Dein aktuelles Konto wird nachher nicht vollständig nutzbar sein. Du hast jedoch Zugriff auf den Datenexport sowie die Reaktivierung. + followers: Diese Aktion wird alle Folgende vom aktuellen Konto auf das neue Konto verschieben + only_redirect_html: Alternativ kannst du <a href="%{path}">nur eine Weiterleitung auf dein Profil</a> erstellen. + other_data: Keine anderen Daten werden automatisch verschoben + redirect: Das Profil deines aktuellen Kontos wird mit einer Weiterleitungsnachricht versehen und von Suchanfragen ausgeschlossen moderation: title: Moderation notification_mailer: @@ -816,10 +944,6 @@ de: reply: proceed: Fortfahren zum Antworten prompt: 'Du möchtest auf diesen Beitrag antworten:' - remote_unfollow: - error: Fehler - title: Titel - unfollowed: Entfolgt scheduled_statuses: over_daily_limit: Du hast das Limit für geplante Beiträge, dass %{limit} beträgt, für heute erreicht over_total_limit: Du hast das Limit für geplante Beiträge, dass %{limit} beträgt, erreicht @@ -868,6 +992,7 @@ de: settings: account: Konto account_settings: Konto & Sicherheit + aliases: Kontoaliase appearance: Aussehen authorized_apps: Autorisierte Anwendungen back: Zurück zu Mastodon @@ -883,8 +1008,10 @@ de: notifications: Benachrichtigungen preferences: Einstellungen profile: Profil - relationships: Folger_innen und Gefolgte + relationships: Folgende und Gefolgte two_factor_authentication: Zwei-Faktor-Auth + spam_check: + spam_detected: Dies ist ein automatisierter Bericht. Es wurde Spam erkannt. statuses: attached: description: 'Angehängt: %{attached}' @@ -908,6 +1035,9 @@ de: private: Du kannst nur öffentliche Beiträge anheften reblog: Du kannst keine geteilten Beiträge anheften poll: + total_people: + one: "%{count} Person" + other: "%{count} Personen" total_votes: one: "%{count} Stimme" other: "%{count} Stimmen" @@ -926,15 +1056,17 @@ de: pinned: Angehefteter Beitrag reblogged: teilte sensitive_content: Heikle Inhalte + tags: + does_not_match_previous_name: entspricht nicht dem vorherigen Namen terms: body_html: | <h2>Datenschutzerklärung</h2> <h3 id="collect">Welche Informationen sammeln wir?</h3> <ul> - <li><em>Grundlegende Kontoinformationen</em>: Wenn du dich auf diesem Server registrierst, wirst du darum gebeten, einen Benutzer:innen-Namen, eine E-Mail-Adresse und ein Passwort einzugeben. Du kannst auch zusätzliche Profilinformationen wie etwa einen Anzeigenamen oder eine Biografie eingeben und ein Profilbild oder ein Headerbild hochladen. Der Benutzer:innen-Name, der Anzeigename, die Biografie, das Profilbild und das Headerbild werden immer öffentlich angezeigt.</li> + <li><em>Grundlegende Kontoinformationen</em>: Wenn du dich auf diesem Server registrierst, wirst du darum gebeten, einen Benutzernamen, eine E-Mail-Adresse und ein Passwort einzugeben. Du kannst auch zusätzliche Profilinformationen wie etwa einen Anzeigenamen oder eine Biografie eingeben und ein Profilbild oder ein Headerbild hochladen. Der Benutzername, der Anzeigename, die Biografie, das Profilbild und das Headerbild werden immer öffentlich angezeigt.</li> <li><em>Beiträge, Folge- und andere öffentliche Informationen</em>: Die Liste der Leute, denen du folgst, wird öffentlich gezeigt, das gleiche gilt für deine Folgenden (Follower). Sobald du eine Nachricht übermittelst, wird das Datum und die Uhrzeit gemeinsam mit der Information, welche Anwendung du dafür verwendet hast, gespeichert. Nachricht können Medienanhänge enthalten, etwa Bilder und Videos. Öffentliche und ungelistete Beiträge sind öffentlich verfügbar. Sobald du einen Beitrag auf deinem Profil anpinnst, sind dies auch öffentlich verfügbare Informationen. Deine Beiträge werden an deine Folgenden ausgeliefert, was in manchen Fällen bedeutet, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Sobald du Beiträge löschst, wird dies ebenso an deine Follower ausgeliefert. Die Handlungen des Teilens und Favorisieren eines anderen Beitrages ist immer öffentlich.</li> - <li><em>Direkte und "Nur Folgende"-Beiträge</em>: Alle Beiträge werden auf dem Server gespeichert und verarbeitet. "Nur Folgende"-Beiträge werden an deine Folgenden und an Benutzer:innen, die du in ihnen erwähnst, ausgeliefert, direkte Beiträge nur an in ihnen erwähnte Benutzer:innen. In manchen Fällen bedeutet dass, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Wir bemühen uns nach bestem Wissen und Gewissen, den Zugriff auf diese Beiträge auf nur autorisierte Personen einzuschränken, jedoch könnten andere Server dabei scheitern. Deswegen ist es wichtig, die Server, zu denen deine Folgenden gehören, zu überprüfen. Du kannst eine Option in den Einstellungen umschalten, um neue Folgenden manuell anzunehmen oder abzuweisen. <em>Bitte beachte, dass die Betreiber des Server und jedes empfangenden Servers solche Nachrichten anschauen könnten</em> und dass Empfänger von diesen eine Bildschirmkopie erstellen könnten, sie kopieren oder anderweitig weiterverteilen könnten. <em>Teile nicht irgendwelche gefährlichen Informationen über Mastodon.</em></li> + <li><em>Direkte und "Nur Folgende"-Beiträge</em>: Alle Beiträge werden auf dem Server gespeichert und verarbeitet. "Nur Folgende"-Beiträge werden an deine Folgenden und an Benutzer, die du in ihnen erwähnst, ausgeliefert, direkte Beiträge nur an in ihnen erwähnte Benutzer. In manchen Fällen bedeutet dass, dass sie an andere Server ausgeliefert werden und dort Kopien gespeichert werden. Wir bemühen uns nach bestem Wissen und Gewissen, den Zugriff auf diese Beiträge auf nur autorisierte Personen einzuschränken, jedoch könnten andere Server dabei scheitern. Deswegen ist es wichtig, die Server, zu denen deine Folgenden gehören, zu überprüfen. Du kannst eine Option in den Einstellungen umschalten, um neue Folgenden manuell anzunehmen oder abzuweisen. <em>Bitte beachte, dass die Betreiber des Server und jedes empfangenden Servers solche Nachrichten anschauen könnten</em> und dass Empfänger von diesen eine Bildschirmkopie erstellen könnten, sie kopieren oder anderweitig weiterverteilen könnten. <em>Teile nicht irgendwelche gefährlichen Informationen über Mastodon.</em></li> <li><em>Internet Protocol-Adressen (IP-Adressen) und andere Metadaten</em>: Sobald du dich anmeldest, erfassen wir sowohl die IP-Adresse, von der aus du dich anmeldest, als auch den Namen deine Browseranwendung. Alle angemeldeten Sitzungen (Sessions) sind für deine Überprüfung und Widerruf in den Einstellungen verfügbar. Die letzte verwendete IP-Adresse wird bis zu 12 Monate lang gespeichert. Wir könnten auch Serverprotokoll behalten, welche die IP-Adresse von jeder Anfrage an unseren Server enthalten.</li> </ul> @@ -964,7 +1096,7 @@ de: <ul> <li>Serverprotokolle, die IP-Adressen von allen deinen Anfragen an diesen Server, falls solche Protokolle behalten werden, für nicht mehr als 90 Tage behalten.</li> - <li>registrierten Benutzer:innen zugeordnete IP-Adressen nicht länger als 12 Monate behalten.</li> + <li>registrierten Benutzer zugeordnete IP-Adressen nicht länger als 12 Monate behalten.</li> </ul> <p>Du kannst ein Archiv deines Inhalts anfordern und herunterladen, inkludierend deiner Beiträge, Medienanhänge, Profilbilder und Headerbilder.</p> @@ -1045,7 +1177,9 @@ de: disable: Solange dein Konto eingefroren ist, sind deine Benutzerdaten intakt; aber du kannst nichts tun, bis dein Konto entsperrt wurde. silence: Solange dein Konto limitiert ist, können nur die Leute, die dir bereits folgen, deine Beiträge auf dem Server sehen und es könnte sein, dass du von verschiedenen öffentlichen Listungen ausgeschlossen wirst. Andererseits können andere dir manuell folgen. suspend: Dein Konto wurde gesperrt und alle deine Beiträge und hochgeladenen Medien wurden unwiderruflich vom Server und anderen Servern, bei denen du Folgende hattest, gelöscht. + get_in_touch: Du kannst auf diese E-Mail antworten, um mit dem Personal von %{instance} in Kontakt zu treten. review_server_policies: Serverrichtlinien ansehen + statuses: 'Besonders für:' subject: disable: Dein Konto %{acct} wurde eingefroren none: Warnung für %{acct} diff --git a/config/locales/devise.ar.yml b/config/locales/devise.ar.yml index 92e2135ba..4662cd030 100644 --- a/config/locales/devise.ar.yml +++ b/config/locales/devise.ar.yml @@ -25,7 +25,7 @@ ar: subject: 'ماستدون: تعليمات التأكيد لمثيل الخادوم %{instance}' title: للتحقق من عنوان البريد الإلكتروني email_changed: - explanation: 'لقد تم تغيير عنوان البريد الإلكتروني الخاص بحسابك إلى :' + explanation: 'لقد تم تغيير عنوان البريد الإلكتروني الخاص بحسابك إلى:' extra: إن لم تقم شخصيًا بتعديل عنوان بريدك الإلكتروني ، ذلك يعني أنّ شخصا آخر قد نَفِذَ إلى حسابك. فالرجاء قم بتعديل كلمتك السرية في الحال أو قم بالإتصال بمدير مثيل الخادوم إن كنت غير قادر على استعمال حسابك. subject: 'ماستدون: تم استبدال عنوان بريدك الإلكتروني' title: عنوان البريد الإلكتروني الجديد @@ -45,6 +45,12 @@ ar: extra: إن لم تكن صاحب هذا الطلب ، يُرجى عدم إعارة الاهتمام لهذه الرسالة. فكلِمَتُك السرية تبقى هي مِن غير أي تعديل إلّا و فقط إن قمت بالنقر على الرابط أعلاه قصد إنشاء كلمة سرية جديدة. subject: 'ماستدون: تعليمات استعادة كلمة المرور' title: إعادة تعيين كلمة السر + two_factor_disabled: + subject: 'ماستدون: نظام المصادقة بخطوتين مُعطّل' + title: إنّ 2FA معطّل + two_factor_enabled: + subject: 'ماستدون: تم تفعيل نظام المصادقة بخطوتين' + title: إنّ 2FA نشِط unlock_instructions: subject: 'ماستدون: تعليمات فك القفل' omniauth_callbacks: @@ -84,5 +90,5 @@ ar: many: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" one: 'خطأ واحد منع هذا %{resource} من الحفظ:' other: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" - two: 'أخطاء منعت هذا %{resource} من الحفظ:' + two: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" zero: "%{count} أخطاء منعت هذا %{resource} من الحفظ:" diff --git a/config/locales/devise.bn.yml b/config/locales/devise.bn.yml index 152c69829..e0d83613e 100644 --- a/config/locales/devise.bn.yml +++ b/config/locales/devise.bn.yml @@ -1 +1,98 @@ +--- bn: + devise: + confirmations: + confirmed: আপনার ইমেইলটি সঠিকভাবে নিশ্চিত করা হয়েছে। + send_instructions: আপনি একটি ইমেইল পাবেন যেটাতে কিভাবে আপনার ইমেইলটি নিশ্চিত করতে হবে সেটা পাঠানো হবে। যদি না পান, অনুগ্রহ করে আপনার স্প্যাম ফোল্ডারটি চেক করবেন। + send_paranoid_instructions: আমাদের ডাটাবেসে যদি আপনার ইমেইল থেকে থাকে, আপনার কাছে একটা ইমেইল পাঠানো হবে যেখানে কিভাবে আপনার ইমেইল নিশ্চিত করতে হবে লেখা থাকবে। যদি না পান, অনুগ্রহ করে আপনার স্প্যাম ফোল্ডারটি চেক করবেন। + failure: + already_authenticated: আপনি ইতিপূর্বে ভেতরে ঢুকেছেন (আবার লাগবে না)। + inactive: আনার নিবন্ধনটি এখনো চালু করা হয়নি। + invalid: ভুল %{authentication_keys} বা পাসওয়ার্ড । + last_attempt: আপনার আর একবার চেষ্টা করার সুযোক আছে, তারপর আপনার নিবন্ধনে ঢোকার ক্ষেত্রে তালা দেওয়া হবে। + locked: নিবন্ধনে ঢোকার ক্ষেত্রে তালা দেওয়া হয়েছে। + not_found_in_database: ভুল %{authentication_keys} বা পাসওয়ার্ড। + pending: আপনার নিবন্ধনটি এখনো পর্যালোচনার জন্য অপেক্ষায় আছে। + timeout: আপনার সেশনটির সময় শেষ হয়ে গেছে। অনুগ্রহ করে আবার নিবন্ধনে ঢুকে চালাতে থাকেন। + unauthenticated: এটা ব্যবহার করতে আপনার আগে আপনার নিবন্ধনে ঢুকতে হবে অথবা নিবন্ধন তৈরি করতে হবে। + unconfirmed: এটা ব্যবহার করতে আপনার আগে আপনার ইমেইলটি নিশ্চিত করতে হবে। + mailer: + confirmation_instructions: + action: ইমেইলটি নিশ্চিত করুন + action_with_app: নিশ্চিত করুন এবং %{app} তে ফিরে যান + explanation: "%{host} তে এই ইমেইল ব্যবহার করে নিবন্ধন করতে হবে। আর একটা ক্লিক করলেই এটা চালু হয়ে যাবে। যদি আপনি এটা না পাঠিয়ে থাকেন, তাহলে অনুগ্রহ করে এই ইমেইলটি উপেক্ষা করুন।" + explanation_when_pending: আপনি %{host} এ এই ইমেল দ্বারা আমন্ত্রনের জন্যে যোগদান করেছেন। যখনই আপনি আপনার ইমেল নিশ্চিত করবেন, আমরা আপনার আবেদন বিবেচনা করব। আপনি আপনার বিবরণ সমূহ এডিট অথবা ডিলিট করার জন্যে লগিন করতে পারবেন, কিন্তু আপনার আবেদন অনুমোদন করার আগ পর্যন্ত আপনি প্রায় সুবিধাসমূহ ভোগ করতে পারবেন না। যদি আপনার আবেদন বাতিল করা হয়, আপনার সকল তথ্য মুছে ফেলা হবে, আপনার নিজের কোন পদক্ষেপ নেয়ার প্রয়োজন হবে না। আপনি যদি এই আবেদনটি না করে থাকেন, তাহলে ইমেইলটি উপেক্ষা করুন. + extra_html: এছাড়াও দয়া করে <a href="%{terms_path}">সার্ভারের নিয়ম</a> এবং <a href="%{policy_path}">আমাদের পরিষেবার শর্তাদি</a> দেখুন। + subject: 'মস্তোডন: %{instance} সম্পর্কিত নিশ্চিতকরণের নির্দেশাবলী' + title: ইমেইলটি নিশ্চিত করুন + email_changed: + explanation: 'আপনার অ্যাকাউন্টের ইমেল ঠিকানা এতে পরিবর্তন করা হচ্ছে:' + extra: আপনি যদি নিজের ইমেলটি পরিবর্তন না করেন তবে সম্ভবত আপনার অ্যাকাউন্টে কেউ অ্যাক্সেস পেয়েছে। দয়া করে আপনার পাসওয়ার্ডটি অবিলম্বে পরিবর্তন করুন বা আপনি যদি আপনার অ্যাকাউন্ট লক করে ফেলেন তবে সার্ভার প্রশাসকের সাথে যোগাযোগ করুন। + subject: 'মস্তোডোন: ইমেল পরিবর্তিত হয়েছে' + title: নতুন ইমেইল ঠিকানা + password_change: + explanation: আপনার অ্যাকাউন্টের পাসওয়ার্ড পরিবর্তন করা হয়েছে। + extra: আপনি নিজে যদি পাসওয়ার্ডটি না বদলে থাকেন, খুব সম্ভব অন্যকেও আপনার নিবন্ধনে প্রবেশ করে এটা করেছে। অনুগ্রহ করে যত দ্রুত সম্ভব আপনার পাসওয়ার্ডটি বদলান অথবা যদি আপনি আপনার নিবন্ধনে আর না ঢুকতে পারেন, এই সার্ভারের পরিচালককে জানান। + subject: 'মাস্টাডন: পাসওয়ার্ড বদলানো হয়েছে' + title: পাসওয়ার্ড বদলানো হয়েছে + reconfirmation_instructions: + explanation: নতুন ইমেইলটি নিশ্চিত করুন। + extra: আপনি যদি এটা না চেয়ে থাকেন, এই ইমেইলটি উপেক্ষা করুন। উপরের লিংকটিতে না গেলে আপনার নিবন্ধনের সাথে যুক্ত ইমেইল বদলাবে না। + subject: 'মাস্টাডন: ইমেইল নিশ্চিত করুন %{instance} জন্য' + title: আপনার ইমেইলটি নিশ্চিত করুন + reset_password_instructions: + action: পাসওয়ার্ড বদলান + explanation: আপনি আপনার নিবন্ধনের জন্য নতুন পাসওয়ার্ড চেয়েছেন। + extra: আপনি যদি এটা না চেয়ে থাকেন, এই ইমেইলটি উপেক্ষা করুন। উপরের লিংকটিতে না গেলে আপনার পাসওয়ার্ড বদলাবে না। + subject: 'মাস্টাডন: পাসওয়ার্ড বদলানোর নির্দেশনা' + title: পাসওয়ার্ড বদলানো + two_factor_disabled: + explanation: আপনার অ্যাকাউন্টের জন্য দ্বি-ফ্যাক্টর প্রমাণীকরণ অক্ষম করা হয়েছে। লগইন এখন কেবলমাত্র ইমেল ঠিকানা এবং পাসওয়ার্ড ব্যবহার করে সম্ভব। + subject: 'মস্তোডন: দ্বি-গুণক প্রমাণীকরণ অক্ষম' + title: 2FA অক্ষম + two_factor_enabled: + explanation: আপনার অ্যাকাউন্টের জন্য দ্বি-ফ্যাক্টর প্রমাণীকরণ সক্ষম করা হয়েছে। জোড়যুক্ত TOTP অ্যাপ্লিকেশন দ্বারা উত্পাদিত একটি টোকেন লগইনের জন্য প্রয়োজন হবে। + subject: 'মস্তোডন: দ্বি-গুণক প্রমাণীকরণ সক্ষম হয়েছে' + title: 2FA সক্ষম + two_factor_recovery_codes_changed: + explanation: পূর্ববর্তী পুনরুদ্ধার কোডগুলি অবৈধ করা হয়েছে এবং নতুন পুনরুদ্ধার কোডগুলি উত্পন্ন হয়েছে। + subject: 'মাস্টোডন: দ্বি-গুণক পুনরুদ্ধার কোডগুলি পুনরায় উত্পন্ন করা হয়েছে' + title: 2FA পুনরুদ্ধার কোড পরিবর্তন করা হয়েছে + unlock_instructions: + subject: 'মাস্টোডন: আনলক এর নির্দেশাবলী' + omniauth_callbacks: + failure: '%{kind} থেকে আপনাকে প্রমাণীকরণ করতে পারেনি কারণ "%{reason}"।' + success: সফলভাবে %{kind} অ্যাকাউন্ট থেকে প্রমাণীকৃত। + passwords: + no_token: পাসওয়ার্ড পুনরায় সেট করার ইমেল না পেয়ে আপনি এই পৃষ্ঠাটি অ্যাক্সেস করতে পারবেন না। আপনি যদি কোনও পাসওয়ার্ড পুনরায় সেট করার ইমেল থেকে এসেছেন তবে দয়া করে নিশ্চিত হয়ে নিন যে আপনি ইমেইল এ দেয়া পুরো URL টি ব্যবহার করেছেন। + send_instructions: যদি আপনার ইমেল ঠিকানাটি আমাদের ডাটাবেসে উপস্থিত থাকে তবে আপনি কয়েক মিনিটের মধ্যে আপনার ইমেল ঠিকানায় একটি পাসওয়ার্ড পুনরুদ্ধার লিঙ্ক পাবেন। আপনি এই ইমেলটি না পেলে দয়া করে আপনার স্প্যাম ফোল্ডারটি পরীক্ষা করুন। + send_paranoid_instructions: যদি আপনার ইমেল ঠিকানাটি আমাদের ডাটাবেসে উপস্থিত থাকে তবে আপনি কয়েক মিনিটের মধ্যে আপনার ইমেল ঠিকানায় একটি পাসওয়ার্ড পুনরুদ্ধার লিঙ্ক পাবেন। আপনি এই ইমেলটি না পেলে দয়া করে আপনার স্প্যাম ফোল্ডারটি পরীক্ষা করুন। + updated: আপনার পাসওয়ার্ড সফলভাবে পরিবর্তন করা হয়েছে। আপনি এখন সাইন ইন হয়েছেন। + updated_not_active: আপনার পাসওয়ার্ড সফলভাবে পরিবর্তন করা হয়েছে। + registrations: + destroyed: টাটা! আপনার অ্যাকাউন্ট সফলভাবে বাতিল করা হয়েছে। আশা করি শীঘ্রই আবার দেখা হবে তোমার সাথে। + signed_up: স্বাগতম! আপনার নিবন্ধনটি সঠিকভাবে হয়েছে। + signed_up_but_inactive: আপনি সফলভাবে সাইন আপ করেছেন। তবে আপনার অ্যাকাউন্টটি এখনও সক্রিয় না হওয়ার কারণে আমরা আপনাকে সাইন ইন করতে পারি নি। + signed_up_but_locked: আপনি সফলভাবে সাইন আপ করেছেন। তবে আপনার অ্যাকাউন্টটি লক থাকায় আমরা আপনাকে সাইন ইন করতে পারিনি। + signed_up_but_pending: আপনার ইমেল ঠিকানায় একটি নিশ্চিতকরণ লিঙ্ক সহ একটি বার্তা প্রেরণ করা হয়েছে। আপনি লিঙ্কটি ক্লিক করার পরে, আমরা আপনার আবেদন পর্যালোচনা করব। এটি অনুমোদিত হলে আপনাকে অবহিত করা হবে। + signed_up_but_unconfirmed: আপনার ইমেল ঠিকানায় একটি নিশ্চিতকরণ লিঙ্ক সহ একটি বার্তা প্রেরণ করা হয়েছে। আপনার অ্যাকাউন্টটি সক্রিয় করতে লিংকটি অনুসরণ করুন। আপনি এই ইমেলটি না পেলে দয়া করে আপনার স্প্যাম ফোল্ডারটি পরীক্ষা করুন। + update_needs_confirmation: আপনি আপনার অ্যাকাউন্টটি সফলভাবে আপডেট করেছেন, তবে আমাদের আপনার নতুন ইমেল ঠিকানা যাচাই করা দরকার। আপনার নতুন ইমেল ঠিকানাটি নিশ্চিত করতে দয়া করে আপনার ইমেলটি দেখুন এবং নিশ্চিত লিঙ্কটি অনুসরণ করুন। আপনি এই ইমেলটি না পেয়ে দয়া করে আপনার স্প্যাম ফোল্ডারটি পরীক্ষা করুন। + updated: আপনার অ্যাকাউন্ট সফলভাবে আপডেট করা হয়েছে। + sessions: + already_signed_out: সফলভাবে সাইন আউট হয়েছে। + signed_in: সফলভাবে সাইন ইন হয়েছে। + signed_out: সফলভাবে সাইন আউট হয়েছে। + unlocks: + send_instructions: আপনি কয়েক মিনিটের মধ্যে আপনার অ্যাকাউন্টটি কীভাবে আনলক করবেন তার নির্দেশাবলী সহ আপনি একটি ইমেল পাবেন। আপনি এই ইমেলটি না পেলে দয়া করে আপনার স্প্যাম ফোল্ডারটি পরীক্ষা করুন। + send_paranoid_instructions: যদি আপনার অ্যাকাউন্টটি বিদ্যমান থাকে তবে আপনি কীভাবে কয়েক মিনিটের মধ্যে এটি আনলক করবেন তার নির্দেশাবলী সহ একটি ইমেল পাবেন। আপনি এই ইমেলটি না পেলে দয়া করে আপনার স্প্যাম ফোল্ডারটি পরীক্ষা করুন। + unlocked: আপনার অ্যাকাউন্টটি সফলভাবে আনলক করা হয়েছে। চালিয়ে যেতে দয়া করে সাইন ইন করুন। + errors: + messages: + already_confirmed: " ইতিমধ্যে নিশ্চিত হয়ে গেছে, দয়া করে সাইন ইন করার চেষ্টা করুন" + confirmation_period_expired: "%{period}'এর মধ্যে নিশ্চিত হওয়া দরকার, দয়া করে একটি নতুন অনুরোধ করুন" + expired: এর মেয়াদ শেষ হয়ে গেছে, দয়া করে একটি নতুন অনুরোধ করুন + not_found: পাওয়া যাচ্ছে না + not_locked: এটি লক করা হয়নি + not_saved: + one: "%{resource} টি ১ টি ত্রুটির কারনে সেভ করা যাচ্ছে না:" + other: "%{count} টি ত্রুটির কারনে %{resource} টি সেভ করা যাচ্ছে না।:" diff --git a/config/locales/devise.br.yml b/config/locales/devise.br.yml new file mode 100644 index 000000000..3fe043754 --- /dev/null +++ b/config/locales/devise.br.yml @@ -0,0 +1,33 @@ +--- +br: + devise: + failure: + inactive: N'eo ket gweredekaet ho kont c'hoazh. + invalid: "%{authentication_keys} pe ger-tremen diwiriek." + last_attempt: Un esae a chom deoc'h a-raok ma vefe prennet ho kont. + locked: Prennet eo ho kont. + not_found_in_database: "%{authentication_keys} pe ger-tremen diwiriek." + pending: O vezañ asantet eo ho kont. + mailer: + confirmation_instructions: + action: Gwiriekaat ar chomlec'h postel + action_with_app: Kadarnaat ha distroiñ da %{app} + title: Gwiriekaat ar chomlec'h postel + email_changed: + subject: 'Mastodoñ : Postel kemmet' + title: Chomlec'h postel nevez + password_change: + explanation: Kemmet eo bet ger-tremen ho kont. + subject: 'Mastodoñ : Ger-tremen kemmet' + title: Ger-tremen kemmet + reconfirmation_instructions: + explanation: Kadarnait ar chomlec'h nevez evit cheñch ho postel. + subject: 'Mastodoñ : Kadarnait ar postel evit %{instance}' + title: Gwiriekaat ar chomlec'h postel + reset_password_instructions: + action: Cheñch ar ger-tremen + explanation: Goulennet ho peus ur ger-tremen nevez evit ho kont. + passwords: + updated_not_active: Kemmet eo bet ho ker-tremen ent reizh. + registrations: + signed_up: Donemat ! Kevreet oc'h. diff --git a/config/locales/devise.ca.yml b/config/locales/devise.ca.yml index 7f2df1f99..eb176c7bd 100644 --- a/config/locales/devise.ca.yml +++ b/config/locales/devise.ca.yml @@ -48,6 +48,18 @@ ca: extra: Si no ho has sol·licitat, ignora aquest correu electrònic. La teva contrasenya no canviarà fins que accedeixis a l'enllaç de dalt i creis un de nou. subject: 'Mastodon: Instruccions per a reiniciar contrassenya' title: Contrasenya restablerta + two_factor_disabled: + explanation: L´autenticació de dos factors pel teu compte ha estat desactivat. L'inici de sessió és ara possible utilitzant només l'adreça de correu electrònic i la contrasenya. + subject: 'Mastodon: autenticació de dos factors desactivada' + title: 2FA desactivat + two_factor_enabled: + explanation: L'autenticació de dos factors ha estat habilitada pel teu compte. Un token generat pel emparellat TOTP app serà requerit per a iniciar sessió. + subject: 'Mastodon: autenticació de dos factors activada' + title: 2FA activat + two_factor_recovery_codes_changed: + explanation: Els codis de recuperació anteriors han estat invalidats i s'han generat uns de nous. + subject: 'Mastodon: codis de recuperació de Dos factors regenerats' + title: 2FA codis de recuperació canviats unlock_instructions: subject: 'Mastodon: Instruccions per a desblocar' omniauth_callbacks: diff --git a/config/locales/devise.co.yml b/config/locales/devise.co.yml index 16481737f..c9511d14d 100644 --- a/config/locales/devise.co.yml +++ b/config/locales/devise.co.yml @@ -46,6 +46,18 @@ co: extra: S’ellu ùn era micca voi, ignurate stu missaghju. A chjave d’accessu ùn cambiarà micca s’è voi ùn cliccate micca u ligame. subject: 'Mastodon: Cambià a chjave d’accessu' title: Cambià a chjave + two_factor_disabled: + explanation: L'autentificazione à dui fattori per u vostru contu hè stata disattivata. A cunnessione hè avà pussibule cù l'usu solu di u vostru e-mail è di a chjave d'accessu. + subject: 'Mastodon: Autentificazione à dui fattori disattivata' + title: A2F disattivata + two_factor_enabled: + explanation: L'autentificazione à dui fattori hè stata attivata per u vostru contu. Un codice, o fiscia, generata da l'applicazione TOTP assuciata sarà dumandata per cunnettavvi. + subject: 'Mastodon: Autentificazione à dui fattori attivata' + title: A2F attivata + two_factor_recovery_codes_changed: + explanation: I codici di ricuperazione pricidenti ùn sò più validi è un novu inseme di codici hè statu creatu. + subject: 'Mastodon: Rigenerazione di i codici à dui fattori di ricuperazione' + title: Cambiamentu di i codici di ricuperazione d'A2F unlock_instructions: subject: 'Mastodon: Riapre u contu' omniauth_callbacks: diff --git a/config/locales/devise.cs.yml b/config/locales/devise.cs.yml index 94c41ed98..25be731d0 100644 --- a/config/locales/devise.cs.yml +++ b/config/locales/devise.cs.yml @@ -8,7 +8,7 @@ cs: failure: already_authenticated: Již jste přihlášen/a. inactive: Váš účet ještě není aktivován. - invalid: Neplatný %{authentication_keys} nebo heslo. + invalid: Neplatné %{authentication_keys} nebo heslo. last_attempt: Máte ještě jeden pokus, než bude váš účet uzamčen. locked: Váš účet je uzamčen. not_found_in_database: Neplatné %{authentication_keys} nebo heslo. @@ -21,7 +21,7 @@ cs: action: Potvrdit e-mailovou adresu action_with_app: Potvrdit a navrátit se do %{app} explanation: S touto e-mailovou adresou jste si vytvořil/a účet na %{host}. K jeho aktivaci vám zbývá jedno kliknutí. Pokud jste to nebyl/a vy, prosím ignorujte tento e-mail. - explanation_when_pending: S touto e-mailovou adresou jste si vyžádal/a pozvánku na %{host}. Jakmile svou e-mailovou adresu potvrdíte, posoudíme váš poadavek. Do té doby se nemůžete přihlásit. Pokud bude váš požadavek zamítnut, budou vaše data odstraněna, takže od vás nebude vyžadována žádná další akce. Pokud jste to nebyl/a vy, prosím ignorujte tento e-mail. + explanation_when_pending: S touto e-mailovou adresou jste si vyžádal/a pozvánku na %{host}. Jakmile svou e-mailovou adresu potvrdíte, posoudíme váš poadavek. Můžete se přihlásit, změnit si své detaily či smazat svůj účet, ale do schválení účtu nemáte přístup ke většině funkcí. Pokud bude váš požadavek zamítnut, budou vaše data odstraněna, takže od vás nebude vyžadována žádná další akce. Pokud jste to nebyl/a vy, prosím ignorujte tento e-mail. extra_html: Prosím podívejte se také na <a href="%{terms_path}">pravidla tohoto serveru</a> a <a href="%{policy_path}">naše podmínky používání</a>. subject: 'Mastodon: Potvrzovací instrukce pro %{instance}' title: Potvrďte e-mailovou adresu @@ -46,6 +46,18 @@ cs: extra: Pokud jste tohle nevyžádal/a, prosím ignorujte tento e-mail. Vaše heslo nebude změněno, dokud nepřejdete na výše uvedenou adresu a nevytvoříte si nové. subject: 'Mastodon: Instrukce pro obnovení hesla' title: Obnovení hesla + two_factor_disabled: + explanation: Dvoufázové ověřování bylo pr váš účet zakázáno. Přihlašování je nyní možné pouze pomocí e-mailové adresy a hesla. + subject: 'Mastodon: Dvoufázové ověřování zakázáno' + title: 2FA zakázáno + two_factor_enabled: + explanation: Dvoufázové ověřování bylo pr váš účet povoleno. Pro přihlášení bude vyžadován token vygenerovaný spárovanou TOTP aplikací. + subject: 'Mastodon: Dvoufázové ověřování povoleno' + title: 2FA povoleno + two_factor_recovery_codes_changed: + explanation: Předchozí záložní kódy byly zrušeny a byly vygenerovány nové. + subject: 'Mastodon: Dvoufázové záložní kódy znovu vygenerovány' + title: Záložní kódy pro 2FA změněny unlock_instructions: subject: 'Mastodon: Instrukce pro odemčení účtu' omniauth_callbacks: diff --git a/config/locales/devise.cy.yml b/config/locales/devise.cy.yml index 8ea7e1b4f..e5366f8cd 100644 --- a/config/locales/devise.cy.yml +++ b/config/locales/devise.cy.yml @@ -12,6 +12,7 @@ cy: last_attempt: Mae gennych un cyfle arall cyn i'ch cyfrif gael ei gloi. locked: Mae eich cyfrif wedi ei gloi. not_found_in_database: "%{authentication_keys} neu gyfrinair annilys." + pending: Mae eich cyfrif dal o dan adolygiad. timeout: Mae eich sesiwn wedi dod i ben. Mewngofnodwch eto i barhau. unauthenticated: Mae angen i chi fewngofnodi neu gofrestru cyn parhau. unconfirmed: Mae rhaid i chi gadarnhau eich cyfeiriad e-bost cyn parhau. @@ -20,6 +21,7 @@ cy: action: Gwiriwch eich cyfeiriad e-bost action_with_app: Cadarnhau a dychwelyd i %{app} explanation: Yr ydych wedi creu cyfrif ar %{host} gyda'r cyfrif e-bost hwn. Dim ond un clic sydd angen i'w wneud yn weithredol. Os nad chi oedd hyn, anwybyddwch yr e-bost hwn os gwelwch yn dda. + explanation_when_pending: Rydych wedi gwneud cais am wahoddiad i %{host} gyda'r ebost hyn. Unwaith rydych wedi cadarnhau eich ebost, byddem yn adolygu eich cais. Ni fyddwch yn gallu mewngofnodi tan yr amser hono. Os caiff eich cais ei wrthod, felly nid oes angen unrhyw gweithred pellach o chi. Os nad oeddech wedi gwneud y cais hyn, anwybyddu'r ebost hon, os gwelwch yn dda. extra_html: Gwnewch yn siŵr i edrych ar <a href="%{terms_path}">reolau'r achos</a> a <a href="%{policy_path}">ein telerau gwasanaeth</a>. subject: 'Mastodon: Canllawiau cadarnhau i %{instance}' title: Gwirio cyfeiriad e-bost @@ -44,6 +46,18 @@ cy: extra: Os na wnaethoch gais am hyn, anwybyddwch yr e-bost hwn os gwelwch yn dda. Ni fydd eich cyfrinair yn newid nes i chi fynd at y ddolen uchod a chreu un newydd. subject: 'Mastodon: Ailosod cyfarwyddiadau cyfrinair' title: Ailosod cyfrinair + two_factor_disabled: + explanation: Mae dilysu dau ffactor ar gyfer eich cyfrif wedi'i anablu. Mae mewngofnodi bellach yn bosibl gan ddefnyddio cyfeiriad e-bost a chyfrinair yn unig. + subject: 'Mastodon: Dilysu dau ffactor yn anabl' + title: Dilysu dau ffactor yn anabl + two_factor_enabled: + explanation: Mae dilysu dau ffactor wedi'i alluogi ar gyfer eich cyfrif. Bydd angen tocyn a gynhyrchir gan yr ap TOTP pâr i fewngofnodi. + subject: 'Mastodon: mae dilysu dau ffactor wedi''i alluogi' + title: Mae dilysu dau ffactor wedi'i alluogi + two_factor_recovery_codes_changed: + explanation: Mae'r codau adfer blaenorol wedi'u hannilysu a chynhyrchwyd rhai newydd. + subject: 'Mastodon: Mae codau adfer dau ffactor wedi''u hadfywio' + title: Newidiodd codau adfer 2FA unlock_instructions: subject: 'Mastodon: Cyfarwyddiadau datgloi' omniauth_callbacks: @@ -60,6 +74,7 @@ cy: signed_up: Croeso! Rydych wedi cofrestru'n llwyddiannus. signed_up_but_inactive: Yr ydych wedi cofrestru'n llwyddiannus. Fodd bynnag, ni allwn eich mewngofnodi achos nid yw eich cyfrif wedi ei actifadu eto. signed_up_but_locked: Yr ydych wedi cofrestru'n llwyddiannus. Fodd bynnag, ni allwn eich mewngofnodi achos fod eich cyfrif wedi ei gloi. + signed_up_but_pending: Mae neges a'ch cysylltiad cadarnhau wedi cael ei hanfon i'ch ebost. Ar ôl i chi ei glicio, byddem yn adolygu eich cais. Byddwch yn derbyn hysbysiad os caiff ei gymeradwyo. signed_up_but_unconfirmed: Mae neges gyda dolen cadarnhau wedi ei anfon i'ch cyfeiriad e-bost. Dilynwch y ddolen er mwyn actifadu eich cyfrif. Edrychwch yn eich ffolder sbam os na dderbynioch chi'r e-bost hwn os gwelwch yn dda. update_needs_confirmation: Rydych wedi diweddaru eich cyfrif yn llwyddiannus, ond mae angen i ni wirio'ch cyfeiriad e-bost newydd. Edrychwch ar eich e-byst a dilynwch y ddolen gadarnhau er mwyn cadarnhau eich cyfeiriad e-bost newydd. Edrychwch ar eich ffolder sbam os na dderbynioch chi yr e-bost hwn. updated: Mae eich cyfrif wedi ei ddiweddaru yn llwyddiannus. diff --git a/config/locales/devise.da.yml b/config/locales/devise.da.yml index 4816d6456..5b21dbc61 100644 --- a/config/locales/devise.da.yml +++ b/config/locales/devise.da.yml @@ -2,7 +2,7 @@ da: devise: confirmations: - confirmed: Din email adresse er blevet succesfuldt bekræftet. + confirmed: Din e-mail er nu bekræftet. send_instructions: Du vil modtage en mail med instrukser for hvordan du bekræfter din email adresse om få minutter. Tjek venligst din spam mappe hvis du ikke har modtaget denne email. send_paranoid_instructions: Hvis din email adresse allerede findes i vores database, vil du modtage en email med instrukser for hvordan du bekræfter din email adresse om få minutter. Tjek gerne din spam mappe hvis du ikke modtager denne email. failure: @@ -12,6 +12,7 @@ da: last_attempt: Du har et forsøg tilbage før din konto låses. locked: Din konto er låst. not_found_in_database: Ugyldig %{authentication_keys} eller ugyldigt kodeord. + pending: Din konto er stadig under bedømmelse. timeout: Din session er udløbet. Log venligst ind igen for at fortsætte. unauthenticated: Du er nødt til at logge ind eller oprette dig for at fortsætte. unconfirmed: Du er nødt til at bekræfte din email adresse for at fortsætte. @@ -20,6 +21,7 @@ da: action: Bekræft email adresse action_with_app: Bekræft og vend tilbage til %{app} explanation: Du har oprettet en konto på %{host} med denne email adresse. Du er et klik fra at aktivere din konto. Hvis du ikke har oprettet dig, ignorer venligst denne email. + explanation_when_pending: Du har ansøgt om en invitation til %{host} med denne mailadresse. Når du bekræfter din mailadresse vil vi bedømme din ansøgning. Indtil da kan du ikke logge ind. Din data slettes hvis din ansøgning bliver afvist så du behøver ikke foretage yderligere handlinger. Hvis dette ikke var dig kan du ignorere denne mail. extra_html: Tjek også <a href="%{terms_path}">reglerne for serveren</a> og <a href="%{policy_path}">vores betingelser</a>. subject: 'Mastodon: Bekræftelses instrukser for %{instance}' title: Bekræft email adresse @@ -44,6 +46,10 @@ da: extra: Hvis du ikke har anmodet om dette, ignorer denne email. Din adgangskode vil ikke blive ændret før du har fulgt linket foroven og oprettet en ny. subject: 'Mastodon: Instrukser for nulstilling af adgangskode' title: Kodeordet er blevet nulstillet + two_factor_disabled: + title: 2FA deaktiveret + two_factor_enabled: + title: 2FA aktiveret unlock_instructions: subject: 'Mastodon: Instruktioner for oplåsning' omniauth_callbacks: @@ -60,6 +66,7 @@ da: signed_up: Velkommen! Du har nu tilmeldt dig. signed_up_but_inactive: Du har nu oprettet dig. Vi kunne dog ikke logge dig ind da din konto endnu ikke er aktiveret. signed_up_but_locked: Du har nu oprettet dig. Vi kunne dog ikke logge dig ind da din konto er låst. + signed_up_but_pending: En besked med et bekræftelseslink er blevet sendt til din mailadresse. Vi vil behandle din ansøgning når du har trykket på dette link. Du får en meddelelse hvis din ansøgning bliver accepteret. signed_up_but_unconfirmed: En besked med et bekræftelses link er nu blevet sendt til din email adresse. Følg linket for at aktivere din konti. Tjek din spam mappe hvis du ikke har modtaget denne email. update_needs_confirmation: Du har succesfuldt opdateret din konto, men vi er nødt til at bekræfte din email adresse. Tjek venligst din email og følg bekræftelses linket for at bekræfte din nye email adresse. Tjek venligst din spam mappe hvis du ikke har modtaget denne email. updated: Din konto er nu blevet opdateret. diff --git a/config/locales/devise.de.yml b/config/locales/devise.de.yml index bd573dc3e..372090515 100644 --- a/config/locales/devise.de.yml +++ b/config/locales/devise.de.yml @@ -46,6 +46,18 @@ de: extra: Wenn du diese Anfrage nicht gestellt hast, solltest du diese E-Mail ignorieren. Dein Passwort wird sich nicht ändern solange du den obigen Link anklickst und ein neues erstellst. subject: 'Mastodon: Passwort zurücksetzen' title: Passwort zurücksetzen + two_factor_disabled: + explanation: Zwei-Faktor-Authentifizierung für dein Konto wurde deaktiviert. Login ist jetzt nur mit E-Mail-Adresse und Passwort möglich. + subject: 'Mastodon: Zwei‐Faktor‐Authentifizierung deaktiviert' + title: 2FA deaktiviert + two_factor_enabled: + explanation: Zwei-Faktor-Authentifizierung wurde für dein Konto aktiviert. Ein Token, der von der gepaarten TOTP-App generiert wird, wird für den Login benötigt. + subject: 'Mastodon: Zwei‐Faktor‐Authentifizierung aktiviert' + title: 2FA aktiviert + two_factor_recovery_codes_changed: + explanation: Die vorherigen Wiederherstellungscodes wurden ungültig gemacht und es wurden neue generiert. + subject: 'Mastodon: Zwei-Faktor-Wiederherstellungscodes neu generiert' + title: 2FA Wiederherstellungscodes geändert unlock_instructions: subject: 'Mastodon: Konto entsperren' omniauth_callbacks: diff --git a/config/locales/devise.el.yml b/config/locales/devise.el.yml index 0b5c68636..5dc7658c2 100644 --- a/config/locales/devise.el.yml +++ b/config/locales/devise.el.yml @@ -46,6 +46,18 @@ el: extra: Αν δεν ζήτησες εσύ αυτή την αλλαγή, παρακαλούμε αγνόησε αυτό το email. Το συνθηματικό σου δεν θα αλλάξει μέχρι να επισκεφτείς τον παραπάνω σύνδεσμο και να δημιουργήσεις ένα καινούριο. subject: 'Mastodon: Οδηγίες επαναφοράς συνθηματικού' title: Επαναφορά συνθηματικού + two_factor_disabled: + explanation: Ο έλεγχος ταυτότητας δυο παραγόντων (2FA) έχει απενεργοποιηθεί για το λογαριασμό σου. Η σύνδεση γίνεται απλά με το email και το συνθηματικό. + subject: 'Mastodon: Απενεργοποιήθηκε ο έλεγχος ταυτότητας δύο παραγόντων' + title: Απενεργοποιημένο 2FA + two_factor_enabled: + explanation: Έχει ενεργοποιηθεί η πιστοποίηση 2 παραγόντων για το λογαριασμό σου (2FA). Για να συνδεθείς θα απαιτηθεί πιστοποιημένο τεκμήριο από κάποια ζευγαρωμένη εφαρμογή. + subject: 'Mastodon: Ενεργοποιήθηκε η πιστοποίηση 2 παραγόντων (2FA)' + title: Επαλήθευση δύο βημάτων ενεργή + two_factor_recovery_codes_changed: + explanation: Οι προηγούμενοι κωδικοί ανάκτησης ακυρώθηκαν και δημιουργήθηκαν νέοι. + subject: 'Mastodon: Δημιουργήθηκαν νέοι κωδικοί ανάκτησης' + title: Οι κωδικοί ανάκτησης 2FA άλλαξαν unlock_instructions: subject: 'Mastodon: Οδηγίες ξεκλειδώματος' omniauth_callbacks: diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml index 2930733c0..726d2426a 100644 --- a/config/locales/devise.en.yml +++ b/config/locales/devise.en.yml @@ -21,7 +21,7 @@ en: action: Verify email address action_with_app: Confirm and return to %{app} explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email. - explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can't login until then. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. + explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can login to change your details or delete your account, but you cannot access most of the functions until your account is approved. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email. extra_html: Please also check out <a href="%{terms_path}">the rules of the server</a> and <a href="%{policy_path}">our terms of service</a>. subject: 'Mastodon: Confirmation instructions for %{instance}' title: Verify email address @@ -46,6 +46,18 @@ en: extra: If you didn't request this, please ignore this email. Your password won't change until you access the link above and create a new one. subject: 'Mastodon: Reset password instructions' title: Password reset + two_factor_disabled: + explanation: Two-factor authentication for your account has been disabled. Login is now possible using only e-mail address and password. + subject: 'Mastodon: Two-factor authentication disabled' + title: 2FA disabled + two_factor_enabled: + explanation: Two-factor authentication has been enabled for your account. A token generated by the paired TOTP app will be required for login. + subject: 'Mastodon: Two-factor authentication enabled' + title: 2FA enabled + two_factor_recovery_codes_changed: + explanation: The previous recovery codes have been invalidated and new ones generated. + subject: 'Mastodon: Two-factor recovery codes re-generated' + title: 2FA recovery codes changed unlock_instructions: subject: 'Mastodon: Unlock instructions' omniauth_callbacks: diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index d7b7b2d6c..7c67ac8fa 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -46,6 +46,10 @@ eo: extra: Se vi ne petis ĉi tion, bonvolu ignori ĉi tiun retmesaĝon. Via pasvorto ne ŝanĝiĝos se vi ne aliras la supran ligilon kaj kreas novan. subject: 'Mastodon: Instrukcioj por ŝanĝi pasvorton' title: Pasvorto restarigita + two_factor_disabled: + title: la du-etapa aŭtentigo estas malŝaltita + two_factor_enabled: + title: la du-etapa aŭtentigo estas ŝaltita unlock_instructions: subject: 'Mastodon: Instrukcioj por malŝlosi' omniauth_callbacks: diff --git a/config/locales/devise.es-AR.yml b/config/locales/devise.es-AR.yml new file mode 100644 index 000000000..bb229e8f5 --- /dev/null +++ b/config/locales/devise.es-AR.yml @@ -0,0 +1,98 @@ +--- +es-AR: + devise: + confirmations: + confirmed: Se confirmó exitosamente tu dirección de correo electrónico. + send_instructions: En unos minutos, vas a recibir un correo electrónico con instrucciones sobre cómo confirmar tu dirección de correo. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. + send_paranoid_instructions: Si tu dirección de correo electrónico existe en nuestra base de datos, en unos minutos, vas a recibir un correo electrónico con instrucciones sobre cómo confirmar tu dirección de correo. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. + failure: + already_authenticated: Ya iniciaste sesión. + inactive: Tu cuenta todavía no está activada. + invalid: "%{authentication_keys} o contraseña no válidas." + last_attempt: Tenés un intento más antes de que se bloquee tu cuenta. + locked: Se bloqueó tu cuenta. + not_found_in_database: "%{authentication_keys} o contraseña no válidas." + pending: Tu cuenta todavía está bajo revisión. + timeout: Venció tu sesión. Por favor, volvé a iniciar sesión para continuar. + unauthenticated: Necesitás iniciar sesión o registrarte antes de continuar. + unconfirmed: Tenés que confirmar tu dirección de correo electrónico antes de continuar. + mailer: + confirmation_instructions: + action: Verificar dirección de correo electrónico + action_with_app: Confirmar y volver a %{app} + explanation: Te creaste una cuenta en %{host} con esta dirección de correo electrónico. Estás a un clic de activarla. Si vos no te creaste ninguna cuenta acá, por favor, simplemente ignorá este mensaje. + explanation_when_pending: Pediste una invitación para %{host} con esta dirección de correo electrónico. Una vez que confirmés esta dirección de correo, revisaremos tu pedido. Podés iniciar sesión para cambiar tus detalles o eliminar tu cuenta, pero no vas a poder acceder a la mayoría de las funciones hasta que no se apruebe tu cuenta. Si tu pedido es rechazado, se eliminarán tus datos, por lo que no vas a necesitar hacer nada en especial. Si vos no pediste ninguna cuenta acá, por favor, simplemente ignorá este mensaje. + extra_html: Por favor, también leé <a href="%{terms_path}">las reglas del servidor</a> y <a href="%{policy_path}">nuestros términos del servicio</a>. + subject: 'Mastodon: instrucciones de confirmación para %{instance}' + title: Verificar dirección de correo electrónico + email_changed: + explanation: 'La dirección de correo electrónico de tu cuenta está siendo cambiada a:' + extra: Si no cambiaste tu correo electrónico, es probable que alguien más haya obtenido acceso a tu cuenta. Por favor, cambiá tu contraseña inmediatamente o contactá con el administrador del servidor si no podés ingresar a tu cuenta. + subject: 'Mastodon: correo electrónico cambiado' + title: Nueva dirección de correo electrónico + password_change: + explanation: Se cambió la contraseña de tu cuenta. + extra: Si no cambiaste tu contraseña, es probable que alguien más haya obtenido acceso a tu cuenta. Por favor, cambiá tu contraseña inmediatamente o contactá con el administrador del servidor si no podés ingresar a tu cuenta. + subject: 'Mastodon: contraseña cambiada' + title: Contraseña cambiada + reconfirmation_instructions: + explanation: Confirmá la nueva dirección para cambiar tu correo electrónico. + extra: Si no pediste este cambio, por favor, ignorá este mensaje. No se cambiará la dirección de correo electrónico de tu cuenta de Mastodon hasta que no accedas al enlace de arriba. + subject: 'Mastodon: confirmar correo electrónico para %{instance}' + title: Verifique dirección de correo electrónico + reset_password_instructions: + action: Cambiar contraseña + explanation: Pediste una nueva contraseña para tu cuenta. + extra: Si no pediste este cambio, por favor, ignorá este mensaje. No se cambiará la contraseña de tu cuenta de Mastodon hasta que no accedas al enlace de arriba y crees una nueva. + subject: 'Mastodon: instrucciones para cambiar la contraseña' + title: Cambiar contraseña + two_factor_disabled: + explanation: La autenticación de dos factores para tu cuenta está deshabilitada. Ahora el inicio de sesión sólo es posible usando la dirección de correo electrónico y la contraseña. + subject: 'Mastodon: autenticación de dos factores, deshabilitada' + title: 2FA deshabilitada + two_factor_enabled: + explanation: La autenticación de dos factores para tu cuenta está habilitada. Se requiere una clave generada por la aplicación TOTP asociada para iniciar sesión. + subject: 'Mastodon: autenticación de dos factores, habilitada' + title: 2FA habilitada + two_factor_recovery_codes_changed: + explanation: Los códigos anteriores de recuperación fueron invalidados y se generaron unos nuevos. + subject: 'Mastodon: códigos de recuperación de dos factores, regenerados' + title: Códigos de recuperación 2FA cambiados + unlock_instructions: + subject: 'Mastodon: instrucciones de desbloqueo' + omniauth_callbacks: + failure: 'No se te pudo autenticar desde %{kind} debido a esto: "%{reason}".' + success: Se autenticó exitosamente para la cuenta %{kind}. + passwords: + no_token: No podés acceder a esta página sin venir desde un correo electrónico destinado al cambio de contraseña. Si venís desde dicho mensaje, por favor, asegurate que usaste toda la dirección web ofrecida. + send_instructions: Si tu dirección de correo electrónico existe en nuestra base de datos, en unos minutos, vas a recibir un correo electrónico con un enlace para cambiar tu contraseña. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. + send_paranoid_instructions: Si tu dirección de correo electrónico existe en nuestra base de datos, en unos minutos, vas a recibir un correo electrónico con un enlace para cambiar tu contraseña. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. + updated: Se cambió existosamente tu contraseña. Ya iniciaste sesión. + updated_not_active: Se cambió exitosamente tu contraseña. + registrations: + destroyed: "¡Chauchas! Se canceló exitosamente tu cuenta. Esperamos verte pronto de nuevo." + signed_up: "¡Bienvenido! Te registraste exitosamente." + signed_up_but_inactive: Te registraste exitosamente. Sin embargo, no podés iniciar sesión porque tu cuenta todavía no está activada. + signed_up_but_locked: Te registraste exitosamente. Sin embargo, no podés iniciar sesión porque tu cuenta está bloqueada. + signed_up_but_pending: Se envió un correo electrónico a tu dirección de correo con un enlace de confirmación. Después que hagás clic en ese enlace, revisaremos tu pedido. Si sos aprobado, serás notificado. + signed_up_but_unconfirmed: Se envió un correo electrónico a tu dirección de correo con un enlace de confirmación. Por favor, seguí ese enlace para activar tu cuenta. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. + update_needs_confirmation: Actualizaste tu cuenta exitosamente. Sin embargo, necesitamos verificar tu nueva dirección de correo electrónico. Por favor, revisá tu correo electrónico y seguí el enlace de confirmación. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. + updated: Se actualizó exitosamente tu cuenta. + sessions: + already_signed_out: Cerraste sesión exitosamente. + signed_in: Iniciaste sesión exitosamente. + signed_out: Cerraste sesión exitosamente. + unlocks: + send_instructions: En unos minutos, vas a recibir un correo electrónico con instrucciones sobre cómo desbloquear tu cuenta. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. + send_paranoid_instructions: Si tu cuenta existe en nuestra base de datos, en unos minutos vas a recibir un correo electrónico con instrucciones sobre cómo desbloquear tu cuenta. Si pasa el tiempo y no recibiste ningún mensaje, por favor, revisá tu carpeta de correo basura / no deseado / spam. + unlocked: Se desbloqueó tu cuenta exitosamente. Por favor, iniciá sesión para continuar. + errors: + messages: + already_confirmed: ya se confirmó; por favor, intentá iniciar sesión + confirmation_period_expired: necesita confirmarse dentro de %{period}; por favor, solicitá una nueva + expired: venció; por favor, solicitá una nueva + not_found: no se encontró + not_locked: no se bloqueó + not_saved: + one: '1 error prohibió que este %{resource} se guarde:' + other: "%{count} errores prohibieron que este %{resource} se guarde:" diff --git a/config/locales/devise.es.yml b/config/locales/devise.es.yml index 8210415f2..80d438092 100644 --- a/config/locales/devise.es.yml +++ b/config/locales/devise.es.yml @@ -46,6 +46,18 @@ es: extra: Si no solicitaste esto, por favor ignora este correo. Tu contraseña no cambiará hasta que tu accedas al vinculo arriba y crees una nueva. subject: 'Mastodon: Instrucciones para reiniciar contraseña' title: Reiniciar contraseña + two_factor_disabled: + explanation: La autenticación de dos factores para tu cuenta ha sido deshabilitada. Ahora puedes conectarte solamente usando la dirección de correo electrónico y la contraseña. + subject: 'Mastodon: La autenticación de dos factores está deshabilitada' + title: 2FA desactivada + two_factor_enabled: + explanation: La autenticación de dos factores para tu cuenta ha sido habilitada. Se requiere un token generado por la aplicación TOTP emparejada para ingresar. + subject: 'Mastodon: La autenticación de dos factores está habilitada' + title: 2FA activada + two_factor_recovery_codes_changed: + explanation: Los códigos de recuperación previos han sido invalidados y se generaron códigos nuevos. + subject: 'Mastodon: Los códigos de recuperación de dos factores fueron regenerados' + title: Códigos de recuperación 2FA cambiados unlock_instructions: subject: 'Mastodon: Instrucciones para desbloquear' omniauth_callbacks: diff --git a/config/locales/devise.et.yml b/config/locales/devise.et.yml new file mode 100644 index 000000000..cc5ef3867 --- /dev/null +++ b/config/locales/devise.et.yml @@ -0,0 +1,98 @@ +--- +et: + devise: + confirmations: + confirmed: Sinu e-postiaadress on edukalt kinnitatud. + send_instructions: Te saate paari minuti pärast e-kirja juhistega, kuidas oma e-posti aadressit kinnitada. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja. + send_paranoid_instructions: Kui Teie e-postiaadress eksisteerib meie andmebaasis, saate paari minuti pärast e-kirja juhistega, kuidas oma e-posti aadressit kinnitada. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja. + failure: + already_authenticated: Te olete juba sisse loginud. + inactive: Teie konto pole veel aktiveeritud. + invalid: Valed %{authentication_keys} või parool. + last_attempt: Teil on veel üks katse kuni teie konto on lukustatud. + locked: Sinu konto on lukustatud. + not_found_in_database: Valed %{authentication_keys} või parool. + pending: Teie konto on siiani läbivaatlusel. + timeout: Teie sessioon on aegunud. Jätkamiseks palun sisenege uuesti. + unauthenticated: Te peate sisenema või looma konto enne jätkamist. + unconfirmed: Te peate kinnitama oma e-postiaadressi enne jätkamist. + mailer: + confirmation_instructions: + action: Kinnita e-postiaadress + action_with_app: Kinnita ja naase %{app} + explanation: Te olete loonud konto %{host}'il selle e-postiaadressiga. Te olete ühe kliki kaugusel selle aktiveerimisest. Kui see polnud Teie, palun eirake seda kirja. + explanation_when_pending: Te esitasite soovi liituda %{host}-iga selle e-postiaadressiga. Siis, kui Te kinnitate oma e-posti aadressi, vaatame me Teie soovi üle. Te ei saa siseneda kuni selleni. Kui teie soov on tagasi lükatud, Teie andmed kustutatakse ning Te ei pea rohkem midagi tegema. Kui see ei olnud Teie, palun eirake seda kirja. + extra_html: Palun tutvu <a href="%{terms_path}">meie serveri reeglitega</a> ning <a href="%{policy_path}">meie kasutustingimustega</a>. + subject: 'Mastodon: %{instance} Kinnitamisjuhised' + title: Kinnita e-postiaadress + email_changed: + explanation: 'Teie konto e-postiaadress muudetakse:' + extra: Kui Te ei muutnud oma e-posti, on tõenäoline, et kellelgi on ligipääs Teie kontole. Palun muutke oma salasõna koheselt või võtke ühendust oma serveri administraatoriga, kui olete oma kontost välja lukustatud. + subject: 'Mastodon: E-post muudetud' + title: Uus e-postiaadress + password_change: + explanation: Teie konto parool on muudetud. + extra: Kui Te ei muutnud oma salasõna, on tõenäoline, et kellelgi on ligipääs Teie kontole. Palun muutke oma salasõna koheselt või võtke ühendust oma serveri administraatoriga, kui olete oma kontost välja lukustatud. + subject: 'Mastodon: Salasõna muudetud' + title: Salasõna muudetud + reconfirmation_instructions: + explanation: Kinnita oma uus aadress, et muuta oma e-posti. + extra: Kui see muudatus pole Teie poolt alustatud, palun eirake seda kirja. E-postiaadress sellele Mastodoni kontole ei muutu, kuni Te vajutate üleval asuvale lingile. + subject: 'Mastodon: Kinnitake e-post - %{instance}' + title: Kinnita e-postiaadress + reset_password_instructions: + action: Muuda salasõna + explanation: Te taotlesite oma kontole uut salasõna. + extra: Kui Te ei soovinud seda, palun eirake seda kirja. Teie salasõna ei muutu, kuni Te vajutate üleval olevale lingile ning loote uue. + subject: 'Mastodon: Salasõna lähtestamisjuhendid' + title: Salasõna lähtestamine + two_factor_disabled: + explanation: Kaheastmeline autentimine on teie konto jaoks välja lülitatud. Sisselogimine on nüüd ainult võimalik kasutades e-postiaadressit ja salasõna. + subject: 'Mastodon: Kaheastmeline autentimine välja lülitatud' + title: 2FA väljas + two_factor_enabled: + explanation: Kaheastmeline autentimine on Teie kontole sisse lülitatud. Teie TOTP rakenduse poolt loodud võtit läheb vaja igal sisselogimisel. + subject: 'Mastodon: Kaheastmeline autentimine sisse lülitatud' + title: 2FA sees + two_factor_recovery_codes_changed: + explanation: Eelmised taastuskoodid on kehtetuks tehtud ning uued loodud. + subject: 'Mastodon: Kaheastmelise autentimise taastuskoodid taasloodud' + title: 2FA taastuskoodid muudetud + unlock_instructions: + subject: 'Mastodon: Lahti lukustamis juhendid' + omniauth_callbacks: + failure: Ei saanud Teid tuvastada %{kind} kaudu, kuna "%{reason}". + success: Tuvastamine %{kind} konto järgi õnnestus. + passwords: + no_token: Te ei saa sellele leheküljele ligi ilma tulemata salasõna lähtestamis e-kirjast. Kui Te tulete salasõna lähtestamis e-kirjast, palun olge kindel, et kasutasite tervet Teile antud URL-i. + send_instructions: Kui Teie e-postiaadress eksisteerib meie andmebaasis, saate paari minuti pärast e-kirja juhistega, kuidas oma salasõna taastada. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja. + send_paranoid_instructions: Kui Teie e-postiaadress eksisteerib meie andmebaasis, saate paari minuti pärast e-kirja juhistega, kuidas oma salasõna taastada. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja. + updated: Teie salasõna muutmine õnnestus. Te olete nüüd sisse loginud. + updated_not_active: Teie salasõna muutmine õnnestus. + registrations: + destroyed: Nägemist! Teie konto sulgemine õnnestus. Me loodame Teid varsti taas näha. + signed_up: Tere tulemast! Teie konto loomine õnnestus. + signed_up_but_inactive: Teie konto loodi edukalt, kuid me ei saanud Teid sisse logida, kuna teie konto pole veel aktiveeritud. + signed_up_but_locked: Teie konto loodi edukalt, kuid me ei saanud Teid sisse logida, kuna teie konto on lukustatud. + signed_up_but_pending: Kiri kinnituslingiga saadeti Teie e-postile. Pärast seda, kui te vajutate lingile, vaatame me Teie taotluse üle. Teid teavitatakse, kui see on vastu võetud. + signed_up_but_unconfirmed: Kiri kinnituslingiga saadeti Teie e-postile. Palun järgige linki, et aktiveerida oma konto. Palun kontrollige oma rämpsposti, kui Te ei saanud seda e-kirja. + update_needs_confirmation: Teie konto uuendamine õnnestus, kuid me peame Teie e-postiaadressit kinnitama. Palun kontrollige oma e-posti ning järgige linki, et kinnitada oma e-postiaadress. Palun kontrollige oma rämpsposti, kui Te ei saanud seda e-kirja. + updated: Teie konto uuendamine õnnestus. + sessions: + already_signed_out: Väljumine õnnestus. + signed_in: Sisenemine õnnestus. + signed_out: Väljumine õnnestus. + unlocks: + send_instructions: Te saate paari minuti pärast e-kirja juhistega, kuidas oma konto lukust lahti teha. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja. + send_paranoid_instructions: Kui Teie konto eksisteerib, saate Te paari minuti pärast e-kirja juhistega, kuidas see lukust lahti teha. Palun kontrollige oma rämpsposti kausta juhul, kui Te ei saanud seda e-kirja. + unlocked: Teie konto lukust lahti võtmine õnnestus. Jätkamiseks, palun logige sisse. + errors: + messages: + already_confirmed: oli juba kinnitatud, palun proovige sisse logida + confirmation_period_expired: peab olema kinnitatud ajavahemikus %{period} - palun taotlege uus + expired: on aegunud, palun taotlege uus + not_found: ei leitud + not_locked: ei olnud lukustatud + not_saved: + one: '1 viga takistas seda %{resource} salvestamast:' + other: "%{count} viga takistas seda %{resource} salvestamast:" diff --git a/config/locales/devise.eu.yml b/config/locales/devise.eu.yml index 3526f2ab5..473246d8a 100644 --- a/config/locales/devise.eu.yml +++ b/config/locales/devise.eu.yml @@ -46,6 +46,18 @@ eu: extra: Ez baduzu hau eskatu, mesedez ezikusi e-mail hau. Zure pasahitza ez da aldatuko goiko estekara sartu eta berri bat sortzen ez baduzu. subject: 'Mastodon: Pasahitza berrezartzeko argibideak' title: Pasahitza berrezartzea + two_factor_disabled: + explanation: Bi faktoreetako autentifikazioa desgaitu da zure kontuan. Orain saioa hasi daiteke e-mail helbidea eta pasahitza bakarrik erabilita. + subject: 'Mastodon: Bi faktoreetako autentifikazioa desgaituta' + title: 2FA desgaituta + two_factor_enabled: + explanation: Bi faktoreetako autentifikazioa gaitu da zure kontuan. Token bat sortu du lotutako TOTP aplikazioak eta saioa hasteko eskatuko da. + subject: 'Mastodon: Bi faktoreetako autentifikazioa gaituta' + title: 2FA gaituta + two_factor_recovery_codes_changed: + explanation: Aurreko kodeak baliogabetu dira eta berriak sortu dira. + subject: 'Mastodon: Bi faktoreetako berreskuratze kodeak birsortuta' + title: 2FA berreskuratze kodeak aldatuta unlock_instructions: subject: 'Mastodon: Desblokeatzeko argibideak' omniauth_callbacks: diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml index 963572e6b..0954c8484 100644 --- a/config/locales/devise.fa.yml +++ b/config/locales/devise.fa.yml @@ -46,6 +46,18 @@ fa: extra: اگر شما چنین درخواستی نکردید، لطفاً این ایمیل را نادیده بگیرید. تا زمانی که شما پیوند بالا را باز نکنید و رمز تازهای نسازید، رمز شما عوض نخواهد شد. subject: 'ماستدون: راهنمایی برای بازنشانی رمز' title: بازنشانی رمز + two_factor_disabled: + explanation: ورود دومرحلهای برای حساب شما غیرفعال شده است. از الان میتوانید تنها با نشانی ایمیل و رمز وارد حساب خود شوید. + subject: 'ماستدون: ورود دومرحلهای فعال نیست' + title: ورود دومرحلهای غیرفعال + two_factor_enabled: + explanation: ورود دومرحلهای برای حساب شما فعال شده است. برای ورود به کدی نیاز خواهید داشت که نرمافزار TOTP از پیش تنظیم شده برایتان میسازد. + subject: 'ماستدون: ورود دومرحلهای فعال است' + title: ورود دومرحلهای فعال + two_factor_recovery_codes_changed: + explanation: کدهای بازیابی قبلی نامعتبر شدهاند و کدهای تازهای ساخته شدهاند. + subject: 'ماستدون: کدهای بازیابی برای ورود دومرحلهای دوباره ساخته شدند' + title: کدهای ورود دومرحلهای تغییر کرد unlock_instructions: subject: 'ماستدون: راهنمایی برای بازکردن قفل' omniauth_callbacks: diff --git a/config/locales/devise.fi.yml b/config/locales/devise.fi.yml index 12ab0f3ab..84a471459 100644 --- a/config/locales/devise.fi.yml +++ b/config/locales/devise.fi.yml @@ -2,34 +2,36 @@ fi: devise: confirmations: - confirmed: Sähköpostiosoitteen vahvistus onnistui. - send_instructions: Saat kohta sähköpostitse ohjeet, kuinka vahvistat sähköpostiosoitteen. Jos et saa viestiä, tarkista roskapostikansio. - send_paranoid_instructions: Jos sähköpostiosoite on tietokannassamme, saat pian ohjeet, kuinka vahvistat osoitteen. Jos et saa viestiä, tarkista roskapostikansio. + confirmed: Sähköpostiosoitteesi vahvistus onnistui. + send_instructions: Saat pian sähköpostitse ohjeet sähköpostiosoitteesi vahvistamiseen. Jos et saanut viestiä, tarkista roskapostikansiosi. + send_paranoid_instructions: Jos sähköpostiosoitteesi on tietokannassamme, saat pian ohjeet osoitteesi vahvistamiseen. Jos et saanut viestiä, tarkista roskapostikansiosi. failure: already_authenticated: Olet jo kirjautunut sisään. inactive: Tiliäsi ei ole vielä aktivoitu. invalid: Virheellinen %{authentication_keys} tai salasana. - last_attempt: Voit yrittää enää kerran, ennen kuin tili lukitaan. - locked: Tili on lukittu. + last_attempt: Sinulla on vielä yksi yritys ennen kuin tunnuksesi lukitaan. + locked: Tilisi on lukittu. not_found_in_database: Virheellinen %{authentication_keys} tai salasana. - timeout: Istunto on umpeutunut. Jatka kirjautumalla sisään. - unauthenticated: Kirjaudu sisään tai rekisteröidy, jos haluat jatkaa. + pending: Tämä tili on vielä tarkistamatta. + timeout: Istuntosi on umpeutunut. Jatka kirjautumalla uudelleen sisään. + unauthenticated: Sinun pitää kirjautua sisään tai rekisteröityä ennen kuin voit jatkaa. unconfirmed: Vahvista sähköpostiosoitteesi, ennen kuin jatkat. mailer: confirmation_instructions: - action: Vahvista sähköpostiosoite + action: Vahvista sähköpostiosoitteesi action_with_app: Vahvista ja palaa %{app} explanation: Olet luonut tilin palvelimelle %{host} käyttäen tätä sähköpostiosoitetta. Aktivoi tili yhdellä klikkauksella. Jos et luonut tiliä itse, voit jättää tämän viestin huomiotta. - extra_html: Katso myös <a href="%{terms_path}">instanssin säännöt</a> ja <a href="%{policy_path}">käyttöehdot</a>. - subject: 'Mastodon: Vahvistusohjeet - %{instance}' - title: Vahvista sähköpostiosoite + explanation_when_pending: Teit hakemuksen kutsusta palvelimelle %{host} tällä sähköpostiosoitteella. Kun olet vahvistanut sähköpostiosoitteesi, tarkistamme hakemuksesi. Voit kirjautua sisään muuttaaksesi hakemuksen sisältöä tai poistaaksesi tilin, mutta et voi käyttää suurinta osaa toiminnallisuudesta ennen kuin hakemuksesi on hyväksytty. Jos hakemuksesi hylätään, tietosi poistetaan eikä sinulta tarvita enempää toimia. Jos sinä et tehnyt hakemusta, voit jättää tämän viestin huomiotta. + extra_html: Katso myös <a href="%{terms_path}">palvelimen säännöt</a> ja <a href="%{policy_path}">käyttöehdot</a>. + subject: 'Mastodon: Vahvistusohjeet palvelimelle %{instance}' + title: Vahvista sähköpostiosoitteesi email_changed: explanation: 'Tilin sähköpostiosoitteeksi vaihdetaan:' extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä. Jos et pääse kirjautumaan tilillesi, ota yhteyttä instanssin ylläpitäjään. subject: 'Mastodon: Sähköpostiosoite vaihdettu' title: Uusi sähköpostiosoite password_change: - explanation: Tilin salasana on vaihdettu. + explanation: Tilisi salasana on vaihdettu. extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä. Jos et pääse kirjautumaan tilillesi, ota yhteyttä instanssin ylläpitäjään. subject: 'Mastodon: Salasana vaihdettu' title: Salasana vaihdettu @@ -44,6 +46,18 @@ fi: extra: Jos et tehnyt pyyntöä itse, voit jättää tämän viestin huomiotta. Salasanaasi ei vaihdeta, ennen kuin klikkaat yllä olevaa linkkiä ja luot uuden salasanan. subject: 'Mastodon: Ohjeet salasanan vaihtoon' title: Salasanan vaihto + two_factor_disabled: + explanation: Kaksivaiheinen tunnistus tilillesi on otettu pois käytöstä. Kirjautuminen onnistuu nyt pelkällä sähköpostiosoitteella ja salasanalla. + subject: 'Mastodon: Kaksivaiheinen tunnistut otettu pois käytöstä' + title: 2FA poistettu käytöstä + two_factor_enabled: + explanation: Kaksivaiheinen tunnistus on otettu käyttöön tilillesi. Koodi kaksivaiheisen tunnistuksen sovelluksesta tarvitaan kirjautumiseen. + subject: 'Mastodon: Kaksivaiheinen tunnistus otettu käyttöön' + title: 2FA käytössä + two_factor_recovery_codes_changed: + explanation: Aiemmat palautuskoodi on poistettu käytöstä ja uudet on luotu. + subject: 'Mastodon: Kaksivaiheisen tunnistuksen palautuskoodit uudelleenluotu' + title: 2FA palautuskoodit vaihdettu unlock_instructions: subject: 'Mastodon: Ohjeet lukituksen poistoon' omniauth_callbacks: @@ -60,6 +74,7 @@ fi: signed_up: Tervetuloa! Rekisteröityminen onnistui. signed_up_but_inactive: Rekisteröityminen onnistui. Emme kuitenkaan voi kirjata sinua sisään, sillä tiliäsi ei ole vielä aktivoitu. signed_up_but_locked: Rekisteröityminen onnistui. Emme kuitenkaan voi kirjata sinua sisään, sillä tilisi on lukittu. + signed_up_but_pending: Sähköpostiosoitteeseesi on lähetetty vahvistuslinkki. Kun olet klikannut linkkiä, tarkistamme hakemuksesi. Sinulle tiedotetaan jos se hyväksytään. signed_up_but_unconfirmed: Sähköpostiosoitteeseesi on lähetetty vahvistuslinkki. Aktivoi tili seuraamalla linkkiä. Jos et saanut viestiä, tarkista roskapostikansio. update_needs_confirmation: Tilin päivitys onnistui, mutta uusi sähköpostiosoite on vahvistettava. Tarkista sähköpostisi ja vahvista uusi sähköpostiosoite seuraamalla vahvistuslinkkiä. Jos et saanut viestiä, tarkista roskapostikansio. updated: Tilin päivitys onnistui. diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml index 2d3c86c1f..71c647f2b 100644 --- a/config/locales/devise.fr.yml +++ b/config/locales/devise.fr.yml @@ -2,26 +2,26 @@ fr: devise: confirmations: - confirmed: Votre compte a été validé. - send_instructions: Vous allez recevoir les instructions nécessaires à la confirmation de votre compte dans quelques minutes. Veuillez, dans le cas où vous ne recevriez pas ce message, vérifier votre dossier d’indésirables. + confirmed: Votre adresse courriel a été validée. + send_instructions: Vous allez recevoir par courriel les instructions nécessaires à la confirmation de votre compte dans quelques minutes. Veuillez, dans le cas où vous ne recevriez pas ce message, vérifier votre dossier d’indésirables. send_paranoid_instructions: Si votre adresse électronique existe dans notre base de données, vous allez bientôt recevoir un courriel contenant les instructions de confirmation de votre compte. Veuillez, dans le cas où vous ne recevriez pas ce message, vérifier votre dossier d’indésirables. failure: already_authenticated: Vous êtes déjà connecté⋅e. inactive: Votre compte n’est pas encore activé. invalid: "%{authentication_keys} ou mot de passe invalide." - last_attempt: Vous avez droit à une tentative avant que votre compte ne soit verrouillé. + last_attempt: Vous avez droit à une dernière tentative avant que votre compte ne soit verrouillé. locked: Votre compte est verrouillé. not_found_in_database: "%{authentication_keys} ou mot de passe invalide." pending: Votre compte est toujours en cours d'approbation. timeout: Votre session a expiré. Veuillez vous reconnecter pour continuer. unauthenticated: Vous devez vous connecter ou vous inscrire pour continuer. - unconfirmed: Vous devez valider votre compte pour continuer. + unconfirmed: Vous devez valider votre adresse courriel pour continuer. mailer: confirmation_instructions: action: Vérifier l’adresse courriel action_with_app: Confirmer et retourner à %{app} explanation: Vous avez créé un compte sur %{host} avec cette adresse courriel. Vous êtes à un clic de l’activer. Si ce n’était pas vous, veuillez ignorer ce courriel. - explanation_when_pending: Vous avez demandé à vous inscrire à %{host} avec cette adresse courriel. Une fois que vous aurez confirmé cette adresse, nous étudierons votre demande. Vous ne pourrez pas vous connecté d'ici-là. Si votre demande est refusée, vos données seront supprimées du serveur, aucune action supplémentaire de votre part n'est donc requise. Si vous n'êtes pas à l'origine de cette demande, veuillez ignorer ce courriel. + explanation_when_pending: Vous avez demandé à vous inscrire à %{host} avec cette adresse de courriel. Une fois que vous aurez confirmé cette adresse, nous étudierons votre demande. Vous ne pourrez pas vous connecter d’ici-là. Si votre demande est refusée, vos données seront supprimées du serveur, aucune action supplémentaire de votre part n’est donc requise. Si vous n’êtes pas à l’origine de cette demande, veuillez ignorer ce message. extra_html: Merci de consultez également <a href="%{terms_path}">les règles du serveur</a> et <a href="%{policy_path}">nos conditions d’utilisation</a>. subject: 'Mastodon : Merci de confirmer votre inscription sur %{instance}' title: Vérifier l’adresse courriel @@ -38,7 +38,7 @@ fr: reconfirmation_instructions: explanation: Confirmez la nouvelle adresse pour changer votre courriel. extra: Si ce changement n’a pas été initié par vous, veuillez ignorer ce courriel. L’adresse courriel du compte Mastodon ne changera pas tant que vous n’aurez pas cliqué sur le lien ci-dessus. - subject: 'Mastodon : Confirmez l’adresse pour %{instance}' + subject: 'Mastodon : Confirmez l’adresse courriel pour %{instance}' title: Vérifier l’adresse courriel reset_password_instructions: action: Modifier le mot de passe @@ -46,6 +46,18 @@ fr: extra: Si vous ne l’avez pas demandé, veuillez ignorer ce courriel. Votre mot de passe ne changera pas tant que vous n’aurez pas cliqué sur le lien ci-dessus et que vous n’en aurez pas créé un nouveau. subject: 'Mastodon : Instructions pour changer votre mot de passe' title: Réinitialisation du mot de passe + two_factor_disabled: + explanation: L'authentification à deux facteurs pour votre compte a été désactivée. La connexion est maintenant possible en utilisant uniquement l'adresse courriel et le mot de passe. + subject: 'Mastodon : authentification à deux facteurs désactivée' + title: 2FA désactivée + two_factor_enabled: + explanation: L'authentification à deux facteurs a été activée pour votre compte. Un jeton généré par l'application appairée TOTP sera nécessaire pour vous connecter. + subject: 'Mastodon : authentification à deux facteurs activée' + title: A2F activée + two_factor_recovery_codes_changed: + explanation: Les codes de récupération précédents ont été invalidés et de nouveaux ont été générés. + subject: 'Mastodon : codes de récupération à deux facteurs ré-générés' + title: Codes de récupération 2FA modifiés unlock_instructions: subject: 'Mastodon : Instructions pour déverrouiller votre compte' omniauth_callbacks: diff --git a/config/locales/devise.gl.yml b/config/locales/devise.gl.yml index 60a935a8a..0ce335576 100644 --- a/config/locales/devise.gl.yml +++ b/config/locales/devise.gl.yml @@ -46,6 +46,18 @@ gl: extra: Si non fixo esta solicitude, por favor ignore este correo. O seu contrasinal non cambiará ate que acceda a ligazón superior e cree unha nova. subject: 'Mastodon: Instruccións para restablecer o contrasinal' title: Restablecer contrasinal + two_factor_disabled: + explanation: Desactivouse o segundo factor de autenticación para túa conta. Agora xa podes conectarte utilizando só o correo-e e contrasinal. + subject: 'Mastodon: Autenticación con dobre factor desactivada' + title: 2FA desactivada + two_factor_enabled: + explanation: A autenticación con dobre factor foi activada para a túa conta. Pedirase o testemuño xerado pola aplicación TOTP emparellada. + subject: 'Mastodon: Activouse o dobre factor de autenticación' + title: 2FA activado + two_factor_recovery_codes_changed: + explanation: Os códigos de recuperación anteriores quedan anulados e os novos foron creados. + subject: 'Mastodon: Código de recuperación do dobre factor rexenerados' + title: Códigos de recuperación 2FA cambiados unlock_instructions: subject: 'Mastodon: Instruccións para desbloquear' omniauth_callbacks: diff --git a/config/locales/devise.hi.yml b/config/locales/devise.hi.yml new file mode 100644 index 000000000..d758a5b53 --- /dev/null +++ b/config/locales/devise.hi.yml @@ -0,0 +1 @@ +hi: diff --git a/config/locales/devise.hu.yml b/config/locales/devise.hu.yml index 67baca016..62888be74 100644 --- a/config/locales/devise.hu.yml +++ b/config/locales/devise.hu.yml @@ -2,40 +2,43 @@ hu: devise: confirmations: - confirmed: Az e-mail címed sikeresen meg lett erősítve. + confirmed: Az e-mail címed sikeresen megerősítésre került. send_instructions: Pár percen belül kapni fogsz egy e-mailt az e-mail címed megerősítéséhez szükséges lépésekről. send_paranoid_instructions: Ha az e-mail címed létezik az adatbázisunkban, pár percen belül kapni fogsz egy e-mailt az e-mail címed megerősítéséhez szükséges lépésekről. failure: already_authenticated: Már bejelentkeztél. - inactive: Fiókod még nem lett aktiválva. + inactive: Fiókodat még nem aktiválták. invalid: Helytelen %{authentication_keys} vagy jelszó. - last_attempt: Már csak egy próbálkozásod maradt mielőtt a fiókod lezárásra kerül. + last_attempt: Már csak egy próbálkozásod maradt mielőtt a fiókodat lezárjuk. locked: Fiókod le van zárva. not_found_in_database: Helytelen %{authentication_keys} vagy jelszó. + pending: Fiókod még engedélyezés alatt áll. timeout: A munkamenet lejárt. Jelentkezz be újra a folytatáshoz. unauthenticated: A folytatás előtt be kell jelentkezned. unconfirmed: A folytatás előtt meg kell erősítened az e-mail címed. mailer: confirmation_instructions: action: Erősítsd meg az e-mail címedet - explanation: Ezzel az e-mail címmel kezdeményeztek regisztrációt a(z) %{host} oldalon. Csak egy kattintás, és a felhasználói fiókdat aktiváljuk. Ha a regisztrációt nem te kezdeményezted, kérjük tekintsd ezt az e-mailt tárgytalannak. - extra_html: Kérjük tekintsd át a <a href="%{terms_path}">az instancia szabályzatát</a> és <a href="%{policy_path}">a felhasználási feltételeket</a>. + action_with_app: Megerősítés majd vissza ide %{app} + explanation: Ezzel az e-mail címmel kezdeményeztek regisztrációt a(z) %{host} oldalon. Csak egy kattintás, és a felhasználói fiókodat aktiváljuk. Ha a regisztrációt nem te kezdeményezted, kérjük tekintsd ezt az e-mailt tárgytalannak. + explanation_when_pending: Ezzel az e-mail címmel meghívást kértél a(z) %{host} oldalon. Ahogy megerősíted az e-mail címed, átnézzük a jelentkezésedet. Ennek ideje alatt nem tudsz belépni. Ha a jelentkezésed elutasítjuk, az adataidat töröljük, más teendőd nincs. Ha a kérelmet nem te kezdeményezted, kérjük tekintsd ezt az e-mailt tárgytalannak. + extra_html: Kérjük tekintsd át a <a href="%{terms_path}">a szerver szabályzatát</a> és <a href="%{policy_path}">a felhasználási feltételeket</a>. subject: 'Mastodon: Megerősítési lépések %{instance}' title: E-mail cím megerősítése email_changed: explanation: 'A fiókodhoz tartozó e-mail címet az alábbira módosítod:' - extra: Ha nem te kezdeményezted a fiókodhoz tartozó e-mail cím módosítását, valaki hozzáférhetett a fiókodhoz. Legjobb, ha azonnal megváltoztatod a jelszavadat; ha nem férsz hozzá a fiókodhoz, vedd fel a kapcsolatot az instanciád adminisztrátorával. + extra: Ha nem te kezdeményezted a fiókodhoz tartozó e-mail cím módosítását, valaki hozzáférhetett a fiókodhoz. Legjobb, ha azonnal megváltoztatod a jelszavadat; ha nem férsz hozzá a fiókodhoz, vedd fel a kapcsolatot a szervered adminisztrátorával. subject: 'Mastodon: a fiókodhoz tartozó e-mail címet megváltoztattuk' title: Új e-mail cím password_change: explanation: A fiókodhoz tartozó jelszót megváltoztattuk. - extra: Ha nem te kezdeményezted a fiókodhoz tartozó jelszó módosítását, valaki hozzáférhetett a fiókodhoz. Legjobb, ha azonnal megváltoztatod a jelszavadat; ha nem férsz hozzá a fiókodhoz, vedd fel a kapcsolatot az instanciád adminisztrátorával. - subject: 'Mastodon: Jelszó megváltoztatva' - title: Sikeres jelszó-módosítás + extra: Ha nem te kezdeményezted a fiókodhoz tartozó jelszó módosítását, valaki hozzáférhetett a fiókodhoz. Legjobb, ha azonnal megváltoztatod a jelszavadat; ha nem férsz hozzá a fiókodhoz, vedd fel a kapcsolatot a szervered adminisztrátorával. + subject: 'Mastodon: Jelszavad megváltoztattuk' + title: Sikeres jelszómódosítás reconfirmation_instructions: explanation: Az e-mail cím megváltoztatásához meg kell erősítened az új címet. extra: Amennyiben nem te kezdeményezted a módosítást, kérjük tekintsd ezt az e-mailt tárgytalannak. A Mastodon fiókodhoz tartozó e-mail címed változatlan marad mindaddig, amíg rá nem kattintasz a fenti linkre. - subject: 'Mastodon: erősítsd meg a(z) %{instance} instanciához tartozó e-mail címed' + subject: 'Mastodon: erősítsd meg a(z) %{instance} szerverhez tartozó e-mail címed' title: E-mail cím megerősítése reset_password_instructions: action: Jelszó módosítása @@ -43,33 +46,46 @@ hu: extra: Amennyiben nem te kezdeményezted a módosítást, kérjük tekintsd ezt az e-mailt tárgytalannak. A Mastodon fiókodhoz tartozó jelszavad változatlan marad mindaddig, amíg újat nem hozol létre a fenti linkre kattintva. subject: 'Mastodon: Jelszó visszaállítási lépések' title: Jelszó visszaállítása + two_factor_disabled: + explanation: A fiókod kétlépcsős hitelesítését letiltottuk. A bejelentkezés most már csak e-mail címmel és jelszóval lehetséges. + subject: Kétlépcsős azonosítás letiltva + title: Kétlépcsős hitelesítés engedélyezve + two_factor_enabled: + explanation: Kétlépcsős hitelesítés engedélyezve van a fiókodban. Bejelentkezéshez a párosított TOTP alkalmazás által létrehozott tokenre lesz szükség. + subject: Kétlépcsős azonosítás engedélyezve + title: Kétlépcsős hitelesítés engedélyezve + two_factor_recovery_codes_changed: + explanation: A korábbi helyreállítási kódokat letiltottuk, és újakat generáltunk. + subject: Kétlépcsős helyreállítási kódok újra létrejöttek + title: A kétlépcsős kódok megváltozott unlock_instructions: subject: 'Mastodon: Feloldási lépések' omniauth_callbacks: - failure: "%{kind} nem hitelesíthető, mert %{reason}." + failure: Sikertelen hitelesítés %{kind} fiókról, mert "%{reason}". success: Sikeres hitelesítés %{kind} fiókról. passwords: - no_token: Nem férhetsz hozzá az oldalhoz jelszó visszaállító e-mail nélkül. Ha egy jelszó visszaállító e-mail hozott ide, ellenőrizd, hogy a megadott teljes URL-t használd. - send_instructions: Pár percen belül kapni fogsz egy e-mailt arról, hogy hogyan tudod visszaállítani a jelszavadat. - send_paranoid_instructions: Ha létezik az e-mail cím, pár percen belül kapni fogsz egy e-mailt arról, hogy hogyan tudod visszaállítani a jelszavadat. + no_token: Nem férhetsz hozzá ehhez az oldalhoz jelszó visszaállító e-mail nélkül. Ha egy jelszó visszaállító e-mail hozott ide, ellenőrizd, hogy a megadott teljes URL-t használd. + send_instructions: Pár percen belül kapni fogsz egy e-mailt arról, hogy hogyan tudod visszaállítani a jelszavadat. Kérlek ellenőrizd a levélszemét mappádat, ha nem kaptál ilyen e-mailt. + send_paranoid_instructions: Ha létezik az e-mail cím, pár percen belül kapni fogsz egy e-mailt arról, hogy hogyan tudod visszaállítani a jelszavadat. Kérlek ellenőrizd a levélszemét mappádat, ha nem kaptál ilyen e-mailt. updated: Jelszavad sikeresen frissült. Bejelentkeztél. - updated_not_active: Jelszavad sikeresen meg lett változtatva. + updated_not_active: Jelszavad sikeresen megváltoztattuk. registrations: - destroyed: Viszlát! A fiókod sikeresen törölve. Reméljük hamarosan viszontláthatunk. + destroyed: Viszlát! A fiókodat sikeresen töröltük. Reméljük hamarosan viszontláthatunk. signed_up: Üdvözlünk! Sikeresen regisztráltál. - signed_up_but_inactive: Sikeresen regisztráltál. Ennek ellenére nem tudunk beléptetni, ugyanis a fiókod még nem lett aktiválva. - signed_up_but_locked: Sikeresen regisztráltál. Ennek ellenére nem tudunk beléptetni, ugyanis a fiókod le lett zárva. - signed_up_but_unconfirmed: Egy üzenet a megerősítési linkkel kiküldésre került az e-mail címedre. Kérjük használd a linket a fiókod aktiválásához. - update_needs_confirmation: Sikeresen frissítetted a fiókodat, de szükségünk van az e-mail címed megerősítésére. Kérlek ellenőrizd az e-mailedet és kövesd a levélben szereplő megerősítési linket az e-mail címed megerősítéséhez. + signed_up_but_inactive: Sikeresen regisztráltál. Ennek ellenére nem tudunk beléptetni, ugyanis a fiókodat még nem aktiválták. + signed_up_but_locked: Sikeresen regisztráltál. Ennek ellenére nem tudunk beléptetni, ugyanis a fiókod le van zárva. + signed_up_but_pending: Egy üzenetet a megerősítési linkkel kiküldtünk az e-mail címedre. Ha kattintasz a linkre, átnézzük a kérelmedet. Értesítünk, ha jóváhagytuk. + signed_up_but_unconfirmed: Egy üzenetet a megerősítési linkkel kiküldtünk az e-mail címedre. Kérjük használd a linket a fiókod aktiválásához. + update_needs_confirmation: Sikeresen frissítetted a fiókodat, de szükségünk van az e-mail címed megerősítésére. Kérlek ellenőrizd az e-mailedet és kövesd a levélben szereplő megerősítési linket az e-mail címed megerősítéséhez. Ellenőrizd a levélszemét mappád, ha nem kaptál volna ilyen levelet. updated: Fiókod frissítése sikeres. sessions: - already_signed_out: Sikeres kijelenkezés. + already_signed_out: Sikeres kijelentkezés. signed_in: Sikeres bejelentkezés. signed_out: Sikeres kijelentkezés. unlocks: - send_instructions: Pár percen belül egy e-mailt fogsz kapni a feloldáshoz szükséges lépésekkel. - send_paranoid_instructions: Ha a fiókod létezik, pár percen belül egy e-mailt fogsz kapni a feloldáshoz szükséges lépésekkel. - unlocked: A fiókod sikeresen fel lett oldva. Jelentkezz be a folytatáshoz. + send_instructions: Pár percen belül egy e-mailt fogsz kapni a feloldáshoz szükséges lépésekkel. Ellenőrizd a levélszemét mappád, ha nem kaptál volna ilyen levelet. + send_paranoid_instructions: Ha a fiókod létezik, pár percen belül egy e-mailt fogsz kapni a feloldáshoz szükséges lépésekkel. Ellenőrizd a levélszemét mappád, ha nem kaptál volna ilyen levelet. + unlocked: A fiókodat sikeresen feloldottuk. Jelentkezz be a folytatáshoz. errors: messages: already_confirmed: már meg lett erősítve, kérjük jelentkezz be diff --git a/config/locales/devise.id.yml b/config/locales/devise.id.yml index 5fa902091..5b4e8af43 100644 --- a/config/locales/devise.id.yml +++ b/config/locales/devise.id.yml @@ -12,16 +12,52 @@ id: last_attempt: Anda memiliki beberapa kali mencoba sebelum akun anda dikunci. locked: Akun anda dikunci. not_found_in_database: Ada %{authentication_keys} atau kata sandi yang tidak cocok. + pending: Akun Anda masih dalam peninjauan. timeout: Sesi anda telah berakhir. Silahkan coba masuk lagi. unauthenticated: Anda harus masuk atau mendaftar terlebih dahulu. unconfirmed: Anda harus mengkonfirmasi alamat email terlebih dahulu. mailer: confirmation_instructions: + action: Verifikasi alamat surel + action_with_app: Konfirmasi dan kembali ke %{app} + explanation: Anda membuat akun di %{host} dengan surel ini. Anda hanya perlu satu klik untuk mengaktifkannya. Jika ini bukan Anda, abaikan surel ini. + explanation_when_pending: Anda melamar undangan ke %{host} dengan surel ini. Saat Anda mengonfirmasi alamat surel Anda, kami akan meninjaunya. Anda dapat masuk untuk mengubah detail Anda atau menghapus akun Anda, tapi Anda tak dapat mengakses mayoritas fungsi sampai akun disetujui. Jika lamaran anda ditolak, data Anda akan dihapus, tak ada aksi lain yang dilakukan dari Anda. Jika ini bukan Anda, abaikan surel ini. + extra_html: Tolong cek juga <a href="%{terms_path}">peraturan server</a> dan <a href="%{policy_path}">ketentuan layanan kami</a>. subject: 'Mastodon: Petunjuk mengkonfirmasi untuk %{instance}' + title: Verifikasi alamat surel + email_changed: + explanation: 'Alamat surel akun Anda diubah menjadi:' + extra: Jika Anda tak mengganti surel Anda, mungkin seseorang telah mendapatkan akses ke Akun Anda. Mohon ubah kata sandi secepatnya atau hubungi admin server jika Anda dikunci dari akun Anda. + subject: 'Mastodon: Surel diganti' + title: Alamat surel baru password_change: + explanation: Kata sandi akun Anda telah diganti. + extra: Jika Anda tak mengubah kata sandi Anda, mungkin seseorang telah mendapatkan akses ke akun Anda. Mohon ubah kata sandi secepatnya atau hubungi admin server jika Anda dikunci dari akun Anda. subject: 'Mastodon: Kata sandi telah diubah' + title: Kata sandi diubah + reconfirmation_instructions: + explanation: Konfirmasi alamat baru untuk mengubah surel Anda. + extra: Jika perubahan ini tidak dimulai dari Anda, abaikan surel ini. Alamat surel untuk akun Mastodon tak berubah sampai Anda mengakses tautan di atas. + subject: 'Mastodon: Konfirmasi surel untuk %{instance}' + title: Verifikasi alamat surel reset_password_instructions: + action: Ubah kata sandi + explanation: Kata sandi baru yang diminta untuk akun Anda. + extra: Jika Anda tak meminta ini, abaikan surel ini. Kata sandi tak berubah sampai Anda mengakses tautan di atas dan membuatnya yang baru. subject: 'Mastodon: Petunjuk mereset kata sandi' + title: Reset kata sandi + two_factor_disabled: + explanation: Otentifikasi dua-faktor untuk akun Anda dimatikan. Kini Masuk dapat dilakukan hanya dengan alamat surel dan kata sandi. + subject: 'Mastodon: Otentifikasi dua-faktor dimatikan' + title: 2FA dimatikan + two_factor_enabled: + explanation: Otentifikasi dua-faktor telah dimatikan untuk Akun Anda. Token yang dibuat menggunakan aplikasi TOTP berpasangan akan diperlukan untuk masuk. + subject: 'Mastodon: Otentifikasi dua-faktor diaktifkan' + title: 2FA diaktifkan + two_factor_recovery_codes_changed: + explanation: Kode pemulihan sebelumnya telah dibatalkan dan yang baru telah dibuat. + subject: 'Mastodon: Kode pemulihan dua-faktor dibuat ulang' + title: Kode pemulihan 2FA diubah unlock_instructions: subject: 'Mastodon: Petunjuk membuka' omniauth_callbacks: @@ -38,6 +74,7 @@ id: signed_up: Selamat datang! Pendaftaran anda berhasil. signed_up_but_inactive: Anda berhasil melakukan pendaftaran. Tetapi kami tidak dapat memasukkan anda karena akun anda belum diaktifkan. signed_up_but_locked: Anda berhasil melakukan pendaftaran. Tetapi kami tidak dapat memasukkan anda karena akun anda dikunci. + signed_up_but_pending: Pesan dengan tautan konfirmasi telah dikirim ke alamat surel Anda. Setelah Anda mengklik tautan, kami akan meninjau lamaran Anda. Anda akan diberitahu jika diterima. signed_up_but_unconfirmed: Sebuah pesan berisi link konfirmasi telah dikirim ke alamat email anda. Silakan ikuti link tersebut untuk mengaktifkan akun anda. update_needs_confirmation: Akun anda telah berhasil diubah, tetapi kami harus memverifikasi alamat email anda yang baru. Mohon cek email anda dan ikuti link untuk mengkonfirmasi alamat email anda yang baru. updated: Akun anda berhasil diubah. diff --git a/config/locales/devise.it.yml b/config/locales/devise.it.yml index fc36fdbff..85c010495 100644 --- a/config/locales/devise.it.yml +++ b/config/locales/devise.it.yml @@ -12,6 +12,7 @@ it: last_attempt: Hai un altro tentativo prima che il tuo account venga bloccato. locked: Il tuo account è stato bloccato. not_found_in_database: "%{authentication_keys} o password invalida." + pending: Il tuo account è ancora in fase di approvazione. timeout: La tua sessione è terminata. Per favore, effettua l'accesso o registrati per continuare. unauthenticated: Devi effettuare l'accesso o registrarti per continuare. unconfirmed: Devi confermare il tuo indirizzo email per continuare. @@ -20,6 +21,7 @@ it: action: Verifica indirizzo email action_with_app: Conferma e torna a %{app} explanation: Hai creato un account su %{host} con questo indirizzo email. Sei lonatno solo un clic dall'attivarlo. Se non sei stato tu, per favore ignora questa email. + explanation_when_pending: Hai richiesto un invito a %{host} con questo indirizzo email. Una volta confermato il tuo indirizzo e-mail, analizzeremo la tua richiesta. Non potrai eseguire l'accesso fino a quel momento. Se la tua richiesta sarà rifiutata, i tuoi dati saranno rimossi, quindi nessun'altra azione ti sarà richiesta. Se non fossi stato tu, per favore ignora questa email. extra_html: Per favore controlla<a href="%{terms_path}">le regole del server</a> e <a href="%{policy_path}">i nostri termini di servizio</a>. subject: 'Mastodon: Istruzioni di conferma per %{instance}' title: Verifica indirizzo email @@ -44,6 +46,18 @@ it: extra: Se questo cambiamento non è stato chiesto da te, ignora questa email. La tua password non verrà cambiata finché non accedi tramite il link qui sopra e ne crei una nuova. subject: 'Mastodon: Istruzioni per il reset della password' title: Ripristino password + two_factor_disabled: + explanation: L'autenticazione a due fattori per il tuo account è stata disattivata. Il login è ora possibile utilizzando solo l'indirizzo e-mail e la password. + subject: 'Mastodon: Autenticazione a due fattori disattivata' + title: 2FA disabilitata + two_factor_enabled: + explanation: L'autenticazione a due fattori è stata attivata per il tuo account. Un token generato dall'app TOTP collegata sarà richiesto per il login. + subject: 'Mastodon: Autenticazione a due fattori attivata' + title: 2FA abilitata + two_factor_recovery_codes_changed: + explanation: I precedenti codici di recupero sono stati annullati e ne sono stati generati di nuovi. + subject: 'Mastodon: codici di recupero a due fattori ri-generati' + title: Codici di recupero 2FA modificati unlock_instructions: subject: 'Mastodon: Istruzioni di sblocco' omniauth_callbacks: @@ -60,6 +74,7 @@ it: signed_up: Benvenuto! Ti sei registrato con successo. signed_up_but_inactive: Ti sei registrato con successo. Purtroppo però non possiamo farti accedere perché non hai ancora attivato il tuo account. signed_up_but_locked: Ti sei registrato con successo. Purtroppo però non possiamo farti accedere perché il tuo account è bloccato. + signed_up_but_pending: Un messaggio con un collegamento per la conferma è stato inviato al tuo indirizzo email. Dopo aver cliccato il collegamento, esamineremo la tua richiesta. Ti sarà notificato se verrà approvata. signed_up_but_unconfirmed: Un messaggio con un link di conferma è stato inviato al tuo indirizzo email. Per favore, visita il link per attivare il tuo account. update_needs_confirmation: Hai aggiornato correttamente il tuo account, ma abbiamo bisogno di verificare il tuo nuovo indirizzo email. Per favore, controlla la posta in arrivo e visita il link di conferma per verificare il tuo indirizzo email. updated: Il tuo account è stato aggiornato con successo. diff --git a/config/locales/devise.ja.yml b/config/locales/devise.ja.yml index dc147be62..e697e290d 100644 --- a/config/locales/devise.ja.yml +++ b/config/locales/devise.ja.yml @@ -20,19 +20,19 @@ ja: confirmation_instructions: action: メールアドレスの確認 action_with_app: 確認し %{app} に戻る - explanation: このメールアドレスで%{host}にアカウントを作成しました。有効にするまであと一歩です。もし心当たりがない場合、申し訳ありませんがこのメールを無視してください。 - explanation_when_pending: このメールアドレスで%{host}への登録を申請しました。あなたがメールアドレスを確認したら、サーバー管理者が申請を審査します。それまでログインできません。申請が却下された場合、あなたのデータは削除されますので以降の操作は必要ありません。もし心当たりがない場合、申し訳ありませんがこのメールを無視してください。 - extra_html: また <a href="%{terms_path}">サーバーのルール</a> と <a href="%{policy_path}">利用規約</a> もお読みください。 + explanation: このメールアドレスで%{host}にアカウントを作成しました。アカウントの有効化まであと一歩です。なお、もし心当たりがない場合は、申し訳ありませんがこのメールを無視してください。 + explanation_when_pending: このメールアドレスで %{host} への登録を申請しました。あなたがメールアドレスを確認したら、サーバー管理者が申請を審査します。ログインして一部設定を変更したりアカウントを削除できますが、ほとんどの機能は申請が承認されるまで利用できません。申請が却下された場合、あなたのデータは削除されますので以降の操作は必要ありません。もし心当たりがない場合、申し訳ありませんがこのメールを無視してください。 + extra_html: あわせて、<a href="%{terms_path}">サーバーのルール</a> と <a href="%{policy_path}">利用規約</a> もお読みください。 subject: 'Mastodon: メールアドレスの確認 %{instance}' title: メールアドレスの確認 email_changed: explanation: 'アカウントのメールアドレスは以下のように変更されます:' - extra: メールアドレスの変更を行っていない場合、他の誰かがあなたのアカウントにアクセスした可能性があります。すぐにパスワードを変更するか、アカウントがロックされている場合はサーバー管理者に連絡してください。 + extra: メールアドレスの変更をご自身で行っていない場合、他の誰かがあなたのアカウントにアクセスした可能性があります。すぐにパスワードを変更するか、アカウントがロックされている場合はサーバー管理者に連絡してください。 subject: 'Mastodon: メールアドレスの変更' title: 新しいメールアドレス password_change: explanation: パスワードが変更されました。 - extra: パスワードの変更を行っていない場合、他の誰かがあなたのアカウントにアクセスした可能性があります。すぐにパスワードを変更するか、アカウントがロックされている場合はサーバー管理者に連絡してください。 + extra: パスワードの変更をご自身で行っていない場合、他の誰かがあなたのアカウントにアクセスした可能性があります。すぐにパスワードを再変更するか、アカウントがロックされている場合はサーバー管理者に連絡してください。 subject: 'Mastodon: パスワードが変更されました' title: パスワードの変更 reconfirmation_instructions: @@ -46,6 +46,18 @@ ja: extra: この要求に心当たりがない場合、このメールを無視してください。上記リンク先にアクセスし新しいものを作成するまでパスワードは変更されません。 subject: 'Mastodon: パスワード再発行' title: パスワード再発行 + two_factor_disabled: + explanation: あなたのアカウントの二段階認証が無効化されました。メールとパスワードのみでログインできます。 + subject: 'Mastodon: 二段階認証が無効になりました' + title: 二段階認証が無効化されました + two_factor_enabled: + explanation: あなたのアカウントの二段階認証が有効化されました。ログインするには TOTP アプリで生成されたコードが必要です。 + subject: 'Mastodon: 二段階認証が有効になりました' + title: 二段階認証が有効化されました + two_factor_recovery_codes_changed: + explanation: 以前のリカバリーコードが無効化され、新しいコードが生成されました。 + subject: 'Mastodon: 二段階認証のリカバリーコードが再生成されました' + title: 二段階認証のリカバリーコードが変更されました unlock_instructions: subject: 'Mastodon: アカウントのロックの解除' omniauth_callbacks: diff --git a/config/locales/devise.kk.yml b/config/locales/devise.kk.yml index d99116c7f..7ddeb8604 100644 --- a/config/locales/devise.kk.yml +++ b/config/locales/devise.kk.yml @@ -12,6 +12,7 @@ kk: last_attempt: Аккаунтыңыз құлыпталғанға дейін тағы бір әрекет жасаңыз. locked: Аккаунтыңыз құлыпталған. not_found_in_database: Қате %{authentication_keys} немесе құпиясөз. + pending: Аккаунтыңыз әлі тексеріліп жатыр. timeout: Сессияңыз аяқталды. Қайтадан кіріңіз жалғастыру үшін. unauthenticated: Жалғастыру үшін тіркеліңіз немесе логиніңізбен кіріңіз. unconfirmed: Жалғастыру үшін email адресіңізді құптауыңыз керек. @@ -20,6 +21,7 @@ kk: action: Email адресіңізді растаңыз action_with_app: Растау және оралу - %{app} explanation: Сіз %{host} сайтына тіркелгенсіз осы email адресімен. Активация жасауға бір адам қалды. Егер тіркелмеген болсаңыз, бұл хатты елемеңіз. + explanation_when_pending: Сіз осы электрондық пошта мекенжайымен %{host} сайтына шақыру туралы өтініш бердіңіз. Электрондық пошта мекенжайын растағаннан кейін біз сіздің өтінішіңізді қарастырамыз. Сіз өзіңіздің мәліметтеріңізді өзгертуге немесе есептік жазбаңызды жою үшін жүйеге кіре аласыз, бірақ есептік жазбаңыз мақұлданғанша көптеген функцияларды пайдалана алмайсыз. Егер сіздің өтінішіңіз қабылданбаса, сіздің деректеріңіз жойылады, сондықтан сізден бұдан әрі ешқандай әрекет қажет болмайды. Егер бұл сіз болмасаңыз, осы электрондық поштаны елемеңіз. extra_html: Сондай-ақ <a href="%{terms_path}">шарттар мен ережелерді</a> және <a href="%{policy_path}">құпиялылық саясатын</a> оқыңыз. subject: 'Mastodon: Растау туралы нұсқаулық %{instance}' title: Email адресін растау @@ -44,6 +46,18 @@ kk: extra: Егер сіз мұны сұрамаған болсаңыз, бұл хатты елемеңіз. Жоғарыдағы сілтемені ашып, жаңасын жасағанша құпия сөзіңіз өзгермейді. subject: 'Mastodon: Құпиясөзді қалпына келтіру нұсқаулықтары' title: Құпиясөзді қалпына келтіру + two_factor_disabled: + explanation: Екі факторлы аутентификация сіздің аккаунтыңыз үшін жабық. Email адресіңіз және құпиясөзіңіз арқылы кіруіңізге болады. + subject: 'Mastodon: Екі факторлы аутентификация жабық' + title: 2FA жабық + two_factor_enabled: + explanation: Екі факторлы аутентификация аккаунтыңызға қосылды. TOTP арқылы жасалған токен міндетті кіруіңіз үшін. + subject: 'Mastodon: Екі факторлы аутентификация ашық' + title: 2FA ашық + two_factor_recovery_codes_changed: + explanation: Алдыңғы кодтар жарамсыз болып қалды, енді жаңасы құрылды. + subject: 'Mastodon: Екі факторлы кіру коды қайтадан жасақталды' + title: 2FA кодтары өзгертілді unlock_instructions: subject: 'Mastodon: Құлыптан шешу нұсқаулықтары' omniauth_callbacks: @@ -60,6 +74,7 @@ kk: signed_up: Қош келдіңіз! Тіркелу сәтті өтті. signed_up_but_inactive: Тіркелу сәтті аяқталды. Дегенмен, аккаунтыңыз әлі белсендірілмегендіктен, сізге сайтқа кіру мүмкін болмайды. signed_up_but_locked: Тіркелу сәтті аяқталды. Дегенмен, аккаунтыңыз құлыпталғандықтан, сізге сайтқа кіру мүмкін болмайды. + signed_up_but_pending: Электрондық пошта мекенжайыңызға растау сілтемесі бар хабарлама жіберілді. Сілтемені басқаннан кейін біз сіздің өтінішіңізді қарастырамыз. Егер ол мақұлданса, сізге хабарланады. signed_up_but_unconfirmed: Растау сілтемесі бар хат электрондық поштаыңызға жіберілді. Аккаунтыңызды белсендіру үшін сілтеме бойынша өтіңіз. Бұл хат келмесе, спам құтысын тексеріңіз. update_needs_confirmation: Аккаунтыыызды сәтті жаңарттыңыз, бірақ жаңа электрондық поштаны тексеру қажет. Электрондық поштаңызды тексеріп, жаңа электрондық пошта мекенжайыңызды растаңыз. Бұл электрондық поштаны алмасаңыз, спам қалтаңызды тексеріңіз. updated: Аккаунтыңыз сәтті жаңартылды. diff --git a/config/locales/devise.kn.yml b/config/locales/devise.kn.yml new file mode 100644 index 000000000..d094088d8 --- /dev/null +++ b/config/locales/devise.kn.yml @@ -0,0 +1 @@ +kn: diff --git a/config/locales/devise.ko.yml b/config/locales/devise.ko.yml index f48531246..fbe036875 100644 --- a/config/locales/devise.ko.yml +++ b/config/locales/devise.ko.yml @@ -22,7 +22,7 @@ ko: action_with_app: 확인하고 %{app}으로 돌아가기 explanation: 당신은 %{host}에서 이 이메일로 가입하셨습니다. 클릭만 하시면 계정이 활성화 됩니다. 만약 당신이 가입한 게 아니라면 이 메일을 무시해 주세요. explanation_when_pending: 당신은 %{host}에 가입 요청을 하셨습니다. 이 이메일이 확인 되면 우리가 가입 요청을 리뷰하고 승인할 수 있습니다. 그 전까지는 로그인을 할 수 없습니다. 당신의 가입 요청이 거부 될 경우 당신에 대한 정보는 모두 삭제 되며 따로 요청 할 필요는 없습니다. 만약 당신이 가입 요청을 한 게 아니라면 이 메일을 무시해 주세요. - extra_html: <a href="%{terms_path}">서버의 룰</a>과 <a href="%{policy_path}">이용 약관</a>도 확인해 주세요. + extra_html: <a href="%{terms_path}">서버의 규칙</a>과 <a href="%{policy_path}">이용 약관</a>도 확인해 주세요. subject: '마스토돈: %{instance}에 대한 확인 메일' title: 이메일 주소 확인 email_changed: @@ -46,6 +46,18 @@ ko: extra: 만약 당신이 시도한 것이 아니라면 이 메일을 무시해 주세요. 위 링크를 클릭해 패스워드를 새로 설정하기 전까지는 패스워드가 바뀌지 않습니다. subject: '마스토돈: 패스워드 재설정 방법' title: 패스워드 재설정 + two_factor_disabled: + explanation: 당신의 계정에 설정된 이중 인증이 비활성화 되었습니다. 이제 이메일과 암호만으로 로그인이 가능합니다. + subject: '마스토돈: 이중 인증 비활성화' + title: 2FA 비활성화 됨 + two_factor_enabled: + explanation: 당신의 계정에 이중 인증이 활성화되었습니다. 로그인시 페어링된 T-OTP 앱에서 생성된 토큰이 필요합니다. + subject: '마스토돈: 이중 인증 활성화' + title: 2FA 활성화 됨 + two_factor_recovery_codes_changed: + explanation: 이전 복구 코드가 무효화되고 새 코드가 생성되었습니다 + subject: '마스토돈: 이중 인증 복구 코드 재생성 됨' + title: 2FA 복구 코드 변경됨 unlock_instructions: subject: '마스토돈: 잠금 해제 방법' omniauth_callbacks: diff --git a/config/locales/devise.mk.yml b/config/locales/devise.mk.yml new file mode 100644 index 000000000..8b9144a98 --- /dev/null +++ b/config/locales/devise.mk.yml @@ -0,0 +1 @@ +mk: diff --git a/config/locales/devise.ml.yml b/config/locales/devise.ml.yml new file mode 100644 index 000000000..3d4cea716 --- /dev/null +++ b/config/locales/devise.ml.yml @@ -0,0 +1,8 @@ +--- +ml: + devise: + mailer: + password_change: + title: പാസ് വേഡ് മാറ്റി + reset_password_instructions: + action: പാസ്വേഡ് മാറ്റുക diff --git a/config/locales/devise.mr.yml b/config/locales/devise.mr.yml new file mode 100644 index 000000000..fe1639c6a --- /dev/null +++ b/config/locales/devise.mr.yml @@ -0,0 +1 @@ +mr: diff --git a/config/locales/devise.nl.yml b/config/locales/devise.nl.yml index 51a95403f..3ab4d9f11 100644 --- a/config/locales/devise.nl.yml +++ b/config/locales/devise.nl.yml @@ -46,6 +46,18 @@ nl: extra: Wanneer jij dit niet hebt aangevraagd, mag je deze e-mail negeren. Jouw wachtwoord wordt pas gewijzigd nadat je de link hierboven hebt aangeklikt en een nieuw wachtwoord aanmaakt. subject: 'Mastodon: Wachtwoord opnieuw instellen' title: Wachtwoord opnieuw instellen + two_factor_disabled: + explanation: Tweestapsverificatie voor jouw account is uitgeschakeld. Je kunt nu alleen inloggen met een e-mailadres en wachtwoord. + subject: 'Mastodon: Tweestapsverificatie uitgeschakeld' + title: Tweestapsverificatie uitgeschakeld + two_factor_enabled: + explanation: Tweestapsverificatie voor jouw account is ingeschakeld. Om te kunnen aanmelden is een door een tweestapsverificatie-app genereerde aanmeldcode nodig. + subject: 'Mastodon: Tweestapsverificatie ingeschakeld' + title: Tweestapsverificatie ingeschakeld + two_factor_recovery_codes_changed: + explanation: De vorige herstelcodes zijn ongeldig gemaakt en nieuwe zijn aangemaakt. + subject: 'Mastodon: Tweestaps-herstelcodes zijn opnieuw aangemaakt' + title: Herstelcodes tweestapsverificatie veranderd unlock_instructions: subject: 'Mastodon: Instructies om opschorten account ongedaan te maken' omniauth_callbacks: diff --git a/config/locales/devise.nn.yml b/config/locales/devise.nn.yml new file mode 100644 index 000000000..777f4e600 --- /dev/null +++ b/config/locales/devise.nn.yml @@ -0,0 +1 @@ +nn: diff --git a/config/locales/devise.no.yml b/config/locales/devise.no.yml index 222a91aa3..e4fc33f01 100644 --- a/config/locales/devise.no.yml +++ b/config/locales/devise.no.yml @@ -12,12 +12,14 @@ last_attempt: Du har ett forsøk igjen før kontoen din låses. locked: Din konto er låst. not_found_in_database: Ugyldig %{authentication_keys} eller passord. + pending: Kontoen din er fortsatt under gjennomgang. timeout: Økten din løp ut på tid. Logg inn på nytt for å fortsette. unauthenticated: Du må logge inn eller registrere deg før du kan fortsette. unconfirmed: Du må bekrefte e-postadressen din før du kan fortsette. mailer: confirmation_instructions: action: Bekreft e-postadresse + action_with_app: Bekreft og gå tilbake til %{app} explanation: Du har laget en konto på %{host} med denne e-postadressen. Du er ett klikk unna å aktivere den. Hvis dette ikke var deg, vennligst se bort fra denne e-posten. extra_html: Vennligst også sjekk ut <a href="%{terms_path}">instansens regler </a> og <a href="%{policy_path}">våre bruksvilkår</a>. subject: 'Mastodon: Instruksjoner for å bekrefte e-postadresse %{instance}' @@ -43,6 +45,15 @@ extra: Se bort fra denne e-posten dersom du ikke ba om dette. Ditt passord blir ikke endret før du trykker på lenken over og lager et nytt. subject: 'Mastodon: Hvordan nullstille passord' title: Nullstill passord + two_factor_disabled: + subject: 'Mastodon: To-faktor autentisering deaktivert' + title: 2FA deaktivert + two_factor_enabled: + explanation: To-faktor autentisering er aktivert for kontoen din. Et symbol som er generert av den sammenkoblede TOTP-appen vil være påkrevd for innlogging. + subject: 'Mastodon: To-faktor autentisering aktivert' + title: 2FA aktivert + two_factor_recovery_codes_changed: + explanation: De forrige gjenopprettingskodene er ugyldig og nye generert. unlock_instructions: subject: 'Mastodon: Instruksjoner for å gjenåpne konto' omniauth_callbacks: @@ -59,6 +70,7 @@ signed_up: Velkommen! Registreringen var vellykket. signed_up_but_inactive: Registreringen var vellykket. Vi kunne dessverre ikke logge deg inn fordi kontoen din ennå ikke har blitt aktivert. signed_up_but_locked: Registreringen var vellykket. Vi kunne dessverre ikke logge deg inn fordi kontoen din har blitt låst. + signed_up_but_pending: En melding med en bekreftelseslink er sendt til din e-postadresse. Etter at du har klikket på koblingen, vil vi gjennomgå søknaden din. Du vil bli varslet hvis den er godkjent. signed_up_but_unconfirmed: En e-post med en bekreftelseslenke har blitt sendt til din innboks. Klikk på lenken i e-posten for å aktivere kontoen din. update_needs_confirmation: Du har oppdatert kontoen din, men vi må bekrefte din nye e-postadresse. Sjekk e-posten din og følg bekreftelseslenken for å bekrefte din nye e-postadresse. updated: Kontoen din ble oppdatert. diff --git a/config/locales/devise.oc.yml b/config/locales/devise.oc.yml index 42be33f6b..0fb259429 100644 --- a/config/locales/devise.oc.yml +++ b/config/locales/devise.oc.yml @@ -46,6 +46,18 @@ oc: extra: S’avètz pas res demandat, fasquètz pas cas a aqueste corrièl. Vòstre senhal cambiarà pas se clicatz pas lo ligam e que ne causissètz pas un novèl. subject: Mastodon : consignas per reïnicializar lo senhal title: Reïnicializacion del senhal + two_factor_disabled: + explanation: L’autentificacion dos factors per vòstre compte es estada desactivada. La connexion es ara possibla solament amb l’adreça electronica e lo senhal. + subject: 'Mastodon : autentificacion dos factors desactivada' + title: 2FA desactivat + two_factor_enabled: + explanation: L’autentificacion dos factors es estada activada per vòstre compte. La connexion demandarà un geton generat per l’aplicacion TOTP associada. + subject: 'Mastodon : autentificacion dos factor activada' + title: 2FA activat + two_factor_recovery_codes_changed: + explanation: Los còdis de recuperacion precedents son ara invalids e de nòus son estats generats. + subject: 'Mastodon : còdis de recuperacion dos factors regenerats' + title: Còdis 2FA de recuperacion cambiats unlock_instructions: subject: Mastodon : consignas de desblocatge omniauth_callbacks: diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml index 0b6d36187..92ac2948e 100644 --- a/config/locales/devise.pt-BR.yml +++ b/config/locales/devise.pt-BR.yml @@ -46,6 +46,18 @@ pt-BR: extra: Se você não fez esse pedido, por favor ignore esse e-mail. Sua senha não irá mudar até que você acesse o link acima e crie uma nova. subject: 'Mastodon: Instruções para mudança de senha' title: Redefinir a senha + two_factor_disabled: + explanation: A autenticação de dois fatores para sua conta foi desativada. Agora é possível acessar apenas com seu endereço de e-mail e senha. + subject: 'Mastodon: Autenticação de dois fatores desativada' + title: 2FA desativada + two_factor_enabled: + explanation: A autenticação de dois fatores foi habilitada para sua conta. Um token gerado pelo app TOTP pareado será necessário para o login. + subject: 'Mastodon: Autenticação de dois fatores desativada' + title: 2FA ativada + two_factor_recovery_codes_changed: + explanation: Os códigos de recuperação anteriores foram invalidados e novos códigos foram gerados. + subject: 'Mastodon: códigos de recuperação de dois fatores gerados novamente' + title: Códigos de recuperação de 2FA alterados unlock_instructions: subject: 'Mastodon: Instruções de desbloqueio' omniauth_callbacks: diff --git a/config/locales/devise.pt.yml b/config/locales/devise.pt-PT.yml index 9b44bbf00..7d3f8fc55 100644 --- a/config/locales/devise.pt.yml +++ b/config/locales/devise.pt-PT.yml @@ -1,5 +1,5 @@ --- -pt: +pt-PT: devise: confirmations: confirmed: O teu endereço de e-mail foi confirmado com sucesso. diff --git a/config/locales/devise.ru.yml b/config/locales/devise.ru.yml index 65441f24b..950c9630e 100644 --- a/config/locales/devise.ru.yml +++ b/config/locales/devise.ru.yml @@ -46,6 +46,18 @@ ru: extra: Если это сделали не вы, пожалуйста, игнорируйте письмо. Ваш пароль не будет изменён, пока вы не перейдёте по ссылке выше и не создадите новый пароль. subject: 'Mastodon: инструкция по смене пароля' title: Сброс пароля + two_factor_disabled: + explanation: Двуфакторная авторизация вашего аккаунта отключена. Войти теперь можно используя только e-mail и пароль. + subject: 'Mastodon: двуфакторная авторизация убрана' + title: 2ФА отключена + two_factor_enabled: + explanation: Двуфакторная авторизация включена для вашего аккаунта. Отныне для входа потребуется также временный код из привязанного приложения. + subject: 'Mastodon: двуфакторная авторизация установлена' + title: 2ФА включена + two_factor_recovery_codes_changed: + explanation: Предыдущие резервные коды были аннулированы и созданы новые. + subject: 'Mastodon: резервные коды двуфакторной авторизации обновлены' + title: Резервные коды 2ФА изменены unlock_instructions: subject: 'Mastodon: Инструкция по разблокировке' omniauth_callbacks: diff --git a/config/locales/devise.sk.yml b/config/locales/devise.sk.yml index 8842abe61..b61eca54e 100644 --- a/config/locales/devise.sk.yml +++ b/config/locales/devise.sk.yml @@ -37,14 +37,24 @@ sk: reconfirmation_instructions: explanation: Potvrď novú emailovú adresu na ktorú chceš zmeniť svoj email. extra: Pokiaľ si túto akciu nevyžiadal/a, prosím ignoruj tento email. Emailová adresa pre tvoj Mastodon účet totiž nebude zmenená pokiaľ nepostúpiš na adresu uvedenú vyššie. - subject: 'Mastodon: Potvrďenie emailu pre %{instance}' - title: Overiť emailovú adresu + subject: 'Mastodon: Potvrď email pre %{instance}' + title: Over emailovú adresu reset_password_instructions: action: Zmeň svoje heslo explanation: Vyžiadal/a si si nové heslo pre svoj účet. extra: Ak si túto akciu nevyžiadal/a, prosím ignoruj tento email. Tvoje heslo nebude zmenené pokiaľ nepostúpiš na adresu uvedenú vyššie a vytvoríš si nové. subject: 'Mastodon: Pokyny pre obnovu hesla' title: Nastav nové heslo + two_factor_disabled: + subject: 'Mastodon: Dvojfázové overovanie vypnuté' + title: 2FA vypnuté + two_factor_enabled: + subject: 'Mastodon: Dvojfázové overovanie zapnuté' + title: 2FA zapnuté + two_factor_recovery_codes_changed: + explanation: Predošlé obnovovacie kódy boli urobené neplatnými a boli vygenerované nové. + subject: 'Mastodon: dvojfázové zálohové kódy boli znovu vygenerované' + title: Obnovovacie kódy 2FA zmenené unlock_instructions: subject: 'Mastodon: Pokyny na odomknutie účtu' omniauth_callbacks: @@ -80,3 +90,8 @@ sk: expired: vypŕšal, prosím, vyžiadaj si nový not_found: nenájdený not_locked: nebol zamknutý + not_saved: + few: "%{count} chýb zabránilo uloženiu tohto %{resource}:" + many: "%{count} chýb zabránilo uloženiu tohto %{resource}:" + one: '1 chyba zabránila uloženiu tohto %{resource}:' + other: "%{count} chyby zabránili uloženiu tohto %{resource}:" diff --git a/config/locales/devise.sl.yml b/config/locales/devise.sl.yml index 7d1e05fdf..dee1b9125 100644 --- a/config/locales/devise.sl.yml +++ b/config/locales/devise.sl.yml @@ -6,7 +6,7 @@ sl: send_instructions: V nekaj minutah boste prejeli e-poštno sporočilo z navodili za potrditev vašega e-poštnega naslova. Če niste prejeli e-poštnega sporočila, preverite mapo neželena pošta. send_paranoid_instructions: Če vaš e-poštni naslov obstaja v naši podatkovni bazi, boste v nekaj minutah prejeli e-poštno sporočilo z navodili za potrditev vašega e-poštnega naslova. Če niste prejeli e-poštnega sporočila, preverite mapo neželena pošta. failure: - already_authenticated: Prijavljeni ste že. + already_authenticated: Ste že prijavljeni. inactive: Vaš račun še ni aktiviran. invalid: Neveljavno %{authentication_keys} ali geslo. last_attempt: Pred zaklepom računa imate še en poskus. @@ -45,9 +45,44 @@ sl: explanation: Zahtevali ste novo geslo za svoj račun. extra: Če tega niste zahtevali, prezrite to e-poštno sporočilo. Vaše geslo se ne bo spremenilo, dokler ne kliknete na zgornjo povezavo in ustvarite novega. subject: 'Mastodon: Navodila za ponastavitev gesla' - title: Ponastavitev gesla + title: Ponastavi geslo unlock_instructions: subject: 'Mastodon: Odkleni navodila' omniauth_callbacks: failure: Overitev iz %{kind} ni možna zaradi "%{reason}". success: Overitev iz računa %{kind} je bila uspešna. + passwords: + no_token: Do te strani ne morete dostopati, ne da bi prišli iz e-poštne za ponastavitev gesla. Če prihajate iz e-poštne za ponastavitev gesla, se prepričajte, da ste uporabili celoten navedeni URL. + send_instructions: Če vaš e-poštni naslov obstaja v naši bazi podatkov, boste v nekaj minutah na vaš e-poštni naslov prejeli povezavo za obnovitev gesla. Če niste prejeli e-pošte, preverite mapo z neželeno pošto. + send_paranoid_instructions: Če vaš e-poštni naslov obstaja v naši bazi podatkov, boste v nekaj minutah na vaš e-poštni naslov prejeli povezavo za obnovitev gesla. Če niste prejeli e-pošte, preverite mapo z neželeno pošto. + updated: Vaše geslo je bilo uspešno spremenjeno. Zdaj ste prijavljeni. + updated_not_active: Vaše geslo je bilo uspešno spremenjeno. + registrations: + destroyed: Adijo! Vaš račun je bil uspešno preklican. Upamo, da vas bomo kmalu spet videli. + signed_up: Dobrodošli! Uspešno ste se vpisali. + signed_up_but_inactive: Uspešno ste se vpisali. Vendar vas nismo mogli prijaviti, ker vaš račun še ni aktiviran. + signed_up_but_locked: Uspešno ste se vpisali. Vendar vas nismo mogli prijaviti, ker je vaš račun zaklenjen. + signed_up_but_pending: Na vaš e-poštni naslov je bilo poslano sporočilo s povezavo za potrditev. Ko kliknete na povezavo, bomo pregledali vašo prijavo. Obveščeni boste, če bo odobren. + signed_up_but_unconfirmed: Na vaš e-poštni naslov je bilo poslano sporočilo s povezavo za potrditev. Sledite povezavi, da aktivirate svoj račun. Če niste prejeli te e-pošte, preverite mapo z neželeno pošto. + update_needs_confirmation: Uspešno ste posodobili račun, vendar moramo potrditi vaš novi e-poštni naslov. Preverite svojo e-pošto in sledite povezavi za potrditev, da potrdite nov e-poštni naslov. Če niste prejeli te e-poše, preverite mapo z neželeno pošto. + updated: Vaš račun je bil uspešno posodobljen. + sessions: + already_signed_out: Uspešno ste se odjavili. + signed_in: Uspešno ste se prijavili. + signed_out: Uspešno ste se odjavili. + unlocks: + send_instructions: Prejeli boste e-pošto z navodili o tem, kako v nekaj minutah odklenete svoj račun. Če niste prejeli te e-pošte, preverite mapo z neželeno pošto. + send_paranoid_instructions: Če vaš račun obstaja, boste prejeli e-pošto z navodili za njegovo odklepanje v nekaj minutah. Če niste prejeli te e-pošte, preverite mapo z neželeno pošto. + unlocked: Vaš račun je bil uspešno odklenjen. Če želite nadaljevati, se prijavite. + errors: + messages: + already_confirmed: je bil potrjen, poskusite se prijaviti + confirmation_period_expired: mora biti potrjena v %{period}, zahtevajte novo + expired: je potekla, zahtevajte novo + not_found: ni najdeno + not_locked: ni bil zaklenjen + not_saved: + few: "%{count} napake so preprečile shranjevanje %{resource}:" + one: '1 napaka je preprečila shranjevanje %{resource}:' + other: "%{count} napak je preprečilo shranjevanje %{resource}:" + two: "%{count} napaki sta preprečili shranjevanje %{resource}:" diff --git a/config/locales/devise.ta.yml b/config/locales/devise.ta.yml index 4320953ce..9c1edfe43 100644 --- a/config/locales/devise.ta.yml +++ b/config/locales/devise.ta.yml @@ -1 +1,38 @@ +--- ta: + devise: + confirmations: + confirmed: உங்கள் இணைய முகவரி வெற்றிகரமாக உறுதி செய்யப்பட்டது. + send_instructions: இன்னும் சற்று நேரத்தில் உங்கள் இணைய முகவரியை உறுதி செய்வது எப்படி என்று விளக்கும் இணைய செய்தி ஒன்று வந்தடையும். வரவில்லை எனில், தயவு செய்து உங்கள் ஸ்பாம் பெட்டியைப் பார்க்கவும். + send_paranoid_instructions: உங்கள் இணைய முகவரி எங்கள் தகவல்ப் பெட்டகத்தில் இருந்தால், இன்னும் சற்று நேரத்தில் உங்கள் இணைய முகவரியை உறுதி செய்வது எப்படி என்று விளக்கும் இணைய செய்தி ஒன்று வந்தடையும். வரவில்லை எனில், தயவு செய்து உங்கள் ஸ்பாம் பெட்டியைப் பார்க்கவும். + failure: + already_authenticated: நீங்கள் ஏற்கனவே நுழைந்து விட்டீர்கள். + inactive: உங்கள் கணக்கும் இன்னும் செயல்முறைக்கு வரவில்லை. + invalid: தவறான %{authentication_keys} அல்லது கடவுச்சொல். + last_attempt: உங்கள் கணக்கு பூட்டப்படும் முன் உங்களுக்கு ஓரே ஒரு வாய்ப்பு உள்ளது. + locked: உங்கள் கணக்கு பூட்டப்பட்டது. + not_found_in_database: தவறான %{authentication_keys} அல்லது கடவுச்சொல். + pending: உங்கள் கணக்கு இன்னும் பரிசீலிக்கப்படுகிறது. + timeout: உங்கள் அமர்வு காலாவதியாகிவிட்டது. தயவு செய்து மீண்டும் உள்நுழையவும். + unauthenticated: மேலும் செல்வதற்கு முன் நீங்கள் உள்நுழையவோ அல்லது கணக்கை உருவாக்கவோ வேண்டும். + unconfirmed: முன்னேறுவதற்கு முன்னர் நீங்கள் உங்கள் இணைய முகவரியை உறுதி செய்ய வேண்டும். + mailer: + confirmation_instructions: + action: மின்னஞ்சல் முகவரியை உறுதிபடுத்தவும் + action_with_app: உறுதிசெய்துவிட்டு %{app}-க்குத் திரும்பவும் + explanation: இந்த இணைய முகவரி கொண்டு %{host}-இல் நீங்கள் ஒரு கணக்கை உருவாக்கியுள்ளீர்கள். அதை செயல்படுத்துவதில் இருந்து ஒரு சொடக்கு தூரத்தில் உள்ளீர்கள். நீங்கள் அதை செய்யவில்லை என்றால், இந்த செய்தியை கண்டுகொள்ள வேண்டாம். + title: மின்னஞ்சல் முகவரியை உறுதிபடுத்தவும் + email_changed: + title: புதிய மின்னஞ்சல் முகவரி + password_change: + title: கடவுச்சொல் மாற்றப்பட்டது + reconfirmation_instructions: + explanation: உங்கள் மின்னஞ்சல் முகவரியை மாற்ற மீண்டும் ஒரு முறை உறுதி செய்யவும். + title: மின்னஞ்சல் முகவரியை உறுதிபடுத்தவும் + reset_password_instructions: + action: கடவுச்சொல்லை மாற்றவும் + unlocks: + send_instructions: இன்னும் சற்று நேரத்தில் மின்னஞ்சல் முகவரியை உறுதி செய்வதற்கான விளக்கம், உங்கள் மின்னஞ்சலை வந்தடையும். வரவில்லை எனில், தயவு செய்து உங்கள் Spam பெட்டியைப் பார்க்கவும். + errors: + messages: + not_found: காணப்படவில்லை diff --git a/config/locales/devise.th.yml b/config/locales/devise.th.yml index c6c75b98f..e24fc187f 100644 --- a/config/locales/devise.th.yml +++ b/config/locales/devise.th.yml @@ -2,17 +2,71 @@ th: devise: confirmations: - send_instructions: You will receive an email with instructions for how to confirm your email address in a few minutes. - send_paranoid_instructions: If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes. + confirmed: ยืนยันที่อยู่อีเมลของคุณสำเร็จ + send_instructions: คุณจะได้รับอีเมลพร้อมวิธีการยืนยันที่อยู่อีเมลของคุณในไม่กี่นาที หากคุณไม่ได้รับอีเมล กรุณาตรวจสอบโฟลเดอร์สแปมของคุณ + send_paranoid_instructions: หากที่อยู่อีเมลของคุณอยู่ในระบบของเรา คุณจะได้รับอีเมลพร้อมวิธีการยืนยันที่อยู่อีเมลของคุณในไม่กี่นาที หากคุณไม่ได้รับอีเมล กรุณาตรวจสอบโฟลเดอร์สแปมของคุณ + failure: + already_authenticated: คุณได้ลงชื่อเข้าอยู่แล้ว + inactive: ยังไม่ได้เปิดใช้งานบัญชีของคุณ + invalid: "%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง" + locked: มีการล็อคบัญชีของคุณอยู่ + not_found_in_database: "%{authentication_keys} หรือรหัสผ่านไม่ถูกต้อง" + pending: บัญชีของคุณยังอยู่ระหว่างการตรวจทาน + timeout: เซสชันของคุณหมดอายุแล้ว โปรดลงชื่อเข้าอีกครั้งเพื่อดำเนินการต่อ + unauthenticated: คุณต้องลงชื่อเข้าหรือลงทะเบียนก่อนดำเนินการต่อ + unconfirmed: คุณต้องยืนยันที่อยู่อีเมลของคุณก่อนดำเนินการต่อ + mailer: + confirmation_instructions: + action: ยืนยันที่อยู่อีเมล + action_with_app: ยืนยันแล้วกลับไปยัง %{app} + explanation: คุณได้สร้างบัญชีใหม่บน %{host} ด้วยที่อยู่อีเมลนี้ เหลืออีกเพียงคลิกเดียวก็สามารถเปิดใช้งานบัญชีได้แล้ว หากไม่ใช่คุณ กรุณาปฏิเสธอีเมลนี้ + extra_html: นอกจากนี้ กรุณาอ่าน<a href="%{terms_path}">กฎของเซิร์ฟเวอร์</a>และ<a href="%{policy_path}">เงื่อนไขการให้บริการ</a> + subject: 'Mastodon: คำแนะนำการยืนยันสำหรับ %{instance}' + title: ยืนยันที่อยู่อีเมล + email_changed: + explanation: 'กำลังเปลี่ยนที่อยู่อีเมลสำหรับบัญชีของคุณเป็น:' + subject: 'Mastodon: เปลี่ยนอีเมลแล้ว' + title: ที่อยู่อีเมลใหม่ + password_change: + explanation: เปลี่ยนรหัสผ่านสำหรับบัญชีของคุณแล้ว + subject: 'Mastodon: เปลี่ยนรหัสผ่านแล้ว' + title: เปลี่ยนรหัสผ่านแล้ว + reconfirmation_instructions: + explanation: ยืนยันที่อยู่ใหม่เพื่อเปลี่ยนอีเมลของคุณ + subject: 'Mastodon: ยืนยันอีเมลสำหรับ %{instance}' + title: ยืนยันที่อยู่อีเมล + reset_password_instructions: + action: เปลี่ยนรหัสผ่าน + explanation: คุณได้ขอรหัสผ่านใหม่สำหรับบัญชีของคุณ + subject: 'Mastodon: คำแนะนำการตั้งรหัสผ่านใหม่' + title: ตั้งรหัสผ่านใหม่ + two_factor_disabled: + subject: 'Mastodon: ปิดการยืนยันสองขั้นตอนแล้ว' + title: ปิดใช้งาน 2FA แล้ว + two_factor_enabled: + subject: 'Mastodon: เปิดการยืนยันสองขั้นตอนแล้ว' + title: เปิดใช้งาน 2FA แล้ว + two_factor_recovery_codes_changed: + title: เปลี่ยนรหัสกู้คืน 2FA แล้ว passwords: - send_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. - send_paranoid_instructions: If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes. + updated: เปลี่ยนรหัสผ่านของคุณสำเร็จ ตอนนี้คุณได้ลงชื่อเข้าแล้ว + updated_not_active: เปลี่ยนรหัสผ่านของคุณสำเร็จ registrations: - signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. - update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. + destroyed: ลาก่อน! ยกเลิกบัญชีของคุณสำเร็จ เราหวังว่าจะได้พบคุณอีกในเร็ว ๆ นี้ + signed_up: ยินดีต้อนรับ! คุณได้ลงทะเบียนสำเร็จ + signed_up_but_inactive: คุณได้ลงทะเบียนสำเร็จ อย่างไรก็ตามเราไม่สามารถลงชื่อคุณเข้าเนื่องจากยังไม่ได้เปิดใช้งานบัญชีของคุณ + signed_up_but_locked: คุณได้ลงทะเบียนสำเร็จ อย่างไรก็ตามเราไม่สามารถลงชื่อคุณเข้าเนื่องจากมีการล็อคบัญชีของคุณอยู่ + signed_up_but_pending: ส่งข้อความพร้อมลิงก์ยืนยันไปยังที่อยู่อีเมลของคุณแล้ว หลังจากคุณคลิกลิงก์ เราจะตรวจทานใบสมัครของคุณ คุณจะได้รับการแจ้งเตือนหากใบสมัครได้รับการอนุมัติ + signed_up_but_unconfirmed: ส่งข้อความพร้อมลิงก์ยืนยันไปยังที่อยู่อีเมลของคุณแล้ว โปรดไปตามลิงก์เพื่อเปิดใช้งานบัญชีของคุณ โปรดตรวจสอบโฟลเดอร์สแปมของคุณหากคุณไม่ได้รับอีเมลนี้ + updated: อัปเดตบัญชีของคุณสำเร็จ + sessions: + already_signed_out: ลงชื่อออกสำเร็จ + signed_in: ลงชื่อเข้าสำเร็จ + signed_out: ลงชื่อออกสำเร็จ unlocks: - send_instructions: You will receive an email with instructions for how to unlock your account in a few minutes. - send_paranoid_instructions: If your account exists, you will receive an email with instructions for how to unlock it in a few minutes. + send_instructions: คุณจะได้รับอีเมลพร้อมวิธีการปลดล็อคบัญชีของคุณในไม่กี่นาที หากคุณไม่ได้รับอีเมล กรุณาตรวจสอบโฟลเดอร์สแปมของคุณ + unlocked: ปลดล็อคบัญชีของคุณสำเร็จ โปรดลงชื่อเข้าเพื่อดำเนินการต่อ errors: messages: not_found: ไม่พบ + not_locked: ไม่ได้ล็อคอยู่ diff --git a/config/locales/devise.tr.yml b/config/locales/devise.tr.yml index 0a504dd67..30cedc1fc 100644 --- a/config/locales/devise.tr.yml +++ b/config/locales/devise.tr.yml @@ -8,8 +8,91 @@ tr: failure: already_authenticated: Zaten oturum açtınız. inactive: Hesabınız henüz etkinleştirilmedi. + invalid: Geçersiz %{authentication_keys} ya da şifre. last_attempt: Hesabınız kilitlenmeden önce bir kez daha denemeniz gerekir. locked: Hesabınız kilitli. + not_found_in_database: Geçersiz %{authentication_keys} ya da şifre. + pending: Hesabınız hala inceleniyor. + timeout: Oturum süreniz sona erdi. Lütfen devam etmek için tekrar giriş yapınız. + unauthenticated: Devam etmeden önce oturum açmanız veya kayıt olmanız gerek. + unconfirmed: Devam etmeden önce e-posta adresini onaylamanız gerekli. mailer: confirmation_instructions: action: E-posta adresinizi doğrulayın + action_with_app: Onayla ve %{app}'a dön + explanation: Bu e-posta adresiyle %{host} bir hesap oluşturdunuz. Etkinleştirmekten bir tık uzaktasınız. Bu siz değilseniz, lütfen bu e-postayı dikkate almayın. + explanation_when_pending: Bu e-posta adresiyle %{host} adresine bir davetiye için başvuru yaptınız. E-posta adresinizi onayladıktan sonra başvurunuzu inceleyeceğiz. O zamana kadar giriş yapamazsınız. Başvurunuz reddedilirse, verileriniz silinecek, başka bir işlem yapmanız gerekmeyecek. Bu siz değilseniz, lütfen bu e-postayı dikkate almayın. + extra_html: Lütfen ayrıca <a href="%{terms_path}">sunucu kurallarını</a> ve <a href="%{policy_path}">hizmet şartlarımızı</a> inceleyin. + subject: 'Mastodon: %{instance} için onay talimatları' + title: E-posta adresini doğrulayın + email_changed: + explanation: 'Hesabınızın e-posta adresi şu şekilde değiştirildi:' + extra: E-posta adresinizi değiştirmediyseniz, büyük olasılıkla birileri hesabınıza erişti. Lütfen derhal parolanızı değiştirin veya hesabınız kilitlendiyse sunucu yöneticisine başvurun. + subject: 'Mastodon: E-posta değişti' + title: Yeni e-posta adresi + password_change: + explanation: Hesabınızın parolası değiştirildi. + extra: Parolanızı değiştirmediyseniz, büyük olasılıkla birileri hesabınıza erişmiş olabilir. Lütfen derhal parolanızı değiştirin veya hesabınız kilitlendiyse sunucu yöneticisine başvurun. + subject: 'Mastodon: Parola değiştirildi' + title: Parola değiştirildi + reconfirmation_instructions: + explanation: E-postanızı değiştirmek için yeni adresi onaylayın. + extra: Bu değişiklik sizin tarafınızdan başlatılmadıysa, lütfen bu e-postayı dikkate almayın. Mastodon hesabının e-posta adresi, yukarıdaki bağlantıya erişene kadar değişmez. + subject: 'Mastodon: %{instance} için e-postayı onayla' + title: E-posta adresinizi doğrulayın + reset_password_instructions: + action: Parolayı değiştir + explanation: Hesabınız için yeni bir parola istediniz. + extra: Bunu siz yapmadıysanız, lütfen bu e-postayı dikkate almayın. Parolanız yukarıdaki bağlantıya erişene ve yeni bir tane oluşturuncaya kadar değişmez. + subject: 'Mastodon: Parola sıfırlama talimatları' + title: Parola sıfırlama + two_factor_disabled: + explanation: Hesabınız için iki-adımlı kimlik doğrulama devre dışı bırakıldı. Şimdi sadece e-posta adresi ve parola kullanarak giriş yapabilirsiniz. + subject: 'Mastodon: İki-adımlı kimlik doğrulama devre dışı bırakıldı' + title: 2FA devre dışı bırakıldı + two_factor_enabled: + explanation: Hesabınız için iki-adımlı kimlik doğrulama etkinleştirildi. Giriş yapmak için eşleştirilmiş TOTP uygulaması tarafından oluşturulan bir belirteç gereklidir. + subject: 'Mastodon: İki-adımlı kimlik doğrulama etkinleştirildi' + title: 2FA etkinleştirildi + two_factor_recovery_codes_changed: + explanation: Önceki kurtarma kodları geçersiz kılındı ve yenileri oluşturuldu. + subject: 'Mastodon: İki-adımlı kurtarma kodları yeniden oluşturuldu' + title: 2FA kurtarma kodları değiştirildi + unlock_instructions: + subject: 'Mastodon: Engel kaldırma talimatları' + omniauth_callbacks: + failure: '%{kind}''den kimliğiniz doğrulanamadı çünkü "%{reason}".' + success: "%{kind} hesabından başarıyla kimlik doğrulaması yapıldı." + passwords: + no_token: Bu sayfaya şifre sıfırlama e-postasından gelmeden erişemezsiniz. Şifre sıfırlama e-postasından geliyorsanız lütfen sağlanan tam URL'yi kullandığınızdan emin olun. + send_instructions: E-posta adresiniz veritabanımızda varsa, e-posta adresinize birkaç dakika içinde bir parola kurtarma bağlantısı gönderilir. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. + send_paranoid_instructions: E-posta adresiniz veritabanımızda varsa, e-posta adresinize birkaç dakika içinde bir parola kurtarma bağlantısı gönderilir. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. + updated: Parolanız başarıyla değiştirildi. Şuan oturumunuz açıldı. + updated_not_active: Parolanız başarıyla değiştirildi. + registrations: + destroyed: Görüşürüz! hesabın başarıyla iptal edildi. Umarız seni sonra tekrar görürüz. + signed_up: Hoş geldiniz! Başarılı bir şekilde oturum açtınız. + signed_up_but_inactive: Başarıyla kaydoldun. Ancak, seni içeri alamıyoruz çünkü hesabın henüz aktif değil. + signed_up_but_locked: Başarıyla kaydoldun. Ancak, seni içeri alamıyoruz çünkü hesabın kilitli. + signed_up_but_pending: Onay bağlantısına sahip bir mesaj e-posta adresinize gönderildi. Bağlantıyı tıkladıktan sonra başvurunuzu inceleyeceğiz. Onaylanması durumunda size bilgi verilecektir. + signed_up_but_unconfirmed: Onay bağlantısına sahip bir mesaj e-posta adresinize gönderildi. Lütfen hesabınızı etkinleştirmek için bağlantıyı takip edin. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. + update_needs_confirmation: Hesabınızı başarıyla güncellediniz, ancak yeni e-posta adresinizi doğrulamamız gerekiyor. Lütfen e-postanızı kontrol edin ve yeni e-posta adresinizi onaylamak için onay bağlantısını izleyin. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. + updated: Hesabınız başarıyla güncellendi. + sessions: + already_signed_out: Başarıyla çıkış yapıldı. + signed_in: Başarıyla giriş yapıldı. + signed_out: Başarıyla çıkış yapıldı. + unlocks: + send_instructions: Hesabınızı birkaç dakika içinde nasıl açacağınıza ilişkin talimatları içeren bir e-posta alacaksınız. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. + send_paranoid_instructions: Hesabınız varsa, birkaç dakika içinde nasıl kilidini açacağınıza ilişkin talimatları içeren bir e-posta alacaksınız. Bu e-postayı almadıysanız, lütfen spam klasörünüzü kontrol edin. + unlocked: Hesabınızın kilidi başarıyla açıldı. Devam etmek için lütfen oturum açın. + errors: + messages: + already_confirmed: zaten onaylanmış, lütfen tekrar oturum açmayı deneyin + confirmation_period_expired: "%{period} içinde onaylanması gerekli, lütfen yeni bir tane talep edin" + expired: süresi geçti, lütfen yeni bir tane talep edin + not_found: bulunamadı + not_locked: kilitlenmemiş + not_saved: + one: '1 hata bu %{resource} kaydedilmesini önledi:' + other: "%{count} hata bu %{resource} kaydedilmesini önledi:" diff --git a/config/locales/devise.uk.yml b/config/locales/devise.uk.yml index 6ec01b3d7..85b3d14cd 100644 --- a/config/locales/devise.uk.yml +++ b/config/locales/devise.uk.yml @@ -7,26 +7,61 @@ uk: send_paranoid_instructions: Якщо Ваша поштова скринька існує в нашій базі даних, то Ви отримаєте листа з інструкціями щодо підтвердження Вашої адреси через декілька хвилин. failure: already_authenticated: Ви вже увійшли. - inactive: Ваш акаунт ще не активований. + inactive: Ваш обліковий запис ще не активований. invalid: Неправильний %{authentication_keys} або пароль. - last_attempt: У вас є остання спроба, після якої вхід буде заблокований. - locked: Ваш акаунт заблокований. + last_attempt: У вас залишилась ще одна спроба, після якої ваш обліковий запис буде заблоковано. + locked: Ваш обліковий запис заблоковано. not_found_in_database: Неправильний %{authentication_keys} або пароль. + pending: Ваш обліковий запис ще перебуває на розгляді. timeout: Ваша сесія вичерпана. Будь ласка, зайдіть знову, щоб продовжити. unauthenticated: Для продовження Вам потрібно увійти або зареєструватися. unconfirmed: Для продовження Вам потрібно підтвердити Вашу поштову скриньку. mailer: confirmation_instructions: + action: Підтвердити адресу електронної пошти + action_with_app: Підтвердити та повернутися до %{app} + explanation: Ви створили обліковий запис на %{host} з цією адресою електронної пошти, і зараз на відстані одного кліку від його активації. Якщо це були не ви, проігноруйте цього листа, будь ласка. + extra_html: Також перегляньте <a href="%{terms_path}">правила серверу</a> та <a href="%{policy_path}">умови використання</a>. subject: 'Mastodon: Інструкції для підтвердження %{instance}' + title: Підтвердити адресу електронної пошти + email_changed: + explanation: 'Адреса електронної пошти для вашого облікового запису змінюється на:' + extra: Якщо ви не змінювали свою адресу електронної пошти, то хтось вірогідно отримав доступ до вашого облікового запису. Будь ласка, негайно змініть свій пароль або зв'яжіться з адміністратором серверу, якщо ви не маєте доступу до свого облікового запису. + subject: 'Mastodon: адресу електронної пошти змінено' + title: Нова адреса електронної пошти password_change: + explanation: Пароль до вашого облікового запису був змінений. + extra: Якщо ви не змінювали свій пароль, то хтось вірогідно отримав доступ до вашого облікового запису. Будь ласка, негайно змініть свій пароль або зв'яжіться з адміністратором серверу, якщо ви не маєте доступу до свого облікового запису. subject: 'Mastodon: Ваш пароль змінений' + title: Пароль змінено + reconfirmation_instructions: + explanation: Підтвердіть нову адресу електронної пошти, щоб змінити поточну. + extra: Якщо ця зміна не була ініційована вами, проігноруйте цього листа. Адреса електронної пошти для облікового запису Mastodon не зміниться, доки ви не перейдете за вищевказаним посиланням. + subject: 'Mastodon: Підтвердіть електронну адресу для %{instance}' + title: Підтвердіть адресу електронної пошти reset_password_instructions: + action: Змінити пароль + explanation: Ви запитали новий пароль для вашого облікового запису. + extra: Якщо ви не запитували зміну пароля, ігноруйте цей лист. Ваш пароль не буде змінено, допоки ви не перейдете за посиланням та не створите новий. subject: 'Mastodon: Інструкції для скидання паролю' + title: Скидання пароля + two_factor_disabled: + explanation: Двофакторну аутентифікацію для вашого облікового запису відключено. Тепер ви можете увійти за допомогою лише адреси електронної пошти та пароля. + subject: 'Mastodon: двофакторну авторизацію вимкнено' + title: Двофакторна автентифікація вимкнена + two_factor_enabled: + explanation: Двофакторну аутентифікацію для вашого облікового запису було увімкнено. Для входу до системи буде потрібний токен, згенерований спареним застосунком TOTP. + subject: 'Mastodon: двофакторну авторизацію увімкнено' + title: Двофакторна автентифікація увімкнена + two_factor_recovery_codes_changed: + explanation: Попередні коди відновлення були анульовані і генеруються нові. + subject: 'Mastodon: коди двофакторного відновлення повторно згенеровано' + title: Коди двофакторного відновлення змінено unlock_instructions: subject: 'Mastodon: Інструкції для розблокування' omniauth_callbacks: failure: Нам не вдалося аутентифікувати Вас з %{kind} через те, що "%{reason}". - success: Успішно аутентифіковано з акаунту %{kind}. + success: Успішно аутентифіковано з облікового запису %{kind}. passwords: no_token: Ви не можете отримати доступ до цієї сторінки без переходу за посиланням з листа з інструкціями. Якщо ви дійсно перейшли з цього листа, переконайтеся, що ви перейшли за повним посиланням. send_instructions: Ви отримаєте листа з інструкціями щодо зміни паролю через декілька хвилин. @@ -34,21 +69,22 @@ uk: updated: Ваш пароль було успішно змінено. Вхід виконано. updated_not_active: Ваш пароль було успішно змінено. registrations: - destroyed: До побачення! Ваш акаунт було успішно видалено. Сподіваємось, що Ви скоро повернетеся. + destroyed: До побачення! Ваш обліковий запис було успішно видалено. Сподіваємось, Ви скоро повернетеся. signed_up: Ласкаво просимо! Ви були успішно зареєстровані. - signed_up_but_inactive: Ви були успішно зареєстровані, але ми не можемо авторизувати вас, оскільки Ваш акаунт ще не активовано. - signed_up_but_locked: Ви були успішно зареєстровані, аале ми не можемо авторизувати вас, оскільки Ваш акаунт заблокований. - signed_up_but_unconfirmed: Повідомлення з посиланням на підтвердження будо відправлено на Вашу поштову скриньку. Будь ласка, перейдіть за посиланням, щоб активувати Ваш акаунт. - update_needs_confirmation: Ви успішно оновили Ваш акаунт, але нам потрібно підтвердити Вашу нову поштову адресу. Будь ласка, перевірте Вашу скриньку та перейдіть за посиланням, щоб активувати Вашу нову адресу. - updated: Ваш акаунт було успішно оновлено. + signed_up_but_inactive: Ви були успішно зареєстровані, але ми не можемо авторизувати вас, оскільки ваш обліковий запис ще не активовано. + signed_up_but_locked: Ви були успішно зареєстровані, але ми не можемо авторизувати вас, оскільки ваш обліковий запис заблокований. + signed_up_but_pending: Лист з посиланням для підтвердження було надіслано на вашу електронну пошту. Коли ви перейдете за цим посиланням, ми розглянемо ваш запит. Вас буде проінформовано, якщо запит буде схвалено. + signed_up_but_unconfirmed: Повідомлення з посиланням на підтвердження будо відправлено на вашу адресу електронної пошти. Будь ласка, перейдіть за посиланням, щоб активувати ваш обліковий запис. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці. + update_needs_confirmation: Ваш обліковий запис оновлено, але необхідно підтвердити нову адресу електронної пошти. Будь ласка, перевірте свою електронну скриньку і перейдіть за посиланням "Підтвердити", шоб завершити оновлення адреси електронної пошти. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці. + updated: Ваш обліковий запис було успішно оновлено. sessions: already_signed_out: Ви вже вийшли з акаунту. signed_in: Ви успішно увійшли в акаунт. signed_out: Ви успішно вийшли з акаунту. unlocks: - send_instructions: Ви отримаєте листа з інструкціями щодо розблокування Вашого акаунту через декілька хвилин. - send_paranoid_instructions: Якщо Ваш акаунт існує, Ви отримаєте листа з інструкціями щодо розблокування Вашого акаунту через декілька хвилин. - unlocked: Ваш акаунт було успішно активовано. Будь ласка, увійдіть, щоб продовжити. + send_instructions: За кілька хвилин ви отримаєте електронного листа з інструкціями щодо розблокування вашого облікового запису. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці. + send_paranoid_instructions: Якщо ваш обліковий запис існує, за декілька хвилин ви отримаєте електронного листа з інструкціями щодо його розблокування. Якщо ви не отримали цього листа, перевірте теку зі спамом у вашій скринці. + unlocked: Ваш обліковий запис було успішно розблоковано. Будь ласка, увійдіть для продовження. errors: messages: already_confirmed: вже був підтверджений, будь ласка, спробуйте увійти @@ -57,7 +93,7 @@ uk: not_found: не знайдено not_locked: не був заблокований not_saved: - few: "%{count} помилок не дало цьому %{resource} зберегтися:" + few: "%{count} помилки не дали цьому %{resource} зберегтися:" many: "%{count} помилок не дало цьому %{resource} зберегтися:" one: '1 помилка не дала цьому %{resource} зберегтися:' other: "%{count} помилок не дало цьому %{resource} зберегтися:" diff --git a/config/locales/devise.ur.yml b/config/locales/devise.ur.yml new file mode 100644 index 000000000..2cace5883 --- /dev/null +++ b/config/locales/devise.ur.yml @@ -0,0 +1 @@ +ur: diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml index 22fa130f6..65c0a5c9d 100644 --- a/config/locales/devise.zh-CN.yml +++ b/config/locales/devise.zh-CN.yml @@ -2,7 +2,7 @@ zh-CN: devise: confirmations: - confirmed: 成功验证你的邮箱地址。 + confirmed: 已成功确认你的邮箱地址。 send_instructions: 你的电子邮箱将在几分钟后收到一封确认邮件。如果没有,请检查你的垃圾邮箱。 send_paranoid_instructions: 如果你的邮箱存在于我们的数据库中,你将收到一封确认注册的邮件。如果没有,请检查你的垃圾邮箱。 failure: @@ -46,6 +46,18 @@ zh-CN: extra: 如果你并没有请求本次变更,请忽略此邮件。你的密码只有在你点击上面的链接并输入新密码后才会更改。 subject: Mastodon:重置密码信息 title: 重置密码 + two_factor_disabled: + explanation: 账户的双重认证已禁用。现在仅使用邮箱和密码登录即可登录。 + subject: Mastodon:双重认证已禁用。 + title: 双重认证禁用 + two_factor_enabled: + explanation: 账户双重认证已启用。登录时将需要来自已配对的 TOTP 应用生成的验证码。 + subject: 'Mastodon: 双重验证已开启' + title: 已启用双重认证 + two_factor_recovery_codes_changed: + explanation: 之前的恢复码已失效,现已生成了新的恢复码。 + subject: Mastodon:重新生成双重认证的恢复码 + title: 双重验证的恢复码已更改 unlock_instructions: subject: Mastodon:帐户解锁信息 omniauth_callbacks: @@ -58,7 +70,7 @@ zh-CN: updated: 你的密码已修改成功,你现在已登录。 updated_not_active: 你的密码已修改成功。 registrations: - destroyed: 再见!你的帐户已成功注销。我们希望很快可以再见到你。 + destroyed: 再见!你的帐户已成功销毁。我们希望很快可以再见到你。 signed_up: 欢迎!你已注册成功。 signed_up_but_inactive: 你已注册,但尚未激活帐户。 signed_up_but_locked: 你已注册,但帐户被锁定了。 diff --git a/config/locales/devise.zh-TW.yml b/config/locales/devise.zh-TW.yml index cb989630e..895405f4a 100644 --- a/config/locales/devise.zh-TW.yml +++ b/config/locales/devise.zh-TW.yml @@ -46,6 +46,18 @@ zh-TW: extra: 若您並未請求,請忽略此信件。您的密碼在存取上方連結並建立新連結前不會變更。 subject: Mastodon:重設密碼指引 title: 重設密碼 + two_factor_disabled: + explanation: 您帳戶的兩步驟驗證已停用。現在只能使用電子信箱位址及密碼登入。 + subject: Mastodon:已停用兩步驟驗證 + title: 已停用 2FA + two_factor_enabled: + explanation: 已對您的帳戶啟用兩步驟驗證。登入時將需要配對之 TOTP 應用程式所產生的 Token。 + subject: Mastodon:已啟用兩步驟驗證 + title: 已啟用 2FA + two_factor_recovery_codes_changed: + explanation: 上一次的復原碼已經失效,且已產生新的復原碼。 + subject: Mastodon:兩步驟驗證復原碼已經重新產生 + title: 2FA 復原碼已變更 unlock_instructions: subject: Mastodon:帳戶解鎖指引 omniauth_callbacks: diff --git a/config/locales/doorkeeper.ar.yml b/config/locales/doorkeeper.ar.yml index 75d66086f..51d8b76b4 100644 --- a/config/locales/doorkeeper.ar.yml +++ b/config/locales/doorkeeper.ar.yml @@ -29,7 +29,7 @@ ar: edit: title: تعديل التطبيق form: - error: عفوا ! تحقق من خُلوّ الاستمارة من الأخطاء من فضلك + error: عفوا! تحقق من خُلوّ الاستمارة من الأخطاء من فضلك help: native_redirect_uri: إستخدم %{native_redirect_uri} للاختبار و التجريب محليا redirect_uri: إستخدم خطا واحدا لكل رابط @@ -113,6 +113,11 @@ ar: application: title: طلب تصريح مفتوح OAuth scopes: + admin:read: قراءة كافة البيانات على الخادم + admin:read:accounts: قراءة المعلومات الحساسة عن كافة الحسابات + admin:write: تعديل كافة البيانات على الخادم + admin:write:accounts: اتخاذ إجراءات إشراف على الحسابات + admin:write:reports: اتخاذ إجراءات إشراف على الإبلاغات follow: تعديل علاقات الحساب push: تلقي إشعاراتك read: قراءة كافة بيانات حسابك @@ -128,7 +133,7 @@ ar: read:search: البحث مكانك read:statuses: رؤية كافة المنشورات write: تغيير كافة بيانات حسابك - write:accounts: تعديل ملفك الشخصي + write:accounts: تعديل صفحتك التعريفية write:blocks: حجب الحسابات و النطاقات write:favourites: الإعجاب بمنشورات write:filters: إنشاء عوامل تصفية diff --git a/config/locales/doorkeeper.br.yml b/config/locales/doorkeeper.br.yml new file mode 100644 index 000000000..c7677c850 --- /dev/null +++ b/config/locales/doorkeeper.br.yml @@ -0,0 +1 @@ +br: diff --git a/config/locales/doorkeeper.ca.yml b/config/locales/doorkeeper.ca.yml index dfa46551f..dde70f47a 100644 --- a/config/locales/doorkeeper.ca.yml +++ b/config/locales/doorkeeper.ca.yml @@ -114,6 +114,12 @@ ca: application: title: OAuth autorització requerida scopes: + admin:read: llegir totes les dades en el servidor + admin:read:accounts: llegir l'informació sensible de tots els comptes + admin:read:reports: llegir l'informació sensible de tots els informes i comptes reportats + admin:write: modificar totes les dades en el servidor + admin:write:accounts: fer l'acció de moderació en els comptes + admin:write:reports: fer l'acció de moderació en els informes follow: seguir, blocar, desblocar i deixar de seguir comptes push: rebre notificacions push del teu compte read: llegir les dades del teu compte diff --git a/config/locales/doorkeeper.co.yml b/config/locales/doorkeeper.co.yml index 542ad7c57..d45041a4e 100644 --- a/config/locales/doorkeeper.co.yml +++ b/config/locales/doorkeeper.co.yml @@ -114,6 +114,12 @@ co: application: title: Auturizazione OAuth riquestata scopes: + admin:read: leghje tutti i dati nant'à u servore + admin:read:accounts: leghje i cuntinuti sensibili di tutti i conti + admin:read:reports: leghje i cuntinuti sensibili di tutti i rapporti è conti signalati + admin:write: mudificà tutti i dati nant'à u servore + admin:write:accounts: realizà azzione di muderazione nant'à i conti + admin:write:reports: realizà azzione di muderazione nant'à i rapporti follow: Mudificà rilazione trà i conti push: Riceve e vostre nutificazione push read: leghje tutte l’infurmazioni di u vostru contu diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml index f523e125d..cb5cd147c 100644 --- a/config/locales/doorkeeper.cs.yml +++ b/config/locales/doorkeeper.cs.yml @@ -114,6 +114,12 @@ cs: application: title: Je požadována autorizace OAuth scopes: + admin:read: číst všechna data na serveru + admin:read:accounts: číst citlivé informace všech účtů + admin:read:reports: číst citlivé informace všech nahlášení a nahlášených účtů + admin:write: měnit všechna data na serveru + admin:write:accounts: provádět moderátorské akce s účty + admin:write:reports: provádět moderátorské akce s nahlášeními follow: upravovat vztahy mezi profily push: přijímat vaše push oznámení read: vidět všechna data vašeho účtu diff --git a/config/locales/doorkeeper.cy.yml b/config/locales/doorkeeper.cy.yml index f51e1b464..e29043e86 100644 --- a/config/locales/doorkeeper.cy.yml +++ b/config/locales/doorkeeper.cy.yml @@ -72,6 +72,7 @@ cy: index: application: Rhaglen created_at: Awdurdodedig + date_format: "%Y-%m-%d% %H:%M:%S" scopes: Rhinweddau title: Eich rhaglenni awdurdodedig errors: @@ -113,8 +114,14 @@ cy: application: title: Mae awdurdodiad OAuth yn ofynnol scopes: + admin:read: darllenwch yr holl ddata ar y serfiwr + admin:read:accounts: darllen gwybodaeth sensitif o'r holl gyfrifon + admin:read:reports: darllen gwybodaeth sensitif am bob adroddiad a chyfrifon yr adroddir amdanynt + admin:write: addasu pob data ar y serfiwr + admin:write:accounts: cyflawni camau cymedroli ar gyfrifon + admin:write:reports: cyflawni camau cymedroli ar adroddiadau follow: addasu perthnasau cyfrif - push: derbyn eich hysbysiadau PUSH + push: derbyn eich hysbysiadau gwthiadwy read: darllen holl ddata eich cyfrif read:accounts: gweld gwybodaeth y cyfrif read:blocks: gweld eich blociau diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml index b0f50a893..4d2c95aff 100644 --- a/config/locales/doorkeeper.da.yml +++ b/config/locales/doorkeeper.da.yml @@ -72,6 +72,7 @@ da: index: application: Applikation created_at: Godkendt + date_format: "%Y-%m-%d %H:%M:%S" scopes: Omfang title: Dine godkendte applikationer errors: @@ -113,6 +114,12 @@ da: application: title: OAuth godkendelse påkrævet scopes: + admin:read: læs al data på serveren + admin:read:accounts: læs sensitiv information fra alle konti + admin:read:reports: læs sensitiv information fra alle anmeldelser og anmeldte konti + admin:write: redigér al data på serveren + admin:write:accounts: udfør modereringshandlinger på konti + admin:write:reports: udfør modereringshandlinger på anmeldelser follow: ændre din kontos forhold push: modtage dine push notifikationer read: læse alle din kontos data diff --git a/config/locales/doorkeeper.de.yml b/config/locales/doorkeeper.de.yml index 771b89251..c41a847b2 100644 --- a/config/locales/doorkeeper.de.yml +++ b/config/locales/doorkeeper.de.yml @@ -23,7 +23,7 @@ de: cancel: Abbrechen destroy: Löschen edit: Bearbeiten - submit: Übertragen + submit: Speichern confirmations: destroy: Bist du sicher? edit: @@ -31,8 +31,8 @@ de: form: error: Hoppla! Bitte überprüfe das Formular auf mögliche Fehler help: - native_redirect_uri: "%{native_redirect_uri} für lokale Tests benutzen" - redirect_uri: Bitte benutze eine Zeile pro URI + native_redirect_uri: Benutze %{native_redirect_uri} für lokale Tests + redirect_uri: Benutze eine Zeile pro URI scopes: Bitte die Befugnisse mit Leerzeichen trennen. Zur Verwendung der Standardwerte freilassen. index: application: Anwendung @@ -77,19 +77,19 @@ de: title: Deine autorisierten Anwendungen errors: messages: - access_denied: Der »resource owner« oder der Autorisierungs-Server hat die Anfrage verweigert. - credential_flow_not_configured: Die Prozedur »Resource Owner Password Credentials« schlug fehl, da Doorkeeper.configure.resource_owner_from_credentials nicht konfiguriert ist. + access_denied: Die Anfrage wurde durch Benutzer_in oder Autorisierungs-Server verweigert. + credential_flow_not_configured: Das Konto konnte nicht gefunden werden, da Doorkeeper.configure.resource_owner_from_credentials nicht konfiguriert ist. invalid_client: 'Client-Authentifizierung ist fehlgeschlagen: Client unbekannt, keine Authentisierung mitgeliefert oder Authentisierungsmethode wird nicht unterstützt.' invalid_grant: Die beigefügte Autorisierung ist ungültig, abgelaufen, wurde widerrufen, einem anderen Client ausgestellt oder der Weiterleitungs-URI stimmt nicht mit der Autorisierungs-Anfrage überein. invalid_redirect_uri: Der beigefügte Weiterleitungs-URI ist ungültig. invalid_request: Die Anfrage enthält ein nicht-unterstütztes Argument, ein Parameter fehlt, oder sie ist anderweitig fehlerhaft. - invalid_resource_owner: Die angegebenen Zugangsdaten für den Ressourcenbesitzer sind ungültig oder der Ressourcenbesitzer kann nicht gefunden werden + invalid_resource_owner: Die angegebenen Zugangsdaten für das Konto sind ungültig oder das Konto kann nicht gefunden werden invalid_scope: Die angeforderte Befugnis ist ungültig, unbekannt oder fehlerhaft. invalid_token: expired: Der Zugriffs-Token ist abgelaufen revoked: Der Zugriffs-Token wurde widerrufen unknown: Der Zugriffs-Token ist ungültig - resource_owner_authenticator_not_configured: Die Prozedur »Resource Owner find« ist fehlgeschlagen, da Doorkeeper.configure.resource_owner_authenticator nicht konfiguriert ist. + resource_owner_authenticator_not_configured: Das Konto konnte nicht gefunden werden, da Doorkeeper.configure.resource_owner_authenticator nicht konfiguriert ist. server_error: Der Autorisierungs-Server hat ein unerwartetes Problem festgestellt und konnte die Anfrage nicht bearbeiten. temporarily_unavailable: Der Autorisierungs-Server ist aufgrund von zwischenzeitlicher Überlastung oder Wartungsarbeiten derzeit nicht in der Lage, die Anfrage zu bearbeiten. unauthorized_client: Der Client ist nicht dazu autorisiert, diese Anfrage mit dieser Methode auszuführen. @@ -114,6 +114,12 @@ de: application: title: OAuth-Autorisierung nötig scopes: + admin:read: alle Daten auf dem Server lesen + admin:read:accounts: sensible Daten aller Konten lesen + admin:read:reports: sensible Daten aller Meldungen und gemeldeten Konten lesen + admin:write: alle Daten auf dem Server ändern + admin:write:accounts: Moderationsaktionen auf Konten ausführen + admin:write:reports: Moderationsaktionen auf Meldungen ausführen follow: Kontenbeziehungen verändern push: deine Push-Benachrichtigungen erhalten read: all deine Daten lesen diff --git a/config/locales/doorkeeper.el.yml b/config/locales/doorkeeper.el.yml index e820ff8a6..66bee0b0d 100644 --- a/config/locales/doorkeeper.el.yml +++ b/config/locales/doorkeeper.el.yml @@ -41,7 +41,7 @@ el: name: Όνομα new: Νέα εφαρμογή scopes: Εύρος εφαρμογής - show: Εμφάνισε + show: Εμφάνιση title: Οι εφαρμογές σου new: title: Νέα εφαρμογή @@ -114,6 +114,12 @@ el: application: title: Απαιτείται έγκριση OAuth scopes: + admin:read: ανάγνωση δεδομένων στον διακομιστή + admin:read:accounts: ανάγνωση ευαίσθητων πληροφοριών όλων των λογαριασμών + admin:read:reports: ανάγνωση ευαίσθητων πληροφοριών όλων των καταγγελιών και των καταγγελλομένων λογαριασμών + admin:write: αλλαγή δεδομένων στον διακομιστή + admin:write:accounts: εκτέλεση διαχειριστικών ενεργειών σε λογαριασμούς + admin:write:reports: εκτέλεση διαχειριστικών ενεργειών σε καταγγελίες follow: να αλλάζει τις σχέσεις με λογαριασμούς push: να λαμβάνει τις ειδοποιήσεις σου read: να διαβάζει όλα τα στοιχεία του λογαριασμού σου diff --git a/config/locales/doorkeeper.en.yml b/config/locales/doorkeeper.en.yml index 211b210d7..4e9c83a8f 100644 --- a/config/locales/doorkeeper.en.yml +++ b/config/locales/doorkeeper.en.yml @@ -114,6 +114,12 @@ en: application: title: OAuth authorization required scopes: + admin:read: read all data on the server + admin:read:accounts: read sensitive information of all accounts + admin:read:reports: read sensitive information of all reports and reported accounts + admin:write: modify all data on the server + admin:write:accounts: perform moderation actions on accounts + admin:write:reports: perform moderation actions on reports follow: modify account relationships push: receive your push notifications read: read all your account's data diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml index e80ba3236..171e7d404 100644 --- a/config/locales/doorkeeper.eo.yml +++ b/config/locales/doorkeeper.eo.yml @@ -114,6 +114,10 @@ eo: application: title: OAuth-a rajtigo bezonata scopes: + admin:read: legu ĉiujn datumojn en la servilo + admin:read:accounts: legas senteman informacion de ĉiuj kontoj + admin:read:reports: legas senteman informacion de ĉiuj raportoj kun raportis kontojn + admin:write: modifu ĉiujn datumojn en la servilo follow: ŝanĝi rilatojn al aliaj kontoj push: ricevi viajn puŝ-sciigojn read: legi ĉiujn datumojn de via konto diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml new file mode 100644 index 000000000..14ac59521 --- /dev/null +++ b/config/locales/doorkeeper.es-AR.yml @@ -0,0 +1,148 @@ +--- +es-AR: + activerecord: + attributes: + doorkeeper/application: + name: Nombre de la aplicación + redirect_uri: Dirección web de redireccionamiento + scopes: Ámbitos + website: Sitio web de la aplicación + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: no puede contener un fragmento. + invalid_uri: debe ser una dirección web válida. + relative_uri: debe ser una dirección web absoluta. + secured_uri: debe ser una dirección web HTTPS/SSL. + doorkeeper: + applications: + buttons: + authorize: Autorizar + cancel: Cancelar + destroy: Destruir + edit: Editar + submit: Enviar + confirmations: + destroy: "¿Estás seguro?" + edit: + title: Editar aplicación + form: + error: "¡Epa! Comprobá tu formulario por posibles errores" + help: + native_redirect_uri: Usá %{native_redirect_uri} para pruebas locales + redirect_uri: Usá una línea por dirección web + scopes: Separá los ámbitos con espacios. Dejalo en blanco para usar los ámbitos predeterminados. + index: + application: Aplicación + callback_url: Dirección web de respuesta ("callback") + delete: Eliminar + name: Nombre + new: Nueva aplicación + scopes: Ámbitos + show: Mostrar + title: Tus aplicaciones + new: + title: Nueva aplicación + show: + actions: Acciones + application_id: Clave del cliente + callback_urls: Direcciones web de respuesta ("callback") + scopes: Ámbitos + secret: Secreto del cliente + title: 'Aplicación: %{name}' + authorizations: + buttons: + authorize: Autorizar + deny: Denegar + error: + title: Ocurrió un error + new: + able_to: Será capaz de + prompt: La aplicación %{client_name} solicita acceso a tu cuenta + title: Autorización requerida + show: + title: Copiá este código de autorización y pegalo en la aplicación. + authorized_applications: + buttons: + revoke: Revocar + confirmations: + revoke: "¿Estás seguro?" + index: + application: Aplicación + created_at: Autorizada + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Ámbitos + title: Tus aplicaciones autorizadas + errors: + messages: + access_denied: El propietario del recurso o servidor de autorización denegó la petición. + credential_flow_not_configured: Las credenciales de contraseña del propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_from_credentials está sin configurar. + invalid_client: La autenticación del cliente falló debido a que es un cliente desconocido, o no está incluída la autenticación del cliente, o el método de autenticación no está soportado. + invalid_grant: La concesión de autorización ofrecida no es válida, venció, se revocó, no coincide con la dirección web de redireccionamiento usada en la petición de autorización, o fue emitida para otro cliente. + invalid_redirect_uri: La dirección web de redireccionamiento incluida no es válida. + invalid_request: En la solicitud falta un parámetro requerido, o incluye un valor de parámetro no soportado, o está corrompida. + invalid_resource_owner: Las credenciales proporcionadas del propietario del recurso no son válidas, o no se puede encontrar al propietario del recurso. + invalid_scope: El ámbito solicitado no es válido, o conocido, o está corrompido. + invalid_token: + expired: Venció la clave de acceso + revoked: Se revocó la clave de acceso + unknown: La clave de acceso no es válida + resource_owner_authenticator_not_configured: El propietario del recurso falló debido a que "Doorkeeper.configure.resource_owner_authenticator" está sin configurar. + server_error: El servidor de la autorización encontró una condición inesperada que le impidió cumplir con la solicitud. + temporarily_unavailable: El servidor de la autorización es actualmente incapaz de manejar la solicitud debido a una sobrecarga temporal o un trabajo de mantenimiento del servidor. + unauthorized_client: El cliente no está autorizado a realizar esta solicitud usando este método. + unsupported_grant_type: El tipo de concesión de autorización no está soportado por el servidor de autorización. + unsupported_response_type: El servidor de autorización no soporta este tipo de respuesta. + flash: + applications: + create: + notice: Aplicación creada. + destroy: + notice: Aplicación eliminada. + update: + notice: Aplicación actualizada. + authorized_applications: + destroy: + notice: Aplicación revocada. + layouts: + admin: + nav: + applications: Aplicaciones + oauth2_provider: Proveedor OAuth2 + application: + title: Autorización de OAuth requerida + scopes: + admin:read: leer todos los datos en el servidor + admin:read:accounts: leer información sensible de todas las cuentas + admin:read:reports: leer información sensible de todos los informes y cuentas denunciadas + admin:write: modificar todos los datos en el servidor + admin:write:accounts: ejecutar acciones de moderación en cuentas + admin:write:reports: ejecutar acciones de moderación en informes + follow: modificar relaciones de cuenta + push: recibir tus notificaciones PuSH + read: leer todos los datos de tu cuenta + read:accounts: ver información de cuentas + read:blocks: ver qué cuentas bloqueaste + read:favourites: ver tus favoritos + read:filters: ver tus filtros + read:follows: ver qué cuentas seguís + read:lists: ver tus listas + read:mutes: ver qué cuentas silenciaste + read:notifications: ver tus notificaciones + read:reports: ver tus informes + read:search: buscar en tu nombre + read:statuses: ver todos los estados + write: modificar todos los datos de tu cuenta + write:accounts: modificar tu perfil + write:blocks: bloquear cuentas y dominios + write:favourites: toots favoritos + write:filters: crear filtros + write:follows: seguir cuentas + write:lists: crear listas + write:media: subir archivos de medios + write:mutes: silenciar usuarios y conversaciones + write:notifications: limpiá tus notificaciones + write:reports: denunciar otras cuentas + write:statuses: publicar estados diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml index 752387d87..1b03e33f2 100644 --- a/config/locales/doorkeeper.es.yml +++ b/config/locales/doorkeeper.es.yml @@ -114,7 +114,35 @@ es: application: title: OAuth autorización requerida scopes: + admin:read: leer todos los datos en el servidor + admin:read:accounts: leer información sensible de todas las cuentas + admin:read:reports: leer información sensible de todos los informes y cuentas reportadas + admin:write: modificar todos los datos en el servidor + admin:write:accounts: realizar acciones de moderación en cuentas + admin:write:reports: realizar acciones de moderación en informes follow: seguir, bloquear, desbloquear y dejar de seguir cuentas + push: recibir tus notificaciones push read: leer los datos de tu cuenta + read:accounts: ver información de cuentas + read:blocks: ver a quién has bloqueado + read:favourites: ver tus favoritos + read:filters: ver tus filtros + read:follows: ver a quién sigues + read:lists: ver tus listas + read:mutes: ver a quién has silenciado + read:notifications: ver tus notificaciones + read:reports: ver tus informes + read:search: buscar en su nombre + read:statuses: ver todos los estados write: publicar en tu nombre + write:accounts: modifica tu perfil write:blocks: bloquear cuentas y dominios + write:favourites: toots favoritos + write:filters: crear filtros + write:follows: seguir usuarios + write:lists: crear listas + write:media: subir archivos multimedia + write:mutes: silenciar usuarios y conversaciones + write:notifications: limpia tus notificaciones + write:reports: reportar a otras personas + write:statuses: publicar estados diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml new file mode 100644 index 000000000..f2a33ad0a --- /dev/null +++ b/config/locales/doorkeeper.et.yml @@ -0,0 +1,148 @@ +--- +et: + activerecord: + attributes: + doorkeeper/application: + name: Rakenduse nimi + redirect_uri: Suunamise URL + scopes: Ulatused + website: Rakenduse veebileht + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: ei tohi sisaldada fragmenti. + invalid_uri: peab olema õige URI. + relative_uri: peab olema absoluutne URI. + secured_uri: peab olema HTTPS/SSL URI. + doorkeeper: + applications: + buttons: + authorize: Autoriseeri + cancel: Katkesta + destroy: Hävita + edit: Redigeeri + submit: Saada + confirmations: + destroy: Olete kindel? + edit: + title: Redigeeri rakendust + form: + error: Oih! Kontrollige oma vormi võimalikest vigadest + help: + native_redirect_uri: Kasutage %{native_redirect_uri} kohalikeks testideks + redirect_uri: Kasuta ühte rida iga URI jaoks + scopes: Eralda ulatused tühikutega. Jäta tühjaks, et kasutada vaikimisi ulatusi. + index: + application: Rakendus + callback_url: Ümbersuunamise URL + delete: Kustuta + name: Nimi + new: Uus rakendus + scopes: Ulatused + show: Kuva + title: Teie rakendused + new: + title: Uus rakendus + show: + actions: Tegevused + application_id: Kliendi võti + callback_urls: Ümbersuunamise URLid + scopes: Ulatused + secret: Kliendi salasõna + title: 'Rakendus: %{name}' + authorizations: + buttons: + authorize: Autoriseeri + deny: Keeldu + error: + title: Ilmnes viga + new: + able_to: Sellel on võimalik + prompt: Rakendus %{client_name} soovib ligipääsu Teie kontole + title: Autoriseerimine vajalik + show: + title: Kopeeri see autoriseerimisvõti ja kleebi see rakendusse. + authorized_applications: + buttons: + revoke: Tühista + confirmations: + revoke: Olete kindel? + index: + application: Rakendus + created_at: Autoriseeritud + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Ulatused + title: Autoriseeritud rakendused + errors: + messages: + access_denied: Ressursi omanik või autoriseerimisserver lükkas taotluse tagasi. + credential_flow_not_configured: Resource Owner Password Credentials vool ebaõnnestus, kuna Doorkeeper.configure.resource_owner_from_credentials ei ole seadistatud. + invalid_client: Kliendi autentimine ebaõnnestus, kuna tundmatu klient, puudulik autentimine või mitte toetatud autentimismeetod. + invalid_grant: Antud autoriseerimisluba on vale, aegunud, tagasi võetud, ei kattu kasutatud ümbersuunamise URLid või oli antud teisele kliendile. + invalid_redirect_uri: Antud ümbersuunamise URL ei ole õige. + invalid_request: Taotlusel puudub kohustuslik parameeter, sisaldab mitte toetatud parameetri väärtust või on kuidagi teisiti vale. + invalid_resource_owner: Antud ressursi omaniku andmed on valed või ressursi omanikku ei leitud + invalid_scope: Soovitud ulatus on vale, tundmatu või vigane. + invalid_token: + expired: Ligipääsuvõti on aegunud + revoked: Ligipääsuvõti on tagasi võetud + unknown: Ligipääsuvõti on vale + resource_owner_authenticator_not_configured: Ressursi omaniku leidmine ebaõnnestus, kuna Doorkeeper.configure.resource_owner_authenticator pole seadistatud. + server_error: Autoriseerimisserveril toimus ootamatu viga ning selle tulemusena ei läinud taotlus läbi. + temporarily_unavailable: Autoriseerimisserver ei ole hetkel võimeline taotlust vastu võtma, mis võib olla tingitud serveri ülekoormusest või hooldustöödest. + unauthorized_client: Klient ei ole lubatud seda taotlust vastu võtma kasutades seda meetodit. + unsupported_grant_type: Autoriseerimisloa tüüp ei ole toetatud antud serveri poolt. + unsupported_response_type: Autoriseerimisserver ei toeta seda vastuse tüüpi. + flash: + applications: + create: + notice: Rakendus loodud. + destroy: + notice: Rakendus kustutatud. + update: + notice: Rakendus uuendatud. + authorized_applications: + destroy: + notice: Rakendus tagasi lükatud. + layouts: + admin: + nav: + applications: Rakendused + oauth2_provider: OAuth2 pakkuja + application: + title: OAuth autoriseerimine vajalik + scopes: + admin:read: lugeda kõiki andmeid serveril + admin:read:accounts: lugeda privaatset informatsiooni kõikidel kontodel + admin:read:reports: lugeda privaatset informatsiooni kõikide teavituste ja teavitatud kasutajate kohta + admin:write: muuta kõiki andmeid serveril + admin:write:accounts: teostada moderaatori tegevusi kontodel + admin:write:reports: teostada moderaatori tegevusi teavitustel + follow: muuta kontode suhteid + push: saada Teie teateid + read: lugeda kogu Teie konto andmeid + read:accounts: näha konto informatsiooni + read:blocks: näha Teie blokeeringuid + read:favourites: näha Teie lemmikuid + read:filters: näha Teie filtreid + read:follows: näha Teie jälgimisi + read:lists: näha Teie nimekirju + read:mutes: näha Teie vaigistusi + read:notifications: näha Teie teateid + read:reports: näha Teie teavitusi + read:search: otsida Teie nimel + read:statuses: näha kõiki staatuseid + write: redigeerida kogu Teie konto andmeid + write:accounts: redigeerida Teie profiili + write:blocks: blokeerida kontosid ja domeene + write:favourites: lisada staatuseid lemmikuks + write:filters: luua filtreid + write:follows: jälgida inimesi + write:lists: luua nimekirju + write:media: üles laadida meediafaile + write:mutes: vaigista inimesi ja vestluseid + write:notifications: puhasta Teie teateid + write:reports: teavitada teistest inimestest + write:statuses: avaldada staatuseid diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml index f98babae6..70e52e8ad 100644 --- a/config/locales/doorkeeper.eu.yml +++ b/config/locales/doorkeeper.eu.yml @@ -5,7 +5,7 @@ eu: doorkeeper/application: name: Aplikazioaren izena redirect_uri: Birbideratu URIa - scopes: Esparruak + scopes: Irismena website: Aplikazioaren webgunea errors: models: @@ -33,14 +33,14 @@ eu: help: native_redirect_uri: Erabili %{native_redirect_uri} proba lokaletarako redirect_uri: Erabili lerro bat URI bakoitzeko - scopes: Banandu esparruak espazioekin. Laga hutsik lehenetsitako esparruak erabiltzeko. + scopes: Banandu irismenak espazioekin. Laga hutsik lehenetsitako irismenak erabiltzeko. index: application: Aplikazioa callback_url: Itzulera URLa delete: Ezabatu name: Izena new: Aplikazio berria - scopes: Esparruak + scopes: Irismena show: Erakutsi title: Zure aplikazioak new: @@ -49,7 +49,7 @@ eu: actions: Ekintzak application_id: Bezeroaren gakoa callback_urls: Itzulera URL-ak - scopes: Esparruak + scopes: Irismena secret: Bezeroaren sekretua title: 'Aplikazioa: %{name}' authorizations: @@ -73,7 +73,7 @@ eu: application: Aplikazioa created_at: Baimenduta date_format: "%Y-%m-%d %H:%M:%S" - scopes: Esparruak + scopes: Irismena title: Zuk baimendutako aplikazioak errors: messages: @@ -114,6 +114,12 @@ eu: application: title: OAuth autorizazioa behar da scopes: + admin:read: zerbitzariko datu guztiak irakurri + admin:read:accounts: kontu guztien informazio sentsiblea irakurri + admin:read:reports: salaketa guztietako eta salatutako kontu guztietako informazio sentsiblea irakurri + admin:write: zerbitzariko datu guztiak aldatu + admin:write:accounts: kontuetan moderazio ekintzak burutu + admin:write:reports: salaketetan moderazio ekintzak burutu follow: aldatu kontuaren erlazioak push: jaso push jakinarazpenak read: irakurri zure kontuko datu guztiak diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 10613d435..abe1a96b2 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -72,6 +72,7 @@ fi: index: application: Sovellus created_at: Valtuutettu + date_format: "%d/%m/%Y %H:%M:%S" scopes: Oikeudet title: Valtuutetut sovellukset errors: @@ -113,6 +114,17 @@ fi: application: title: OAuth-valtuutus tarvitaan scopes: + admin:read: lukea kaikkia tietoja palvelimelta + admin:read:accounts: lukea arkaluontoista sisältöä kaikista tileistä + admin:write: muokata kaikkia tietoja palvelimella follow: seurata, estää, perua eston ja lopettaa tilien seuraaminen + push: vastaanottaa push-ilmoituksesi read: lukea tilin tietoja + read:accounts: nähdä tilin tiedot write: julkaista puolestasi + write:accounts: muokata profiiliasi + write:filters: luoda suodattimia + write:follows: seurata ihmisiä + write:lists: luoda listoja + write:media: lähettää mediatiedostoja + write:notifications: tyhjentää ilmoituksesi diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml index 352561768..5dc13af87 100644 --- a/config/locales/doorkeeper.fr.yml +++ b/config/locales/doorkeeper.fr.yml @@ -114,8 +114,14 @@ fr: application: title: Autorisation OAuth requise scopes: + admin:read: lire toutes les données du serveur + admin:read:accounts: lire les informations sensibles de tous les comptes + admin:read:reports: lire les informations sensibles de tous les signalements et des comptes signalés + admin:write: modifier toutes les données sur le serveur + admin:write:accounts: effectuer des actions de modération sur les comptes + admin:write:reports: effectuer des actions de modération sur les singnalements follow: modifier les relations avec les comptes - push: recevoir vos notifications + push: recevoir vos notifications poussées read: lire toutes les données de votre compte read:accounts: voir les informations du compte read:blocks: voir vos bloquages diff --git a/config/locales/doorkeeper.gl.yml b/config/locales/doorkeeper.gl.yml index 0dc45d5a3..90cbd9b38 100644 --- a/config/locales/doorkeeper.gl.yml +++ b/config/locales/doorkeeper.gl.yml @@ -114,6 +114,12 @@ gl: application: title: Precisa autorización OAuth scopes: + admin:read: ler todos os datos no servidor + admin:read:accounts: ler información sensible de todas as contas + admin:read:reports: ler información sensible de todos os informes e contas reportadas + admin:write: modificar todos os datos no servidor + admin:write:accounts: executar accións de moderación nas contas + admin:write:reports: executar accións de moderación nos informes follow: modificar as relacións da conta push: recibir notificacións push read: ler todos os datos da súa conta diff --git a/config/locales/doorkeeper.hi.yml b/config/locales/doorkeeper.hi.yml new file mode 100644 index 000000000..d758a5b53 --- /dev/null +++ b/config/locales/doorkeeper.hi.yml @@ -0,0 +1 @@ +hi: diff --git a/config/locales/doorkeeper.hu.yml b/config/locales/doorkeeper.hu.yml index da57aaf9b..92b4e6839 100644 --- a/config/locales/doorkeeper.hu.yml +++ b/config/locales/doorkeeper.hu.yml @@ -3,8 +3,8 @@ hu: activerecord: attributes: doorkeeper/application: - name: Név - redirect_uri: Visszairányító URI + name: Alkalmazás neve + redirect_uri: Átirányító URI scopes: Hatáskör website: Az alkalmazás weboldala errors: @@ -33,22 +33,23 @@ hu: help: native_redirect_uri: Használj %{native_redirect_uri} a helyi tesztekhez redirect_uri: Egy sor URI-nként - scopes: A nézeteket szóközzel válaszd el. Hagyd üresen az alapértelmezett nézetekhez. + scopes: A hatásköröket szóközzel válaszd el. Hagyd üresen az alapértelmezett hatáskörökhöz. index: application: Alkalmazás + callback_url: Callback URL delete: Eltávolítás name: Név new: Új alkalmazás scopes: Hatáskör show: Mutat - title: Alkalmazásod + title: Alkalmazásaid new: title: Új alkalmazás show: actions: Műveletek application_id: Alkalmazás azonosító - callback_urls: Callback urlek - scopes: Nézetek + callback_urls: Callback URL-ek + scopes: Hatáskörök secret: Titok title: 'Alkalmazás: %{name}' authorizations: @@ -61,6 +62,8 @@ hu: able_to: Képes lesz prompt: "%{client_name} nevű alkalmazás engedélyt kér a fiókodhoz való hozzáféréshez." title: Engedély szükséges + show: + title: Másold le ezt az engedélyező kódot és írd be az alkalmazásba. authorized_applications: buttons: revoke: Visszavonás @@ -68,27 +71,28 @@ hu: revoke: Biztos vagy benne? index: application: Alkalmazás - created_at: Készítve + created_at: Felhatalmazva + date_format: "%Y-%m-%d %H:%M:%S" scopes: Hatáskör title: Engedélyezett alkalmazásaid errors: messages: - access_denied: Az erőforrás tulajdonosa vagy hitelesítő kiszolgálója megtakadta a kérést. + access_denied: Az erőforrás tulajdonosa vagy hitelesítő kiszolgálója megtagadta a kérést. credential_flow_not_configured: Az erőforrás tulajdonos jelszóadatainak átadása megszakadt, mert a Doorkeeper.configure.resource_owner_from_credentials beállítatlan. - invalid_client: A kliens hitelesítése megszakadt, mert a ismeretlen a kliens, kliens nem küldött hitelesítést, vagy ismeretlen a kliens - invalid_grant: A biztosított hitelesítés érvénytelen, lejárt, visszavont, vagy nem egyezik a hitelesítéi kérésben használt URIval, vagy más kliensnek lett címezve. - invalid_redirect_uri: A redirect uri nem valós. - invalid_request: A kérésből hiányzik egy szükséges paraméter, nem támogatott paramétert tartalmaz, vagy egyéb módon hibás. + invalid_client: A kliens hitelesítése megszakadt, mert ismeretlen a kliens, a kliens nem küldött hitelesítést, vagy a hitelesítés módja nem támogatott. + invalid_grant: A biztosított hitelesítés érvénytelen, lejárt, visszavont, vagy nem egyezik a hitelesítési kérésben használt URI-val, vagy más kliensnek címezték. + invalid_redirect_uri: Az átirányító URI nem valós. + invalid_request: A kérésből hiányzik egy szükséges paraméter, nem támogatott paramétert tartalmaz, vagy máshogy sérült. invalid_resource_owner: A biztosított erőforrás tulajdonosának hitelesítő adatai nem valósak, vagy az erőforrás tulajdonosa nem található. invalid_scope: A kért nézet érvénytelen, ismeretlen, vagy hibás. invalid_token: expired: Hozzáférési kulcs lejárt - revoked: Hozzáférési kulcs vissza lett vonva + revoked: Hozzáférési kulcsot visszavonták unknown: Hozzáférési kulcs érvénytelen resource_owner_authenticator_not_configured: Erőforrás tulajdonos keresés megszakadt, ugyanis a Doorkeeper.configure.resource_owner_authenticator beállítatlan. server_error: Hitelesítő szervert váratlan esemény érte, mely meggátolta a kérés teljesítését. - temporarily_unavailable: A hitelesítő szerver jelenleg nem tudja teljesíteni a kérést egy átmeneti túlterheltség vagy a kiszolgáló karbantartása miatt. - unauthorized_client: A kliens nincs feljogosítva a kérés teljesítésére. + temporarily_unavailable: A hitelesítő szerver jelenleg nem tudja teljesíteni a kérést átmeneti túlterheltség vagy a kiszolgáló karbantartása miatt. + unauthorized_client: A kliens nincs feljogosítva erre a kérésre. unsupported_grant_type: A hitelesítés módja nem támogatott a hitelesítő kiszolgálón. unsupported_response_type: A hitelesítő kiszolgáló nem támogatja ezt a választ. flash: @@ -110,6 +114,35 @@ hu: application: title: OAuth engedély szükséges scopes: - follow: fiókok követése, blokkoláse, blokkolás feloldása és követés abbahagyása + admin:read: szerver minden adatának olvasása + admin:read:accounts: minden érzékeny fiókadat olvasása + admin:read:reports: minden bejelentés és bejelentett fiók érzékeny adatainak olvasása + admin:write: szerver minden adatának változtatása + admin:write:accounts: moderációs műveletek végzése fiókokon + admin:write:reports: moderációs műveletek végzése bejelentéseken + follow: fiókok követése, letiltása, tiltás feloldása és követés abbahagyása + push: push értesítések fogadása read: fiókod adatainak olvasása - write: bejegyzés írása a nevedben + read:accounts: fiók adatainak megtekintése + read:blocks: letiltások megtekintése + read:favourites: kedvencek megtekintése + read:filters: szűrök megtekintése + read:follows: követések megtekintése + read:lists: listák megtekintése + read:mutes: némítások megtekintése + read:notifications: értesítések megtekintése + read:reports: bejelentések megtekintése + read:search: nevedben keresés + read:statuses: tülkök megtekintése + write: fiókod adatainak megváltoztatása + write:accounts: profilod megváltoztatása + write:blocks: fiókok és domainek letiltása + write:favourites: tülkök kedvencnek jelölése + write:filters: szűrők létrehozása + write:follows: mások követése + write:lists: listák létrehozása + write:media: média feltöltése + write:mutes: emberek és beszélgetések némítása + write:notifications: értesítések törlése + write:reports: mások bejelentése + write:statuses: tülkök közzététele diff --git a/config/locales/doorkeeper.id.yml b/config/locales/doorkeeper.id.yml index 3f9dee2ac..08d2470f0 100644 --- a/config/locales/doorkeeper.id.yml +++ b/config/locales/doorkeeper.id.yml @@ -62,6 +62,8 @@ id: able_to: Mempunyai akses untuk prompt: Aplikasi %{client_name} meminta akses pada akun anda title: Izin diperlukan + show: + title: Salin kode autorisasi dan tempelkan pada aplikasi. authorized_applications: buttons: revoke: Cabut izin @@ -70,6 +72,7 @@ id: index: application: Aplikasi created_at: Diizinkan pada + date_format: "%d-%m-%Y %H:%M:%S" scopes: Scope title: Aplikasi yang anda izinkan errors: @@ -111,6 +114,35 @@ id: application: title: Otorisasi OAuth diperlukan scopes: + admin:read: baca semua data di server + admin:read:accounts: baca informasi sensitif semua akun + admin:read:reports: baca informasi sensitif semua laporan dan akun terlapor + admin:write: ubah semua data di server + admin:write:accounts: lakukan aksi moderasi akun + admin:write:reports: lakukan aksi moderasi laporan follow: mengikuti, blokir, menghapus blokir, dan berhenti mengikuti akun + push: terima notifikasi dorong read: membaca data pada akun anda + read:accounts: lihat informasi akun + read:blocks: lihat blokiran Anda + read:favourites: lihat favorit Anda + read:filters: lihat saringan Anda + read:follows: lihat yang Anda ikuti + read:lists: lihat daftar Anda + read:mutes: lihat daftar bisu Anda + read:notifications: lihat notifikasi Anda + read:reports: lihat laporan Anda + read:search: cari atas nama Anda + read:statuses: lihat semua status write: memposting sebagai anda + write:accounts: ubah profil Anda + write:blocks: blokir akun dan domain + write:favourites: status favorit + write:filters: buat saringan + write:follows: ikuti orang + write:lists: buat daftar + write:media: unggah berkas media + write:mutes: bisukan orang dan percakapan + write:notifications: hapus notifikasi Anda + write:reports: laporkan orang lain + write:statuses: terbitkan status diff --git a/config/locales/doorkeeper.it.yml b/config/locales/doorkeeper.it.yml index f6bd8b4bc..361d0bd75 100644 --- a/config/locales/doorkeeper.it.yml +++ b/config/locales/doorkeeper.it.yml @@ -36,9 +36,11 @@ it: scopes: Dividi gli scopes con spazi. Lascia vuoto per utilizzare gli scopes di default. index: application: Applicazione + callback_url: URL di callback delete: Elimina name: Nome new: Nuova applicazione + scopes: Visibilità show: Mostra title: Le tue applicazioni new: @@ -112,6 +114,12 @@ it: application: title: Autorizzazione OAuth richiesta scopes: + admin:read: leggere tutti i dati dal server + admin:read:accounts: leggere dati sensibili di tutti gli account + admin:read:reports: leggere dati sensibili di tutte le segnalazioni e gli account segnalati + admin:write: modificare tutti i dati sul server + admin:write:accounts: eseguire azioni di moderazione sugli account + admin:write:reports: eseguire azioni di moderazione sulle segnalazioni follow: modificare relazioni tra account push: ricevere le tue notifiche push read: leggere tutte le informazioni del tuo account diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml index 9bc2d9a80..d80212f82 100644 --- a/config/locales/doorkeeper.ja.yml +++ b/config/locales/doorkeeper.ja.yml @@ -114,6 +114,12 @@ ja: application: title: OAuth認証 scopes: + admin:read: サーバーのすべてのデータの読み取り + admin:read:accounts: すべてのアカウントの機密情報の読み取り + admin:read:reports: すべての通報と通報されたアカウントの機密情報の読み取り + admin:write: サーバーのすべてのデータの変更 + admin:write:accounts: アカウントに対するアクションの実行 + admin:write:reports: 通報に対するアクションの実行 follow: アカウントのつながりを変更 push: プッシュ通知の受信 read: アカウントのすべてのデータの読み取り diff --git a/config/locales/doorkeeper.kk.yml b/config/locales/doorkeeper.kk.yml index 97897cdcb..cdbc89636 100644 --- a/config/locales/doorkeeper.kk.yml +++ b/config/locales/doorkeeper.kk.yml @@ -72,6 +72,7 @@ kk: index: application: Қосымша created_at: Авторизацияланды + date_format: "%Y-%m-%d %H:%M:%S" scopes: Scopеs title: Your authorized applicаtions errors: @@ -113,6 +114,12 @@ kk: application: title: OAuth authorizatiоn required scopes: + admin:read: сервердегі барлық деректерді оқыңыз + admin:read:accounts: барлық аккаунттардың құпия ақпаратын оқыңыз + admin:read:reports: барлық есептер мен есептік жазбалардың құпия ақпаратын оқыңыз + admin:write: сервердегі барлық деректерді өзгертіңіз + admin:write:accounts: аккаунттардағы модерациялық әрекеттерді орындау + admin:write:reports: есептер бойынша модерация әрекеттерін орындау follow: modify accоunt relationships push: receive your push nоtifications read: read all your accоunt's data diff --git a/config/locales/doorkeeper.kn.yml b/config/locales/doorkeeper.kn.yml new file mode 100644 index 000000000..d094088d8 --- /dev/null +++ b/config/locales/doorkeeper.kn.yml @@ -0,0 +1 @@ +kn: diff --git a/config/locales/doorkeeper.ko.yml b/config/locales/doorkeeper.ko.yml index 76e725deb..8337325e2 100644 --- a/config/locales/doorkeeper.ko.yml +++ b/config/locales/doorkeeper.ko.yml @@ -78,12 +78,23 @@ ko: errors: messages: access_denied: 리소스 소유자 또는 권한 부여 서버가 요청을 거부했습니다. + credential_flow_not_configured: Doorkeeper.configure.resource_owner_from_credentials의 설정이 되어있지 않아 리소스 소유자 패스워드 자격증명이 실패하였습니다. + invalid_client: 알 수 없는 클라이언트이기 때문에 클라이언트 인증이 실패하였습니다, 클라이언트 자격증명이 포함되지 않았거나, 지원 되지 않는 메소드입니다. + invalid_grant: 제공된 권한 부여가 잘못되거나, 만료되었거나, 취소되었거나, 권한 부여 요청에 사용된 리디렉션 URI가 일치하지 않거나, 다른 클라이언트에 지정되었습니다. invalid_redirect_uri: 리디렉션 URI가 올바르지 않습니다 invalid_request: 요청에 필요한 매개변수가 없거나, 지원 되지 않는 매개변수가 있거나, 형식이 잘못되었습니다. + invalid_resource_owner: 제공 된 리소스 소유자 자격증명이 올바르지 않거나 리소스 소유자를 찾을 수 없습니다 + invalid_scope: 요청한 범위가 올바르지 않거나, 알 수 없거나, 잘못 된 형식입니다. invalid_token: expired: 액세스 토큰이 만료되었습니다. revoked: 액세스 토큰이 취소되었습니다. unknown: 액세스 토큰이 잘못되었습니다. + resource_owner_authenticator_not_configured: Doorkeeper.configure.resource_owner_authenticator가 설정되지 않아 리소스 소유자 찾기가 실패하였습니다. + server_error: 권한 부여 서버에 예기치 않은 상태가 발생하여, 요청을 수행할 수 없습니다. + temporarily_unavailable: 권한 부여 서버가 일시적인 과부하 또는 유지 관리로 인해 요청을 현재 처리할 수 없습니다. + unauthorized_client: 클라이언트가 이 방법을 사용하여 해당 요청을 실행하도록 허용되지 않았습니다. + unsupported_grant_type: 권한 부여 유형이 권한 부여 서버에 의해 지원되지 않습니다. + unsupported_response_type: 권한 부여 서버가 이 응답 유형을 지원하지 않습니다. flash: applications: create: @@ -103,6 +114,12 @@ ko: application: title: OAuth 인증이 필요합니다 scopes: + admin:read: 서버의 모든 데이터 읽기 + admin:read:accounts: 모든 계정의 민감한 정보 읽기 + admin:read:reports: 신고와 신고 된 계정의 민감한 정보 읽기 + admin:write: 서버의 모든 데이터 수정 + admin:write:accounts: 계정에 모더레이션 조치 취하기 + admin:write:reports: 신고에 모더레이션 조치 취하기 follow: 계정의 관계를 수정 push: 푸시 알림을 받기 read: 계정의 모든 데이터를 읽기 diff --git a/config/locales/doorkeeper.mk.yml b/config/locales/doorkeeper.mk.yml new file mode 100644 index 000000000..8b9144a98 --- /dev/null +++ b/config/locales/doorkeeper.mk.yml @@ -0,0 +1 @@ +mk: diff --git a/config/locales/doorkeeper.ml.yml b/config/locales/doorkeeper.ml.yml new file mode 100644 index 000000000..6931a683d --- /dev/null +++ b/config/locales/doorkeeper.ml.yml @@ -0,0 +1 @@ +ml: diff --git a/config/locales/doorkeeper.mr.yml b/config/locales/doorkeeper.mr.yml new file mode 100644 index 000000000..a6f59fbd4 --- /dev/null +++ b/config/locales/doorkeeper.mr.yml @@ -0,0 +1,34 @@ +--- +mr: + activerecord: + attributes: + doorkeeper/application: + name: अर्जाचं नाव + doorkeeper: + applications: + buttons: + authorize: मान्यता द्या + cancel: रद्द करा + destroy: नष्ट करा + edit: संपादन करा + submit: दाखल करा + confirmations: + destroy: नक्की? + edit: + title: अर्जाचं संपादन करा + index: + application: अर्ज + delete: हटवा + name: नाव + new: नवीन अर्ज + show: दाखवा + title: तुमचे अर्ज + show: + actions: कृती + title: 'अर्ज: %{name}' + authorizations: + buttons: + authorize: संमती द्या + deny: नाकारा + new: + title: संमतीची आवश्यकता आहे diff --git a/config/locales/doorkeeper.nl.yml b/config/locales/doorkeeper.nl.yml index aa37ea190..1fabfc123 100644 --- a/config/locales/doorkeeper.nl.yml +++ b/config/locales/doorkeeper.nl.yml @@ -114,6 +114,12 @@ nl: application: title: OAuth-autorisatie vereist scopes: + admin:read: lees alle gegevens op de server + admin:read:accounts: lees gevoelige informatie van alle accounts + admin:read:reports: lees gevoelige informatie van alle rapportages en gerapporteerde accounts + admin:write: wijzig alle gegevens op de server + admin:write:accounts: moderatieacties op accounts uitvoeren + admin:write:reports: moderatieacties op rapportages uitvoeren follow: relaties tussen accounts bewerken push: ontvang jouw pushmeldingen read: alle gegevens van jouw account lezen diff --git a/config/locales/doorkeeper.nn.yml b/config/locales/doorkeeper.nn.yml new file mode 100644 index 000000000..777f4e600 --- /dev/null +++ b/config/locales/doorkeeper.nn.yml @@ -0,0 +1 @@ +nn: diff --git a/config/locales/doorkeeper.oc.yml b/config/locales/doorkeeper.oc.yml index d97c2f600..e715cc7d5 100644 --- a/config/locales/doorkeeper.oc.yml +++ b/config/locales/doorkeeper.oc.yml @@ -114,6 +114,12 @@ oc: application: title: Cal una autorizacion OAuth scopes: + admin:read: lectura de totas las donadas del servidor + admin:read:accounts: lectura de las informacions sensiblas dels comptes + admin:read:reports: lectura de las informacions sensiblas dels senhalaments e dels comptes senhalats + admin:write: modificacion de las donadas del servidor + admin:write:accounts: realizacion d’accions de moderacion suls comptes + admin:write:reports: realizacion d’accions suls senhalaments follow: modificar las relacions del compte push: recebre vòstras notificacions push read: legir totas las donadas de vòstre compte diff --git a/config/locales/doorkeeper.pl.yml b/config/locales/doorkeeper.pl.yml index de724f6c9..2068eeef4 100644 --- a/config/locales/doorkeeper.pl.yml +++ b/config/locales/doorkeeper.pl.yml @@ -114,6 +114,12 @@ pl: application: title: Uwierzytelnienie OAuth jest wymagane scopes: + admin:read: odczytaj wszystkie dane na serwerze + admin:read:accounts: odczytaj wrażliwe informacje na wszystkich kontach + admin:read:reports: odczytaj wrażliwe informacje ze wszystkich zgłoszeń oraz zgłoszonych kont + admin:write: zmodyfikuj wszystkie dane na serwerze + admin:write:accounts: wykonaj działania moderacyjne na kontach + admin:write:reports: wykonaj działania moderacyjne na zgłoszeniach follow: możliwość śledzenia kont push: otrzymywanie powiadomień push dla Twojego konta read: możliwość odczytu wszystkich danych konta diff --git a/config/locales/doorkeeper.pt.yml b/config/locales/doorkeeper.pt-PT.yml index f21e84d17..42068e0a0 100644 --- a/config/locales/doorkeeper.pt.yml +++ b/config/locales/doorkeeper.pt-PT.yml @@ -1,5 +1,5 @@ --- -pt: +pt-PT: activerecord: attributes: doorkeeper/application: diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml index ebe90a189..1682205a5 100644 --- a/config/locales/doorkeeper.ru.yml +++ b/config/locales/doorkeeper.ru.yml @@ -60,7 +60,7 @@ ru: title: Произошла ошибка new: able_to: Оно сможет - prompt: Приложение %{client_name} запрашивает доступ к Вашему аккаунту + prompt: Приложение %{client_name} запрашивает доступ к Вашей учётной записи title: Требуется авторизация show: title: Скопируйте этот код авторизации и вставьте его в приложении. @@ -114,10 +114,16 @@ ru: application: title: Требуется авторизация OAuth scopes: - follow: подписываться, отписываться, блокировать и разблокировать аккаунты - push: принимать push-уведомления для Вашего аккаунта - read: читать данные Вашего аккаунта - read:accounts: видеть информацию об аккаунтах + admin:read: читать все данные на сервере + admin:read:accounts: читать конфиденциальную информацию всех учётных записей + admin:read:reports: читать конфиденциальную информацию о всех жалобах и учётных записях с жалобами + admin:write: модифицировать все данные на сервере + admin:write:accounts: производить модерацию учётных записей + admin:write:reports: производить модерацию жалоб + follow: управлять подписками и списком блокировок + push: получать push-уведомления + read: читать данные Вашей учётной записи + read:accounts: видеть информацию об учётных записях read:blocks: видеть ваших заблокированных read:favourites: видеть ваше избранное read:filters: видеть ваши фильтры @@ -128,9 +134,9 @@ ru: read:reports: видеть ваши жалобы read:search: использовать поиск read:statuses: видеть все статусы - write: изменять все данные вашего аккаунта + write: изменять все данные вашей учётной записи write:accounts: редактировать ваш профиль - write:blocks: блокировать аккаунты и домены + write:blocks: блокировать учётные записи и домены write:favourites: отмечать статусы как избранные write:filters: создавать фильтры write:follows: подписываться на людей diff --git a/config/locales/doorkeeper.sk.yml b/config/locales/doorkeeper.sk.yml index f54eb6d48..be52a3db2 100644 --- a/config/locales/doorkeeper.sk.yml +++ b/config/locales/doorkeeper.sk.yml @@ -19,34 +19,34 @@ sk: doorkeeper: applications: buttons: - authorize: Overiť - cancel: Zrušiť + authorize: Autorizuj + cancel: Zruš destroy: Zničiť - edit: Upraviť - submit: Poslať + edit: Uprav + submit: Pošli confirmations: destroy: Si si istý/á? edit: - title: Upraviť aplikáciu + title: Uprav aplikáciu form: - error: No teda! Pozrite formulár pre prípadné chyby + error: No teda! Skontroluj formulár pre prípadné chyby help: - native_redirect_uri: Použite %{native_redirect_uri} pre lokálne testy - redirect_uri: Iba jedna URI na riadok - scopes: Oprávnenia oddeľujte medzerami. Nechajte prázdne pre štandardné oprávnenia. + native_redirect_uri: Použi %{native_redirect_uri} pre lokálne testy + redirect_uri: Použi jeden riadok pre každú URI + scopes: Oprávnenia oddeľuj medzerami. Nechaj prázdne pre štandardné oprávnenia. index: application: Aplikácia callback_url: Návratová URL - delete: Zmazať + delete: Vymaž name: Názov new: Nová aplikácia scopes: Oprávnenia - show: Ukázať - title: Vaše aplikácie + show: Ukáž + title: Tvoje aplikácie new: title: Nová aplikácia show: - actions: Akcie + actions: Úkony application_id: Kľúč klienta callback_urls: Návratové URL adresy scopes: Oprávnenia @@ -54,7 +54,7 @@ sk: title: 'Aplikácia: %{name}' authorizations: buttons: - authorize: Overiť + authorize: Over deny: Zamietni error: title: Nastala chyba @@ -79,7 +79,7 @@ sk: access_denied: Prístup zamietnutý. credential_flow_not_configured: Resource Owner Password Credentials zlyhal lebo Doorkeeper.configure.resource_owner_from_credentials nebol nakonfigurovaný. invalid_client: Overenie klienta zlyhalo. Neznámy klient, chýbajú údaje o klientovi alebo nepodporovaná metóda overovania. - invalid_grant: Poslané oprávnenie je neplatné, expirované, zrušené, nesúhlasí s presmerovacou URI použitou v autorizačnej požiadavke alebo bolo vydané niekomu inému. + invalid_grant: Dané oprávnenie je neplatné, vypršané, zrušené, nesúhlasí s presmerovacou URI použitou v autorizačnej požiadavke, alebo bolo vydané pre iný klient. invalid_redirect_uri: Presmerovacia URI je neplatná. invalid_request: Požiadavke chýba povinný parameter alebo obsahuje nepodporovanú hodnotu niektorého parametra alebo je nejako inak poškodená. invalid_resource_owner: Uvedené prihlasovacie údaje sú neplatné alebo nenájdené @@ -91,9 +91,9 @@ sk: resource_owner_authenticator_not_configured: Resource Owner zlyhal pretože Doorkeeper.configure.resource_owner_authenticator nebol nakonfigurovaný. server_error: Nastala neočakávaná chyba na autorizačnom serveri ktorá zabránila vykonať požiadavku. temporarily_unavailable: Autorizačný server ťa teraz nemôže obslúžiť, pretože prebieha údržba alebo je dočasne preťažený. - unauthorized_client: Klient nie je autorizovaný vykonať danú požiadavku takouto metódou. + unauthorized_client: Klient nie je autorizovaný vykonať danú požiadavku týmto spôsobom. unsupported_grant_type: Tento typ oprávnenia nie je podporovaný autorizačným serverom. - unsupported_response_type: Autorizačný server nepodporuje typ tejto odpovede. + unsupported_response_type: Overovací server nepodporuje tento druh odpovede. flash: applications: create: @@ -113,6 +113,12 @@ sk: application: title: Požadovaná OAuth autorizácia scopes: + admin:read: prezeraj všetky dáta na serveri + admin:read:accounts: prezeraj chúlostivé informácie na všetkých účtoch + admin:read:reports: čítaj chulostivé informácie o všetkých hláseniach a nahlásených účtoch + admin:write: uprav všetky dáta na serveri + admin:write:accounts: urob moderovacie úkony na účtoch + admin:write:reports: urob moderovacie úkony voči hláseniam follow: uprav vzťahy svojho účtu push: dostávaj oboznámenia ohľadom tvojho účtu na obrazovku read: prezri si všetky dáta ohľadom svojho účetu diff --git a/config/locales/doorkeeper.sl.yml b/config/locales/doorkeeper.sl.yml index c27457089..26d92ddb5 100644 --- a/config/locales/doorkeeper.sl.yml +++ b/config/locales/doorkeeper.sl.yml @@ -4,3 +4,145 @@ sl: attributes: doorkeeper/application: name: Ime programa + redirect_uri: Preusmeritev URI + scopes: Obsegi + website: Spletišče programa + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: ne more vsebovati fragmenta. + invalid_uri: mora biti veljaven URI. + relative_uri: mora biti absolutni URI. + secured_uri: mora biti HTTPS/SSL URI. + doorkeeper: + applications: + buttons: + authorize: Overi + cancel: Prekliči + destroy: Uniči + edit: Uredi + submit: Pošlji + confirmations: + destroy: Ali ste prepričani? + edit: + title: Uredi aplikacijo + form: + error: Ups! Preverite obrazec za morebitne napake + help: + native_redirect_uri: Uporabite %{native_redirect_uri} za krajevne preizkuse + redirect_uri: Uporabite eno vrstico na URI + scopes: Ločite obsege s presledki. Pustite prazno, da uporabite privzete obsege. + index: + application: Program + callback_url: Povratni URL + delete: Izbriši + name: Ime + new: Nov program + scopes: Obsegi + show: Pokaži + title: Vaši programi + new: + title: Nov program + show: + actions: Dejanja + application_id: Ključ odjemalca + callback_urls: Povratni URL-ji + scopes: Obsegi + secret: Skrivnost odjemalca + title: 'Program: %{name}' + authorizations: + buttons: + authorize: Overi + deny: Zavrni + error: + title: Prišlo je do napake + new: + able_to: To bo lahko + prompt: Program %{client_name} zahteva dostop do vašega računa + title: Potrebna je pooblastitev + show: + title: Kopirajte to pooblastilno kodo in jo prilepite v program. + authorized_applications: + buttons: + revoke: Prekliči + confirmations: + revoke: Ali ste prepričani? + index: + application: Program + created_at: Odobreno + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Obsegi + title: Vaši odobreni programi + errors: + messages: + access_denied: Lastnik virov ali strežnik pooblastil je zavrnil zahtevo. + credential_flow_not_configured: Pretok geselskih pooblastil lastnika virov ni uspel, ker Doorkeeper.configure.resource_owner_from_credentials ni nastavljen. + invalid_client: Overitev odjemalca ni uspelo zaradi neznanega odjemalca, zaradi nevključitve overitve odjemalca ali zaradi nepodprte metode overitve. + invalid_grant: Predložena odobritev za pooblastilo je neveljavna, potekla, preklicana, se ne ujema z URI preusmeritvijo, ki je uporabljena v zahtevi za pooblastilo ali je bila izdana drugemu odjemalcu. + invalid_redirect_uri: URI za preusmeritev ni veljaven. + invalid_request: Zahtevku manjka zahtevan parameter, vključuje nepodprto vrednost parametra ali je nepravilno oblikovan. + invalid_resource_owner: Predložene poverilnice lastnika virov niso veljavne ali pa lastnika virov ni mogoče najti + invalid_scope: Zahtevani obseg je neveljaven, neznan ali nepravilen. + invalid_token: + expired: Žeton za dostop je pretekel + revoked: Žeton za dostop je bil preklican + unknown: Žeton za dostop je neveljaven + resource_owner_authenticator_not_configured: Iskanje lastnika virov ni uspelo, ker Doorkeeper.configure.resource_owner_authenticator ni nastavljen. + server_error: Strežnik pooblastil je naletel na nepričakovano stanje, ki je preprečilo, da bi izpolnil zahtevo. + temporarily_unavailable: Strežnik pooblastil, zaradi začasne preobremenitve ali vzdrževanja, trenutno ne more obdelati zahteve. + unauthorized_client: Odjemalec nima pooblastila za izvajanje te zahteve po tej metodi. + unsupported_grant_type: Strežnik pooblastil ne podpira vrste odobritve pooblastila. + unsupported_response_type: Strežnik pooblastil ne podpira te vrste odziva. + flash: + applications: + create: + notice: Program je ustvarjen. + destroy: + notice: Program je izbrisan. + update: + notice: Program je posodobljen. + authorized_applications: + destroy: + notice: Program je preklican. + layouts: + admin: + nav: + applications: Programi + oauth2_provider: Ponudnik OAuth2 + application: + title: Potrebna je OAuth pooblastitev + scopes: + admin:read: preberi vse podatke na strežniku + admin:read:accounts: preberi občutljive informacije vseh računov + admin:read:reports: preberi občutljive informacije vseh prijav in prijavljenih računov + admin:write: spremeni vse podatke na strežniku + admin:write:accounts: izvedi moderirana dejanja na računih + admin:write:reports: izvedi moderirana dejanja na prijavah + follow: spremeni razmerja med računi + push: prejmi potisna obvestila + read: preberi vse podatke svojega računa + read:accounts: oglejte si podrobnosti računov + read:blocks: oglejte si svoje blokirane + read:favourites: oglejte si svoje priljubljene + read:filters: oglejte si svoje filtre + read:follows: oglejte si svoje sledilce + read:lists: oglejte si svoje sezname + read:mutes: oglejte si svoje utišane + read:notifications: oglejte si svoja obvestila + read:reports: oglejte si svoje prijave + read:search: iščite v svojem imenu + read:statuses: oglejte si vsa stanja + write: spremenite vse podatke svojega računa + write:accounts: spremenite svoj profil + write:blocks: blokirajte račune in domene + write:favourites: priljubljena stanja + write:filters: ustvari filtre + write:follows: sledi osebam + write:lists: ustvarite sezname + write:media: pošlji medije + write:mutes: utišaj osebe in pogovore + write:notifications: počisti svoja obvestila + write:reports: prijavi druge osebe + write:statuses: objavi stanja diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml index 4fd246eff..47b11b7fd 100644 --- a/config/locales/doorkeeper.sv.yml +++ b/config/locales/doorkeeper.sv.yml @@ -113,7 +113,35 @@ sv: application: title: OAuth-behörighet krävs scopes: + admin:read: läs all data på servern + admin:read:accounts: läs känslig information från alla konton + admin:read:reports: läs känslig information från alla rapporter och rapporterade konton + admin:write: ändra all data på servern + admin:write:accounts: utför alla aktiviteter för moderering på konton + admin:write:reports: utför alla aktiviteter för moderering i rapporter follow: följa, blockera, ta bort blockerade och sluta följa konton push: ta emot push aviseringar för ditt konto read: läsa dina kontodata + read:accounts: se kontoinformation + read:blocks: se dina block + read:favourites: se dina favoriter + read:filters: se dina filter + read:follows: se vem du följer + read:lists: se dina listor + read:mutes: se dina tystningar + read:notifications: se dina notifieringar + read:reports: se dina rapporter + read:search: sök å dina vägnar + read:statuses: se alla statusar write: posta åt dig + write:accounts: ändra din profil + write:blocks: blockera konton och domäner + write:favourites: favoritmarkera statusar + write:filters: skapa filter + write:follows: följ människor + write:lists: skapa listor + write:media: ladda upp mediafiler + write:mutes: tysta människor och konversationer + write:notifications: rensa dina notifieringar + write:reports: rapportera andra människor + write:statuses: publicera statusar diff --git a/config/locales/doorkeeper.ta.yml b/config/locales/doorkeeper.ta.yml index 4320953ce..879b6ab21 100644 --- a/config/locales/doorkeeper.ta.yml +++ b/config/locales/doorkeeper.ta.yml @@ -1 +1,27 @@ +--- ta: + doorkeeper: + applications: + buttons: + authorize: அனுமதியளி + cancel: தவிர் + destroy: அழி + edit: திருத்து + submit: சமர்ப்பி + confirmations: + destroy: உறுதியாகவா? + edit: + title: பயன்பாட்டைத் திருத்து + form: + error: அய்யோ! உள்ளீடுகளில் உள்ள தவறுகளைச் சரி செய்யுங்கள் + index: + application: பயன்பாடு + title: உங்களது பயன்பாடுகள் + new: + title: புதிய பயன்பாடு + authorized_applications: + confirmations: + revoke: உறுதியாகவா? + index: + application: பயன்பாடு + title: அனுமதியளிக்கப்பட்டுள்ள பயன்பாடுகள்/செயலிகள் diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index 4b7c9383e..2b4f08385 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -3,46 +3,125 @@ th: activerecord: attributes: doorkeeper/application: - name: ชื่อ - redirect_uri: เปลี่ยนเส้นทาง URI + name: ชื่อแอปพลิเคชัน + redirect_uri: URI การเปลี่ยนเส้นทาง + scopes: ขอบเขต + website: เว็บไซต์แอปพลิเคชัน errors: models: doorkeeper/application: attributes: redirect_uri: - invalid_uri: ต้องใช้ URI ที่ถูกต้อง. - relative_uri: ต้องเป็น absolute URI. - secured_uri: ต้องใช้ HTTPS/SSL URI. + fragment_present: ไม่สามารถมีส่วนย่อย + invalid_uri: ต้องเป็น URI ที่ถูกต้อง + relative_uri: ต้องเป็น URI แบบเต็ม + secured_uri: ต้องเป็น URI แบบ HTTPS/SSL doorkeeper: applications: buttons: + authorize: อนุญาต cancel: ยกเลิก destroy: ทำลาย edit: แก้ไข + submit: ส่ง confirmations: - destroy: แน่ใจนะ? + destroy: คุณแน่ใจหรือไม่? edit: - title: แก้ไข แอ๊ฟพลิเคชั่น + title: แก้ไขแอปพลิเคชัน help: - native_redirect_uri: ใช้ %{native_redirect_uri} สำหรับการทดสอบ - redirect_uri: ใช้บรรทัดละหนึ่ง URI + native_redirect_uri: ใช้ %{native_redirect_uri} สำหรับการทดสอบในเว็บ + redirect_uri: ใช้หนึ่งบรรทัดต่อ URI + scopes: แยกขอบเขตด้วยช่องว่าง เว้นว่างเพื่อใช้ขอบเขตเริ่มต้น index: + application: แอปพลิเคชัน + callback_url: URL เรียกกลับ + delete: ลบ name: ชื่อ - new: New Application + new: แอปพลิเคชันใหม่ + scopes: ขอบเขต + show: แสดง + title: แอปพลิเคชันของคุณ new: - title: New Application + title: แอปพลิเคชันใหม่ show: - application_id: Application Id - callback_urls: Callback urls - secret: Secret + actions: การกระทำ + application_id: กุญแจไคลเอ็นต์ + callback_urls: URL เรียกกลับ + scopes: ขอบเขต + secret: รหัสลับไคลเอ็นต์ + title: 'แอปพลิเคชัน: %{name}' authorizations: buttons: - authorize: อนุญาติ - deny: ไม่อนุญาติ + authorize: อนุญาต + deny: ปฏิเสธ + error: + title: เกิดข้อผิดพลาด + new: + able_to: แอปจะสามารถ + prompt: แอปพลิเคชัน %{client_name} ขอเข้าถึงบัญชีของคุณ + title: ต้องมีการอนุญาต + show: + title: คัดลอกรหัสการอนุญาตนี้แล้ววางลงในแอปพลิเคชัน authorized_applications: buttons: - revoke: ยกเลิกการอนุญาติ + revoke: เพิกถอน + confirmations: + revoke: คุณแน่ใจหรือไม่? + index: + application: แอปพลิเคชัน + created_at: อนุญาตเมื่อ + date_format: "%Y-%m-%d %H:%M:%S" + scopes: ขอบเขต + title: แอปพลิเคชันที่ได้รับอนุญาตของคุณ + errors: + messages: + access_denied: เจ้าของทรัพยากรหรือเซิร์ฟเวอร์การอนุญาตปฏิเสธคำขอ + invalid_token: + unknown: โทเคนการเข้าถึงไม่ถูกต้อง + flash: + applications: + create: + notice: สร้างแอปพลิเคชันแล้ว + destroy: + notice: ลบแอปพลิเคชันแล้ว + update: + notice: อัปเดตแอปพลิเคชันแล้ว + authorized_applications: + destroy: + notice: เพิกถอนแอปพลิเคชันแล้ว + layouts: + admin: + nav: + applications: แอปพลิเคชัน + oauth2_provider: ผู้ให้บริการ OAuth2 + application: + title: ต้องมีการอนุญาต OAuth scopes: - follow: follow, block, unblock and unfollow accounts - read: read your account's data - write: post on your behalf + admin:read: อ่านข้อมูลทั้งหมดในเซิร์ฟเวอร์ + admin:write: แก้ไขข้อมูลทั้งหมดในเซิร์ฟเวอร์ + follow: ปรับเปลี่ยนความสัมพันธ์ของบัญชี + push: รับการแจ้งเตือนแบบผลักของคุณ + read: อ่านข้อมูลบัญชีทั้งหมดของคุณ + read:accounts: ดูข้อมูลบัญชี + read:blocks: ดูการปิดกั้นของคุณ + read:favourites: ดูรายการโปรดของคุณ + read:filters: ดูตัวกรองของคุณ + read:follows: ดูการติดตามของคุณ + read:lists: ดูรายการของคุณ + read:mutes: ดูการปิดเสียงของคุณ + read:notifications: ดูการแจ้งเตือนของคุณ + read:reports: ดูรายงานของคุณ + read:search: ค้นหาในนามของคุณ + read:statuses: ดูสถานะทั้งหมด + write: ปรับเปลี่ยนข้อมูลบัญชีทั้งหมดของคุณ + write:accounts: ปรับเปลี่ยนโปรไฟล์ของคุณ + write:blocks: ปิดกั้นบัญชีและโดเมน + write:favourites: ชื่นชอบสถานะ + write:filters: สร้างตัวกรอง + write:follows: ติดตามผู้คน + write:lists: สร้างรายการ + write:media: อัปโหลดไฟล์สื่อ + write:mutes: ปิดเสียงผู้คนและการสนทนา + write:notifications: ล้างการแจ้งเตือนของคุณ + write:reports: รายงานผู้คนอื่น ๆ + write:statuses: เผยแพร่สถานะ diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml index 686a018e0..120689a3a 100644 --- a/config/locales/doorkeeper.tr.yml +++ b/config/locales/doorkeeper.tr.yml @@ -4,7 +4,18 @@ tr: attributes: doorkeeper/application: name: Uygulama adı + redirect_uri: Yönlendirme URI'si + scopes: Kapsamlar website: Uygulama web sitesi + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + fragment_present: parça içeremez. + invalid_uri: geçerli bir URI olmalıdır. + relative_uri: mutlak bir URI olmalıdır. + secured_uri: HTTPS/SSL URI olması gerekir. doorkeeper: applications: buttons: @@ -17,3 +28,121 @@ tr: destroy: Emin misiniz? edit: title: Uygulamayı düzenle + form: + error: Tüh! Muhtemel hatalar için formunuzu kontrol edin + help: + native_redirect_uri: Yerel testler için %{native_redirect_uri} kullanın + redirect_uri: URl başına bir satır kullanın + scopes: Kapsamları boşluklarla ayırın. Varsayılan kapsamları kullanmak için boş bırakın. + index: + application: Uygulama + callback_url: Geri Dönüş URL + delete: Sil + name: İsim + new: Yeni uygulama + scopes: Kapsam + show: Göster + title: Uygulamalarınız + new: + title: Yeni uygulama + show: + actions: Eylemler + application_id: İstemci anahtarı + callback_urls: Callback URL'si + scopes: Kapsamlar + secret: İstemci anahtarı + title: 'Uygulama: %{name}' + authorizations: + buttons: + authorize: Yetkilendir + deny: Reddet + error: + title: Bir hata oluştu + new: + able_to: Şunları yapabilecek + prompt: "%{client_name} uygulaması hesabınıza erişim istiyor" + title: Yetkilendirme gerekli + show: + title: Bu yetki kodunu kopyalayın ve uygulamaya yapıştırın. + authorized_applications: + buttons: + revoke: İptal + confirmations: + revoke: Emin misiniz? + index: + application: Uygulama + created_at: Yetkili + date_format: "%Y-%m-%d %H:%M:%S" + scopes: Kapsamlar + title: Yetkili uygulamalarınız + errors: + messages: + access_denied: Kaynak sahibi veya yetkilendirme sunucusu isteği reddetti. + credential_flow_not_configured: Kaynak Sahibi Şifresinin Bilgi akışı Doorkeeper.configure.resource_owner_from_credentials bilgilerinin yapılandırılmamış olması nedeniyle başarısız oldu. + invalid_client: İstemcinin kimlik doğrulaması bilinmeyen istemci, istemci kimlik doğrulamasının dahil olmaması veya desteklenmeyen kimlik doğrulama yöntemi nedeniyle başarısız oldu. + invalid_grant: Sağlanan yetkilendirme izni geçersiz, süresi dolmuş, iptal edilmiş, yetkilendirme isteğinde kullanılan yönlendirme URI'siyle eşleşmiyor veya başka bir müşteriye verilmiş. + invalid_redirect_uri: Dahil edilmiş yönlendirme Uri'si geçersiz. + invalid_request: İstekte gerekli bir parametre eksik, desteklenmeyen bir parametre değeri içeriyor veya başka türlü hatalı biçimlendirilmiş. + invalid_resource_owner: Sağlanan kaynak sahibi kimlik bilgileri geçerli değil veya kaynak sahibi bulunamıyor + invalid_scope: İstenen kapsam geçersiz, bilinmeyen veya hatalı biçimlendirilmiş olabilir. + invalid_token: + expired: Erişim belirtecinin süresi dolmuş + revoked: Erişim belirteci iptal edildi + unknown: Erişim belirteci geçersiz + resource_owner_authenticator_not_configured: Kaynak Sahibi yapılandırılmamış Doorkeeper.configure.resource_owner_authenticator nedeniyle başarısız oldu. + server_error: Yetkilendirme sunucusu, isteği yerine getirmesini engelleyen beklenmeyen bir koşulla karşılaştı. + temporarily_unavailable: Yetkilendirme sunucusu şu anda sunucunun geçici bir aşırı yüklenmesi veya bakımı nedeniyle isteği yerine getiremiyor. + unauthorized_client: İstemci bu yöntemi kullanarak bu isteği gerçekleştirmek için yetkili değil. + unsupported_grant_type: Yetkilendirme izni türü, yetkilendirme sunucusu tarafından desteklenmiyor. + unsupported_response_type: Yetkilendirme sunucusu bu yanıt türünü desteklemiyor. + flash: + applications: + create: + notice: Uygulama oluşturuldu. + destroy: + notice: Uygulama silindi. + update: + notice: Uygulama güncellendi. + authorized_applications: + destroy: + notice: Uygulama iptal edildi. + layouts: + admin: + nav: + applications: Uygulamalar + oauth2_provider: OAuth2 Sağlayıcısı + application: + title: OAuth yetkilendirme gerekli + scopes: + admin:read: sunucudaki tüm verileri oku + admin:read:accounts: tüm hesapların hassas bilgilerini oku + admin:read:reports: tüm raporların ve raporlanan hesapların hassas bilgilerini oku + admin:write: sunucudaki tüm verileri değiştirin + admin:write:accounts: hesaplar üzerinde denetleme eylemleri gerçekleştirin + admin:write:reports: raporlar üzerinde denetleme eylemleri gerçekleştirin + follow: hesap ilişkilerini değiştirin + push: anlık bildirimlerizi alın + read: hesabınızın tüm verilerini okuyun + read:accounts: hesap bilgilerini gör + read:blocks: engellemelerinizi görün + read:favourites: favorilerini gör + read:filters: filtrelerinizi görün + read:follows: izlerini gör + read:lists: listelerinizi görün + read:mutes: sessize aldıklarınızı görün + read:notifications: bildirimlerinizi görün + read:reports: şikayetlerinizi görün + read:search: kendi adınıza arayın + read:statuses: tüm durumları görün + write: hesabınızın tüm verilerini değiştirin + write:accounts: profilini değiştir + write:blocks: hesapları ve alan adlarını engelleyin + write:favourites: favori durumlar + write:filters: filtre oluştur + write:follows: insanları takip et + write:lists: liste oluştur + write:media: medya dosyalarını yükle + write:mutes: insanları ve konuşmaları sustur + write:notifications: bildirimlerinizi temizleyin + write:reports: diğer insanları bildir + write:statuses: durumları yayınlayın diff --git a/config/locales/doorkeeper.uk.yml b/config/locales/doorkeeper.uk.yml index 305a5c1d6..274784b58 100644 --- a/config/locales/doorkeeper.uk.yml +++ b/config/locales/doorkeeper.uk.yml @@ -3,7 +3,7 @@ uk: activerecord: attributes: doorkeeper/application: - name: Ім'я + name: Назва додатку redirect_uri: URI перенаправлення scopes: Рамки website: Веб-сайт додатку @@ -13,9 +13,9 @@ uk: attributes: redirect_uri: fragment_present: не може містити фрагмент. - invalid_uri: повинен бути дійсним URI. - relative_uri: повинен бути абсолютним URI. - secured_uri: повинен бути HTTPS/SSL URI. + invalid_uri: має бути дійсним URI. + relative_uri: має бути абсолютним URI. + secured_uri: має бути URI HTTPS/SSL. doorkeeper: applications: buttons: @@ -35,9 +35,13 @@ uk: redirect_uri: Використовуйте одну стрічку на URI scopes: Відділяйте області видимості пробілами. Залишайте порожніми, щоб використовувати області видимості за промовчуванням. index: + application: Додаток callback_url: URL зворотнього виклику + delete: Видалити name: Назва new: Новий додаток + scopes: Області видимості + show: Показати title: Ваші додатки new: title: Новий додаток @@ -56,8 +60,10 @@ uk: title: Сталася помилка new: able_to: Він зможе - prompt: Податок %{client_name} просить доступу до вашого акаунту + prompt: Додаток %{client_name} запитує доступ до вашого облікового запису title: Необхідна авторизація + show: + title: Скопіюйте цей код авторизації та вставте його у додаток. authorized_applications: buttons: revoke: Відкликати авторизацію @@ -78,7 +84,7 @@ uk: invalid_redirect_uri: Включений URI перенаправлення не є дійсним. invalid_request: У запиті відсутній обов'язковий параметр, міститься непідтримуване значення параметра, або він сформований неправильно. invalid_resource_owner: Надані дані власника ресурсу не є дійсними, або власника ресурсу неможливо знайти - invalid_scope: Запитуваний дозвыд недійсний, невідомий, або неправильно сформований. + invalid_scope: Запитуваний дозвіл недійсний, невідомий, або неправильно сформований. invalid_token: expired: Токен доступу прострочено revoked: Токен доступу було відкликано @@ -108,6 +114,35 @@ uk: application: title: Необхідна авторизація OAuth scopes: - follow: підписуватися, відписуватися, блокувати та розблоковувати акаунти - read: Читати дані Вашого акаунта - write: Публікувати від Вашого імені + admin:read: читати всі дані на сервері + admin:read:accounts: читати конфіденційну інформацію усіх акаунтів + admin:read:reports: читати дражливу інформацію усіх скарг та облікових записів зі скаргами + admin:write: модифікувати всі дані на сервері + admin:write:accounts: модерувати облікові записи + admin:write:reports: модерувати скарги + follow: змінювати стосунки облікового запису + push: отримувати Ваші Push-повідомлення + read: читати усі дані вашого облікового запису + read:accounts: бачити інформацію про облікові записи + read:blocks: бачити Ваші блокування + read:favourites: бачити Ваші вподобані пости + read:filters: бачити Ваші фільтри + read:follows: бачити Ваші підписки + read:lists: бачити Ваші списки + read:mutes: бачити ваші заглушення + read:notifications: бачити Ваші сповіщення + read:reports: бачити Ваші скарги + read:search: шукати від вашого імені + read:statuses: бачити всі статуси + write: змінювати усі дані вашого облікового запису + write:accounts: змінювати ваш профіль + write:blocks: блокувати облікові записи і домени + write:favourites: вподобані статуси + write:filters: створювати фільтри + write:follows: підписуйтесь на людей + write:lists: створювайте списки + write:media: завантажити медіафайли + write:mutes: заглушити людей або бесіди + write:notifications: очищувати Ваші сповіщення + write:reports: надіслати скаргу про людей + write:statuses: публікувати статуси diff --git a/config/locales/doorkeeper.ur.yml b/config/locales/doorkeeper.ur.yml new file mode 100644 index 000000000..2cace5883 --- /dev/null +++ b/config/locales/doorkeeper.ur.yml @@ -0,0 +1 @@ +ur: diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml index 1cce6adc2..0d3c6d57e 100644 --- a/config/locales/doorkeeper.zh-CN.yml +++ b/config/locales/doorkeeper.zh-CN.yml @@ -72,6 +72,7 @@ zh-CN: index: application: 应用 created_at: 授权时间 + date_format: "%H:%M:%S" scopes: 权限范围 title: 已授权的应用列表 errors: @@ -113,12 +114,18 @@ zh-CN: application: title: 需要 OAuth 认证 scopes: + admin:read: 读取服务器上的所有数据 + admin:read:accounts: 读取所有账户的敏感信息 + admin:read:reports: 读取所有举报和被举报账户的敏感信息 + admin:write: 修改服务器上的所有数据 + admin:write:accounts: 对账户执行管理操作 + admin:write:reports: 对举报执行管理操作 follow: 关注或屏蔽用户 push: 接收你的帐户的推送通知 read: 读取你的帐户数据 read:accounts: 查看账户信息 read:blocks: 查看你的屏蔽列表 - read:favourites: 查看你的收藏 + read:favourites: 查看喜欢的嘟文 read:filters: 查看你的过滤器 read:follows: 查看你的关注 read:lists: 查看你的列表 @@ -130,7 +137,7 @@ zh-CN: write: 修改你的账户数据 write:accounts: 修改你的个人资料 write:blocks: 屏蔽账户和域名 - write:favourites: 收藏嘟文 + write:favourites: 喜欢的嘟文 write:filters: 创建过滤器 write:follows: 关注其他人 write:lists: 创建列表 diff --git a/config/locales/doorkeeper.zh-TW.yml b/config/locales/doorkeeper.zh-TW.yml index 41dd17264..0b2624aa9 100644 --- a/config/locales/doorkeeper.zh-TW.yml +++ b/config/locales/doorkeeper.zh-TW.yml @@ -3,9 +3,9 @@ zh-TW: activerecord: attributes: doorkeeper/application: - name: 名稱 + name: 應用程式名稱 redirect_uri: 重新導向 URI - scopes: 權限範圍 + scopes: 範圍 website: 應用程式網頁 errors: models: @@ -13,9 +13,9 @@ zh-TW: attributes: redirect_uri: fragment_present: 不能包含 fragment。 - invalid_uri: 必需有正確的 URI. - relative_uri: 必需為絕對 URI. - secured_uri: 必需使用有 HTTPS/SSL 加密的 URI. + invalid_uri: 必須是正確的 URI。 + relative_uri: 必須為絕對 URI。 + secured_uri: 必須是 HTTPS/SSL URI。 doorkeeper: applications: buttons: @@ -29,29 +29,29 @@ zh-TW: edit: title: 編輯應用程式 form: - error: 唉呦!請檢查表單錯誤訊息 + error: 唉呦!請看看表單以排查錯誤 help: - native_redirect_uri: 請使用 %{native_redirect_uri} 作測試 + native_redirect_uri: 請使用 %{native_redirect_uri} 作本機測試 redirect_uri: 每行輸入一個 URI - scopes: 請用半形空格分開權限範圍 (scope)。留空表示使用預設的權限範圍。 + scopes: 請用半形空格分開範圍。空白表示使用預設的範圍。 index: application: 應用程式 callback_url: 回傳網址 delete: 刪除 name: 名稱 new: 新增應用程式 - scopes: 權限範圍 + scopes: 範圍 show: 顯示 title: 你的應用程式 new: title: 新增應用程式 show: actions: 動作 - application_id: 應用程式 ID + application_id: 客戶端金鑰 callback_urls: 回傳網址 - scopes: 權限範圍 - secret: 密碼 - title: 應用程式︰ %{name} + scopes: 範圍 + secret: 客戶端密碼 + title: 應用程式︰%{name} authorizations: buttons: authorize: 授權 @@ -59,61 +59,90 @@ zh-TW: error: title: 發生錯誤 new: - able_to: 要求取得權限 - prompt: 應用程式 %{client_name} 要求取得您帳號的部份權限 + able_to: 這將允許其作: + prompt: 應用程式 %{client_name} 要求取得您帳號的存取權限 title: 需要授權 show: title: 複製此授權碼並貼上到應用程式中。 authorized_applications: buttons: - revoke: 撤銷授權 + revoke: 撤銷 confirmations: - revoke: 您確定要撤銷這個授權? + revoke: 確定撤銷? index: application: 應用程式 - created_at: 授權時間 - scopes: 權限範圍 + created_at: 授權於 + date_format: "%Y-%m-%d %H:%M:%S" + scopes: 範圍 title: 已授權的應用程式 errors: messages: - access_denied: 資源擁有者或認證伺服器不接受請求。 - credential_flow_not_configured: 資源擁有者密碼認證程序失敗,由於 Doorkeeper.configure.resource_owner_from_credentials 沒有設定。 - invalid_client: 客戶端驗證失敗,可能是未知的客戶端程式、未包含客戶端驗證、或使用了不支援的認證方法。 + access_denied: 資源持有者或授權伺服器拒絕請求。 + credential_flow_not_configured: 因為 Doorkeeper.configure.resource_owner_from_credentials 未設定,所以資源持有者密碼認證程序失敗。 + invalid_client: 客戶端驗證失敗,可能是因為未知的客戶端程式、未包含客戶端驗證、或使用了不支援的認證方法。 invalid_grant: 授權申請不正確、逾期、已被取消、與授權請求內的重新導向 URI 不符、或屬於別的客戶端程式。 - invalid_redirect_uri: 不正確的重新導向網址。 - invalid_request: 請求缺少必要的參數、包含不支援的參數、或其他輸入錯誤。 - invalid_resource_owner: 資源擁有者的登入資訊錯誤、或無法找到該資源擁有者 - invalid_scope: 請求的權限範圍無效、未定義、或輸入錯誤。 + invalid_redirect_uri: 包含的重新導向 URI 是不正確的。 + invalid_request: 請求缺少必要的參數、有不支援的參數、或其他格式錯誤。 + invalid_resource_owner: 資源擁有者的登入資訊錯誤,或無法找到該資源擁有者 + invalid_scope: 請求的範圍錯誤、未定義、或格式錯誤。 invalid_token: - expired: access token 已過期 - revoked: access token 已被取消 - unknown: access token 不正確 - resource_owner_authenticator_not_configured: 無法找到資源擁有者,由於 Doorkeeper.configure.resource_owner_authenticator 沒有設定。 + expired: 存取憑證已過期 + revoked: 存取憑證已撤銷 + unknown: 存取憑證不正確 + resource_owner_authenticator_not_configured: 因為未設定 Doorkeeper.configure.resource_owner_authenticator,所以資源持有者尋找失敗。 server_error: 認證伺服器發生未知錯誤。 temporarily_unavailable: 認證伺服器暫時無法使用。 - unauthorized_client: 客戶端程式無權使用此方法進行請求。 + unauthorized_client: 客戶端程式沒有權限使用此方法請求。 unsupported_grant_type: 認證伺服器不支援這個授權類型。 unsupported_response_type: 認證伺服器不支援這個回應類型。 flash: applications: create: - notice: 已新增應用程式。 + notice: 已建立應用程式。 destroy: notice: 已刪除應用程式。 update: notice: 已更新應用程式。 authorized_applications: destroy: - notice: 已撤銷應用程式授權。 + notice: 已撤銷應用程式。 layouts: admin: nav: applications: 應用程式 - oauth2_provider: OAuth2 供應者 + oauth2_provider: OAuth2 提供者 application: title: 需要 OAuth 授權 scopes: - follow: 關注、封鎖、解除封鎖及取消關注帳號 - push: 接收你帳號的推送通知 - read: 讀取您的帳號資料 - write: 以您的名義發佈嘟文 + admin:read: 讀取伺服器的所有資料 + admin:read:accounts: 讀取所有帳戶的敏感資訊 + admin:read:reports: 讀取所有回報 / 被回報之帳戶的敏感資訊 + admin:write: 修改伺服器的所有資料 + admin:write:accounts: 對帳戶進行仲裁管理動作 + admin:write:reports: 對報告進行仲裁管理動作 + follow: 修改帳戶關係 + push: 接收帳號的推送通知 + read: 讀取您所有的帳號資料 + read:accounts: 檢視帳戶資訊 + read:blocks: 檢視您的封鎖名單 + read:favourites: 檢視您的收藏項目 + read:filters: 檢視您的過濾條件 + read:follows: 檢視您關注的人 + read:lists: 檢視您的名單 + read:mutes: 檢視您靜音的人 + read:notifications: 檢視您的通知 + read:reports: 檢視您的檢舉 + read:search: 以你的身份搜尋 + read:statuses: 檢視所有嘟文 + write: 修改您帳號的所有資料 + write:accounts: 修改您的個人檔案 + write:blocks: 封鎖帳戶及站台 + write:favourites: 收藏嘟文 + write:filters: 建立過濾條件 + write:follows: 關注其他人 + write:lists: 建立名單 + write:media: 上傳媒體檔案 + write:mutes: 靜音使用者及對話 + write:notifications: 清除您的通知 + write:reports: 檢舉其他人 + write:statuses: 發布嘟文 diff --git a/config/locales/el.yml b/config/locales/el.yml index a08ec7141..9f4a8969d 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -10,20 +10,20 @@ el: api: API apps: Εφαρμογές κινητών apps_platforms: Χρησιμοποίησε το Mastodon από το iOS, το Android και αλλού - browse_directory: Ξεφύλλισε ένα κατάλογο χρηστών και φίλτραρε ανά ενδιαφέροντα - browse_public_posts: Κοίταξε μια ζωντανή ροή δημοσιεύσεων στο Mastodon + browse_directory: Ξεφύλλισε τον κατάλογο χρηστών και ψάξε ανά ενδιαφέροντα + browse_local_posts: Ξεφύλλισε τη ζωντανή ροή αυτού του διακομιστή + browse_public_posts: Ξεφύλλισε τη ζωντανή ροή του Mastodon contact: Επικοινωνία contact_missing: Δεν έχει οριστεί contact_unavailable: Μ/Δ discover_users: Ανακάλυψε χρήστες documentation: Τεκμηρίωση - extended_description_html: | - <h3>Ένα καλό σημείο για κανόνες</h3> - <p>Η αναλυτική περιγραφή δεν έχει ακόμα οριστεί</p> federation_hint_html: Με ένα λογαριασμό στο %{instance} θα μπορείς να ακολουθείς ανθρώπους σε οποιοδήποτε κόμβο στο Mastodon αλλά και αλλού. - generic_description: "%{domain} είναι ένας εξυπηρετητής στο δίκτυο" get_apps: Δοκίμασε μια εφαρμογή κινητού hosted_on: Το Mastodon φιλοξενείται στο %{domain} + instance_actor_flash: | + Αυτός ο λογαριασμός είναι εικονικός και απεικονίζει τον κόμβο, όχι κάποιο συγκεκριμένο χρήστη. + Χρησιμεύει στη λειτουργία της ομοσπονδίας και δε θα πρέπει να αποκλειστεί, εκτός κι αν είναι επιθυμητός ο αποκλεισμός ολόκληρου του κόμβου. Σε αυτή την περίπτωση θα πρέπει να χρησιμοποιηθεί η λειτουργία αποκλεισμού τομέα. learn_more: Μάθε περισσότερα privacy_policy: Πολιτική απορρήτου see_whats_happening: Μάθε τι συμβαίνει @@ -35,6 +35,14 @@ el: status_count_before: Που έγραψαν tagline: Ακολούθησε τους γνωστούς σου και ανακάλυψε νέους ανθρώπους terms: Όροι χρήσης + unavailable_content: Μη διαθέσιμο + unavailable_content_description: + domain: Διακομιστής + reason: 'Αιτία:' + rejecting_media: 'Τα αρχεία πολυμέσων αυτών των διακομιστών δεν θα επεξεργάζονται, δεν θα αποθηκεύονται και δεν θα εμφανίζεται η προεπισκόπησή τους, απαιτώντας χειροκίνητη επιλογή μέχρι το αρχικό αρχείο:' + silenced: 'Οι δημοσιεύσεις αυτών των διακομιστών θα είναι κρυμμένες από τις δημόσιες ροές και συζητήσεις, ενώ δεν θα δημιουργούνται ειδοποιήσεις για τις ενέργειες των χρηστών τους, εκτός κι αν τους ακολουθείς:' + suspended: 'Κανένα δεδομένο δε θα επεξεργάζεται, δε θα αποθηκεύεται και δε θα ανταλλάσσεται για αυτούς τους διακομιστές, καθιστώντας οποιαδήποτε αλληλεπίδραση ή επικοινωνία με χρήστες από αυτούς τους διακομιστές αδύνατη:' + unavailable_content_html: Το Mastodon γενικά επιτρέπει να δεις περιεχόμενο και να αλληλεπιδράσεις με χρήστες από οποιονδήποτε διακομιστή στο fediverse. Εδώ είναι οι εξαιρέσεις που ισχύουν σε αυτόν τον συγκεκριμένο διακομιστή. user_count_after: one: χρήστης other: χρήστες @@ -42,6 +50,8 @@ el: what_is_mastodon: Τι είναι το Mastodon; accounts: choices_html: 'Επιλογές από %{name}:' + endorsements_hint: Μπορεις να εγκρίνεις ανθρώπους που ακολουθείς μέσω της δικτυακής εφαρμογής και αυτοί θα εμφανίζονται εδώ. + featured_tags_hint: Μπορείς να επιλέξεις συγκεκριμένες ταμπέλες που θα εμφανίζονται εδώ. follow: Ακολούθησε followers: one: Ακόλουθος @@ -53,6 +63,7 @@ el: media: Πολυμέσα moved_html: 'Ο/Η %{name} μετακόμισε στο %{new_profile_link}:' network_hidden: Αυτή η πληροφορία δεν είναι διαθέσιμη + never_active: Ποτέ nothing_here: Δεν υπάρχει τίποτα εδώ! people_followed_by: Χρήστες που ακολουθεί ο/η %{name} people_who_follow: Χρήστες που ακολουθούν τον/την %{name} @@ -165,6 +176,7 @@ el: user: Χρήστης salmon_url: URL Salmon search: Αναζήτηση + search_same_ip: Υπόλοιποι χρήστες με την ίδια διεύθυνση IP shared_inbox_url: URL κοινόχρηστων εισερχομένων show: created_reports: Αναφορές από αυτόν το λογαριασμό @@ -183,6 +195,7 @@ el: username: Όνομα χρήστη warn: Προειδοποίηση web: Διαδίκτυο + whitelisted: Εγκεκριμένοι action_logs: actions: assigned_to_self_report: Ο/Η %{name} ανάθεσε την καταγγελία %{target} στον εαυτό του/της @@ -190,10 +203,12 @@ el: confirm_user: Ο/Η %{name} επιβεβαίωσε τη διεύθυνση email του χρήστη %{target} create_account_warning: Ο/Η %{name} έστειλε προειδοποίηση προς %{target} create_custom_emoji: Ο/Η %{name} ανέβασε νέο emoji %{target} + create_domain_allow: Ο/Η %{name} έβαλε τον τομέα %{target} σε λευκή λίστα create_domain_block: Ο/Η %{name} μπλόκαρε τον τομέα %{target} create_email_domain_block: Ο/Η %{name} έβαλε τον τομέα email %{target} σε μαύρη λίστα demote_user: Ο/Η %{name} υποβίβασε το χρήστη %{target} destroy_custom_emoji: Ο/Η %{name} κατέστρεψε το emoji %{target} + destroy_domain_allow: Ο/Η %{name} αφαίρεσε τον τομέα %{target} από λίστα εγκρίσεων destroy_domain_block: Ο/Η %{name} ξεμπλόκαρε τον τομέα %{target} destroy_email_domain_block: Ο/Η %{name} έβαλε τον τομέα email %{target} σε λευκή λίστα destroy_status: Ο/Η %{name} αφαίρεσε την κατάσταση του/της %{target} @@ -218,19 +233,24 @@ el: deleted_status: "(διαγραμμένη δημοσίευση)" title: Αρχείο ελέγχου custom_emojis: + assign_category: Κατηγορία by_domain: Τομέας copied_msg: Επιτυχής δημιουργία τοπικού αντίγραφου του emoji copy: Αντιγραφή copy_failed_msg: Αδυναμία δημιουργίας τοπικού αντίγραφου αυτού του emoji + create_new_category: Νέα κατηγορία created_msg: Επιτυχής δημιουργία του emoji! delete: Διαγραφή destroyed_msg: Επιτυχής καταστροφή του emojo! disable: Απενεργοποίηση + disabled: Απενεργοποιημένα disabled_msg: Επιτυχής απενεργοποίηση αυτού του emoji emoji: Emoji enable: Ενεργοποίηση + enabled: Ενεργοποιημένα enabled_msg: Επιτυχής ενεργοποίηση αυτού του emoji image_hint: PNG έως 50KB + list: Εμφάνιση listed: Αναφερθέντα new: title: Προσθήκη νέου προσαρμοσμένου emoji @@ -238,11 +258,14 @@ el: shortcode: Σύντομος κωδικός shortcode_hint: Τουλάχιστον 2 χαρακτήρες, μόνο αλφαριθμητικοί και κάτω παύλες title: Προσαρμοσμένα emoji + uncategorized: Χωρίς κατηγορία + unlist: Απόκρυψη unlisted: Μη καταχωρημένα update_failed_msg: Αδυναμία ενημέρωσης του emoji updated_msg: Επιτυχής ενημέρωση του emoji! upload: Ανέβασμα dashboard: + authorized_fetch_mode: Λειτουργία εγκεκριμένης ανάκτησης backlog: χρονοκαθυστερημένες εργασίες config: Διαμόρφωση feature_deletions: Διαγραφή λογαριασμών @@ -250,10 +273,13 @@ el: feature_profile_directory: Κατάλογος χρηστών feature_registrations: Εγγραφές feature_relay: Ανταποκριτής ομοσπονδίας + feature_spam_check: Καταπολέμηση ανεπιθύμητης επικοινωνίας feature_timeline_preview: Προεπισκόπιση ροής features: Λειτουργίες hidden_service: Ομοσπονδία με κρυμμένες υπηρεσίες open_reports: ανοιχτές καταγγελίες + pending_tags: ταμπέλες προς έγκριση + pending_users: χρήστες προς έγκριση recent_users: Πρόσφατοι χρήστες search: Αναζήτηση πλήρους κειμένου single_user_mode: Λειτουργία μοναδιαίου χρήστη @@ -265,11 +291,18 @@ el: week_interactions: αλληλεπιδράσεις αυτή την εβδομάδα week_users_active: ενεργοί αυτή την εβδομάδα week_users_new: χρήστες αυτή την εβδομάδα + whitelist_mode: Λειτουργία εγκρίσεων + domain_allows: + add_new: Έγκριση τομέα + created_msg: Ο τομέας εγκρίθηκε με επιτυχία + destroyed_msg: Ο τομέας δεν είναι πια εγκεκριμένος + undo: Αφαίρεση έγκρισης domain_blocks: add_new: Προσθήκη νέου created_msg: Ο αποκλεισμός τομέα είναι υπό επεξεργασία destroyed_msg: Ο αποκλεισμός τομέα άρθηκε domain: Τομέας + edit: Διαχείρηση αποκλεισμένου τομέα existing_domain_block_html: Έχεις ήδη επιβάλλει αυστηρότερους περιορισμούς στο %{name}, πρώτα θα πρέπει να τους <a href="%{unblock_url}">αναιρέσεις</a>. new: create: Δημιουργία αποκλεισμού @@ -280,6 +313,10 @@ el: silence: Σίγαση suspend: Αναστολή title: Αποκλεισμός νέου τομέα + private_comment: Ιδιωτικό σχόλιο + private_comment_hint: Σχόλιο για τον περιορισμό αυτού του τομέα για εσωτερική χρήση από τους διαχειριστές. + public_comment: Δημόσιο σχόλιο + public_comment_hint: Σχόλιο σχετικά με τον περιορισμό αυτού του τομέα προς το κοινό, αν η λειτουργία δημοσιοποίησης των περιορισμένων τομέων είναι ενεργοποιημένη. reject_media: Απόρριψη πολυμέσων reject_media_hint: Αφαιρεί τα τοπικά αποθηκευμένα αρχεία πολυμέσων και αποτρέπει τη λήψη άλλων στο μέλλον. Δεν έχει σημασία για τις αναστολές reject_reports: Απόρριψη καταγγελιών @@ -299,6 +336,7 @@ el: title: Αναίρεση αποκλεισμού για τον τομέα %{domain} undo: Αναίρεση undo: Αναίρεση + view: Εμφάνιση αποκλεισμού τομέα email_domain_blocks: add_new: Πρόσθεση νέου created_msg: Επιτυχής πρόσθεση email τομέα σε μαύρη λίστα @@ -322,6 +360,8 @@ el: all: Όλα limited: Περιορισμένα title: Διαμεσολάβηση + private_comment: Ιδιωτικό σχόλιο + public_comment: Δημόσιο σχόλιο title: Γνωστοί κόμβοι total_blocked_by_us: Μπλοκάρονται από εμάς total_followed_by_them: Ακολουθούνται από εκείνους @@ -351,6 +391,7 @@ el: pending: Περιμένοντας την έγκριση του ανταποκριτή save_and_enable: Αποθήκευση και ενεργοποίηση setup: Όρισε μια σύνδεση ανταπόκρισης + signatures_not_enabled: Οι ανταποκριτές δεν θα λειτουργούν σωστά όσο είναι ενεργοποιημένες οι επιλογές ασφαλούς λειτουργίας ή επιτρεπόμενων συνδέσεων status: Κατάσταση title: Ανταποκριτές report_notes: @@ -399,6 +440,16 @@ el: custom_css: desc_html: Τροποποίηση της εμφάνισης μέσω CSS που φορτώνεται σε κάθε σελίδα title: Προσαρμοσμένο CSS + default_noindex: + desc_html: Επηρεάζει όσους χρήστες δεν έχουν αλλάξει αυτή τη ρύθμιση + title: Εξαίρεση χρηστών από τις μηχανές αναζήτησης + domain_blocks: + all: Για όλους + disabled: Για κανέναν + title: Εμφάνιση αποκλεισμένων τομέων + users: Προς συνδεδεμένους τοπικούς χρήστες + domain_blocks_rationale: + title: Εμφάνιση σκεπτικού hero: desc_html: Εμφανίζεται στην μπροστινή σελίδα. Συνίσταται τουλάχιστον 600x100px. Όταν λείπει, χρησιμοποιείται η μικρογραφία του κόμβου title: Εικόνα ήρωα @@ -449,6 +500,9 @@ el: desc_html: Μπορείς να γράψεις τη δική σου πολιτική απορρήτου, όρους χρήσης ή άλλους νομικούς όρους. Μπορείς να χρησιμοποιήσεις HTML tags title: Προσαρμοσμένοι όροι χρήσης της υπηρεσίας site_title: Όνομα κόμβου + spam_check_enabled: + desc_html: Το Mastodon μπορεί να αποσιωπεί και να καταγγέλει αυτόματα λογαριασμούς βάσει της συμπεριφοράς τους όπως για παράδειγμα επαναλαμβανόμενη αποστολή ανεπιθύμητων μηνυμάτων. Μπορεί να υπάρξουν και λανθασμένες ανιχνεύσεις. + title: Καταπολέμηση ανεπιθύμητης επικοινωνίας thumbnail: desc_html: Χρησιμοποιείται για προεπισκοπήσεις μέσω του OpenGraph και του API. Συστήνεται 1200x630px title: Μικρογραφία κόμβου @@ -456,12 +510,19 @@ el: desc_html: Εμφάνισε τη δημόσια ροή στην αρχική σελίδα title: Προεπισκόπιση ροής title: Ρυθμίσεις ιστότοπου + trendable_by_default: + desc_html: Επηρεάζει τις ταμπέλες που δεν είχαν απαγορευτεί νωρίτερα + title: Επέτρεψε στις ταμπέλες να εμφανιστούν στις τάσεις χωρίς προηγούμενη έγκριση + trends: + desc_html: Δημόσια εμφάνιση ταμπελών που έχουν ήδη εγκριθεί και είναι δημοφιλείς + title: Δημοφιλείς ταμπέλες statuses: back_to_account: Επιστροφή στη σελίδα λογαριασμού batch: delete: Διαγραφή nsfw_off: Σημείωσε ως μη ευαίσθητο nsfw_on: Σημείωσε ως ευαίσθητο + deleted: Διαγραμμένα failed_to_execute: Αποτυχία εκτέλεσης media: title: Πολυμέσα @@ -469,21 +530,24 @@ el: no_status_selected: Καμία δημοσίευση δεν άλλαξε αφού καμία δεν ήταν επιλεγμένη title: Καταστάσεις λογαριασμού with_media: Με πολυμέσα - subscriptions: - callback_url: URL επιστροφής (Callback) - confirmed: Επιβεβαιωμένες - expires_in: Λήγει σε - last_delivery: Τελευταία παράδοση - title: Πρωτόκολλο WebSub - topic: Θέμα tags: - accounts: Λογαριασμοί - hidden: Κρυμμένες - hide: Απόκρυψη από κατάλογο + accounts_today: Μοναδικές χρήσεις ημέρας + accounts_week: Μοναδικές χρήσεις εβδομάδας + breakdown: Ανάλυση σημερινής χρήσης ανα πηγή + context: Συνάφεια + directory: Στον κατάλογο + in_directory: "%{count} στον κατάλογο" + last_active: Τελευταία δραστηριότητα + most_popular: Δημοφιλέστερες + most_recent: Πιο πρόσφατες name: Ταμπέλα + review: Κατάσταση έγκρισης + reviewed: Εγκεκριμένες title: Ταμπέλες - unhide: Εμφάνιση σε κατάλογο - visible: Εμφανείς + trending_right_now: Δημοφιλείς αυτή τη στιγμή + unique_uses_today: "%{count} σημερινές δημοσιεύσεις" + unreviewed: Εκκρεμεί έγκριση + updated_msg: Οι ρυθμίσεις των ταμπελών ενημερώθηκαν επιτυχώς title: Διαχείριση warning_presets: add_new: Πρόσθεση νέου @@ -499,12 +563,23 @@ el: body: Ο/Η %{reporter} κατήγγειλε τον/την %{target} body_remote: Κάποιος/α από τον τομέα %{domain} κατήγγειλε τον/την %{target} subject: Νέα καταγγελία για %{instance} (#%{id}) + new_trending_tag: + body: 'Η ταμπέλα #%{name} είναι δημοφιλής σήμερα, αλλά δεν έχει εγκριθεί μέχρι τώρα. Δεν θα εμφανίζεται δημοσίως μέχρι να δοθεί έγκρισή, αλλιώς αποθηκεύστε τη φόρμα ως έχει για να μην την δείτε ξανά.' + subject: Νέα ταμπέλα προς έγκριση στο %{instance} (#%{name}) + aliases: + add_new: Δημιουργία ψευδώνυμου + created_msg: Δημιουργήθηκε νέο ψευδώνυμο. Τώρα μπορείς να ξεκινήσεις τη μεταφορά από τον παλιό λογαριασμό. + deleted_msg: Αφαιρέθηκε το ψευδώνυμο. Η μεταφορά από εκείνον τον λογαριασμό σε αυτόν εδώ δε θα είναι πλέον δυνατή. + hint_html: Αν θέλεις να μετακομίσεις από έναν άλλο λογαριασμό σε αυτόν εδώ, μπορείς εδώ να δημιουργήσεις ένα ψευδώνυμο, πράγμα που απαιτείται πριν προχωρήσεις για να μεταφέρεις τους ακολούθους σου από τον παλιό λογαριασμό σε αυτόν εδώ. Η ενέργεια αυτή είναι <strong>ακίνδυνη και αναστρέψιμη</strong>.<strong>Η μετακόμιση του λογαριασμού ξεκινάει από τον παλιό λογαριασμό</strong>. + remove: Αφαίρεση ψευδώνυμου appearance: advanced_web_interface: Προηγμένη λειτουργία χρήσης advanced_web_interface_hint: 'Αν θέλεις να χρησιμοποιήσεις ολόκληρο το πλάτος της οθόνης σου, η προηγμένη λειτουργία χρήσης σου επιτρέπει να ορίσεις πολλαπλές κολώνες ώστε να βλέπεις ταυτόχρονα όση πληροφορία θέλεις: Την αρχική ροή, τις ειδοποιήσεις, την ομοσπονδιακή ροή και όσες λίστες και ταμπέλες θέλεις.' animations_and_accessibility: Κίνηση και προσβασιμότητα confirmation_dialogs: Ερωτήσεις επιβεβαίωσης + discovery: Εξερεύνηση sensitive_content: Ευαίσθητο περιεχόμενο + toot_layout: Διαρρύθμιση τουτ application_mailer: notification_preferences: Αλλαγή προτιμήσεων email salutation: "%{name}," @@ -524,9 +599,13 @@ el: apply_for_account: Αίτηση πρόσκλησης change_password: Συνθηματικό checkbox_agreement_html: Συμφωνώ με τους <a href="%{rules_path}" target="_blank">κανονισμούς του κόμβου</a> και <a href="%{terms_path}" target="_blank">τους όρους χρήσης</a> - confirm_email: Επιβεβαίωση email + checkbox_agreement_without_rules_html: Συμφωνώ με τους <a href="%{terms_path}" target="_blank">όρους χρήσης</a> delete_account: Διαγραφή email delete_account_html: Αν θέλεις να διαγράψεις το λογαριασμό σου, μπορείς <a href="%{path}">να συνεχίσεις εδώ</a>. Θα σου ζητηθεί επιβεβαίωση. + description: + prefix_invited_by_user: Ο/Η @%{name} σε προσκαλεί να συνδεθείς με αυτό τον διακομιστή του Mastodon! + prefix_sign_up: Άνοιξε λογαριασμό στο Mastodon σήμερα! + suffix: Ανοίγοντας λογαριασμό θα μπορείς να ακολουθείς άλλους, να ανεβάζεις ενημερώσεις και να ανταλλάζεις μηνύματα με χρήστες σε οποιοδήποτε διακομιστή Mastodon, καθώς και άλλα! didnt_get_confirmation: Δεν έλαβες τις οδηγίες επιβεβαίωσης; forgot_password: Ξέχασες το συνθηματικό σου; invalid_reset_password_token: Το διακριτικό επαναφοράς συνθηματικού είναι άκυρο ή ληγμένο. Παρακαλώ αιτήσου νέο. @@ -544,6 +623,16 @@ el: reset_password: Επαναφορά συνθηματικού security: Ασφάλεια set_new_password: Ορισμός νέου συνθηματικού + setup: + email_below_hint_html: Αν η παρακάτω διεύθυνση email είναι λανθασμένη, μπορείτε να την ενημερώσετε και να λάβετε νέο email επιβεβαίωσης. + email_settings_hint_html: Το email επιβεβαίωσης στάλθηκε στο %{email}. Αν η διεύθυνση αυτή δεν είναι σωστή, μπορείτε να την ενημερώσετε στις ρυθμίσεις λογαριασμού. + title: Ρυθμίσεις + status: + account_status: Κατάσταση λογαριασμού + confirming: Αναμονή για ολοκλήρωση επιβεβαίωσης του email. + functional: Ο λογαριασμός σου είναι πανέτοιμος. + pending: Η εφαρμογή σας εκκρεμεί έγκρισης, πιθανόν θα διαρκέσει κάποιο χρόνο. Θα λάβετε email αν εγκριθεί. + redirecting_to: Ο λογαριασμός σου είναι ανενεργός γιατί επί του παρόντος ανακατευθύνει στον %{acct}. trouble_logging_in: Πρόβλημα σύνδεσης; authorize_follow: already_following: Ήδη ακολουθείς αυτό το λογαριασμό @@ -556,6 +645,11 @@ el: return: Δείξε το προφίλ του χρήστη web: Πήγαινε στο δίκτυο title: Ακολούθησε %{acct} + challenge: + confirm: Συνέχεια + hint_html: "<strong>Συμβουλή:</strong> Δεν θα σου ζητήσουμε τον κωδικό ασφαλείας σου ξανά για την επόμενη ώρα." + invalid_password: Μη έγκυρο συνθηματικό + prompt: Επιβεβαίωση συνθηματικού για συνέχεια datetime: distance_in_words: about_x_hours: "%{count}ω" @@ -571,26 +665,33 @@ el: x_months: "%{count}μ" x_seconds: "%{count}δ" deletes: - bad_password_msg: Καλή προσπάθεια χάκερς! Λάθος συνθηματικό + challenge_not_passed: Τα στοιχεία δεν ήταν σωστά confirm_password: Γράψε το τρέχον συνθηματικό σου για να πιστοποιήσεις την ταυτότητά σου - description_html: Αυτό θα διαγράψει <strong>οριστικά και αμετάκλητα</strong> το περιεχόμενο του λογαριασμού σου και θα τον απενεργοποιήσει. Το όνομα χρήστη θα παραμείνει δεσμευμένο για να αποφευχθούν μελλοντικές πλαστοπροσωπίες. + confirm_username: Γράψε το όνομα χρήστη σου για επιβεβαίωση proceed: Διαγραφή λογαριασμού success_msg: Ο λογαριασμός σου διαγράφηκε με επιτυχία - warning_html: Μόνο η διαγραφή περιεχομένου από αυτό τον συγκεκριμένο κόμβο είναι εγγυημένη. Το περιεχόμενο που έχει διαμοιραστεί ευρέως είναι πιθανό να αφήσει ίχνη. Όσοι διακομιστές είναι εκτός σύνδεσης και όσοι έχουν διακόψει τη λήψη των ενημερώσεων του κόμβου σου, δε θα ενημερώσουν τις βάσεις δεδομένων τους. - warning_title: Διαθεσιμότητα ήδη διανεμημένου περιεχομένου + warning: + before: 'Πριν συνεχίσεις, παρακαλούμε να διαβάσεις τις παρακάτω σημειώσεις προσεκτικά:' + caches: Οποίο περιεχόμενο έχει αποθηκευτεί προσωρινά σε άλλους διακομιστές μπορεί να παραμείνει + data_removal: Οι δημοσιεύσεις σου και άλλα δεδομένα θα διαγραφούν οριστικά + email_change_html: Μπορείς να <a href="%{path}">αλλάξεις τη διεύθυνση email σου</a> Χωρίς να διαγράψεις το λογαριασμό σου + email_contact_html: Αν και πάλι δεν εμφανιστεί, μπορείς να στείλεις email προς <a href="mailto:%{email}">%{email}</a> για βοήθεια + email_reconfirmation_html: Αν δεν έχεις λάβει το email επιβεβαίωσης, μπορείς να το <a href="%{path}">ζητήσεις ξανά</a> + irreversible: Δεν θα μπορείς να ανακτήσεις ή ενεργοποιήσεις ξανά το λογαριασμό σου + more_details_html: Για περισσότερες πληροφορίες, δες την <a href="%{terms_path}">πολιτική απορρήτου</a>. + username_available: Το όνομα χρήστη σου θα γίνει ξανά διαθέσιμο + username_unavailable: Το όνομα χρήστη σου θα παραμείνει μη διαθέσιμο directories: directory: Κατάλογος λογαριασμών - enabled: Περιλαμβάνεσαι στον κατάλογο. - enabled_but_waiting: Έχεις επιλέξει να εμφανίζεσαι στον κατάλογο μεν, αλλά ακόμα δεν έχεις τον ελάχιστο αριθμό ακόλουθων (%{min_followers}) που απαιτείται για να συμπεριληφθείς. explanation: Βρες χρήστες βάσει των ενδιαφερόντων τους explore_mastodon: Εξερεύνησε το %{title} - how_to_enable: Δεν έχεις επιλέξει να συμπεριληφθείς στον καταλογο. Μπορείς να επιλέξεις παρακάτω. Χρησιμοποίησε ταμπέλες στο κείμενο του βιογραφικού σου για να εμφανίζεσαι κάτω από συγκεκριμένες ταμπέλες! - people: - one: "%{count} άτομο" - other: "%{count} άτομα" + domain_validator: + invalid_domain: δεν είναι έγκυρο όνομα τομέα errors: + '400': Το αίτημα ήταν άκυρο ή με λάθος μορφή. '403': Δεν έχεις δικαίωμα πρόσβασης σε αυτή τη σελίδα. '404': Η σελίδα που ψάχνεις δεν υπάρχει. + '406': Η σελίδα αυτή δεν είναι διαθέσιμη στην αιτούμενη μορφή. '410': Η σελίδα που έψαχνες δεν υπάρχει πια εδώ. '422': content: Απέτυχε η επιβεβαίωση ασφαλείας. Μήπως μπλοκάρεις τα cookies; @@ -599,6 +700,7 @@ el: '500': content: Λυπούμαστε, κάτι πήγε στραβά από τη δική μας μεριά. title: Η σελίδα αυτή δεν είναι σωστή + '503': Η σελίδα δε μπόρεσε να εμφανιστεί λόγω προσωρινού σφάλματος του διακομιστή. noscript_html: Για να χρησιμοποιήσετε τη δικτυακή εφαρμογή του Mastodon, ενεργοποίησε την Javascript. Εναλλακτικά, δοκίμασε μια από τις <a href="%{apps_path}">εφαρμογές</a> για το Mastodon στην πλατφόρμα σου. existing_username_validator: not_found: δεν βρέθηκε τοπικός χρήστης με αυτό το όνομα @@ -616,12 +718,13 @@ el: domain_blocks: Μπλοκαρίσματα κόμβων follows: Ακολουθείς lists: Λίστες - mutes: Αποσιωπάς + mutes: Αποσιωπήσεις storage: Αποθήκευση πολυμέσων featured_tags: add_new: Προσθήκη νέας errors: limit: Έχεις ήδη προσθέσει το μέγιστο αριθμό ταμπελών + hint_html: "<strong>Τι είναι οι προβεβλημένες ταμπέλες;</strong> Προβάλλονται στο δημόσιο προφίλ σου επιτρέποντας σε όποιον το βλέπει να χαζέψει τις δημοσιεύσεις που τις χρησιμοποιούν. Είναι ωραίος τρόπος να παρακολουθείς κάποια δημιουργία ή ένα μακροπρόθεσμο έργο." filters: contexts: home: Αρχική ροή @@ -642,12 +745,14 @@ el: developers: Ανάπτυξη more: Περισσότερα… resources: Πόροι + trending_now: Τάσεις generic: all: Όλα changes_saved_msg: Οι αλλαγές αποθηκεύτηκαν! copy: Αντιγραφή + no_batch_actions_available: Δεν υπάρχουν ομαδικές ενέργειες σε αυτή τη σελίδα order_by: Ταξινόμηση κατά - save_changes: Αποθήκευσε τις αλλαγές + save_changes: Αποθήκευση αλλαγών validation_errors: one: Κάτι δεν είναι εντάξει ακόμα! Για κοίταξε το παρακάτω σφάλμα other: Κάτι δεν είναι εντάξει ακόμα! Για κοίταξε τα παρακάτω %{count} σφάλματα @@ -717,9 +822,34 @@ el: too_many: Δεν γίνεται να προσθέσεις περισσότερα από 4 αρχεία migrations: acct: ΌνομαΧρήστη@Τομέας του νέου λογαριασμού - currently_redirecting: 'Το προφίλ σου έχει ρυθμιστεί να ανακατευθύνει στο:' - proceed: Αποθήκευση - updated_msg: Οι ρυθμίσεις μετακόμισης του λογαριασμού σου ενημερώθηκαν! + cancel: Ακύρωση ανακατεύθυνσης + cancel_explanation: Ακυρώνοντας την ανακατεύθυνση θα ενεργοποιήσει ξανά τον τρέχοντα λογαριασμό σου, αλλά δεν θα φέρει πίσω τους ακόλουθους που έχουν μεταφερθεί σε εκείνον το λογαριασμό. + cancelled_msg: Η ανακατεύθυνση ακυρώθηκε επιτυχώς. + errors: + already_moved: είναι ο ίδιος λογαριασμός στον οποίο έχεις ήδη μεταφερθεί + missing_also_known_as: δεν αναφέρει αυτόν τον λογαριασμό + move_to_self: δεν επιτρέπεται να είναι ο τρέχων λογαριασμός + not_found: δεν βρέθηκε + on_cooldown: Είσαι σε περίοδο προσαρμογής + followers_count: Ακόλουθοι τη στιγμή της μεταφοράς + incoming_migrations: Μεταφορά από διαφορετικό λογαριασμό + incoming_migrations_html: Για να μετακομίσεις από έναν άλλο λογαριασμό σε αυτόν εδώ, πρώτα πρέπει να <a href="%{path}">δημιουργήσεις ένα ψευδώνυμο λογαριασμού</a>. + moved_msg: Ο λογαριασμός σου πλέον ανακατευθύνει στον %{acct} και οι ακόλουθοί σου μεταφέρονται εκεί. + not_redirecting: Ο λογαριασμός σου δεν ανακατευθύνει σε κανέναν άλλο προς το παρόν. + on_cooldown: Έχεις μετακομίσει το λογαριασμό σου πρόσφατα. Η δυνατότητα αυτή θα γίνει πάλι διαθέσιμη σε %{count} μέρες. + past_migrations: Προηγούμενες μετακινήσεις + proceed_with_move: Μετακίνηση ακολούθων + redirecting_to: Ο λογαριασμός σου ανακατευθύνει στο %{acct}. + set_redirect: Όρισε ανακατεύθυνση + warning: + backreference_required: Θα πρέπει πρώτα να ρυθμιστεί μια αναφορά από τον νέο λογαριασμό προς αυτόν + before: 'Πριν συνεχίσεις, παρακαλούμε διάβασε αυτές τις σημειώσεις προσεκτικά:' + cooldown: Άπαξ και μεταφερθείς υπάρχει μια περίοδος προσαρμογής κατά την οποία δε θα μπορείς να μετακινηθείς ξανά + disabled_account: Ο τρέχων λογαριασμός σου δε θα είναι πλήρως ενεργός μετά. Πάντως θα έχεις πρόσβαση στην εξαγωγή δεδομένων καθώς και στην επανενεργοποίηση. + followers: Αυτή η ενέργεια θα μεταφέρει όλους τους ακόλουθούς σου από τον τρέχοντα λογαριασμός στον νέο λογαριασμό + only_redirect_html: Εναλλακτικά, μπορείς <a href="%{path}">απλά να προσθέσεις μια ανακατατεύθυνση στο προφίλ σου</a>. + other_data: Κανένα άλλο δεδομένο δε θα μεταφερθεί αυτόματα + redirect: Το προφίλ του τρέχοντος λογαριασμό σου θα ενημερωθεί με μια σημείωση ανακατεύθυνσης και θα εξαιρεθεί από τα αποτελέσματα αναζητήσεων moderation: title: Συντονισμός notification_mailer: @@ -783,7 +913,7 @@ el: too_few_options: πρέπει να έχει περισσότερες από μια επιλογές too_many_options: δεν μπορεί να έχει περισσότερες από %{max} επιλογές preferences: - other: Άλλο + other: Άλλες posting_defaults: Προεπιλογές δημοσίευσης public_timelines: Δημόσιες ροές relationships: @@ -816,10 +946,6 @@ el: reply: proceed: Συνέχισε για να απαντήσεις prompt: 'Θέλεις να απαντήσεις σε αυτό το τουτ:' - remote_unfollow: - error: Σφάλμα - title: Τίτλος - unfollowed: Σταμάτησες να ακολουθείς scheduled_statuses: over_daily_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων τουτ για εκείνη τη μέρα over_total_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων τουτ @@ -868,6 +994,7 @@ el: settings: account: Λογαριασμός account_settings: Ρυθμίσεις λογαριασμού + aliases: Ψευδώνυμα λογαριασμών appearance: Εμφάνιση authorized_apps: Εγκεκριμένες εφαρμογές back: Πίσω στο Mastodon @@ -885,6 +1012,8 @@ el: profile: Προφίλ relationships: Ακολουθεί και ακολουθείται two_factor_authentication: Πιστοποίηση 2 παραγόντων (2FA) + spam_check: + spam_detected: Αυτή είναι μια αυτόματη αναφορά. Εντοπίστηκε ανεπιθύμητο υλικό (spam). statuses: attached: description: 'Συνημμένα: %{attached}' @@ -908,6 +1037,9 @@ el: private: Τα μη δημόσια τουτ δεν καρφιτσώνονται reblog: Οι προωθήσεις δεν καρφιτσώνονται poll: + total_people: + one: "%{count} άτομο" + other: "%{count} άτομα" total_votes: one: "%{count} ψήφος" other: "%{count} ψήφοι" @@ -926,6 +1058,8 @@ el: pinned: Καρφιτσωμένο τουτ reblogged: προωθημένο sensitive_content: Ευαίσθητο περιεχόμενο + tags: + does_not_match_previous_name: δεν ταιριάζει με το προηγούμενο όνομα terms: body_html: | <h2>Πολιτική Απορρήτου</h2> @@ -1043,7 +1177,9 @@ el: disable: Όσο ο λογαριασμός σου είναι παγωμένος, τα στοιχεία του παραμένουν άθικτα αλλά δεν μπορείς να κανείς καμία ενέργεια μέχρι να ξεκλειδωθείς. silence: Όσο ο λογαριασμός σου είναι περιορισμένος, μόνο όσοι σε ακολουθούν ήδη θα βλέπουν τα τουτ σου σε αυτό τον κόμβο ενώ μπορεί να εξαιρεθείς από διάφορες δημόσιες απαριθμήσεις. Πάντως, θα μπορούν να σε ακολουθήσουν χειροκίνητα. suspend: Ο λογαριασμός σου αναστάλθηκε μόνιμα, όλα τα τουτ και τα ανεβασμένα πολυμέσα σου διαγράφηκαν αμετάκλητα από αυτόν τον κόμβο και σε όσους άλλους είχες ακόλουθους. + get_in_touch: Μπορείς να απαντήσεις σε αυτό το email για να επικοινωνήσεις με το προσωπικό του %{instance}. review_server_policies: Αναθεώρηση πολιτικής του κόμβου + statuses: 'Συγκεκριμένα, για:' subject: disable: Ο λογαριασμός σου %{acct} έχει παγώσει none: Προειδοποίηση προς %{acct} diff --git a/config/locales/en.yml b/config/locales/en.yml index 3a8a0c485..c505896e7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2,7 +2,7 @@ en: about: about_hashtag_html: These are public toots tagged with <strong>#%{hashtag}</strong>. You can interact with them if you have an account anywhere in the fediverse. - about_mastodon_html: Mastodon is a social network based on open web protocols and free, open-source software. It is decentralized like e-mail. + about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!' about_this: About active_count_after: active active_footnote: Monthly Active Users (MAU) @@ -11,19 +11,19 @@ en: apps: Mobile apps apps_platforms: Use Mastodon from iOS, Android and other platforms browse_directory: Browse a profile directory and filter by interests + browse_local_posts: Browse a live stream of public posts from this server browse_public_posts: Browse a live stream of public posts on Mastodon contact: Contact contact_missing: Not set contact_unavailable: N/A discover_users: Discover users documentation: Documentation - extended_description_html: | - <h3>A good place for rules</h3> - <p>The extended description has not been set up yet.</p> federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond. - generic_description: "%{domain} is one server in the network" get_apps: Try a mobile app hosted_on: Mastodon hosted on %{domain} + instance_actor_flash: | + This account is a virtual actor used to represent the server itself and not any individual user. + It is used for federation purposes and should not be blocked unless you want to block the whole instance, in which case you should use a domain block. learn_more: Learn more privacy_policy: Privacy policy see_whats_happening: See what's happening @@ -35,6 +35,14 @@ en: status_count_before: Who authored tagline: Follow friends and discover new ones terms: Terms of service + unavailable_content: Unavailable content + unavailable_content_description: + domain: Server + reason: Reason + rejecting_media: 'Media files from these servers will not be processed or stored, and and no thumbnails will be displayed, requiring manual click-through to the original file:' + silenced: 'Posts from these servers will be hidden in public timelines and conversations, and no notifications will be generated from their users'' interactions, unless you are following them:' + suspended: 'No data from these servers will be processed, stored or exchanged, making any interaction or communication with users from these servers impossible:' + unavailable_content_html: Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server. user_count_after: one: user other: users @@ -42,6 +50,8 @@ en: what_is_mastodon: What is Mastodon? accounts: choices_html: "%{name}'s choices:" + endorsements_hint: You can endorse people you follow from the web interface, and they will show up here. + featured_tags_hint: You can feature specific hashtags that will be displayed here. follow: Follow followers: one: Follower @@ -53,6 +63,7 @@ en: media: Media moved_html: "%{name} has moved to %{new_profile_link}:" network_hidden: This information is not available + never_active: Never nothing_here: There is nothing here! people_followed_by: People whom %{name} follows people_who_follow: People who follow %{name} @@ -67,6 +78,7 @@ en: roles: admin: Admin bot: Bot + group: Group moderator: Mod unavailable: Profile unavailable unfollow: Unfollow @@ -165,6 +177,7 @@ en: user: User salmon_url: Salmon URL search: Search + search_same_ip: Other users with the same IP shared_inbox_url: Shared inbox URL show: created_reports: Made reports @@ -183,6 +196,7 @@ en: username: Username warn: Warn web: Web + whitelisted: Whitelisted action_logs: actions: assigned_to_self_report: "%{name} assigned report %{target} to themselves" @@ -190,10 +204,12 @@ en: confirm_user: "%{name} confirmed e-mail address of user %{target}" create_account_warning: "%{name} sent a warning to %{target}" create_custom_emoji: "%{name} uploaded new emoji %{target}" + create_domain_allow: "%{name} whitelisted domain %{target}" create_domain_block: "%{name} blocked domain %{target}" create_email_domain_block: "%{name} blacklisted e-mail domain %{target}" demote_user: "%{name} demoted user %{target}" destroy_custom_emoji: "%{name} destroyed emoji %{target}" + destroy_domain_allow: "%{name} removed domain %{target} from whitelist" destroy_domain_block: "%{name} unblocked domain %{target}" destroy_email_domain_block: "%{name} whitelisted e-mail domain %{target}" destroy_status: "%{name} removed status by %{target}" @@ -218,19 +234,24 @@ en: deleted_status: "(deleted status)" title: Audit log custom_emojis: + assign_category: Assign category by_domain: Domain copied_msg: Successfully created local copy of the emoji copy: Copy copy_failed_msg: Could not make a local copy of that emoji + create_new_category: Create new category created_msg: Emoji successfully created! delete: Delete destroyed_msg: Emojo successfully destroyed! disable: Disable + disabled: Disabled disabled_msg: Successfully disabled that emoji emoji: Emoji enable: Enable + enabled: Enabled enabled_msg: Successfully enabled that emoji image_hint: PNG up to 50KB + list: List listed: Listed new: title: Add new custom emoji @@ -238,11 +259,14 @@ en: shortcode: Shortcode shortcode_hint: At least 2 characters, only alphanumeric characters and underscores title: Custom emojis + uncategorized: Uncategorized + unlist: Unlist unlisted: Unlisted update_failed_msg: Could not update that emoji updated_msg: Emoji successfully updated! upload: Upload dashboard: + authorized_fetch_mode: Secure mode backlog: backlogged jobs config: Configuration feature_deletions: Account deletions @@ -250,11 +274,14 @@ en: feature_profile_directory: Profile directory feature_registrations: Registrations feature_relay: Federation relay + feature_spam_check: Anti-spam feature_timeline_preview: Timeline preview features: Features hidden_service: Federation with hidden services keybase: Keybase integration open_reports: open reports + pending_tags: hashtags waiting for review + pending_users: users waiting for review recent_users: Recent users search: Full-text search single_user_mode: Single user mode @@ -266,11 +293,18 @@ en: week_interactions: interactions this week week_users_active: active this week week_users_new: users this week + whitelist_mode: Whitelist mode + domain_allows: + add_new: Whitelist domain + created_msg: Domain has been successfully whitelisted + destroyed_msg: Domain has been removed from the whitelist + undo: Remove from whitelist domain_blocks: add_new: Add new domain block created_msg: Domain block is now being processed destroyed_msg: Domain block has been undone domain: Domain + edit: Edit domain block existing_domain_block_html: You have already imposed stricter limits on %{name}, you need to <a href="%{unblock_url}">unblock it</a> first. new: create: Create block @@ -281,6 +315,10 @@ en: silence: Silence suspend: Suspend title: New domain block + private_comment: Private comment + private_comment_hint: Comment about this domain limitation for internal use by the moderators. + public_comment: Public comment + public_comment_hint: Comment about this domain limitation for the general public, if advertising the list of domain limitations is enabled. reject_media: Reject media files reject_media_hint: Removes locally stored media files and refuses to download any in the future. Irrelevant for suspensions reject_reports: Reject reports @@ -300,6 +338,7 @@ en: title: Undo domain block for %{domain} undo: Undo undo: Undo domain block + view: View domain block email_domain_blocks: add_new: Add new created_msg: Successfully added e-mail domain to blacklist @@ -323,6 +362,8 @@ en: all: All limited: Limited title: Moderation + private_comment: Private comment + public_comment: Public comment title: Federation total_blocked_by_us: Blocked by us total_followed_by_them: Followed by them @@ -352,6 +393,7 @@ en: pending: Waiting for relay's approval save_and_enable: Save and enable setup: Setup a relay connection + signatures_not_enabled: Relays will not work correctly while secure mode or whitelist mode is enabled status: Status title: Relays report_notes: @@ -365,6 +407,7 @@ en: are_you_sure: Are you sure? assign_to_self: Assign to me assigned: Assigned moderator + by_target_domain: Domain of reported account comment: none: None created_at: Reported @@ -400,6 +443,16 @@ en: custom_css: desc_html: Modify the look with CSS loaded on every page title: Custom CSS + default_noindex: + desc_html: Affects all users who have not changed this setting themselves + title: Opt users out of search engine indexing by default + domain_blocks: + all: To everyone + disabled: To no one + title: Show domain blocks + users: To logged-in local users + domain_blocks_rationale: + title: Show rationale enable_keybase: desc_html: Allow your users to prove their identity via keybase title: Enable keybase integration @@ -438,8 +491,8 @@ en: open: Anyone can sign up title: Registrations mode show_known_fediverse_at_about_page: - desc_html: When toggled, it will show toots from all the known fediverse on preview. Otherwise it will only show local toots. - title: Show known fediverse on timeline preview + desc_html: When disabled, restricts the public timeline linked from the landing page to showing only local content + title: Include federated content on unauthenticated public timeline page show_reblogs_in_public_timelines: desc_html: Show public boosts of public toots in local and public timelines. title: Show boosts in public timelines @@ -462,19 +515,29 @@ en: desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML tags title: Custom terms of service site_title: Server name + spam_check_enabled: + desc_html: Mastodon can auto-report accounts that send repeated unsolicited messages. There may be false positives. + title: Anti-spam automation thumbnail: desc_html: Used for previews via OpenGraph and API. 1200x630px recommended title: Server thumbnail timeline_preview: - desc_html: Display public timeline on landing page - title: Timeline preview + desc_html: Display link to public timeline on landing page and allow API access to the public timeline without authentication + title: Allow unauthenticated access to public timeline title: Site settings + trendable_by_default: + desc_html: Affects hashtags that have not been previously disallowed + title: Allow hashtags to trend without prior review + trends: + desc_html: Publicly display previously reviewed hashtags that are currently trending + title: Trending hashtags statuses: back_to_account: Back to account page batch: delete: Delete nsfw_off: Mark as not sensitive nsfw_on: Mark as sensitive + deleted: Deleted failed_to_execute: Failed to execute media: title: Media @@ -482,21 +545,24 @@ en: no_status_selected: No statuses were changed as none were selected title: Account statuses with_media: With media - subscriptions: - callback_url: Callback URL - confirmed: Confirmed - expires_in: Expires in - last_delivery: Last delivery - title: WebSub - topic: Topic tags: - accounts: Accounts - hidden: Hidden - hide: Hide from directory + accounts_today: Unique uses today + accounts_week: Unique uses this week + breakdown: Breakdown of today's usage by source + context: Context + directory: In directory + in_directory: "%{count} in directory" + last_active: Last active + most_popular: Most popular + most_recent: Most recent name: Hashtag + review: Review status + reviewed: Reviewed title: Hashtags - unhide: Show in directory - visible: Visible + trending_right_now: Trending right now + unique_uses_today: "%{count} posting today" + unreviewed: Not reviewed + updated_msg: Hashtag settings updated successfully title: Administration warning_presets: add_new: Add new @@ -512,12 +578,23 @@ en: body: "%{reporter} has reported %{target}" body_remote: Someone from %{domain} has reported %{target} subject: New report for %{instance} (#%{id}) + new_trending_tag: + body: 'The hashtag #%{name} is trending today, but has not been previously reviewed. It will not be displayed publicly unless you allow it to, or just save the form as it is to never hear about it again.' + subject: New hashtag up for review on %{instance} (#%{name}) + aliases: + add_new: Create alias + created_msg: Successfully created a new alias. You can now initiate the move from the old account. + deleted_msg: Successfully remove the alias. Moving from that account to this one will no longer be possible. + hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is <strong>harmless and reversible</strong>. <strong>The account migration is initiated from the old account</strong>. + remove: Unlink alias appearance: advanced_web_interface: Advanced web interface advanced_web_interface_hint: 'If you want to make use of your entire screen width, the advanced web interface allows you to configure many different columns to see as much information at the same time as you want: Home, notifications, federated timeline, any number of lists and hashtags.' animations_and_accessibility: Animations and accessibility confirmation_dialogs: Confirmation dialogs + discovery: Discovery sensitive_content: Sensitive content + toot_layout: Toot layout application_mailer: notification_preferences: Change e-mail preferences salutation: "%{name}," @@ -537,9 +614,13 @@ en: apply_for_account: Request an invite change_password: Password checkbox_agreement_html: I agree to the <a href="%{rules_path}" target="_blank">server rules</a> and <a href="%{terms_path}" target="_blank">terms of service</a> - confirm_email: Confirm email + checkbox_agreement_without_rules_html: I agree to the <a href="%{terms_path}" target="_blank">terms of service</a> delete_account: Delete account delete_account_html: If you wish to delete your account, you can <a href="%{path}">proceed here</a>. You will be asked for confirmation. + description: + prefix_invited_by_user: "@%{name} invites you to join this server of Mastodon!" + prefix_sign_up: Sign up on Mastodon today! + suffix: With an account, you will be able to follow people, post updates and exchange messages with users from any Mastodon server and more! didnt_get_confirmation: Didn't receive confirmation instructions? forgot_password: Forgot your password? invalid_reset_password_token: Password reset token is invalid or expired. Please request a new one. @@ -557,6 +638,16 @@ en: reset_password: Reset password security: Security set_new_password: Set new password + setup: + email_below_hint_html: If the below e-mail address is incorrect, you can change it here and receive a new confirmation e-mail. + email_settings_hint_html: The confirmation e-mail was sent to %{email}. If that e-mail address is not correct, you can change it in account settings. + title: Setup + status: + account_status: Account status + confirming: Waiting for e-mail confirmation to be completed. + functional: Your account is fully operational. + pending: Your application is pending review by our staff. This may take some time. You will receive an e-mail if your application is approved. + redirecting_to: Your account is inactive because it is currently redirecting to %{acct}. trouble_logging_in: Trouble logging in? authorize_follow: already_following: You are already following this account @@ -569,6 +660,11 @@ en: return: Show the user's profile web: Go to web title: Follow %{acct} + challenge: + confirm: Continue + hint_html: "<strong>Tip:</strong> We won't ask you for your password again for the next hour." + invalid_password: Invalid password + prompt: Confirm password to continue datetime: distance_in_words: about_x_hours: "%{count}h" @@ -584,26 +680,33 @@ en: x_months: "%{count}mo" x_seconds: "%{count}s" deletes: - bad_password_msg: Nice try, hackers! Incorrect password + challenge_not_passed: The information you entered was not correct confirm_password: Enter your current password to verify your identity - description_html: This will <strong>permanently, irreversibly</strong> remove content from your account and deactivate it. Your username will remain reserved to prevent future impersonations. + confirm_username: Enter your username to confirm the procedure proceed: Delete account success_msg: Your account was successfully deleted - warning_html: Only deletion of content from this particular server is guaranteed. Content that has been widely shared is likely to leave traces. Offline servers and servers that have unsubscribed from your updates will not update their databases. - warning_title: Disseminated content availability + warning: + before: 'Before proceeding, please read these notes carefully:' + caches: Content that has been cached by other servers may persist + data_removal: Your posts and other data will be permanently removed + email_change_html: You can <a href="%{path}">change your e-mail address</a> without deleting your account + email_contact_html: If it still doesn't arrive, you can e-mail <a href="mailto:%{email}">%{email}</a> for help + email_reconfirmation_html: If you are not receiving the confirmation e-mail, you can <a href="%{path}">request it again</a> + irreversible: You will not be able to restore or reactivate your account + more_details_html: For more details, see the <a href="%{terms_path}">privacy policy</a>. + username_available: Your username will become available again + username_unavailable: Your username will remain unavailable directories: directory: Profile directory - enabled: You are currently listed in the directory. - enabled_but_waiting: You have opted-in to be listed in the directory, but you do not have the minimum number of followers (%{min_followers}) to be listed yet. explanation: Discover users based on their interests explore_mastodon: Explore %{title} - how_to_enable: You are not currently opted-in to the directory. You can opt-in below. Use hashtags in your bio text to be listed under specific hashtags! - people: - one: "%{count} person" - other: "%{count} people" + domain_validator: + invalid_domain: is not a valid domain name errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': content: Security verification failed. Are you blocking cookies? @@ -612,6 +715,7 @@ en: '500': content: We're sorry, but something went wrong on our end. title: This page is not correct + '503': The page could not be served due to a temporary server failure. noscript_html: To use the Mastodon web application, please enable JavaScript. Alternatively, try one of the <a href="%{apps_path}">native apps</a> for Mastodon for your platform. existing_username_validator: not_found: could not find a local user with that username @@ -635,6 +739,7 @@ en: add_new: Add new errors: limit: You have already featured the maximum amount of hashtags + hint_html: "<strong>What are featured hashtags?</strong> They are displayed prominently on your public profile and allow people to browse your public posts specifically under those hashtags. They are a great tool for keeping track of creative works or long-term projects." filters: contexts: home: Home timeline @@ -655,10 +760,12 @@ en: developers: Developers more: More… resources: Resources + trending_now: Trending now generic: all: All changes_saved_msg: Changes successfully saved! copy: Copy + no_batch_actions_available: No batch actions available on this page order_by: Order by save_changes: Save changes use_this: Use this @@ -711,7 +818,7 @@ en: '604800': 1 week '86400': 1 day expires_in_prompt: Never - generate: Generate + generate: Generate invite link invited_by: 'You were invited by:' max_uses: one: 1 use @@ -730,10 +837,35 @@ en: images_and_video: Cannot attach a video to a status that already contains images too_many: Cannot attach more than 4 files migrations: - acct: username@domain of the new account - currently_redirecting: 'Your profile is set to redirect to:' - proceed: Save - updated_msg: Your account migration setting successfully updated! + acct: Moved to + cancel: Cancel redirect + cancel_explanation: Cancelling the redirect will re-activate your current account, but will not bring back followers that have been moved to that account. + cancelled_msg: Successfully cancelled the redirect. + errors: + already_moved: is the same account you have already moved to + missing_also_known_as: is not back-referencing this account + move_to_self: cannot be current account + not_found: could not be found + on_cooldown: You are on cooldown + followers_count: Followers at time of move + incoming_migrations: Moving from a different account + incoming_migrations_html: To move from another account to this one, first you need to <a href="%{path}">create an account alias</a>. + moved_msg: Your account is now redirecting to %{acct} and your followers are being moved over. + not_redirecting: Your account is not redirecting to any other account currently. + on_cooldown: You have recently migrated your account. This function will become available again in %{count} days. + past_migrations: Past migrations + proceed_with_move: Move followers + redirecting_to: Your account is redirecting to %{acct}. + set_redirect: Set redirect + warning: + backreference_required: The new account must first be configured to back-reference this one + before: 'Before proceeding, please read these notes carefully:' + cooldown: After moving there is a cooldown period during which you will not be able to move again + disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation. + followers: This action will move all followers from the current account to the new account + only_redirect_html: Alternatively, you can <a href="%{path}">only put up a redirect on your profile</a>. + other_data: No other data will be moved automatically + redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches moderation: title: Moderation notification_mailer: @@ -770,6 +902,10 @@ en: body: 'Your status was boosted by %{name}:' subject: "%{name} boosted your status" title: New boost + notifications: + email_events: Events for e-mail notifications + email_events_hint: 'Select events that you want to receive notifications for:' + other_settings: Other notifications settings number: human: decimal_units: @@ -804,6 +940,8 @@ en: relationships: activity: Account activity dormant: Dormant + followers: Followers + following: Following last_active: Last active most_recent: Most recent moved: Moved @@ -831,10 +969,6 @@ en: reply: proceed: Proceed to reply prompt: 'You want to reply to this toot:' - remote_unfollow: - error: Error - title: Title - unfollowed: Unfollowed scheduled_statuses: over_daily_limit: You have exceeded the limit of %{limit} scheduled toots for that day over_total_limit: You have exceeded the limit of %{limit} scheduled toots @@ -883,6 +1017,7 @@ en: settings: account: Account account_settings: Account settings + aliases: Account aliases appearance: Appearance authorized_apps: Authorized apps back: Back to Mastodon @@ -901,6 +1036,8 @@ en: profile: Profile relationships: Follows and followers two_factor_authentication: Two-factor Auth + spam_check: + spam_detected: This is an automated report. Spam has been detected. statuses: attached: description: 'Attached: %{attached}' @@ -924,6 +1061,9 @@ en: private: Non-public toot cannot be pinned reblog: A boost cannot be pinned poll: + total_people: + one: "%{count} person" + other: "%{count} people" total_votes: one: "%{count} vote" other: "%{count} votes" @@ -942,6 +1082,8 @@ en: pinned: Pinned toot reblogged: boosted sensitive_content: Sensitive content + tags: + does_not_match_previous_name: does not match the previous name terms: body_html: | <h2>Privacy Policy</h2> @@ -1059,7 +1201,9 @@ en: disable: While your account is frozen, your account data remains intact, but you cannot perform any actions until it is unlocked. silence: While your account is limited, only people who are already following you will see your toots on this server, and you may be excluded from various public listings. However, others may still manually follow you. suspend: Your account has been suspended, and all of your toots and your uploaded media files have been irreversibly removed from this server, and servers where you had followers. + get_in_touch: You can reply to this e-mail to get in touch with the staff of %{instance}. review_server_policies: Review server policies + statuses: 'Specifically, for:' subject: disable: Your account %{acct} has been frozen none: Warning for %{acct} diff --git a/config/locales/eo.yml b/config/locales/eo.yml index c71b42fdd..347873214 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1,7 +1,7 @@ --- eo: about: - about_hashtag_html: Ĉi tiuj estas la publikaj fajfoj markitaj per <strong>#%{hashtag}</strong>. Vi povas interagi kun ili se vi havas konton ie ajn en la fediverse. + about_hashtag_html: Ĉi tiuj estas la publikaj mesaĝoj markitaj per <strong>#%{hashtag}</strong>. Vi povas interagi kun ili se vi havas konton ie ajn en la fediverse. about_mastodon_html: Mastodon estas socia reto bazita sur malfermitaj retaj protokoloj kaj sur libera malfermitkoda programo. Ĝi estas sencentra kiel retmesaĝoj. about_this: Pri active_count_after: aktiva @@ -17,13 +17,12 @@ eo: contact_unavailable: Ne disponebla discover_users: Malkovri uzantojn documentation: Dokumentado - extended_description_html: | - <h3>Bona loko por reguloj</h3> - <p>La detala priskribo ne estis elektita.</p> federation_hint_html: Per konto ĉe %{instance}, vi povos sekvi homojn ĉe iu ajn Mastodon nodo kaj preter. - generic_description: "%{domain} estas unu servilo en la reto" get_apps: Provu telefonan aplikaĵon hosted_on: "%{domain} estas nodo de Mastodon" + instance_actor_flash: | + Ĉi tiu konto estas virtuala ulo uzata por reprezenti la servilon mem kaj ne iun apartan uzanton. + Ĝi estas uzata por frataraj celoj kaj ĝi ne devus esti blokita krom se vi volas bloki la tutan servilon, tiuokaze vi devus uzi domajnan blokadon. learn_more: Lerni pli privacy_policy: Privateca politiko see_whats_happening: Vidi kio okazas @@ -35,6 +34,10 @@ eo: status_count_before: Kie skribiĝis tagline: Sekvi amikojn kaj trovi novan onin terms: Uzkondiĉoj + unavailable_content: Nedisponebla enhavo + unavailable_content_description: + domain: Servilo + reason: 'Kialo:' user_count_after: one: uzanto other: uzantoj @@ -53,6 +56,7 @@ eo: media: Aŭdovidaĵoj moved_html: "%{name} moviĝis al %{new_profile_link}:" network_hidden: Tiu informo ne estas disponebla + never_active: Neniam nothing_here: Estas nenio ĉi tie! people_followed_by: Sekvatoj de %{name} people_who_follow: Sekvantoj de %{name} @@ -174,6 +178,7 @@ eo: statuses: Mesaĝoj subscribe: Aboni suspended: Haltigita + time_in_queue: Atendado en atendovico %{time} title: Kontoj unconfirmed_email: Nekonfirmita retadreso undo_silenced: Malfari kaŝon @@ -182,6 +187,7 @@ eo: username: Uzantnomo warn: Averti web: Reto + whitelisted: En la blanka listo action_logs: actions: assigned_to_self_report: "%{name} asignis signalon %{target} al si mem" @@ -225,11 +231,14 @@ eo: delete: Forigi destroyed_msg: Emoĝio sukcese forigita! disable: Malebligi + disabled: Malebligita disabled_msg: Emoĝio sukcese malebligita emoji: Emoĝio enable: Ebligi + enabled: Ebligita enabled_msg: Tiu emoĝio estis sukcese ebligita image_hint: PNG ĝis 50KB + list: Listo listed: Listigita new: title: Aldoni novan propran emoĝion @@ -237,11 +246,13 @@ eo: shortcode: Mallonga kodo shortcode_hint: Almenaŭ 2 signoj, nur literoj, ciferoj kaj substrekoj title: Propraj emoĝioj + unlist: Nelistigi unlisted: Nelistigita update_failed_msg: Ĝisdatigi tiun emoĝion ne eblis updated_msg: Emoĝio sukcese ĝisdatigita! upload: Alŝuti dashboard: + authorized_fetch_mode: Sekura reĝimo backlog: postigitaj taskoj config: Agordado feature_deletions: Forigo de kontoj @@ -249,6 +260,7 @@ eo: feature_profile_directory: Profilujo feature_registrations: Registriĝoj feature_relay: Federacia ripetilo + feature_spam_check: Kontraŭ-spamo feature_timeline_preview: Templinio antaŭvidi features: Funkcioj hidden_service: Federacio kun kaŝitaj servoj @@ -260,15 +272,23 @@ eo: space: Memorspaca uzado title: Kontrolpanelo total_users: uzantoj sume - trends: Furoroj + trends: Furoraĵoj week_interactions: interagoj tiusemajne week_users_active: aktivaj tiusemajne week_users_new: uzantoj tiusemajne + whitelist_mode: En la blanka listo + domain_allows: + add_new: En la blanka listo domajno + created_msg: Domajno sukcese blanklistigita + destroyed_msg: Domajno estis forigita de la blanklisto + undo: Forigi de la blanklisto domain_blocks: add_new: Aldoni novan created_msg: Domajna blokado en traktado destroyed_msg: Domajna blokado malfarita domain: Domajno + edit: Redakti domajna blokado + existing_domain_block_html: Vi jam trudis pli striktajn limojn al %{name}, vi devas <a href="%{unblock_url}">malbloki ĝin</a> unue. new: create: Krei blokadon hint: La domajna blokado ne evitigos kreadon de novaj kontoj en la datumbazo, sed aplikos specifajn kontrolajn agojn sur ĉi tiujn kontojn aŭtomate kaj retroaktive. @@ -278,6 +298,8 @@ eo: silence: Kaŝi suspend: Haltigi title: Nova domajna blokado + private_comment: Privata komento + public_comment: Publika komento reject_media: Malakcepti aŭdovidajn dosierojn reject_media_hint: Forigas aŭdovidaĵojn loke konservitajn kaj rifuzas alŝuti ajnan estonte. Senzorge pri haltigoj reject_reports: Malakcepti raportojn @@ -297,6 +319,7 @@ eo: title: Malfari domajnan blokadon por %{domain} undo: Malfari undo: Malfari + view: Vidi domajna blokado email_domain_blocks: add_new: Aldoni novan created_msg: Retadreso sukcese aldonita al la nigra listo @@ -320,6 +343,8 @@ eo: all: Ĉiuj limited: Limigita title: Kontrolo + private_comment: Privata komento + public_comment: Publika komento title: Federacio total_blocked_by_us: Blokitaj de ni total_followed_by_them: Sekvataj de ili @@ -334,6 +359,8 @@ eo: expired: Eksvalida title: Filtri title: Invitoj + pending_accounts: + title: Pritraktataj kontoj (%{count}) relays: add_new: Aldoni novan ripetilon delete: Forigi @@ -395,6 +422,11 @@ eo: custom_css: desc_html: Ŝanĝi la aspekton per CSS ŝargita en ĉiu pago title: Propra CSS + domain_blocks: + all: Al ciuj + disabled: Al neniu + title: Vidi domajna blokado + users: Al ensalutintaj lokaj uzantoj hero: desc_html: Montrata en la ĉefpaĝo. Almenaŭ 600x100px rekomendita. Kiam ne agordita, la bildeto de la servilo estos uzata title: Kapbildo @@ -445,6 +477,8 @@ eo: desc_html: Vi povas skribi vian propran privatecan politikon, viajn uzkondiĉojn aŭ aliajn leĝaĵojn. Vi povas uzi HTML-etikedojn title: Propraj uzkondiĉoj site_title: Nomo de la servilo + spam_check_enabled: + title: Kontraŭ-spamo aŭtomatige thumbnail: desc_html: Uzata por antaŭvidoj per OpenGraph kaj per API. 1200x630px rekomendita title: Bildeto de la servilo @@ -452,12 +486,16 @@ eo: desc_html: Montri publikan templinion en komenca paĝo title: Tempolinia antaŭvido title: Retejaj agordoj + trends: + desc_html: Publike montri antaŭe kontrolitajn kradvortojn, kiuj nune furoras + title: Furoraj kradvortoj statuses: back_to_account: Reveni al konta paĝo batch: delete: Forigi - nsfw_off: Marki ne tikla + nsfw_off: Marki netikla nsfw_on: Marki tikla + deleted: Forigita failed_to_execute: Ekigo malsukcesa media: title: Aŭdovidaĵoj @@ -465,21 +503,21 @@ eo: no_status_selected: Neniu mesaĝo estis ŝanĝita ĉar neniu estis elektita title: Mesaĝoj de la konto with_media: Kun aŭdovidaĵoj - subscriptions: - callback_url: Revena URL - confirmed: Konfirmita - expires_in: Eksvalidiĝas je - last_delivery: Lasta livero - title: WebSub - topic: Temo tags: - accounts: Kontoj - hidden: Kaŝitaj - hide: Kaŝi de la profilujo + context: Kunteksto + directory: En la adresaro + in_directory: "%{count} en adresaro" + last_active: Laste aktiva + most_popular: La plej populara + most_recent: Plej lasta name: Kradvorto + review: La statuso de la recenzo + reviewed: Recenzis title: Kradvortoj - unhide: Montri en la profilujo - visible: Videblaj + trending_right_now: Nunaj furoraĵoj + unique_uses_today: "%{count} uzas hodiaŭ" + unreviewed: Ne recenzis + updated_msg: Kradvorto agordoj ĝisdatigis sukcese title: Administrado warning_presets: add_new: Aldoni novan @@ -495,10 +533,22 @@ eo: body: "%{reporter} signalis %{target}" body_remote: Iu de %{domain} signalis %{target} subject: Nova signalo por %{instance} (#%{id}) + new_trending_tag: + body: 'La kradvorto #%{name} furoras hodiaŭ, sed ankoraŭ ne estis kontrolita. Ĝi ne aperos publike sen via aprobo. Se vi ne volas tion, simple konservu la formularon tiel kiel.' + subject: Nova kradvorto kontrolebla en %{instance} (#%{name}) + aliases: + add_new: Krei alinomon + created_msg: Kreis novan alinomon sukcese. Vi povas inici la transloki el la malnovan konton nun. + deleted_msg: Forigis la alinomon sukcese. Transloki el tiu konto al ĉi tiu ne plu eblos. + remove: Malligili alinomon appearance: advanced_web_interface: Altnivela retpaĝa interfaco - confirmation_dialogs: Konfirmaj dialogoj + advanced_web_interface_hint: 'Se vi volas uzi la tutan larĝecon de via ekrano, la kompleksa reta interfaco permesas al vi agordi multajn malsamajn kolumnojn por vidi tiom da informoj kiom vi volas samtempe: Hejmo, sciigoj, fratara tempolinio, kaj ajna kvanto de listoj kaj kradvortoj.' + animations_and_accessibility: Animacioj kaj alirebleco + confirmation_dialogs: Konfirmaj fenestroj + discovery: Eltrovo sensitive_content: Tikla enhavo + toot_layout: Mesaĝo aranĝo application_mailer: notification_preferences: Ŝanĝi retmesaĝajn preferojn salutation: "%{name}," @@ -518,9 +568,12 @@ eo: apply_for_account: Peti inviton change_password: Pasvorto checkbox_agreement_html: Mi samopinii al la <a href="%{rules_path}" target="_blank">Servo reguloj</a> kaj <a href="%{terms_path}" target="_blank">kondiĉo al servadon</a> - confirm_email: Konfirmi retadreson + checkbox_agreement_without_rules_html: Mi konsenti la <a href="%{terms_path}" target="_blank">reguloj de servado</a> delete_account: Forigi konton delete_account_html: Se vi deziras forigi vian konton, vi povas <a href="%{path}">fari tion ĉi tie</a>. Vi bezonos konfirmi vian peton. + description: + prefix_invited_by_user: "@%{name} invitigi vin aligiĝi ĉi tiu servilo de Mastodon!" + prefix_sign_up: Registriĝi ĉe Mastodon hodiaŭ! didnt_get_confirmation: Ĉu vi ne ricevis la instrukciojn por konfirmi? forgot_password: Pasvorto forgesita? invalid_reset_password_token: Ĵetono por restarigi pasvorton nevalida aŭ eksvalida. Bonvolu peti novan. @@ -538,6 +591,11 @@ eo: reset_password: Ŝanĝi pasvorton security: Sekureco set_new_password: Elekti novan pasvorton + setup: + title: Agordi + status: + account_status: Statuso de la konto + functional: Via konto estas plene funkcianta. trouble_logging_in: Ĝeni ensaluti? authorize_follow: already_following: Vi jam sekvas tiun konton @@ -550,6 +608,10 @@ eo: return: Montri la profilon de la uzanto web: Iri al reto title: Sekvi %{acct} + challenge: + confirm: Daŭrigi + invalid_password: Nevalida pasvorto + prompt: Konfirmi pasvorton por daŭrigi datetime: distance_in_words: about_x_hours: "%{count}h" @@ -565,26 +627,21 @@ eo: x_months: "%{count}mo" x_seconds: "%{count}s" deletes: - bad_password_msg: Malĝusta pasvorto confirm_password: Enmetu vian nunan pasvorton por konfirmi vian identecon - description_html: Tio <strong>porĉiame kaj neŝanĝeble</strong> forigos la enhavon de via konto kaj malaktivigos ĝin. Via uzantnomo restos rezervita por eviti postajn trompojn pri identeco. + confirm_username: Enigi vian uzantnomon por konfirmi la procedo proceed: Forigi konton success_msg: Via konto estis sukcese forigita - warning_html: La forigo de la enhavo estas certa nur por ĉi tiu aparta servilo. Enhavo, kiu estis disvastigita verŝajne lasos spurojn. Eksterretaj serviloj kaj serviloj, kiuj ne abonas viajn ĝisdatigojn ne ĝisdatigos siajn datumbazojn. - warning_title: Disponebleco de disvastigita enhavo directories: directory: Profilujo - enabled: Vi estas listigata en la profilujo. - enabled_but_waiting: Vi elektis esti listigata en la profilujo, sed vi ankoraŭ ne havas la minimuman kvanton da sekvantoj (%{min_followers}) por esti listigata. explanation: Malkovru uzantojn per iliaj interesoj explore_mastodon: Esplori %{title} - how_to_enable: Vi ankoraŭ ne donis permeson listigi vin en la profilujo. Vi povas doni permeson ĉi-sube. Uzu kradvortojn en via biografia teksto por esti listigata sub specifaj kradvortoj! - people: - one: "%{count} persono" - other: "%{count} personoj" + domain_validator: + invalid_domain: ne estas valida domajna nomo errors: + '400': The request you submitted was invalid or malformed. '403': Vi ne havas la rajton por vidi ĉi tiun paĝon. '404': La paĝo ke kiun vi serĉas ne ekzistas ĉi tie. + '406': This page is not available in the requested format. '410': La paĝo, kiun vi serĉas, ne plu ekzistas ĉi tie. '422': content: Sekureca konfirmo malsukcesa. Ĉu vi blokas kuketojn? @@ -593,6 +650,7 @@ eo: '500': content: Ni bedaŭras, io malsukcesis niaflanke. title: Ĉi tiu paĝo ne estas ĝusta + '503': The page could not be served due to a temporary server failure. noscript_html: |- Por uzi la retan aplikaĵon de Mastodon, bonvolu ebligi JavaScript. Alimaniere, provu unu el la <a href="%{apps_path}">operaciumaj aplikaĵoj</a> por Mastodon por via platformo. @@ -618,6 +676,7 @@ eo: add_new: Aldoni novan errors: limit: Vi jam elstarigis la maksimuman kvanton da kradvortoj + hint_html: "<strong>Kio estas la trajtaj kradvortoj?</strong> Ili bone videblas en via publika profilo kaj permesas al homoj trarigardi viajn publikajn mesaĝojn specife laŭ tiuj kradvortoj. Ili estas bonaj iloj por sekvi la evoluon de kreadaj laboroj aŭ longdaŭraj projektoj." filters: contexts: home: Hejma templinio @@ -638,6 +697,7 @@ eo: developers: Programistoj more: Pli… resources: Rimedoj + trending_now: Nunaj furoraĵoj generic: all: Ĉio changes_saved_msg: Ŝanĝoj sukcese konservitaj! @@ -648,7 +708,7 @@ eo: one: Io mise okazis! Bonvolu konsulti la suban erar-raporton other: Io mise okazis! Bonvolu konsulti la subajn %{count} erar-raportojn html_validator: - invalid_markup: 'havas malvalida HTML markado: %{error}' + invalid_markup: 'havas nevalidan HTML-markadon: %{error}' identity_proofs: active: Aktiva authorize: Jes, permesi @@ -713,9 +773,16 @@ eo: too_many: Aldoni pli ol 4 dosierojn ne eblas migrations: acct: uzantnomo@domajno de la nova konto - currently_redirecting: 'Via profilo alidirektos al:' - proceed: Konservi - updated_msg: Via agordo pri konta migrado estis sukcese ĝisdatigita! + cancel: Nuligi alidirekton + errors: + already_moved: estas la saman konton vi jam translokiĝis al + not_found: ne povis trovi + on_cooldown: Vi estas ĉe malvarmiĝi + followers_count: Sekvantoj en la momento de moviĝo + incoming_migrations: Movi el alian konton + past_migrations: Pasintaj translokaj + proceed_with_move: Translokigi sekvantoj + set_redirect: Agordi alidirekton moderation: title: Kontrolado notification_mailer: @@ -780,14 +847,20 @@ eo: too_many_options: ne povas enhavi pli da %{max} proponoj preferences: other: Aliaj aferoj + posting_defaults: Afiŝadoj defaŭltoj + public_timelines: Publikaj templinioj relationships: + activity: Konta aktiveco dormant: Dormanta - last_active: Lasta aktiva + last_active: Laste aktiva most_recent: Plej lasta moved: Moviĝita mutual: Reciproka primary: Primara relationship: Rilato + remove_selected_domains: Forigi ĉiuj sekvantojn el la selektitajn domajnojn + remove_selected_followers: Forigi selektitajn sekvantojn + remove_selected_follows: Ne plu sekvi elektitajn uzantojn status: Statuso de la konto remote_follow: acct: Enmetu vian uzantnomo@domajno de kie vi volas agi @@ -806,10 +879,6 @@ eo: reply: proceed: Konfirmi la respondon prompt: 'Vi volas respondi al ĉi tiu mesaĝo:' - remote_unfollow: - error: Eraro - title: Titolo - unfollowed: Ne plu sekvita scheduled_statuses: over_daily_limit: Vi transpasis la limigon al %{limit} samtage planitaj mesaĝoj over_total_limit: Vi transpasis la limigon al %{limit} planitaj mesaĝoj @@ -858,6 +927,7 @@ eo: settings: account: Konto account_settings: Agordoj de konto + aliases: Kontoj alinomoj appearance: Apero authorized_apps: Rajtigitaj aplikaĵoj back: Reveni al Mastodon @@ -898,6 +968,9 @@ eo: private: Mesaĝo nepublika ne povas esti alpinglita reblog: Diskonigo ne povas esti alpinglita poll: + total_people: + one: "%{count} persono" + other: "%{count} personoj" total_votes: one: "%{count} voĉdono" other: "%{count} voĉdonoj" @@ -953,6 +1026,7 @@ eo: silence: Dum via konto estas limigita, nur tiuj, kiuj jam sekvas vin, vidos viajn mesaĝojn en ĉi tiu servilo, kaj vi povus esti ekskludita de diversaj publikaj listoj. Tamen, aliaj ankoraŭ povas mane sekvi vin. suspend: Via konto estis haltigita, kaj ĉiuj el viaj mesaĝoj kaj alŝutitaj aŭdovidaj dosieroj estis nemalfareble forigitaj de ĉi tiu servilo, kaj de la serviloj, kie vi havis sekvantojn. review_server_policies: Superrigardi servilajn politikojn + statuses: 'Specife, per:' subject: disable: Via konto %{acct} estas frostigita none: Averto por %{acct} diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml new file mode 100644 index 000000000..0af0c04bd --- /dev/null +++ b/config/locales/es-AR.yml @@ -0,0 +1,1212 @@ +--- +es-AR: + about: + about_hashtag_html: Estos son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Si tenés una cuenta en cualquier parte del fediverso, podés interactuar con ellos. + about_mastodon_html: Mastodon es una red social basada en protocolos abiertos de la web y es software libre y de código abierto. Es descentralizada, como el correo electrónico. + about_this: Acerca de Mastodon + active_count_after: activo + active_footnote: Usuarios activos mensualmente (MAU) + administered_by: 'Administrado por:' + api: API + apps: Aplicaciones móviles + apps_platforms: Usá Mastodon desde iOS, Android y otras plataformas + browse_directory: Explorá el directorio de perfiles y filtrá por intereses + browse_local_posts: Explorá un flujo en tiempo real de toots públicos en este servidor + browse_public_posts: Explorá un flujo en tiempo real de toots públicos en Mastodon + contact: Contacto + contact_missing: No establecido + contact_unavailable: No disponible + discover_users: Descubrir usuarios + documentation: Documentación + federation_hint_html: Con una cuenta en %{instance} vas a poder seguir a gente de cualquier servidor de Mastodon y más allá. + get_apps: Probá una aplicación móvil + hosted_on: Mastodon alojado en %{domain} + instance_actor_flash: | + Esta cuenta es un actor virtual usado para representar al propio servidor y no a ningún usuario individual. + Se usa para fines federativos y no debe ser bloqueado a menos que quieras bloquear toda la instancia, en cuyo caso deberías usar un bloqueo de dominio. + learn_more: Aprendé más + privacy_policy: Política de privacidad + see_whats_happening: Esto es lo que está pasando ahora + server_stats: 'Estadísticas del servidor:' + source_code: Código fuente + status_count_after: + one: estado + other: estados + status_count_before: Que enviaron + tagline: Seguí a tus amigos y descubrí nueva gente + terms: Términos del servicio + unavailable_content: Contenido no disponible + unavailable_content_description: + domain: Servidor + reason: Razón + rejecting_media: 'Los archivos de medios de este servidor no van a ser procesados y no se mostrarán miniaturas, lo que requiere un clic manual hacia el archivo original:' + silenced: 'Los toots de estos servidores se ocultarán en las líneas temporales y conversaciones públicas, y no se generarán notificaciones de las interacciones de sus usuarios, a menos que los estés siguiendo:' + suspended: 'No se procesarán, almacenarán o intercambiarán datos de estos servidores, haciendo imposible cualquier interacción o comunicación con los usuarios de estos servidores:' + unavailable_content_html: Mastodon generalmente te permite ver contenido e interactuar con usuarios de cualquier otro servidor en el fediverso. Estas son las excepciones que se hicieron en este servidor en particular. + user_count_after: + one: usuario + other: usuarios + user_count_before: Hogar de + what_is_mastodon: "¿Qué es Mastodon?" + accounts: + choices_html: 'Recomendados de %{name}:' + endorsements_hint: Podés recomendar a gente que seguís desde la interface web, y van a aparecerán acá. + featured_tags_hint: Podés destacar etiquetas específicas que se mostrarán acá. + follow: Seguir + followers: + one: Seguidor + other: Seguidores + following: Siguiendo + joined: Se unió en %{date} + last_active: última actividad + link_verified_on: La propiedad de este enlace fue verificada el %{date} + media: Medios + moved_html: "%{name} se mudó a %{new_profile_link}:" + network_hidden: Esta información no está disponible + never_active: Nunca + nothing_here: "¡No hay nada acá!" + people_followed_by: "%{name} sigue a estas personas" + people_who_follow: Estas personas siguen a %{name} + pin_errors: + following: Ya tenés que estar siguiendo a la persona que querés recomendar + posts: + one: Toot + other: Toots + posts_tab_heading: Toots + posts_with_replies: Toots con respuestas + reserved_username: El nombre de usuario está reservado + roles: + admin: Administrador + bot: Bot + moderator: Moderador + unavailable: Perfil no disponible + unfollow: Dejar de seguir + admin: + account_actions: + action: Ejecutar acción + title: Ejecutar acción de moderación en %{acct} + account_moderation_notes: + create: Dejar nota + created_msg: "¡Nota de moderación creada exitosamente!" + delete: Eliminar + destroyed_msg: "¡Nota de moderación destruída exitosamente!" + accounts: + approve: Aprobar + approve_all: Aprobar todas + are_you_sure: "¿Estás seguro?" + avatar: Avatar + by_domain: Dominio + change_email: + changed_msg: "¡Correo electrónico de cuenta cambiado exitosamente!" + current_email: Correo electrónico actual + label: Cambiar correo electrónico + new_email: Nuevo correo electrónico + submit: Cambiar correo electrónico + title: Cambiar correo electrónico para %{username} + confirm: Confirmar + confirmed: Confirmado + confirming: Confirmando + deleted: Eliminado + demote: Bajar de nivel + disable: Deshabilitar + disable_two_factor_authentication: Deshabilitar 2FA + disabled: Deshabilitada + display_name: Nombre para mostrar + domain: Dominio + edit: Editar + email: Correo electrónico + email_status: Estado del correo + enable: Habilitar + enabled: Habilitada + feed_url: Dirección de la fuente web + followers: Seguidores + followers_url: Dirección web de los seguidores + follows: Seguidores + header: Cabecera + inbox_url: Dirección web de la bandeja de entrada + invited_by: Invitado por + ip: Dirección IP + joined: Se unió en + location: + all: Todas + local: Local + remote: Remota + title: Ubicación + login_status: Estado del inicio de sesión + media_attachments: Adjuntos + memorialize: Convertir en recordatorio + moderation: + active: Activa + all: Todas + pending: Pendiente + silenced: Silenciados + suspended: Suspendidos + title: Moderación + moderation_notes: Notas de moderación + most_recent_activity: Actividad más reciente + most_recent_ip: Direcciones IP más recientes + no_account_selected: No se cambió ninguna cuenta ya que ninguna fue seleccionada + no_limits_imposed: Sin límites impuestos + not_subscribed: No suscripto + outbox_url: Dirección web de la bandeja de salida + pending: Revisión pendiente + perform_full_suspension: Suspender + profile_url: Dirección web del perfil + promote: Promocionar + protocol: Protocolo + public: Pública + push_subscription_expires: La suscripción PuSH vence + redownload: Recargar perfil + reject: Rechazar + reject_all: Rechazar todas + remove_avatar: Quitar avatar + remove_header: Quitar cabecera + resend_confirmation: + already_confirmed: Este usuario ya está confirmado + send: Reenviar correo electrónico de confirmación + success: "¡Correo electrónico de confirmación enviado exitosamente!" + reset: Restablecer + reset_password: Cambiar contraseña + resubscribe: Resuscribir + role: Permisos + roles: + admin: Administrador + moderator: Moderador + staff: Equipo + user: Usuario + search: Buscar + search_same_ip: Otros usuarios con la misma dirección IP + shared_inbox_url: Dirección web de la bandeja de entrada compartida + show: + created_reports: Informes hechos + targeted_reports: Denunciado por otros + silence: Silenciar + silenced: Silenciadas + statuses: Estados + subscribe: Suscribirse + suspended: Suspendidas + title: Cuentas + unconfirmed_email: Correo electrónico sin confirmar + undo_silenced: Deshacer silenciado + undo_suspension: Deshacer suspensión + unsubscribe: Desuscribirse + username: Nombre de usuario + warn: Advertir + web: Web + whitelisted: Aprobadas + action_logs: + actions: + assigned_to_self_report: "%{name} se asignó la denuncia %{target} a sí" + change_email_user: "%{name} cambió la dirección de correo electrónico del usuario %{target}" + confirm_user: "%{name} confirmó la dirección de correo del usuario %{target}" + create_account_warning: "%{name} envió una advertencia a %{target}" + create_custom_emoji: "%{name} subió nuevo emoji %{target}" + create_domain_allow: "%{name} aprobó el dominio %{target}" + create_domain_block: "%{name} bloqueó el dominio %{target}" + create_email_domain_block: "%{name} desaprobó el dominio de correo electrónico %{target}" + demote_user: "%{name} bajó de nivel al usuario %{target}" + destroy_custom_emoji: "%{name} destruyó el emoji %{target}" + destroy_domain_allow: "%{name} quitó el dominio %{target} de los permitidos" + destroy_domain_block: "%{name} desbloqueó el dominio %{target}" + destroy_email_domain_block: "%{name} aprobó el dominio de correo electrónico %{target}" + destroy_status: "%{name} eliminó el estado de %{target}" + disable_2fa_user: "%{name} deshabilitó el requerimiento de dos factores para el usuario %{target}" + disable_custom_emoji: "%{name} deshabilitó el emoji %{target}" + disable_user: "%{name} deshabilitó el inicio de sesión para el usuario %{target}" + enable_custom_emoji: "%{name} habilitó el emoji %{target}" + enable_user: "%{name} habilitó el inicio de sesión para el usuario %{target}" + memorialize_account: "%{name} convirtió la cuenta de %{target} en una página de recordatorio" + remove_avatar_user: "%{name} quitó el avatar de %{target}" + reopen_report: "%{name} reabrió la denuncia %{target}" + reset_password_user: "%{name} cambió la contraseña del usuario %{target}" + resolve_report: "%{name} resolvió la denuncia %{target}" + silence_account: "%{name} silenció la cuenta de %{target}" + suspend_account: "%{name} suspendió la cuenta de %{target}" + unassigned_report: "%{name} desasignó la denuncia %{target}" + unsilence_account: "%{name} quitó el silenciado de la cuenta de %{target}" + unsuspend_account: "%{name} quitó la suspensión de la cuenta de %{target}" + update_custom_emoji: "%{name} actualizó el emoji %{target}" + update_status: "%{name} actualizó el estado de %{target}" + deleted_status: "(estado borrado)" + title: Registro de auditoría + custom_emojis: + assign_category: Asignar categoría + by_domain: Dominio + copied_msg: Copia local del emoji creada exitosamente + copy: Copiar + copy_failed_msg: No se pudo realizar una copia local de ese emoji + create_new_category: Crear nueva categoría + created_msg: "¡Emoji creado exitosamente!" + delete: Eliminar + destroyed_msg: "¡Emoji destruido exitosamente!" + disable: Deshabilitar + disabled: Deshabilitado + disabled_msg: Se deshabilitó ese emoji exitosamente + emoji: Emoji + enable: Habilitar + enabled: Habilitado + enabled_msg: Se habilitó ese emoji exitosamente + image_hint: PNG de hasta 50KB + list: Lista + listed: Listados + new: + title: Agregar nuevo emoji personalizado + overwrite: Sobreescribir + shortcode: Código corto + shortcode_hint: Al menos 2 caracteres, sólo caracteres alfanuméricos y subguiones ("_") + title: Emojis personalizados + uncategorized: Sin categoría + unlist: No agregar a lista + unlisted: No listado + update_failed_msg: No se pudo actualizar ese emoji + updated_msg: "¡Emoji actualizado exitosamente!" + upload: Subir + dashboard: + authorized_fetch_mode: Modo seguro + backlog: trabajos registrados + config: Configuración + feature_deletions: Eliminaciones de cuenta + feature_invites: Enlaces de invitación + feature_profile_directory: Directorio de perfiles + feature_registrations: Registros + feature_relay: Relé de federación + feature_spam_check: Anti-spam + feature_timeline_preview: Previsualización de la línea temporal + features: Funciones + hidden_service: Federación con servicios ocultos + open_reports: abrir denuncias + pending_tags: etiquetas esperando revisión + pending_users: usuarios esperando revisión + recent_users: Usuarios recientes + search: Búsqueda de texto completo + single_user_mode: Modo de usuario único + software: Software + space: Uso del espacio + title: Panel + total_users: usuarios en total + trends: Tendencias + week_interactions: interacciones esta semana + week_users_active: activos esta semana + week_users_new: usuarios esta semana + whitelist_mode: Modo de aprobación + domain_allows: + add_new: Aprobar dominio + created_msg: El dominio se aprobó exitosamente + destroyed_msg: El dominio no se aprobó + undo: No aprobado + domain_blocks: + add_new: Agregar nuevo bloquedo de dominio + created_msg: Ahora se está procesando el bloquedo de dominio + destroyed_msg: Se deshizo el bloqueo de dominio + domain: Dominio + edit: Editar bloqueo de dominio + existing_domain_block_html: Ya le aplicaste límites más estrictos a %{name}, por lo que primero necesitás <a href="%{unblock_url}">desbloquearlo</a>. + new: + create: Crear bloqueo + hint: El bloqueo de dominio no va a prevenir la creación de toots de cuenta en la base de datos, pero se aplicarán métodos específicos de moderación en esas cuentas, retroactiva y automáticamente. + severity: + desc_html: "<strong>Silenciar</strong> hará que los toots de la cuenta sean invisibles a quienes no estén siguiendo esa cuenta. <strong>Suspender</strong> quitará todo el contenido, archivos de medio y datos de perfil de la cuenta. Usá <strong>Ninguno</strong> si simplemente querés rechazar archivos de medios." + noop: Ninguno + silence: Silenciar + suspend: Suspender + title: Nuevo bloquedo de dominio + private_comment: Comentario privado + private_comment_hint: Comentario sobre la limitación de este dominio, para uso interno de los moderadores. + public_comment: Comentario público + public_comment_hint: Comentario sobre la limitación de este dominio para el público en general, si está habilitada la publicación de lista de limitaciones de dominio. + reject_media: Rechazar archivos de medio + reject_media_hint: Quita los archivos de medio almacenados e impide la descarga en el futuro. Irrelevante para suspensiones. + reject_reports: Rechazar denuncias + reject_reports_hint: Ignora todas las denuncias que vengan de este dominio. Irrelevante para suspensiones. + rejecting_media: rechazando archivos de medio + rejecting_reports: rechazando denuncias + severity: + silence: silenciado + suspend: suspendido + show: + affected_accounts: + one: Una cuenta afectada en la base de datos + other: "%{count} cuentas afectadas en la base de datos" + retroactive: + silence: Quitar silenciado de las cuentas existentes afectadas de este dominio + suspend: Quitar suspensión de las cuentas existentes afectadas de este dominio + title: Deshacer el bloqueo de dominio para %{domain} + undo: Deshacer + undo: Deshacer bloqueo de dominio + view: Ver bloqueo de dominio + email_domain_blocks: + add_new: Agregar nuevo + created_msg: Se desaprobó dominio de correo electrónico exitosamente + delete: Eliminar + destroyed_msg: Se aprobó dominio de correo electrónico exitosamente + domain: Dominio + new: + create: Agregar dominio + title: Nueva desaprobación de correo electrónico + title: Desaprobación de correo electrónico + followers: + back_to_account: Volver a la cuenta + title: Seguidores de %{acct} + instances: + by_domain: Dominio + delivery_available: La entrega está disponible + known_accounts: + one: "%{count} cuenta conocida" + other: "%{count} cuentas conocidas" + moderation: + all: Todas + limited: Limitadas + title: Moderación + private_comment: Comentario privado + public_comment: Comentario público + title: Federación + total_blocked_by_us: Bloqueada por nosotros + total_followed_by_them: Seguidos por ellos + total_followed_by_us: Seguidos por nosotros + total_reported: Denuncias sobre ellos + total_storage: Adjuntos + invites: + deactivate_all: Desactivar todas + filter: + all: Todas + available: Disponibles + expired: Vencidas + title: Filtrar + title: Invitaciones + pending_accounts: + title: Cuentas pendientes (%{count}) + relays: + add_new: Agregar nuevo relé + delete: Eliminar + description_html: Un <strong>relé de federación</strong> es un servidor intermedio que intercambia grandes volúmenes de toots públicos entre servidores que se suscriben y publican en él. <strong>Puede ayudar a servidores chicos y medianos a descubrir contenido del fediverso</strong>, que de otra manera requeriría que los usuarios locales siguiesen manualmente a personas de servidores remotos. + disable: Deshabilitar + disabled: Deshabilitado + enable: Habilitar + enable_hint: Una vez habilitado, tu servidor se suscribirá a todos los toots públicos desde este relé, y comenzará a enviar los toots públicos de este servidor al relé. + enabled: Habilitado + inbox_url: Dirección web del relé + pending: Esperando aprobación del relé + save_and_enable: Guardar y habilitar + setup: Configurar una conexión de relé + signatures_not_enabled: Los relés no funcionarán correctamente mientras el modo seguro o el de aprobación estén habilitados + status: Estado + title: Relés + report_notes: + created_msg: "¡La nota de denuncia fue creada exitosamente!" + destroyed_msg: "¡La nota de denuncia fue eliminada exitosamente!" + reports: + account: + note: nota + report: denuncia + action_taken_by: Acción tomada por + are_you_sure: "¿Estás seguro?" + assign_to_self: Asignármela a mí + assigned: Moderador asignado + comment: + none: Ninguno + created_at: Denunciado + mark_as_resolved: Marcar como resuelta + mark_as_unresolved: Marcar como no resuelta + notes: + create: Agregar nota + create_and_resolve: Resolver con nota + create_and_unresolve: Reabrir con nota + delete: Eliminar + placeholder: Describí qué acciones se tomaron, o cualquier otra actualización relacionada… + reopen: Reabrir denuncia + report: 'Denunciar #%{id}' + reported_account: Cuenta denunciada + reported_by: Denunciada por + resolved: Resuelta + resolved_msg: "¡Denuncia exitosamente resuelta!" + status: Estado + title: Denuncias + unassign: Desasignar + unresolved: No resuelta + updated_at: Actualizada + settings: + activity_api_enabled: + desc_html: Conteos de estados publicados localmente, usuarios activos y nuevos registros en tandas semanales + title: Publicar estadísticas agregadas sobre la actividad del usuario + bootstrap_timeline_accounts: + desc_html: Separar múltiples nombres de usuario con coma. Sólo funcionarán las cuentas locales y desbloqueadas. Predeterminadamente, cuando está vacío todos los administradores locales. + title: Seguimientos predeterminados para usuarios nuevos + contact_information: + email: Correo electrónico de negocios + username: Nombre de usuario de contacto + custom_css: + desc_html: Modificá la apariencia con CSS cargado en cada página + title: CSS personalizado + default_noindex: + desc_html: Afecta a todos los usuarios que no cambiaron esta configuración por sí mismos + title: Quitar predeterminadamente a los usuarios de la indexación de los motores de búsqueda + domain_blocks: + all: A todos + disabled: A nadie + title: Mostrar dominios bloqueados + users: A usuarios locales con sesiones abiertas + hero: + desc_html: Mostrado en la página principal. Se recomienda un tamaño mínimo de 600x100 píxeles. Predeterminadamente se establece a la miniatura del servidor. + title: Imagen de portada + mascot: + desc_html: Mostrado en múltiples páginas. Se recomienda un tamaño mínimo de 293x205 píxeles. Cuando no se especifica, se muestra la mascota predeterminada. + title: Imagen de la mascota + peers_api_enabled: + desc_html: Nombres de dominio que este servidor encontró en el fediverso + title: Publicar lista de servidores descubiertos + preview_sensitive_media: + desc_html: Los enlaces de previsualizaciones en otros sitios web mostrarán una miniatura incluso si el medio está marcado como contenido sensible + title: Mostrar medios sensibles en previsualizaciones de OpenGraph + profile_directory: + desc_html: Permitir que los usuarios puedan ser descubiertos + title: Habilitar directorio de perfiles + registrations: + closed_message: + desc_html: Mostrado en la portada cuando los registros están cerrados. Podés usar etiquetas HTML. + title: Mensaje de registro cerrado + deletion: + desc_html: Permitor que cualquiera elimine su cuenta + title: Abrir eliminación de cuenta + min_invite_role: + disabled: Nadie + title: Permitir invitaciones de + registrations_mode: + modes: + approved: Se requiere aprobación para registrarse + none: Nadie puede registrarse + open: Cualquiera puede registrarse + title: Modo de registros + show_known_fediverse_at_about_page: + desc_html: Cuando está deshabilitado, restringe la línea temporal pública enlazada desde la página de inicio para mostrar sólo contenido local + title: Incluir contenido federado en la página de línea temporal pública no autenticada + show_staff_badge: + desc_html: Mostrar una insignia de equipo en la página de un usuario + title: Mostrar insignia de equipo + site_description: + desc_html: Párrafo introductorio en la API. Describe qué hace especial a este servidor de Mastodon y todo lo demás que sea importante. Podés usar etiquetas HTML, en particular <code><a></code> y <code><em></code>. + title: Descripción del servidor + site_description_extended: + desc_html: Un buen lugar para tu código de conducta, reglas, guías y otras cosas que definen tu servidor. Podés usar etiquets HTML. + title: Información extendida personalizada + site_short_description: + desc_html: Mostrado en la barra lateral y las etiquetas de metadatos. Describe lo que es Mastodon y qué hace especial a este servidor en un solo párrafo. + title: Descripción corta del servidor + site_terms: + desc_html: Podés escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Podés usar etiquetas HTML. + title: Términos de servicio personalizados + site_title: Nombre del servidor + spam_check_enabled: + desc_html: Mastodon puede denunciar automáticamente cuentas que envían mensajes no solicitados de forma repetida. Podrían haber falsos positivos. + title: Automatización antispam + thumbnail: + desc_html: Usado para previsualizaciones vía OpenGraph y APIs. Se recomienda 1200x630 píxeles. + title: Miniatura del servidor + timeline_preview: + desc_html: Mostrar enlace a la línea temporal pública en la página de inicio y permitir el acceso a la API a la línea temporal pública sin autenticación + title: Permitir acceso no autorizado a la línea temporal pública + title: Configuración del sitio + trendable_by_default: + desc_html: Afecta a etiquetas que no fueron rechazadas previamente + title: Permitir que las etiquetas sean tendencia sin revisión previa + trends: + desc_html: Mostrar públicamente etiquetas previamente revisadas que son tendencia actualmente + title: Etiquetas tendencias + statuses: + back_to_account: Volver a la página de la cuenta + batch: + delete: Eliminar + nsfw_off: Marcar contenido como no sensible + nsfw_on: Marcar contenido como sensible + deleted: Eliminado + failed_to_execute: Falló al ejecutar + media: + title: Medios + no_media: Sin medios + no_status_selected: No se cambió ningún estado ya que ninguno fue seleccionado + title: Estados de la cuenta + with_media: Con medios + tags: + accounts_today: Usos únicos de hoy + accounts_week: Usos únicos esta semana + breakdown: Desglose del consumo de hoy por fuentes + context: Contexto + directory: En el directorio + in_directory: "%{count} en el directorio" + last_active: Última actividad + most_popular: Lo más popular + most_recent: Lo más reciente + name: Etiqueta + review: Estado de revisión + reviewed: Revisado + title: Etiquetas + trending_right_now: En tendencia ahora mismo + unique_uses_today: "%{count} toots hoy" + unreviewed: No revisado + updated_msg: La configuración de la etiqueta se actualizó exitosamente + title: Administración + warning_presets: + add_new: Agregar nuevo + delete: Eliminar + edit: Editar + edit_preset: Editar preajuste de advertencia + title: Administrar preajustes de advertencia + admin_mailer: + new_pending_account: + body: Abajo están los detalles de la nueva cuenta. Podés aprobar o rechazar esta aplicación. + subject: Nueva cuenta para revisión en %{instance} (%{username}) + new_report: + body: "%{reporter} denunció a %{target}" + body_remote: Alguien de %{domain} denunció a %{target} + subject: Nueva denuncia para %{instance} (#%{id}) + new_trending_tag: + body: 'La etiqueta #%{name} está en tendencia hoy, pero no fue revisada previamente. No se mostrará públicamente a menos que lo permitas, o si no simplemente guardá el formulario como está para no volver a ver esto.' + subject: Nueva etiqueta para revisión en %{instance} (#%{name}) + aliases: + add_new: Crear alias + created_msg: El nuevo alias se creó exitosamente. Ahora podés empezar la mudanza desde la cuenta vieja. + deleted_msg: Eliminaste el alias exitosamente. La mudanza de esa cuenta a esta ya no será posible. + hint_html: Si querés mudarte desde otra cuenta a esta, acá podés crear un alias, el cual es necesario antes de empezar a mudar seguidores de la cuenta vieja a esta. Esta acción por sí misma es <strong>inofensiva y reversible</strong>. <strong>La migración de la cuenta se inicia desde la cuenta anterior</strong>. + remove: Desenlazar alias + appearance: + advanced_web_interface: Interface web avanzada + advanced_web_interface_hint: 'Si querés hacer uso de todo el ancho de tu pantalla, la interface web avanzada te permite configurar varias columnas diferentes para ver tanta información al mismo tiempo como quieras: "Principal", "Notificaciones", "Línea temporal federada", y cualquier número de listas y etiquetas.' + animations_and_accessibility: Animaciones y accesibilidad + confirmation_dialogs: Diálogos de confirmación + discovery: Descubrimiento + sensitive_content: Contenido sensible + toot_layout: Diseño del toot + application_mailer: + notification_preferences: Cambiar configuración de correo electrónico + salutation: "%{name}:" + settings: 'Cambiar configuración de correo electrónico: %{link}' + view: 'Vista:' + view_profile: Ver perfil + view_status: Ver estado + applications: + created: Aplicación creada exitosamente + destroyed: Apicación eliminada exitosamente + invalid_url: La dirección web ofrecida no es válida + regenerate_token: Regenerar clave de acceso + token_regenerated: Clave de acceso regenerada exitosamente + warning: Ojo con estos datos. ¡Nunca los compartas con nadie! + your_token: Tu clave de acceso + auth: + apply_for_account: Solicitar una invitación + change_password: Contraseña + checkbox_agreement_html: Acepto las <a href="%{rules_path}" target="_blank">reglas del servidor</a> y los <a href="%{terms_path}" target="_blank">términos del servicio</a> + checkbox_agreement_without_rules_html: Acepto los <a href="%{terms_path}" target="_blank">términos del servicio</a> + delete_account: Eliminar cuenta + delete_account_html: Si querés eliminar tu cuenta, podés <a href="%{path}">seguí por acá</a>. Se te va a pedir una confirmación. + description: + prefix_invited_by_user: "¡@%{name} te invita para que te unás a este servidor de Mastodon!" + prefix_sign_up: "¡Unite a Mastodon hoy!" + suffix: Con una cuenta vas a poder seguir gente, escribir estados e intercambiar mensajes ¡con usuarios de cualquier servidor de Mastodon y más! + didnt_get_confirmation: "¿No recibiste el correo electrónico de confirmación?" + forgot_password: "¿Te olvidaste la contraseña?" + invalid_reset_password_token: La clave para cambiar la contraseña no es válida o venció. Por favor, solicitá una nueva. + login: Iniciar sesión + logout: Cerrar sesión + migrate_account: Mudarse a otra cuenta + migrate_account_html: Si querés redireccionar esta cuenta a otra distinta, podés <a href="%{path}">configurar eso acá</a>. + or_log_in_with: O iniciar sesión con + providers: + cas: CAS + saml: SAML + register: Registrarse + registration_closed: "%{instance} no está aceptando nuevos miembros" + resend_confirmation: Reenviar correo electrónico de confirmación + reset_password: Cambiar contraseña + security: Seguridad + set_new_password: Establecer nueva contraseña + setup: + email_below_hint_html: Si la dirección de correo electrónico que aparece a continuación es incorrecta, podés cambiarla acá y recibir un nuevo correo electrónico de confirmación. + email_settings_hint_html: Se envió el correo electrónico de confirmación a %{email}. Si esa dirección de correo electrónico no es correcta, podés cambiarla en la configuración de la cuenta. + title: Configuración + status: + account_status: Estado de la cuenta + confirming: Esperando confirmación de correo electrónico. + functional: Tu cuenta está totalmente operativa. + pending: Tu solicitud está pendiente de revisión por nuestro equipo. Eso puede tardar algún tiempo. Si se aprueba tu solicitud, vas a recibir un correo electrónico. + redirecting_to: Tu cuenta se encuentra inactiva porque está siendo redirigida a %{acct}. + trouble_logging_in: "¿Tenés problemas para iniciar sesión?" + authorize_follow: + already_following: Ya estás siguiendo a esta cuenta + error: Lamentablemente, ocurrió un error buscando la cuenta remota + follow: Seguir + follow_request: 'Enviaste una solicitud de seguimiento a:' + following: "¡Listo! Ahora estás siguiendo a:" + post_follow: + close: O simplemente podés cerrar esta ventana. + return: Mostrar el perfil del usuario + web: Ir a la web + title: Seguir a %{acct} + challenge: + confirm: Continuar + hint_html: "<strong>Dato:</strong> No volveremos a preguntarte por la contraseña durante la siguiente hora." + invalid_password: Contraseña no válida + prompt: Confirmar contraseña para seguir + datetime: + distance_in_words: + about_x_hours: "%{count}h" + about_x_months: "%{count}m" + about_x_years: "%{count}a" + almost_x_years: "%{count}a" + half_a_minute: Recién + less_than_x_minutes: "%{count}m" + less_than_x_seconds: Recién + over_x_years: "%{count}a" + x_days: "%{count}d" + x_minutes: "%{count}m" + x_months: "%{count}m" + x_seconds: "%{count}s" + deletes: + challenge_not_passed: La información que ingresaste no es correcta + confirm_password: Ingresa tu contraseña actual para verificar tu identidad + confirm_username: Ingresá tu nombre de usuario para confirmar el procedimiento + proceed: Eliminar cuenta + success_msg: Tu cuenta fue eliminada exitosamente + warning: + before: 'Antes de proceder, por favor, leé estas notas cuidadosamente:' + caches: El contenido que fue almacenado en caché por otros servidores puede persistir + data_removal: Tus toots y el resto de los datos se eliminarán definitivamente + email_change_html: Podés <a href="%{path}">cambiar tu dirección de correo electrónico</a> sin eliminar tu cuenta + email_contact_html: Si todavía no llegó, podés escribir a <a href="mailto:%{email}">%{email}</a> para pedir ayuda + email_reconfirmation_html: Si no te llegó el correo de confirmación, podés <a href="%{path}">solicitarlo de nuevo</a> + irreversible: No podrás restaurar ni reactivar tu cuenta + more_details_html: Para más detalles, leé la <a href="%{terms_path}">política de privacidad</a>. + username_available: Tu nombre de usuario volverá a estar disponible + username_unavailable: Tu nombre de usuario no estará disponible + directories: + directory: Directorio de perfiles + explanation: Descubrí usuarios basados en sus intereses + explore_mastodon: Navegá %{title} + domain_validator: + invalid_domain: no es un nombre de dominio válido + errors: + '400': La solicitud que enviaste no era válida o estaba corrompida. + '403': No tenés permiso para ver esta página. + '404': La página que estabas buscando no está acá. + '406': Esta página no está disponible en el formato solicitado. + '410': La página que estabas buscando no existe más. + '422': + content: Falló la verificación de seguridad. ¿Estás bloqueando cookies? + title: Falló la verificación de seguridad + '429': Asfixiado + '500': + content: Lo sentimos, pero algo salió mal en nuestro lado. + title: Esta página no es correcta + '503': La página no se pudo cargar debido a un fallo temporal del servidor. + noscript_html: Para usar la aplicación web de Mastodon, por favor, activá Javascript. Alternativamente, probá alguna de las <a href="%{apps_path}">aplicaciones nativas</a> de Mastodon para tu plataforma. + existing_username_validator: + not_found: no pudo encontrar un usuario local con ese nombre de usuario + not_found_multiple: no se pudo encontrar a %{usernames} + exports: + archive_takeout: + date: Fecha + download: Descargá tu archivo historial + hint_html: Podés solicitar un archivo historial de tus <strong>toots y medios subidos</strong>. Los datos exportados estarán en formato "ActivityPub", legibles por cualquier software compatible. Podés solicitar un archivo historial cada 7 días. + in_progress: Compilando tu archivo historial… + request: Solicitá tu archivo historial + size: Tamaño + blocks: Tus bloqueos + csv: CSV + domain_blocks: Dominios bloqueados + follows: Quienes seguís + lists: Listas + mutes: Quienes silenciaste + storage: Almacenamiento de medios + featured_tags: + add_new: Agregar nueva + errors: + limit: Alcanzaste el máximo de etiquetas destacadas + hint_html: "<strong>¿Qué son las etiquetas destacadas?</strong> Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus toots públicos específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo." + filters: + contexts: + home: Línea temporal principal + notifications: Notificaciones + public: Líneas temporales públicas + thread: Conversaciones + edit: + title: Editar filtro + errors: + invalid_context: Se suministró un contexto no válido o vacío + invalid_irreversible: El filtrado irreversible sólo funciona con los contextos de "Principal" o de notificaciones + index: + delete: Eliminar + title: Filtros + new: + title: Agregar nuevo filtro + footer: + developers: Desarrolladores + more: Más… + resources: Recursos + trending_now: Tendencia ahora + generic: + all: Todas + changes_saved_msg: "¡Cambios guardados exitosamente!" + copy: Copiar + no_batch_actions_available: No hay acciones por lotes disponibles en esta página + order_by: Ordenar por + save_changes: Guardar cambios + validation_errors: + one: "¡Falta algo! Por favor, revisá el error abajo" + other: "¡Falta algo! Por favor, revisá los %{count} errores abajo" + html_validator: + invalid_markup: 'contiene markup HTML no válido: %{error}' + identity_proofs: + active: Activa + authorize: Sí, autorizar + authorize_connection_prompt: "¿Autorizar esta conexión criptográfica?" + errors: + failed: Falló la conexión criptográfica. Por favor, intentá de nuevo desde %{provider}. + keybase: + invalid_token: Las claves de Keybase son hashes de firmas y deben tener 66 caracteres hexadecimales + verification_failed: Keybase no reconoce esta clave como una firma del usuario de Keybase %{kb_username}. Por favor, intentá de nuevo desde Keybase. + wrong_user: No se puede crear una prueba para %{proving} mientras se haya iniciado sesión como %{current}. Iniciá sesión como %{proving} e intentá de nuevo. + explanation_html: Acá podés conectar criptográficamente tus otras identidades, como un perfil de Keybase. Esto permite a otras personas enviarte mensajes cifrados y confiar en el contenido que les envías. + i_am_html: Soy %{username} en %{service}. + identity: Identidad + inactive: Inactiva + publicize_checkbox: 'Y tooteá esto:' + publicize_toot: "¡Comprobado! Soy %{username} en %{service}: %{url}" + status: Estado de verificación + view_proof: Ver prueba + imports: + modes: + merge: Combinar + merge_long: Mantener registros existentes y agregar nuevos + overwrite: Sobrescribir + overwrite_long: Reemplazar registros actuales con los nuevos + preface: Podés importar ciertos datos que exportaste desde otro servidor, como una lista de las personas que estás siguiendo o bloqueando. + success: Tus datos se subieron exitosamente y serán procesados en brevedad + types: + blocking: Lista de bloqueados + domain_blocking: Lista de dominios bloqueados + following: Lista de seguidos + muting: Lista de silenciados + upload: Subir + in_memoriam_html: Como recordatorio. + invites: + delete: Desactivar + expired: Vencidas + expires_in: + '1800': 30 minutos + '21600': 6 horas + '3600': 1 hora + '43200': 12 horas + '604800': 1 semana + '86400': 1 día + expires_in_prompt: Nunca + generate: Generar enlace de invitación + invited_by: 'Fuiste invitado por:' + max_uses: + one: 1 uso + other: "%{count} usos" + max_uses_prompt: Sin límite + prompt: Generar y compartir enlaces con otros para ofrecer acceso a este servidor + table: + expires_at: Vence + uses: Usos + title: Invitar a gente + lists: + errors: + limit: Alcanzaste el máximo de listas + media_attachments: + validations: + images_and_video: No se puede adjuntar un video a un estado que ya contenga imágenes + too_many: No se pueden adjuntar más de 4 archivos + migrations: + acct: Mudada a + cancel: Cancelar redireccionamiento + cancel_explanation: Al cancelar el redireccionamiento se reactivará tu cuenta actual, pero no recuperarás los seguidores que hayan sido mudados a la otra cuenta. + cancelled_msg: Se canceló exitosamente el redireccionamiento. + errors: + already_moved: es la misma cuenta a la que ya te mudaste + missing_also_known_as: no está haciendo referencia a esta cuenta + move_to_self: no puede ser la cuenta actual + not_found: no se pudo encontrar + on_cooldown: Estás en receso intermedio + followers_count: Seguidores al momento de mudarse + incoming_migrations: Mudarse desde una cuenta diferente + incoming_migrations_html: Para mudarte de otra cuenta a esta, primero necesitás <a href="%{path}">crear un alias de la cuenta</a>. + moved_msg: Ahora tu cuenta está siendo redirigida a %{acct} y tus seguidores se están mudando. + not_redirecting: Actualmente, tu cuenta no está siendo redirigida a ninguna otra cuenta. + on_cooldown: Recientemente mudaste tu cuenta. Esta función estará disponible de nuevo en %{count} días. + past_migrations: Mudanzas pasadas + proceed_with_move: Mudar seguidores + redirecting_to: Tu cuenta está siendo redirigida a %{acct}. + set_redirect: Establecer redireccionamiento + warning: + backreference_required: La nueva cuenta debe ser configurada primero para hacer referencia a esta + before: 'Antes de proceder, por favor, leé estas notas cuidadosamente:' + cooldown: Después de mudarte hay un período de receso intermedio durante el cual no podrás volver a mudarte + disabled_account: Tu cuenta actual no será completamente utilizable luego de esto. Sin embargo, tendrás acceso a la exportación de datos así como a la reactivación. + followers: Esta acción mudará a todos los seguidores de la cuenta actual a la nueva cuenta + only_redirect_html: Alternativamente, podés <a href="%{path}">poner solamente un redireccionamiento en tu perfil</a>. + other_data: No se mudarán otros datos automáticamente + redirect: El perfil de tu cuenta actual se actualizará con un aviso de redireccionamiento y será excluido de las búsquedas + moderation: + title: Moderación + notification_mailer: + digest: + action: Ver todas las notificaciones + body: Acá tenés un resumen de los mensajes que te perdiste desde tu última visita, el %{since} + mention: "%{name} te mencionó en:" + new_followers_summary: + one: Además, ¡ganaste un nuevo seguidor mientras estabas ausente! ¡Esa! + other: Además, ¡ganaste %{count} nuevos seguidores mientras estabas ausente! ¡Esssa! + subject: + one: "1 nueva notificación desde tu última visita \U0001F418" + other: "%{count} nuevas notificaciones desde tu última visita \U0001F418" + title: En tu ausencia… + favourite: + body: 'Tu estado fue marcado como favorito por %{name}:' + subject: "%{name} marcó como favorito tu estado" + title: Nuevo favorito + follow: + body: "¡%{name} te está siguiendo!" + subject: "%{name} te está siguiendo" + title: Nuevo seguidor + follow_request: + action: Administrar solicitudes de seguimiento + body: "%{name} solicitó seguirte" + subject: 'Seguidor pendiente: %{name}' + title: Nueva solicitud de seguimiento + mention: + action: Responder + body: 'Fuiste mencionado por %{name} en:' + subject: Fuiste mencionado por %{name} + title: Nueva mención + reblog: + body: "%{name} retooteó tu estado:" + subject: "%{name} retooteó tu estado" + title: Nuevo retoot + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: m + trillion: T + pagination: + newer: Más recientes + next: Siguiente + older: Más antiguos + prev: Anterior + truncate: "…" + polls: + errors: + already_voted: Ya votaste en esta encuesta + duplicate_options: contiene elementos duplicados + duration_too_long: está demasiado lejos en el futuro + duration_too_short: es demasiado pronto + expired: La encuesta ya finalizó + over_character_limit: no puede ser más largo de %{max} caracteres, cada uno + too_few_options: debe tener más de un elemento + too_many_options: no puede contener más de %{max} elementos + preferences: + other: Otros + posting_defaults: Configuración predeterminada de publicaciones + public_timelines: Líneas temporales públicas + relationships: + activity: Actividad de la cuenta + dormant: Inactivas + last_active: Última actividad + most_recent: Más reciente + moved: Mudada + mutual: Mutuo + primary: Principal + relationship: Relación + remove_selected_domains: Quitar todos los seguidores de los dominios seleccionados + remove_selected_followers: Quitar los seguidores seleccionados + remove_selected_follows: Dejar de seguir a los usuarios seleccionados + status: Estado de la cuenta + remote_follow: + acct: Ingresá tu usuario@dominio desde el que querés seguir + missing_resource: No se pudo encontrar la dirección web de redireccionamiento requerida para tu cuenta + no_account_html: "¿No tenés cuenta? Podés <a href='%{sign_up_path}' target='_blank'>registrarte acá</a>." + proceed: Proceder para seguir + prompt: 'Vas a seguir a:' + reason_html: "¿<strong>¿Por qué es necesario este paso?</strong> <code>%{instance}</code> puede que no sea el servidor donde estás registrado, así que necesitamos redirigirte primero a tu servidor de origen." + remote_interaction: + favourite: + proceed: Proceder para marcar como favorito + prompt: 'Vas a marcar este toot como favorito:' + reblog: + proceed: Proceder para retootear + prompt: 'Vas a retootear este toot:' + reply: + proceed: Proceder para responder + prompt: 'Vas a responder a este toot:' + scheduled_statuses: + over_daily_limit: Superaste el límite de %{limit} toots programados para ese día + over_total_limit: Superaste el límite de %{limit} toots programados + too_soon: La fecha programada debe estar en el futuro + sessions: + activity: Última actividad + browser: Navegador web + browsers: + alipay: Alipay + blackberry: BlackBerry + chrome: Chrome + edge: Edge + electron: Electron + firefox: Firefox + generic: Navegador web desconocido + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Navegador web de Nokia S40 Ovi + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: Navegador QQ + safari: Safari + uc_browser: UC Browser + weibo: Weibo + current_session: Sesión actual + description: "%{browser} en %{platform}" + explanation: Estos son los navegadores web en los que actualmente iniciaste sesión en tu cuenta de Mastodon. + ip: Dirección IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: BlackBerry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: GNU/Linux + mac: macOS + other: plataforma desconocida + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Revocar + revoke_success: Sesión revocada exitosamente + title: Sesiones + settings: + account: Cuenta + account_settings: Configuración de la cuenta + aliases: Alias de la cuenta + appearance: Apariencia + authorized_apps: Aplicaciones autorizadas + back: Volver a Mastodon + delete: Eliminación de la cuenta + development: Desarrollo + edit_profile: Editar perfil + export: Exportar datos + featured_tags: Etiquetas destacadas + identity_proofs: Pruebas de identidad + import: Importar + import_and_export: Importación y exportación + migrate: Migración de la cuenta + notifications: Notificaciones + preferences: Configuración + profile: Perfil + relationships: Seguimientos + two_factor_authentication: Autenticación de dos factores + spam_check: + spam_detected: Este es un informe automatizado. Se detectó spam. + statuses: + attached: + description: 'Adjunto: %{attached}' + image: + one: "%{count} imagen" + other: "%{count} imágenes" + video: + one: "%{count} video" + other: "%{count} videos" + boosted_from_html: Retooteado desde %{acct_link} + content_warning: 'Advertencia de contenido: %{warning}' + disallowed_hashtags: + one: 'contenía una etiqueta no permitida: %{tags}' + other: 'contenía las etiquetas no permitidas: %{tags}' + language_detection: Detectar idioma automáticamente + open_in_web: Abrir en web + over_character_limit: se excedió el límite de %{max} caracteres + pin_errors: + limit: Ya fijaste el número máximo de toots + ownership: No se puede fijar el toot de otra persona + private: Los toots no públicos no se pueden fijar + reblog: No se puede fijar un retoot + poll: + total_people: + one: "%{count} persona" + other: "%{count} personas" + total_votes: + one: "%{count} voto" + other: "%{count} votos" + vote: Votar + show_more: Mostrar más + sign_in_to_participate: Iniciá sesión para participar en la conversación + title: '%{name}: "%{quote}"' + visibilities: + private: Sólo a seguidores + private_long: Sólo mostrar a seguidores + public: Pública + public_long: Todos pueden ver + unlisted: No listado + unlisted_long: Todos pueden ver, pero no está listado en las líneas temporales públicas + stream_entries: + pinned: Toot fijado + reblogged: retooteado + sensitive_content: Contenido sensible + tags: + does_not_match_previous_name: no coincide con el nombre anterior + terms: + body_html: | + <h2>Política de privacidad</h2> + <h3 id="collect">¿Qué información recolectamos?</h3> + + <ul> + <li><em>Información básica de la cuenta</em>: Si te registrás en este servidor, se te va a pedir un nombre de usuario, una dirección de correo electrónico y una contraseña. También podés ingresar información adicional de perfil como un nombre para mostrar y una biografía, y subir un avatar y una imagen de cabecera. El nombre de usuario, nombre para mostrar, biografía, avatar e imagen de cabecera siempre son visibles públicamente.</li> + <li><em>Toots, seguimiento y otra información pública</em>: La lista de gente a la que seguís es mostrada públicamente, al igual que la de tus seguidores. Cuando enviás un mensaje, se almacenan la fecha y hora, así como la aplicación desde la cual enviaste el mensaje. Los mensajes pueden contener archivos adjuntos de medios, como imágenes y videos. Los toots públicos y no listados están técnicamente disponibles para todos. Cuando destacás un toot en tu perfil, eso también se considera información disponible públicamente. Tus toots son entregados a tus seguidores, en algunos casos significa que son entregados a diferentes servidores y las copias son almacenadas allí. Cuando eliminás toots, esto también afecta a tus seguidores. La acción de retootear o marcar como favorito otro toot es siempre pública.</li> + <li><em>Toots directos y sólo para seguidores</em>: Todos los toots se almacenan y procesan en el servidor. Los toots sólo para seguidores se entregan a los seguidores y usuarios que se mencionan en ellos, y los mensajes directos se entregan sólo a los usuarios que se mencionan en ellos. En algunos casos significa que se entregan a diferentes servidores y que las copias se almacenan allí. Hacemos un esfuerzo de buena fe para limitar el acceso a esos toots sólo a las personas autorizadas, pero otros servidores pueden no hacerlo. Por lo tanto, es importante revisar los servidores a los que pertenecen tus seguidores. Podés cambiar una opción para aprobar y rechazar nuevos seguidores manualmente en la configuración. <em>Por favor, tené en cuenta que los operadores del servidor y de cualquier servidor receptor pueden ver dichos mensajes</em>, y que los destinatarios pueden tomar capturas de pantalla, copiarlos o volver a compartirlos de alguna otra manera. <em>No compartas ninguna información peligrosa en Mastodon.</em></li> + <li><em>Direcciones IP y otros metadatos</em>: Cuando iniciás sesión, registramos la dirección IP desde dónde lo estás haciendo, así como el nombre de tu navegador web. Todos los inicios de sesiones están disponibles para tu revisión y revocación en la configuración. La última dirección IP usada se almacena hasta por 12 meses. También podemos conservar los registros del servidor que incluyen la dirección IP de cada solicitud a nuestro servidor.</li> + </ul> + + <hr class="spacer" /> + + <h3 id="use">¿Para qué usamos tu información?</h3> + + <p>Toda la información que recolectamos de vos puede ser usada de las siguientes maneras:</p> + + <ul> + <li>Para proporcionar la funcionalidad principal de Mastodon. Sólo puedes interactuar con el contenido de otras personas y publicar tu propio contenido cuando hayás iniciado sesión. Por ejemplo, podés seguir a otras personas para ver sus mensajes combinados en tu propia línea temporal personalizada.</li> + <li>Para ayudar a la moderación de la comunidad, por ejemplo, comparando tu dirección IP con otras conocidas para determinar la evasión de prohibiciones u otras violaciones.</li> + <li>La dirección de correo electrónico que nos proporcionés podría usarse para enviarte información, notificaciones sobre otras personas que interactúen con tu contenido o para enviarte mensajes, así como para responder a consultas y/u otras solicitudes o preguntas.</li> + </ul> + + <hr class="spacer" /> + + <h3 id="protect">¿Cómo protegemos tu información?</h3> + + <p>Implementamos una variedad de medidas de seguridad para mantener la seguridad de tu información personal cuando ingresás, enviás o accedés a tu información personal. Entre otras cosas, la sesión de tu navegador web, así como el tráfico entre sus aplicaciones y la API, están protegidos con SSL; y tu contraseña está protegida mediante un algoritmo unidireccional fuerte. Podés habilitar la autenticación de dos factores para un acceso más seguro a tu cuenta.</p> + + <hr class="spacer" /> + + <h3 id="data-retention">¿Cuál es nuestra política de retención de datos?</h3> + + <p>Haremos un esfuerzo de buena fe para:</p> + + <ul> + <li>Conservar los registros del servidor que contengan la dirección IP de todas las solicitudes a este servidor, en la medida en que se mantengan dichos registros, por no más de 90 días.</li> + <li>Conservar las direcciones IP asociadas a los usuarios registrados, por no más de 12 meses.</li> + </ul> + + <p>Podé solicitar y descargar un archivo historial de tu contenido, incluyendo tus toots, archivos adjuntos de medios, avatar e imagen de cabecera.</p> + + <p>Podés eliminar tu cuenta de forma irreversible en cualquier momento.</p> + + <hr class="spacer"/> + + <h3 id="cookies">¿Usamos cookies?</h3> + + <p>Sí. Las cookies son pequeños archivos que un sitio o su proveedor de servicios transfiere a la unidad de almacenamiento de tu computadora a través de tu navegador web (si lo permitís). Estas cookies permiten al sitio reconocer tu navegador web y, si tenés una cuenta registrada, asociarla con la misma.</p> + + <p>Usamos cookies para entender y guardar tu configuración para futuras visitas.</p> + + <hr class="spacer" /> + + <h3 id="disclose">¿Revelamos alguna información a terceros?</h3> + + <p>No vendemos, comercializamos ni transferimos de ninguna otra manera a terceros tu información personal identificable. Esto no incluye a los terceros de confianza que nos asisten en la operación de nuestro sitio, en la realización de nuestros negocios o en la prestación de servicios, siempre y cuando dichas partes acuerden mantener la confidencialidad de esta información. También podríamos liberar tu información cuando creamos que es apropiado para cumplir con la ley, hacer cumplir las políticas de nuestro sitio web, o proteger derechos, propiedad o seguridad, nuestros o de otros.</p> + + <p>Tu contenido público puede ser descargado por otros servidores de la red. Tus mensajes públicos y sólo para seguidores se envían a los servidores donde residen tus seguidores, y los mensajes directos se envían a los servidores de los destinatarios, en la medida en que dichos seguidores o destinatarios residan en un servidor diferente.</p> + + <p>Cuando autorizás a una aplicación a usar tu cuenta, dependiendo del alcance de los permisos que aprobés, puede acceder a la información de tu perfil público, tu lista de seguimiento, tus seguidores, tus listas, todos tus mensajes y tus favoritos. Las aplicaciones nunca podrán acceder a tu dirección de correo electrónico o contraseña.</p> + + <hr class="spacer" /> + + <h3 id="children">Uso del sitio web por parte de niños</h3> + + <p>Si este servidor está en la UE o en el EEE: Nuestro sitio web, productos y servicios están dirigidos a personas mayores de 16 años. Si tenés menos de 16 años, según los requisitos de la GDPR (<a href="https://es.wikipedia.org/wiki/Reglamento_General_de_Protecci%C3%B3n_de_Datos">Reglamento General de Protección de Datos</a>) no usés este sitio.</p> + + <p>Si este servidor está en los EE.UU.: Nuestro sitio web, productos y servicios están todos dirigidos a personas que tienen al menos 13 años de edad. Si tenés menos de 13 años, según los requisitos de COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Acta de Protección de la Privacidad en Línea de Niños [en inglés]</a>) no usés este sitio.</p> + + <p>Los requisitos legales pueden ser diferentes si este servidor está en otra jurisdicción.</p> + + <hr class="spacer" /> + + <h3 id="changes">Cambios a nuestra Política de privacidad</h3> + + <p>Si decidimos cambiar nuestra política de privacidad, publicaremos dichos cambios en esta página.</p> + + <p>Este documento es CC-BY-SA. Fue actualizado por última vez el 7 de marzo de 2018.</p> + + <p>Adaptado originalmente desde <a href="https://github.com/discourse/discourse">la política de privacidad de Discourse</a>.</p> + title: Términos del servicio y Políticas de privacidad de %{instance} + themes: + contrast: Alto contraste + default: Oscuro + mastodon-light: Claro + time: + formats: + default: "%Y.%b.%d, %H:%M" + month: "%b %Y" + two_factor_authentication: + code_hint: Ingresá el código generado por tu aplicación de autenticación para confirmar + description_html: Si habilitás la <strong>autenticación de dos factores</strong>, se requerirá estar en posesión de tu dispositivo móvil, lo que generará claves para que las ingresés. + disable: Deshabilitar + enable: Habilitar + enabled: La autenticación de dos factores está activada + enabled_success: Se habilitó exitosamente la autenticación de dos factores + generate_recovery_codes: Generar códigos de recuperación + instructions_html: <strong>Escaneá este código QR con Authy, FreeOTP, Google Authenticator, Microsoft Authenticator o cualquier otra aplicación de generación de contraseñas por única vez basada en el tiempo ("TOTP") en tu dispositivo móvil</strong>. Desde ahora, esta aplicación va a generar claves que tenés que ingresar cuando quieras iniciar sesión. + lost_recovery_codes: Los códigos de recuperación te permiten recuperar el acceso a tu cuenta, si perdés tu dispositivo móvil. Si perdiste tus códigos de recuperación, podés regenerarlos acá. Tus antiguos códigos de recuperación serán invalidados. + manual_instructions: 'Si no podés escanear el código QR y necesitás introducirlo manualmente, este es el secreto en texto plano:' + recovery_codes: Resguardar códigos de recuperación + recovery_codes_regenerated: Los códigos de recuperación se regeneraron exitosamente + recovery_instructions_html: Si alguna vez perdés el acceso a tu dispositivo móvil, podés usar uno de los siguientes códigos de recuperación para recuperar el acceso a tu cuenta. <strong>Mantenelos a salvo</strong>. Por ejemplo, podés imprimirlos y guardarlos con otros documentos importantes. + setup: Configurar + wrong_code: "¡El código ingresado no es válido! ¿La hora en el dispositivo y en el servidor es correcta?" + user_mailer: + backup_ready: + explanation: Solicitado un resguardo completo de tu cuenta de Mastodon. ¡Ya está listo para descargar! + subject: Tu archivo historial está listo para descargar + title: Descargar archivo historial + warning: + explanation: + disable: Mientras tu cuenta esté congelada, la información de la misma permanecerá intacta, pero no podés realizar ninguna acción hasta que se desbloquee. + silence: Mientras tu cuenta esté limitada, sólo las personas que ya te estén siguiendo verán tus toots en este servidor, y puede que se te excluya de varios listados públicos. Sin embargo, otras personas pueden seguirte manualmente. + suspend: Tu cuenta fue suspendida, y todos tus toots y tus archivos de medios subidos fueron irreversiblemente eliminados de este servidor, y de los servidores en donde tenías seguidores. + get_in_touch: Podés responder a esta dirección de correo electrónico para ponerte en contacto con el equipo de %{instance}. + review_server_policies: Revisar las políticas del servidor + statuses: 'Específicamente, para:' + subject: + disable: Tu cuenta %{acct} fue congelada + none: Advertencia para %{acct} + silence: Tu cuenta %{acct} fue limitada + suspend: Tu cuenta %{acct} fue suspendida + title: + disable: Cuenta congelada + none: Advertencia + silence: Cuenta limitada + suspend: Cuenta suspendida + welcome: + edit_profile_action: Configurar perfil + edit_profile_step: Podés personalizar tu perfil subiendo un avatar, una cabecera, cambiando tu nombre para mostrar y más cosas. Si querés revisar a tus nuevos seguidores antes de que se les permita seguirte, podés bloquear tu cuenta. + explanation: Aquí hay algunos consejos para empezar + final_action: Empezar a tootear + final_step: ¡Empezá a tootear! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local y con etiquetas. Capaz que quieras presentarte al mundo con la etiqueta "#presentación". + full_handle: Tu nombre de usuario completo + full_handle_hint: Esto es lo que le dirás a tus contactos para que ellos puedan enviarte mensajes o seguirte desde otro servidor. + review_preferences_action: Cambiar configuración + review_preferences_step: Asegurate de establecer tu configuración, como qué tipo de correos electrónicos te gustaría recibir, o qué nivel de privacidad te gustaría que sea el predeterminado para tus toots. Si no tenés mareos, podrías elegir habilitar la reproducción automática de GIFs. + subject: Bienvenido a Mastodon + tip_following: Predeterminadamente seguís al / a los administrador/es de tu servidor. Para encontrar más gente interesante, revisá las lineas temporales local y federada. + tip_mobile_webapp: Si tu navegador web móvil te ofrece agregar Mastodon a tu página de inicio, podés recibir notificaciones PuSH. ¡Actúa como una aplicación nativa de muchas maneras! + tips: Consejos + title: "¡Bienvenido a bordo, %{name}!" + users: + follow_limit_reached: No podés seguir a más de %{limit} personas + invalid_email: La dirección de correo electrónico no es correcta + invalid_otp_token: Código de dos factores no válido + otp_lost_help_html: Si perdiste al acceso a ambos, podés ponerte en contacto con %{email} + seamless_external_login: Iniciaste sesión desde un servicio externo, así que la configuración de contraseña y correo electrónico no están disponibles. + signed_in_as: 'Iniciaste sesión como:' + verification: + explanation_html: 'Podés <strong>verificarte a vos mismo como el propietario de los enlaces en los metadatos de tu perfil</strong>. Para eso, el sitio web del enlace debe contener un enlace de vuelta a tu perfil de Mastodon. El enlace en tu sitio <strong>debe</strong> tener un atributo <code>rel="me"</code>. El contenido del texto del enlace no importa. Acá tenés un ejemplo:' + verification: Verificación diff --git a/config/locales/es.yml b/config/locales/es.yml index 4a919f52b..920a0ccdf 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1,22 +1,29 @@ --- es: about: - about_hashtag_html: Estos son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Puedes interactuar con ellos si tienes una cuenta en cualquier parte del fediverso. - about_mastodon_html: Mastodon es un servidor de red social <em>libre y de código abierto</em>. Una alternativa <em>descentralizada</em> a plataformas comerciales, que evita el riesgo de que una única compañía monopolice tu comunicación. Cualquiera puede ejecutar Mastodon y participar sin problemas en la <em>red social</em>. - about_this: Acerca de esta instancia + about_hashtag_html: Estos son toots públicos etiquetados con <strong>#%{hashtag}</strong>. Puedes interactuar con ellos si tienes una cuenta en el fediverso. + about_mastodon_html: Mastodon es una red social basada en protocolos web abiertos y software libre y de código abierto. Está descentralizado como correo electrónico. + about_this: Información + active_count_after: activo + active_footnote: Usuarios Activos Mensuales (UAM) administered_by: 'Administrado por:' + api: API apps: Aplicaciones móviles + apps_platforms: Utiliza Mastodon desde iOS, Android y otras plataformas + browse_directory: Navega por el directorio de perfiles y filtra por intereses + browse_local_posts: Explora en vivo los posts públicos de este servidor + browse_public_posts: Navega por un transmisión en vivo de publicaciones públicas en Mastodon contact: Contacto contact_missing: No especificado + contact_unavailable: N/A discover_users: Descubrir usuarios documentation: Documentación - extended_description_html: | - <h3>Un buen lugar para las reglas</h3> - <p>La descripción extendida no se ha colocado aún.</p> federation_hint_html: Con una cuenta en %{instance} usted podrá seguir a las personas en cualquier servidor de Mastodon y más allá. - generic_description: "%{domain} es un servidor en la red" get_apps: Probar una aplicación móvil hosted_on: Mastodon hosteado en %{domain} + instance_actor_flash: | + Esta cuenta es un actor virtual usado para representar al servidor y no a ningún usuario individual. + Se usa para fines federativos y no debe ser bloqueado a menos que usted quiera bloquear toda la instancia, en cuyo caso se debe utilizar un bloque de dominio. learn_more: Aprende más privacy_policy: Política de privacidad see_whats_happening: Ver lo que está pasando @@ -28,6 +35,14 @@ es: status_count_before: Qué han escrito tagline: Seguir a amigos existentes y descubre nuevos terms: Condiciones de servicio + unavailable_content: Contenido no disponible + unavailable_content_description: + domain: Servidor + reason: 'Motivo:' + rejecting_media: Los archivos multimedia de este servidor no serán procesados y no se mostrarán miniaturas, lo que requiere un clic manual en el otro servidor. + silenced: Las publicaciones de este servidor no se mostrarán en ningún lugar salvo en el Inicio si sigues al autor. + suspended: No podrás seguir a nadie de este servidor, y ningún dato de este será procesado o almacenado, y no se intercambiarán datos. + unavailable_content_html: Mastodon generalmente le permite ver contenido e interactuar con usuarios de cualquier otro servidor en el fediverso. Estas son las excepciones que se han hecho en este servidor en particular. user_count_after: one: usuario other: usuarios @@ -35,6 +50,8 @@ es: what_is_mastodon: "¿Qué es Mastodon?" accounts: choices_html: 'Elecciones de %{name}:' + endorsements_hint: Puedes recomendar a gente que sigues desde la interfaz web, y aparecerán allí. + featured_tags_hint: Puede presentar hashtags específicos que se mostrarán aquí. follow: Seguir followers: one: Seguidor @@ -43,8 +60,10 @@ es: joined: Se unió el %{date} last_active: última conexión link_verified_on: La propiedad de este vínculo fue verificada el %{date} + media: Multimedia moved_html: "%{name} se ha trasladado a %{new_profile_link}:" network_hidden: Esta información no está disponible + never_active: Nunca nothing_here: "¡No hay nada aquí!" people_followed_by: Usuarios a quien %{name} sigue people_who_follow: Usuarios que siguen a %{name} @@ -58,6 +77,7 @@ es: reserved_username: El nombre de usuario está reservado roles: admin: Administrador + bot: Bot moderator: Moderador unavailable: Perfil no disponible unfollow: Dejar de seguir @@ -74,6 +94,7 @@ es: approve: Aprobar approve_all: Aprobar todos are_you_sure: "¿Estás seguro?" + avatar: Avatar by_domain: Dominio change_email: changed_msg: "¡El correo electrónico se ha actualizado correctamente!" @@ -104,8 +125,11 @@ es: header: Cabecera inbox_url: URL de la bandeja de entrada invited_by: Invitado por + ip: IP + joined: Unido location: all: Todos + local: Local remote: Remoto title: Localización login_status: Estado del login @@ -114,6 +138,7 @@ es: moderation: active: Activo all: Todos + pending: Pendiente silenced: Silenciados suspended: Suspendidos title: Moderación @@ -135,6 +160,7 @@ es: reject: Rechazar reject_all: Rechazar todos remove_avatar: Eliminar el avatar + remove_header: Eliminar cabecera resend_confirmation: already_confirmed: Este usuario ya está confirmado send: Reenviar el correo electrónico de confirmación @@ -150,6 +176,7 @@ es: user: Usuario salmon_url: URL de salmón search: Buscar + search_same_ip: Otros usuarios con la misma IP shared_inbox_url: URL de bandeja compartida show: created_reports: Reportes hechos por esta cuenta @@ -159,6 +186,7 @@ es: statuses: Estados subscribe: Suscribir suspended: Susependido + time_in_queue: Esperando en cola %{time} title: Cuentas unconfirmed_email: Correo electrónico sin confirmar undo_silenced: Des-silenciar @@ -167,6 +195,7 @@ es: username: Nombre de usuario warn: Adevertir web: Web + whitelisted: Añadido a la lista blanca action_logs: actions: assigned_to_self_report: "%{name} se ha asignado la denuncia %{target} a sí mismo" @@ -174,10 +203,12 @@ es: confirm_user: "%{name} confirmó la dirección de correo del usuario %{target}" create_account_warning: "%{name} envió una advertencia a %{target}" create_custom_emoji: "%{name} subió un nuevo emoji %{target}" + create_domain_allow: "%{name} ha añadido a la lista blanca el dominio %{target}" create_domain_block: "%{name} bloqueó el dominio %{target}" create_email_domain_block: "%{name} puso en lista negra el dominio de correos %{target}" demote_user: "%{name} degradó al usuario %{target}" destroy_custom_emoji: "%{name} destruyó el emoji %{target}" + destroy_domain_allow: "%{name} ha eliminado el dominio %{target} de la lista blanca" destroy_domain_block: "%{name} desbloqueó el dominio %{target}" destroy_email_domain_block: "%{name} puso en lista blanca el dominio de correos %{target}" destroy_status: "%{name} eliminó el estado de %{target}" @@ -202,18 +233,24 @@ es: deleted_status: "(estado borrado)" title: Log de auditoría custom_emojis: + assign_category: Asignar categoría by_domain: Dominio copied_msg: Copia local del emoji creada con éxito copy: Copiar copy_failed_msg: No se pudo realizar una copia local de ese emoji + create_new_category: Crear una nueva categoría created_msg: "¡Emoji creado con éxito!" delete: Borrar destroyed_msg: "¡Emojo destruido con éxito!" disable: Deshabilitar + disabled: Desactivado disabled_msg: Se deshabilitó con éxito ese emoji + emoji: Emoji enable: Habilitar + enabled: Activado enabled_msg: Se habilitó con éxito ese emoji image_hint: PNG de hasta 50KB + list: Lista listed: Listados new: title: Añadir nuevo emoji personalizado @@ -221,11 +258,14 @@ es: shortcode: Código de atajo shortcode_hint: Al menos 2 caracteres, solo caracteres alfanuméricos y guiones bajos title: Emojis personalizados + uncategorized: Sin clasificar + unlist: No listado unlisted: Sin listar update_failed_msg: No se pudo actualizar ese emoji updated_msg: "¡Emoji actualizado con éxito!" upload: Subir dashboard: + authorized_fetch_mode: Modo seguro backlog: trabajos de backlog config: Configuración feature_deletions: Borrados de cuenta @@ -233,9 +273,13 @@ es: feature_profile_directory: Directorio de perfil feature_registrations: Registros feature_relay: Relés de federación + feature_spam_check: Contra-spam + feature_timeline_preview: Vista previa de la línea de tiempo features: Características hidden_service: Federación con servicios ocultos open_reports: informes abiertos + pending_tags: hashtags esperando revisión + pending_users: usuarios esperando por revisión recent_users: Usuarios recientes search: Búsqueda por texto completo single_user_mode: Modo único usuario @@ -247,11 +291,18 @@ es: week_interactions: interacciones esta semana week_users_active: activo esta semana week_users_new: usuarios esta semana + whitelist_mode: En la lista blanca + domain_allows: + add_new: Añadir dominio a la lista blanca + created_msg: Dominio añadido a la lista blanca con éxito + destroyed_msg: Dominio quitado de la lista blanca con éxito + undo: Quitar de la lista blanca domain_blocks: add_new: Añadir nuevo created_msg: El bloque de dominio está siendo procesado destroyed_msg: El bloque de dominio se deshizo domain: Dominio + edit: Editar nuevo dominio bloqueado existing_domain_block_html: Ya ha impuesto límites más estrictos a %{name}, necesita <a href="%{unblock_url}">desbloquearlo primero</a>. new: create: Crear bloque @@ -262,10 +313,19 @@ es: silence: Silenciar suspend: Suspender title: Nuevo bloque de dominio + private_comment: Comentario privado + private_comment_hint: Comentario sobre esta limitación de dominio para el uso interno por parte de los moderadores. + public_comment: Comentario público + public_comment_hint: Comentario sobre esta limitación de dominio para el público en general, si la publicidad de la lista de limitaciones de dominio está habilitada. reject_media: Rechazar archivos multimedia reject_media_hint: Remueve localmente archivos multimedia almacenados para descargar cualquiera en el futuro. Irrelevante para suspensiones reject_reports: Rechazar informes reject_reports_hint: Ignore todos los reportes de este dominio. Irrelevante para suspensiones + rejecting_media: rechazar archivos multimedia + rejecting_reports: rechazando informes + severity: + silence: silenciado + suspend: susependido show: affected_accounts: one: Una cuenta en la base de datos afectada @@ -276,6 +336,7 @@ es: title: Deshacer bloque de dominio para %{domain} undo: Deshacer undo: Deshacer + view: Ver dominio bloqueado email_domain_blocks: add_new: Añadir nuevo created_msg: Dominio de correo añadido a la lista negra con éxito @@ -286,8 +347,27 @@ es: create: Añadir dominio title: Nueva entrada en la lista negra de correo title: Lista negra de correo + followers: + back_to_account: Volver a la cuenta + title: Seguidores de %{acct} instances: + by_domain: Dominio + delivery_available: Entrega disponible + known_accounts: + one: "%{count} cuenta conocida" + other: "%{count} cuentas conocidas" + moderation: + all: Todos + limited: Limitado + title: Moderación + private_comment: Comentario privado + public_comment: Comentario público title: Instancias conocidas + total_blocked_by_us: Bloqueado por nosotros + total_followed_by_them: Seguidos por ellos + total_followed_by_us: Seguido por nosotros + total_reported: Informes sobre ellas + total_storage: Archivos multimedia invites: deactivate_all: Desactivar todos filter: @@ -296,6 +376,8 @@ es: expired: Expiradas title: Filtrar title: Invitaciones + pending_accounts: + title: Cuentas pendientes (%{count}) relays: add_new: Añadir un nuevo relés delete: Borrar @@ -309,6 +391,7 @@ es: pending: Esperando la aprobación del relés save_and_enable: Guardar y conectar setup: Preparar una conexión de relés + signatures_not_enabled: Los relés no funcionarán correctamente mientras el modo seguro o el modo de lista blanca estén habilitados status: Estado title: Releses report_notes: @@ -357,6 +440,16 @@ es: custom_css: desc_html: Modificar el aspecto con CSS cargado en cada página title: CSS personalizado + default_noindex: + desc_html: Afecta a todos los usuarios que no han cambiado esta configuración por sí mismos + title: Optar por los usuarios fuera de la indexación en los motores de búsqueda por defecto + domain_blocks: + all: A todos + disabled: A nadie + title: Mostrar dominios bloqueados + users: Para los usuarios locales que han iniciado sesión + domain_blocks_rationale: + title: Mostrar la razón de ser hero: desc_html: Mostrado en la página principal. Recomendable al menos 600x100px. Por defecto se establece a la miniatura de la instancia title: Imagen de portada @@ -369,6 +462,9 @@ es: preview_sensitive_media: desc_html: Los enlaces de vistas previas en otras web mostrarán una miniatura incluso si el medio está marcado como contenido sensible title: Mostrar contenido sensible en previews de OpenGraph + profile_directory: + desc_html: Permitir que los usuarios puedan ser descubiertos + title: Habilitar directorio de perfiles registrations: closed_message: desc_html: Se muestra en la portada cuando los registros están cerrados. Puedes usar tags HTML @@ -379,6 +475,12 @@ es: min_invite_role: disabled: Nadie title: Permitir invitaciones de + registrations_mode: + modes: + approved: Se requiere aprobación para registrarse + none: Nadie puede registrarse + open: Cualquiera puede registrarse + title: Modo de registros show_known_fediverse_at_about_page: desc_html: Cuando esté activado, se mostrarán toots de todo el fediverso conocido en la vista previa. En otro caso, se mostrarán solamente toots locales. title: Mostrar fediverso conocido en la vista previa de la historia @@ -398,6 +500,9 @@ es: desc_html: Puedes escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Puedes usar tags HTML title: Términos de servicio personalizados site_title: Nombre de instancia + spam_check_enabled: + desc_html: Mastodon puede silenciar y reportar cuentas automáticamente usando medidas como detectar cuentas que envían mensajes no solicitados repetidos. Puede que haya falsos positivos. + title: Contra-spam thumbnail: desc_html: Se usa para muestras con OpenGraph y APIs. Se recomienda 1200x630px title: Portada de instancia @@ -405,12 +510,19 @@ es: desc_html: Mostrar línea de tiempo pública en la portada title: Previsualización title: Ajustes del sitio + trendable_by_default: + desc_html: Afecta a etiquetas que no han sido previamente rechazadas + title: Permitir que las etiquetas sean tendencia sin revisión previa + trends: + desc_html: Mostrar públicamente hashtags previamente revisados que son tendencia + title: Hashtags de tendencia statuses: back_to_account: Volver a la cuenta batch: delete: Eliminar nsfw_off: Marcar contenido como no sensible nsfw_on: Marcar contenido como sensible + deleted: Eliminado failed_to_execute: Falló al ejecutar media: title: Multimedia @@ -418,26 +530,59 @@ es: no_status_selected: No se cambió ningún estado al no seleccionar ninguno title: Estado de las cuentas with_media: Con multimedia - subscriptions: - callback_url: URL del callback - confirmed: Confirmado - expires_in: Expira en - last_delivery: Última entrega - topic: Tópico + tags: + accounts_today: Usos únicos de hoy + accounts_week: Usos únicos esta semana + breakdown: Desglose del consumo actual por fuentes + context: Contexto + directory: En el directorio + in_directory: "%{count} en el directorio" + last_active: Última actividad + most_popular: Más popular + most_recent: Más reciente + name: Hashtag + review: Estado de revisión + reviewed: Revisado + title: Etiquetas + trending_right_now: En tendencia ahora mismo + unique_uses_today: "%{count} publicando hoy" + unreviewed: No revisado + updated_msg: Hashtags actualizados exitosamente title: Administración warning_presets: add_new: Añadir nuevo delete: Borrar edit: Editar + edit_preset: Editar aviso predeterminado + title: Editar configuración predeterminada de avisos admin_mailer: new_pending_account: body: Los detalles de la nueva cuenta están abajos. Puedes aprobar o rechazar esta aplicación. + subject: Nueva cuenta para revisión en %{instance} (%{username}) new_report: body: "%{reporter} ha reportado a %{target}" body_remote: Alguien de %{domain} a reportado a %{target} subject: Nuevo reporte para la %{instance} (#%{id}) + new_trending_tag: + body: 'El hashtag #%{name} está en tendencia hoy, pero no ha sido revisado previamente. No se mostrará públicamente a menos que lo permita, o simplemente guarde el formulario como para no volver a ver esto.' + subject: Nuevo hashtag para revisión en %{instance} (#%{name}) + aliases: + add_new: Crear alias + created_msg: El nuevo alias se ha creado correctamente. Ahora puedes empezar el traslado desde la cuenta antigua. + deleted_msg: Elimina el alias correctamente. El traslado de esa cuenta a esta ya no será posible. + hint_html: Si quieres migrar de otra cuenta a esta, aquí puedes crear un alias, es necesario proceder antes de empezar a mover seguidores de la cuenta anterior a esta. Esta acción por sí misma es <strong>inofensiva y reversible</strong>. <strong>La migración de la cuenta se inicia desde la cuenta antigua</strong>. + remove: Desvincular alias + appearance: + advanced_web_interface: Interfaz web avanzada + advanced_web_interface_hint: 'Si desea utilizar todo el ancho de pantalla, la interfaz web avanzada le permite configurar varias columnas diferentes para ver tanta información al mismo tiempo como quiera: Inicio, notificaciones, línea de tiempo federada, cualquier número de listas y etiquetas.' + animations_and_accessibility: Animaciones y accesibilidad + confirmation_dialogs: Diálogos de confirmación + discovery: Descubrir + sensitive_content: Contenido sensible + toot_layout: Diseño de los toots application_mailer: notification_preferences: Cambiar preferencias de correo electrónico + salutation: "%{name}," settings: 'Cambiar preferencias de correo: %{link}' view: 'Vista:' view_profile: Ver perfil @@ -451,11 +596,16 @@ es: warning: Ten mucho cuidado con estos datos. ¡No los compartas con nadie! your_token: Tu token de acceso auth: + apply_for_account: Solicitar una invitación change_password: Contraseña checkbox_agreement_html: Acepto <a href="%{rules_path}" target="_blank">las reglas del servidor</a> y <a href="%{terms_path}" target="_blank">términos de servicio</a> - confirm_email: Confirmar email + checkbox_agreement_without_rules_html: Acepto los <a href="%{terms_path}" target="_blank">términos de servicio</a> delete_account: Borrar cuenta delete_account_html: Si desea eliminar su cuenta, puede <a href="%{path}">proceder aquí</a>. Será pedido de una confirmación. + description: + prefix_invited_by_user: "¡@%{name} te invita a unirte a este servidor de Mastodon!" + prefix_sign_up: "¡Únete a Mastodon hoy!" + suffix: "¡Con una cuenta podrás seguir a gente, publicar novedades e intercambiar mensajes con usuarios de cualquier servidor de Mastodon y más!" didnt_get_confirmation: "¿No recibió el correo de confirmación?" forgot_password: "¿Olvidaste tu contraseña?" invalid_reset_password_token: El token de reinicio de contraseña es inválido o expiró. Por favor pide uno nuevo. @@ -464,12 +614,26 @@ es: migrate_account: Mudarse a otra cuenta migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes <a href="%{path}">configurarlo aquí</a>. or_log_in_with: O inicia sesión con + providers: + cas: CAS + saml: SAML register: Registrarse registration_closed: "%{instance} no está aceptando nuevos miembros" resend_confirmation: Volver a enviar el correo de confirmación reset_password: Restablecer contraseña security: Cambiar contraseña set_new_password: Establecer nueva contraseña + setup: + email_below_hint_html: Si la dirección de correo electrónico que aparece a continuación es incorrecta, se puede cambiarla aquí y recibir un nuevo correo electrónico de confirmación. + email_settings_hint_html: El correo electrónico de confirmación fue enviado a %{email}. Si esa dirección de correo electrónico no sea correcta, se puede cambiarla en la configuración de la cuenta. + title: Configuración + status: + account_status: Estado de la cuenta + confirming: Esperando confirmación de correo electrónico. + functional: Su cuenta está totalmente operativa. + pending: Su solicitud está pendiente de revisión por nuestros administradores. Eso puede tardar algún tiempo. Usted recibirá un correo electrónico si el solicitud sea aprobada. + redirecting_to: Tu cuenta se encuentra inactiva porque está siendo redirigida a %{acct}. + trouble_logging_in: "¿Problemas para iniciar sesión?" authorize_follow: already_following: Ya estás siguiendo a esta cuenta error: Desafortunadamente, ha ocurrido un error buscando la cuenta remota @@ -481,29 +645,53 @@ es: return: Regresar al perfil del usuario web: Ir al sitio web title: Seguir a %{acct} + challenge: + confirm: Continuar + hint_html: "<strong>Tip:</strong> No volveremos a preguntarte por la contraseña durante la siguiente hora." + invalid_password: Contraseña incorrecta + prompt: Confirmar contraseña para seguir datetime: distance_in_words: + about_x_hours: "%{count}h" about_x_months: "%{count}m" + about_x_years: "%{count}a" + almost_x_years: "%{count}a" half_a_minute: Justo ahora + less_than_x_minutes: "%{count}m" less_than_x_seconds: Justo ahora + over_x_years: "%{count}a" + x_days: "%{count}d" + x_minutes: "%{count}m" x_months: "%{count}m" + x_seconds: "%{count}s" deletes: - bad_password_msg: "¡Buen intento, hackers! Contraseña incorrecta" + challenge_not_passed: Los datos introducidos son incorrectos confirm_password: Ingresa tu contraseña actual para demostrar tu identidad - description_html: Esto removerá el contenido de tu cuenta y la desactivará <strong>permanente e irrevesiblemente</strong>. Tu nombre de usuario quedará reservado para prevenir futuros robos de identidad. + confirm_username: Escribe tu nombre de usuario para confirmar proceed: Eliminar cuenta success_msg: Tu cuenta se eliminó con éxito - warning_html: Se garantiza únicamente la eliminación del contenido de esta instancia. El contenido que se haya compartido extensamente dejará sus huellas. Los servidores fuera de línea y los que se hayan desuscrito de tus actualizaciones ya no actualizarán sus bases de datos. - warning_title: Disponibilidad diseminada del contenido + warning: + before: 'Antes de continuar, por favor lee con atención las siguientes notas:' + caches: El contenido que ha sido almacenado en caché por otros servidores puede persistir + data_removal: Tus publicaciones y el resto de datos se eliminarán definitivamente + email_change_html: Puedes <a href="%{path}"> cambiar tu dirección de correo electrónico</a> sin eliminar tu cuenta + email_contact_html: Si aún no te ha llegado, puedes escribir a <a href="mailto:%{email}">%{email}</a> para pedir ayuda + email_reconfirmation_html: Si no te ha llegado el correo de confirmación, puedes <a href="%{path}"> volver a solicitarlo</a> + irreversible: No podrás restaurar ni reactivar tu cuenta + more_details_html: Para más detalles, ver <a href="%{terms_path}"> la política de privacidad</a>. + username_available: Tu nombre de usuario volverá a estar disponible + username_unavailable: Tu nombre de usuario no estará disponible directories: + directory: Directorio de perfiles + explanation: Descubre usuarios según sus intereses explore_mastodon: Explorar %{title} - how_to_enable: Usted no está registrado por el directorio. Puede registrar por abajo. ¡Utilice hashtags en su bio para aparecer bajo hashtags específicos! - people: - one: "%{count} persona" - other: "%{count} personas" + domain_validator: + invalid_domain: no es un nombre de dominio válido errors: + '400': La solicitud que has enviado no es valida o estaba malformada. '403': No tienes permiso para acceder a esta página. '404': La página que estabas buscando no existe. + '406': Esta página no está disponible en el formato solicitado. '410': La página que estabas buscando no existe más. '422': content: Verificación de seguridad fallida. ¿Estás bloqueando algunas cookies? @@ -512,6 +700,7 @@ es: '500': content: Lo sentimos, algo ha funcionado mal por nuestra parte. title: Esta página no es correcta + '503': La página no se ha podido cargar debido a un fallo temporal del servidor. noscript_html: Para usar la aplicación web de Mastodon, por favor activa Javascript. Alternativamente, prueba alguna de las <a href="%{apps_path}">aplicaciones nativas</a> para Mastodon para tu plataforma. existing_username_validator: not_found: no pudo encontrar un usuario local con ese nombre de usuario @@ -525,13 +714,17 @@ es: request: Solicitar tu archivo size: Tamaño blocks: Personas que has bloqueado + csv: CSV + domain_blocks: Bloqueos de dominios follows: Personas que sigues + lists: Listas mutes: Tienes en silencio storage: Almacenamiento featured_tags: add_new: Añadir nuevo errors: limit: Ya has alcanzado la cantidad máxima de hashtags + hint_html: "<strong>¿Qué son las etiquetas destacadas?</strong> Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus publicaciones públicas específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo." filters: contexts: home: Timeline propio @@ -552,25 +745,48 @@ es: developers: Desarrolladores more: Mas… resources: Recursos + trending_now: Tendencia ahora generic: + all: Todos changes_saved_msg: "¡Cambios guardados con éxito!" copy: Copiar + no_batch_actions_available: No hay acciones por lotes disponibles en esta página + order_by: Ordenar por save_changes: Guardar cambios validation_errors: one: "¡Algo no está bien! Por favor, revisa el error" other: "¡Algo no está bien! Por favor, revise %{count} errores más abajo" + html_validator: + invalid_markup: 'contiene código HTML no válido: %{error}' identity_proofs: + active: Activo + authorize: Sí, autorizar authorize_connection_prompt: "¿Autorizar esta conexión criptográfica?" errors: failed: La conexión criptográfica falló. Por favor, inténtalo de nuevo desde %{provider}. keybase: invalid_token: Los tokens de Keybase son hashes de firmas y deben tener 66 caracteres hex verification_failed: Keybase no reconoce este token como una firma del usuario de Keybase %{kb_username}. Por favor, inténtelo de nuevo desde Keybase. + wrong_user: No se puede crear una prueba para %{proving} mientras se inicia sesión como %{current}. Inicia sesión como %{proving} e inténtalo de nuevo. + explanation_html: Aquí puedes conectar criptográficamente sus otras identidades, como un perfil de Keybase. Esto permite a otras personas enviarle mensajes encriptados y confiar en el contenido que les envías. + i_am_html: Soy %{username} en %{service}. + identity: Identidad + inactive: Inactivo + publicize_checkbox: 'Y tootee esto:' + publicize_toot: "¡Comprobado! Soy %{username} en %{service}: %{url}" + status: Estado de la verificación + view_proof: Ver prueba imports: + modes: + merge: Unir + merge_long: Mantener registros existentes y añadir nuevos + overwrite: Sobrescribir + overwrite_long: Reemplazar registros actuales con los nuevos preface: Puedes importar ciertos datos, como todas las personas que estás siguiendo o bloqueando en tu cuenta en esta instancia, desde archivos exportados de otra instancia. success: Sus datos se han cargado correctamente y serán procesados en brevedad types: blocking: Lista de bloqueados + domain_blocking: Lista de dominios bloqueados following: Lista de seguidos muting: Lista de silenciados upload: Cargar @@ -606,9 +822,34 @@ es: too_many: No se pueden adjuntar más de 4 archivos migrations: acct: username@domain de la nueva cuenta - currently_redirecting: 'Tu perfil está redireccionado a:' - proceed: Guardar - updated_msg: "¡La configuración de migración de tu cuenta ha sido actualizada con éxito!" + cancel: Cancelar redireccionamiento + cancel_explanation: Al cancelar el redireccionamiento se reactivará tu cuenta actual, pero no recuperarás los seguidores que hayan sido trasladados a la otra cuenta. + cancelled_msg: El redireccionamiento se ha cancelado correctamente. + errors: + already_moved: es la misma cuenta a la que ya has migrado + missing_also_known_as: no está haciendo referencia a esta cuenta + move_to_self: no puede ser la cuenta actual + not_found: no se pudo encontrar + on_cooldown: Estás en tiempo de reutilización + followers_count: Seguidores al momento de migrar + incoming_migrations: Migrar de una cuenta diferente + incoming_migrations_html: Para migrar de otra cuenta a esta, primero necesitas <a href="%{path}">crear un alias de la cuenta</a>. + moved_msg: Tu cuenta ahora se está redirigiendo a %{acct} y tus seguidores se están migrando. + not_redirecting: Tu cuenta no se está redirigiendo a ninguna otra cuenta actualmente. + on_cooldown: Has migrado tu cuenta recientemente. Esta función estará disponible de nuevo en %{count} días. + past_migrations: Migraciones pasadas + proceed_with_move: Migrar seguidores + redirecting_to: Tu cuenta se está redirigiendo a %{acct}. + set_redirect: Establecer redirección + warning: + backreference_required: La nueva cuenta debe ser configurada primero para hacer referencia a esta + before: 'Antes de continuar, por favor lee con atención las siguientes notas:' + cooldown: Después de migrar hay un período de espera durante el cual no podrás volver a migrar + disabled_account: Tu cuenta actual no será completamente utilizable después. Sin embargo, tendrás acceso a la exportación de datos así como a la reactivación. + followers: Esta acción migrará a todos los seguidores de la cuenta actual a la nueva cuenta + only_redirect_html: Alternativamente, solo puedes <a href="%{path}">poner una redirección en tu perfil</a>. + other_data: No se moverán otros datos automáticamente + redirect: El perfil de tu cuenta actual se actualizará con un aviso de redirección y será excluido de las búsquedas moderation: title: Moderación notification_mailer: @@ -645,47 +886,134 @@ es: body: "%{name} ha retooteado tu estado:" subject: "%{name} ha retooteado tu estado" title: Nueva difusión + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: m + trillion: T pagination: newer: Más nuevo next: Próximo older: Más antiguo prev: Anterior + truncate: "…" + polls: + errors: + already_voted: Ya has votado en esta encuesta + duplicate_options: contiene elementos duplicados + duration_too_long: está demasiado lejos en el futuro + duration_too_short: es demasiado pronto + expired: La encuesta ya ha terminado + over_character_limit: no puede exceder %{max} caracteres cada uno + too_few_options: debe tener más de un elemento + too_many_options: no puede contener más de %{max} elementos preferences: other: Otros + posting_defaults: Configuración por defecto de publicaciones + public_timelines: Líneas de tiempo públicas + relationships: + activity: Actividad de la cuenta + dormant: Inactivo + last_active: Última actividad + most_recent: Más reciente + moved: Movido + mutual: Mutuo + primary: Principal + relationship: Relación + remove_selected_domains: Eliminar todos los seguidores de los dominios seleccionados + remove_selected_followers: Eliminar los seguidores seleccionados + remove_selected_follows: Dejar de seguir a los usuarios seleccionados + status: Estado de la cuenta remote_follow: acct: Ingesa tu usuario@dominio desde el que quieres seguir missing_resource: No se pudo encontrar la URL de redirección requerida para tu cuenta no_account_html: "¿No tienes una cuenta? Puedes <a href='%{sign_up_path}' target='_blank'>registrarte aqui</a>" proceed: Proceder a seguir prompt: 'Vas a seguir a:' - remote_unfollow: - title: Título - unfollowed: Ha dejado de seguirse + reason_html: "¿<strong>¿Por qué es necesario este paso?</strong> <code>%{instance}</code> puede que no sea el servidor donde estás registrado, así que necesitamos redirigirte primero a tu servidor de origen." + remote_interaction: + favourite: + proceed: Proceder a marcar como favorito + prompt: 'Quieres marcar como favorito este toot:' + reblog: + proceed: Proceder a retootear + prompt: 'Quieres retootear este toot:' + reply: + proceed: Proceder a responder + prompt: 'Quieres responder a este toot:' + scheduled_statuses: + over_daily_limit: Ha superado el límite de %{limit} toots programados para ese día + over_total_limit: Ha superado el límite de %{limit} toots programados + too_soon: La fecha programada debe estar en el futuro sessions: activity: Última actividad browser: Navegador browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Desconocido + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Navegador de Nokia S40 Ovi + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: Navegador QQ + safari: Safari + uc_browser: UCBrowser + weibo: Weibo current_session: Sesión actual description: "%{browser} en %{platform}" explanation: Estos son los navegadores web conectados actualmente en tu cuenta de Mastodon. + ip: IP platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac other: Desconocido + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Revocar revoke_success: Sesión revocada exitosamente title: Sesiones settings: + account: Cuenta + account_settings: Ajustes de la cuenta + aliases: Alias de la cuenta + appearance: Apariencia authorized_apps: Aplicaciones autorizadas back: Volver al inicio delete: Borrar cuenta development: Desarrollo edit_profile: Editar perfil export: Exportar información + featured_tags: Hashtags destacados + identity_proofs: Pruebas de identidad import: Importar + import_and_export: Importar y exportar migrate: Migración de cuenta notifications: Notificaciones preferences: Preferencias + profile: Perfil + relationships: Siguiendo y seguidores two_factor_authentication: Autenticación de dos factores + spam_check: + spam_detected: Este es un informe automatizado. Se ha detectado correo no deseado. statuses: attached: description: 'Adjunto: %{attached}' @@ -708,8 +1036,17 @@ es: ownership: El toot de alguien más no puede fijarse private: Los toots no-públicos no pueden fijarse reblog: Un boost no puede fijarse + poll: + total_people: + one: persona %{count} + other: "%{count} gente" + total_votes: + one: "%{count} voto" + other: "%{count} votos" + vote: Vota show_more: Mostrar más sign_in_to_participate: Regístrate para participar en la conversación + title: '%{name}: "%{quote}"' visibilities: private: Sólo mostrar a seguidores private_long: Solo mostrar a tus seguidores @@ -721,7 +1058,90 @@ es: pinned: Toot fijado reblogged: retooteado sensitive_content: Contenido sensible + tags: + does_not_match_previous_name: no coincide con el nombre anterior terms: + body_html: | + <h2>Política de Privacidad</h2> + <h3 id="collect">¿Qué información recogemos?</h3> + + <ul> + <li><em>Información básica sobre su cuenta</em>: Si se registra en este servidor, se le requerirá un nombre de usuario, una dirección de correo electrónico y una contraseña. Además puede incluir información adicional en el perfil como un nombre de perfil y una biografía, y subir una foto de perfil y una imagen de cabecera. El nombre de usuario, nombre de perfil, biografía, foto de perfil e imagen de cabecera siempre son visibles públicamente</li> + <li><em>Publicaciones, seguimiento y otra información pública</em>: La lista de gente a la que sigue es mostrada públicamente, al igual que sus seguidores. Cuando publica un mensaje, la fecha y hora es almacenada, así como la aplicación desde la cual publicó el mensaje. Los mensajes pueden contener archivos adjuntos multimedia, como imágenes y vídeos. Las publicaciones públicas y no listadas están disponibles públicamente. Cuando destaca una entrada en su perfil, también es información disponible públicamente. Sus publicaciones son entregadas a sus seguidores, en algunos casos significa que son entregadas a diferentes servidores y las copias son almacenadas allí. Cuando elimina publicaciones, esto también se transfiere a sus seguidores. La acción de rebloguear o marcar como favorito otra publicación es siempre pública.</li> + <li><em>Publicaciones directas y sólo para seguidores</em>: Todos los mensajes se almacenan y procesan en el servidor. Los mensajes sólo para seguidores se entregan a los seguidores y usuarios que se mencionan en ellos, y los mensajes directos se entregan sólo a los usuarios que se mencionan en ellos. En algunos casos significa que se entregan a diferentes servidores y que las copias se almacenan allí. Hacemos un esfuerzo de buena fe para limitar el acceso a esas publicaciones sólo a las personas autorizadas, pero otros servidores pueden no hacerlo. Por lo tanto, es importante revisar los servidores a los que pertenecen sus seguidores. Puede cambiar una opción para aprobar y rechazar nuevos seguidores manualmente en la configuración <em>Por favor, tenga en cuenta que los operadores del servidor y de cualquier servidor receptor pueden ver dichos mensajes</em>, y que los destinatarios pueden capturarlos, copiarlos o volver a compartirlos de alguna otra manera. <em>No comparta ninguna información peligrosa en Mastodon.</em></li> + <li><em>Direcciones IP y otros metadatos</em>: Al iniciar sesión, registramos la dirección IP desde la que se ha iniciado sesión, así como el nombre de la aplicación de su navegador. Todas las sesiones iniciadas están disponibles para su revisión y revocación en los ajustes. La última dirección IP utilizada se almacena hasta 12 meses. También podemos conservar los registros del servidor que incluyen la dirección IP de cada solicitud a nuestro servidor.</li> + </ul> + + <hr class="spacer" /> + + <h3 id="use">¿Para qué utilizamos su información?</h3> + + <p>Toda la información que obtenemos de usted puede ser utilizada de las siguientes maneras:</p> + + <ul> + <li>Para proporcionar la funcionalidad principal de Mastodon. Sólo puedes interactuar con el contenido de otras personas y publicar tu propio contenido cuando estés conectado. Por ejemplo, puedes seguir a otras personas para ver sus mensajes combinados en tu propia línea de tiempo personalizada.</li> + <li>Para ayudar a la moderación de la comunidad, por ejemplo, comparando su dirección IP con otras conocidas para determinar la evasión de prohibiciones u otras violaciones.</li> + <li>La dirección de correo electrónico que nos proporcione podrá utilizarse para enviarle información, notificaciones sobre otras personas que interactúen con su contenido o para enviarle mensajes, así como para responder a consultas y/u otras solicitudes o preguntas.</li> + </ul> + + <hr class="spacer" /> + + <h3 id="protect">¿Cómo protegemos su información?</h3> + + <p>Implementamos una variedad de medidas de seguridad para mantener la seguridad de su información personal cuando usted ingresa, envía o accede a su información personal. Entre otras cosas, la sesión de su navegador, así como el tráfico entre sus aplicaciones y la API, están protegidos con SSL, y su contraseña está protegida mediante un algoritmo unidireccional fuerte. Puede habilitar la autenticación de dos factores para un acceso más seguro a su cuenta.</p> + + <hr class="spacer" /> + + <h3 id="data-retention">¿Cuál es nuestra política de retención de datos?</h3> + + <p>Haremos un esfuerzo de buena fe para:</p> + + <ul> + <li>Conservar los registros del servidor que contengan la dirección IP de todas las peticiones a este servidor, en la medida en que se mantengan dichos registros, no más de 90 días.</li> + <li>Conservar las direcciones IP asociadas a los usuarios registrados no más de 12 meses.</li> + </ul> + + <p>Puede solicitar y descargar un archivo de su contenido, incluidos sus mensajes, archivos adjuntos multimedia, foto de perfil e imagen de cabecera.</p> + + <p>Usted puede borrar su cuenta de forma irreversible en cualquier momento.</p> + + <hr class="spacer"/> + + <h3 id="cookies">¿Utilizamos cookies?</h3> + + <p>Sí. Las cookies son pequeños archivos que un sitio o su proveedor de servicios transfiere al disco duro de su ordenador a través de su navegador web (si usted lo permite). Estas cookies permiten al sitio reconocer su navegador y, si tiene una cuenta registrada, asociarla con su cuenta registrada.</p> + + <p>Utilizamos cookies para entender y guardar sus preferencias para futuras visitas.</p> + + <hr class="spacer" /> + + <h3 id="disclose">¿Revelamos alguna información a terceros?</h3> + + <p>No vendemos, comerciamos ni transferimos a terceros su información personal identificable. Esto no incluye a los terceros de confianza que nos asisten en la operación de nuestro sitio, en la realización de nuestros negocios o en la prestación de servicios, siempre y cuando dichas partes acuerden mantener la confidencialidad de esta información. También podemos divulgar su información cuando creamos que es apropiado para cumplir con la ley, hacer cumplir las políticas de nuestro sitio, o proteger nuestros u otros derechos, propiedad o seguridad.</p> + + <p>Su contenido público puede ser descargado por otros servidores de la red. Tus mensajes públicos y sólo para seguidores se envían a los servidores donde residen tus seguidores, y los mensajes directos se envían a los servidores de los destinatarios, en la medida en que dichos seguidores o destinatarios residan en un servidor diferente.</p> + + <p>Cuando usted autoriza a una aplicación a usar su cuenta, dependiendo del alcance de los permisos que usted apruebe, puede acceder a la información de su perfil público, su lista de seguimiento, sus seguidores, sus listas, todos sus mensajes y sus favoritos. Las aplicaciones nunca podrán acceder a su dirección de correo electrónico o contraseña.</p> + + <hr class="spacer" /> + + <h3 id="children">Uso del sitio por parte de los niños</h3> + + <p>Si este servidor está en la UE o en el EEE: Nuestro sitio, productos y servicios están dirigidos a personas mayores de 16 años. Si es menor de 16 años, según los requisitos de la GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation_Data_Protection_Regulation">General Data Protection Regulation</a>) no utilice este sitio.</p> + + <p>Si este servidor está en los EE.UU.: Nuestro sitio, productos y servicios están todos dirigidos a personas que tienen al menos 13 años de edad. Si usted es menor de 13 años, según los requisitos de COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) no utilice este sitio.</p> + + <p>Los requisitos legales pueden ser diferentes si este servidor está en otra jurisdicción.</p> + + <hr class="spacer" /> + + <h3 id="changes">Cambios en nuestra Política de Privacidad</h3> + + <p>Si decidimos cambiar nuestra política de privacidad, publicaremos esos cambios en esta página.</p> + + <p>Este documento es CC-BY-SA. Fue actualizado por última vez el 7 de marzo de 2018.</p> + + <p>Adaptado originalmente desde <a href="https://github.com/discourse/discourse">la política de privacidad de Discourse</a>.</p> title: Términos del Servicio y Políticas de Privacidad de %{instance} themes: contrast: Alto contraste @@ -730,6 +1150,7 @@ es: time: formats: default: "%d de %b del %Y, %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: Ingresa el código generado por tu aplicación de autenticación para confirmar description_html: Si habilitas la <strong>autenticación de dos factores</strong>, se requerirá estar en posesión de su teléfono, lo que generará tokens para que usted pueda iniciar sesión. @@ -751,6 +1172,24 @@ es: explanation: Has solicitado una copia completa de tu cuenta de Mastodon. ¡Ya está preparada para descargar! subject: Tu archivo está preparado para descargar title: Descargar archivo + warning: + explanation: + disable: Mientras su cuenta esté congelada, la información de su cuenta permanecerá intacta, pero no puede realizar ninguna acción hasta que se desbloquee. + silence: Mientras su cuenta está limitada, sólo las personas que ya le están siguiendo verán sus toots en este servidor, y puede que se le excluya de varios listados públicos. Sin embargo, otros pueden seguirle manualmente. + suspend: Su cuenta ha sido suspendida, y todos tus toots y tus archivos multimedia subidos han sido irreversiblemente eliminados de este servidor, y de los servidores donde tenías seguidores. + get_in_touch: Puede responder a esta dirección de correo electrónico para ponerse en contacto con el personal de %{instance}. + review_server_policies: Revisar las políticas del servidor + statuses: 'Específicamente, para:' + subject: + disable: Su cuenta %{acct} ha sido congelada + none: Advertencia para %{acct} + silence: Su cuenta %{acct} ha sido limitada + suspend: Su cuenta %{acct} ha sido suspendida + title: + disable: Cuenta congelada + none: Advertencia + silence: Cuenta limitada + suspend: Cuenta suspendida welcome: edit_profile_action: Configurar el perfil edit_profile_step: Puedes personalizar tu perfil subiendo un avatar, una cabecera, cambiando tu nombre de usuario y más cosas. Si quieres revisar a tus nuevos seguidores antes de que se les permita seguirte, puedes bloquear tu cuenta. @@ -766,6 +1205,7 @@ es: tip_following: Sigues a tus administradores de servidor por defecto. Para encontrar más gente interesante, revisa las lineas de tiempo local y federada. tip_local_timeline: La linea de tiempo local is una vista de la gente en %{instance}. Estos son tus vecinos inmediatos! tip_mobile_webapp: Si el navegador de tu dispositivo móvil ofrece agregar Mastodon a tu página de inicio, puedes recibir notificaciones. Actúa como una aplicación nativa en muchas formas! + tips: Consejos title: Te damos la bienvenida a bordo, %{name}! users: follow_limit_reached: No puedes seguir a más de %{limit} personas diff --git a/config/locales/et.yml b/config/locales/et.yml new file mode 100644 index 000000000..aa58138f7 --- /dev/null +++ b/config/locales/et.yml @@ -0,0 +1,1143 @@ +--- +et: + about: + about_hashtag_html: Need on avalikud tuututused sildistatud sildiga <strong>#%{hashtag}</strong>. Te saate suhelda nendega, kui Teil on konto üks kõik kus terves fediversumis. + about_mastodon_html: 'Tuleviku sotsiaalvõrgustik: Reklaamivaba, korporatiivse järelvalveta, eetiline kujundus ning detsentraliseeritus! Oma enda andmeid Mastodonis!' + about_this: Meist + active_count_after: aktiivne + active_footnote: Igakuiselt aktiivseid kasutajaid (MAU) + administered_by: 'Administraator:' + api: API + apps: Mobiilrakendused + apps_platforms: Kasuta Mastodoni iOS-is, Androidis ja teistel platvormidel + browse_directory: Sirvi profiilide kataloogi ja filtreeri huvide alusel + browse_local_posts: Sirvi reaalajas voogu avalikest postitustest sellest serverist + browse_public_posts: Sirvi reaalajas voogu avalikest postitustest Mastodonis + contact: Kontakt + contact_missing: Määramata + contact_unavailable: Pole saadaval + discover_users: Avasta kasutajaid + documentation: Dokumentatsioon + federation_hint_html: Kui Teil on kasutaja %{instance}-is, saate Te jälgida inimesi üks kõik millisel Mastodoni serveril ja kaugemalgi. + get_apps: Proovi mobiilirakendusi + hosted_on: Mastodon majutatud %{domain}-is + instance_actor_flash: | + See konto on virtuaalne näitleja, mis esindab tervet serverit ning mitte ühtegi kindlat isikut. + Seda kasutatakse föderatiivsetel põhjustel ning seda ei tohiks blokeerida, välja arvatud juhul, kui soovite blokeerida tervet serverit, kuid sellel juhul soovitame hoopis kasutada domeeni blokeerimist. + learn_more: Lisateave + privacy_policy: Privaatsuspoliitika + see_whats_happening: Vaata, mis toimub + server_stats: 'Serveri statistika:' + source_code: Lähtekood + status_count_after: + one: staatust + other: staatuseid + status_count_before: Kes omavad + tagline: Jälgi sõpru ja leia uusi + terms: Kasutustingimused + unavailable_content: Sisu pole saadaval + unavailable_content_description: + domain: Server + reason: Põhjus + rejecting_media: 'Meedia failid sellelt serverilt ei töödelda ega salvestata ning mitte ühtegi eelvaadet ei kuvata, mis nõuab manuaalselt vajutust originaalfailile:' + silenced: 'Postitused nendelt serveritelt peidetakse avalikes ajajoontes ja vestlustes ning mitte ühtegi teavitust ei tehta nende kasutajate tegevustest, välja arvatud juhul, kui Te neid jälgite:' + suspended: 'Mitte mingeid andmeid nendelt serveritelt ei töödelda, salvestata ega vahetata, tehes igasuguse interaktsiooni või kirjavahetuse kasutajatega nendelt serveritelt võimatuks:' + unavailable_content_html: Mastodon tavaliselt lubab Teil vaadata sisu ning suhelda kasutajatega üks kõik millisest teisest serverist fediversumis. Need on erandid, mis on paika pandud sellel kindlal serveril. + user_count_after: + one: kasutajale + other: kasutajale + user_count_before: Koduks + what_is_mastodon: Mis on Mastodon? + accounts: + choices_html: "%{name}-i valikud:" + endorsements_hint: Te saate heaks kiita inimesi, keda jälgite, veebiliidesest ning neid kuvatakse siin. + featured_tags_hint: Te saate valida kindlaid silte, mida kuvatakse siin. + follow: Jälgi + followers: + one: Jälgija + other: Jälgijaid + following: Jälgib + joined: Liitus %{date} + last_active: viimati aktiivne + link_verified_on: Selle lingi autorsust kontrolliti %{date} + media: Meedia + moved_html: "%{name} kolis %{new_profile_link}:" + network_hidden: Neid andmeid pole saadaval + never_active: Mitte kunagi + nothing_here: Siin pole midagi! + people_followed_by: Inimesed, keda %{name} jälgib + people_who_follow: Inimesed, kes jälgivad kasutajat %{name} + pin_errors: + following: Te peate juba olema selle kasutaja jälgija, keda te heaks kiidate + posts: + one: Tuututus + other: Tuututused + posts_tab_heading: Tuututused + posts_with_replies: Tuututused ja vastused + reserved_username: Kasutajanimi on reserveeritud + roles: + admin: Administraator + bot: Robot + moderator: Moderaator + unavailable: Profiil pole saadaval + unfollow: Lõpeta jälgimine + admin: + account_actions: + action: Täida tegevus + title: Rakenda moderaatori tegevus kasutajale %{acct} + account_moderation_notes: + create: Jäta teade + created_msg: Moderatsiooniteade edukalt koostatud! + delete: Kustuta + destroyed_msg: Moderatsiooniteade edukalt kustutatud! + accounts: + approve: Kinnita + approve_all: Kinnita kõik + are_you_sure: Olete kindel? + avatar: Profiilipilt + by_domain: Domeen + change_email: + changed_msg: Konto e-postiaadress edukalt muudetud! + current_email: Praegune e-postiaadress + label: Muuda e-posti aadressi + new_email: Uus е-posti aadress + submit: Muuda e-posti aadressi + title: Muuda e-postiaadressi kasutajale %{username} + confirm: Kinnita + confirmed: Kinnitatud + confirming: Kinnitamine + deleted: Kustutatud + demote: Alanda + disable: Keela + disable_two_factor_authentication: Keela 2FA + disabled: Keelatud + display_name: Kuvanimi + domain: Domeen + edit: Redigeeri + email: E-post + email_status: E-posti staatus + enable: Luba + enabled: Lubatud + feed_url: Voogu URL + followers: Jälgijad + followers_url: Jälgijate URL + follows: Jälgib + header: Päis + inbox_url: Sisendkausta URL + invited_by: Kutsuja + ip: IP + joined: Liitus + location: + all: Kõik + local: Kohalik + remote: Kaug + title: Asukoht + login_status: Sisselogimise olek + media_attachments: Lisatud meedia + memorialize: Tee memoriaaliks + moderation: + active: Aktiivne + all: Kõik + pending: Ootel + silenced: Vaigistatud + suspended: Peatatud + title: Moderatsioon + moderation_notes: Moderatsiooniteated + most_recent_activity: Kõige hiljutisem aktiivsus + most_recent_ip: Kõige hiljutisem IP + no_account_selected: Mitte ühtegi kontot muudeti sest midagi polnud valitud + no_limits_imposed: Mitte ühtegi limiiti kehtestatud + not_subscribed: Ei ole tellitud + outbox_url: Väljundkausta URL + pending: Ootab ülevaatamist + perform_full_suspension: Peata + profile_url: Profiili URL + promote: Edenda + protocol: Protokoll + public: Avalik + push_subscription_expires: PuSH tellimus aegub + redownload: Värskenda profiili + reject: Hülga + reject_all: Hülga kõik + remove_avatar: Kustuta profiilipilt + remove_header: Kustuta päis + resend_confirmation: + already_confirmed: See kasutaja on juba kinnitatud + send: Saada kinnituskiri uuesti + success: Kinnituskiri saadetud edukalt! + reset: Lähtesta + reset_password: Lähtesta salasõna + resubscribe: Telli taas + role: Õigused + roles: + admin: Administraator + moderator: Moderaator + staff: Personal + user: Kasutaja + salmon_url: Salmoni URL + search: Otsi + search_same_ip: Teised kasutajad, kellel on sama IP + shared_inbox_url: Jagatud sisendkausta URL + show: + created_reports: Loodud teated + targeted_reports: Teiste poolt teatatud + silence: Vaigista + silenced: Vaigistatud + statuses: Staatuseid + subscribe: Telli + suspended: Peatatud + time_in_queue: Ootab järjekorras %{time} + title: Kontod + unconfirmed_email: Kinnitamata e-post + undo_silenced: Võta vaigistus tagasi + undo_suspension: Võta peatamine tagasi + unsubscribe: Tühista tellimus + username: Kasutajanimi + warn: Hoiata + web: Veeb + whitelisted: Lubatud + action_logs: + actions: + assigned_to_self_report: "%{name} määras teabe %{target} iseendale" + change_email_user: "%{name} muutis kasutaja %{target} e-postiaadressit" + confirm_user: "%{name} kinnitas kasutaja %{target} e-postiaadressi" + create_account_warning: "%{name} saatis kasutajale %{target} hoiatuse" + create_custom_emoji: "%{name} laadis üles uue emotikooni %{target}" + create_domain_allow: "%{name} lisas domeeni %{target} lubatute nimekirja" + create_domain_block: "%{name} blokeeris domeeni %{target}" + create_email_domain_block: "%{name} lisas e-posti domeeni %{target} musta nimekirja" + demote_user: "%{name} alandas kasutaja %{target}" + destroy_custom_emoji: "%{name} kustutas emotikooni %{target}" + destroy_domain_allow: "%{name} eemaldas domeeni %{target} lubatute nimekirjast" + destroy_domain_block: "%{name} eemaldas blokeeringu domeenilt %{target}" + destroy_email_domain_block: "%{name} lisas e-posti domeeni %{target} lubatute nimekirja" + destroy_status: "%{name} eemaldas %{target} staatuse" + disable_2fa_user: "%{name} eemaldas kaheastmelise autentimise kohustuse kasutajalt %{target}" + disable_custom_emoji: "%{name} keelas emotikooni %{target}" + disable_user: "%{name} keelas sisselogimise kasutajal %{target}" + enable_custom_emoji: "%{name} lubas emotikooni %{target}" + enable_user: "%{name} lubas sisselogimise kasutajal %{target}" + memorialize_account: "%{name} muutis %{target}-i kasutaja memoriaaliks" + promote_user: "%{name} edendas kasutajat %{target}" + remove_avatar_user: "%{name} kustutas kasutaja %{target} profiilipildi" + reopen_report: "%{name} taasavas teate %{target}" + reset_password_user: "%{name} lähtestas parooli kasutajal %{target}" + resolve_report: "%{name} lahendas teate %{target}" + silence_account: "%{name} vaigistas %{target}-i kasutaja" + suspend_account: "%{name} peatas %{target}-i kasutaja" + unassigned_report: "%{name} eemaldas määratluse teatelt %{target}" + unsilence_account: "%{name} eemaldas vaigistuse %{target}-i kontolt" + unsuspend_account: "%{name} eemaldas peatamise %{target}-i kontolt" + update_custom_emoji: "%{name} uuendas emotikooni %{target}" + update_status: "%{name} uuendas kasutaja %{target} staatust" + deleted_status: "(kustutatud staatus)" + title: Auditilogi + custom_emojis: + assign_category: Määra kategooria + by_domain: Domeen + copied_msg: Kohaliku koopia loomine emotikonist õnnestus + copy: Kopeeri + copy_failed_msg: Kohaliku koopia loomine sellest emotikonist ebaõnnestus + create_new_category: Loo uus kategooria + created_msg: Emotikoni loomine õnnestus! + delete: Kustuta + destroyed_msg: Emotikoni kustutamine õnnestus! + disable: Keela + disabled: Keelatud + disabled_msg: Selle emotikoni keelamine õnnestus + emoji: Emotikonid + enable: Luba + enabled: Lubatud + enabled_msg: Selle emotikoni lubamine õnnestus + image_hint: PNG kuni 50KB + list: Loend + listed: Nimekirjastatud + new: + title: Lisa uus emotikon + overwrite: Kirjuta üle + shortcode: Lühikood + shortcode_hint: Vähemalt 2 tähemärki, ainult tähted, numbrid ja alakriipsud + title: Emotikonid + uncategorized: Kategoriseerimata + unlist: Kirjendamata + unlisted: Kirjendamata + update_failed_msg: Ei saanud seda emotikoni uuendada + updated_msg: Emotikoni uuendamine õnnestus! + upload: Lae üles + dashboard: + authorized_fetch_mode: Autoriseeritud tõmberežiim + backlog: mahajäänud tööd + config: Konfiguratsioon + feature_deletions: Kontode kustutamised + feature_invites: Kutselingid + feature_profile_directory: Profiilikataloog + feature_registrations: Registreerimised + feature_relay: Föderatsiooni relee + feature_spam_check: Rämpsposti filter + feature_timeline_preview: Ajajoone eelvaade + features: Omadused + hidden_service: Föderatsioon peidetud teenustega + open_reports: ava teavitused + pending_tags: sildid ootamas ülevaadet + pending_users: kasutajad ootamas ülevaadet + recent_users: Hiljutised kasutajad + search: Täis teksti otsing + single_user_mode: Üksiku kasutaja režiim + software: Tarkvara + space: Kettakasutus + title: Töölaud + total_users: kokku kasutajaid + trends: Trendid + week_interactions: interaktsioone see nädal + week_users_active: aktiivne see nädal + week_users_new: kasutajaid see nädal + whitelist_mode: Lubatud + domain_allows: + add_new: Luba domeen + created_msg: Domeeni lubamine õnnestus + destroyed_msg: Domeen eemaldati lubatute nimekirjast + undo: Eemalda lubatute nimekirjast + domain_blocks: + add_new: Lisa uus domeeniblokeering + created_msg: Domeeni blokeeringut töödeldakse + destroyed_msg: Domeeniblokeering on tagasi võetud + domain: Domeen + edit: Redigeeri domeeniblokeeringut + existing_domain_block_html: Te olete juba lisanud domeenile %{name} piiranguid, palun <a href="%{unblock_url}">eemaldage blokeering</a> enne jätkamist. + new: + create: Loo blokeering + hint: Domeeniblokeering ei takista kontode lisamist andmebaasi, aga lisab nendele kontodele tagasiulatuvalt ja automaatselt erinevaid moderatsioonimeetodeid. + severity: + desc_html: |- + <strong>Vaigista</strong> teeb konto postitused nähtamatuks kõigile, kes teda ei jälgi. + <strong>Peata</strong> eemaldab kogu konto sisu, meedia ja profiiliandmed. + <strong>Ei midagi</strong> kui Te soovite lihtsalt keelata meediafailid. + noop: Ei midagi + silence: Vaigista + suspend: Peata + title: Uus domeeniblokeering + private_comment: Privaatne kommentaar + private_comment_hint: Kommenteeri selle domeeni limiteerimise kohta moderaatoritele. + public_comment: Avalik kommentaar + public_comment_hint: Kommenteeri selle domeeni limiteerimise kohta avalikkusele, kui domeenilimitatsioonide loend on kõigile nähtav. + reject_media: Keela meediafailid + reject_media_hint: Kustutab kohalikult salvestatud meediafailid ja keeldub tulevikus rohkem allalaadimast. Ei puuduta peatamisi + reject_reports: Lükka teavitused tagasi + reject_reports_hint: Eira kõik teavitused sellelt domeenilt. Ei puuduta peatamisi + rejecting_media: keelan meediafaile + rejecting_reports: keelan teavitusi + severity: + silence: vaigistatud + suspend: peatatud + show: + affected_accounts: + one: Üks kasutaja andmebaasis mõjutatud + other: "%{count} kasutajat andmebaasis mõjutatud" + retroactive: + silence: Eemalda vaigistus mõjutatud kasutajatelt sellel domeenil + suspend: Lõpeta mõjutatud kasutajate peatamine sellel domeenil + title: Eemalda domeeniblokeering %{domain} + undo: Võta tagasi + undo: Võta tagasi domeeniblokeering + view: Vaata domeeniblokeeringut + email_domain_blocks: + add_new: Lisa uus + created_msg: E-posti aadressi keelunimekirja lisamine õnnestus + delete: Kustuta + destroyed_msg: E-posti aadressi keelunimekirjast kustutamine õnnestus + domain: Domeen + new: + create: Lisa domeen + title: Uus e-posti keelunimekirja sisend + title: E-posti keelunimekiri + followers: + back_to_account: Tagasi minu kontole + title: "%{acct}-i jälgijad" + instances: + by_domain: Domeen + delivery_available: Üleandmine on saadaval + known_accounts: + one: "%{count} teadaolev kasutaja" + other: "%{count} teadaolevat kasutajat" + moderation: + all: Kõik + limited: Piiratud + title: Moderatsioon + private_comment: Privaatne kommentaar + public_comment: Avalik kommentaar + title: Föderatsioon + total_blocked_by_us: Meie poolt blokeeritud + total_followed_by_them: Nende poolt jälgitud + total_followed_by_us: Meie poolt jälgitud + total_reported: Nende kohta teateid + total_storage: Lisatud meedia + invites: + deactivate_all: Peata kõik + filter: + all: Kõik + available: Saadaval + expired: Aegunud + title: Filter + title: Kutsed + pending_accounts: + title: Ootel olevad kasutajad (%{count}) + relays: + add_new: Lisa uus relee + delete: Kustuta + description_html: "<strong>Föderatsiooni relee</strong> on vahepealne server, mis vahetab suures koguses tuututusi serverite vahel, mis on selle tellijad ning mis sellele saadavad. <strong>See aitab väikestel ja keskmistel serveritel avastada sisu fediversumist</strong>, mis tavaliselt nõuab teisel serveril olevate inimeste jälgimist." + disable: Keela + disabled: Keelatud + enable: Luba + enable_hint: Kui lubatud, siis sinu server tellib kõik avalikud tuututused sellelt releelt, ning hakkab ka enda avalikke tuututusi sellele saatma. + enabled: Lubatud + inbox_url: Relee URL + pending: Ootab relee nõusolekut + save_and_enable: Salvesta ja luba + setup: Sea üles releeühendus + signatures_not_enabled: Releed ei tööta korrektselt kuniks turvarežiim või lubatud nimekirja režiim on sisse lülitatud + status: Staatus + title: Releed + report_notes: + created_msg: Teade edukalt koostatud! + destroyed_msg: Teade edukalt kustutatud! + reports: + account: + note: märkus + report: teavita + action_taken_by: Meetmeid kasutanud + are_you_sure: Olete kindel? + assign_to_self: Määra mulle + assigned: Määratud moderaator + comment: + none: Pole + created_at: Teavitatud + mark_as_resolved: Märgi lahendatuks + mark_as_unresolved: Märgi lahendamata + notes: + create: Lisa märkus + create_and_resolve: Lahenda märkusega + create_and_unresolve: Taasava märkusega + delete: Kustuta + placeholder: Kirjelda, mis on ette võetud või muid seotud uuendusi... + reopen: Taasava teavitus + report: 'Teavitus #%{id}' + reported_account: Teavitatud kontost + reported_by: Teavitatud + resolved: Lahendatud + resolved_msg: Teavituse lahendamine õnnestus! + status: Staatus + title: Teavitused + unassign: Eemalda määramine + unresolved: Lahendamata + updated_at: Uuendatud + settings: + activity_api_enabled: + desc_html: Kohalike postituste, aktiivsete kasutajate ja uute registreerimiste numbrid iganädalaste "ämbritena" + title: Avalda koondstatistikat selle kasutaja aktiivsusest + bootstrap_timeline_accounts: + desc_html: Eralda mitut kasutajanime komadega. Ainult kohalikud ja lukustamata kasutajate nimed töötavad. Kui tühi, on vaikesätteks kõik kohalikud administraatorid. + title: Vaikimisi jälgimised uutele kasutajatele + contact_information: + email: Äri e-post + username: Kontakt kasutajanimi + custom_css: + desc_html: Muuda kujundust CSSi abil, mis laetakse igal lehel + title: Kohandatud CSS + default_noindex: + desc_html: Mõjutab kõiki kasutajaid, kes pole seda sätet ise muutnud + title: Loobu kasutajate otsingumootoritesse indekseerimisest vaikimisi + domain_blocks: + all: Kõigile + disabled: Mitte kellelegi + title: Näita domeeniblokeeringuid + users: Sisseloginud kohalikele kasutajatele + domain_blocks_rationale: + title: Näita põhjendust + hero: + desc_html: Kuvatud kodulehel. Vähemalt 600x100px soovitatud. Kui pole seadistatud, kuvatakse serveri pisililt + title: Maskotipilt + mascot: + desc_html: Kuvatakse mitmel lehel. Vähemalt 293x205px soovitatud. Kui pole seadistatud, kuvatakse vaikimisi maskott + title: Maskotipilt + peers_api_enabled: + desc_html: Domeenid, mida see server on kohanud fediversumis + title: Avalda nimekiri avastatud serveritest + preview_sensitive_media: + desc_html: Lingi eelvaated teistel veebisaitidel kuvab pisipilti, isegi kui meedia on märgitud tundlikuks + title: Kuva tundlikku meediat OpenGraphi eelvaadetes + profile_directory: + desc_html: Luba kasutajate avastamine + title: Luba profiilikataloog + registrations: + closed_message: + desc_html: Kuvatud esilehel kui registreerimised on suletud. Te võite kasutada HTMLi silte + title: Suletud registreerimiste sõnum + deletion: + desc_html: Luba kasutajatel oma konto kustutada + title: Ava kontode kustutamine + min_invite_role: + disabled: Mitte keegi + title: Luba kutseid + registrations_mode: + modes: + approved: Kinnitus vajalik konto loomisel + none: Keegi ei saa kontoid luua + open: Kõik võivad kontoid luua + title: Registreerimisrežiim + show_known_fediverse_at_about_page: + desc_html: Kui lubatud, näitab kõiki teatud fediversumi tuututusi. Vastasel juhul näidatakse ainult kohalike tuututusi. + title: Näita teatud fediversumit ajajoone eelvaates + show_staff_badge: + desc_html: Näita personalimärki kasutaja profiilil + title: Näita personalimärki + site_description: + desc_html: Sissejuhatuslik lõik API kohta. Kirjelda, mis teeb selle Mastodoni serveri eriliseks ja ka muud tähtsat. Te saate kasutada HTMLi silte, peamiselt <code><a></code> ja <code><em></code>. + title: Serveri kirjeldus + site_description_extended: + desc_html: Hea koht käitumisreegliteks, reegliteks, suunisteks ja muuks, mis teevad Teie serveri eriliseks. Te saate kasutada HTML silte + title: Lisa informatsioon + site_short_description: + desc_html: Kuvatud küljeribal ja metasiltides. Kirjelda, mis on Mastodon ja mis on selles serveris erilist ühes lõigus. + title: Serveri lühikirjeldus + site_terms: + desc_html: Te saate kirjutada oma privaatsuspoliitika, kasutustingimused jm seaduslikku infot. Te saate kasutada HTMLi silte + title: Kasutustingimused + site_title: Serveri nimi + spam_check_enabled: + desc_html: Mastodon suudab automaatselt vaigistada ja teatada kasutajatest, kasutades erinevaid meetmeid, näiteks kui kasutaja saadab korduvalt ebasobivaid sõnumeid. Võib esineda ka valehäireid. + title: Rämpsposti filter + thumbnail: + desc_html: Kasutatud OpenGraph ja API eelvaadeteks. 1200x630px soovitatud + title: Serveri pisipilt + timeline_preview: + desc_html: Kuva avalikku ajajoont esilehel + title: Ajajoone eelvaade + title: Lehe seaded + trendable_by_default: + desc_html: Puudutab silte, mis pole varem keelatud + title: Luba siltide trendimine ilma eelneva ülevaatuseta + trends: + desc_html: Kuva avalikult eelnevalt üle vaadatud sildid, mis on praegu trendikad + title: Populaarsed sildid praegu + statuses: + back_to_account: Tagasi konto lehele + batch: + delete: Kustuta + nsfw_off: Märgi kui mitte tundlik + nsfw_on: Märgi kui tundlik + deleted: Kustutatud + failed_to_execute: Täitmine ebaõnnestus + media: + title: Meedia + no_media: Meedia puudub + no_status_selected: Mitte ühtegi staatust muudeti sest midagi polnud valitud + title: Konto staatused + with_media: Meediaga + tags: + accounts_today: Unikaalseid kasutusi täna + accounts_week: Unikaalseid kasutusi see nädal + breakdown: Tänane kasutus allikate kohta + context: Kontekst + directory: Kataloogis + in_directory: "%{count} kataloogis" + last_active: Viimati aktiivne + most_popular: Kõige populaarsemad + most_recent: Viimased + name: Silt + review: Staatuse ülevaade + reviewed: Ülevaadatud + title: Sildid + trending_right_now: Praegu populaarsed + unique_uses_today: "%{count} inimest postitavad täna" + unreviewed: Üle vaatamata + updated_msg: Sildi sätted edukalt uuendatud + title: Administreerimine + warning_presets: + add_new: Lisa uus + delete: Kustuta + edit: Redigeeri + edit_preset: Redigeeri hoiatuse eelseadistust + title: Halda hoiatuste eelseadistusi + admin_mailer: + new_pending_account: + body: Uue konto üksikasjad on allpool. Te saate vastu võtta või tagasi lükata seda taotlust. + subject: Uus konto valmis ülevaatluseks serveril %{instance} (%{username}) + new_report: + body: "%{reporter} teavitas kasutajast %{target}" + body_remote: Keegi domeenist %{domain} teavitas kasutajast %{target} + subject: Uus teavitus %{instance}-ile (#%{id}) + new_trending_tag: + body: Silt %{name} on täna trendikas, aga pole eelnevalt üle vaadatud. Seda ei näidata avalikult, välja arvatud juhul, kui Te ise seda lubate või lihtsalt salvestage vorm nagu see on ning Te ei kuule sellest enam kunagi. + subject: Uus silt valmis ülevaatluseks serveril %{instance} (#%{name}) + aliases: + add_new: Loo teine nimi + created_msg: Teine nimi on edukalt loodud. Te saate nüüd alustada kolimist vanalt kontolt. + deleted_msg: Edukalt kustutasime teise nime. Kolimine sellelt kontolt praegusele on nüüdsest võimatu. + hint_html: Kui Te soovite kolida teiselt kontolt praegusele kontole, saate Te siin luua teise nime, mis on kohustuslik, enne kui saate kolida jälgijaid vanalt kontolt praegusele. See tegevus on iseenesest <strong>kahjutu ja taastatav</strong>. <strong>Konto ületoomine alustatakse vanalt kontolt</strong>. + remove: Eemalda teine nimi + appearance: + advanced_web_interface: Arenenud veebiliides + advanced_web_interface_hint: 'Kui soovite kasutada terve ekraani laiust, lubab arenenud veebiliides seadistada mitut erinevat veergu, et näha nii palju informatsiooni samal ajal kui võimalik: Kodu, teavitused, föderatsiooni ajajoon ning mis iganes arv nimekirju ja silte.' + animations_and_accessibility: Animatsioonid ja ligipääs + confirmation_dialogs: Kinnitusdialoogid + discovery: Avastus + sensitive_content: Tundlik sisu + toot_layout: Tuututuse kujundus + application_mailer: + notification_preferences: Muuda e-kirjade eelistusi + salutation: "%{name}," + settings: 'Muuda e-kirjade eelistusi: %{link}' + view: 'Vaade:' + view_profile: Vaata profiili + view_status: Vaata staatust + applications: + created: Rakenduse loomine õnnestus + destroyed: Rakenduse kustutamine õnnestus + invalid_url: Antud URL on vale + regenerate_token: Loo uus access token + token_regenerated: Access tokeni loomine õnnestus + warning: Olge nende andmetega ettevaatlikud. Ärge jagage neid kellegagi! + your_token: Sinu access token + auth: + apply_for_account: Taotle kutse + change_password: Salasõna + checkbox_agreement_html: Ma nõustun <a href="%{rules_path}" target="_blank">serveri reeglitega</a> ja <a href="%{terms_path}" target="_blank">kasutustingimustega</a> + checkbox_agreement_without_rules_html: Ma nõustun <a href="%{terms_path}" target="_blank">kasutustingimustega</a> + delete_account: Kustuta konto + delete_account_html: Kui Te soovite oma kontot kustutada, võite <a href="%{path}">jätkata siit</a>. Teilt küsitakse kinnitust. + description: + prefix_invited_by_user: "@%{name} kutsub Teid liituma selle Mastodoni serveriga!" + prefix_sign_up: Loo Mastodoni konto juba täna! + suffix: Kasutajakontoga saate jälgida inimesi, postitada uudiseid ning teha kirjavahetust üks kõik millisest Mastodoni serverist kasutajatega ja muud! + didnt_get_confirmation: Ei saanud kinnituse juhendeid? + forgot_password: Unustasid oma salasõna? + invalid_reset_password_token: Salasõna lähtestusvõti on vale või aegunud. Palun taotle uus. + login: Logi sisse + logout: Logi välja + migrate_account: Koli teisele kasutajale + migrate_account_html: Kui Te soovite seda kontot ümber viia teisele, <a href="%{path}">saate teha seda siit</a>. + or_log_in_with: Või logi sisse koos + providers: + cas: CAS + saml: SAML + register: Loo konto + registration_closed: "%{instance} ei võta vastu uusi liikmeid" + resend_confirmation: Saada kinnitusjuhendid uuesti + reset_password: Lähtesta salasõna + security: Turvalisus + set_new_password: Määra uus salasõna + setup: + email_below_hint_html: Kui allolev e-posti aadress on vale, saate Te muuta seda siin ning Teile saadetakse uus kinnituskiri. + email_settings_hint_html: Kinnituskiri saadeti e-posti aadressile %{email}. Kui see aadress pole õige, saate Te muuta seda oma konto sätetest. + title: Seadistamine + status: + account_status: Konto olek + confirming: Ootan e-posti kinnitust. + functional: Teie konto on täiesti töökorras. + pending: Teie taotlus ootab ülevaadet meie personali poolt. See võib võtta mõnda aega. Kui Teie taotlus on vastu võetud, saadetakse Teile e-kiri. + redirecting_to: Teie konto ei ole aktiivne, kuna hetkel suunatakse ümber kasutajale %{acct}. + trouble_logging_in: Probleeme sisselogimisega? + authorize_follow: + already_following: Te juba jälgite seda kontot + error: Kahjuks ilmus viga kasutaja kaugserverist otsimisel + follow: Jälgi + follow_request: 'Te olete saatnud jälgimistaotluse kasutajale:' + following: 'Õnnestus! Te nüüd jälgite kasutajat:' + post_follow: + close: Või Te saate lihtsalt sulgeda seda akent. + return: Näita kasutaja profiili + web: Mine veebi + title: Jälgi %{acct} + challenge: + confirm: Jätka + hint_html: "<strong>Nõuanne:</strong> Me ei küsi Teilt uuesti salasõna järgmise tunni jooksul." + invalid_password: Vigane salasõna + prompt: Jätkamiseks kinnitage salasõna + datetime: + distance_in_words: + about_x_hours: "%{count}t" + about_x_months: "%{count}k" + about_x_years: "%{count}a" + almost_x_years: "%{count}a" + half_a_minute: Just praegu + less_than_x_minutes: "%{count}m" + less_than_x_seconds: Just praegu + over_x_years: "%{count}a" + x_days: "%{count}p" + x_minutes: "%{count}m" + x_months: "%{count}k" + x_seconds: "%{count}s" + deletes: + challenge_not_passed: Informatsioon, mida sisestasite, oli vale + confirm_password: Sisesta oma praegune salasõna, et kinnitada oma identiteet + confirm_username: Sisestage oma kasutajanimi protseduuri kinnitamiseks + proceed: Kustuta konto + success_msg: Konto kustutamine õnnestus + warning: + before: 'Enne jätkamist palun lugege neid märkmeid hoolikalt:' + caches: Sisu, mis on salvestatud teiste serverite poolt, võib jääda alles + data_removal: Teie postitused ning muud andmed kustutatakse jäädavalt + email_change_html: Te saate <a href="%{path}">muuta oma e-postiaadressi</a> kontot kustutamata + email_contact_html: Kui see ikkagi ei saabu, saatke abi saamiseks kiri aadressile <a href="mailto:%{email}">%{email}</a> + email_reconfirmation_html: Kui Te ei saanud kinnituskirja, saate selle <a href="%{path}">uuesti küsida</a> + irreversible: Te ei saa taastada ega taasaktiveerida oma kontot + more_details_html: Rohkemate detailide jaoks palun lugege <a href="%{terms_path}">privaatsuspoliitikat</a>. + username_available: Teie kasutajanimi muutub uuesti kasutatavaks + username_unavailable: Teie kasutajanimi jääb mitte kasutatavaks + directories: + directory: Profiilikataloog + explanation: Avasta kasutajaid nende huvide põhjal + explore_mastodon: Avasta %{title} + domain_validator: + invalid_domain: ei ole sobiv domeeni nimi + errors: + '400': Toiming oli vale või valesti vormindatud. + '403': Sul puudub õigus seda lehte vaadata. + '404': Soovitud lehte ei leitud. + '406': See lehekülg ei ole soovitavas formaadis saadaval. + '410': Soovitud lehekülge pole enam siin. + '422': + content: Turvalisuse kontroll ebaõnnestus. Kas Te blokeerite küpsiseid? + title: Turvalisuse kontroll ebaõnnestus + '429': Aeglustatud + '500': + content: Palume vabandust, midagi läks valesti meie pool. + title: See lehekülg pole õige + '503': Lehekülge ei saanud serveerida ajutise serveri vea tõttu. + noscript_html: Et kasutada Mastodoni veebirakendust, palun lubage JavaScript. Alternatiivselt, proovige mõnda <a href="%{apps_path}">rakendust</a> Teie platvormile. + existing_username_validator: + not_found: ei suutnud leida kohalikku kasutajat selle kasutajanimega + not_found_multiple: ei suutnud leida %{usernames} + exports: + archive_takeout: + date: Kuupäev + download: Lae alla oma arhiiv + hint_html: Te saate taotleda arhiivi oma <strong>tuututustest ja üleslaetud meediast</strong>. Eksporditud andmed on ActivityPub-i formaadis, loetav vastava tarkvara poolt. Te saate taotleda arhiivi iga 7 päeva tagant. + in_progress: Loome Teie arhiivi... + request: Taotle oma arhiivi + size: Suurus + blocks: Teie blokeerite + csv: CSV + domain_blocks: Domeeni blokeeringud + follows: Teie jälgite + lists: Nimistud + mutes: Teie vaigistate + storage: Meedia hoidla + featured_tags: + add_new: Lisa uus + errors: + limit: Olete jõudnud maksimum lubatud siltide arvuni + hint_html: "<strong>Mis on esile toodud sildid?</strong> Need sildid näidatakse nähtavalt Teie avalikul profiilil ning nad aitavad inimestel leida postitusi, millel on antud sildid. Nad on hea viis kuidas näiteks hoida järge loovtöödel või pikaajalistel projektidel." + filters: + contexts: + home: Kodu ajajoon + notifications: Teated + public: Avalikud ajajooned + thread: Vestlused + edit: + title: Muuda filtrit + errors: + invalid_context: Puudulik või vale kontekst + invalid_irreversible: Taastamatu filter töötab ainult kodu või teavituste kontekstis + index: + delete: Kustuta + title: Filterid + new: + title: Lisa uus filter + footer: + developers: Arendajad + more: Rohkem… + resources: Materjalid + trending_now: Praegu trendikad + generic: + all: Kõik + changes_saved_msg: Muudatuste salvestamine õnnestus! + copy: Kopeeri + no_batch_actions_available: Komplekttegevused pole sellel lehel saadaval + order_by: Järjesta + save_changes: Salvesta muudatused + validation_errors: + one: Midagi pole ikka õigesti! Palun vaadake allolev veateade üle + other: Midagi pole ikka õigesti! Palun vaadake all olevad %{count} veateadet üle + html_validator: + invalid_markup: 'sisaldab valet HTMLi süntaksi: %{error}' + identity_proofs: + active: Aktiivne + authorize: Jah, luba + authorize_connection_prompt: Luba see krüptograafiline ühendus? + errors: + failed: Krüptograafiline ühendus ebaõnnestus. Palun proovi uuesti %{provider}-ist. + keybase: + invalid_token: Keybase võtmed on allkirjade hashid ja peavad olema 66 hex tähemärki + verification_failed: Keybase ei tunnista seda võtit kui kasutaja %{kb_username} omand. Palun proovige uuesti Keybasest. + wrong_user: Ei saa luua tõendit kontole %{proving} kui olete sisseloginud kui %{current}. Logige sisse kui %{proving} ja proovige uuesti. + explanation_html: Siin saate luua krüptograafilisi ühendusi oma teiste identiteetidega, nagu näiteks Keybase profiiliga. See võimaldab teistel kasutajatel saata Teile krüptitud sõnumeid ja usaldada sisu, mis Teie saadate neile. + i_am_html: Ma olen %{username} teenusel %{service}. + identity: Identiteet + inactive: Passiivne + publicize_checkbox: 'Ja tuututa seda:' + publicize_toot: 'See on tõestatud! Ma olen %{username} teenusel %{service}: %{url}' + status: Kinnituse staatus + view_proof: Vaata tõendit + imports: + modes: + merge: Lõimi + merge_long: Hoia olemasolevad andmed ja lisa uusi + overwrite: Kirjuta üle + overwrite_long: Vaheta praegused andmed uute vastu + preface: Te saate importida mis tahes andmeid, mis on eksporditud teisest serverist. Näiteks nimekiri inimestest, keda jälgid ja keda blokeerid. + success: Teie andmete üleslaadimine õnnestus ning neid töödeldakse + types: + blocking: Blokeeringute nimekiri + domain_blocking: Domeeniblokeeringute nimekiri + following: Jälgimiste nimekiri + muting: Vaigistuse nimekiri + upload: Lae üles + in_memoriam_html: Mälestamaks. + invites: + delete: Peata + expired: Aegunud + expires_in: + '1800': 30 minutit + '21600': 6 tundi + '3600': 1 tund + '43200': 12 tundi + '604800': 1 nädal + '86400': 1 päev + expires_in_prompt: Mitte kunagi + generate: Loo + invited_by: 'Teid kutsus:' + max_uses: + one: 1 kasutus + other: "%{count} kasutust" + max_uses_prompt: Piiranguteta + prompt: Loo ja jaga linke teistega, et lubada neil liituda selle serveriga + table: + expires_at: Aegub + uses: Kasutust + title: Kutsu inimesi + lists: + errors: + limit: Olete jõudnud maksimum lubatud nimekirjade arvuni + media_attachments: + validations: + images_and_video: Ei saa lisada video staatusele, millel on juba pildid + too_many: Ei saa lisada rohkem, kui 4 faili + migrations: + acct: uue konto kasutajanimi@domeen + cancel: Tühista ümbersuunamine + cancel_explanation: Ümbersuunamise tühistamine taasaktiveerib Teie praeguse konto, kuid ei too tagasi jälgijaid, mis on sellele kontole üle viidud. + cancelled_msg: Ümbersuunamise tühistamine õnnestus. + errors: + already_moved: on sama konto, kuhu Te olete juba kolinud + missing_also_known_as: ei viita tagasi sellele kontole + move_to_self: ei saa olla praegune konto + not_found: ei leitud + on_cooldown: Te olete hetkel ootel + followers_count: Jälgijaid kolimise hetkel + incoming_migrations: Kolivad teiselt kontolt + incoming_migrations_html: Kui soovite kolida teiselt kontolt praegusele, peate Te esmalt looma <a href="%{path}">kontole teise nime</a>. + moved_msg: Teie konto on nüüd ümber suunamas kontole %{acct} ning Teie jälgijaid kolitakse üle. + not_redirecting: Teie kontot ei suunata hetkel ümber. + on_cooldown: Te olete hiljuti kolinud oma kontot. See funktsioon on jälle kättesaadav %{count} päeva pärast. + past_migrations: Eelmiseid kolimisi + proceed_with_move: Koli üle jälgijad + redirecting_to: Teie konto suunatakse ümber kontole %{acct}. + set_redirect: Määra ümbersuunamine + warning: + backreference_required: Uus konto peab olema esmalt seadistatud tagasi viitama praegusele kontole + before: 'Enne jätkamist palun lugege neid märkmeid hoolikalt:' + cooldown: Pärast kolimist on ooteperiood, mille kestel ei saa Te uuesti kolida + disabled_account: Teie praegune konto ei ole täiesti kasutatav peale seda. Sellest hoolimata on Teil ligipääs andmete ekspordile ja taasaktiveerimisele. + followers: See tegevus kolib kõik jälgijad üle praeguselt kontolt uuele kontole + only_redirect_html: Alternatiivselt saate Te <a href="%{path}">seadistada ainult ümbersuunamise Teie profiilil</a>. + other_data: Muid andmeid ei liigutata automaatselt + redirect: Teie praegune konto eemaldatakse otsingutulemustest ning profiilile lisatakse ümbersuunamise märguanne + moderation: + title: Moderatsioon + notification_mailer: + digest: + action: Vaata kõiki teateid + body: Siin on kiire ülevaade sellest, mis sõnumeid Te ei näinud pärast Teie viimast külastust %{since} + mention: "%{name} mainis sind postituses:" + new_followers_summary: + one: Ja veel, Te saite ühe uue jälgija kui Te olite eemal! Jee! + other: Ja veel, Te saite %{count} uut jälgijat kui Te olite eemal! Hämmastav! + subject: + one: "1 uus teavitus peale Teie eelmist külastust \U0001F418" + other: "%{count} uut teavitust peale Teie eelmist külastust \U0001F418" + title: Teie puudumisel... + favourite: + body: "%{name} lisas Teie staatuse lemmikutesse:" + subject: "%{name} märkis su staatuse lemmikuks" + title: Uus lemmik + follow: + body: "%{name} nüüd jälgib teid!" + subject: "%{name} nüüd jälgib teid" + title: Uus jälgija + follow_request: + action: Halda jälgimistaotlusi + body: "%{name} soovib Teid jälgida" + subject: 'Ootav jälgija: %{name}' + title: Uus jälgimistaotlus + mention: + action: Vasta + body: "%{name} mainis Teid:" + subject: "%{name} mainis Teid" + title: Uus mainimine + reblog: + body: "%{name} upitas Teie staatust:" + subject: "%{name} upitas su staatust" + title: Uus upitus + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: T + trillion: Tr + pagination: + newer: Uuemad + next: Järgmine + older: Vanemad + prev: Eelm + truncate: "…" + polls: + errors: + already_voted: Olete siin juba hääletanud + duplicate_options: sisaldab samu asju mitu korda + duration_too_long: kestab liiga kaua + duration_too_short: on liiga vara + expired: See küsitlus on juba lõppenud + over_character_limit: igaüks ei saa olla rohkem kui %{max} tähemärki + too_few_options: peab olema rohkem kui üks vastus + too_many_options: ei saa sisaldada rohkem kui %{max} vastust + preferences: + other: Muu + posting_defaults: Postitamise vaikesätted + public_timelines: Avalikud ajajooned + relationships: + activity: Konto tegevus + dormant: Seisev + last_active: Viimati aktiivne + most_recent: Viimased + moved: Kolinud + mutual: Ühine + primary: Peamine + relationship: Seos + remove_selected_domains: Eemalda kõik jälgijad valitud domeenidelt + remove_selected_followers: Eemalda valitud jälgijad + remove_selected_follows: Lõpeta valitud kasutajate jälgimine + status: Konto olek + remote_follow: + acct: Sisestage oma kasutajanimi@domeen, kust te soovite jälgida + missing_resource: Ei suutnud leida vajalikku suunamise URLi Teie konto jaoks + no_account_html: Teil pole veel kontot? Saate <a href='%{sign_up_path}' target='_blank'>luua ühe siit</a> + proceed: Jätka jälgimiseks + prompt: 'Te hakkate jälgima:' + reason_html: |- + <strong>Miks on see samm vajalik?</strong> + <code>%{instance}</code> ei pruugi olla server, kus asub Teie konto, nii et me peame Teid suunama oma kodu serverile. + remote_interaction: + favourite: + proceed: Jätka lemmikuks lisamiseks + prompt: 'Te soovite lisada seda tuututust lemmikutesse:' + reblog: + proceed: Jätka upitamiseks + prompt: 'Te soovite seda tuututust upitada:' + reply: + proceed: Jätka vastamiseks + prompt: 'Te soovite vastata sellele tuututusele:' + scheduled_statuses: + over_daily_limit: Te olete jõudnud maksimum lubatud ajastatud tuututuste arvuni %{limit} selle päeva kohta + over_total_limit: Te olete jõudnud maksimum lubatud ajastatud tuututuste arvuni %{limit} + too_soon: Ajastatud tuututuse kuupäev peab olema tukevikus + sessions: + activity: Viimane aktiivsus + browser: Veebilehitseja + browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Tundmatu veebilehitseja + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo + current_session: Praegune seanss + description: "%{browser} platvormil %{platform}" + explanation: Need on praegused veebilehitsejad, mis on sisse logitud sinu Mastodoni kontosse. + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac + other: tundmatu platvorm + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Tühista + revoke_success: Seanssi tühistamine õnnestus + title: Seanssid + settings: + account: Konto + account_settings: Kontosätted + aliases: Konto teised nimed + appearance: Välimus + authorized_apps: Lubatud rakendused + back: Tagasi Mastodoni + delete: Konto kustutamine + development: Arendus + edit_profile: Muuda profiili + export: Andmete eksportimine + featured_tags: Esile toodud sildid + identity_proofs: Isikutõendid + import: Impordi + import_and_export: Import / eksport + migrate: Konto migreerumine + notifications: Teated + preferences: Eelistused + profile: Profiil + relationships: Jälgitud ja jälgijad + two_factor_authentication: Kahesammuline autentimine + spam_check: + spam_detected: See on automatiseeritud teavitus. Rämpspost on tuvastatud. + statuses: + attached: + description: 'Manused: %{attached}' + image: + one: "%{count} pilt" + other: "%{count} pilti" + video: + one: "%{count} video" + other: "%{count} videot" + boosted_from_html: Upitatud %{acct_link} + content_warning: 'Sisu hoiatus: %{warning}' + disallowed_hashtags: + one: 'sisaldab ebasobivat silti: %{tags}' + other: 'sisaldab ebasobivaid silte: %{tags}' + language_detection: Automaatselt tuvasta keel + open_in_web: Ava veebis + over_character_limit: tähtmärkide limiit %{max} ületatud + pin_errors: + limit: Te olete juba maksimum arvu lubatud tuututusi kinnitanud + ownership: Kellegi teise tuututust ei saa kinnitada + private: Privaatset tuututust ei saa kinnitada + reblog: Upitust ei saa kinnitada + poll: + total_people: + one: "%{count} inimene" + other: "%{count} inimest" + total_votes: + one: "%{count} hääl" + other: "%{count} häält" + vote: Hääleta + show_more: Näita rohkem + sign_in_to_participate: Logi sisse, et liituda vestlusega + title: '%{name}: "%{quote}"' + visibilities: + private: Ainult jälgijatele + private_long: Näita ainult jälgijatele + public: Avalik + public_long: Kõik saavad näha + unlisted: Kirjendamata + unlisted_long: Kõik saavad näha, aga ei ole saadaval avalikes ajajoontes + stream_entries: + pinned: Kinnitatud tuut + reblogged: upitatud + sensitive_content: Tundlik sisu + tags: + does_not_match_previous_name: ei ühti eelmise nimega + terms: + title: "%{instance} Kasutustingimused ja Privaatsuspoliitika" + themes: + contrast: Mastodon (Kõrge kontrast) + default: Mastodon (Tume) + mastodon-light: Mastodon (Hele) + time: + formats: + default: "%d. %B, %Y. aastal, kell %H:%M" + month: "%B %Y" + two_factor_authentication: + code_hint: Sisesta kaheastmelise autentimise kood, mille lõi Teie autentimisrakendus, et jätkata + description_html: Kui Te aktiveerite <strong>kaheastmelise autentimise</strong>, siis sisselogimisel peab teil olema telefon, mis loob Teile koode sisenemiseks. + disable: Lülita välja + enable: Lülita sisse + enabled: Kaheastmeline autentimine on sisse lülitatud + enabled_success: Kaheastmeline autentimine on edukalt sisse lülitatud + generate_recovery_codes: Loo taastuskoodid + instructions_html: "<strong>Skaneeri see QR kood kasutades rakendust Google Authenticator või muu TOTP rakendus Teie telefonis</strong>. Nüüdsest alates loob see rakendus Teile koode, mida peate sisestama sisselogimisel." + lost_recovery_codes: Taastuskoodide abil on Teil võimalik sisse logida kontosse, kui Te kaotate oma telefoni. Kui Te kaotate oma taastuskoodid, saate need uuesti luua siin. Teie vanad taastuskoodid tehakse kehtetuks. + manual_instructions: 'Kui Te ei saa seda QR koodi skaneerida ning peate sisestama selle käsitsi, on siin tekstiline salavõti:' + recovery_codes: Tagavara taastuskoodid + recovery_codes_regenerated: Taastuskoodid edukalt taasloodud + recovery_instructions_html: Kui Te juhtute kunagi kaotama oma telefoni, saate kasutada ühte allpool olevatest taastuskoodidest, et saada ligipääsu oma kontole. <strong>Hoidke taastuskoodid turvaliselt</strong>. Näiteks võite Te need välja printida ning hoida need koos teiste tähtsate dokumentidega. + setup: Sätesta + wrong_code: Sisestatud kood on vale! Kas serveri aeg ja seadme aeg on õiged? + user_mailer: + backup_ready: + explanation: Te taotlesite varukoopia oma Mastodoni kontost. See on nüüd valmis allalaadimiseks! + subject: Teie arhiiv on allalaadimiseks valmis + title: Arhiivi väljavõte + warning: + explanation: + disable: Kuniks Teie konto on lukus, ei saa Te teha sellega ühtegi tegevust kuni see on lukust lahti tehtud. + silence: Kuniks Teie konto on limiteeritud, ainult need inimesed, kes Teid juba jälgivad, näevad Teie tuututusi sellel serveril ning Teid jäetakse välja avalikest nimekirjadest. Sellest hoolimata võivad inimesed Teid siiski jälgida. + suspend: Teie konto on peatatud ning kõik Teie tuututused ja üleslaetud meediafailid on jäädavalt kustutatud sellelt serverilt ning serveritelt, kus Teil oli jälgijad. + get_in_touch: Te saate sellele e-kirjale vastata, et võtta ühendust %{instance}-i personaliga. + review_server_policies: Vaadake üle serveri eeskirju + statuses: 'Täpsemalt:' + subject: + disable: Teie konto %{acct} on lukustatud + none: Hoiatus kasutajale %{acct} + silence: Teie kontole %{acct} on kehtestatud limiidid + suspend: Teie konto %{acct} on peatatud + title: + disable: Konto lukustatud + none: Hoiatus + silence: Konto limiteeritud + suspend: Konto peatatud + welcome: + edit_profile_action: Sea üles profiil + edit_profile_step: Te saate oma profiili isikupärastada näiteks lisades profiilipildi, päise, muutes oma kuvanime ja muud. Kui Te soovite üle vaadata inimesi, kes Teid jälgida soovivad, saate lukustada oma konto. + explanation: Siin on mõned nõuanded, mis aitavad sul alustada + final_action: Alusa postitamist + final_step: 'Alusta postitamist! Isegi ilma jälgijateta näevad teised Teie avalikke postitusi, näiteks kohalikul ajajoonel ning siltidest. Te võite ennast tutvustada kasutades silti #introductions.' + full_handle: Sinu täisnimi + full_handle_hint: See on mida oma sõpradega jagada, et nad saaksid Teile sõnumeid saata ning Teid jälgida teiselt serverilt. + review_preferences_action: Muuda eelistusi + review_preferences_step: Kindlasti seadistage oma sätted Teie maitse järgi, näiteks e-kirju, mida soovite saada, või millist privaatsustaset Te soovite vaikimisi. Kui Teil pole merehaigust, võite Te näiteks lubada GIFide automaatse mängimise. + subject: Tere tulemast Mastodoni + tip_federated_timeline: Föderatiivne ajajoon on reaalajas voogvaade tervest Mastodoni võrgust. Aga see sisaldab ainult inimesi, keda su naabrid tellivad, niiet see pole täiuslik. + tip_following: Vaikimisi, Te jälgite ainult oma serveri administraator(eid). Et leida rohkem huvitavamaid inimesi, vaadake kohalikke ja föderatiivseid ajajooni. + tip_local_timeline: Kohalik ajajoon on reaalajas voogvaade inimestest, kes on serveris %{instance}. Need on Teie lähimad naabrid! + tip_mobile_webapp: Kui Teie mobiilne veebilehitseja pakub Teile lisada meid Teie avaekraanile, saate Te reaalajas teateid. See töötab nagu tavaline mobiilirakendus mitmel moel! + tips: Nõuanded + title: Tere tulemast pardale, %{name}! + users: + follow_limit_reached: Te ei saa jälgida rohkem kui %{limit} inimest + invalid_email: See e-posti aadress on vale + invalid_otp_token: Vale kaheastmelise autentimise kood + otp_lost_help_html: Kui Te kaotasite ligipääsu mõlemale, saate võtta ühendust %{email}-iga + seamless_external_login: Te olete sisse loginud läbi väljaspool asuva teenusega, niiet salasõna ja e-posti sätted pole saadaval. + signed_in_as: 'Sisse logitud kasutajana:' + verification: + explanation_html: 'Te saate <strong>kinnitada ennast oma linkide omanikena oma profiili metaandmetes</strong>. Et seda teha, peab Teie lingitud veebilehel olema link tagasi Teie Mastodoni profiilile. Tagasi saatval lingil <strong>peab</strong> olema <code>rel="me"</code> atribuut. Tekstisisu lingil ei loe. Siin on üks näide:' + verification: Kinnitamine diff --git a/config/locales/eu.yml b/config/locales/eu.yml index d83deb214..ab8a68746 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -4,26 +4,26 @@ eu: about_hashtag_html: Hauek <strong>#%{hashtag}</strong> traola duten toot publikoak dira. Fedibertsoko edozein kontu baduzu harremanetan jarri zaitezke. about_mastodon_html: Mastodon web protokolo ireki eta libreak darabiltzan gizarte sare bat da. E-mail sarea bezala deszentralizatua da. about_this: Honi buruz - active_count_after: aktiboa + active_count_after: aktibo active_footnote: Hilabeteko erabiltzaile aktiboak (HEA) administered_by: 'Administratzailea(k):' api: APIa apps: Aplikazio mugikorrak apps_platforms: Erabili Mastodon, iOS, Android eta beste plataformetatik browse_directory: Arakatu profilen direktorio bat eta iragazi interesen arabera + browse_local_posts: Ikusi zerbitzari honetako mezu publikoen zuzeneko jario bat browse_public_posts: Arakatu Mastodoneko mezu publikoen zuzeneko jario bat contact: Kontaktua contact_missing: Ezarri gabe contact_unavailable: E/E discover_users: Aurkitu erabiltzaileak documentation: Dokumentazioa - extended_description_html: | - <h3>Arauentzako toki egoki bat</h3> - <p>Azalpen luzea ez da ezarri oraindik.</p> federation_hint_html: "%{instance} instantzian kontu bat izanda edozein Mastodon zerbitzariko jendea jarraitu ahal izango duzu, eta harago ere." - generic_description: "%{domain} sareko zerbitzari bat da" get_apps: Probatu mugikorrerako aplikazio bat hosted_on: Mastodon %{domain} domeinuan ostatatua + instance_actor_flash: 'Kontu hau zerbitzaria bera adierazten duen aktore birtual bat da, ez norbanako bat. Federaziorako erabiltzen da eta ez zenuke blokeatu behar instantzia osoa blokeatu nahi ez baduzu, kasu horretan domeinua blokeatzea egokia litzateke. + +' learn_more: Ikasi gehiago privacy_policy: Pribatutasun politika see_whats_happening: Ikusi zer gertatzen ari den @@ -35,6 +35,14 @@ eu: status_count_before: Hauek tagline: Jarraitu lagunak eta egin berriak terms: Erabilera baldintzak + unavailable_content: Eduki eskuraezina + unavailable_content_description: + domain: Zerbitzaria + reason: Arrazoia + rejecting_media: 'Zerbitzari hauetako multimedia fitxategiak ez dira prozesatuko ez gordeko, eta ez dira iruditxoak bistaratuko, jatorrizko irudira joan behar izango da klik eginez:' + silenced: 'Zerbitzari hauetako mezuak denbora-lerro eta elkarrizketa publikoetan ezkutatuko dira, eta bere erabiltzaileen interakzioek ez dute jakinarazpenik sortuko ez badituzu jarraitzen:' + suspended: 'Ez da zerbitzari hauetako daturik prozesatuko, gordeko, edo partekatuko, zerbitzari hauetako erabiltzaileekin komunikatzea ezinezkoa eginez:' + unavailable_content_html: Mastodonek orokorrean fedibertsoko beste zerbitzarietako erabiltzaileen edukia ikustea eta beraiekin aritzea ahalbidetzen dizu. Salbuespena egin da zerbitzari zehatz honekin. user_count_after: one: erabiltzaile other: erabiltzaile @@ -42,6 +50,8 @@ eu: what_is_mastodon: Zer da Mastodon? accounts: choices_html: "%{name}(r)en aukerak:" + endorsements_hint: Jarraitzen duzun jendea sustatu dezakezu web interfazearen bidez, eta hemen agertuko da. + featured_tags_hint: Hemen agertuko diren traolak nabarmendu ditzakezu. follow: Jarraitu followers: one: Jarraitzaile @@ -51,8 +61,9 @@ eu: last_active: azkenekoz aktiboa link_verified_on: 'Esteka honen jabetzaren egiaztaketa data: %{date}' media: Multimedia - moved_html: "%{name} hona lekualdatu da %{new_profile_link}:" + moved_html: "%{name} hona migratu da %{new_profile_link}:" network_hidden: Informazio hau ez dago eskuragarri + never_active: Inoiz ez nothing_here: Ez dago ezer hemen! people_followed_by: "%{name}(e)k jarraitzen dituenak" people_who_follow: "%{name} jarraitzen dutenak" @@ -60,9 +71,9 @@ eu: following: Onetsi nahi duzun pertsona aurretik jarraitu behar duzu posts: one: Toot - other: Tootak - posts_tab_heading: Tootak - posts_with_replies: Toot eta erantzunak + other: Toot + posts_tab_heading: Toot-ak + posts_with_replies: Toot-ak eta erantzunak reserved_username: Erabiltzaile-izena erreserbatuta dago roles: admin: Administratzailea @@ -165,6 +176,7 @@ eu: user: Erabiltzailea salmon_url: Salmon URL-a search: Bilatu + search_same_ip: IP bera duten beste erabiltzaileak shared_inbox_url: Partekatutako sarrera ontziaren URL-a show: created_reports: Sortutako txostenak @@ -183,6 +195,7 @@ eu: username: Erabiltzaile-izena warn: Abisatu web: Weba + whitelisted: Zerrenda zurian action_logs: actions: assigned_to_self_report: "%{name}(e)k %{target} salaketa bere buruari esleitu dio" @@ -190,10 +203,12 @@ eu: confirm_user: "%{name}(e)k %{target}(r)en e-mail helbidea berretsi du" create_account_warning: "%{name}-k abisua bidali dio %{target}-ri" create_custom_emoji: "%{name}(e)k emoji berria kargatu du %{target}" + create_domain_allow: "%{name}(e)k %{target} domeinua zerrenda zurian zartu du" create_domain_block: "%{name}(e)k %{target} domeinua blokeatu du" create_email_domain_block: "%{name}(e)k %{target} e-mail helbideen domeinua zerrenda beltzean sartu du" demote_user: "%{name}(e)k %{target} mailaz jaitsi du" destroy_custom_emoji: "%{name} erabiltzaileak %{target} emojia suntsitu du" + destroy_domain_allow: "%{name}(e)k %{target} domeinua zerrenda zuritik kendu du" destroy_domain_block: "%{name}(e)k %{target} domeinua desblokeatu du" destroy_email_domain_block: "%{name}(e)k %{target} e-mail helbideen domeinua zerrenda zurian sartu du" destroy_status: "%{name}(e)k %{target}(e)n egoera kendu du" @@ -218,19 +233,24 @@ eu: deleted_status: "(ezabatutako mezua)" title: Auditoria-egunkaria custom_emojis: + assign_category: Esleitu kategoria by_domain: Domeinua copied_msg: Ongi sortu da emoji-aren kopia lokala copy: Kopiatu copy_failed_msg: Ezin izan da emoji-aren kopia lokal bat sortu + create_new_category: Sortu kategoria berria created_msg: Emoji-a ongi sortu da! delete: Ezabatu destroyed_msg: Emoji-a ongi suntsitu da! disable: Desgaitu + disabled: Desgaituta disabled_msg: Emoji-a ongi desgaitu da emoji: Emojia enable: Gaitu + enabled: Gaituta enabled_msg: Emoji hori ongi gaitu da image_hint: PNG gehienez 50KB + list: Zerrendatu listed: Zerrendatua new: title: Gehitu emoji pertsonal berria @@ -238,22 +258,28 @@ eu: shortcode: Laster-kodea shortcode_hint: Gutxienez 2 karaktere, alfanumerikoak eta azpimarra besterik ez title: Emoji pertsonalak + uncategorized: Kategoriarik gabe + unlist: Kendu zerrendatik unlisted: Zerrendatu gabea update_failed_msg: Ezin izan da emoji hori eguneratu updated_msg: Emoji-a ongi eguneratu da! upload: Igo dashboard: + authorized_fetch_mode: Baimendutako eskuratze modua backlog: aurreikusitako lanak config: Konfigurazioa feature_deletions: Kontu ezabaketak feature_invites: Gonbidapen estekak feature_profile_directory: Profil-direktorioa feature_registrations: Izen emateak - feature_relay: Federazio haria + feature_relay: Federazio errelea + feature_spam_check: Anti-spam feature_timeline_preview: Denbora-lerroaren aurrebista features: Ezaugarriak hidden_service: Federazioa ezkutuko zerbitzuekin open_reports: salaketa irekiak + pending_tags: berrikusketaren zain dauden etiketak + pending_users: berrikusketaren zain dauden erabiltzaileak recent_users: Azken erabiltzaileak search: Testu osoko bilaketa single_user_mode: Erabiltzaile bakarreko modua @@ -265,11 +291,18 @@ eu: week_interactions: interakzio aste honetan week_users_active: aktibo aste honetan week_users_new: erabiltzaile aste honetan + whitelist_mode: Zerrenda zuria modua + domain_allows: + add_new: Sartu domeinua zerrenda zurian + created_msg: Domeinua ongi sartu da zerrenda zurian + destroyed_msg: Domeinua zerrenda zuritik kendu da + undo: Kendu zerrenda zuritik domain_blocks: add_new: Gehitu domeinuaren blokeo berria created_msg: Domeinuaren blokeoa orain prozesatzen ari da destroyed_msg: Domeinuaren blokeoa desegin da domain: Domeinua + edit: Editatu domeinu-blokeoa existing_domain_block_html: '%{name} domeinuan muga zorrotzagoak ezarri dituzu jada, aurretik <a href="%{unblock_url}">desblokeatu</a> beharko duzu.' new: create: Sortu blokeoa @@ -280,6 +313,10 @@ eu: silence: Isilarazi suspend: Kanporatu title: Domeinuaren blokeo berria + private_comment: Iruzkin pribatua + private_comment_hint: Domeinu hau mugatzeari buruzko iruzkina moderatzaileen barne erabilerarako. + public_comment: Iruzkin publikoa + public_comment_hint: Domeinu hau mugatzeari buruzko iruzkina publiko orokorrarentzat, domeinuak mugatzea iragartzea gaituta badago. reject_media: Ukatu multimedia fitxategiak reject_media_hint: Lokalki gordetako multimedia fitxategiak ezabatzen ditu eta etorkizunean fitxategi berriak deskargatzeari uko egingo dio. Ez du garrantzirik kanporaketetan reject_reports: Errefusatu salaketak @@ -299,6 +336,7 @@ eu: title: Desegin %{domain} domeinuko blokeoa undo: Desegin undo: Desegin domeinuaren blokeoa + view: Ikusi domeinuaren blokeoa email_domain_blocks: add_new: Gehitu berria created_msg: Ongi gehitu da e-mail helbidea domeinuen zerrenda beltzera @@ -322,6 +360,8 @@ eu: all: Denak limited: Mugatua title: Moderazioa + private_comment: Iruzkin pribatua + public_comment: Iruzkin publikoa title: Federazioa total_blocked_by_us: Guk blokeatuta total_followed_by_them: Haiek jarraitua @@ -339,7 +379,7 @@ eu: pending_accounts: title: Zain dauden kontuak (%{count}) relays: - add_new: Gehitu hari berria + add_new: Gehitu hari errelea delete: Ezabatu description_html: "<strong>Federazio errele</strong> bat zerbitzari tartekari bat da, bertara harpidetutako eta bertan argitaratzen duten zerbitzarien artean toot publiko kopuru handiak banatzen ditu. <strong>Zerbitzari txiki eta ertainei Fedibertsoko edukia aurkitzen laguntzen die</strong>, bestela erabiltzaile lokalek eskuz jarraitu beharko lituzkete urruneko zerbitzarietako erabiltzaileak." disable: Desgaitu @@ -351,6 +391,7 @@ eu: pending: Erreleak onartzearen zain save_and_enable: Gorde eta gaitu setup: Ezarri errele konexio bat + signatures_not_enabled: Erreleek ez dute ongi funtzionatuko modu segurua edo zerrenda zuria gaituta badago status: Mezuak title: Erreleak report_notes: @@ -399,6 +440,16 @@ eu: custom_css: desc_html: Aldatu itxura orri bakoitzean kargatutako CSS bidez title: CSS pertsonala + default_noindex: + desc_html: Ezarpen hau berez aldatu ez duten erabiltzaile guztiei eragiten die + title: Utzi erabiltzaileak bilatzailearen indexaziotik kanpo lehenetsita + domain_blocks: + all: Guztiei + disabled: Inori ez + title: Erakutsi domeinu-blokeoak + users: Saioa hasita duten erabiltzaile lokalei + domain_blocks_rationale: + title: Erakutsi arrazoia hero: desc_html: Azaleko orrian bistaratua. Gutxienez 600x100px aholkatzen da. Ezartzen ez bada, zerbitzariaren irudia hartuko du title: Azaleko irudia @@ -431,7 +482,7 @@ eu: open: Edonork eman dezake izena title: Erregistratzeko modua show_known_fediverse_at_about_page: - desc_html: Txandakatzean, fedibertsu ezagun osoko toot-ak bistaratuko ditu aurrebistan. Bestela, toot lokalak besterik ez ditu erakutsiko. + desc_html: Txandakatzean, fedibertso ezagun osoko toot-ak bistaratuko ditu aurrebistan. Bestela, toot lokalak besterik ez ditu erakutsiko. title: Erakutsi fedibertsu ezagun osoko denbora-lerroa aurrebistan show_staff_badge: desc_html: Erakutsi langile banda erabiltzailearen orrian @@ -449,6 +500,9 @@ eu: desc_html: Zure pribatutasun politika, erabilera baldintzak eta bestelako testu legalak idatzi ditzakezu. HTML etiketak erabili ditzakezu title: Erabilera baldintza pertsonalizatuak site_title: Zerbitzariaren izena + spam_check_enabled: + desc_html: Mastodonek automatikoki isildu eta salatu ditzake kontuak neurriei jarraituz, esaterako eskatu gabeko mezuak behin eta berriro bidaltzen dituzten kontuak antzemanez. Positibo faltsuak gertatu daitezke. + title: Anti-spam thumbnail: desc_html: Aurrebistetarako erabilia OpenGraph eta API bidez. 1200x630px aholkatzen da title: Zerbitzariaren iruditxoa @@ -456,12 +510,19 @@ eu: desc_html: Bistaratu denbora-lerro publikoa hasiera orrian title: Denbora-lerroaren aurrebista title: Gunearen ezarpenak + trendable_by_default: + desc_html: Aurretik debekatu ez diren traola guztiei eragiten dio + title: Baimendu traolak joera bihurtzea aurretik errebisatu gabe + trends: + desc_html: Erakutsi publikoki orain joeran dauden aurretik errebisatutako traolak + title: Traolak joeran statuses: back_to_account: Atzera kontuaren orrira batch: delete: Ezabatu nsfw_off: Markatu ez hunkigarri gisa nsfw_on: Markatu hunkigarri gisa + deleted: Ezabatuta failed_to_execute: Ezin izan da burutu media: title: Multimedia @@ -469,21 +530,24 @@ eu: no_status_selected: Ez da mezurik aldatu ez delako mezurik aukeratu title: Kontuaren mezuak with_media: Multimediarekin - subscriptions: - callback_url: Itzulera URL-a - confirmed: Berretsita - expires_in: Iraungitzea - last_delivery: Azken bidalketa - title: WebSub - topic: Mintzagaia tags: - accounts: Kontuak - hidden: Ezkutatuta - hide: Ezkutatu direktoriotik + accounts_today: Erabilera bakanak gaur + accounts_week: Erabilera bakanak aste honetan + breakdown: Gaurko erabilera iturriaren arabera + context: Testuingurua + directory: Direktorioan + in_directory: "%{count} direktorioan" + last_active: Azkenekoz aktiboa + most_popular: Erabilienak + most_recent: Azkenak name: Traola + review: Berrikusketaren egoera + reviewed: Berrikusita title: Traolak - unhide: Erakutsi direktorioan - visible: Ikusgai + trending_right_now: Joera orain + unique_uses_today: "%{count} idazten gaur" + unreviewed: Berrikusi gabe + updated_msg: Traola-ezarpenak ongi eguneratu dira title: Administrazioa warning_presets: add_new: Gehitu berria @@ -499,12 +563,23 @@ eu: body: "%{reporter}(e)k %{target} salatu du" body_remote: "%{domain} domeinuko norbaitek %{target} salatu du" subject: Salaketa berria %{instance} instantzian (#%{id}) + new_trending_tag: + body: "#%{name} traola joeran dago gaur, baina ez da oraindik errebisatu. Ez da publikoki agertuko baimentzen ez baduzu, edo gorde inprimakia dagoen moduan eta ez duzu berriro honi buruz entzungo." + subject: Traola berria errebisatzeko %{instance} instantzian (#%{name}) + aliases: + add_new: Sortu ezizena + created_msg: Ongi sortu da ezizena. Orain kontu zaharretik migratzen hasi zaitezke. + deleted_msg: Ongi kendu da ezizena. Orain ezin izango da aurreko kontutik hona migratu. + hint_html: Beste kontu batetik hona migratu nahi baduzu, hemen ezizen bat sortu dezakezu, hau beharrezkoa da kontu zaharreko jarraitzaileak hona ekartzeko. Ekintza hau berez <strong>kaltegabea eta desegingarria</strong> da. <strong>Kontuaren migrazioa kontu zaharretik abiatzen da</strong>. + remove: Deslotu ezizena appearance: advanced_web_interface: Web interfaze aurreratua advanced_web_interface_hint: 'Pantaila bere zabalera osoan erabili nahi baduzu, web interfaze aurreratuak hainbat zutabe desberdin konfiguratzea ahalbidetzen dizu, aldi berean nahi beste informazio ikusteko: Hasiera, jakinarazpenak, federatutako denbora-lerroa, edo nahi beste zerrenda eta traola.' animations_and_accessibility: Animazioak eta irisgarritasuna confirmation_dialogs: Berrespen dialogoak + discovery: Aurkitzea sensitive_content: Eduki hunkigarria + toot_layout: Toot disposizioa application_mailer: notification_preferences: Aldatu e-mail hobespenak salutation: "%{name}," @@ -524,15 +599,19 @@ eu: apply_for_account: Eskatu gonbidapen bat change_password: Pasahitza checkbox_agreement_html: <a href="%{rules_path}" target="_blank">Zerbitzariaren arauak</a> eta <a href="%{terms_path}" target="_blank">erabilera baldintzak</a> onartzen ditut - confirm_email: Berretsi e-mail helbidea + checkbox_agreement_without_rules_html: <a href="%{terms_path}" target="_blank">Erabilera baldintzak</a> onartzen ditut delete_account: Ezabatu kontua delete_account_html: Kontua ezabatu nahi baduzu, <a href="%{path}">jarraitu hemen</a>. Berrestea eskatuko zaizu. + description: + prefix_invited_by_user: "@%{name} erabiltzaileak Mastodon zerbitzari honetara elkartzera gonbidatzen zaitu!" + prefix_sign_up: Eman izena Mastodon-en! + suffix: Kontu bat baduzu, jendea jarraitu ahal izango duzu, mezuak bidali eta Mastodon zein kanpoko zerbitzarietako erabiltzaileekin elkarrizketan aritu! didnt_get_confirmation: Ez dituzu berresteko argibideak jaso? forgot_password: Pasahitza ahaztu duzu? invalid_reset_password_token: Pasahitza berrezartzeko token-a baliogabea da edo iraungitu du. Eskatu beste bat. login: Hasi saioa logout: Amaitu saioa - migrate_account: Lekualdatu beste kontu batera + migrate_account: Migratu beste kontu batera migrate_account_html: Kontu hau beste batera birbideratu nahi baduzu, <a href="%{path}">hemen konfiguratu</a> dezakezu. or_log_in_with: Edo hasi saioa honekin providers: @@ -544,6 +623,16 @@ eu: reset_password: Berrezarri pasahitza security: Segurtasuna set_new_password: Ezarri pasahitza berria + setup: + email_below_hint_html: Beheko e-mail helbidea okerra bada, hemen aldatu dezakezu eta baieztapen e-mail berria jaso. + email_settings_hint_html: Baieztamen e-maila %{email} helbidera bidali da. E-mail helbide hori zuzena ez bada, kontuaren ezarpenetan aldatu dezakezu. + title: Ezarpena + status: + account_status: Kontuaren egoera + confirming: E-mail baieztapena osatu bitartean zain. + functional: Zure kontua guztiz erabilgarri dago. + pending: Zure eskaera gainbegiratzeko dago oraindik. Honek denbora behar lezake. Zure eskaera onartzen bada e-mail bat jasoko duzu. + redirecting_to: Zure kontua ez dago aktibo orain %{acct} kontura birbideratzen duelako. trouble_logging_in: Arazoak saioa hasteko? authorize_follow: already_following: Kontu hau aurretik jarraitzen duzu @@ -556,6 +645,11 @@ eu: return: Erakutsi erabiltzailearen profila web: Joan webera title: Jarraitu %{acct} + challenge: + confirm: Jarraitu + hint_html: "<strong>Oharra:</strong> Ez dizugu pasahitza berriro eskatuko ordu batez." + invalid_password: Pasahitz baliogabea + prompt: Berretsi pasahitza jarraitzeko datetime: distance_in_words: about_x_hours: "%{count}o" @@ -571,26 +665,33 @@ eu: x_months: "%{count} hilabete" x_seconds: "%{count}s" deletes: - bad_password_msg: Saiakera ona hacker! Pasahitz okerra + challenge_not_passed: Sartu duzun informazioa ez da zuzena confirm_password: Sartu zure oraingo pasahitza zure identitatea baieztatzeko - description_html: Honek <strong>behin betirako eta atzera egiteko aukera gabe</strong> zure kontuko edukia kendu eta hau desaktibatuko du. Zure erabiltzaile-izena erreserbatuko da etorkizunean inork zure itxurak ez egiteko. + confirm_username: Sartu zure erabiltzaile-izena prozedura berresteko proceed: Ezabatu kontua success_msg: Zure kontua ongi ezabatu da - warning_html: Zerbitzari honetako edukiak ezabatzea besterik ezin da bermatu. Asko partekatu den edukiaren arrastoak geratzea izan liteke. Deskonektatuta dauden zerbitzariak edo zure eguneraketetatik harpidetza kendu duten zerbitzariek ez dituzte beraien datu-baseak eguneratuko. - warning_title: Sakabanatutako edukiaren eskuragarritasuna + warning: + before: 'Jarraitu aurretik, irakurri adi ohar hauek:' + caches: Beste zerbitzariek cachean duten edukia mantentzea gerta daiteke + data_removal: Zure mezuak eta beste datuak behin betiko ezabatuko dira + email_change_html: <a href="%{path}">Zure e-mail helbidea aldatu dezakezu</a> kontua ezabatu gabe + email_contact_html: Oraindik heltzen ez bada, e-mail bai bidali dezakezu <a href="mailto:%{email}">%{email}</a> helbidera laguntza eskatzeko + email_reconfirmation_html: Ez baduzu baieztamen e-maila jasotzen, <a href="%{path}">berriro eskatu</a> dezakezu + irreversible: Ezin izango duzu kontua berreskuratu edo berraktibatu + more_details_html: Xehetasun gehiagorako, ikusi <a href="%{terms_path}">pribatutasun politika</a>. + username_available: Zure erabiltzaile-izena berriro eskuragarri egongo da + username_unavailable: Zure erabiltzaile-izena ez da eskuragarri egongo directories: directory: Profilen direktorioa - enabled: Direktorioan zerrendatuta zaude orain. - enabled_but_waiting: Direktorioan zerrendatuta izatea aukeratu duzu, baina ez duzu oraindik gutxieneko jarraitzaile kopurua (%{min_followers}) zerrendan agertzeko. explanation: Deskubritu erabiltzaileak interesen arabera explore_mastodon: Esploratu %{title} - how_to_enable: Ez duzu aukeratu direktorioan zerrendatua izatea aukeratu. Behean aukeratu dezakezu. Erabili traolak zure biografiaren testuan traola zehatzetan agertzeko! - people: - one: pertsona %{count} - other: "%{count} pertsona" + domain_validator: + invalid_domain: ez da domeinu izen baliogarria errors: + '400': Bidali duzun eskaria baliogabea da edo gaizki osatua dago. '403': Ez duzu orri hau ikusteko baimenik. '404': Bilatu duzun orria ez dago hemen. + '406': Orri hau ez dago eskatutako formatuan eskuragarri. '410': Bilatu duzun orria ez dago hemen jada. '422': content: Segurtasun egiaztaketak huts egin du. Cookie-ak blokeatzen dituzu? @@ -599,6 +700,7 @@ eu: '500': content: Sentitzen dugu, zerbait okerra gertatu da gure aldean. title: Orri hau ez da zuzena + '503': Orria ezin izan da zerbitzatu zerbitzariaren behin behineko arazo bat dela eta. noscript_html: Mastodon web aplikazioa erabiltzeko, gaitu JavaScript. Bestela, probatu Mastodon plataformarako <a href="%{apps_path}">aplikazio natibo</a>ren bat. existing_username_validator: not_found: ezin izan da izen hori duen kide lokalik aurkitu @@ -622,6 +724,7 @@ eu: add_new: Gehitu berria errors: limit: Gehienezko traola kopurua nabarmendu duzu jada + hint_html: "<strong>Zer dira nabarmendutako traolak?</strong> Zure profilean toki nabarmendu batean agertzen dira eta jendeari traola hau daukaten mezu publikoak arakatzea ahalbidetzen diote. Sormen lana edo epe luzerako proiektuak jarraitzeko primerakoak dira." filters: contexts: home: Hasierako denbora-lerroa @@ -642,10 +745,12 @@ eu: developers: Garatzaileak more: Gehiago… resources: Baliabideak + trending_now: Joera orain generic: all: Denak changes_saved_msg: Aldaketak ongi gorde dira! copy: Kopiatu + no_batch_actions_available: Ez dago ekintza masiborik orri honetan eskuragarri order_by: Ordenatze-irizpidea save_changes: Gorde aldaketak validation_errors: @@ -717,9 +822,34 @@ eu: too_many: Ezin dira 4 fitxategi baino gehiago erantsi migrations: acct: Kontu berriaren erabiltzaile@domeinua - currently_redirecting: 'Zure profila hona birbideratzeko ezarri da:' - proceed: Gorde - updated_msg: Kontuaren migrazio-ezarpenak ongi eguneratu dira! + cancel: Ezeztatu birbideratzea + cancel_explanation: Birbideratzea ezezteak zure kontu hau berriro aktibatuko du, baina ez ditu atzera ekarriko bestera aldatu diren jarraitzaileak. + cancelled_msg: Ongi ezeztatu da birbideratzea. + errors: + already_moved: kontu honetara migratu duzu dagoeneko + missing_also_known_as: ez dio kontu honi erreferentzia egiten + move_to_self: ezin da oraingo kontua izan + not_found: ezin izan da aurkitu + on_cooldown: Egonaldian zaude + followers_count: Jarraitzaileak migrazioaren unean + incoming_migrations: Beste kontu batetik migratuz + incoming_migrations_html: Beste kontu batetik hona migratzeko, aurretik <a href="%{path}">kontuaren ezizen bat sortu</a> behar duzu. + moved_msg: Zure kontuak orain %{acct} kontura birbideratzen du, eta zure jarraitzaileak hara migratuak izaten ari dira. + not_redirecting: Zure kontuak ez du orain beste konturen batera birbideratzen. + on_cooldown: Duela gutxi migratu duzu. Funtzio hau %{count} egun barru egongo da berriro eskuragarri. + past_migrations: Aurreko migrazioak + proceed_with_move: Mugitu jarraitzaileak + redirecting_to: 'Zure kontuak hona birbideratzen du: %{acct}.' + set_redirect: Ezarri birbideratzea + warning: + backreference_required: Kontu berria honi erreferentzia egiteko konfiguratu behar da + before: 'Jarraitu aurretik, irakurri adi ohar hauek:' + cooldown: Migratu eta gero egonaldi tarte bat egongo da eta bitartean ezin izango duzu berriro migratu + disabled_account: Zure uneko kontua ezin izango da gero erabili. Hala ere, datua exporatu ahal izango dituzu, eta berriro aktibatu. + followers: Ekintza honek jarraitzaile guztiak eramango ditu uneko kontutik kontu berrira + only_redirect_html: Bestela, <a href="%{path}">zure profilean birbideratze soil bat jarri</a> dezakezu. + other_data: Ez da beste daturik migratuko automatikoki + redirect: Zure uneko kontuaren profila eguneratuko da birbideratze ohar batekin eta bilaketetatik kenduko da moderation: title: Moderazioa notification_mailer: @@ -783,7 +913,7 @@ eu: too_few_options: elementu bat baino gehiago izan behar du too_many_options: ezin ditu %{max} elementu baino gehiago izan preferences: - other: Beste bat + other: Denetarik posting_defaults: Bidalketarako lehenetsitakoak public_timelines: Denbora-lerro publikoak relationships: @@ -816,10 +946,6 @@ eu: reply: proceed: Ekin erantzuteari prompt: 'Toot honi erantzun nahi diozu:' - remote_unfollow: - error: Errorea - title: Izenburua - unfollowed: Jarraitzeari utzita scheduled_statuses: over_daily_limit: Egun horretarako programatutako toot kopuruaren muga gainditu duzu (%{limit}) over_total_limit: Programatutako toot kopuruaren muga gainditu duzu (%{limit}) @@ -868,6 +994,7 @@ eu: settings: account: Kontua account_settings: Kontuaren ezarpenak + aliases: Kontuaren ezizenak appearance: Itxura authorized_apps: Baimendutako aplikazioak back: Itzuli Mastodon-era @@ -885,6 +1012,8 @@ eu: profile: Profila relationships: Jarraitutakoak eta jarraitzaileak two_factor_authentication: Bi faktoreetako autentifikazioa + spam_check: + spam_detected: Hau salaketa automatiko bat da. Spam-a antzeman da. statuses: attached: description: 'Erantsita: %{attached}' @@ -908,6 +1037,9 @@ eu: private: Ezin dira publikoak ez diren toot-ak finkatu reblog: Bultzada bat ezin da finkatu poll: + total_people: + one: pertsona %{count} + other: "%{count} pertsona" total_votes: one: Boto %{count} other: "%{count} boto" @@ -926,16 +1058,18 @@ eu: pinned: Finkatutako toot-a reblogged: "(r)en bultzada" sensitive_content: 'Kontuz: Eduki hunkigarria' + tags: + does_not_match_previous_name: ez dator aurreko izenarekin bat terms: body_html: | <h2>Pribatutasun politika</h2> <h3 id="collect">Zer informazio biltzen dugu?</h3> <ul> - <li><em>Kontuaren oinarrizko informazioa</em>: Zerbitzari honetan izena ematen baduzu, erabiltzaile-izena, e-mail helbidea eta pasahitza sartzea galdetu dakizuke. Profilean bestelako informazioa sartu dezakezu esaterako pantaila.-izena eta biografia, eta profileko eta goiburuko irudiak igo ditzakezu. Erabiltzaile-izena, pantaiula-izena, biografia, profileko irudia eta goiburuko irudia beti dira publikoak.</li> - <li><em>Mezuak, jarraitzea eta beste informazioa</em>: Jarraitzen duzun jendearen zerrenda publikoa da, baita zure jarraitzaileena. Mezu bat bidaltzean, data eta ordua eta mezua bidaltzeko erabilitako aplikazioa gordetzen dira. Mezuen eranskinak izan ditzakete, esaterako irudiak eta bideoak. Mezu publikoak eta zerrendatu gabeak publikoki ikusi daitezke. Zure profilean mezu bat sustatzen duzunean, informazio hori ere publikoki eskuragarri dago. Zure mezuak zure jarraitzaileei bidaltzen zaie, kasu batzuetan honek esan nahi du beste zerbitzari batzuetara bidaltzen dela eta han kopiak gordetzen dituzte. Mezuak ezabatzen dituzunean, hau zure jarraitzaileei bidaltzen zaie ere, beste mezu batzuk zabaltzea edo gogoko izatea beti da informazio publikoa.</li> - <li><em>Mezu zuzenak eta soilik jarraitzaileentzako mezuak</em>: Mezu guztiak zerbitzarian gorde eta prozesatzen dira. Soilik jarraitzaileentzako diren mezuak zure jarraitzaileei bidaltzen zaie eta bertan aipatutako erabiltzaileei, mezu zuzenak soilik aipatutako erabiltzaileei bidaltzen zaie. Honek esan nahi du kasu batzuetan beste zerbitzari batzuetara bidaltzen dela mezua eta han kopiak gordetzen direla. Borondate oneko ahalegin bat egiten dugu mezuok soilik baimena duten pertsonek ikus ditzaten, baina beste zerbitzariek agian ez. Hortaz, zure jarraitzaileen zerbitzaria zein den egiaztatzea garrantzitsua da. Jarraitzaileak eskuz onartu eta ukatzeko aukera aldatu dezakezu. <em>Kontuan izan zerbitzariaren operadoreak eta mezua jasotzen duen edozein zerbitzarik operadoreek mezuok ikus ditzaketela</em> eta edonork atera dezakeela pantaila argazki bat, kopiatu edo beste modu batean partekatu.<em>Ez partekatu informazio arriskutsua Mastodon bidez.</em></li> - <li><em>IP-ak eta bestelako meta-datuak</em>: Saioa hasten duzunean, zure IP helbidea gordetzen dugu, eta erabiltzen duzun nabigatzaile edo aplikazioa. Hasitako saio guztiak zuk ikusteko mopduan daude eta ezarpenetan indargabetu ditzakezu. Erabilitako azken IP helbidea 12 hilabetez gordetzen da. Gure zerbitzariak jasotako eskari guztiak eta IP-a duten zerbitzariko egunkariak gorde genitzake.</li> + <li><em>Kontuaren oinarrizko informazioa</em>: Zerbitzari honetan izena ematen baduzu, erabiltzaile-izena, e-mail helbidea eta pasahitza sartzea galdetu dakizuke. Profilean bestelako informazioa sartu dezakezu esaterako pantaila.-izena eta biografia, eta profileko eta goiburuko irudiak igo ditzakezu. Erabiltzaile-izena, pantaila-izena, biografia, profileko irudia eta goiburuko irudia beti dira publikoak.</li> + <li><em>Mezuak, jarraitzea eta beste informazioa</em>: Jarraitzen duzun jendearen zerrenda publikoa da, baita zure jarraitzaileena. Mezu bat bidaltzean, data eta ordua eta mezua bidaltzeko erabilitako aplikazioa gordetzen dira. Mezuen eranskinak izan ditzakete, esaterako irudiak eta bideoak. Mezu publikoak eta zerrendatu gabeak publikoki ikusi daitezke. Zure profilean mezu bat sustatzen duzunean, informazio hori ere publikoki eskuragarri dago. Zure mezuak zure jarraitzaileei bidaltzen zaie, kasu batzuetan honek esan nahi du beste zerbitzari batzuetara bidaltzen dela eta han kopiak gordetzen dituzte. Mezuak ezabatzen dituzunean, hau zure jarraitzaileei bidaltzen zaie ere, beste mezu batzuk zabaltzea edo gogoko izatea beti da informazio publikoa.</li> + <li><em>Mezu zuzenak eta soilik jarraitzaileentzako mezuak</em>: Mezu guztiak zerbitzarian gorde eta prozesatzen dira. Soilik jarraitzaileentzako diren mezuak zure jarraitzaileei bidaltzen zaie eta bertan aipatutako erabiltzaileei, mezu zuzenak soilik aipatutako erabiltzaileei bidaltzen zaie. Honek esan nahi du kasu batzuetan beste zerbitzari batzuetara bidaltzen dela mezua eta han kopiak gordetzen direla. Borondate oneko ahalegin bat egiten dugu mezuok soilik baimena duten pertsonek ikus ditzaten, baina beste zerbitzariek agian ez. Hortaz, zure jarraitzaileen zerbitzaria zein den egiaztatzea garrantzitsua da. Jarraitzaileak eskuz onartu eta ukatzeko aukera aldatu dezakezu. <em>Kontuan izan zerbitzariaren operadoreak eta mezua jasotzen duen edozein zerbitzarik operadoreek mezuok ikus ditzaketela</em> eta edonork atera dezakeela pantaila argazki bat, kopiatu edo beste modu batean partekatu.<em>Ez partekatu informazio arriskutsua Mastodon bidez.</em></li> + <li><em>IP-ak eta bestelako meta-datuak</em>: Saioa hasten duzunean, zure IP helbidea gordetzen dugu, eta erabiltzen duzun nabigatzaile edo aplikazioa. Hasitako saio guztiak zuk ikusteko moduan daude eta ezarpenetan indargabetu ditzakezu. Erabilitako azken IP helbidea 12 hilabetez gordetzen da. Gure zerbitzariak jasotako eskari guztiak eta IP-a duten zerbitzariko egunkariak gorde genitzake.</li> </ul> <hr class="spacer" /> @@ -983,7 +1117,7 @@ eu: <h3 id="disclose">Informazioa kanpoko inorekin partekatzen dugu?</h3> - <p>Ez dugu identifikatu zaitzakeen informazio pertsonala, saltzen, trukatzen edo kanpora bidaltzen. Salbuespena konfidatzako hiirugarrengoak dira, gunea martxan izaten laguntzen digutenak, negozioa aurrera eramateko aholkua ematen digutenak edo zuri zerbitzua ematen laguntzen digutenak, hauek informazioaren konfidentzialtasuna errespetatzea onartzen dutenean., Agian legearekin betetzeko beharrezkoa den informazioa ere eman genezake, gunearen politika indarrean jartzeko behar dena, edo gure eskubideak, jabetzak, edo segurtasuna babesteko beharrezkoa dena.</p> + <p>Ez dugu identifikatu zaitzakeen informazio pertsonala saltzen, trukatzen edo kanpora bidaltzen. Salbuespena konfiantzako hirugarrengoak dira, gunea martxan izaten laguntzen digutenak, negozioa aurrera eramateko aholkua ematen digutenak edo zuri zerbitzua ematen laguntzen digutenak, hauek informazioaren konfidentzialtasuna errespetatzea onartzen dutenean. Agian legearekin betetzeko beharrezkoa den informazioa ere eman genezake, gunearen politika indarrean jartzeko behar dena, edo gure eskubideak, jabetzak, edo segurtasuna babesteko beharrezkoa dena.</p> <p>Zure eduki publikoak sareko beste zerbitzariek deskargatu dezakete. Zure mezu publikoak eta soilik jarraitzaileentzat diren mezuak zure jarraitzaileen zerbitzarietara bidaltzen dira, jarraitzaile edo hartzaile horiek beste zerbitzari batean badute kontua.</p> @@ -995,7 +1129,7 @@ eu: <p>Zerbitzari hau Europar Batasunean edo Europako Ekonomia-Eremuan badago: Gure gunea, produktua eta zerbitzuak 16 urte edo gehiago dituztenei zuzenduta daude. 16 urte baino gazteagoa bazara, GDPR legearen arabera ezin duzu gune hau erabili (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) </p> - <p>Zerbitzari hau Amerikako Estatu Batuetan badago: Gure gunea, produktua eta zerbitzuak 13 urte edo gehiago dituztenei zuzenduta daude. 13 urte baino gazteagoa bazara, COPPA legearen arabera ezin duzu gune hau erabili (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>).</p> + <p>Zerbitzari hau Amerikako Estatu Batuetan badago: Gure gunea, produktua eta zerbitzuak 13 urte edo gehiago dituztenei zuzenduta daude. 13 urte baino gazteagoa bazara, COPPA legearen arabera ezin duzu gune hau erabili (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>).</p> <p>Zerbitzari hau beste eremu legal batean badago, legearen eskariak desberdinak izan daitezke.</p> @@ -1003,7 +1137,7 @@ eu: <h3 id="changes">Aldaketak gure pribatutasun politikan</h3> - <p>Guire pribatutasun politika aldatzea erabakitzen badugu, aldaketak orri honetan argitaratuko ditugu.</p> + <p>Gure pribatutasun politika aldatzea erabakitzen badugu, aldaketak orri honetan argitaratuko ditugu.</p> <p>Dokumentu honek CC-BY-SA lizentzia du. Eta azkenekoz 2019ko martxoak 7an eguneratu zen</p> @@ -1043,7 +1177,9 @@ eu: disable: Zure kontua izoztuta dagoen bitartean, zure kontua bere horretan dirau, baina ezin duzu ekintzarik burutu desblokeatzen den arte. silence: Zure kontua murriztua dagoen bitartean, jada zu jarraitzen zaituztenak besterik ez dituzte zure Toot-ak ikusiko zerbitzari honetan, eta agian zerrenda publikoetatik kenduko zaizu. Hala ere besteek oraindik zu jarraitu zaitzakete. suspend: Zure kontua kanporatua izan da, zure toot guztiak eta multimedia fitxategiak behin betiko ezabatu dira zerbitzari honetatik, eta zure jarraitzaileen zerbitzarietatik. + get_in_touch: "%{instance} instantziako jendearekin harremanetan jartzeko e-mail honi erantzun ahal diozu." review_server_policies: Berrikusi zerbitzariko politikak + statuses: 'Zehazki, honentzat:' subject: disable: Zure %{acct} kontua izoztu da none: "%{acct} konturako abisua" diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 948347f3c..ea901423d 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -2,7 +2,7 @@ fa: about: about_hashtag_html: اینها نوشتههای عمومی هستند که برچسب (هشتگ) <strong>#%{hashtag}</strong> را دارند. اگر شما روی هر سروری حساب داشته باشید میتوانید به این نوشتهها واکنش نشان دهید. - about_mastodon_html: ماستدون (Mastodon) یک شبکهٔ اجتماعی است که بر اساس پروتکلهای آزاد وب و نرمافزارهای آزاد و کدباز ساخته شده است. این شبکه مانند ایمیل غیرمتمرکز است. + about_mastodon_html: 'شبکهٔ اجتماعی آینده: بدون تبلیغات، بدون شنود از طرف شرکتها، طراحی اخلاقمدار، و معماری غیرمتمرکز! با ماستدون صاحب دادههای خودتان باشید!' about_this: درباره active_count_after: فعال active_footnote: کاربران فعال در ماه گذشته @@ -10,20 +10,20 @@ fa: api: رابط برنامهنویسی کاربردی apps: اپهای موبایل apps_platforms: ماستدون را در iOS، اندروید، و سایر سیستمها داشته باشید - browse_directory: در فهرست گزیدهٔ کاربران این سرور چرخی بزنید و کاربران را بر اساس علاقهمندیهایشان پیدا کنید + browse_directory: کاربران این سرور را بر اساس علاقهمندیهایشان پیدا کنید + browse_local_posts: فهرست لحظهای نوشتههای عمومی در ماستدون را ببینید browse_public_posts: فهرست لحظهای نوشتههای عمومی در ماستدون را ببینید contact: تماس contact_missing: تعیین نشده contact_unavailable: موجود نیست discover_users: یافتن کاربران documentation: مستندات - extended_description_html: | - <h3>جای خوبی برای قانونها</h3> - <p>توضیحات تکمیلی نوشته نشده است.</p> federation_hint_html: با داشتن حساب روی %{instance} میتوانید کاربران همهٔ سرورهای دیگر ماستدون (و سایر شبکههای سازگار با آن) را پی بگیرید. - generic_description: "%{domain} یک سرور روی شبکه است" get_apps: یک اپ موبایل را امتحان کنید hosted_on: ماستدون، میزبانیشده روی %{domain} + instance_actor_flash: | + این حساب یک بازیگر مجازی برای نمایندگی از این سرور است و متعلق به هیچ کاربری نیست. + این حساب برای ارتباط میانسروری به کار میرود و نباید مسدود شود، مگر این که شما بخواهید کل سرور را مسدود کنید، که در آن صورت باید از راه مسدودسازی دامین پیش بروید. learn_more: بیشتر بدانید privacy_policy: سیاست رازداری see_whats_happening: ببینید چه خبر است @@ -35,6 +35,14 @@ fa: status_count_before: که در کنار هم tagline: با دوستان خود در ارتباط باشید و دوستان تازه پیدا کنید terms: شرایط کاربری + unavailable_content: محتوای ناموجود + unavailable_content_description: + domain: سرور + reason: 'دلیل:' + rejecting_media: تصاویر فرستاده شده از سمت این سرور پردازش نخواهد شد و هیچ تصویر کوچکی از آنها در اینجا نمایش نخواهد یافت، و آنها را باید مستقیماً در آن سرور ببینید. + silenced: هیچ کدام از نوشتهها از طرف این سرور اینجا نمایش نخواهند یافت مگر در فهرست پیگیریها شما، اگر نویسندهاش را پی بگیرید. + suspended: شما نمیتوانید هیچ کدام از کاربرهای این سرور را پی بگیرید، و هیچ دادهای از طرف این سرور پردازش یا ذخیره یا مبادله نخواهد شد. + unavailable_content_html: ماستدون در حالت کلی اجازه میدهد که شما همهٔ مطالب و کاربران در سرورهای دیگر را نیز ببینید و با آنها برهمکنش داشته باشید. فهرست زیر ولی استثناهای این ارتباط است که به طور خاص روی این سرور اعمال شدهاند. user_count_after: one: کاربر other: کاربر @@ -42,6 +50,8 @@ fa: what_is_mastodon: ماستدون چیست؟ accounts: choices_html: 'انتخابهای %{name}:' + endorsements_hint: شما میتوانید از محیط وب ماستدون، کسانی را که پی میگیرید به دیگران هم پیشنهاد دهید تا اینجا نشان داده شوند. + featured_tags_hint: شما میتوانید برچسبهای دلخواه خود را پیشنهاد دهید که اینجا نمایش خواهند یافت. follow: پی بگیرید followers: one: پیگیر @@ -53,6 +63,7 @@ fa: media: عکس و ویدیو moved_html: "%{name} حساب خود را به %{new_profile_link} منتقل کرده است:" network_hidden: این اطلاعات در دسترس نیست + never_active: هرگز nothing_here: اینجا چیزی نیست! people_followed_by: کسانی که %{name} پی میگیرد people_who_follow: کسانی که %{name} را پی میگیرند @@ -68,6 +79,7 @@ fa: admin: مدیر bot: ربات moderator: ناظم + unavailable: نمایهٔ ناموجود unfollow: پایان پیگیری admin: account_actions: @@ -113,6 +125,7 @@ fa: header: زمینه inbox_url: نشانی صندوق ورودی invited_by: دعوتشده از طرف + ip: IP joined: عضویت از location: all: همه @@ -163,6 +176,7 @@ fa: user: کاربر salmon_url: نشانی Salmon search: جستجو + search_same_ip: دیگر کاربران با همان IP shared_inbox_url: نشانی صندوق ورودی مشترک show: created_reports: گزارشهای ثبت کرده @@ -181,6 +195,7 @@ fa: username: نام کاربری warn: هشدار web: وب + whitelisted: فهرست مجاز action_logs: actions: assigned_to_self_report: "%{name} رسیدگی به گزارش %{target} را به عهده گرفت" @@ -216,19 +231,24 @@ fa: deleted_status: "(بوق پاکشده)" title: سیاههٔ بازرسی custom_emojis: + assign_category: تعیین دسته by_domain: دامین copied_msg: نسخهٔ محلی شکلک با موفقیت ساخته شد copy: نسخهبرداری copy_failed_msg: نشد که نسخهٔ محلی این شکلک ساخته شود + create_new_category: ساختن دستهٔ تازه created_msg: این شکلک با موفقیت ساخته شد! delete: پاک کردن destroyed_msg: این شکلک با موفقیت پاک شد! disable: غیرفعالسازی + disabled: غیرفعال disabled_msg: این شکلک با موفقیت غیرفعال شد emoji: شکلک enable: فعالسازی + enabled: فعال enabled_msg: این شکلک با موفقیت فعال شد image_hint: پروندهٔ PNG حداکثر 50KB + list: فهرست listed: فهرستشده new: title: افزودن شکلک سفارشی @@ -236,11 +256,14 @@ fa: shortcode: کد کوتاه shortcode_hint: دستکم ۲ نویسه و تنها شامل حروف، اعداد و زیرخط title: شکلکهای سفارشی + uncategorized: دستهبندی نشده + unlist: نافهرست unlisted: فهرستنشده update_failed_msg: این شکلک نتوانست بهروز شود updated_msg: شکلک با موفقیت بهروز شد! upload: بارگذاری dashboard: + authorized_fetch_mode: حالت دریافت مجازشده backlog: کارهای باقیمانده config: پیکربندی feature_deletions: حسابهای حذفشده @@ -248,10 +271,13 @@ fa: feature_profile_directory: فهرست گزیدهٔ کاربران feature_registrations: ثبتنامها feature_relay: رله + feature_spam_check: ضدهرزنامه feature_timeline_preview: پیشنمایش نوشتهها features: ویژگیها hidden_service: ارتباط میانسروری با سرویسهای نهفته open_reports: گزارشهای فعال + pending_tags: برچسب منتظر بازبینی + pending_users: کاربران منتظر بازبینی recent_users: کاربران تازه search: جستجوی متنی single_user_mode: حالت تککاربره @@ -259,15 +285,23 @@ fa: space: فضای مصرفشده title: ابزارهای مدیریت total_users: شمار کاربران - trends: هشتگهای پرکاربرد + trends: برچسبهای پرکاربرد week_interactions: فعالیتها در این هفته week_users_active: کاربران فعال هفتهٔ اخیر week_users_new: کاربران هفتهٔ اخیر + whitelist_mode: حالت فهرست مجاز + domain_allows: + add_new: دامین مجازشده + created_msg: این دامین با موفقیت مجاز شد + destroyed_msg: دامین از حالت مجاز خارج شد + undo: برداشتن از فهرست مجازها domain_blocks: add_new: افزودن مسدودسازی دامین تازه created_msg: مسدودکردن دامین در حال انجام است destroyed_msg: مسدودکردن دامین واگردانده شد domain: دامین + edit: ویرایش مسدودسازی دامین + existing_domain_block_html: شما پیشتر محدودیتهای سختتری روی %{name} اعمال کردهاید، و باید نخست <a href="%{unblock_url}">مسدودسازی را لغو کنید</a>. new: create: مسدودسازی hint: مسدودسازی دامین جلوی فهرستشدن حسابها در پایگاه داده را نمیگیرد، بلکه به طور خودکار روشهای مدیریتی را روی فعالیتهای فعلی و گذشتهٔ آن حسابها اعمال میکند. @@ -277,6 +311,10 @@ fa: silence: بیصداکردن suspend: معلقکردن title: مسدودسازی دامین دیگر + private_comment: یادداشت خصوصی + private_comment_hint: یادداشتی دربارهٔ محدودیت روی این دامین برای سایر ناظمان. + public_comment: یادداشت عمومی + public_comment_hint: یادداشتی دربارهٔ محدودیت روی این دامین برای عموم، در صورتی که فهرست دامینهای محدود شده منتشر شود. reject_media: نپذیرفتن پروندههای تصویری reject_media_hint: تصویرهای ذخیرهشده در اینجا را پاک میکند و جلوی دریافت تصویرها را در آینده میگیرد. بیتأثیر برای معلقشدهها reject_reports: نپذیرفتن گزارشها @@ -296,6 +334,7 @@ fa: title: واگردانی مسدودسازی دامنه برای %{domain} undo: واگردانی undo: واگردانی مسدودسازی دامین + view: دیدن مسدودسازی دامنه email_domain_blocks: add_new: افزودن تازه created_msg: مسدودسازی دامین ایمیل با موفقیت ساخته شد @@ -319,6 +358,8 @@ fa: all: همه limited: محدود title: مدیریت + private_comment: یادداشت خصوصی + public_comment: یادداشت عمومی title: ارتباط میانسروری total_blocked_by_us: مسدودشده از طرف ما total_followed_by_them: ما را پی میگیرند @@ -333,6 +374,8 @@ fa: expired: منقضیشده title: فیلتر title: دعوتها + pending_accounts: + title: حسابهای منتظر (%{count}) relays: add_new: افزودن رلهٔ تازه delete: حذف @@ -346,6 +389,7 @@ fa: pending: در انتظار پذیرش رله save_and_enable: ذخیره و فعالسازی setup: پیوستن به رلهها + signatures_not_enabled: وقتی حالت امن یا حالت فهرست سفید فعال باشد رلهها به درستی کار نخواهند کرد status: وضعیت title: رلهها report_notes: @@ -394,6 +438,16 @@ fa: custom_css: desc_html: ظاهر ماستدون را با CSS-ای که در همهٔ صفحهها جاسازی میشود تغییر دهید title: سبک CSS سفارشی + default_noindex: + desc_html: روی همهٔ کاربرانی که این تنظیم را خودشان تغییر ندادهاند تأثیر میگذارد + title: درخواست پیشفرض از طرف کاربران برای ظاهر نشدن در نتایج موتورهای جستجوگر + domain_blocks: + all: برای همه + disabled: برای هیچکدام + title: نمایش دامینهای مسدودشده + users: برای کاربران محلی واردشده + domain_blocks_rationale: + title: دیدن دلیل hero: desc_html: در صفحهٔ آغازین نمایش مییابد. دستکم ۶۰۰×۱۰۰ پیکسل توصیه میشود. اگر تعیین نشود، با تصویر بندانگشتی سرور جایگزین خواهد شد title: تصویر سربرگ @@ -444,6 +498,9 @@ fa: desc_html: میتوانید سیاست رازداری، شرایط استفاده، یا سایر مسائل قانونی را به دلخواه خود بنویسید. تگهای HTML هم مجاز است title: شرایط استفادهٔ سفارشی site_title: نام سرور + spam_check_enabled: + desc_html: ماستدون میتواند حسابها را به طور خودکار بیصدا کند یا گزارش دهد. این کار بر اساس سنجههایی از قبیل شناسایی پیغامهای ناخواستهٔ تکراری انجام میشود و ممکن است گاهی اشتباه باشد. + title: ضدهرزنامه thumbnail: desc_html: برای دیدن با OpenGraph و رابط برنامهنویسی. وضوح پیشنهادی ۱۲۰۰×۶۳۰ پیکسل title: تصویر کوچک سرور @@ -451,12 +508,19 @@ fa: desc_html: نوشتههای عمومی این سرور را در صفحهٔ آغازین نشان دهید title: پیشنمایش نوشتهها title: تنظیمات سایت + trendable_by_default: + desc_html: روی برچسبهایی که پیش از این ممنوع نشدهاند تأثیر میگذارد + title: بگذارید که برچسبهای پرطرفدار بدون بازبینی قبلی نمایش داده شوند + trends: + desc_html: برچسبهای عمومی که پیشتر بازبینی شدهاند و هماینک پرطرفدارند + title: برچسبهای پرطرفدار statuses: back_to_account: بازگشت به صفحهٔ حساب batch: delete: پاککردن nsfw_off: علامتزدن به عنوان غیرحساس nsfw_on: علامتزدن به عنوان حساس + deleted: پاکشده failed_to_execute: اجرا نشد media: title: رسانه @@ -464,20 +528,24 @@ fa: no_status_selected: هیچ بوقی تغییری نکرد زیرا هیچکدام از آنها انتخاب نشده بودند title: نوشتههای حساب with_media: دارای عکس یا ویدیو - subscriptions: - callback_url: نشانی Callback - confirmed: تأییدشده - expires_in: مهلت انقضا - last_delivery: آخرین ارسال - topic: موضوع tags: - accounts: حسابها - hidden: پنهانشده - hide: در فهرست گزیدهٔ کاربران نشان نده + accounts_today: کاربرد یکتا در امروز + accounts_week: کاربرد یکتا در این هفته + breakdown: کاربردهای امروز به تفکیک منبع + context: زمینه + directory: در فهرست + in_directory: "%{count} در فهرست" + last_active: آخرین فعالیت + most_popular: محبوبترین + most_recent: تازهترین name: برچسب + review: وضعیت بازبینی + reviewed: بازبینی شده title: برچسبها - unhide: نمایش در فهرست گزیدهٔ کاربران - visible: نمایان + trending_right_now: پرطرفدارهای کنونی + unique_uses_today: "%{count} امروز منتشر شده" + unreviewed: بازبینی نشده + updated_msg: تنظیمات برچسبها با موفقیت بهروز شد title: مدیریت سرور warning_presets: add_new: افزودن تازه @@ -493,12 +561,23 @@ fa: body: کاربر %{reporter} کاربر %{target} را گزارش داد body_remote: کسی از %{domain} گزارش %{target} را فرستاده subject: گزارش تازهای برای %{instance} (#%{id}) + new_trending_tag: + body: 'برچسب #%{name} امروز پرطرفدار است، ولی تا حالا بازبینی نشده. تا وقتی که شما اجازه ندادهاید، این برچسب به طور عمومی نمایش داده نخواهد شد. اگر فرم را به شکل فعلی ذخیره کنید، هیچ وقت چیزی دربارهٔ این برچسب نخواهید دید.' + subject: برچسب تازهای در %{instance} نیازمند بررسی است (#%{name}) + aliases: + add_new: ساختن نام مستعار + created_msg: نام مستعار تازه با موفقیت ساخته شد. الان میتوانید انتقال از حساب قدیمی را آغاز کنید. + deleted_msg: نام مستعار با موفقیت حذف شد. انتقال از آن حساب به حساب فعلی دیگر ممکن نیست. + hint_html: اگر میخواهید از حساب دیگری به این حساب منتقل شوید، اینجا میتوانید یک نام مستعار بسازید که برای انتقال از حساب قدیمی به این حساب لازم است. این کار به تنهایی <strong>بیضرر و قابل بازگشت</strong> است. <strong>فرایند انتقال حساب از حساب قدیمی آغاز خواهد شد</strong>. + remove: حذف ارتباط نام مستعار appearance: advanced_web_interface: رابط کاربری پیشرفته advanced_web_interface_hint: 'اگر میخواهید همهٔ فضای نمایشگر خود را به کار ببرید، میتوانید به کمک رابط کاربری پیشرفته ستونهای گوناگونی داشته باشید تا در یک نگاه همهٔ اطلاعاتی را که میخواهید ببینید: نوشتههای دیگران، اعلانها، فهرست نوشتههای همهجا، و هر تعداد فهرست و برچسب که بخواهید.' animations_and_accessibility: پویانماییهای و دسترسیپذیری confirmation_dialogs: پیغامهای تأیید + discovery: کاوش sensitive_content: محتوای حساس + toot_layout: آرایش بوق application_mailer: notification_preferences: تغییر ترجیحات ایمیل salutation: "%{name}،" @@ -518,9 +597,13 @@ fa: apply_for_account: درخواست دعوتنامه change_password: رمز checkbox_agreement_html: من <a href="%{rules_path}" target="_blank">قانونهای این سرور</a> و <a href="%{terms_path}" target="_blank">شرایط کاربری</a> را میپذیرم - confirm_email: تأیید ایمیل + checkbox_agreement_without_rules_html: من با <a href="%{terms_path}" target="_blank">شرایط استفاده</a> موافقم delete_account: پاککردن حساب delete_account_html: اگر میخواهید حساب خود را پاک کنید، از <a href="%{path}">اینجا</a> پیش بروید. از شما درخواست تأیید خواهد شد. + description: + prefix_invited_by_user: "@%{name} شما را به عضویت در این سرور ماستدون دعوت کرده است!" + prefix_sign_up: همین امروز عضو ماستدون شوید! + suffix: با داشتن حساب میتوانید دیگران را پی بگیرید، نوشتههای تازه منتشر کنید، و با کاربران دیگر از هر سرور ماستدون دیگری و حتی سرورهای دیگر در ارتباط باشید! didnt_get_confirmation: راهنمایی برای تأیید را دریافت نکردید؟ forgot_password: رمزتان را گم کردهاید؟ invalid_reset_password_token: کد بازنشانی رمز نامعتبر یا منقضی شده است. لطفاً کد دیگری درخواست کنید. @@ -529,12 +612,25 @@ fa: migrate_account: نقل مکان به یک حساب دیگر migrate_account_html: اگر میخواهید این حساب را به حساب دیگری منتقل کنید، <a href="%{path}">اینجا را کلیک کنید</a>. or_log_in_with: یا ورود به وسیلهٔ + providers: + cas: CAS + saml: SAML register: عضو شوید registration_closed: سرور %{instance} عضو تازهای نمیپذیرد resend_confirmation: راهنمایی برای تأیید را دوباره بفرست reset_password: بازنشانی رمز security: امنیت set_new_password: تعیین رمز تازه + setup: + email_below_hint_html: اگر نشانی ایمیل زیر نادرست است، میتوانید آن را تغییر دهید و ایمیل تأیید دوبارهای دریافت کنید. + email_settings_hint_html: ایمیل تأیید به %{email} فرستاده شد. اگر این نشانی ایمیل درست نیست، میتوانید از تنظیمات حساب آن را تغییر دهید. + title: راه اندازی + status: + account_status: وضعیت حساب + confirming: در حال انتظار برای کامل شدن تأیید ایمیل. + functional: حساب شما قابل استفاده است. + pending: درخواست شما منتظر تأیید مسئولان سایت است و این فرایند ممکن است کمی طول بکشد. اگر درخواست شما پذیرفته شود به شما ایمیلی فرستاده خواهد شد. + redirecting_to: حساب شما غیرفعال است زیرا هماکنون به %{acct} منتقل شده است. trouble_logging_in: برای ورود مشکلی دارید؟ authorize_follow: already_following: شما همین الان هم این حساب را پیمیگیرید @@ -547,6 +643,11 @@ fa: return: نمایهٔ این کاربر را نشان بده web: رفتن به وب title: پیگیری %{acct} + challenge: + confirm: ادامه + hint_html: "<strong>نکته:</strong> ما در یک ساعت آینده رمزتان را از شما نخواهیم پرسید." + invalid_password: رمز نامعتبر + prompt: برای ادامه رمزتان را تأیید کنید datetime: distance_in_words: about_x_hours: "%{count} ساعت" @@ -562,26 +663,33 @@ fa: x_months: "%{count} ماه" x_seconds: "%{count} ثانیه" deletes: - bad_password_msg: هکر گرامی، رمزی که وارد کردید اشتباه است ؛) + challenge_not_passed: اطلاعاتی که وارد کردید اشتباه بود confirm_password: رمز فعلی خود را وارد کنید تا معلوم شود که خود شمایید - description_html: این کار همهٔ محتوای حساب شما را <strong>برای همیشه و بهطور بازگشتناپذیری</strong> پاک کرده و حساب را غیرفعال میکند. نام کاربری شما برای جلوگیری از جعل هویت احتمالی در آینده از دسترس خارج خواهد شد. + confirm_username: برای تأیید این فرایند نام کاربری خود را وارد کنید proceed: پاککردن حساب success_msg: حساب شما با موفقیت پاک شد - warning_html: تنها پاکشدن محتوای حساب در این سرور خاص تضمین میشود. محتوایی که به گستردگی همرسانی شده باشد ممکن است ردش همچنان باقی بماند. سرورهای آفلاین یا سرورهایی که دیگر مشترک شما نیستند پایگاههای دادهٔ خود را بهروز نخواهند کرد. - warning_title: دسترسپذیری محتوای همرسانشده + warning: + before: 'پیش از ادامه، لطفاً نکتههای زیر را به دقت بخوانید:' + caches: محتواهایی که سرورهای دیگر ذخیره کردهاند شاید همچنان باقی بمانند + data_removal: نوشتهها و دادههای شما برای همیشه پاک خواهند شد + email_change_html: شما میتوانید بدون پاک کردن حساب <a href="%{path}">نشانی ایمیل خود را تغییر دهید</a> + email_contact_html: اگر ایمیل همچنان نرسیده، برای درخواست کمک به <a href="mailto:%{email}">%{email}</a> پیغام دهید + email_reconfirmation_html: اگر ایمیل تأیید به دستتان نرسیده، میتوانید <a href="%{path}">یک بار دیگر برایش درخواست بدهید</a> + irreversible: شما نخواهید توانست حساب خود را بازیابی یا فعالسازی کنید + more_details_html: برای اطلاعات بیشتر <a href="%{terms_path}">سیاست رازداری</a> را ببینید. + username_available: نام کاربری شما دوباره در دسترس خواهد بود + username_unavailable: نام کاربری شما برای دیگران غیرقابل دسترس خواهد ماند directories: directory: فهرست گزیدهٔ کاربران - enabled: شما هماینک در فهرست گزیدهٔ کاربران نمایش مییابید. - enabled_but_waiting: شما میخواهید در فهرست گزیدهٔ کاربران این سرور باشید، ولی تعداد پیگیران شما هنوز به مقدار لازم (%{min_followers}) نرسیده است. explanation: کاربران این سرور را بر اساس علاقهمندیهایشان پیدا کنید explore_mastodon: گشت و گذار در %{title} - how_to_enable: شما هنوز در فهرست گزیدهٔ کاربران این سرور نشان داده نمیشوید. اینجا میتوانید انتخابش کنید. اگر در بخش معرفی خود در نمایهتان برچسب (هشتگ) داشته باشد، نام شما هم برای آن هشتگها فهرست میشود! - people: - one: "%{count} نفر" - other: "%{count} نفر" + domain_validator: + invalid_domain: نام دامین معتبر نیست errors: + '400': درخواستی که فرستادید نامعتبر یا اشتباه بود. '403': شما اجازهٔ دیدن این صفحه را ندارید. '404': صفحهای که به دنبالش هستید اینجا نیست. + '406': این صفحه در قالبی که درخواست کردهاید موجود نیست. '410': صفحهای که به دنبالش بودید دیگر اینجا وجود ندارد. '422': content: تأیید امنیتی انجام نشد. آیا مرورگر شما کوکیها را مسدود میکند؟ @@ -590,6 +698,7 @@ fa: '500': content: شرمنده، یک چیزی از سمت ما اشتباه شده. title: این صفحه درست نیست + '503': این صفحه به خاطر مشکل موقت سرور در دسترس نیست. noscript_html: برای استفاده از نسخهٔ تحت وب ماستدون، لطفاً جاوااسکریپت را فعال کنید. یا به جایش میتوانید <a href="%{apps_path}">یک اپ ماستدون</a> را بهکار ببرید. existing_username_validator: not_found: کاربری در این سرور با این نام کاربری پیدا نشد @@ -603,6 +712,7 @@ fa: request: درخواست بایگانی دادههایتان size: اندازه blocks: حسابهای مسدودشده + csv: CSV domain_blocks: دامینهای مسدودشده follows: حسابهای پیگرفته lists: فهرستها @@ -612,6 +722,7 @@ fa: add_new: افزودن تازه errors: limit: شما بیشترین تعداد مجاز برچسبها را دارید + hint_html: "<strong>برچسبهای برگزیده چیستند؟</strong> این برچسبها (هشتگها) به طور واضحی روی نمایهٔ عمومی شما نمایش مییابند و دیگران میتوانند نوشتههای شما را تحت هر کدام از این برچسبها مرور کنند. این یک روش بسیار خوب برای دستهبندی آثار خلاقانه یا پروژههای بلندمدت شماست." filters: contexts: home: خانه @@ -632,10 +743,12 @@ fa: developers: برنامهنویسان more: بیشتر… resources: منابع + trending_now: پرطرفدار generic: all: همه changes_saved_msg: تغییرات با موفقیت ذخیره شدند! copy: رونوشت + no_batch_actions_available: هیچ کار گروهیای در این صفحه موجود نیست order_by: مرتبسازی save_changes: ذخیرهٔ تغییرات validation_errors: @@ -707,9 +820,34 @@ fa: too_many: نمیتوان بیشتر از ۴ تصویر بارگذاری کرد migrations: acct: username@domain حساب تازه - currently_redirecting: 'نمایهٔ شما منتقل میشود به:' - proceed: ذخیره - updated_msg: تنظیمات نقل مکان حساب شما با موفقیت بهروز شد! + cancel: لغو انتقال + cancel_explanation: با لغو انتقال، حساب شما دوباره فعال میشود، ولی این کار پیگیران شما را که به حساب دیگر منتقل شدهاند برنمیگرداند. + cancelled_msg: انتقال حساب با موفقیت لغو شد. + errors: + already_moved: این همان حسابی است که به آن منتقل شدهاید + missing_also_known_as: به حساب شما اشاره نمیکند + move_to_self: نمیتواند حساب فعلی شما باشد + not_found: چنین حسابی پیدا نشد + on_cooldown: شما باید صبر کنید + followers_count: شمار پیگیران در زمان انتقال + incoming_migrations: انتقال از یک حساب دیگر + incoming_migrations_html: برای انتقال از یک حساب دیگر به این حساب، شما باید نخست <a href="%{path}">یک نام مستعار بسازید</a>. + moved_msg: حساب شما هماینک به %{acct} منتقل شده است و پیگیران شما در حال انتقال به آنجا هستند. + not_redirecting: حساب شما هماینک به هیچ حساب دیگری منتقل نشده است یا اشاره نمیکند. + on_cooldown: شما به تازگی حساب خود را منتقل کردهاید. این ویژگی برای شما دوباره در %{count} روز فعال خواهد شد. + past_migrations: انتقالهای پیشین + proceed_with_move: انتقال پیگیران + redirecting_to: حساب شما هماینک به %{acct} منتقل شده است. + set_redirect: اشاره به حساب دیگر + warning: + backreference_required: حساب تازهٔ شما نخست باید تنظیم شود تا به این حساب اشاره کند + before: 'پیش از ادامه، لطفاً نکتههای زیر را به دقت بخوانید:' + cooldown: پس از انتقال حساب، یک دورهٔ انتظار وجود دارد که در این مدت نخواهید توانست دوباره حسابتان را منتقل کنید + disabled_account: حساب فعلی شما پس از این کار دیگر قابل استفاده نخواهد بود. شما فقط خواهید توانست دادههای خود را بیرون ببرید یا حساب را دوباره فعال کنید. + followers: این کار همهٔ پیگیران شما را از حساب فعلی به حساب تازه منتقل خواهد کرد + only_redirect_html: شما همچنین میتوانید حساب خود را <a href="%{path}">به یک حساب دیگر اشاره دهید</a>. + other_data: هیچ دادهٔ دیگری خودبهخود منتقل نخواهد شد + redirect: نمایهٔ حساب فعلی شما به حساب تازه اشاره خواهد کرد و خودش در نتیجهٔ جستجوها ظاهر نخواهد شد moderation: title: مدیریت کاربران notification_mailer: @@ -746,11 +884,22 @@ fa: body: "%{name} نوشتهٔ شما را بازبوقید:" subject: "%{name} نوشتهٔ شما را بازبوقید" title: بازبوق تازه + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T pagination: newer: تازهتر next: بعدی older: قدیمیتر prev: قبلی + truncate: "…" polls: errors: already_voted: شما قبلاً در این نظرسنجی رأی دادهاید @@ -763,6 +912,8 @@ fa: too_many_options: نمیتواند بیشتر از %{max} گزینه داشته باشد preferences: other: سایر تنظیمات + posting_defaults: تنظیمات پیشفرض انتشار + public_timelines: فهرست عمومی نوشتهها relationships: activity: فعالیت حساب dormant: غیرفعال @@ -793,10 +944,6 @@ fa: reply: proceed: به سمت پاسخدادن prompt: 'شما میخواهید به این بوق پاسخ دهید:' - remote_unfollow: - error: خطا - title: عنوان - unfollowed: پایان پیگیری scheduled_statuses: over_daily_limit: شما از حد مجاز %{limit} بوق زمانبندیشده در آن روز فراتر رفتهاید over_total_limit: شما از حد مجاز %{limit} بوق زمانبندیشده فراتر رفتهاید @@ -805,18 +952,47 @@ fa: activity: آخرین فعالیت browser: مرورگر browsers: + alipay: Alipay + blackberry: بلکبری + chrome: کروم + edge: مایکروسافت اج + electron: الکترون + firefox: فایرفاکس generic: مرورگر ناشناخته + ie: اینترنت اکسپلورر + micro_messenger: مایکرومسنجر + nokia: Nokia S40 Ovi Browser + opera: اپرا + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: سافاری + uc_browser: UCBrowser + weibo: Weibo current_session: نشست فعلی description: "%{browser} روی %{platform}" explanation: مرورگرهای زیر هماینک به حساب شما وارد شدهاند. + ip: IP platforms: + adobe_air: Adobe Air + android: اندروید + blackberry: بلکبری + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: لینوکس + mac: مک other: سیستم ناشناخته + windows: ویندوز + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: لغو کردن revoke_success: نشست با موفقیت لغو شد title: نشستها settings: account: حساب account_settings: تنظیمات حساب + aliases: نامهای مستعار appearance: نما authorized_apps: برنامههای مجاز back: بازگشت به ماستدون @@ -824,7 +1000,7 @@ fa: development: فرابری edit_profile: ویرایش نمایه export: برونسپاری دادهها - featured_tags: برچسبهای منتخب + featured_tags: برچسبهای برگزیده identity_proofs: مدرک شناسهها import: درونریزی import_and_export: درونریزی و برونبری @@ -834,6 +1010,8 @@ fa: profile: نمایه relationships: پیگیریها و پیگیران two_factor_authentication: ورود دومرحلهای + spam_check: + spam_detected: این یک گزارش خودکار برای تشخیص هرزنامه است. statuses: attached: description: 'پیوستشده: %{attached}' @@ -857,12 +1035,16 @@ fa: private: نوشتههای غیرعمومی را نمیتوان ثابت کرد reblog: بازبوقها را نمیتوان ثابت کرد poll: + total_people: + one: "%{count} نفر" + other: "%{count} نفر" total_votes: one: "%{count} رأی" other: "%{count} رأی" vote: رأی show_more: نمایش sign_in_to_participate: برای شرکت در گفتگو وارد حساب خود شوید + title: '%{name}: "%{quote}"' visibilities: private: خصوصی private_long: تنها پیگیران شما میبینند @@ -874,6 +1056,8 @@ fa: pinned: نوشتههای ثابت reblogged: بازبوقید sensitive_content: محتوای حساس + tags: + does_not_match_previous_name: با نام پیشین مطابق نیست terms: body_html: | <h2>سیاست رازداری</h2> @@ -964,6 +1148,7 @@ fa: time: formats: default: "%d %b %Y, %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: برای تأیید، کدی را که برنامهٔ تأییدکننده ساخته است وارد کنید description_html: اگر <strong>ورود دومرحلهای</strong> را فعال کنید، برای ورود به سیستم به تلفن خود نیاز خواهید داشت تا برایتان یک کد موقتی بسازد. @@ -990,7 +1175,9 @@ fa: disable: تا وقتی حساب شما متوقف باشد، دادههای شما دستنخورده باقی میمانند، ولی تا وقتی که حسابتان باز نشده، نمیتوانید هیچ کاری با آن بکنید. silence: تا وقتی حساب شما محدود باشد، تنها کسانی که از قبل پیگیر شما بودند نوشتههای شما در این سرور را میبینند و شما در فهرستهای عمومی دیده نمیشوید. ولی دیگران همچنان میتوانند به دلخواه خودشان پیگیر شما شوند. suspend: حساب شما معلق شده است، و همهٔ نوشتهها و رسانههای تصویری شما به طور بازگشتناپذیری پاک شدهاند؛ چه از این سرور و چه از سرورهای دیگری که از آنها پیگیر داشتید. + get_in_touch: با پاسخ به این ایمیل میتوانید با دستاندرکاران %{instance} در تماس باشید. review_server_policies: مرور سیاستهای این سرور + statuses: 'به طور خاص برای:' subject: disable: حساب %{acct} شما متوقف شده است none: هشدار برای %{acct} @@ -1006,7 +1193,7 @@ fa: edit_profile_step: 'شما میتوانید نمایهٔ خود را به دلخواه خود تغییر دهید: میتوانید تصویر نمایه، تصویر پسزمینه، نام، و چیزهای دیگری را تعیین کنید. اگر بخواهید، میتوانید حساب خود را خصوصی کنید تا فقط کسانی که شما اجازه میدهید بتوانند پیگیر حساب شما شوند.' explanation: نکتههایی که برای آغاز کار به شما کمک میکنند final_action: چیزی منتشر کنید - final_step: 'چیزی بنویسید! حتی اگر الان کسی پیگیر شما نباشد، دیگران نوشتههای عمومی شما را میبینند، مثلاً در فهرست نوشتههای محلی و در هشتگها. شاید بخواهید با هشتگ #آشنایی خودتان را معرفی کنید.' + final_step: 'چیزی بنویسید! حتی اگر الان کسی پیگیر شما نباشد، دیگران نوشتههای عمومی شما را میبینند، مثلاً در فهرست نوشتههای محلی و در برچسب (هشتگ)ها. شاید بخواهید با برچسب #معرفی خودتان را معرفی کنید.' full_handle: نام کاربری کامل شما full_handle_hint: این چیزی است که باید به دوستان خود بگویید تا بتوانند به شما پیغام بفرستند یا از سرورهای دیگر پیگیر شما شوند. review_preferences_action: تغییر ترجیحات diff --git a/config/locales/fi.yml b/config/locales/fi.yml index e0dc0f756..dfe71c098 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -5,15 +5,15 @@ fi: about_mastodon_html: Mastodon on sosiaalinen verkosto. Se on toteutettu avoimilla verkkoprotokollilla ja vapailla, avoimen lähdekoodin ohjelmistoilla, ja se toimii hajautetusti samaan tapaan kuin sähköposti. about_this: Tietoja tästä palvelimesta administered_by: 'Ylläpitäjä:' + api: API apps: Mobiili sovellukset + apps_platforms: Käytä Mastodonia iOS:llä, Androidilla tai muilla alustoilla contact: Ota yhteyttä contact_missing: Ei asetettu contact_unavailable: Ei saatavilla + discover_users: Löydä käyttäjiä documentation: Dokumentaatio - extended_description_html: | - <h3>Hyvä paikka säännöille</h3> - <p>Pidempää kuvausta ei ole vielä laadittu.</p> - generic_description: "%{domain} on yksi verkostoon kuuluvista palvelimista" + get_apps: Kokeile mobiilisovellusta hosted_on: Mastodon palvelimella %{domain} learn_more: Lisätietoja privacy_policy: Tietosuojaseloste @@ -23,6 +23,9 @@ fi: other: tilanne status_count_before: He ovat luoneet terms: Käyttöehdot + unavailable_content_description: + domain: Palvelin + reason: Syy user_count_after: one: käyttäjä other: käyttäjät @@ -38,18 +41,26 @@ fi: joined: Liittynyt %{date} last_active: viimeksi aktiivinen link_verified_on: Tämän linkin omistus on tarkastettu %{date} + media: Media moved_html: "%{name} on muuttanut osoitteeseen %{new_profile_link}:" network_hidden: Nämä tiedot eivät ole käytettävissä + never_active: Ei koskaan nothing_here: Täällä ei ole mitään! people_followed_by: Henkilöt, joita %{name} seuraa people_who_follow: Käyttäjän %{name} seuraajat pin_errors: following: Sinun täytyy seurata henkilöä jota haluat tukea + posts: + one: Tuuttaus + other: Tuuttaukset + posts_tab_heading: Tuuttaukset posts_with_replies: Tuuttaukset ja vastaukset reserved_username: Käyttäjänimi on varattu roles: admin: Ylläpitäjä + bot: Botti moderator: Moderaattori + unavailable: Profiili ei saatavilla unfollow: Lopeta seuraaminen admin: account_moderation_notes: @@ -58,6 +69,8 @@ fi: delete: Poista destroyed_msg: Moderointimerkinnän poisto onnistui! accounts: + approve: Hyväksy + approve_all: Hyväksy kaikki are_you_sure: Oletko varma? avatar: Profiilikuva by_domain: Verkkotunnus @@ -71,6 +84,7 @@ fi: confirm: Vahvista confirmed: Vahvistettu confirming: Vahvistetaan + deleted: Poistettu demote: Alenna disable: Poista käytöstä disable_two_factor_authentication: Poista 2FA käytöstä @@ -87,6 +101,8 @@ fi: followers_url: Seuraajien osoite follows: Seuraa inbox_url: Saapuvan postilaatikon osoite + ip: IP + joined: Liittynyt location: all: Kaikki local: Paikalliset @@ -96,7 +112,9 @@ fi: media_attachments: Medialiitteet memorialize: Muuta muistosivuksi moderation: + active: Aktiivinen all: Kaikki + pending: Odottavat silenced: Hiljennetty suspended: Jäähyllä title: Moderointi @@ -112,6 +130,8 @@ fi: public: Julkinen push_subscription_expires: PuSH-tilaus vanhenee redownload: Päivitä profiilikuva + reject: Hylkää + reject_all: Hylkää kaikki remove_avatar: Poista profiilikuva resend_confirmation: already_confirmed: Tämä käyttäjä on jo vahvistettu @@ -133,14 +153,18 @@ fi: created_reports: Tämän tilin luomat raportit targeted_reports: Tästä tilistä tehdyt raportit silence: Hiljennä + silenced: Mykistetty statuses: Tilat subscribe: Tilaa + suspended: Jäähyllä title: Tilit unconfirmed_email: Sähköpostia ei vahvistettu undo_silenced: Peru hiljennys undo_suspension: Peru jäähy unsubscribe: Lopeta tilaus username: Käyttäjänimi + warn: Varoita + web: Verkko action_logs: actions: assigned_to_self_report: "%{name} otti raportin %{target} tehtäväkseen" @@ -195,6 +219,8 @@ fi: update_failed_msg: Emojin päivitys epäonnistui updated_msg: Emojin päivitys onnistui! upload: Lähetä + dashboard: + authorized_fetch_mode: Suojattu tila domain_blocks: add_new: Lisää uusi created_msg: Verkkotunnuksen estoa käsitellään @@ -330,12 +356,6 @@ fi: no_media: Ei mediaa title: Tilin tilat with_media: Sisältää mediaa - subscriptions: - callback_url: Paluu-URL - confirmed: Vahvistettu - expires_in: Vanhenee - last_delivery: Viimeisin toimitus - topic: Aihe title: Ylläpito admin_mailer: new_report: @@ -358,7 +378,6 @@ fi: your_token: Pääsytunnus auth: change_password: Salasana - confirm_email: Vahvista sähköpostiosoite delete_account: Poista tili delete_account_html: Jos haluat poistaa tilisi, <a href="%{path}">paina tästä</a>. Poisto on vahvistettava. didnt_get_confirmation: Etkö saanut vahvistusohjeita? @@ -400,16 +419,14 @@ fi: x_months: "%{count} kk" x_seconds: "%{count} s" deletes: - bad_password_msg: Hyvä yritys, hakkerit! Väärä salasana confirm_password: Tunnistaudu syöttämällä nykyinen salasanasi - description_html: Tämä poistaa <strong>pysyvästi ja peruuttamattomasti</strong> kaiken tilisi sisällön ja poistaa tilin käytöstä. Käyttäjänimesi pysyy varattuna, jotta identiteettiäsi ei myöhemmin varasteta. proceed: Poista tili success_msg: Tilin poisto onnistui - warning_html: Sisällön poistaminen taataan vain tämän instanssin osalta. Jos sisältöä on jaettu paljon, siitä todennäköisesti jää jälkiä. Palvelimet, joihin ei saada yhteyttä tai jotka ovat lopettaneet päivitystesi tilaamisen, eivät päivitä tietokantojaan. - warning_title: Sisällön saatavuustieto levitetty errors: + '400': The request you submitted was invalid or malformed. '403': Sinulla ei ole lupaa nähdä tätä sivua. '404': Etsimääsi sivua ei ole olemassa. + '406': This page is not available in the requested format. '410': Etsimääsi sivua ei ole enää olemassa. '422': content: Turvallisuusvahvistus epäonnistui. Oletko estänyt evästeet? @@ -418,6 +435,7 @@ fi: '500': content: Valitettavasti jokin meni pieleen meidän päässämme. title: Sivu ei ole oikein + '503': The page could not be served due to a temporary server failure. noscript_html: Mastodon-selainsovelluksen käyttöön vaaditaan JavaScript. Voit vaihtoehtoisesti kokeilla jotakin omalle käyttöjärjestelmällesi tehtyä Mastodon<a href="%{apps_path}">sovellusta</a>. exports: archive_takeout: @@ -476,9 +494,6 @@ fi: too_many: Tiedostoja voi liittää enintään 4 migrations: acct: uuden tilin käyttäjätunnus@verkkotunnus - currently_redirecting: 'Profiiliisi on asetettu uudelleenohjaus:' - proceed: Tallenna - updated_msg: Tilinsiirtoasetusten päivitys onnistui! moderation: title: Moderointi notification_mailer: @@ -536,8 +551,6 @@ fi: missing_resource: Vaadittavaa uudelleenohjaus-URL:ää tiliisi ei löytynyt proceed: Siirry seuraamaan prompt: 'Olet aikeissa seurata:' - remote_unfollow: - error: Virhe sessions: activity: Viimeisin toiminta browser: Selain diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 5c15ab6a4..52dd032dd 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1,40 +1,48 @@ --- fr: about: - about_hashtag_html: Figurent ci-dessous les pouets tagués avec <strong>#%{hashtag}</strong>. Vous pouvez interagir avec eux si vous avez un compte n’importe où dans le Fediverse. - about_mastodon_html: Mastodon est un réseau social utilisant des formats ouverts et des logiciels libres. Comme le courriel, il est décentralisé. + about_hashtag_html: Voici les pouets tagués avec <strong>#%{hashtag}</strong>. Vous pouvez interagir avec eux si vous avez un compte n’importe où dans le Fédiverse. + about_mastodon_html: 'Le réseau social de l''avenir : Pas d''annonces, pas de surveillance institutionnelle, conception éthique et décentralisation ! Possédez vos données avec Mastodon !' about_this: À propos - active_count_after: actif·ve·s + active_count_after: actif·ve active_footnote: Utilisateur·rice·s actif·ve·s mensuels (MAU) administered_by: 'Administrée par :' api: API apps: Applications mobiles apps_platforms: Utilisez Mastodon depuis iOS, Android et d’autres plates-formes browse_directory: Parcourir l’annuaire des profils et filtrer par centres d’intérêt + browse_local_posts: Parcourir un flux en direct de messages publics depuis ce serveur browse_public_posts: Parcourir un flux en direct de messages publics sur Mastodon contact: Contact - contact_missing: Manquant - contact_unavailable: Non disponible + contact_missing: Non défini + contact_unavailable: N/D discover_users: Découvrez des utilisateur·rice·s documentation: Documentation - extended_description_html: | - <h3>Un bon endroit pour les règles</h3> - <p>La description étendue n’a pas été remplie.</p> federation_hint_html: Avec un compte sur %{instance}, vous pourrez suivre les gens sur n’importe quel serveur Mastodon et au-delà. - generic_description: "%{domain} est seulement un serveur du réseau" get_apps: Essayez une application mobile - hosted_on: Serveur Mastodon hébergée par %{domain} + hosted_on: Serveur Mastodon hébergé par %{domain} + instance_actor_flash: | + Ce compte est un acteur virtuel utilisé pour représenter le serveur lui-même et non un utilisateur individuel. + Il est utilisé à des fins de fédération et ne doit pas être bloqué à moins que vous ne vouliez bloquer l’instance entière, dans ce cas vous devriez utiliser un bloqueur de domaine. learn_more: En savoir plus privacy_policy: Politique de vie privée see_whats_happening: Voir ce qui se passe server_stats: 'Statistiques du serveur :' source_code: Code source status_count_after: - one: Statut - other: Statuts + one: statut + other: statuts status_count_before: Ayant publié - tagline: Suivez vos ami·e·s et découvrez en de nouveaux·elles + tagline: Suivez vos ami·e·s et découvrez-en de nouveaux·elles terms: Conditions d’utilisation + unavailable_content: Contenu non disponible + unavailable_content_description: + domain: Serveur + reason: Motif + rejecting_media: 'Les fichiers média de ces serveurs ne seront pas traités ou stockés et aucune miniature ne sera affichée, nécessitant un clic vers le fichier d’origine :' + silenced: 'Les messages de ces serveurs seront cachés des flux publics et conversations, et les interactions de leurs utilisateur·ice·s ne donneront lieu à aucune notification, à moins que vous ne les suiviez :' + suspended: 'Aucune donnée venant de ces serveurs ne sera traitée, stockée ou échangée, rendant toute interaction ou communication avec les utilisateurs de ces serveurs impossible :' + unavailable_content_html: Mastodon vous permet généralement de visualiser le contenu et d'interagir avec les utilisateurs de n'importe quel autre serveur dans le fédiverse. Voici les exceptions qui ont été faites sur ce serveur en particulier. user_count_after: one: utilisateur other: utilisateurs @@ -42,17 +50,20 @@ fr: what_is_mastodon: Qu’est-ce que Mastodon ? accounts: choices_html: "%{name} recommande :" + endorsements_hint: Vous pouvez recommander des personnes que vous suivez depuis l’interface web, et elles apparaîtront ici. + featured_tags_hint: Vous pouvez recommander des hashtags spécifiques qui seront affichés ici. follow: Suivre followers: one: Abonné·e other: Abonné⋅e⋅s following: Abonnements joined: Inscrit·e en %{date} - last_active: actif dernièrement + last_active: actif·ve dernièrement link_verified_on: La propriété de ce lien a été vérifiée le %{date} media: Médias moved_html: "%{name} a changé de compte pour %{new_profile_link} :" network_hidden: Cette information n’est pas disponible + never_active: Jamais nothing_here: Rien à voir ici ! people_followed_by: Personnes suivies par %{name} people_who_follow: Personnes qui suivent %{name} @@ -62,7 +73,7 @@ fr: one: Pouet other: Pouets posts_tab_heading: Pouets - posts_with_replies: Statuts & réponses + posts_with_replies: Pouets & réponses reserved_username: Ce nom d’utilisateur⋅ice est réservé roles: admin: Admin @@ -104,7 +115,7 @@ fr: domain: Domaine edit: Éditer email: Courriel - email_status: État de la messagerie + email_status: État du courriel enable: Activer enabled: Activé feed_url: URL du flux @@ -125,7 +136,7 @@ fr: media_attachments: Fichiers médias memorialize: Convertir en mémorial moderation: - active: Actif + active: Actif·ve·s all: Tous pending: En cours de traitement silenced: Masqués @@ -165,6 +176,7 @@ fr: user: Utilisateur salmon_url: URL Salmon search: Rechercher + search_same_ip: Autres utilisateur·rice·s avec la même IP shared_inbox_url: URL de la boite de réception partagée show: created_reports: Signalements faits @@ -176,26 +188,29 @@ fr: suspended: Suspendu time_in_queue: En file d’attente %{time} title: Comptes - unconfirmed_email: Courriel non-confirmé + unconfirmed_email: Courriel non confirmé undo_silenced: Démasquer undo_suspension: Annuler la suspension unsubscribe: Se désabonner username: Nom d’utilisateur⋅ice warn: Avertissement web: Web + whitelisted: Sur liste blanche action_logs: actions: assigned_to_self_report: "%{name} s’est assigné·e le signalement de %{target}" change_email_user: "%{name} a modifié l’adresse de courriel de l’utilisateur·rice %{target}" confirm_user: "%{name} adresse courriel confirmée de l’utilisateur·ice %{target}" - create_account_warning: "%{name} a envoyé une attention à %{target}" + create_account_warning: "%{name} a envoyé un avertissement à %{target}" create_custom_emoji: "%{name} a importé de nouveaux émojis %{target}" + create_domain_allow: "%{name} a inscrit le domaine %{target} sur liste blanche" create_domain_block: "%{name} a bloqué le domaine %{target}" - create_email_domain_block: "%{name} a mis le domaine du courriel %{target} sur liste noire" + create_email_domain_block: "%{name} a mis le domaine de courriel %{target} sur liste noire" demote_user: "%{name} a rétrogradé l’utilisateur·ice %{target}" destroy_custom_emoji: "%{name} a détruit l’émoticône %{target}" + destroy_domain_allow: "%{name} a supprimé le domaine %{target} de la liste blanche" destroy_domain_block: "%{name} a débloqué le domaine %{target}" - destroy_email_domain_block: "%{name} a mis le domaine du courriel %{target} sur liste blanche" + destroy_email_domain_block: "%{name} a mis le domaine de courriel %{target} sur liste blanche" destroy_status: "%{name} a enlevé le statut de %{target}" disable_2fa_user: "%{name} a désactivé l’authentification à deux facteurs pour l’utilisateur·ice %{target}" disable_custom_emoji: "%{name} a désactivé l’émoji %{target}" @@ -218,31 +233,39 @@ fr: deleted_status: "(statut supprimé)" title: Journal d’audit custom_emojis: + assign_category: Attribuer une catégorie by_domain: Domaine copied_msg: Copie locale de l’émoji créée avec succès ! copy: Copier copy_failed_msg: Impossible de faire une copie locale de cet émoji + create_new_category: Créer une nouvelle catégorie created_msg: Émoji créé avec succès ! delete: Supprimer destroyed_msg: Émoji supprimé avec succès ! disable: Désactiver + disabled: Désactivé disabled_msg: Émoji désactivé avec succès ! emoji: Émoji enable: Activer + enabled: Activé enabled_msg: Émoji activé avec succès image_hint: PNG de moins de 50 Ko + list: Lister listed: Listé new: title: Ajouter un nouvel émoji personnalisé - overwrite: Réécrire + overwrite: Écraser shortcode: Raccourci shortcode_hint: Au moins deux caractères, seulement des caractères alphanumériques ou des tirets bas title: Émojis personnalisés + uncategorized: Non catégorisé + unlist: Délister unlisted: Délisté - update_failed_msg: N’a pas pu mettre à jour cet émoji + update_failed_msg: Cet émoji n'a pas pu être mis à jour updated_msg: Émoji mis à jour avec succès ! upload: Téléverser dashboard: + authorized_fetch_mode: Mode de récupération autorisé backlog: tâches en attente config: Configuration feature_deletions: Suppressions de comptes @@ -250,10 +273,13 @@ fr: feature_profile_directory: Annuaire des profils feature_registrations: Inscriptions feature_relay: Relais de fédération + feature_spam_check: Anti-spam feature_timeline_preview: Aperçu du fil public features: Fonctionnalités hidden_service: Fédération avec des services cachés open_reports: signalements non résolus + pending_tags: hashtags en attente d’approbation + pending_users: utilisateur·rice·s en attente d’approbation recent_users: Utilisateur·rice·s récent·e·s search: Recherche plein texte single_user_mode: Mode utilisateur·ice unique @@ -265,11 +291,18 @@ fr: week_interactions: interactions cette semaine week_users_active: actif·ve·s cette semaine week_users_new: utilisateur·rice·s cette semaine + whitelist_mode: Mode liste blanche + domain_allows: + add_new: Mettre le domaine sur liste sur blanche + created_msg: Ce domaine a été ajouté à la liste blanche avec succès + destroyed_msg: Le domaine a été supprimé de la liste blanche + undo: Supprimer de la liste blanche domain_blocks: add_new: Ajouter un nouveau bloqueur de domaine created_msg: Le blocage de domaine est désormais activé destroyed_msg: Le blocage de domaine a été désactivé domain: Domaine + edit: Modifier le bloqueur de domaine existing_domain_block_html: Vous avez déjà imposé des limites plus strictes à %{name}, vous devez d’abord le <a href="%{unblock_url}">débloquer</a>. new: create: Créer le blocage @@ -280,7 +313,11 @@ fr: silence: Masqué suspend: Suspendre title: Nouveau blocage de domaine - reject_media: Fichiers média rejetés + private_comment: Commentaire privé + private_comment_hint: Commenter sur cette limitation de domaine pour informer les modérateurs internes. + public_comment: Commentaire public + public_comment_hint: Commentaire sur cette limitation de domaine pour le grand public, si l'affichage publique de la liste des limitations de domaine est activée. + reject_media: Rejeter les fichiers média reject_media_hint: Supprime localement les fichiers média stockés et refuse d’en télécharger ultérieurement. Ne concerne pas les suspensions reject_reports: Rejeter les signalements reject_reports_hint: Ignorez tous les signalements provenant de ce domaine. Ne concerne pas les suspensions @@ -294,11 +331,12 @@ fr: one: Un compte affecté dans la base de données other: "%{count} comptes affectés dans la base de données" retroactive: - silence: Annuler le masquage sur tous les comptes existants pour ce domaine - suspend: Annuler la suspension sur tous les comptes existants pour ce domaine + silence: Annuler le masquage des comptes existants affectés pour ce domaine + suspend: Annuler la suspension des comptes existants affectés pour ce domaine title: Annuler le blocage de domaine pour %{domain} undo: Annuler undo: Annuler le bloqueur de domaine + view: Afficher les bloqueurs de domaines email_domain_blocks: add_new: Ajouter created_msg: Le blocage de domaine de courriel est désormais activé @@ -322,6 +360,8 @@ fr: all: Tout limited: Limité title: Modération + private_comment: Commentaire privé + public_comment: Commentaire public title: Fédération total_blocked_by_us: Bloqués par nous total_followed_by_them: Suivi par eux @@ -341,16 +381,17 @@ fr: relays: add_new: Ajouter un nouveau relais delete: Effacer - description_html: Un <strong>relai de fédération</strong> est un serveur intermédiaire qui échange de grandes quantités de pouets entre les serveurs qui publient dessus et ceux qui y sont abonnés. <strong>Il peut aider les petits et moyen serveurs à découvrir du contenu sur le fediverse</strong>, ce qui normalement nécessiterait que les membres locaux suivent des gens inscrits sur des serveurs distants. + description_html: Un <strong>relai de fédération</strong> est un serveur intermédiaire qui échange de grandes quantités de pouets publics entre les serveurs qui publient dessus et ceux qui y sont abonnés. <strong>Il peut aider les petits et moyen serveurs à découvrir du contenu sur le fediverse</strong>, ce qui normalement nécessiterait que les membres locaux suivent des gens inscrits sur des serveurs distants. disable: Désactiver disabled: Désactivé - enable: Activé + enable: Activer enable_hint: Une fois activé, votre serveur souscrira à tous les pouets publics présents sur ce relais et y enverra ses propres pouets publics. enabled: Activé - inbox_url: URL de relais + inbox_url: URL du relais pending: En attente de l’approbation du relai save_and_enable: Sauvegarder et activer setup: Paramétrer une connexion de relais + signatures_not_enabled: Les relais ne fonctionneront pas correctement lorsque le mode sécurisé ou le mode liste blanche est activé status: Statut title: Relais report_notes: @@ -359,7 +400,7 @@ fr: reports: account: note: note - report: signaler + report: signalement(s) action_taken_by: Intervention de are_you_sure: Êtes vous certain⋅e ? assign_to_self: Me l’assigner @@ -388,7 +429,7 @@ fr: updated_at: Mis à jour settings: activity_api_enabled: - desc_html: Nombre de statuts affichés localement, d’utilisateur·ice·s actif·ve·s et de nouveaux enregistrements dans les registres hebdomadaires + desc_html: Nombre de statuts affichés localement, d’utilisateur·ice·s actif·ve·s et de nouveaux·elles utilisateur·ice·s regroupé·e·s par semaine title: Publier des statistiques agrégées sur l’activité des utilisateur·ice·s bootstrap_timeline_accounts: desc_html: Séparez les noms d’utilisateur·ice par des virgules. Ne fonctionne qu’avec des comptes locaux et non verrouillés. Si laissé vide, tous les administrateur⋅ice⋅s locaux sont sélectionné⋅e⋅s. @@ -399,6 +440,16 @@ fr: custom_css: desc_html: Modifier l’apparence avec une CSS chargée sur chaque page title: CSS personnalisé + default_noindex: + desc_html: Affecte tous les utilisateurs qui n'ont pas changé eux-mêmes ce paramètre + title: Opter pour le retrait de l'indexation des moteurs de recherche par défaut + domain_blocks: + all: À tout le monde + disabled: À personne + title: Afficher les bloqueurs de domaines + users: Pour les utilisateurs locaux connectés + domain_blocks_rationale: + title: Montrer la raison hero: desc_html: Affichée sur la page d’accueil. Au moins 600x100px recommandé. Lorsqu’elle n’est pas définie, se rabat sur la vignette du serveur title: Image d’en-tête @@ -412,11 +463,11 @@ fr: desc_html: Les liens de prévisualisation sur les autres sites web afficheront une vignette même si le média est sensible title: Afficher les médias sensibles dans les prévisualisations OpenGraph profile_directory: - desc_html: Permettre aux utilisateurs d’être découverts + desc_html: Permettre aux utilisateur·ice·s d’être découvert·e·s title: Activer l’annuaire des profils registrations: closed_message: - desc_html: Affiché sur la page d’accueil lorsque les inscriptions sont fermées<br>Vous pouvez utiliser des balises HTML + desc_html: Affiché sur la page d’accueil lorsque les inscriptions sont fermées. Vous pouvez utiliser des balises HTML title: Message de fermeture des inscriptions deletion: desc_html: Permettre à tou·te·s les utilisateur·ice·s de supprimer leur compte @@ -431,7 +482,7 @@ fr: open: N’importe qui peut s’inscrire title: Mode d’enregistrement show_known_fediverse_at_about_page: - desc_html: Lorsque l’option est activée, les pouets provenant de toutes les serveurs connues sont affichés dans la prévisualisation. Sinon, seuls les pouets locaux sont affichés. + desc_html: Lorsque l’option est activée, les pouets provenant de toutes les serveurs connus sont affichés dans la prévisualisation. Sinon, seuls les pouets locaux sont affichés title: Afficher le fediverse connu dans la prévisualisation du fil show_staff_badge: desc_html: Montrer un badge de responsable sur une page utilisateur·ice @@ -446,51 +497,64 @@ fr: desc_html: Affichée dans la barre latérale et dans les méta-tags. Décrivez ce qui rend spécifique ce serveur Mastodon en un seul paragraphe. Si laissée vide, la description du serveur sera affiché par défaut. title: Description courte du serveur site_terms: - desc_html: Affichée sur la page des conditions d’utilisation du site<br>Vous pouvez utiliser des balises HTML + desc_html: Affichée sur la page des conditions d’utilisation du site. Vous pouvez utiliser des balises HTML title: Politique de confidentialité site_title: Nom du serveur + spam_check_enabled: + desc_html: Mastodon peut signaler automatiquement des comptes qui envoient des messages répétés non sollicités. Il peut y avoir de faux positifs. + title: Automatisation anti-spam thumbnail: desc_html: Utilisée pour les prévisualisations via OpenGraph et l’API. 1200x630px recommandé title: Vignette du serveur timeline_preview: - desc_html: Afficher le fil public sur la page d’accueil - title: Prévisualisation du fil global + desc_html: Afficher le fil public sur la page d’accueil et autoriser l'accès anonyme à l'API du fil public + title: Autoriser la prévisualisation anonyme du fil global title: Paramètres du serveur + trendable_by_default: + desc_html: Affecte les hashtags qui n'ont pas été précédemment non autorisés + title: Autoriser les hashtags à apparaître dans les tendances sans examen préalable + trends: + desc_html: Afficher publiquement les hashtags approuvés qui sont populaires en ce moment + title: Hashtags populaires statuses: back_to_account: Retour à la page du compte batch: delete: Supprimer nsfw_off: Marquer comme non-sensible nsfw_on: Marquer comme sensible + deleted: Supprimé failed_to_execute: Erreur d’exécution media: title: Médias no_media: Aucun média no_status_selected: Aucun statut n’a été modifié car aucun n’a été sélectionné - title: État du compte + title: Statuts du compte with_media: avec médias - subscriptions: - callback_url: URL de rappel - confirmed: Confirmé - expires_in: Expire dans - last_delivery: Dernière livraison - title: WebSub - topic: Sujet tags: - accounts: Comptes - hidden: Masqué - hide: Masquer dans l’annuaire - name: Hashtag + accounts_today: Utilisations uniques aujourd'hui + accounts_week: Utilisation unique cette semaine + breakdown: Répartition de l’utilisation actuelle par source + context: Contexte + directory: Dans le répertoire + in_directory: "%{count} dans le répertoire" + last_active: Dernière activité + most_popular: Plus populaire + most_recent: Plus récent + name: Mot-clé + review: État de traitement + reviewed: Traité title: Hashtags - unhide: Afficher dans l’annuaire - visible: Visible + trending_right_now: Populaire en ce moment + unique_uses_today: "%{count} posts aujourd'hui" + unreviewed: Non traité + updated_msg: Paramètres du hashtag mis à jour avec succès title: Administration warning_presets: add_new: Ajouter un nouveau delete: Effacer edit: Éditer - edit_preset: Éditer la présélection d’avertissement - title: Gérer les présélections d’avertissement + edit_preset: Éditer les avertissements prédéfinis + title: Gérer les avertissements prédéfinis admin_mailer: new_pending_account: body: Les détails du nouveau compte se trouvent ci-dessous. Vous pouvez approuver ou rejeter cette demande. @@ -499,12 +563,23 @@ fr: body: "%{reporter} a signalé %{target}" body_remote: Quelqu’un de %{domain} a signalé %{target} subject: Nouveau signalement sur %{instance} (#%{id}) + new_trending_tag: + body: 'Le hashtag #%{name} est populaire aujourd’hui, mais il n’a pas été approuvé. Il ne sera pas affiché publiquement à moins que vous l’autorisiez, ou sauvegardiez simplement ce formulaire tel quel pour ne plus jamais en entendre parler.' + subject: Nouveau hashtag en attente de traitement sur %{instance} (#%{name}) + aliases: + add_new: Créer un alias + created_msg: Un nouvel alias a été créé avec succès. Vous pouvez maintenant déménager depuis l'ancien compte. + deleted_msg: Suppression réussie de l'alias. Le déménagement de ce compte vers celui-ci ne sera plus possible. + hint_html: Si vous voulez déménager d’un autre compte vers celui-ci, vous pouvez créer ici un alias, qui est nécessaire avant de pouvoir migrer les abonné·e·s de l’ancien compte vers celui-ci. Cette action en soi est <strong>inoffensive et réversible</strong>. <strong>La migration du compte est initiée à partir de l’ancien compte</strong>. + remove: Détacher l'alias appearance: advanced_web_interface: Interface web avancée advanced_web_interface_hint: 'Si vous voulez utiliser toute la largeur de votre écran, l’interface web avancée vous permet de configurer plusieurs colonnes différentes pour voir autant d’informations que vous le souhaitez en même temps : Accueil, notifications, fil public fédéré, un nombre illimité de listes et hashtags.' animations_and_accessibility: Animations et accessibilité confirmation_dialogs: Dialogues de confirmation + discovery: Découverte sensitive_content: Contenu sensible + toot_layout: Agencement du pouet application_mailer: notification_preferences: Modifier les préférences de courriel salutation: "%{name}," @@ -516,23 +591,27 @@ fr: created: Application créée avec succès destroyed: Application supprimée avec succès invalid_url: L’URL fournie est invalide - regenerate_token: Regénérer le jeton d’accès - token_regenerated: Jeton d’accès regénéré avec succès + regenerate_token: Régénérer le jeton d’accès + token_regenerated: Jeton d’accès régénéré avec succès warning: Soyez prudent⋅e avec ces données. Ne les partagez pas ! your_token: Votre jeton d’accès auth: apply_for_account: Demander une invitation change_password: Mot de passe checkbox_agreement_html: J’accepte les <a href="%{rules_path}" target="_blank">règles du serveur</a> et les <a href="%{terms_path}" target="_blank">conditions de service</a> - confirm_email: Confirmer mon adresse mail + checkbox_agreement_without_rules_html: J’accepte les <a href="%{terms_path}" target="_blank">conditions d’utilisation</a> delete_account: Supprimer le compte delete_account_html: Si vous désirez supprimer votre compte, vous pouvez <a href="%{path}">cliquer ici</a>. Il vous sera demandé de confirmer cette action. + description: + prefix_invited_by_user: "@%{name} vous invite à rejoindre ce serveur Mastodon !" + prefix_sign_up: Inscrivez-vous aujourd’hui sur Mastodon ! + suffix: Avec un compte, vous pourrez suivre des gens, publier des statuts et échanger des messages avec les utilisateurs de n'importe quel serveur Mastodon et bien plus ! didnt_get_confirmation: Vous n’avez pas reçu les consignes de confirmation ? forgot_password: Mot de passe oublié ? invalid_reset_password_token: Le lien de réinitialisation du mot de passe est invalide ou a expiré. Merci de réessayer. login: Se connecter logout: Se déconnecter - migrate_account: Déplacer vers un compte différent + migrate_account: Déménager vers un compte différent migrate_account_html: Si vous voulez rediriger ce compte vers un autre, vous pouvez le <a href="%{path}">configurer ici</a>. or_log_in_with: Ou authentifiez-vous avec providers: @@ -544,6 +623,16 @@ fr: reset_password: Réinitialiser le mot de passe security: Sécurité set_new_password: Définir le nouveau mot de passe + setup: + email_below_hint_html: Si l’adresse de courriel ci-dessous est incorrecte, vous pouvez la modifier ici et recevoir un nouveau courriel de confirmation. + email_settings_hint_html: Le courriel de confirmation a été envoyé à %{email}. Si cette adresse de courriel n’est pas correcte, vous pouvez la modifier dans les paramètres du compte. + title: Configuration + status: + account_status: État du compte + confirming: En attente de la confirmation par courriel à compléter. + functional: Votre compte est entièrement opérationnel. + pending: Votre demande est en attente d'examen par notre personnel. Cela peut prendre un certain temps. Vous recevrez un courriel si votre demande est approuvée. + redirecting_to: Votre compte est inactif car il est actuellement redirigé vers %{acct}. trouble_logging_in: Vous avez un problème pour vous connecter ? authorize_follow: already_following: Vous suivez déjà ce compte @@ -556,6 +645,11 @@ fr: return: Afficher le profil de l’utilisateur⋅ice web: Retour à l’interface web title: Suivre %{acct} + challenge: + confirm: Continuer + hint_html: "<strong>Astuce :</strong> Nous ne vous demanderons plus votre mot de passe pour la prochaine heure." + invalid_password: Mot de passe invalide + prompt: Confirmez votre mot de passe pour continuer datetime: distance_in_words: about_x_hours: "%{count} h" @@ -571,26 +665,33 @@ fr: x_months: "%{count} mois" x_seconds: "%{count} s" deletes: - bad_password_msg: Bien essayé ! Mot de passe incorrect - confirm_password: Entrez votre mot de passe pour vérifier votre identité - description_html: Cela va supprimer votre compte et le désactiver de manière <strong>permanente et irréversible</strong>. Votre nom d’utilisateur⋅ice restera réservé afin d’éviter la confusion. - proceed: Supprimer compte + challenge_not_passed: Les renseignements que vous avez entrés n'étaient pas exacts + confirm_password: Entrez votre mot de passe actuel pour vérifier votre identité + confirm_username: Entrez votre nom d'utilisateur pour confirmer la procédure + proceed: Supprimer le compte success_msg: Votre compte a été supprimé avec succès - warning_html: Seule la suppression du contenu depuis ce serveur est garantie. Le contenu qui a été partagé est susceptible de laisser des traces. Les serveurs hors-ligne ainsi que ceux n’étant plus abonnées à vos publications ne mettront pas leur base de données à jour. - warning_title: Disponibilité du contenu disséminé + warning: + before: 'Avant de procéder, veuillez lire attentivement ces notes :' + caches: Le contenu mis en cache par d'autres serveurs peut persister + data_removal: Vos messages et autres données seront définitivement supprimés + email_change_html: Vous pouvez <a href="%{path}">modifier votre adresse courriel</a> sans supprimer votre compte + email_contact_html: S'il n'arrive toujours pas, vous pouvez envoyer un courriel à <a href="mailto:%{email}">%{email}</a> pour demander de l'aide + email_reconfirmation_html: Si vous ne recevez pas le courriel de confirmation, vous pouvez le <a href="%{path}">demander à nouveau</a> + irreversible: Vous ne pourrez pas restaurer ou réactiver votre compte + more_details_html: Pour plus de détails, voir la <a href="%{terms_path}">politique de confidentialité</a>. + username_available: Votre nom d’utilisateur·ice sera à nouveau disponible + username_unavailable: Votre nom d’utilisateur·ice restera indisponible directories: directory: Annuaire des profils - enabled: Vous êtes actuellement listé dans l’annuaire. - enabled_but_waiting: Vous avez choisi d’être listé dans l’annuaire, mais vous n’avez pas encore le nombre minimum de suiveurs (%{min_followers}) pour y être inscrit. explanation: Découvrir des utilisateurs en se basant sur leurs centres d’intérêt explore_mastodon: Explorer %{title} - how_to_enable: Vous n’êtes pas encore inscrit dans l’annuaire. Vous pouvez vous inscrire ci-dessous. Utilisez des hashtags dans votre texte biographique pour être listé sous des hashtags spécifiques ! - people: - one: "%{count} personne" - other: "%{count} personne" + domain_validator: + invalid_domain: n’est pas un nom de domaine valide errors: + '400': La demande que vous avez soumise est invalide ou mal formée. '403': Vous n’avez pas accès à cette page. '404': La page que vous recherchez n’existe pas. + '406': Cette page n'est pas disponible au format demandé. '410': La page que vous recherchez n’existe plus. '422': content: Vérification de sécurité échouée. Bloquez-vous les cookies ? @@ -599,6 +700,7 @@ fr: '500': content: Nous sommes désolé·e·s, mais quelque chose s’est mal passé de notre côté. title: Cette page n’est pas correcte + '503': La page n'a pas pu être servie en raison d'une défaillance temporaire du serveur. noscript_html: Pour utiliser Mastodon, veuillez activer JavaScript. Sinon, essayez l’une des <a href="%{apps_path}">applications natives</a> pour Mastodon pour votre plate-forme. existing_username_validator: not_found: n’a pas trouvé d’utilisateur·rice local·e avec ce nom @@ -621,7 +723,8 @@ fr: featured_tags: add_new: Ajouter un nouvel hashtag errors: - limit: Vous avez déjà mis en avant le nombre maximum de hashtags + limit: Vous avez déjà recommandé le nombre maximum de hashtags + hint_html: "<strong>Que sont les hashtags vedettes ?</strong> Ils sont affichés avec emphase sur votre flux d'actualités publique et permettent aux gens de parcourir vos messages publics spécifiquement sous ces hashtags. Ils sont un excellent outil pour garder trace des œuvres créatives ou des projets à long terme." filters: contexts: home: Accueil @@ -642,19 +745,21 @@ fr: developers: Développeurs more: Davantage… resources: Ressources + trending_now: Tendance en ce moment generic: all: Tous changes_saved_msg: Les modifications ont été enregistrées avec succès ! copy: Copier + no_batch_actions_available: Aucune action par lots disponible sur cette page order_by: Classer par save_changes: Enregistrer les modifications validation_errors: - one: Quelque chose ne va pas ! Vérifiez l’erreur ci-dessous - other: Certaines choses ne vont pas ! Vérifiez les %{count} erreurs ci-dessous + one: Quelque chose ne va pas ! Veuillez vérifiez l’erreur ci-dessous + other: Certaines choses ne vont pas ! Veuillez vérifiez les %{count} erreurs ci-dessous html_validator: invalid_markup: 'contient un balisage HTML invalide: %{error}' identity_proofs: - active: Actif + active: Active authorize: Oui, autoriser authorize_connection_prompt: Autoriser cette connexion chiffrée ? errors: @@ -666,22 +771,22 @@ fr: explanation_html: Ici, vous pouvez connecter de manière chiffrée vos autres identités, par exemple un profil Keybase. Cela permet à d’autres personnes de vous envoyer des messages chiffrés et de faire confiance au contenu que vous leur envoyez. i_am_html: Je suis %{username} sur %{service}. identity: Identité - inactive: Inactif - publicize_checkbox: 'Et le poueter:' + inactive: Inactive + publicize_checkbox: 'Et le poueter :' publicize_toot: 'C’est prouvé ! Je suis %{username} sur %{service}: %{url}' - status: Statut de vérification + status: État de la vérification view_proof: Voir la preuve imports: modes: merge: Fusionner merge_long: Garder les enregistrements existants et ajouter les nouveaux - overwrite: Réécrire + overwrite: Écraser overwrite_long: Remplacer les enregistrements actuels par les nouveaux preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte. success: Vos données ont été importées avec succès et seront traitées en temps et en heure types: - blocking: Liste d’utilisateur⋅ice⋅s bloqué⋅e⋅s - domain_blocking: Liste des serveurs bloquées + blocking: Liste de comptes bloqués + domain_blocking: Liste des serveurs bloqués following: Liste d’utilisateur⋅ice⋅s suivi⋅e⋅s muting: Liste d’utilisateur⋅ice⋅s que vous masquez upload: Importer @@ -697,16 +802,16 @@ fr: '604800': 1 semaine '86400': 1 jour expires_in_prompt: Jamais - generate: Générer + generate: Générer un lien d'invitation invited_by: 'Vous avez été invité·e par :' max_uses: - one: 1 usage - other: "%{count} usages" + one: 1 utilisation + other: "%{count} utilisations" max_uses_prompt: Pas de limite - prompt: Générer et partager des liens avec les autres pour donner accès à ce serveur + prompt: Générer des liens et les partager avec d'autres personnes pour leur donner accès à ce serveur table: expires_at: Expire - uses: Utilise + uses: Utilisations title: Inviter des gens lists: errors: @@ -716,16 +821,41 @@ fr: images_and_video: Impossible de joindre une vidéo à un statut contenant déjà des images too_many: Impossible de joindre plus de 4 fichiers migrations: - acct: profil@domaine du nouveau compte - currently_redirecting: 'Votre profil va être redirigé vers :' - proceed: Enregistrer - updated_msg: Les paramètres de votre migration de compte ont été mis à jour avec succès ! + acct: A déménagé vers + cancel: Annuler la redirection + cancel_explanation: Annuler la redirection réactivera votre compte actuel, mais ne rapportera pas les abonné·e·s qui ont été déplacé·e·s sur ce compte. + cancelled_msg: Suppression de la redirection réussie. + errors: + already_moved: est le même compte que vous avez déjà déplacé vers + missing_also_known_as: ne référence pas rétroactivement ce compte + move_to_self: ne peut pas être le compte actuel + not_found: n'a pas été trouvé + on_cooldown: Vous êtes soumis·e à un temps de rechargement + followers_count: Abonné·e·s au moment du déménagement + incoming_migrations: Déplacement d'un compte différent + incoming_migrations_html: Pour déménager d'un autre compte à celui-ci, vous devez d'abord <a href="%{path}">créer un alias de compte</a>. + moved_msg: Votre compte est maintenant redirigé vers %{acct} et vos abonné·e·s sont en train d'être déplacé·e·s. + not_redirecting: Votre compte n'est pas redirigé vers un autre compte actuellement. + on_cooldown: Vous avez récemment migré votre compte. Cette fonction sera à nouveau disponible dans %{count} jours. + past_migrations: Migrations passées + proceed_with_move: Migrer les abonné·e·s + redirecting_to: Votre compte est redirigé vers %{acct}. + set_redirect: Définir la redirection + warning: + backreference_required: Le nouveau compte doit d'abord être configuré pour faire référence à celui-ci + before: 'Avant de procéder, veuillez lire attentivement ces notes :' + cooldown: Après le déménagement, il y a une période de gel pendant laquelle vous ne pourrez plus re-déménager + disabled_account: Votre compte actuel ne sera pas entièrement utilisable par la suite. Cependant, vous aurez accès à l'exportation de données et à la ré-activation. + followers: Cette action va déménager tou·te·s les abonné·e·s du compte actuel vers le nouveau compte + only_redirect_html: Alternativement, vous pouvez <a href="%{path}">seulement appliquer une redirection sur votre profil</a>. + other_data: Aucune autre donnée ne sera déplacée automatiquement + redirect: Le profil de votre compte actuel sera mis à jour avec un avis de redirection et sera exclu des recherches moderation: title: Modération notification_mailer: digest: action: Voir toutes les notifications - body: Voici un bref résumé des messages que vous auriez raté depuis votre dernière visite le %{since} + body: Voici un bref résumé des messages que vous avez raté depuis votre dernière visite le %{since} mention: "%{name} vous a mentionné⋅e dans :" new_followers_summary: one: Vous avez un⋅e nouvel⋅le abonné⋅e ! Youpi ! @@ -736,7 +866,7 @@ fr: title: Pendant votre absence… favourite: body: "%{name} a ajouté votre pouet à ses favoris :" - subject: "%{name} a ajouté votre post à ses favoris" + subject: "%{name} a ajouté votre pouet à ses favoris" title: Nouveau favori follow: body: "%{name} vous suit !" @@ -745,7 +875,7 @@ fr: follow_request: action: Gérer les demandes d’abonnement body: "%{name} a demandé à vous suivre" - subject: 'Abonné⋅es en attente : %{name}' + subject: 'Abonné⋅e·s en attente : %{name}' title: Nouvelle demande d’abonnement mention: action: Répondre @@ -781,7 +911,7 @@ fr: expired: Ce sondage est déjà terminé over_character_limit: ne peuvent être plus long que %{max} caractères chacun too_few_options: doit avoir plus qu’une proposition - too_many_options: ne peut contenir plus que %{max} propositions + too_many_options: ne peut contenir plus de %{max} propositions preferences: other: Autre posting_defaults: Paramètres par défaut des pouets @@ -798,14 +928,14 @@ fr: remove_selected_domains: Supprimer tous les abonné·e·s des domaines sélectionnés remove_selected_followers: Supprimer les abonné·e·s sélectionnés remove_selected_follows: Cesser de suivre les utilisateur·rice·s sélectionné·e·s - status: Statut du compte + status: État du compte remote_follow: - acct: Entrez l’adresse profil@serveur depuis laquelle vous voulez vous abonner + acct: Entrez l’adresse profil@serveur depuis laquelle vous voulez effectuer cette action missing_resource: L’URL de redirection n’a pas pu être trouvée no_account_html: Vous n’avez pas de compte ? Vous pouvez <a href='%{sign_up_path}' target='_blank'>vous inscrire ici</a> proceed: Confirmer l’abonnement prompt: 'Vous allez suivre :' - reason_html: "<strong>Pourquoi cette étape est-elle nécessaire?</strong> <code>%{instance}</code> pourrait ne pas être le serveur où vous vous êtes inscrit, et nous devons donc vous rediriger vers votre serveur de base en premier." + reason_html: "<strong>Pourquoi cette étape est-elle nécessaire?</strong> <code>%{instance}</code> pourrait ne pas être le serveur sur lequel vous vous êtes inscrit·e, et nous devons donc vous rediriger vers votre serveur de base en premier." remote_interaction: favourite: proceed: Confirmer l’ajout aux favoris @@ -816,10 +946,6 @@ fr: reply: proceed: Confirmer la réponse prompt: 'Vous souhaitez répondre à ce pouet :' - remote_unfollow: - error: Erreur - title: Titre - unfollowed: Non-suivi scheduled_statuses: over_daily_limit: Vous avez dépassé la limite de %{limit} pouets planifiés pour ce jour over_total_limit: Vous avez dépassé la limite de %{limit} pouets planifiés @@ -829,7 +955,7 @@ fr: browser: Navigateur browsers: alipay: Alipay - blackberry: Blackberry + blackberry: BlackBerry chrome: Chrome edge: Microsoft Edge electron: Electron @@ -843,7 +969,7 @@ fr: phantom_js: PhantomJS qq: QQ Browser safari: Safari - uc_browser: UCBrowser + uc_browser: UC Browser weibo: Weibo current_session: Session courante description: "%{browser} sur %{platform}" @@ -852,8 +978,8 @@ fr: platforms: adobe_air: Adobe Air android: Android - blackberry: Blackberry - chrome_os: ChromeOS + blackberry: BlackBerry + chrome_os: Chrome OS firefox_os: Firefox OS ios: iOS linux: Linux @@ -868,14 +994,15 @@ fr: settings: account: Compte account_settings: Paramètres du compte + aliases: Alias du compte appearance: Apparence authorized_apps: Applications autorisées back: Retour vers Mastodon - delete: Suppression de compte + delete: Suppression du compte development: Développement edit_profile: Modifier le profil export: Export de données - featured_tags: Hashtags mis en avant + featured_tags: Hashtags recommandés identity_proofs: Preuves d’identité import: Import de données import_and_export: Import et export @@ -885,6 +1012,8 @@ fr: profile: Profil relationships: Abonnements et abonné·e·s two_factor_authentication: Identification à deux facteurs + spam_check: + spam_detected: Ceci est un rapport automatisé. Des pollupostages ont été détectés. statuses: attached: description: 'Attaché : %{attached}' @@ -901,13 +1030,16 @@ fr: other: 'contient les hashtags désactivés : %{tags}' language_detection: Détecter automatiquement la langue open_in_web: Ouvrir sur le web - over_character_limit: limite de caractères dépassée de %{max} caractères + over_character_limit: limite de %{max} caractères dépassée pin_errors: limit: Vous avez déjà épinglé le nombre maximum de pouets ownership: Vous ne pouvez pas épingler un statut ne vous appartenant pas private: Les statuts non-publics ne peuvent pas être épinglés reblog: Un partage ne peut pas être épinglé poll: + total_people: + one: "%{count} personne" + other: "%{count} personnes" total_votes: one: "%{count} vote" other: "%{count} votes" @@ -926,6 +1058,8 @@ fr: pinned: Pouet épinglé reblogged: a partagé sensitive_content: Contenu sensible + tags: + does_not_match_previous_name: ne correspond pas au nom précédent terms: body_html: | <h2>Politique de confidentialité</h2> @@ -1005,7 +1139,7 @@ fr: <p>Dans le cas où nous déciderions de changer notre politique de confidentialité, nous posterons les modifications sur cette page.</p> - <p>Ce document est publié sous lincence CC-BY-SA. Il a été mis à jours pour la dernière fois le 7 mars 2018.</p> + <p>Ce document est publié sous licence CC-BY-SA. Il a été mis à jour pour la dernière fois le 7 mars 2018.</p> <p>Originellement adapté de la <a href="https://github.com/discourse/discourse">politique de confidentialité de Discourse</a>.</p> title: "%{instance} Conditions d’utilisation et politique de confidentialité" @@ -1043,7 +1177,9 @@ fr: disable: Lorsque votre compte est gelé, les données de votre compte demeurent intactes, mais vous ne pouvez effectuer aucune action jusqu’à ce qu’il soit débloqué. silence: Lorsque votre compte est limité, seulement les utilisateurs qui vous suivent déjà verront vos pouets sur ce serveur, et vous pourriez être exclu de plusieurs listes publiques. Néanmoins, d’autres utilisateurs peuvent vous suivre manuellement. suspend: Votre compte a été suspendu, et tous vos pouets et vos fichiers multimédia téléversés ont été supprimés irréversiblement de ce serveur, et des serveurs où vous aviez des abonné⋅e⋅s. + get_in_touch: Vous pouvez répondre à cette adresse pour entrer en contact avec l’équipe de %{instance}. review_server_policies: Passer en revue les politiques du serveur + statuses: 'Spécialement, pour :' subject: disable: Votre compte %{acct} a été gelé none: Avertissement pour %{acct} diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 79ef993e2..64f479ec7 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1,40 +1,48 @@ --- gl: about: - about_hashtag_html: Estas son mensaxes públicas etiquetadas con <strong>#%{hashtag}</strong>. Pode interactuar con elas si ten unha conta nalgures do fediverso. + about_hashtag_html: Estas son mensaxes públicas etiquetadas con <strong>#%{hashtag}</strong>. Podes interactuar con elas se tes unha conta nalgures do fediverso. about_mastodon_html: Mastodon é unha rede social que se basea en protocolos web abertos e libres, software de código aberto. É descentralizada como o correo electrónico. - about_this: Sobre - active_count_after: activo + about_this: Acerca de + active_count_after: activas active_footnote: Usuarias Activas no Mes (UAM) administered_by: 'Administrada por:' api: API apps: Apps móbiles - apps_platforms: Utilice Mastodon desde iOS, Android e outras plataformas - browse_directory: Navegue no directorio de perfís e filtre por intereses + apps_platforms: Utiliza Mastodon desde iOS, Android e outras plataformas + browse_directory: Olla o directorio de perfís e filtra por intereses + browse_local_posts: Ler en directo o fluxo das publicacións públicas deste servidor browse_public_posts: Vexa o fluxo de comentarios públicos en Mastodon contact: Contacto contact_missing: Non establecido contact_unavailable: N/A - discover_users: Descubra usuarias + discover_users: Descubre usuarias documentation: Documentación - extended_description_html: | - <h3>Un bo lugar para regras</h3> - <p>A descrición extendida aínda non se proporcionou.</p> - federation_hint_html: Con unha conta en %{instance} poderá seguir a outras persoas en calquera dos servidores Mastodon e incluso máis. - generic_description: "%{domain} é un servidor na rede" - get_apps: Probe cunha app móbil + federation_hint_html: Con unha conta en %{instance} poderás seguir a outras persoas en calquera dos servidores Mastodon e incluso máis. + get_apps: Proba cunha app móbil hosted_on: Mastodon aloxado en %{domain} - learn_more: Coñeza máis + instance_actor_flash: 'Esta conta é un actor virtual utilizado para representar ao servidor e non a unha usuaria individual. Utilízase para propósitos de federación e non debería estar bloqueada a menos que queira bloquear a toda a instancia, en tal caso debería utilizar o bloqueo do dominio. + +' + learn_more: Saber máis privacy_policy: Política de intimidade - see_whats_happening: Mire o que acontece + see_whats_happening: Mira o que acontece server_stats: 'Estatísticas:' source_code: Código fonte status_count_after: one: estado other: estados status_count_before: Que publicaron - tagline: Siga as amizades e faga outras novas + tagline: Conecta coas amizades e fai outras novas terms: Termos do servizo + unavailable_content: Contido non dispoñible + unavailable_content_description: + domain: Servidor + reason: 'Razón:' + rejecting_media: Os ficheiros de medios de este servidor non se procesarán e non se mostrarán miniaturas, precisando solicitarse manualmente ao outro servidor. + silenced: As publicacións desde este servidor non se mostrarán en ningún lugar excepto no Inicio se segues ao autor. + suspended: Non poderás seguir a ninguén desde este servidor, e non se procesarán nin se gardarán datos que procedan del, e non se intercambiarán datos. + unavailable_content_html: Normalmente Mastodon permíteche ver contidos de outros servidores do fediverso e interactuar coas súas usuarias. Estas son as excepcións que se estableceron en este servidor particular. user_count_after: one: usuaria other: usuarias @@ -42,6 +50,8 @@ gl: what_is_mastodon: Qué é Mastodon? accounts: choices_html: 'Eleccións de %{name}:' + endorsements_hint: Desde a interface web pode recomendar xente que segue, e aparecerán aquí. + featured_tags_hint: Pode destacar determinadas etiquetas que se mostrarán aquí. follow: Seguir followers: one: Seguidora @@ -53,6 +63,7 @@ gl: media: Medios moved_html: "%{name} mudouse a %{new_profile_link}:" network_hidden: A información non está dispoñible + never_active: Nunca nothing_here: Nada por aquí! people_followed_by: Personas que segue %{name} people_who_follow: Personas que seguen a %{name} @@ -165,6 +176,7 @@ gl: user: Usuaria salmon_url: URL Salmon search: Busca + search_same_ip: Outros usuarios co mesmo IP shared_inbox_url: URL da caixa de entrada compartida show: created_reports: Informes creados @@ -183,6 +195,7 @@ gl: username: Nome de usuaria warn: Aviso web: Web + whitelisted: Lista branca action_logs: actions: assigned_to_self_report: "%{name} asignou o informe %{target} a ela misma" @@ -218,19 +231,24 @@ gl: deleted_status: "(estado eliminado)" title: Rexistro de auditoría custom_emojis: + assign_category: Asignar categoría by_domain: Dominio copied_msg: Creouse con éxito unha copia local dos emoji copy: Copiar copy_failed_msg: Non se puido facer copia local de ese emoji + create_new_category: Crear nova categoría created_msg: Creou o emoji con satisfactoriamente! delete: Eliminar destroyed_msg: Emojo destruído satisfactoriamente! disable: Deshabilitar + disabled: Desactivado disabled_msg: Deshabilitouse correctamente ese emoji emoji: Emoji enable: Habilitar + enabled: Activado enabled_msg: Habilitouse correctamente ese emoji image_hint: PNG ate 50KB + list: A lista listed: Listado new: title: Engadir novo emoji persoalizado @@ -238,11 +256,14 @@ gl: shortcode: Código corto shortcode_hint: Cando menos 2 caracteres, só caracteres alfanuméricos e subliñados title: Emojis persoalizados + uncategorized: Sen categorizar + unlist: Sacar da lista unlisted: Non listado update_failed_msg: Non se puido actualizar ese emoji updated_msg: Actualizouse correctamente o emoji! upload: Subir dashboard: + authorized_fetch_mode: Modo de obtención autorizado backlog: traballos respaldados config: Axustes feature_deletions: Borrado de contas @@ -250,10 +271,13 @@ gl: feature_profile_directory: Directorio do perfil feature_registrations: Rexistros feature_relay: Repetidores de federación + feature_spam_check: Anti-spam feature_timeline_preview: Vista previa da TL features: Características hidden_service: Federación con servizos ocultos open_reports: informes abertos + pending_tags: etiquetas agardando revisión + pending_users: usuarias agardando revisión recent_users: Usuarias recentes search: Busca de texto completo single_user_mode: Modo de usuario individual @@ -265,11 +289,18 @@ gl: week_interactions: interaccións en esta semana week_users_active: activas estas semana week_users_new: usuarias esta semana + whitelist_mode: Modo de lista branca + domain_allows: + add_new: Dominio en lista branca + created_msg: Engadeu o dominio a lista branca + destroyed_msg: Quitou o dominio da lista branca + undo: Eliminar da lista branca domain_blocks: add_new: Engadir novo bloqueo de dominio created_msg: Estase a procesar o bloqueo do dominio destroyed_msg: Desfixose a acción de bloqueo de dominio domain: Dominio + edit: Editar bloqueo de dominio existing_domain_block_html: Xa estableceu límites estrictos para %{name}, precisa <a href="%{unblock_url}">desbloqueala</a> primeiro. new: create: Crear bloque @@ -280,6 +311,10 @@ gl: silence: Silenciar suspend: Suspender title: Novo bloqueo de dominio + private_comment: Comentario privado + private_comment_hint: Comentar entre moderadores para uso interno as limitacións de este dominio. + public_comment: Comentario público + public_comment_hint: Comentar sobre as limitacións de este dominio para o interese público, se o aviso da lista de dominios limitados está activado. reject_media: Rexeitar ficheiros de medios reject_media_hint: Eliminar ficheiros de medios almacenados localmente e rexeita descargalos no futuro. Irrelevante para as suspensións reject_reports: Rexeitar informes @@ -299,6 +334,7 @@ gl: title: Desfacer o bloqueo de dominio para %{domain} undo: Desfacer undo: Desfacer bloqueo de dominio + view: Ver dominios bloqueados email_domain_blocks: add_new: Engadir novo created_msg: Engadeuse correctamente o dominio de email a lista negra @@ -322,6 +358,8 @@ gl: all: Todo limited: Limitado title: Moderación + private_comment: Comentario privado + public_comment: Comentario público title: Federación total_blocked_by_us: Bloqueado por nós total_followed_by_them: Seguidas por eles @@ -351,6 +389,7 @@ gl: pending: Agardando polo permiso do repetidor save_and_enable: Gardar e activar setup: Configurar a conexión ao repetidor + signatures_not_enabled: Os repetidores non funcionarán correctamente se o modo seguro ou lista branca están activados status: Estado title: Repetidores report_notes: @@ -399,6 +438,16 @@ gl: custom_css: desc_html: Modificar o aspecto con CSS cargado en cada páxina title: CSS persoalizado + default_noindex: + desc_html: Aféctalle a todas as usuarias que non cambiaron os axustes elas mesmas + title: Por omisión exclúe as usuarias do indexado por servidores de busca + domain_blocks: + all: Para todas + disabled: Para ninguén + title: Mostrar dominios bloqueados + users: Para usuarias locais conectadas + domain_blocks_rationale: + title: Mostrar razón hero: desc_html: Mostrado na portada. Recoméndase 600x100px como mínimo. Se non se establece, mostrará a imaxe por omisión do servidor title: Imáxe Heróe @@ -449,6 +498,9 @@ gl: desc_html: Pode escribir a súa propia política de intimidade, termos de servizo ou aclaracións legais. Pode utilizar etiquetas HTML title: Termos de servizo persoalizados site_title: Nome do servidor + spam_check_enabled: + desc_html: Mastodon pode silenciar e informar automáticamente sobre contas baseándose en medidas como detectar contas que envían mensaxes non solicitadas de xeito repetido. Podería haber falsos positivos. + title: Anti-spam thumbnail: desc_html: Utilizado para vistas previsas vía OpenGraph e API. Recoméndase 1200x630px title: Icona do servidor @@ -456,12 +508,19 @@ gl: desc_html: Mostrar liña de tempo pública na páxina de inicio title: vista previa da liña temporal title: Axustes do sitio + trendable_by_default: + desc_html: Afecta a etiquetas que non foron rexeitadas previamente + title: Permite as etiquetas ser tendencia sen revisión previa + trends: + desc_html: Mostrar públicamente etiquetas previamente revisadas que actualmente son tendencia + title: Etiquetas Tendencia statuses: back_to_account: Voltar a páxina da conta batch: delete: Eliminar nsfw_off: Marcar como non sensible nsfw_on: Marcar como sensible + deleted: Eliminado failed_to_execute: Fallou a execución media: title: Medios @@ -469,21 +528,24 @@ gl: no_status_selected: Non se cambiou ningún estado xa que ningún foi seleccionado title: Estados da conta with_media: con medios - subscriptions: - callback_url: URL de chamada - confirmed: Confirmado - expires_in: Caduca en - last_delivery: Última entrega - title: WebSub - topic: Asunto tags: - accounts: Contas - hidden: Ocultas - hide: Ocultar do directorio + accounts_today: Usos únicos hoxe + accounts_week: Usos únicos esta semana + breakdown: Consumo do uso diario por fonte + context: Contexto + directory: No directorio + in_directory: "%{count} no directorio" + last_active: Úlimo activo + most_popular: Máis popular + most_recent: Máis recente name: Etiqueta + review: Estado de revisión + reviewed: Revisado title: Etiquetas - unhide: Mostrar en directorio - visible: Visible + trending_right_now: Agora como Tendencia + unique_uses_today: "%{count} publicando hoxe" + unreviewed: Sen revisar + updated_msg: Actualizaronse os axustes das etiquetas title: Administración warning_presets: add_new: Engadir novo @@ -493,18 +555,29 @@ gl: title: Xestionar avisos preestablecidos admin_mailer: new_pending_account: - body: Abaixo están os detalles da conta. Pode aprobar ou rexeitar esta solicitude. + body: Abaixo están os detalles da conta. Podes aprobar ou rexeitar esta solicitude. subject: Hai unha conta nova para revisar en %{instance} (%{username}) new_report: body: "%{reporter} informou sobre %{target}" body_remote: Alguén desde %{domain} informou sobre %{target} subject: Novo informe sobre %{instance} (#%{id}) + new_trending_tag: + body: 'A etiqueta #%{name} é tendencia hoxe, pero non foi previamente revisada. Non se mostrará publicamente a menos que vostede o permita, ou garde o formulario para facer que non se lle consulte de novo.' + subject: Unha nova etiqueta que revisar en %{instance} (#%{name}) + aliases: + add_new: Crear alcume + created_msg: Creou un novo alcume correctamente. Pode iniciar o movemento desde a conta antiga. + deleted_msg: Eliminou correctamente o alcume. Xa non será posible mover desde esa conta a esta. + hint_html: Se queres mudarte desde outra conta a esta nova, aquí podes crear un alcume, que é requerido antes de poder proceder a mover os seguidores da conta antiga a esta nova. Esta acción por si mesma é <strong>inocua e reversible</strong>. <strong>A migración da conta iníciase desde a conta antiga</strong>. + remove: Desligar alcume appearance: advanced_web_interface: Interface web avanzada advanced_web_interface_hint: Se quere utilizar todo o ancho da súa pantalla, a interface web avanzada permítelle configurar diferentes columnas para ver tanta información como desexe. Inicio, notificacións, liña temporal federada, calquera número de listas e etiquetas. animations_and_accessibility: Animacións e accesibilidade confirmation_dialogs: Diálogos de confirmación + discovery: Descubrir sensitive_content: Contido sensible + toot_layout: Disposición do toot application_mailer: notification_preferences: Cambiar os axustes de correo-e salutation: "%{name}," @@ -524,9 +597,13 @@ gl: apply_for_account: Solicite un convite change_password: Contrasinal checkbox_agreement_html: Acepto as <a href="%{rules_path}" target="_blank">regras do servidor</a> e os <a href="%{terms_path}" target="_blank">termos do servizo</a> - confirm_email: Confirmar correo-e + checkbox_agreement_without_rules_html: Acepto os <a href="%{terms_path}" target="_blank">termos do servizo</a> delete_account: Eliminar conta delete_account_html: Se desexa eliminar a súa conta, pode <a href="%{path}">facelo aquí</a>. Pediráselle confirmación. + description: + prefix_invited_by_user: "@%{name} convídate a que te unas a este servidor Mastodon!" + prefix_sign_up: Rexístrate agora en Mastodon! + suffix: Ao abrir unha conta, poderás seguir a xente, actualizacións das publicacións e intercambiar mensaxes coas usuarias de calquera servidor de Mastodon e moito máis! didnt_get_confirmation: Non recibeu as instruccións de confirmación? forgot_password: Esqueceu o contrasinal? invalid_reset_password_token: O testemuño para restablecer o contrasinal non é válido ou caducou. Por favor solicite un novo. @@ -544,6 +621,16 @@ gl: reset_password: Restablecer contrasinal security: Seguridade set_new_password: Establecer novo contrasinal + setup: + email_below_hint_html: Se o enderezo inferior non é correcto, pode cambialo aquí e recibir un correo de confirmación. + email_settings_hint_html: Enviouse un correo de confirmación a %{email}. Se o enderezo non é correcto pode cambialo nos axustes da conta. + title: Axustes + status: + account_status: Estado da conta + confirming: Agardando a confirmación do correo enviado. + functional: A súa conta está totalmente operativa. + pending: A túa aplicación está pendente de revisión. Poderíanos levar algún tempo. Recibirás un correo se a aplicación está aprobada. + redirecting_to: A túa conta está inactiva porque está redirixida a %{acct}. trouble_logging_in: Problemas para conectar? authorize_follow: already_following: Xa está a seguir esta conta @@ -556,6 +643,11 @@ gl: return: Mostrar o perfil da usuaria web: Ir a web title: Seguir %{acct} + challenge: + confirm: Continuar + hint_html: "<strong>Nota:</strong> Non che pediremos o contrasinal na seguinte hora." + invalid_password: Contrasinal incorrecto + prompt: Confirma o contrasinal para continuar datetime: distance_in_words: about_x_hours: "%{count}h" @@ -571,26 +663,33 @@ gl: x_months: "%{count}mes" x_seconds: "%{count}s" deletes: - bad_password_msg: Bo intento, hackers! Contrasinal incorrecto + challenge_not_passed: A información introducida non é correcta confirm_password: Introduza o seu contrasinal para verificar a súa identidade - description_html: Esto eliminará de xeito <strong>permanente e irreversible</strong> o contido da súa conta e será desactivada. O seu nome de usuaria permanecerá reservado para evitar futuras confusións de identidades. + confirm_username: Introduce o nome de usuaria para confirmar o procedemento proceed: Eliminar conta success_msg: A súa conta eliminouse correctamente - warning_html: Só se garantiza a eliminación de contido de este servidor. O contido que foi compartido con outras instancias é probable que deixe rastros. O servidores fora de liña e servidores que se desuscribiron das súas actualizacións non actualizarán as súas bases de datos. - warning_title: Dispoñibilidade do contido espallado + warning: + before: 'Antes de seguir, por favor lé estas notas con atención:' + caches: O contido almacenado en outros servidores podería persistir + data_removal: As túas publicacións e outros datos serán permanentemente borrados + email_change_html: Podes <a href="%{path}">cambiar o enderezo de correo</a> sen eliminar a conta + email_contact_html: Se non o recibes, podes escribir a <a href="mailto:%{email}">%{email}</a> pedindo axuda + email_reconfirmation_html: Se non recibes o correo de confirmación, podes <a href="%{path}">solicitalo de novo</a> + irreversible: Non poderás restaurar ou reactivar a conta + more_details_html: Para máis detalles, mira a <a href="%{terms_path}">política de intimidade</a>. + username_available: O nome de usuario estará dispoñible novamente + username_unavailable: O nome de usuario non estará dispoñible directories: directory: Directorio de perfil - enabled: Vostede está actualmente na lista do directorio. - enabled_but_waiting: Vostede optou por ser incluída no directorio, mais por agora non ten o número mínimo de seguidoras (%{min_followers}) para aparecer. - explanation: Descubra usuarias según o seu interese + explanation: Descubre usuarias según o teu interese explore_mastodon: Explorar %{title} - how_to_enable: Actualmente non solicitou ser incluída no directorio, pode facelo abaixo. Utilice etiquetas no texto de biografía para ser incluída baixo etiquetas específicas! - people: - one: "%{count} persoa" - other: "%{count} persoas" + domain_validator: + invalid_domain: non é un nome de dominio válido errors: + '400': A solicitude que enviou non é válida ou ten formato incorrecto. '403': Non ten permiso para ver esta páxina. '404': A páxina que está a buscar non está aquí. + '406': Esta páxina non está dispoñible no formato solicitado. '410': A páxina que estaba a buscar xa non existe. '422': content: Fallou a verificación de seguridade. Está bloqueando as cookies? @@ -599,6 +698,7 @@ gl: '500': content: Sentímolo, pero algo do noso lado falloou. title: Esta páxina non é correcta + '503': A páxina non se puido servir debido a un fallo temporal no servidor. noscript_html: Para utilizar a aplicación web de Mastodon debe habilitar JavaScript. De xeito alternativo, intente unha das <a href="%{apps_path}">apps nativas</a> para Mastodon da súa plataforma. existing_username_validator: not_found: non se atopou unha usuaria local con ese alcume @@ -622,6 +722,7 @@ gl: add_new: Engadir novo errors: limit: Xa acadou o número máximo de etiquetas + hint_html: "<strong>¿Qué son as etiquetas destacadas?</strong> Móstranse destacadas no seu perfil público e permítenlle a outras persoas ver os seus toots públicos nos que as utilizou. Son unha ferramenta moi útil para facer seguimento de traballos creativos e proxectos a longo prazo." filters: contexts: home: Liña temporal inicial @@ -642,10 +743,12 @@ gl: developers: Desenvolvedoras more: Máis… resources: Recursos + trending_now: Tendencia agora generic: all: Todo changes_saved_msg: Cambios gardados correctamente!! copy: Copiar + no_batch_actions_available: Non hai accións en pila dispoñibles nesta páxina order_by: Ordenar por save_changes: Gardar cambios validation_errors: @@ -662,7 +765,7 @@ gl: keybase: invalid_token: Os testemuños Keybase son hashes de firma e deben ter 66 caracteres hexadecimais verification_failed: Keybase non recoñece este testemuño como firma da usuaria de Keybase %{kb_username}. Por favor inténteo desde Keybase. - wrong_user: Non se puido crear a proba para %{proving} mentras está conectada como %{current}. Conéctese como %{proving} e inténteo de novo. + wrong_user: Non se puido crear a proba para %{proving} mentras está conectada como %{current}. Conéctate como %{proving} e inténtao de novo. explanation_html: Aquí pódese conectar criptográficamente as suas outras identidades, como a un perfil Keybase. Esto permitelle a outras persoas enviarlle mensaxes cifradas e confiar no contido que vostede lle envía. i_am_html: Eu son %{username} en %{service}. identity: Identidade @@ -717,9 +820,34 @@ gl: too_many: Non pode anexar máis de 4 ficheiros migrations: acct: nomeusuaria@dominio da nova conta - currently_redirecting: 'O seu perfil está listo para redirixir a:' - proceed: Gardar - updated_msg: O axuste de migración da conta actualizouse correctamente! + cancel: Cancelar a redirección + cancel_explanation: Ao cancelar a redirección reactivarás a conta actual, pero non poderás traer de volta os seguidores que se moveron a esa conta. + cancelled_msg: Cancelouse a redirección. + errors: + already_moved: é a mesma conta a que xa te moveches + missing_also_known_as: non está referenciando hacia esta conta + move_to_self: non pode ser a conta actual + not_found: non se atopou + on_cooldown: Estas no período de calma + followers_count: Seguidoras no momento da migración + incoming_migrations: Movendo desde unha conta diferente + incoming_migrations_html: Para migrar doutra conta cara esta, primeiro debes <a href="%{path}">crear un alcume da conta</a>. + moved_msg: A túa conta está redirixindo agora a %{acct} e os teus seguidores movéronse alí. + not_redirecting: Neste momento a túa conta non está redirixindo cara a ningunha outra. + on_cooldown: Migraches recentemente a conta. Esta función estará dispoñible de novo en %{count} días. + past_migrations: Migracións pasadas + proceed_with_move: Mover seguidoras + redirecting_to: A conta está redirixindo cara a %{acct}. + set_redirect: Establecer redirección + warning: + backreference_required: Tes que configurar primeiro a nova conta para referenciar hacia esta + before: 'Antes de seguir, por favor lé estas notas con atención:' + cooldown: Tras a migración existe un período de calma durante o cal non poderás voltar a migrar de novo + disabled_account: Tras o cambio a túa conta actual non será totalmente usable, pero terás acceso a exportar os datos e tamén a reactivación. + followers: Esta acción moverá todas as túas seguidoras desde a conta actual a nova conta + only_redirect_html: De xeito alternativo, podes <a href="%{path}">simplemente por unha redirección no perfil</a>. + other_data: Non se moverán outros datos de xeito automático + redirect: O perfil da túa conta actualizarase cun aviso de redirección e será excluído das buscas moderation: title: Moderación notification_mailer: @@ -816,10 +944,6 @@ gl: reply: proceed: Respostar prompt: 'Vostede quere respostar a este toot:' - remote_unfollow: - error: Fallo - title: Título - unfollowed: Deixou de seguir scheduled_statuses: over_daily_limit: Excedeu o límite de %{limit} toots programados para ese día over_total_limit: Excedeu o límite de %{limit} toots programados @@ -862,12 +986,13 @@ gl: windows: Windows windows_mobile: Windows Mobile windows_phone: Windows Phone - revoke: Revocar - revoke_success: A sesión revocouse con éxito + revoke: Revogar + revoke_success: A sesión revogouse con éxito title: Sesións settings: account: Conta account_settings: Axustes da conta + aliases: Alcumes da conta appearance: Aparencia authorized_apps: Apps autorizadas back: Voltar a Mastodon @@ -884,7 +1009,9 @@ gl: preferences: Preferencias profile: Perfil relationships: Seguindo e seguidoras - two_factor_authentication: Validar Doble Factor + two_factor_authentication: Validar Dobre Factor + spam_check: + spam_detected: Esto é un informe automatizado. Detectouse Spam. statuses: attached: description: 'Axenado: %{attached}' @@ -908,6 +1035,9 @@ gl: private: As mensaxes non-públicas non poden ser fixadas reblog: Non se poden fixar as mensaxes promovidas poll: + total_people: + one: "%{count} persoa" + other: "%{count} persoas" total_votes: one: "%{count} voto" other: "%{count} votos" @@ -926,6 +1056,8 @@ gl: pinned: Mensaxe fixada reblogged: promovida sensitive_content: Contido sensible + tags: + does_not_match_previous_name: non concorda co nome anterior terms: body_html: | <h2>Intimidade</h2> @@ -1019,11 +1151,11 @@ gl: month: "%b %Y" two_factor_authentication: code_hint: Introducir o código xerado polo seu aplicativo de autenticación para confirmar - description_html: Si habilita a <strong>autenticación de doble factor</strong>, a conexión pediralle estar en posesión do seu teléfono, que xerará testemuños para poder entrar. + description_html: Se activa a <strong>autenticación de dobre factor</strong>, a conexión pediralle estar en posesión do seu teléfono, que creará testemuños para poder entrar. disable: Deshabilitar enable: Habilitar - enabled: A autenticación de doble-factor está habilitada - enabled_success: Habilitouse con éxito a autenticación de doble-factor + enabled: A autenticación de dobre-factor está activada + enabled_success: Activouse con éxito a autenticación de dobre-factor generate_recovery_codes: Xerar códigos de recuperación instructions_html: "<strong>Escanee este código QR en Google Authenticator ou aplicativo TOTP similar no seu teléfono</strong>. Desde agora, este aplicativo xerará testemuños que vostede deberá introducir ao conectarse." lost_recovery_codes: Os códigos de recuperación permítenlle recuperar o acceso a súa conta si perde o teléfono. Si perde os códigos de recuperación, pode restauralos aquí. Os seus códigos de recuperación anteriores serán invalidados. @@ -1043,7 +1175,9 @@ gl: disable: Cando a súa conta está conxelada, os datos permanecen intactos, pero non pode levar a fin accións ate que se desbloquea. silence: Mentras a conta está limitada, só a xente que actualmente a segue verá os seus toots en este servidor, e vostede podería estar excluída de varias listas públicas. Porén, outras persoas poderíana seguila de xeito manual. suspend: A súa conta foi suspendida, e todos os seus toots e medios subidos foron eliminados de este servidor de xeito irreversible, e dos servidores onde tivese seguidoras. + get_in_touch: Pode responder a este correo para contactar coa administración de %{instance}. review_server_policies: Revisar políticas do servidor + statuses: 'En concreto, para:' subject: disable: A súa conta %{acct} foi conxelada none: Aviso para %{acct} @@ -1066,7 +1200,7 @@ gl: review_preferences_step: Lembre establecer as preferencias, tales como qué correos-e lle querería recibir, ou o nivel de intimidade por omisión para as súas mensaxes. Se non lle molestan as imaxes con movemento, pode escoller que os GIF se reproduzan automáticamente. subject: Benvida a Mastodon tip_federated_timeline: A liña temporal federada é unha visión ampla da rede Mastodon. Pero so inclúe xente a que segue xente que vostede segue, así que non é completa. - tip_following: Por omisión vostede segue ao Admin do seu servidor. Para atopar máis xente interesante, mire nas liñas temporais local e federada. + tip_following: Por omisión segues a Admin no teu servidor. Para atopar máis xente interesante, mira nas liñas temporais local e federada. tip_local_timeline: A liña temporal local é unha ollada xeral sobre a xente en %{instance}. Son as súas veciñas máis próximas! tip_mobile_webapp: Si o navegador móbil lle ofrece engadir Mastodon a pantalla de inicio, pode recibir notificacións push. En moitos aspectos comportarase como un aplicativo nativo! tips: Consellos @@ -1074,7 +1208,7 @@ gl: users: follow_limit_reached: Non pode seguir a máis de %{limit} persoas invalid_email: O enderezo de correo non é válido - invalid_otp_token: Código de doble-factor non válido + invalid_otp_token: O código do segundo factor non é válido otp_lost_help_html: Si perde o acceso a ambos, pode contactar con %{email} seamless_external_login: Está conectado a través de un servizo externo, polo que os axustes de contrasinal e correo-e non están dispoñibles. signed_in_as: 'Rexistrada como:' diff --git a/config/locales/he.yml b/config/locales/he.yml index 5e50f738d..50db571dc 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -9,10 +9,6 @@ he: contact_missing: ללא הגדרה contact_unavailable: לא רלוונטי/חסר documentation: תיעוד - extended_description_html: | - <h3>מקום טוב לכללים</h3> - <p>התיאור המורחב טרם הוגדר.</p> - generic_description: "%{domain} הוא שרת אחד בתוך הרשת" hosted_on: מסטודון שיושב בכתובת %{domain} learn_more: מידע נוסף source_code: קוד מקור @@ -177,13 +173,6 @@ he: title: תיאור אתר מורחב site_title: כותרת האתר title: הגדרות אתר - subscriptions: - callback_url: קישורית Callback - confirmed: מאושר - expires_in: פג תוקף ב- - last_delivery: משלוח אחרון - title: מנוי WebSub - topic: נושא title: ניהול application_mailer: settings: 'שינוי הגדרות דוא"ל: %{link}' @@ -219,14 +208,17 @@ he: x_months: "%{count} חודשים" x_seconds: "%{count} שניות" errors: + '400': The request you submitted was invalid or malformed. '403': חסרות לך הרשאות לצפיה בעמוד זה. '404': הדף המבוקש לא קיים. + '406': This page is not available in the requested format. '410': הדף המבוקש כבר לא קיים. '422': content: בדיקת אבטחה נכשלה. החסמת עוגיותיך מפנינו? title: בדיקת בטיחות נכשלה '429': הוחנק '500': + '503': The page could not be served due to a temporary server failure. exports: blocks: רשימת חסימות follows: רשימת נעקבים diff --git a/config/locales/hi.yml b/config/locales/hi.yml index 0967ef424..401d07cf6 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -1 +1,32 @@ -{} +--- +hi: + about: + about_this: विवरण + active_count_after: सक्रिय + contact: संपर्क + learn_more: अधिक जानें + privacy_policy: गोपनीयता नीति + status_count_after: + one: स्थिति + other: स्थितियां + unavailable_content_description: + domain: सर्वर + reason: कारण + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Throttled + '500': + '503': The page could not be served due to a temporary server failure. + invites: + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day diff --git a/config/locales/hr.yml b/config/locales/hr.yml index a4fe62055..67d83525b 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -44,12 +44,15 @@ hr: x_months: "%{count}mj" x_seconds: "%{count}sek" errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': '429': Throttled '500': + '503': The page could not be served due to a temporary server failure. exports: blocks: Blokirao si follows: Slijediš diff --git a/config/locales/hu.yml b/config/locales/hu.yml index cd6a1692f..7f519c820 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1,89 +1,171 @@ --- hu: about: - about_hashtag_html: Ezek a <strong>#%{hashtag}</strong> címkével ellátott publikus tülkök. Reagálhatsz rájuk, ha már van felhasználói fiókod valahol a föderációban. - about_mastodon_html: Mastodon egy <em>szabad, nyílt forráskódú</em> szociális hálózati kiszolgálo. Egy <em>központosítatlan</em> alternatíva a kereskedelmi platformokra, elkerüli a kommunikációd monopolizációját veszélyét. Bárki futtathatja a Mastodon-t és részt vehet a <em>szociális hálózatban</em>. + about_hashtag_html: Ezek a <strong>#%{hashtag}</strong> hashtag-gel ellátott publikus tülkök. Reagálhatsz rájuk, ha már van felhasználói fiókod valahol a föderációban. + about_mastodon_html: A Mastodon egy szabad webes protokollokat használó, nyílt forráskódú szociális háló. Decentralizált, akár az e-mail. about_this: Rólunk + active_count_after: aktív + active_footnote: Havonta aktív felhasználók + administered_by: 'Adminisztrátor:' + api: API + apps: Mobil appok + apps_platforms: Használd a Mastodont iOS-ről, Androidról vagy más platformról + browse_directory: Böngészd a profilokat és szűrj érdeklődési körre + browse_local_posts: 'Nézz bele a szerver publikus, élő adatfolyamába + +' + browse_public_posts: Nézz bele a Mastodon élő adatfolyamába contact: Kapcsolat contact_missing: Nincs megadva - extended_description_html: | - <h3>Ez itt a szabályzat helye</h3> - <p>Még nem állítottál be bővebb leírást.</p> - generic_description: "%{domain} csak egy a számtalan szerver közül a föderációban" - hosted_on: "%{domain} Mastodon instancia" + contact_unavailable: N/A + discover_users: Találj meg másokat + documentation: Dokumentáció + federation_hint_html: Egy %{instance} fiókkal bármely más Mastodon szerveren vagy a föderációban lévő felhasználót követni tudsz. + get_apps: Próbálj ki egy mobil appot + hosted_on: "%{domain} Mastodon szerver" + instance_actor_flash: 'Ez a fiók egy virtuális szereplő, mely magát a szervert reprezentálja, nem egy felhasználót. Ez a föderáció támogatására készült, ezért nem szabad blokkolni, hacsak egy teljes szervert nem akarsz kitiltani, amire persze a domain blokkolása jobb megoldás. + +' learn_more: Tudj meg többet + privacy_policy: Adatvédelmi szabályzat + see_whats_happening: Nézd, mi történik + server_stats: 'Szerver statisztika:' source_code: Forráskód + status_count_after: + one: tülköt küldött + other: tülköt küldött status_count_before: eddig + tagline: Kövess barátokat és találj újakat + terms: Felhasználási feltételek + unavailable_content: A tartalom nem elérhető + unavailable_content_description: + domain: Szerver + reason: 'Indok:' + rejecting_media: A szerverről származó médiafájlok nem kerülnek feldolgozásra, és nem jelennek meg miniatűrök, amelyek kézi átkattintást igényelnek a másik szerverre. + silenced: A szerver hozzászólásai csak a saját hírvonalon jelennek meg, ha követik a szerzőt. + suspended: Nem fogsz tudni követni senkit ebből a szerverből, és nem kerül feldolgozásra vagy tárolásra a tőle származó adat, és nincs adatcsere. + unavailable_content_html: A Mastodon általában mindenféle tartalomcserét és interakciót lehetővé tesz bármelyik szerverrel a fediverzumban. Ezek azok a kivételek, melyek a mi szerverünkön érvényben vannak. + user_count_after: + one: felhasználónk + other: felhasználónk user_count_before: Összesen what_is_mastodon: Mi a Mastodon? accounts: + choices_html: "%{name} választásai:" + endorsements_hint: A webes felületen jóváhagyhatod a követett embereket, és itt jelennek meg. + featured_tags_hint: Szerepeltethetsz bizonyos hashtageket, melyek itt jelennek majd meg. follow: Követés - following: Követed őket + followers: + one: Követő + other: Követő + following: Követett + joined: Csatlakozott %{date} + last_active: utoljára aktív + link_verified_on: A link tulajdonosát %{date} -n ellenőriztük media: Média moved_html: "%{name} ide költözött: %{new_profile_link}" + network_hidden: Ez az információ nem elérhető + never_active: Soha nothing_here: Nincs itt semmi! - people_followed_by: "%{name} követett személyei" + people_followed_by: "%{name} követettjei" people_who_follow: "%{name} követői" - posts_with_replies: Tülkök és válaszok - reserved_username: Ez egy már lefoglalt felhasználónév + pin_errors: + following: Ehhez szükséges, hogy kövesd már a felhasználót + posts: + one: Tülk + other: Tülk + posts_tab_heading: Tülkölés + posts_with_replies: Tülkölés válaszokkal + reserved_username: Ez már foglalt felhasználónév roles: admin: Adminisztrátor + bot: Bot moderator: Moderátor - unfollow: Követés abbahagyása + unavailable: Nincs ilyen profil + unfollow: Követés vége admin: + account_actions: + action: Művelet végrehajtása + title: "%{acct} moderálása" account_moderation_notes: - create: Új bejegyzés + create: Új moderációs bejegyzés created_msg: Moderációs bejegyzés létrehozva! delete: Törlés destroyed_msg: Moderációs bejegyzés törölve! accounts: + approve: Jóváhagyás + approve_all: Mindet jóváhagy are_you_sure: Biztos vagy benne? + avatar: Profilkép + by_domain: Domain + change_email: + changed_msg: A fiókhoz tartozó e-mailt megváltoztattuk! + current_email: Jelenlegi e-mail + label: E-mail megváltoztatása + new_email: Új e-mail + submit: E-mail megváltoztatása + title: "%{username} felhasználó e-mail változás" confirm: Megerősítés confirmed: Megerősítve - confirming: Megerősítve + confirming: Megerősítés alatt + deleted: Törölve demote: Lefokozás disable: Kikapcsolás disable_two_factor_authentication: Kétlépcsős azonosítás kikapcsolása disabled: Kikapcsolva display_name: Megjelenített név + domain: Domain edit: Szerkesztés email: E-mail email_status: E-mail állapot - enable: Engedélyezés - enabled: Engedélyezve + enable: Bekapcsolás + enabled: Bekapcsolva feed_url: Hírcsatorna URL - followers: Követők - followers_url: Követők URL - follows: Követettek + followers: Követő + followers_url: Követő URL + follows: Követett + header: Fejléc inbox_url: Beérkezett üzenetek URL + invited_by: Meghívta + ip: IP + joined: Csatlakozott location: all: Összes local: Helyi remote: Távoli title: Hely - login_status: Bejelentkezve + login_status: Bejelentkezési állapot media_attachments: Média-csatolmányok memorialize: Emlékállítás moderation: + active: Aktív all: Összes + pending: Függőben silenced: Némítva suspended: Felfüggesztve title: Moderáció moderation_notes: Moderációs bejegyzés most_recent_activity: Legutóbbi tevékenységek most_recent_ip: Legutóbbi IP-cím + no_account_selected: Nem változott meg egy fiók sem, mert semmi sem volt kiválasztva + no_limits_imposed: Nincs korlátozás not_subscribed: Nincs feliratkozás outbox_url: Kimenő üzenetek URL - perform_full_suspension: Teljes felfüggesztés + pending: Engedélyezés alatt + perform_full_suspension: Felfüggesztés profile_url: Profil URL promote: Előléptetés protocol: Protokoll public: Nyilvános push_subscription_expires: A PuSH feliratkozás elévül redownload: Profilkép frissítése + reject: Elutasítás + reject_all: Összes elutasítása + remove_avatar: Profilkép eltávolítása + remove_header: Fejléc törlése resend_confirmation: already_confirmed: Ezt a felhasználót már megerősítették - send: Küldd újra a megerősítő email-t + send: Küldd újra a megerősítő e-mailt success: A megerősítő e-mail sikeresen elküldve! reset: Visszaállítás reset_password: Jelszó visszaállítása @@ -94,84 +176,158 @@ hu: moderator: Moderátor staff: Stáb user: Felhasználó + salmon_url: Salmon URL search: Keresés - shared_inbox_url: Bejövő üzenetek URL keresése + search_same_ip: Más felhasználók ugyanezzel az IP-vel + shared_inbox_url: Megosztott bejövő üzenetek URL show: - created_reports: Ezen fiók által létrehozott jelentések - targeted_reports: Jelentések ezzel a fiókkal kapcsolatban + created_reports: Létrehozott jelentések + targeted_reports: Jelentések ezzel kapcsolatban silence: Némítás + silenced: Némított statuses: Tülkök subscribe: Feliratkozás + suspended: Felfüggesztett + time_in_queue: Várakozás a sorban %{time} title: Fiókok + unconfirmed_email: Nem megerősített e-mail undo_silenced: Némítás visszavonása undo_suspension: Felfüggesztés visszavonása unsubscribe: Leiratkozás username: Felhasználónév - web: Weboldal + warn: Figyelmeztetés + web: Web + whitelisted: Engedélyező-listán action_logs: actions: + assigned_to_self_report: "%{name} a %{target} bejelentést magához rendelte" + change_email_user: "%{name} megváltoztatta %{target} felhasználó e-mail címét" confirm_user: "%{name} megerősítette e-mail címét: %{target}" - create_custom_emoji: "%{name} új hangulatjelet töltött fel: %{target}" + create_account_warning: "%{name} figyelmeztetést küldött %{target} felhasználónak" + create_custom_emoji: "%{name} új emojit töltött fel: %{target}" + create_domain_allow: "%{name} engedélyező listára vette %{target} domaint" create_domain_block: "%{name} letiltotta az alábbi domaint: %{target}" create_email_domain_block: "%{name} feketelistára tette az alábbi e-mail domaint: %{target}" demote_user: "%{name} lefokozta az alábbi felhasználót: %{target}" + destroy_custom_emoji: "%{name} törölte az emojit: %{target}" + destroy_domain_allow: "%{name} leszedte %{target} domaint az engedélyező listáról" destroy_domain_block: "%{name} engedélyezte az alábbi domaint: %{target}" destroy_email_domain_block: "%{name} fehérlistára tette az alábbi e-mail domaint: %{target}" destroy_status: "%{name} eltávolította az alábbi felhasználó tülkjét: %{target}" disable_2fa_user: "%{name} kikapcsolta a kétlépcsős azonosítást %{target} felhasználó fiókján" - disable_custom_emoji: "%{name} letiltotta az alábbi hangulatjelet: %{target}" + disable_custom_emoji: "%{name} letiltotta az alábbi emojit: %{target}" disable_user: "%{name} letiltotta az alábbi felhasználó bejelentkezését: %{target}" - enable_custom_emoji: "%{name} engedélyezte az alábbi hangulatjelet: %{target}" + enable_custom_emoji: "%{name} engedélyezte az alábbi emojit: %{target}" enable_user: "%{name} engedélyezte az alábbi felhasználó bejelentkezését: %{target}" memorialize_account: "%{name} emléket állított az alábbi felhasználónak: %{target}" promote_user: "%{name} előléptette az alábbi felhasználót: %{target}" + remove_avatar_user: "%{name} törölte %{target} profilképét" + reopen_report: "%{name} újranyitotta a bejelentést: %{target}" reset_password_user: "%{name} visszaállította az alábbi felhasználó jelszavát: %{target}" - resolve_report: "%{name} mellőzte az alábbi jelentést: %{target}" + resolve_report: "%{name} megoldotta alábbi bejelentést: %{target}" silence_account: "%{name} lenémította %{target} felhasználói fiókját" suspend_account: "%{name} felfüggesztette %{target} felhasználói fiókját" + unassigned_report: "%{name} törölte a %{target} bejelentés hozzárendelését" unsilence_account: "%{name} feloldotta a némítást %{target} felhasználói fiókján" unsuspend_account: "%{name} feloldotta %{target} felhasználói fiókjának felfüggesztését" - update_custom_emoji: "%{name} frissítette az alábbi hangulatjelet: %{target}" + update_custom_emoji: "%{name} frissítette az alábbi emojit: %{target}" update_status: "%{name} frissítette %{target} felhasználó tülkjét" + deleted_status: "(törölt tülk)" title: Audit napló custom_emojis: - copied_msg: Sikeresen létrehoztuk a hangulatjel helyi másolatát + assign_category: Kategóriák + by_domain: Domain + copied_msg: Sikeresen létrehoztuk az emoji helyi másolatát copy: Másolás - copy_failed_msg: Hangulatjel helyi másolatának létrehozása sikertelen - created_msg: Hangulatjel létrehozva! + copy_failed_msg: Emoji helyi másolatának létrehozása sikertelen + create_new_category: Új kategória létrehozása + created_msg: Emoji létrehozva! delete: Törlés - destroyed_msg: A hangulatjel törlése sikeres! + destroyed_msg: Emoji törlése sikeres! disable: Letiltás - disabled_msg: Hangulatjel letiltva - emoji: Hangulatjel + disabled: Letiltva + disabled_msg: Emoji letiltva + emoji: Emoji enable: Engedélyezés - enabled_msg: Hangulatjel engedélyezve + enabled: Engedélyezve + enabled_msg: Emoji engedélyezve image_hint: PNG (maximális méret 50KB) + list: Listázás listed: Listázva new: - title: Új egyedi hangulatjel hozzáadása + title: Új egyedi emoji hozzáadása overwrite: Felülírás + shortcode: Rövidítés shortcode_hint: Legalább két karakter, csak betűk, számok és alsóvonás - title: Egyedi hangulatjelek + title: Egyedi emojik + uncategorized: Nem kategorizált + unlist: Elrejtés a listáról unlisted: Nincs listázva - update_failed_msg: Nem sikerült frissíteni a hangulatjelet - updated_msg: Hangulatjel sikeresen frissítve! + update_failed_msg: Nem sikerült frissíteni az emojit + updated_msg: Emoji sikeresen frissítve! upload: Feltöltés + dashboard: + authorized_fetch_mode: Áttöltő üzemmód engedélyezve + backlog: hátralévő feladatok + config: Beállítások + feature_deletions: Fióktörlések + feature_invites: Meghívó linkek + feature_profile_directory: Profil adatbázis + feature_registrations: Regisztráció + feature_relay: Föderációs relé + feature_spam_check: Anti-spam + feature_timeline_preview: Idővonal betekintő + features: Funkciók + hidden_service: Föderáció rejtett szolgáltatásokkal + open_reports: nyitott bejelentések + pending_tags: hashtag engedélyezésre vár + pending_users: felhasználó engedélyezésre vár + recent_users: Legutóbbi felhasználók + search: Keresés teljes szövegben + single_user_mode: Egyfelhasználós mód + software: Szoftver + space: Tárhely használat + title: Műszerfal + total_users: felhasználó összesen + trends: Trendek + week_interactions: interakció ezen a héten + week_users_active: aktív ezen a héten + week_users_new: felhasználó ezen a héten + whitelist_mode: Engedélyező-lista mód + domain_allows: + add_new: Domain engedélyezése + created_msg: A domain rákerült az engedélyező-listára + destroyed_msg: A domain lekerült az engedélyező-listáról + undo: Eltávolítás az engedélyező-listáról domain_blocks: - add_new: Új hozzáadása + add_new: Új tiltott domain hozzáadása created_msg: A domain-tiltás feldolgozása folyamatban destroyed_msg: A domain tiltása feloldva + domain: Domain + edit: Domain tiltás szerkesztése + existing_domain_block_html: A %{name} domainen már szorosabb korlátokat állítottál be, először <a href="%{unblock_url}">oldd fel a tiltást</a>. new: create: Tiltás létrehozása - hint: A domain-tiltás nem gátolja meg az új fiókok hozzáadását az abatbázishoz, de visszamenőlegesen és automatikusan aktivál bizonyos moderációs szabályokat ezen fiókok esetében. + hint: A domain tiltása nem gátolja meg az új fiókok hozzáadását az abatbázishoz, de visszamenőlegesen és automatikusan aktivál bizonyos moderációs szabályokat ezen fiókok esetében. severity: desc_html: A <strong>Némítás</strong> elrejti az adott felhasználó tülkjeit mindenki elől, aki nem követi az adott felhasználót. A <strong>Felfüggesztés</strong> eltávolítja az adott felhasználó által létrehozott minden tartalmat, ide értve a médiafájlokat és a fiókadatokat is. Válaszd az <strong>Egyik sem</strong> opciót, ha csupán a médiafájlokat szeretnéd elutasítani. noop: Egyik sem silence: Némítás suspend: Felfüggesztés - title: Új domain-tiltás + title: Új domain tiltása + private_comment: Privát megjegyzés + private_comment_hint: Megjegyzés domain tiltásával kapcsolatban belső használatra, a többi moderátor részére. + public_comment: Nyilvános megjegyzés + public_comment_hint: Megjegyzés domain tiltásával kapcsolatban a nyilvánosság számára, ha a domainek tiltólistája egyébként látható. reject_media: Médiafájlok elutasítása reject_media_hint: Eltávolítja a helyben tárolt médiafájlokat és a továbbiakban letiltja az új médiafájlok letöltését. Felfüggesztett fiókok esetében irreleváns opció + reject_reports: Bejelentések elutasítása + reject_reports_hint: Erről a domainről származó minden bejelentés elutasítása. Felfüggesztett fiókok esetén irreleváns opció + rejecting_media: médiafájlok elutasítása + rejecting_reports: bejelentések elutasítása + severity: + silence: némítva + suspend: felfüggesztve show: affected_accounts: one: Összesen egy fiók érintett az adatbázisban @@ -181,51 +337,136 @@ hu: suspend: Minden felhasználó felfüggesztésének feloldása ezen a domainen title: "%{domain} domain tiltásának feloldása" undo: Visszavonás - undo: Visszavonás + undo: Domain tiltásának visszavonása + view: Domain tiltásának megtekintése email_domain_blocks: add_new: Új hozzáadása created_msg: E-mail domain sikeresen hozzáadva a feketelistához delete: Törlés destroyed_msg: E-mail domain sikeresen eltávolítva a feketelistáról + domain: Domain new: create: Domain hozzáadása title: Új e-mail feketelista bejegyzés title: E-mail feketelista + followers: + back_to_account: Vissza a fiókhoz + title: "%{acct} követői" instances: - title: Nyilvántartott instanciák + by_domain: Domain + delivery_available: Kézbesítés elérhető + known_accounts: + one: "%{count} ismert fiók" + other: "%{count} ismert fiók" + moderation: + all: Mind + limited: Korlátozott + title: Moderáció + private_comment: Privát megjegyzés + public_comment: Nyilvános megjegyzés + title: Föderáció + total_blocked_by_us: Általunk letiltott + total_followed_by_them: Általuk követett + total_followed_by_us: Általunk követett + total_reported: Bejelentés róluk + total_storage: Média csatolmány invites: + deactivate_all: Összes deaktiválása filter: all: Összes available: Elérhető expired: Elévült title: Szűrő title: Meghívások + pending_accounts: + title: Függőben lévő fiókok (%{count}) + relays: + add_new: Új relé hozzáadása + delete: Törlés + description_html: A <strong>föderációs relé</strong> egy olyan köztes szerver, mely nagy mennyiségű publikus tülköt cserél az erre feliratkozó vagy publikáló szerverek között. <strong>Ezzel segíthet kis és közepes szervereknek tartalmat megtalálni a föderációban</strong>, mely egyébként csak akkor válna lehetővé, ha a saját felhasználóink más szervereken lévő fiókokat követnének. + disable: Kikapcsolás + disabled: Kikapcsolva + enable: Bekapcsolás + enable_hint: Ha bekapcsolod, a szerver minden nyilvános tülkre feliratkozik ezen a relén, valamint az összes nyilvános tülköt elküldi ennek. + enabled: Bekapcsolva + inbox_url: Relé URL + pending: Várakozás a relé jóváhagyására + save_and_enable: Mentés és engedélyezés + setup: Relé kapcsolat felállítása + signatures_not_enabled: A relék nem fognak jól működni, amíg a biztonságos mód vagy az engedélyező listás mód aktív + status: Állapot + title: Relék + report_notes: + created_msg: Bejelentési feljegyzés létrehozva! + destroyed_msg: Bejelentési feljegyzés törölve! reports: + account: + note: feljegyzés + report: bejelentés action_taken_by: 'Kezelte:' are_you_sure: Biztos vagy benne? + assign_to_self: Magamhoz rendelés + assigned: Hozzárendelt moderátor comment: none: Egyik sem + created_at: Jelentve mark_as_resolved: Megjelölés megoldottként + mark_as_unresolved: Megjelölés megoldatlanként + notes: + create: Feljegyzés hozzáadása + create_and_resolve: Megoldás feljegyzéssel + create_and_unresolve: Újranyitás feljegyzéssel + delete: Törlés + placeholder: Jegyezd le, mi tettünk az ügy érdekében, vagy bármilyen változást... + reopen: Bejelentés újranyitása report: "#%{id} számú jelentés" reported_account: Bejelentett fiók reported_by: 'Jelentette:' resolved: Megoldott + resolved_msg: A bejelentést sikeresen megoldottuk! status: Állapot - title: Jelentések + title: Bejelentések + unassign: Hozzárendelés törlése unresolved: Megoldatlan + updated_at: Frissítve settings: activity_api_enabled: desc_html: Helyi tülkök, aktív felhasználók és új regisztrációk száma heti bontásban title: Felhasználói aktivitás összesített statisztikájának publikussá tétele bootstrap_timeline_accounts: - desc_html: Az egyes felhasználónevek vesszővel elválasztva. Csak helyi és aktivált fiókok esetében működik. Üresen (alapértelmezettként) minden helyi adminisztrátorra érvényes. + desc_html: Az egyes felhasználóneveket vesszővel válaszd el! Csak helyi és aktivált fiókok esetében működik. Üresen (alapértelmezettként) minden helyi adminisztrátorra érvényes. title: Alapértelmezett követések új felhasználók esetében contact_information: email: Kapcsolattartói e-mail cím username: Kapcsolattartó felhasználóneve + custom_css: + desc_html: Változtasd meg a kinézetet ebben a CSS-ben, mely minden oldalon be fog töltődni + title: Egyedi CSS + default_noindex: + desc_html: Olyan felhasználókat érinti, akik nem módosították ezt a beállítást + title: Alapértelmezésként ne indexeljék a keresők a felhasználóinkat + domain_blocks: + all: Mindenkinek + disabled: Senkinek + title: Domain tiltások megjelenitése + users: Bejelentkezett helyi felhasználóknak + domain_blocks_rationale: + title: Mutasd meg az indokolást + hero: + desc_html: A kezdőoldalon látszik. Legalább 600x100px méret javasolt. Ha nincs beállítva, a szerver bélyegképet használjuk + title: Hősi kép + mascot: + desc_html: Több oldalon is látszik. Legalább 293×205px méret javasolt. Ha nincs beállítva, az alapértelmezett kabalát használjuk + title: Kabala kép peers_api_enabled: - desc_html: Domainek, amelyekkel ez az instancia kapcsolatban áll - title: Instanciák listájának közzététele, melyekkel ez a szerver kapcsolatban áll + desc_html: Domainek, amelyekkel ez a szerver kapcsolatban áll + title: Szerverek listájának közzététele, melyekkel ez a szerver kapcsolatban áll + preview_sensitive_media: + desc_html: Más weboldalakon linkelt tartalmaink előnézetében mindenképp benne lesz egy bélyegkép még akkor is, ha a médiát szenzitívnek jelölték meg + title: Szenzitív média mutatása OpenGraph előnézetben + profile_directory: + desc_html: Lehetővé teszi, hogy a felhasználóinkat megtalálják + title: Profil adatbázis engedélyezése registrations: closed_message: desc_html: Ez az üzenet jelenik meg a főoldalon, ha a regisztráció nem engedélyezett. HTML-tageket is használhatsz @@ -234,52 +475,116 @@ hu: desc_html: Engedélyezed a felhasználóknak, hogy töröljék fiókjukat title: Fiók törlésének engedélyezése min_invite_role: - disabled: Senkinek + disabled: Senki title: Meghívások engedélyezése + registrations_mode: + modes: + approved: A regisztráció engedélyhez kötött + none: Senki sem regisztrálhat + open: Bárki regisztrálhat + title: Regisztrációs mód + show_known_fediverse_at_about_page: + desc_html: Ha aktív, az előnézetben minden tülk megjelenik a velünk kapcsolatban álló szerverekről, egyébként csak helyi tülköket mutatunk. + title: Mutassuk az általunk ismert föderációt az idővonal előnézetben show_staff_badge: desc_html: Stáb-jelvény megjelenítése a felhasználó oldalán title: Stáb-jelvény megjelenítése site_description: - desc_html: 'Rövid bemutatkozás a főoldalon és a meta fejlécekben. Az alábbi HTML-tageket használhatod: <code><a></code> és <code><em></code>.' - title: Az instancia bemutatása + desc_html: Rövid bemutatkozás a főoldalon és a meta fejlécekben. Írd le, mi teszi ezt a szervert különlegessé! Használhatod a <code><a></code> és <code><em></code> HTML tageket. + title: A szerver bemutatása site_description_extended: - desc_html: Ide teheted például a közösségi és egyéb szabályzatot, útmutatókat és mindent, ami egyedivé teszi instanciádat. HTML-tageket is használhatsz + desc_html: Ide teheted például a közösségi és egyéb szabályzatot, útmutatókat és mindent, ami egyedivé teszi szerveredet. HTML-tageket is használhatsz title: További egyedi információ + site_short_description: + desc_html: Oldalsávban és meta tag-ekben jelenik meg. Írd le, mi teszi ezt a szervert különlegessé egyetlen bekezdésben. + title: Rövid leírás site_terms: desc_html: Megírhatod saját adatkezelési szabályzatodat, felhasználási feltételeidet vagy más hasonló jellegű dokumentumodat. HTML-tageket is használhatsz title: Egyedi felhasználási feltételek - site_title: Az instancia neve + site_title: A szerver neve + spam_check_enabled: + desc_html: A Mastodon automatikusan elnémíthatja és bejelentheti azokat a fiókokat, akik rendszeresen kéretlen üzeneteket küldenek. Persze lehetnek tévedések is. + title: Automatikus anti-spam thumbnail: - desc_html: Az OpenGraph és API előnézetekhez használjuk. Ajánlott mérete 1200x560 pixel - title: Az instancia bélyegképe + desc_html: OpenGraph-os és API-s előnézetekben használjuk. Ajánlott mérete 1200x630 pixel + title: A szerver bélyegképe timeline_preview: - desc_html: Publikus időfolyam megjelenítése a főoldalon - title: Időfolyam előnézete - title: Oldal beállításai + desc_html: Nyilvános idővonal megjelenítése a főoldalon + title: Idővonal előnézete + title: Webhely beállításai + trendable_by_default: + desc_html: Azokra a hashtagekere hat, melyet előzőleg nem tiltottak le + title: Hashtagek trendiségének engedélyezése előzetes ellenőrzés nélkül + trends: + desc_html: Előzetesen engedélyezett és most trendi hashtagek nyilvános mutatása + title: Trendi hashtagek statuses: back_to_account: Vissza a fiók oldalára batch: delete: Törlés - nsfw_off: Szenzitív tartalom kikapcsolva - nsfw_on: Szenzitív tartalom bekapcsolva + nsfw_off: Szenzitív megjelölés törlése + nsfw_on: Megjelölés szenzitív tartalomként + deleted: Törölve failed_to_execute: Végrehajtás sikertelen media: title: Média no_media: Nem található médiafájl + no_status_selected: Nem változtattunk meg semmit, mert semmi sem volt kiválasztva title: Felhasználó tülkjei with_media: Médiafájlokkal - subscriptions: - confirmed: Megerősítve - expires_in: Elévül - last_delivery: Utolsó kézbesítés - topic: Téma + tags: + accounts_today: Egyedi használat a mai napon + accounts_week: Egyedi használat ezen a héten + breakdown: Mai használat bontása forrás szerint + context: Környezet + directory: Katalógusban + in_directory: "%{count} a katalógusban" + last_active: Utoljára aktív + most_popular: Legnépszerűbb + most_recent: Legutóbbi + name: Címke + review: Engedélyezés állapota + reviewed: Engedélyezett + title: Hashtagek + trending_right_now: Most trendi + unique_uses_today: "%{count} mai tülkölés" + unreviewed: Még nem engedélyezett + updated_msg: A hashtag beállításokat sikeresen frissítettük title: Karbantartás + warning_presets: + add_new: Új hozzáadása + delete: Törlés + edit: Szerkesztés + edit_preset: Figyelmeztetés szerkesztése + title: Figyelmeztetések admin_mailer: + new_pending_account: + body: Az új fiók részletesen alább látható. Ezt a jelentkezést engedélyezheted vagy elutasíthatod. + subject: Új fiók (%{username}) engedélyezésre vár a %{instance} szerveren new_report: body: "%{reporter} jelentette: %{target}" - subject: 'Új jelentés az alábbi instancián: %{instance} (#%{id})' + body_remote: Valaki a %{domain} domainről jelentette %{target} + subject: 'Új jelentés az alábbi szerveren: %{instance} (#%{id})' + new_trending_tag: + body: 'A #%{name} hashtag trendi a mai napon, de még nem engedélyeztük eddig. Nem mutatjuk meg nyilvánosan, hacsak nem engedélyezed. Csak simán mentsd az űrlapot, ha soha többé nem akarsz erről a hashtagről hallani.' + subject: Új hashtag (#%{name}) engedélyezésre vár a %{instance} szerveren + aliases: + add_new: Alias készítése + created_msg: Elkészült az új aliasod. Most már elkezdheted a költöztetést a régi fiókból. + deleted_msg: Sikeresen eltávolítottad az aliast. A fiókról erre a fiókra való áttérés már nem lehetséges. + hint_html: Ha másik fiókról kívánsz átlépni erre a fiókra, itt létrehozhatsz egy aliast, amelyre szükség van, mielőtt folytathatod a követők áthelyezését a régi fiókból erre. Ez az áthelyezés önmagában <strong>ártalmatlan és visszafordítható</strong> folyamat. <strong>A fiók áttelepítését a régi fiókból indul el. </strong> + remove: Alias szétkapcsolása + appearance: + advanced_web_interface: Haladó webes felület + advanced_web_interface_hint: 'Ha szeretnéd, a teljes képernyőszélességet felhasználhatod. A haladó webes felülettel különböző oszlopokat állíthatsz be, hogy egyszerre annyi infót láthass, amennyit csak akarsz: Saját idővonal, értesítések, föderációs idővonal, bármennyi lista vagy hashtag.' + animations_and_accessibility: Animáció és akadálymentesítés + confirmation_dialogs: Megerősítő párbeszédablakok + discovery: Felfedezés + sensitive_content: Szenzitív tartalom + toot_layout: Tülkök megjelenése application_mailer: notification_preferences: E-mail beállítások módosítása + salutation: "%{name}!" settings: 'E-mail beállítások módosítása: %{link}' view: 'Megtekintés:' view_profile: Profil megtekintése @@ -293,8 +598,16 @@ hu: warning: Ez érzékeny adat. Soha ne oszd meg másokkal! your_token: Hozzáférési kulcsod auth: + apply_for_account: Meghívó kérése + change_password: Jelszó + checkbox_agreement_html: Egyetértek a <a href="%{rules_path}" target="_blank">szerver szabályaival</a> és a <a href="%{terms_path}" target="_blank">felhasználási feltételekkel</a> + checkbox_agreement_without_rules_html: Egyetértek a <a href="%{terms_path}" target="_blank">felhasználási feltételekkel</a> delete_account: Felhasználói fiók törlése delete_account_html: Felhasználói fiókod törléséhez <a href="%{path}">kattints ide</a>. A rendszer újbóli megerősítést fog kérni. + description: + prefix_invited_by_user: "@%{name} meghív téged, hogy csatlakozz erre a Mastodon szerverre!" + prefix_sign_up: Regisztrláj még ma a Mastodonra! + suffix: Egy fiókkal követhetsz másokat, tülkölhetsz, eszmét cserélhetsz más Mastodon szerverek felhasználóival! didnt_get_confirmation: Nem kaptad meg a megerősítési lépéseket? forgot_password: Elfelejtetted a jelszavad? invalid_reset_password_token: A jelszó-visszaállítási kulcs nem megfelelő vagy lejárt. Kérlek generálj egy újat. @@ -302,12 +615,29 @@ hu: logout: Kijelentkezés migrate_account: Felhasználói fiók költöztetése migrate_account_html: Ha szeretnéd átirányítani ezt a fiókodat egy másikra, a beállításokat <a href="%{path}">itt találod meg</a>. + or_log_in_with: Vagy jelentkezz be ezzel + providers: + cas: CAS + saml: SAML register: Regisztráció + registration_closed: "%{instance} nem fogad új tagokat" resend_confirmation: Megerősítési lépések újraküldése reset_password: Jelszó visszaállítása security: Biztonság set_new_password: Új jelszó beállítása + setup: + email_below_hint_html: Ha az alábbi e-mail cím nem megfelelő, itt megváltoztathatod és kaphatsz egy új igazoló e-mailt. + email_settings_hint_html: A visszaigazoló e-mailt elküldtük ide %{email}. Ha az e-mail cím nem megfelelő, megváltoztathatod a fiókod beállításainál. + title: Beállítás + status: + account_status: Fiók állapota + confirming: Várakozás a visszaigazolásra. + functional: A fiókod teljesen működőképes. + pending: A jelentkezésed engedélyezésre vár. Ez eltarthat egy ideig. Kapsz egy e-mailt, ha az elbírálás megtörtént. + redirecting_to: A fiókod inaktív, mert jelenleg ide %{acct} van átirányítva. + trouble_logging_in: Problémád van a bejelentkezéssel? authorize_follow: + already_following: Már követed ezt a felhasználót error: Hiba történt a távoli felhasználó keresésekor follow: Követés follow_request: 'Engedélyt kértél az alábbi felhasználó követésére:' @@ -317,6 +647,11 @@ hu: return: Visszatérés a felhasználó profiloldalára web: Megtekintés a weben title: "%{acct} követése" + challenge: + confirm: Folytatás + hint_html: "<strong>Hasznos:</strong> Nem fogjuk megint a jelszavadat kérdezni a következő órában." + invalid_password: Érvénytelen jelszó + prompt: Add meg a jelszót a folytatáshoz datetime: distance_in_words: about_x_hours: "%{count}ó" @@ -332,44 +667,132 @@ hu: x_months: "%{count}h" x_seconds: "%{count}mp" deletes: - bad_password_msg: Haha, hekker! Helytelen jelszó + challenge_not_passed: A beírt információ helytelen confirm_password: Személyazonosságod megerősítéséhez írd be a jelenlegi jelszavad - description_html: Ezzel <strong>véglegesen és visszafordíthatatlanul</strong> törlöd minden tartalmadat és deaktiválod a fiókodat. A felhasználónevedet megtartjuk, hogy megakadályozzuk a neveddel történő jövőbeni visszaélések lehetőségét. + confirm_username: Add meg a felhasználói nevedet a jóváhagyáshoz proceed: Felhasználói fiók törlése - success_msg: Felhasználói fiókod sikeresen törölve lett - warning_html: Csak azt tudjuk garantálni, hogy az általad létrehozott tartalmat erről az instanciáról töröljük. Ha egyes tartalmaidat sokan megosztották, valószínűleg marad nyomuk a megosztások miatt. Nam fogjuk tudni frissíteni azon instanciák adatbázisát, amelyek nem kapcsolódnak a föderációhoz vagy amelyek leiratkoztak a tülkjeidről. - warning_title: Szórt tartalmak elérése + success_msg: Felhasználói fiókod sikeresen töröltük + warning: + before: 'Mielőtt továbbmész, kérlek olvasd el ezt alaposan:' + caches: Más szerverek által cache-elt tartalmak még megmaradhatnak + data_removal: A tülkjeid és minden más adatod véglegesen törlődni fog + email_change_html: <a href="%{path}">Megváltoztathatod az email címed</a> a fiókod törlése nélkül + email_contact_html: Ha még mindig nem érkezik meg, emailezhetsz ide <a href="mailto:%{email}">%{email}</a> segítségért + email_reconfirmation_html: Ha nem kaptad meg a megerősítő emailt, <a href="%{path}">itt újrakérheted</a> + irreversible: Nem fogod tudni visszaállítani vagy újraaktiválni a fiókodat + more_details_html: A részletekért nézd meg az <a href="%{terms_path}">adatvédelmi szabályzatot</a>. + username_available: A fiókod ismét elérhetővé válik + username_unavailable: A fiókod elérhetetlen marad + directories: + directory: Profilok + explanation: Találj másokra érdeklődésük alapján + explore_mastodon: "%{title} felfedezése" + domain_validator: + invalid_domain: nem egy valódi domain név errors: + '400': A küldött kérés érvénytelen vagy hibás volt. '403': Nincs jogosultságod az oldal megtekintéséhez. '404': Az általad keresett oldal nem található. + '406': Ez az oldal a kért formátumban nem áll rendelkezésre. '410': Az általad keresett oldal már nem létezik. '422': content: Megerősítés sikertelen. Nem tiltottad le esetleg a sütiket? title: Megerősítés sikertelen - '429': Kampec + '429': Korlátozva '500': content: Sajnáljuk, valami hiba történt a mi oldalunkon. title: Az oldal nem megfelelő - noscript_html: A Mastodon webalkalmazás használatához engedélyezned kell a JavaScriptet. A másik megoldás, hogy kipróbálod az egyik, a platformodnak megfelelő <a href="%{apps_path}">alkalmazást</a>. + '503': Az oldalt nem tudjuk megmutatni átmeneti szerverprobléma miatt. + noscript_html: A Mastodon webalkalmazás használatához engedélyezned kell a JavaScriptet. A másik megoldás, hogy kipróbálsz egy platformodnak megfelelő <a href="%{apps_path}">alkalmazást</a>. + existing_username_validator: + not_found: ezzel a névvel nem találtunk helyi felhasználót + not_found_multiple: nem találtuk %{usernames} felhasználó(ka)t exports: + archive_takeout: + date: Dátum + download: Archív letöltése + hint_html: Itt kérhető egy archív az összes <strong>feltöltött tülködről és médiádról</strong>. Az exportált adatok ActivityPub formátumban lesznek, melyet bármilyen szabványos program tud olvasni. 7 naponként kérhetsz ilyen archívot. + in_progress: Archív összeállítása... + request: Archív kérése + size: Méret blocks: Tiltólistádon + csv: CSV + domain_blocks: Tiltott domainjeid follows: Követettjeid + lists: Listáid mutes: Némításaid storage: Médiatároló + featured_tags: + add_new: Új hozzáadása + errors: + limit: Már kiemelted a maximálisan engedélyezett számú hashtaget + hint_html: "<strong>Mik a kiemelt hashtagek?</strong> Ezek állandóan megjelennek a nyilvános profilodon és lehetővé teszik, hogy mások kifejezetten az ezekhez tartozó tülkjeidet böngésszék. Jó eszköz ez kreatív munkák vagy hosszútávú projektek nyomonkövetésére." + filters: + contexts: + home: Saját idővonal + notifications: Értesítések + public: Nyilvános idővonalak + thread: Beszélgetések + edit: + title: Szűrő szerkesztése + errors: + invalid_context: A megadott kontextus hamis vagy hiányzik + invalid_irreversible: Visszafordíthatatlan szűrést csak saját idővonalon vagy értesítéseken lehet végezni + index: + delete: Törlés + title: Szűrők + new: + title: Új szűrő hozzáadása + footer: + developers: Fejlesztőknek + more: Többet… + resources: Segédanyagok + trending_now: Most trendi generic: - changes_saved_msg: Változások sikeresen elmentve! + all: Mind + changes_saved_msg: A változásokat elmentettük! + copy: Másolás + no_batch_actions_available: Ezen az oldalon nem elérhetőek kötegelt műveletek + order_by: Rendezés save_changes: Változások mentése validation_errors: one: Valami nincs rendjén! Kérlek tekintsd meg a hibát alant other: Valami nincs rendjén! Kérlek tekintsd meg a %{count} darab hibát alant + html_validator: + invalid_markup: 'hibás HTML leíró: %{error}' + identity_proofs: + active: Aktív + authorize: Igen, engedélyezés + authorize_connection_prompt: Engedélyezed ezt a kriptografikus kapcsolatot? + errors: + failed: A kriptografikus kapcsolat sikertelen. Próbáld inkább innen %{provider}. + keybase: + invalid_token: A Keybase tokenek hashelt aláírások és pont 66 hexa karakterből állnak + verification_failed: A Keybase ezt a tokent nem ismerte fel a %{kb_username} Keybase felhasználó aláírásaként. Próbáld újra Keybase-ből. + wrong_user: Nem tudjuk tanúsítani %{proving} felhasználót amíg %{current} felhasználóként vagy bejelentkezve. Jelentkezz be %{proving} felhasználóként és próbáld újra. + explanation_html: Itt más személyazonosságaiddal tudsz kriptografikus kapcsolatot létesíteni, pl. Keybase profillal. Így mások titkosított üzenetet küldhetnek neked, valamint megbízhatnak az általad küldött tartalomban is. + i_am_html: "%{username} vagyok %{service} szerveren." + identity: Személyazonosság + inactive: Inaktív + publicize_checkbox: 'És ezt tülköld ki:' + publicize_toot: 'Tanúsítva! %{username} vagyok %{service}: %{url} szerveren' + status: Ellenőrzés állapota + view_proof: Tanúsítás megtekintése imports: - preface: Itt importálhatod egy másik instanciáról lementett adataidat, például követettjeid és letiltott felhasználóid listáját. + modes: + merge: Összefésülés + merge_long: Megtartjuk a meglévő bejegyzéseket és hozzávesszük az újakat + overwrite: Felülírás + overwrite_long: Lecseréljük újakkal a jelenlegi bejegyzéseket + preface: Itt importálhatod egy másik szerverről lementett adataidat, például követettjeid és letiltott felhasználóid listáját. success: Adataidat sikeresen feltöltöttük és feldolgozásukat megkezdtük types: blocking: Letiltottak listája + domain_blocking: Letiltott domainek listája following: Követettjeid listája muting: Némított felhasználók listája upload: Feltöltés + in_memoriam_html: In Memoriam. invites: delete: Visszavonás expired: Lejárt @@ -378,15 +801,16 @@ hu: '21600': 6 óra '3600': 1 óra '43200': 12 óra - '604800': 1 week + '604800': 1 hét '86400': 1 nap expires_in_prompt: Soha generate: Generálás + invited_by: 'Téged meghívott:' max_uses: one: 1 felhasználás other: "%{count} felhasználás" max_uses_prompt: Nincs korlát - prompt: Az itt generált linkek megosztásával hívhatod meg ismerőseidet az instanciára + prompt: Az itt generált linkek megosztásával hívhatod meg ismerőseidet erre a szerverre table: expires_at: Lejárat uses: Használat @@ -400,9 +824,34 @@ hu: too_many: Maximum négy fájlt csatolhatsz a tülkhöz migrations: acct: Az új fiók felhasznalonev@domain formátumban - currently_redirecting: 'A profilod az alábbi fiókra van átirányítva:' - proceed: Mentés - updated_msg: Fiókod átirányítási beállítasait sikeresen mentettük! + cancel: Átirányítás törlése + cancel_explanation: Az átirányítás törlése reaktiválja a fiókodat, de nem fogja visszahozni azokat a követőidet, akik közben a másik fiókhoz kerültek át. + cancelled_msg: Az átirányítást sikeresen töröltük. + errors: + already_moved: ugyanaz a fiók, ahová már elköltöztél + missing_also_known_as: nem hivatkozza vissza ezt a fiókot + move_to_self: nem lehet az aktuális fiók + not_found: nem található + on_cooldown: Még tart a türelmi idő + followers_count: Követő a költözéskor + incoming_migrations: Más fiókból költöző + incoming_migrations_html: Ahhoz, hogy egy másik fiókból ebbe költözz, először <a href="%{path}">hozz létre egy fiók aliast</a>. + moved_msg: A fiókod mostantól ide %{acct} irányít át, a követőidet átköltöztetjük. + not_redirecting: A fiókod nincs átirányítva jelenleg sehová sem. + on_cooldown: Nemrég költöztetted a fiókod. Ez a funkció %{count} nap múlva lesz megint elérhető. + past_migrations: Eddigi költözések + proceed_with_move: Követők átköltöztetése + redirecting_to: A fiókod át van irányítva ide %{acct}. + set_redirect: Átirányítás beállítása + warning: + backreference_required: Az új fiókot először be kell úgy állítani, hogy ezt visszahivatkozza + before: 'Mielőtt továbbmész, olvasd el ezeket kérlek figyelmesen:' + cooldown: A költözés után van egy türelmi idő, mely alatt nem tudsz majd újra költözni + disabled_account: A jelenlegi fiókod nem lesz teljesen használható ezután. Viszont elérhető lesz majd az adatexport funkció, valamint a reaktiválás is. + followers: Ez a művelet az összes követődet a jelenlegi fiókról az újra fogja költöztetni + only_redirect_html: Az is lehetséges, hogy <a href="%{path}">csak átirányítást raksz a profilodra</a>. + other_data: Más adatot nem fogunk automatikusan mozgatni + redirect: A jelenlegi fiókod profiljára átirányításról szóló figyelmeztetést rakunk, valamint már nem fogjuk mutatni a keresésekben moderation: title: Moderáció notification_mailer: @@ -418,125 +867,355 @@ hu: other: "%{count} új értesítésed érkezett legutóbbi látogatásod óta \U0001F418" title: Amíg távol voltál… favourite: - body: 'Az állapotodat kedvencnek jelölte %{name}:' - subject: "%{name} kedvencnek jelölte az állapotod" + body: 'A tülködet kedvencnek jelölte %{name}:' + subject: "%{name} kedvencnek jelölte a tülködet" title: Új kedvencnek jelölés follow: body: "%{name} mostantól követ téged!" subject: "%{name} mostantól követ téged" title: Új követő follow_request: - action: Követési kérések kezelése + action: Követési kérelmek kezelése body: "%{name} követni szeretne téged" subject: 'Jóváhagyásra vár: %{name}' - title: Új követési kérés + title: Új követési kérelem mention: action: Válasz body: "%{name} megemlített téged:" subject: "%{name} megemlített téged" title: Új említés reblog: - body: 'Az állapotod reblogolta %{name}:' - subject: "%{name} reblogolta az állapotod" - title: Új reblog + body: 'A tülködet %{name} megtolta:' + subject: "%{name} megtolta a tülködet" + title: Új megtolás + number: + human: + decimal_units: + format: "%n%u" + units: + billion: Mrd + million: M + quadrillion: Q + thousand: K + trillion: T pagination: + newer: Újabb next: Következő + older: Régebbi prev: Előző + truncate: "…" + polls: + errors: + already_voted: Ezen a szavazáson már voksoltál + duplicate_options: duplázott elemeket tartalmaz + duration_too_long: túl távoli időpont + duration_too_short: túl közeli időpont + expired: A szavazásnak már vége + over_character_limit: egyik sem lehet %{max} karakternél hosszabb + too_few_options: több, mint egy opciónak kell lennie + too_many_options: nem lehet több, mint %{max} opció preferences: other: Egyéb + posting_defaults: Tülkölés alapértelmezései + public_timelines: Nyilvános idővonalak + relationships: + activity: Fiók aktivitás + dormant: Elhagyott + last_active: Utoljára aktív + most_recent: Legutóbbi + moved: Átköltöztetve + mutual: Kölcsönös + primary: Elsődleges + relationship: Kapcsolat + remove_selected_domains: A választott domainekről minden követő eltávolítása + remove_selected_followers: Kiválasztott követők eltávolítása + remove_selected_follows: Kiválasztottak követésének abbahagyása + status: Fiók állapota remote_follow: acct: Írd be a felhasználódat, amelyről követni szeretnéd felhasznalonev@domain formátumban missing_resource: A fiókodnál nem található a szükséges átirányítási URL + no_account_html: Nincs fiókod? <a href='%{sign_up_path}' target='_blank'>Regisztrálj itt</a> proceed: Tovább a követéshez prompt: 'Őt tervezed követni:' + reason_html: "<strong>Miért van erre szükség?</strong> <code>%{instance}</code> nem feltétlenül az a szerver, ahol regisztrálva vagy, ezért először a saját szerveredre irányítunk." + remote_interaction: + favourite: + proceed: Jelöljük kedvencnek + prompt: 'Ezt a tülköt szeretnéd kedvencnek jelölni:' + reblog: + proceed: Megtolás + prompt: 'Ezt a tülköt szeretnéd megtolni:' + reply: + proceed: Válaszadás + prompt: 'Erre a tülkre szeretnél válaszolni:' + scheduled_statuses: + over_daily_limit: Túllépted az időzített tülkökre vonatkozó napi limitet (%{limit}) + over_total_limit: Túllépted az időzített tülkökre vonatkozó limitet (%{limit}) + too_soon: Az időzítéshez jövőbeni időpont kell sessions: activity: Legutóbbi tevékenység browser: Böngésző browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Ismeretlen böngésző + ie: Internet Explorer + micro_messenger: MicroMessenger nokia: Nokia S40 Ovi Böngésző + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo current_session: Jelenlegi munkamenet description: "%{browser} az alábbi platformon: %{platform}" explanation: Jelenleg az alábbi böngészőkkel vagy bejelentkezve a fiókodba. + ip: IP platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac other: ismeretlen platform + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Visszavonás revoke_success: Munkamenet sikeresen visszavonva title: Munkamenetek settings: + account: Fiók + account_settings: Fiók beállítások + aliases: Fiók aliasok + appearance: Megjelenés authorized_apps: Jóváhagyott alkalmazások back: Vissza a Mastodonhoz delete: Fiók törlése development: Fejlesztőknek edit_profile: Profil szerkesztése export: Adatok exportálása + featured_tags: Kiemelt hashtagek + identity_proofs: Személyazonosság tanúsítások import: Importálás + import_and_export: Import és export migrate: Fiók átirányítása notifications: Értesítések - preferences: Általános beállítások + preferences: Beállítások + profile: Profil + relationships: Követések és követők two_factor_authentication: Kétlépcsős azonosítás + spam_check: + spam_detected: Ez egy automatikus jelentés. Spamet érzékeltünk. statuses: + attached: + description: 'Csatolva: %{attached}' + image: + one: "%{count} kép" + other: "%{count} kép" + video: + one: "%{count} videó" + other: "%{count} videó" + boosted_from_html: Megtolva innen %{acct_link} + content_warning: 'Tartalom figyelmeztetés: %{warning}' + disallowed_hashtags: + one: 'tiltott hashtaget tartalmaz: %{tags}' + other: 'tiltott hashtageket tartalmaz: %{tags}' + language_detection: Nyelv automatikus felismerése open_in_web: Megnyitás a weben over_character_limit: Túllépted a maximális %{max} karakteres keretet pin_errors: limit: Elérted a kitűzhető tülkök maximális számát ownership: Nem tűzheted ki valaki más tülkjét - private: Csak publikus tülköt tűzhetsz ki - reblog: Reblogolt tülköt nem tudsz kitűzni + private: Csak nyilvános tülköt tűzhetsz ki + reblog: Megtolt tülköt nem tudsz kitűzni + poll: + total_people: + one: "%{count} személy" + other: "%{count} személy" + total_votes: + one: "%{count} szavazat" + other: "%{count} szavazat" + vote: Szavazás show_more: Mutass többet + sign_in_to_participate: Jelentkezz be, hogy részt vehess a beszélgetésben + title: '%{name}: "%{quote}"' visibilities: private: Csak követőknek private_long: A tülk csak követőidnek jelenik meg public: Nyilvános public_long: Bárki láthatja a tülköt unlisted: Listázatlan - unlisted_long: Mindenki látja, de a nyilvános időfolyamokban nem jelenik meg + unlisted_long: Mindenki látja, de a nyilvános idővonalakon nem jelenik meg stream_entries: pinned: Kitűzött tülk - reblogged: reblogolt + reblogged: megtolta sensitive_content: Szenzitív tartalom + tags: + does_not_match_previous_name: nem illeszkedik az előző névvel terms: + body_html: | + <h2>Adatvédelmi nyilatkozat</h2> + <h3 id="collect">Milyen adatokat gyűjtünk?</h3> + + <ul> + <li><em>Alapvető fiókadatok</em>: Ha regisztrálsz ezen a szerveren, kérhetünk tőled felhasználói nevet, e-mail címet és jelszót is. Megadhatsz magadról egyéb profil információt, megjelenítendő nevet, bemutatkozást, feltölthetsz profilképet, háttérképet. A felhasználói neved, megjelenítendő neved, bemutatkozásod, profil képed és háttér képed mindig nyilvánosak mindenki számára.</li> + <li><em>Tülkök (posztok), követések, más nyilvános adatok</em>: Az általad követett emberek listája nyilvános. Ugyanez igaz a te követőidre is. Ha küldesz egy üzenetet, ennek az idejét eltároljuk azzal az alkalmazással együtt, melyből az üzenetet küldted. Az üzenetek tartalmazhatnak média csatolmányt, képeket, videókat. A nyilvános tülkök (posztok) bárki számára elérhetőek. Ha egy tülköt kiemelsz a profilodon, az is nyilvánossá válik. Amikor a tülkjeidet a követőidnek továbbítjuk, a poszt más szerverekre is átkerülhet, melyeken így másolatok képződhetnek. Ha törölsz tülköket, ez is továbbítódik a követőid felé. A megtolás (reblog) és kedvencnek jelölés művelete is mindig nyilvános.</li> + <li><em>Közvetlen üzenetek és csak követőknek szánt tülkök</em>: Minden tülk a szerveren tárolódik. A csak követőknek szánt tülköket a követőidnek és az ezekben megemlítetteknek továbbítjuk, míg a közvetlen üzeneteket kizárólag az ebben megemlítettek kapják. Néhány esetben ez azt jelenti, hogy ezek más szerverekre is továbbítódnak, így ott másolatok keletkezhetnek. Jóhiszeműen feltételezzük, hogy más szerverek is hasonlóan járnak el, mikor ezeket az üzeneteket csak az arra jogosultaknak mutatják meg. Ugyanakkor ez nem feltétlenül igaz. Érdemes ezért megvizsgálni azokat a szervereket, melyeken követőid vannak. Be tudod állítani, hogy minden követési kérelmet jóvá kelljen hagynod. <em>Tartsd észben, hogy a szerver üzemeltetői láthatják az üzeneteket</em>, illetve a fogadók képernyőképet, másolatot készíthetnek belőlük, vagy újraoszthatják őket. <em>Ne ossz meg veszélyes információt a Mastodon hálózaton!</em></li> + <li><em>IP címek és egyéb metaadatok</em>: Bejelentkezéskor letároljuk a használt böngésződet és IP címedet. Minden rögzített munkamenet elérhető és visszavonható a beállítások között. Az utoljára rögzített IP címet maximum 12 hónapig tároljuk. Egyéb szerver logokat is megtarthatunk, melyek HTTP kérésenként is tárolhatják az IP címedet.</li> + </ul> + + <hr class="spacer" /> + + <h3 id="use">Mire használjuk az adataidat?</h3> + + <p>Bármely tőled begyűjtött adatot a következő célokra használhatjuk fel:</p> + + <ul> + <li>Mastodon alapfunkcióinak biztosítása: Csak akkor léphetsz kapcsolatba másokkal, ha be vagy jelentkezve. Pl. követhetsz másokat a saját, személyre szabott idővonaladon.</li> + <li>Közösségi moderáció elősegítése: Pl. IP címek összehasonlítása másokéval, hogy kiszűrjük a kitiltások megkerülését.</li> + <li>Kapcsolattartás veled: Az általad megadott e-mail címen infókat, értesítéseket küldünk mások interakcióiról, kérésekről, kérdésekről.</li> + </ul> + + <hr class="spacer" /> + + <h3 id="protect">Hogyan védjük az adataidat?</h3> + + <p>Üzemben tartunk néhány biztonsági rendszert, hogy megvédjük a személyes adataidat, amikor eléred vagy karbantartod ezeket. Többek között a böngésződ munkamenete, a szerver oldal, valamint a böngésző közötti teljes kommunikáció SSL-lel van titkosítva, a jelszavadat pedig erős, egyirányú algoritmussal hash-eljük. Kétlépcsős azonosítást is bekapcsolhatsz, hogy még biztonságosabbá tedd a fiókodhoz való hozzáférést.</p> + + <hr class="spacer" /> + + <h3 id="data-retention">Mik az adatmegőrzési szabályaink?</h3> + + <p>Mindent megteszünk, hogy:</p> + + <ul> + <li>A szerver logokat, melyek kérésenként tartalmazzák a felhasználó IP címét maximum 90 napig tartsuk meg.</li> + <li>A regisztrált felhasználókat IP címeikkel összekötő adatokat maximum 12 hónapig tartsuk meg.</li> + </ul> + + <p>Kérhetsz mentést minden tárolt adatodról, tülködről, média fájlodról, profil- és háttér képedről.</p> + + <p>Bármikor visszaállíthatatlanul le is törölheted a fiókodat.</p> + + <hr class="spacer"/> + + <h3 id="cookies">Használunk sütiket?</h3> + + <p>Igen. A sütik pici állományok, melyeket az oldalunk a böngésződön keresztül a háttértáradra rak, ha engedélyezed ezt. Ezek a sütik teszik lehetővé, hogy az oldalunk felismerje a böngésződet, és ha regisztráltál, hozzá tudjon kötni a fiókodhoz.</p> + + <p>Arra is használjuk a sütiket, hogy elmenthessük a beállításaidat egy következő látogatás céljából.</p> + + <hr class="spacer" /> + + <h3 id="disclose">Átadunk bármilyen adatot harmadik személynek?</h3> + + <p>Az azonosításodra alkalmazható adatokat nem adjuk el, nem kereskedünk vele, nem adjuk át külső szereplőnek. Ez nem foglalja magában azon harmadik személyeket, aki az üzemeltetésben, felhasználók kiszolgálásban és a tevékenységünkben segítenek, de csak addig, amíg ők is elfogadják, hogy ezeket az adatokat bizalmasan kezelik. Akkor is átadhatjuk ezeket az adatokat, ha erre hitünk szerint törvény kötelez minket, ha betartatjuk az oldalunk szabályzatát vagy megvédjük a saját vagy mások személyiségi jogait, tulajdonát, biztonságát.</p> + + <p>A nyilvános tartalmaidat más hálózatban lévő szerverek letölthetik. A nyilvános és csak követőknek szánt tülkjeid olyan szerverekre is elküldődnek, melyeken követőid vannak. A közvetlen üzenetek is átkerülnek a címzettek szervereire, ha ők más szerveren regisztráltak.</p> + + <p>Ha felhatalmazol egy alkalmazást, hogy használja a fiókodat, a jóváhagyott hatásköröktől függően ez elérheti a nyilvános profiladataidat, a követettjeid listáját, a követőidet, listáidat, tülkjeidet és kedvenceidet is. Ezek az alkalmazások ugyanakkor sosem érhetik el a jelszavadat és e-mail címedet.</p> + + <hr class="spacer" /> + + <h3 id="children">Az oldal gyerekek általi használata</h3> + + <p>Ha ez a szerver az EU-ban vagy EEA-ban található: Az oldalunk, szolgáltatásaink és termékeink mind 16 éven felülieket céloznak. Ha 16 évnél fiatalabb vagy, a GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) értelmében kérlek ne használd ezt az oldalt!</p> + + <p>Ha ez a szerver az USA-ban található: Az oldalunk, szolgáltatásaink és termékeink mind 13 éven felülieket céloznak. Ha 13 évnél fiatalabb vagy, a COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) értelmében kérlek ne használd ezt az oldalt!</p> + + <p>A jogi előírások különbözhetnek ettől a világ egyéb tájain.</p> + + <hr class="spacer" /> + + <h3 id="changes">Adatvédelmi nyilatkozat változásai</h3> + + <p>Ha úgy döntünk, hogy megváltoztatjuk az adatvédelmi nyilatkozatot, ezt ezen az oldalon közzé fogjuk tenni.</p> + + <p>Ez a dokumentum CC-BY-SA. Utoljára 2018.03.07 frissült.</p> + + <p>Eredetileg innen adaptálva <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p> title: "%{instance} Felhasználási feltételek és Adatkezelési nyilatkozat" themes: - default: Mastodon + contrast: Mastodon (Nagy kontrasztú) + default: Mastodon (Sötét) + mastodon-light: Mastodon (Világos) time: formats: default: "%Y %b %d, %H:%M" + month: "%Y %b" two_factor_authentication: code_hint: Megerősítéshez írd be az alkalmazás által generált kódot - description_html: He engedélyezed a <strong>kétlépcsős azonosítást</strong>, a bejelentkezéshez szükséged lesz a teefonodre és egy alkalmazásra, amely hozzáférési kódot generál számodra. + description_html: He engedélyezed a <strong>kétlépcsős azonosítást</strong>, a bejelentkezéshez szükséged lesz a telefonodra és egy alkalmazásra, amely hozzáférési kódot generál számodra. disable: Kikapcsolás enable: Engedélyezés enabled: Kétlépcsős azonosítás engedélyezve enabled_success: A kétlépcsős azonosítást sikeresen engedélyezted generate_recovery_codes: Visszaállítási kódok generálása - instructions_html: "<strong>Olvasd be ez a QR-kódot a telefonodon futó Google Authenticator (vagy egyéb TOTP) alkalmazással</strong>. A jövőben ez az alkalmazás fog számodra hozzáférési kódot generálni a belépéshez." + instructions_html: "<strong>Olvasd be ezt a QR-kódot a telefonodon futó Google Authenticator vagy egyéb TOTP alkalmazással</strong>. A jövőben ez az alkalmazás fog számodra hozzáférési kódot generálni a belépéshez." lost_recovery_codes: A visszaállítási kódok segítségével tudsz belépni, ha elveszítenéd a telefonod. Ha a visszaállítási kódjaidat hagytad el, itt generálhatsz újakat. A régi kódokat ebben az esetben érvénytelenítjük. manual_instructions: 'Ha nem sikerült a QR-kód beolvasása, itt a szöveges kulcs, amelyet manuálisan kell begépelned:' recovery_codes: Visszaállítási kódok biztonsági mentése - recovery_codes_regenerated: Visszaállítási kódok sikeresen újragenerálva + recovery_codes_regenerated: A visszaállítási kódokat sikeresen újrageneráltuk recovery_instructions_html: A visszaállítási kódok egyikének segítségével tudsz majd belépni, ha elveszítenéd a telefonod. <strong>Tartsd biztos helyen a visszaállítási kódjaid</strong>! Például nyomtasd ki őket és tárold a többi fontos iratoddal együtt. setup: Beállítás wrong_code: A beírt kód nem érvényes! A szerver órája és az eszközöd órája szinkronban jár? user_mailer: + backup_ready: + explanation: A Mastodon fiókod teljes mentését kérted. A mentés kész ás letölthető! + subject: Az adataidról készült archív letöltésre kész + title: Archiválás + warning: + explanation: + disable: A fiókod befagyasztott állapotban megtartja minden adatát, de feloldásig nem csinálhatsz vele semmit. + silence: A fiókod korlátozott állapotában csak a követőid láthatják a tülkjeidet, valamint nem kerülsz rá nyilvános idővonalakra. Ugyanakkor mások manuálisan még követhetnek. + suspend: A fiókodat felfüggesztették, így minden tülköd és feltöltött fájlod menthetetlenül elveszett erről a szerverről és minden olyanról is, ahol voltak követőid. + get_in_touch: Válaszolhatsz erre az emailre, hogy kapcsolatba lépj a %{instance} csapatával. + review_server_policies: Szerver szabályzat átnézése + statuses: 'Különösen hozzá:' + subject: + disable: A fiókodat %{acct} befagyasztották + none: Figyelmeztetés a %{acct} fióknak + silence: A fiókodat %{acct} korlátozták + suspend: A fiókodat %{acct} felfüggesztették + title: + disable: Befagyasztott fiók + none: Figyelem + silence: Lekorlátozott fiók + suspend: Felfüggesztett fiók welcome: edit_profile_action: Készítsd el profilod edit_profile_step: 'Itt tudod egyedivé tenni a profilod: feltölthetsz profil- és borítóképet, megváltoztathatod a megjelenített neved és így tovább. Ha jóvá szeretnéd hagyni követőidet, mielőtt láthatják a tülkjeid, itt tudod a fiókodat zárttá tenni.' explanation: Néhány tipp a kezdeti lépésekhez final_action: Kezdj tülkölni - final_step: 'Kezdj tülkölni! Publikus üzeneteid még követők híján is megjelennek másoknak, például a helyi időfolyamban és a címkéknél. Kezdd például azzal, hogy bemutatkozol: használd a #bemutatkozas és az #introductions címkét a tülködben.' + final_step: 'Kezdj tülkölni! Publikus üzeneteid még követők híján is megjelennek másoknak, például a helyi idővonalon és a hashtageknél. Kezdd például azzal, hogy bemutatkozol: használd a #bemutatkozas vagy az #introductions hashtaget a tülködben.' full_handle: Teljes felhasználóneved - full_handle_hint: Ez az, amit megadhatsz másoknak, hogy üzenhessenek neked vagy követhessenek téged más instanciákról. + full_handle_hint: Ez az, amit megadhatsz másoknak, hogy üzenhessenek neked vagy követhessenek téged más szerverekről. review_preferences_action: Beállítások módosítása - review_preferences_step: Tekintsd át beállításaidat, például hogy milyen értesítéseket kérsz emailben vagy hogy alapértelmezettként mi legyen a tülkjeid adatvédelmi beállítása. Ha nem vagy szédülős alkat, azt is engedélyezheted, hogy automatikusan lejátsszuk a GIF-eket. + review_preferences_step: Tekintsd át beállításaidat, például hogy milyen értesítéseket kérsz e-mailben vagy hogy alapértelmezettként mi legyen a tülkjeid láthatósága. Ha nem vagy szédülős alkat, azt is engedélyezheted, hogy automatikusan lejátsszuk a GIF-eket. subject: Üdvözöl a Mastodon - tip_federated_timeline: A nyilvános időfolyam a Mastodon ütőere, ahol minden tülk összefolyik. Nem teljes ugyan, mert csak azokat az emberek fogod látni, akiket instanciád többi felhasználója követ. - tip_following: Alapértelmezettként instanciád adminisztrátorait követed. Látogasd meg a helyi és a nyilvános időfolyamot, hogy más érdekes emberekre is rátalálj. - tip_local_timeline: A helyi időfolyam a saját instanciád (%{instance}) ütőere. Ezek a kedves emberek itt mind a szomszédaid! - tip_mobile_webapp: Ha a böngésződ lehetővé teszi, hogy kezdőképernyődhöz add a Mastodont, még értesítéseket is fogsz kapni – akárcsak egy igazi alkalmazás esetében! + tip_federated_timeline: A nyilvános idővonal a Mastodon ütőere, ahol minden tülkölés összefolyik. Nem teljes ugyan, mert csak azokat az embereket fogod látni, akiket a szervered többi felhasználója közül valaki követ. + tip_following: Alapértelmezettként szervered adminisztrátorait követed. Látogasd meg a helyi és a nyilvános idővonalat, hogy más érdekes emberekre is rátalálj. + tip_local_timeline: A helyi idővonal a saját szervered (%{instance}) ütőere. Ezek a kedves emberek itt mind a szomszédaid! + tip_mobile_webapp: Ha a böngésződ lehetővé teszi, hogy a kezdőképernyődhöz add a Mastodont, még értesítéseket is fogsz kapni, akárcsak egy igazi alkalmazás esetében! tips: Tippek title: Üdv a fedélzeten, %{name}! users: + follow_limit_reached: Nem követhetsz több, mint %{limit} embert invalid_email: A megadott e-mail cím helytelen invalid_otp_token: Érvénytelen ellenőrző kód + otp_lost_help_html: Ha mindkettőt elvesztetted, kérhetsz segítséget itt %{email} + seamless_external_login: Külső szolgáltatáson keresztül jelentkeztél be, így a jelszó és e-mail beállítások nem elérhetőek. signed_in_as: Bejelentkezve mint + verification: + explanation_html: 'A profilodon <strong>hitelesítheted magad, mint az itt található linkek tulajdonosa</strong>. Ehhez a linkelt weboldalnak tartalmaznia kell egy linket vissza a Mastodon profilodra. Ennek <strong>tartalmaznia kell</strong> a <code>rel="me"</code> attribútumot. A link szövege bármi lehet. Itt egy példa:' + verification: Hitelesítés diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 86645a574..203351893 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -1,12 +1,26 @@ --- hy: + about: + active_count_after: ակտիվ + see_whats_happening: Տես ինչ ա կատարվում + status_count_after: + one: ստատուս + other: ստատուս + what_is_mastodon: Ի՞նչ է Մաստոդոնը + accounts: + media: Մեդիա + auth: + login: Մտնել errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': '429': Throttled '500': + '503': The page could not be served due to a temporary server failure. invites: expires_in: '1800': 30 minutes @@ -15,3 +29,7 @@ hy: '43200': 12 hours '604800': 1 week '86400': 1 day + sessions: + platforms: + android: Անդրոիդ + linux: Լինուքս diff --git a/config/locales/id.yml b/config/locales/id.yml index 43721b19b..97e87460a 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -4,29 +4,52 @@ id: about_hashtag_html: Ini adalah toot public yang ditandai dengan <strong>#%{hashtag}</strong>. Anda bisa berinteraksi dengan mereka jika anda memiliki akun dimanapun di fediverse. about_mastodon_html: Mastodon adalah sebuah jejaring sosial <em>terbuka, open-source</em. Sebuah alternatif <em>desentralisasi</em> dari platform komersial, menjauhkan anda resiko dari sebuah perusahaan yang memonopoli komunikasi anda. Pilih server yang anda percayai — apapun yang anda pilih, anda tetap dapat berinteraksi dengan semua orang. Semua orang dapat menjalankan server Mastodon sendiri dan berpartisipasi dalam <em>jejaring sosial</em> dengan mudah. about_this: Tentang server ini + active_count_after: aktif + active_footnote: Pengguna Aktif Bulanan (PAB) administered_by: 'Dikelola oleh:' + api: API apps: Aplikasi hp + apps_platforms: Gunakan Mastodon dari iOS, Android, dan platform lain + browse_directory: Jelajahi direktori profil dan saring sesuai minat + browse_local_posts: Jelajahi siaran langsung dari pos publik server ini + browse_public_posts: Jelajahi siaran langsung pos publik di Mastodon contact: Kontak contact_missing: Belum diset contact_unavailable: Tidak Tersedia + discover_users: Temukan pengguna documentation: Dokumentasi - extended_description_html: | - <h3>Tempat yang baik untuk peraturan</h3> - <p>Deskripsi lainnya belum diset.</p> - generic_description: "%{domain} adalah satu server dalam jaringan" + federation_hint_html: Dengan akun di %{instance} Anda dapat mengikuti orang di server Mastodon mana pun dan di luarnya. + get_apps: Coba aplikasi mobile hosted_on: Mastodon dihosting di %{domain} + instance_actor_flash: 'Akun ini adalah aktor virtual yang dipakai untuk merepresentasikan server, bukan pengguna individu. Ini dipakai untuk tujuan federasi dan jangan diblokir kecuali Anda ingin memblokir seluruh instansi, yang seharusnya Anda pakai blokir domain. + +' learn_more: Pelajari selengkapnya privacy_policy: Kebijakan Privasi + see_whats_happening: Lihat apa yang sedang terjadi + server_stats: 'Statistik server:' source_code: Kode sumber status_count_after: other: status status_count_before: Yang telah menulis + tagline: Ikuti teman dan temukan yang baru terms: Kebijakan layanan + unavailable_content: Konten tak tersedia + unavailable_content_description: + domain: Server + reason: Alasan + rejecting_media: 'Berkas media dari server ini tak akan diproses dan disimpan, dan tak akan ada gambar kecil yang ditampilkan, perlu klik manual utk menuju berkas asli:' + silenced: 'Pos dari server ini akan disembunyikan dari linimasa publik dan percakapan, dan takkan ada notifikasi yang dibuat dari interaksi pengguna mereka, kecuali Anda mengikuti mereka:' + suspended: 'Takkan ada data yang diproses, disimpan, dan ditukarkan dari server ini, sehingga interaksi atau komunikasi dengan pengguna dari server ini tak mungkin dilakukan:' + unavailable_content_html: Mastodon umumnya mengizinkan Anda untuk melihat konten dan berinteraksi dengan pengguna dari server lain di fediverse. Ini adalah pengecualian yang dibuat untuk beberapa server. user_count_after: other: pengguna user_count_before: Tempat bernaung bagi what_is_mastodon: Apa itu Mastodon? accounts: + choices_html: 'Pilihan %{name}:' + endorsements_hint: Anda dapat mempromosikan orang yang Anda ikuti lewat antar muka web, dan mereka akan muncul di sini. + featured_tags_hint: Anda dapat mengunggulkan tagar tertentu yang akan ditampilkan di sini. follow: Ikuti followers: other: Pengikut @@ -34,8 +57,10 @@ id: joined: Bergabung pada %{date} last_active: terakhir aktif link_verified_on: Kepemilikan tautan ini telah dicek pada %{date} + media: Media moved_html: "%{name} telah pindah ke %{new_profile_link}:" network_hidden: Informasi ini tidak tersedia + never_active: Tak pernah nothing_here: Tidak ada apapun disini! people_followed_by: Orang yang diikuti %{name} people_who_follow: Orang-orang yang mengikuti %{name} @@ -47,7 +72,10 @@ id: posts_with_replies: Toot dan balasan reserved_username: Nama pengguna telah dipesan roles: + admin: Admin + bot: Bot moderator: Moderator + unavailable: Profil tidak tersedia unfollow: Berhenti mengikuti admin: account_actions: @@ -59,7 +87,11 @@ id: delete: Hapus destroyed_msg: Catatan moderasi berhasil dihapus! accounts: + approve: Terima + approve_all: Terima semua are_you_sure: Anda yakin? + avatar: Avatar + by_domain: Domian change_email: changed_msg: Email akun ini berhasil diubah! current_email: Email saat ini @@ -71,10 +103,12 @@ id: confirmed: Dikonfirmasi confirming: Mengkonfirmasi deleted: Terhapus + demote: Turunkan disable: Nonaktifkan disable_two_factor_authentication: Nonaktifkan 2FA disabled: Dinonaktifkan display_name: Nama + domain: Domain edit: Ubah email: E-mail email_status: Status Email @@ -84,12 +118,15 @@ id: followers: Pengikut followers_url: URL pengikut follows: Mengikut + header: Tajuk inbox_url: URL Kotak masuk invited_by: Diundang oleh + ip: IP joined: Bergabung location: all: Semua local: Lokal + remote: Remot title: Lokasi login_status: Status login media_attachments: Lampiran media @@ -97,15 +134,18 @@ id: moderation: active: Aktif all: Semua + pending: Tertunda silenced: Didiamkan suspended: Disuspen title: Moderasi moderation_notes: Catatan moderasi most_recent_activity: Aktivitas terbaru most_recent_ip: IP terbaru + no_account_selected: Tak ada akun yang diubah sebab tak ada yang dipilih no_limits_imposed: Tidak ada batasan not_subscribed: Tidak berlangganan outbox_url: URL Kotak keluar + pending: Tinjauan tertunda perform_full_suspension: Lakukan suspen penuh profile_url: URL profil promote: Promosikan @@ -113,20 +153,27 @@ id: public: Publik push_subscription_expires: Langganan PuSH telah kadaluarsa redownload: Muat ulang profil + reject: Tolak + reject_all: Tolak semua remove_avatar: Hapus avatar remove_header: Hapus header resend_confirmation: already_confirmed: Pengguna ini sudah dikonfirmasi send: Kirim ulang email konfirmasi success: Email konfirmasi berhasil dikirim! + reset: Reset reset_password: Reset kata sandi resubscribe: Langganan ulang role: Hak akses roles: + admin: Administrator + moderator: Moderator staff: Staf user: Pengguna salmon_url: URL Salmon search: Cari + search_same_ip: Pengguna lain dengan IP yang sama + shared_inbox_url: URL kotak masuk bersama show: created_reports: Laporan yang dibuat oleh akun ini targeted_reports: Laporan yang dibuat tentang akun ini @@ -135,6 +182,7 @@ id: statuses: Status subscribe: Langganan suspended: Disuspen + time_in_queue: Menunggu dalam antrean %{time} title: Akun unconfirmed_email: Email belum dikonfirmasi undo_silenced: Undo mendiamkan @@ -142,20 +190,137 @@ id: unsubscribe: Berhenti langganan username: Nama pengguna warn: Beri Peringatan + web: Web + whitelisted: Masuk daftar putih + action_logs: + actions: + assigned_to_self_report: "%{name} menugaskan laporan %{target} kpd dirinya sendiri" + change_email_user: "%{name} mengubah alamat surel pengguna %{target}" + confirm_user: "%{name} mengonfirmasi alamat surel pengguna %{target}" + create_account_warning: "%{name} mengirim peringatan untuk %{target}" + create_custom_emoji: "%{name} mengunggah emoji baru %{target}" + create_domain_allow: "%{name} memasukkan ke daftar putih domain %{target}" + create_domain_block: "%{name} memblokir domain %{target}" + create_email_domain_block: "%{name} memasukkan ke daftar hitam domain surel %{target}" + demote_user: "%{name} menurunkan pengguna %{target}" + destroy_custom_emoji: "%{name} menghapus emoji %{target}" + destroy_domain_allow: "%{name} menghapus domain %{target} dari daftar putih" + destroy_domain_block: "%{name} membuka blokir domain %{target}" + destroy_email_domain_block: "%{name} memasukkan ke daftar putih surel domain %{target}" + destroy_status: "%{name} menghapus status %{target}" + disable_2fa_user: "%{name} mematikan syarat dua faktor utk pengguna %{target}" + disable_custom_emoji: "%{name} mematikan emoji %{target}" + disable_user: "%{name} mematikan login untuk pengguna %{target}" + enable_custom_emoji: "%{name} mengaktifkan emoji %{target}" + enable_user: "%{name} mengaktifkan login untuk pengguna %{target}" + memorialize_account: "%{name} mengubah akun %{target} jadi halaman memorial" + promote_user: "%{name} mempromosikan pengguna %{target}" + remove_avatar_user: "%{name} menghapus avatar %{target}" + reopen_report: "%{name} membuka ulang laporan %{target}" + reset_password_user: "%{name} mereset kata sandi pengguna %{target}" + resolve_report: "%{name} menyelesaikan laporan %{target}" + silence_account: "%{name} membungkam akun %{target}" + suspend_account: "%{name} menangguhkan akun %{target}" + unassigned_report: "%{name} tidak menugaskan laporan %{target}" + unsilence_account: "%{name} menghapus bungkaman akun %{target}" + unsuspend_account: "%{name} menghapus penangguhan akun %{target}" + update_custom_emoji: "%{name} memperbarui emoji %{target}" + update_status: "%{name} memperbarui status %{target}" + deleted_status: "(status dihapus)" + title: Log audit + custom_emojis: + assign_category: Beri kategori + by_domain: Domain + copied_msg: Pembuatan salinan lokal emoji berhasil + copy: Salin + copy_failed_msg: Tidak dapat membuat salinan lokal emoji + create_new_category: Buat kategori baru + created_msg: Emoji berhasil dibuat! + delete: Hapus + destroyed_msg: Emoji berhasil dihapus! + disable: Matikan + disabled: Dinonaktifkan + disabled_msg: Emoji berhasil dinonaktifkan + emoji: Emoji + enable: Aktifkan + enabled: Diaktifkan + enabled_msg: Emoji berhasil diaktifkan + image_hint: PNG hingga 50KB + list: Daftar + listed: Terdaftar + new: + title: Tambah emoji kustom baru + overwrite: Timpa + shortcode: Kode pendek + shortcode_hint: Sedikitnya 2 karakter, hanya karakter alfanumerik dan garis bawah + title: Emoji kustom + uncategorized: Tak terkategorikan + unlist: Tak terdaftar + unlisted: Tak terdaftar + update_failed_msg: Tak dapat memperbarui emoji + updated_msg: Emoji berhasil diperbarui! + upload: Unggah + dashboard: + authorized_fetch_mode: Mode aman + backlog: pekerjaan di-backlog + config: Konfigurasi + feature_deletions: Penghapusan akun + feature_invites: Tautan undangan + feature_profile_directory: Direktori profil + feature_registrations: Registrasi + feature_relay: Relai federasi + feature_spam_check: Anti-spam + feature_timeline_preview: Pratinjau linimasa + features: Fitur + hidden_service: Federasi dengan layanan tersembunyi + open_reports: buka laporan + pending_tags: tagar menunggu ditinjau + pending_users: pengguna menunggu ditinjau + recent_users: Pengguna terbaru + search: Pencarian teks lengkap + single_user_mode: Mode pengguna tunggal + software: Perangkat lunak + space: Penggunaan ruang + title: Dasbor + total_users: total pengguna + trends: Tren + week_interactions: interaksi minggu ini + week_users_active: aktif minggu ini + week_users_new: pengguna minggu ini + whitelist_mode: Mode daftar putih + domain_allows: + add_new: Daftar putihkan domain + created_msg: Domain berhasil masuk daftar putih + destroyed_msg: Domain dihapus dari daftar putih + undo: Hapus dari daftar putih domain_blocks: add_new: Tambah created_msg: Pemblokiran domain sedang diproses destroyed_msg: Pemblokiran domain telah dibatalkan + domain: Domain + edit: Edit blok domain + existing_domain_block_html: Anda telah menerapkan batasan yang lebih ketat pada %{name}, Anda harus <a href="%{unblock_url}">membuka blokirnya</a> lebih dulu. new: create: Buat pemblokiran hint: Pemblokiran domain tidak akan menghentikan pembuatan akun dalam database, tapi kami akan memberikan moderasi otomatis pada akun-akun tersebut. severity: desc_html: "<strong>Pendiaman</strong> akan membuat semua postingan tidak dapat dilihat oleh semua orang yang tidak mengikutinya. <strong>Suspen</strong> akan menghapus semua konten, media, dan profil dari akun yang bersangkutan." + noop: Tidak ada silence: Pendiaman suspend: Suspen title: Pemblokiran domain baru + private_comment: Komentar pribadi + private_comment_hint: Komentar tentang pembatasan domain ini untuk penggunaan internal oleh moderator. + public_comment: Komentar publik reject_media: Tolak berkas media reject_media_hint: Hapus file media yang tersimpan dan menolak semua unduhan nantinya. Tidak terpengaruh dengan suspen + reject_reports: Tolak laporan + reject_reports_hint: Abaikan semua laporan dari domain ini. Tidak relevan untuk penangguhan + rejecting_media: tolak berkas media + rejecting_reports: laporan ditolak + severity: + silence: dibungkam + suspend: ditangguhkan show: affected_accounts: other: "%{count} akun dalam database terpengaruh" @@ -163,59 +328,315 @@ id: silence: Hapus pendiaman terhadap akun pada domain ini suspend: Hapus suspen terhadap akun pada domain ini title: Hapus pemblokiran domain %{domain} + undo: Urungkan + undo: Urungkan blokir domain + view: Lihat blokir domain + email_domain_blocks: + add_new: Tambah baru + created_msg: Berhasil menambahkan domain surel ke daftar hitam + delete: Hapus + destroyed_msg: Berhasil menghapus domain surel dari daftar hitam + domain: Domain + new: + create: Tambah domain + title: Entri daftar hitam surel baru + title: Daftar hitam surel + followers: + back_to_account: Kembali Ke Akun + title: Pengikut %{acct} instances: + by_domain: Domain + delivery_available: Pengiriman tersedia + known_accounts: + other: "%{count} akun yang dikenal" + moderation: + all: Semua + limited: Terbatas + title: Moderasi + private_comment: Komentar pribadi + public_comment: Komentar publik title: Server yang diketahui + total_blocked_by_us: Yang kita blokir + total_followed_by_them: Diikuti mereka + total_followed_by_us: Diikuti kita + total_reported: Laporan tentang mereka + total_storage: Lampiran media + invites: + deactivate_all: Nonaktifkan semua + filter: + all: Semua + available: Tersedia + expired: Kedaluwarsa + title: Saring + title: Undang + pending_accounts: + title: Akun tertunda (%{count}) + relays: + add_new: Tambah relai baru + delete: Hapus + description_html: "<strong>Relai gabungan</strong> adalah server perantara yang menukarkan toot publik dalam jumlah besar antara server yang berlangganan dengan yang menerbitkannya. <strong>Ini akan membantu server kecil hingga medium menemukan konten dari fediverse</strong>, yang tentu saja mengharuskan pengguna lokal untuk mengikuti orang lain dari server remot." + disable: Matikan + disabled: Dimatikan + enable: Aktifkan + enable_hint: Saat diaktifkan, server Anda akan melanggan semua toot publik dari relai ini, dan akan mengirim toot publik server ini ke sana. + enabled: Diaktifkan + inbox_url: URL Relai + pending: Menunggu persetujuan relai + save_and_enable: Simpan dan aktifkan + setup: Atur koneksi relai + signatures_not_enabled: Relai tak akan bekerja dengan benar saat mode aman atau mode daftar putih diaktifkan + status: Status + title: Relai + report_notes: + created_msg: Catatan laporan berhasil dibuat! + destroyed_msg: Catatan laporan berhasil dihapus! reports: + account: + note: catatan + report: lapor + action_taken_by: Aksi dilakukan oleh + are_you_sure: Apakah Anda yakin? + assign_to_self: Tugaskan kpd saya + assigned: Moderator tertugas comment: none: Tidak ada + created_at: Dilaporkan mark_as_resolved: Tandai telah diseleseikan + mark_as_unresolved: Tandai belum terselesaikan + notes: + create: Tambah catatan + create_and_resolve: Diselesaikan dengan catatan + create_and_unresolve: Dibuka kembali dengan catatan + delete: Hapus + placeholder: Jelaskan aksi yang telah dilakukan, atau pembaruan lain yang berhubungan... + reopen: Buka lagi laporan report: 'Laporkan #%{id}' reported_account: Akun yang dilaporkan reported_by: Dilaporkan oleh resolved: Terseleseikan + resolved_msg: Laporan berhasil diselesaikan! + status: Status title: Laporan + unassign: Bebas Tugas unresolved: Belum Terseleseikan + updated_at: Diperbarui settings: + activity_api_enabled: + desc_html: Hitung status yang dipos scr lokal, pengguna aktif, dan registrasi baru dlm keranjang bulanan + title: Terbitkan statistik keseluruhan tentang aktivitas pengguna + bootstrap_timeline_accounts: + desc_html: Pisahkan nama pengguna dengan koma. Hanya akun lokal dan tak terkunci yang akan bekerja. Isi bawaan jika kosong adalah semua admin lokal. + title: Ikuti scr bawaan untuk pengguna baru contact_information: email: Masukkan alamat email username: Masukkan nama pengguna + custom_css: + desc_html: Ubah tampilan dengan CSS yang dimuat di setiap halaman + title: CSS Kustom + default_noindex: + desc_html: Memengaruhi semua pengguna yang tidak mengubah setelan ini sendiri + title: Singkirkan pengguna dari pengindeksan mesin pencari scr bawaan + domain_blocks: + all: Kepada semua orang + disabled: Tidak kepada siapa pun + title: Lihat blokir domain + hero: + desc_html: Ditampilkan di halaman depan. Direkomendasikan minimal 600x100px. Jika tidak diatur, kembali ke server gambar kecil + mascot: + desc_html: Ditampilkan di banyak halaman. Direkomendasikan minimal 293x205px. Jika tidak diatur, kembali ke maskot bawaan + title: Gambar maskot + peers_api_enabled: + desc_html: Nama domain server ini dijumpai di fediverse + title: Terbitkan daftar server yang ditemukan + preview_sensitive_media: + desc_html: Pratinjau tautan pada situsweb lain akan menampilkan gambar kecil meski media ditandai sebagai sensitif + title: Tampilkan media sensitif di pratinjau OpenGraph + profile_directory: + desc_html: Izinkan pengguna untuk ditemukan + title: Aktifkan direktori profil registrations: closed_message: desc_html: Ditampilkan pada halaman depan saat pendaftaran ditutup<br>Anda bisa menggunakan tag HTML title: Pesan penutupan pendaftaran + deletion: + desc_html: Izinkan siapapun untuk menghapus akun miliknya + title: Buka penghapusan akun + min_invite_role: + disabled: Tidak ada satu pun + title: Izinkan undangan oleh + registrations_mode: + modes: + approved: Persetujuan diperlukan untuk mendaftar + none: Tidak ada yang dapat mendaftar + open: Siapa pun dapat mendaftar + title: Mode registrasi + show_known_fediverse_at_about_page: + desc_html: Ketika dimatikan, batasi linimasa publik yang ditautkan dari halaman landas untuk menampilkan konten lokal saja + title: Masukkan konten gabungan di halaman linimasa publik tanpa autentifikasi + show_staff_badge: + desc_html: Tampilkan lencana staf pada halaman pengguna + title: Tampilkan lencana staf site_description: desc_html: Ditampilkan sebagai sebuah paragraf di halaman depan dan digunakan sebagai tag meta.<br>Anda bisa menggunakan tag HTML, khususnya <code><a></code> dan <code><em></code>. title: Deskripsi situs site_description_extended: desc_html: Ditampilkan pada halaman informasi tambahan<br>Anda bisa menggunakan tag HTML title: Deskripsi situs tambahan + site_short_description: + desc_html: Ditampilkan pada bilah samping dan tag meta. Jelaskan apa itu Mastodon dan yang membuat server ini spesial dalam satu paragraf. + title: Deskripsi server pendek + site_terms: + desc_html: Anda dapat menulis kebijakan privasi, ketentuan layanan, atau hal legal lainnya sendiri. Anda dapat menggunakan tag HTML + title: Ketentuan layanan kustom site_title: Judul Situs + spam_check_enabled: + title: Automasi anti-spam + thumbnail: + desc_html: Dipakai sebagai pratinjau via OpenGraph dan API. Direkomendasikan 1200x630px + title: Server gambar kecil + timeline_preview: + desc_html: Tampilkan tautan ke linimasa publik pada halaman landas dan izinkan API mengakses linimasa publik tanpa autentifikasi + title: Izinkan akses linimasa publik tanpa autentifikasi title: Pengaturan situs - subscriptions: - confirmed: Dikonfirmasi - expires_in: Kadaluarsa dalam - last_delivery: Terakhir dikirim - topic: Topik + trendable_by_default: + desc_html: Memengaruhi tagar yang belum pernah diizinkan + title: Izinkan tagar masuk tren tanpa peninjauan + trends: + desc_html: Tampilkan secara publik tagar tertinjau yang kini sedang tren + title: Tagar sedang tren + statuses: + back_to_account: Kembali ke halaman akun + batch: + delete: Hapus + nsfw_off: Tandai sebagai tak sensitif + nsfw_on: Tandai sebagai sensitif + deleted: Dihapus + failed_to_execute: Gagal mengeksekusi + media: + title: Media + no_media: Tanpa media + no_status_selected: Tak ada status yang berubah karena tak ada yang dipilih + title: Status akun + with_media: Dengan media + tags: + accounts_today: Penggunaan unik hari ini + accounts_week: Penggunaan unik minggu ini + breakdown: Rinci penggunaan hari ini berdasar sumber + context: Konteks + directory: Di direktori + in_directory: "%{count} di direktori" + last_active: Terakhir aktif + most_popular: Paling populer + most_recent: Terkini + name: Tagar + review: Tinjau status + reviewed: Ditinjau + title: Tagar + trending_right_now: Sedang tren sekarang + unique_uses_today: "%{count} memposkan hari ini" + unreviewed: Tak tertinjau + updated_msg: Pembaruan pengaturan tagar berhasil title: Administrasi + warning_presets: + add_new: Tambah baru + delete: Hapus + edit: Sunting + edit_preset: Sunting preset peringatan + title: Kelola preset peringatan + admin_mailer: + new_pending_account: + body: Detail akun baru di bawah. Anda dapat menyetujui atau menolak lamaran ini. + subject: Akun baru muncul untuk ditinjau di %{instance} (%{username}) + new_report: + body: "%{reporter} telah melaporkan %{target}" + body_remote: Seseorang dari %{domain} telah melaporkan %{target} + subject: Laporan baru untuk %{instance} (#%{id}) + new_trending_tag: + body: 'Tagar #%{name} sedang tren hari ini, tetapi belum ditinjau. Itu tidak akan ditampilkan secara publik kecuali Anda mengizinkannya, atau simpan saja borang sebagaimana mestinya untuk tidak mendengarnya lagi.' + subject: Tagar baru muncul untuk ditinjau di %{instance} (#%{name}) + aliases: + add_new: Buat alias + created_msg: Berhasil membuat alias baru. Sekarang Anda dapat memulai pindah dari akun lama. + deleted_msg: Berhasil menghapus alias. Pindah dari akun tersebut ke sini tidak akan lagi bisa dilakukan. + hint_html: Jika Anda ingin pindah dari akun lain ke sini, Anda dapat membuat alias, yang dilakukan sebelum Anda setuju dengan memindah pengikut dari akun lama ke akun sini. Aksi ini <strong>tidak berbahaya dan tidak bisa dikembalikan</strong>. <strong>Pemindahan akun dimulai dari akun lama</strong>. + remove: Hapus tautan alias + appearance: + advanced_web_interface: Antar muka web tingkat lanjut + advanced_web_interface_hint: 'Jika Anda ingin memanfaatkan seluruh lebar layar Anda, antar muka web tingkat lanjut mengizinkan Anda mengonfigurasi beragam kolom untuk menampilkan informasi sebanyak yang Anda mau: Beranda, notifikasi, linimasa gabungan, daftar, dan tagar.' + animations_and_accessibility: Animasi dan aksesibilitas + confirmation_dialogs: Dialog konfirmasi + discovery: Jelajah + sensitive_content: Konten sensitif application_mailer: + notification_preferences: Ubah pilihan email + salutation: "%{name}," settings: 'Ubah pilihan email: %{link}' view: 'Tampilan:' + view_profile: Lihat profil + view_status: Lihat status applications: + created: Aplikasi berhasil dibuat + destroyed: Aplikasi berhasil dihapus invalid_url: URL tidak sesuai + regenerate_token: Buat ulang token akses + token_regenerated: Token akses berhasil dibuat ulang + warning: Hati-hati dengan data ini. Jangan bagikan kepada siapapun! + your_token: Token akses Anda auth: + apply_for_account: Meminta undangan + change_password: Kata sandi + checkbox_agreement_html: Saya setuju dengan <a href="%{rules_path}" target="_blank">peraturan server</a> dan <a href="%{terms_path}" target="_blank">ketentuan layanan</a> + checkbox_agreement_without_rules_html: Saya setuju dengan <a href="%{terms_path}" target="_blank">ketentuan layanan</a> + delete_account: Hapus akun + delete_account_html: Jika Anda ingin menghapus akun Anda, Anda dapat <a href="%{path}">memproses ini</a>. Anda akan dikonfirmasi. + description: + prefix_invited_by_user: "@%{name} mengundang Anda untuk bergabung di server Mastodon ini!" + prefix_sign_up: Daftar ke Mastodon hari ini! + suffix: Dengan sebuah akun, Anda dapat mengikuti orang, mengirim pembaruan, dan bertukar pesan dengan pengguna dari server Mastodon mana pun dan lainnya! didnt_get_confirmation: Tidak menerima petunjuk konfirmasi? forgot_password: Lupa kata sandi? + invalid_reset_password_token: Token reset kata sandi tidak valid atau kedaluwarsa. Silakan minta yang baru. login: Masuk logout: Keluar + migrate_account: Pindah ke akun berbeda + migrate_account_html: Jika Anda ingin mengalihkan akun ini ke akun lain, Anda dapat <a href="%{path}">mengaturnya di sini</a>. + or_log_in_with: Atau masuk dengan + providers: + cas: CAS + saml: SAML register: Daftar + registration_closed: "%{instance} tidak menerima anggota baru" resend_confirmation: Kirim ulang email konfirmasi reset_password: Reset kata sandi security: Identitas set_new_password: Tentukan kata sandi baru + setup: + email_below_hint_html: Jika alamat surel di bawah tidak benar, Anda dapat menggantinya di sini dan menerima konfirmasi surel baru. + email_settings_hint_html: Konfirmasi surel telah dikirim ke %{email}. Jika alamat surel tidak benar, Anda dapat mengubahnya di setelan akun. + title: Atur + status: + account_status: Status akun + confirming: Menunggu konfirmasi surel diselesaikan. + functional: Akun Anda kini beroperasi penuh. + pending: Lamaran Anda sedang ditinjau oleh staf kami. Ini mungkin butuh beberapa waktu. Anda akan menerima sebuah surel jika lamaran Anda diterima. + redirecting_to: Akun Anda tidak aktif karena sekarang dialihkan ke %{acct}. + trouble_logging_in: Kesulitan masuk? authorize_follow: + already_following: Anda sudah mengikuti akun ini error: Sayangnya, ada error saat melihat akun remote follow: Ikuti + follow_request: 'Anda telah mengirim permintaan untuk mengikuti ke:' + following: 'Berhasil! Anda sekarang mengikuti:' + post_follow: + close: Atau Anda dapat menutup jendela ini. + return: Tampilkan profil pengguna + web: Ke web title: Mengikuti %{acct} + challenge: + confirm: Lanjut + hint_html: "<strong>Tip:</strong> Kami tidak akan meminta kata sandi Anda lagi untuk beberapa jam ke depan." + invalid_password: Kata sandi tidak valid + prompt: Konfirmasi kata sandi untuk melanjutkan datetime: distance_in_words: about_x_hours: "%{count}j" @@ -230,85 +651,349 @@ id: x_minutes: "%{count}mnt" x_months: "%{count}bln" x_seconds: "%{count}dtk" + deletes: + challenge_not_passed: Informasi yang Anda masukkan salah + confirm_password: Masukkan kata sandi sekarang untuk memverifikasi identitas Anda + confirm_username: Masukkan nama pengguna untuk mengonfirmasi prosedur + proceed: Hapus akun + success_msg: Akun Anda berhasil dihapus + warning: + before: 'Sebelum melanjutkan, silakan baca catatan ini dengan hati-hati:' + caches: Konten yang telah tersimpan di server lain mungkin akan tetap di sana + data_removal: Kiriman Anda dan data lainnya akan dihapus secara permanen + email_change_html: Anda dapat <a href="%{path}">mengubah alamat surel Anda</a> tanpa perlu menghapus akun + email_contact_html: Jika pesan belum diterima, Anda dapat mengirim surel <a href="mailto:%{email}">%{email}</a> sebagai bantuan + email_reconfirmation_html: Jika Anda tidak menerima konfirmasi surel, <a href="%{path}">Anda dapat memintanya lagi</a> + irreversible: Anda tidak akan bisa lagi mengembalikan atau mengaktifkan kembali akun Anda + more_details_html: Lebih detailnya, lihat <a href="%{terms_path}">kebijakan privasi</a>. + username_available: Nama pengguna Anda akan tersedia lagi + username_unavailable: Nama pengguna Anda tetap tidak akan tersedia + directories: + directory: Direktori profil + explanation: Temukan pengguna berdasarkan minatnya + explore_mastodon: Jelajahi %{title} + domain_validator: + invalid_domain: bukan nama domain yang valid errors: + '400': Permintaan yang dikirim tidak valid atau cacat. '403': Anda tidak mempunyai izin untuk melihat halaman ini. '404': Halaman yang anda cari tidak ditemukan + '406': Halaman ini tidak tersedia dalam format yang diminta. '410': Halaman yang anda cari sudah tidak dapat ditemukan lagi. '422': content: Verifikasi keamanan gagal. Apa anda memblokir cookie? title: Verifikasi keamanan gagal '429': Throttled - '500': + '500': + content: Maaf, ada sesuatu yang salah pada sistem kami. + title: Halaman ini tidak benar + '503': Halaman ini tidak dapat ditampilkan karena kegagalan server sementara. + noscript_html: Untuk menggunakan aplikasi web Mastodon, tolong aktifkan JavaScript. Sebagai alternatif, cobalah <a href="%{apps_path}">aplikasi murni</a> Mastodon untuk platform Anda. + existing_username_validator: + not_found: tidak dapat menemukan pengguna lokal dengan nama pengguna tersebut + not_found_multiple: tidak dapat menemukan %{usernames} exports: + archive_takeout: + date: Tanggal + download: Unduh arsip Anda + hint_html: Anda dapat meminta arsip <strong>toot dan media yang Anda unggah</strong>. Data yang terekspor akan berformat ActivityPub, dapat dibaca dengan perangkat lunak yang mendukungnya. Anda dapat meminta arsip akun setiap 7 hari. + in_progress: Mengompilasi arsip Anda... + request: Meminta arsip Anda + size: Ukuran blocks: Anda blokir + csv: CSV + domain_blocks: Blokir domain follows: Anda ikuti + lists: Daftar mutes: Anda bisukan storage: Penyimpanan media + featured_tags: + add_new: Tambah baru + filters: + contexts: + home: Beranda + notifications: Notifikasi + public: Linimasa publik + thread: Percakapan + edit: + title: Ubah saringan + index: + delete: Hapus + title: Saringan + new: + title: Tambah saringan baru + footer: + developers: Pengembang + more: Lainnya… + resources: Sumber daya + trending_now: Sedang tren generic: + all: Semua changes_saved_msg: Perubahan berhasil disimpan! + copy: Salin + order_by: Urut berdasarkan save_changes: Simpan perubahan + validation_errors: + other: Ada yang belum benar! Silakan tinjau %{count} kesalahan di bawah ini + html_validator: + invalid_markup: 'berisi markup HTML yang tidak valid: %{error}' + identity_proofs: + active: Aktif + authorize: Ya, izinkan + authorize_connection_prompt: Izinkan koneksi kriptografi ini? + errors: + failed: Koneksi kriptografi gagal. Silakan coba lagi dari %{provider}. + keybase: + invalid_token: Token Keybase adalah sandi tanda tangan dan harus berupa 66 karakter hex + verification_failed: Keybase tidak mengenali token ini sebagai tanda tangan pengguna Keybase %{kb_username}. Silakan ulangi lagi dari Keybase. + wrong_user: Tidak dapat membuat bukti untuk %{proving} saat masuk sebagai %{current}. Masuk sebagai %{proving} dan coba lagi. + explanation_html: Anda dapat mengoneksikan identitas lain secara kriptografi, seperti profil Keybase. Ini mengizinkan orang lain untuk mengirim pesan terenkripsi kepada Anda dan mempercayai konten yang Anda kirim. + i_am_html: Saya adalah %{username} di %{service}. + identity: Identitas + inactive: Tidak aktif + publicize_checkbox: 'Dan toot ini:' + publicize_toot: 'Terbukti! Saya adalah %{username} di %{service}: %{url}' + status: Status verifikasi + view_proof: Lihat bukti imports: + modes: + merge: Gabung + merge_long: Pertahankan rekaman yang sudah ada dan buat baru + overwrite: Timpa + overwrite_long: Ganti rekaman sekarang dengan yang baru preface: Anda bisa mengimpor data tertentu seperti orang-orang yang anda ikuti atau anda blokir di server ini, dari file yang dibuat oleh fitur expor di server lain. success: Data anda berhasil diupload dan akan diproses sesegera mungkin types: blocking: Daftar diblokir + domain_blocking: Daftar blokir domain following: Daftar diikuti muting: Daftar didiamkan upload: Unggah + in_memoriam_html: Dalam memori. invites: + delete: Nonaktifkan + expired: Kedaluwarsa expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day + '1800': 30 menit + '21600': 6 jam + '3600': 1 jam + '43200': 12 jam + '604800': 1 minggu + '86400': 1 hari + expires_in_prompt: Tak pernah + generate: Buat tautan undangan + invited_by: 'Anda diundang oleh:' + max_uses: + other: "%{count} penggunaan" + max_uses_prompt: Tanpa batas + prompt: Buat dan bagikan tautan dengan yang lain untuk mendapatkan akses ke server ini + table: + expires_at: Kedaluwarsa + uses: Penggunaan + title: Undang orang + lists: + errors: + limit: Daftar Anda telah mencapai jumlah maksimum media_attachments: validations: images_and_video: Tidak bisa melampirkan video pada status yang telah memiliki gambar too_many: Tidak dapat melampirkan lebih dari 4 file + migrations: + acct: Pindah ke + cancel: Batalkan peralihan + cancel_explanation: Membatalkan peralihan akan mengaktivasi ulang akun sekarang, tetapi tidak akan mengembalikan pengikut yang telah pindah ke akun baru. + cancelled_msg: Pembatalan peralihan berhasil. + errors: + already_moved: adalah akun yang sama yang sudah Anda pindahkan ke + move_to_self: tidak boleh akun sekarang + not_found: tidak dapat ditemukan + followers_count: Jumlah pengikut saat migrasi + incoming_migrations: Pindah dari akun berbeda + incoming_migrations_html: Untuk pindah dari akun lain ke sini, Anda harus <a href="%{path}">membuat alias akun</a> terlebih dahulu. + moved_msg: Akun Anda dialihkan ke %{acct} dan pengikut Anda akan ikut dipindahkan. + not_redirecting: Saat ini akun Anda tidak dialihkan ke akun lain. + on_cooldown: Anda baru saja memindahkan akun Anda. Fungsi ini akan tersedia kembali %{count} hari lagi. + proceed_with_move: Pindahkan pengikut + redirecting_to: Akun Anda dialihkan ke %{acct}. + set_redirect: Atur peralihan + warning: + before: 'Sebelum lanjut, mohon perhatikan catatan ini:' + cooldown: Setelah pindah akun adalah masa tenang, masa Anda tidak dapat pindah akun lagi + followers: Tindakan ini akan memindah semua pengikut Anda dari akun sekarang ke akun baru + other_data: Tidak akan ada data lagi yang dipindahkan secara otomatis + moderation: + title: Moderasi notification_mailer: digest: + action: Lihat semua notifikasi body: Ini adalah ringkasan singkat yang anda lewatkan pada sejak kunjungan terakhir anda pada %{since} mention: "%{name} menyebut anda di:" new_followers_summary: other: Anda mendapatkan %{count} pengikut baru! Luar biasa! subject: other: "%{count} notifikasi baru sejak kunjungan terakhir anda pada \U0001F418" + title: Saat Anda tidak muncul... favourite: body: 'Status anda disukai oleh %{name}:' subject: "%{name} menyukai status anda" + title: Favorit baru follow: body: "%{name} mengikuti anda!" subject: "%{name} menjadi pengikut anda" + title: Pengikut baru follow_request: + action: Kelola permintaan mengikuti body: "%{name} meminta untuk mengikuti anda" subject: 'Pengikut menunggu: %{name}' + title: Permintaan mengikuti baru mention: + action: Balas body: 'Anda disebut oleh %{name} pada:' subject: Anda disebut oleh %{name} + title: Sebutan baru reblog: body: 'Status anda di-boost oleh %{name}:' subject: "%{name} mem-boost status anda" + title: Boost baru + number: + human: + decimal_units: + format: "%n%u" + units: + billion: M + million: Jt + quadrillion: Kdt + thousand: Rb + trillion: T pagination: + newer: Lebih baru next: Selanjutnya + older: Lebih lama prev: Sebelumnya + truncate: "…" + polls: + errors: + already_voted: Anda sudah mengikuti japat ini + duplicate_options: berisi item ganda + duration_too_short: terlalu cepat + expired: Japat telah berakhir + over_character_limit: tidak boleh lebih dari %{max} karakter + too_few_options: harus punya lebih dari satu item + too_many_options: tidak boleh berisi lebih dari %{max} item + preferences: + other: Lainnya + public_timelines: Linimasa publik + relationships: + activity: Aktivitas akun + dormant: Terbengkalai + last_active: Terakhir aktif + most_recent: Terkini + moved: Dipindah + primary: Utama + relationship: Hubungan + remove_selected_domains: Hapus semua pengikut dari domain yang dipilih + remove_selected_followers: Hampus pengikut yang dipilih + status: Status akun remote_follow: acct: Masukkan namapengguna@domain yang akan anda ikuti missing_resource: Tidak dapat menemukan URL redirect dari akun anda + no_account_html: Tidak memiliki akun? Anda dapat <a href='%{sign_up_path}' target='_blank'>mendaftar di sini</a> proceed: Lanjutkan untuk mengikuti prompt: 'Anda akan mengikuti:' + reason_html: "<strong>Mengapa langkah ini penting?</strong> <code>%{instance}</code> mungkin saja bukan tempat Anda mendaftar, sehingga kami perlu mengalihkan Anda ke server beranda lebih dahulu." + remote_interaction: + favourite: + proceed: Lanjutkan ke favorit + prompt: 'Anda ingin memfavoritkan toot ini:' + reblog: + proceed: Lanjutkan ke boost + prompt: 'Anda ingin mem-boost toot ini:' + reply: + proceed: Lanjutkan ke balasan + prompt: 'Anda ingin membalas toot ini:' + scheduled_statuses: + over_daily_limit: Anda telah melampaui batas %{limit} toot terjadwal untuk sehari + over_total_limit: Anda telah melampaui batas %{limit} toot terjadwal + too_soon: Tanggal terjadwal haruslah pada hari yang akan datang + sessions: + activity: Aktivitas terakhir + browser: Peramban + browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Peramban tidak dikenal + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Peramban Nokia S40 Ovi + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo + current_session: Sesi sekarang + description: "%{browser} di %{platform}" + explanation: Ini peramban yang sedang dalam posisi masuk akun Mastodon Anda. + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac + other: platform yang tidak diketahui + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Cabut izin + revoke_success: Sesi berhasil dicabut + title: Sesi settings: + account: Akun + account_settings: Pengaturan akun + aliases: Alias akun + appearance: Tampilan authorized_apps: Apl yang diizinkan back: Kembali ke Mastodon + delete: Penghapusan akun + development: Pengembangan edit_profile: Ubah profil export: Expor data + featured_tags: Tagar unggulan + identity_proofs: Bukti identitas import: Impor + import_and_export: Impor dan ekspor + migrate: Pemindahan akun + notifications: Notifikasi preferences: Pilihan + profile: Profil two_factor_authentication: Autentikasi Two-factor + spam_check: + spam_detected: Ini adalah laporan otomatis. Spam terdeteksi. statuses: + attached: + description: 'Terlampir: %{attached}' + image: + other: "%{count} gambar" + video: + other: "%{count} video" + boosted_from_html: Boost dari %{acct_link} + content_warning: 'Peringatan konten: %{warning}' + disallowed_hashtags: + other: 'berisi tagar yang tidak diizinkan: %{tags}' + language_detection: Deteksi bahasa secara otomatis open_in_web: Buka di web over_character_limit: melebihi %{max} karakter + pin_errors: + limit: Anda sudah mencapai jumlah maksimum toot yang dapat disematkan show_more: Tampilkan selengkapnya visibilities: private: Khusus pengikut @@ -336,6 +1021,22 @@ id: recovery_instructions_html: Jika anda kehilangan akses pada handphone anda, anda bisa menggunakan kode pemulihan dibawah ini untuk mendapatkan kembali akses pada akun anda. Simpan kode pemulihan anda baik-baik, misalnya dengan mencetaknya atau menyimpannya bersama dokumen penting lainnya. setup: Persiapan wrong_code: Kode yang dimasukkan tidak cocok! Apa waktu server dan waktu di handphone sudah cocok? + user_mailer: + warning: + review_server_policies: Tinjau kebijakan server + statuses: 'Khususnya untuk:' + subject: + disable: Akun Anda %{acct} telah dibekukan + none: Peringatan untuk %{acct} + silence: Akun Anda %{acct} telah dibatasi + suspend: Akun Anda %{acct} telah ditangguhkan + title: + disable: Akun dibekukan + none: Peringatan + silence: Akun dibatasi + suspend: Akun ditangguhkan + welcome: + edit_profile_action: Siapkan profil users: invalid_email: Alamat email tidak cocok invalid_otp_token: Kode dua faktor tidak cocok diff --git a/config/locales/io.yml b/config/locales/io.yml index 559bf0f53..2b3e50691 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -73,12 +73,15 @@ io: half_a_minute: Jus less_than_x_seconds: Jus errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': La pagino quan tu serchas ne existas. + '406': This page is not available in the requested format. '410': La pagino quan tu serchas ne plus existas. '422': '429': Throttled '500': + '503': The page could not be served due to a temporary server failure. exports: blocks: Tu blokusas follows: Tu sequas diff --git a/config/locales/it.yml b/config/locales/it.yml index 1d1238056..3b5743f4d 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -7,24 +7,42 @@ it: active_count_after: attivo active_footnote: Utenti Attivi Mensili (MAU) administered_by: 'Amministrato da:' - apps: Applicazioni Mobile + api: API + apps: Applicazioni per dispositivi mobili apps_platforms: Usa Mastodon da iOS, Android e altre piattaforme + browse_directory: Sfoglia la directory dei profili e filtra per interessi + browse_local_posts: Sfoglia il flusso in tempo reale di post pubblici su questo server + browse_public_posts: Sfoglia il flusso in tempo reale di post pubblici su Mastodon contact: Contatti contact_missing: Non impostato contact_unavailable: N/D + discover_users: Scopri utenti documentation: Documentazione - extended_description_html: | - <h3>Un buon posto per le regole</h3> - <p>La descrizione estesa non è ancora stata preparata.</p> - generic_description: "%{domain} è un server nella rete" - get_apps: Prova l'app per smartphone + federation_hint_html: Con un account su %{instance} sarai in grado di seguire persone su qualsiasi server Mastodon e oltre. + get_apps: Prova un'app per smartphone hosted_on: Mastodon ospitato su %{domain} + instance_actor_flash: | + Questo account è un attore virtuale utilizzato per rappresentare il server stesso e non un particolare utente. + È utilizzato per scopi di federazione e non dovrebbe essere bloccato a meno che non si voglia bloccare l'intera istanza: in questo caso si dovrebbe utilizzare un blocco di dominio. learn_more: Scopri altro privacy_policy: Politica della privacy + see_whats_happening: Guarda cosa succede + server_stats: 'Statistiche del server:' source_code: Codice sorgente + status_count_after: + one: stato + other: stati status_count_before: Che hanno pubblicato - tagline: Segui vecchi amici e trovane nuovi + tagline: Segui amici e trovane di nuovi terms: Termini di Servizio + unavailable_content: Contenuto non disponibile + unavailable_content_description: + domain: Server + reason: 'Motivo:' + rejecting_media: I file multimediali di questo server non saranno elaborati e non verranno visualizzate miniature, che richiedono clic manuale sull'altro server. + silenced: 'I messaggi da questi server saranno nascosti nelle timeline e nelle conversazioni pubbliche, e nessuna notifica verrà generata dalle interazioni dei loro utenti, a meno che non li stai seguendo:' + suspended: 'Nessun dato da questi server sarà elaborato, memorizzato o scambiato, rendendo impossibile qualsiasi interazione o comunicazione con gli utenti di questi server:' + unavailable_content_html: Mastodon generalmente permette di visualizzare i contenuti e interagire con gli utenti di qualsiasi altro server nel fediverse. Queste sono le eccezioni che sono state create su questo specifico server. user_count_after: one: utente other: utenti @@ -32,6 +50,8 @@ it: what_is_mastodon: Che cos'è Mastodon? accounts: choices_html: 'Suggerimenti da %{name}:' + endorsements_hint: 'Puoi segnalare persone che segui e che apprezzi dall''interfaccia web: saranno mostrate qui.' + featured_tags_hint: Puoi mettere in evidenza determinati hashtag che verranno visualizzati qui. follow: Segui followers: one: Seguace @@ -40,19 +60,26 @@ it: joined: Dal %{date} last_active: ultima attività link_verified_on: La proprietà di questo link è stata controllata il %{date} - moved_html: "%{name} è stato spostato su %{new_profile_link}:" + media: Media + moved_html: "%{name} si è spostato su %{new_profile_link}:" network_hidden: Questa informazione non e' disponibile + never_active: Mai nothing_here: Qui non c'è nulla! people_followed_by: Persone seguite da %{name} people_who_follow: Persone che seguono %{name} pin_errors: following: Devi gia seguire la persona che vuoi promuovere + posts: + one: Toot + other: Toot posts_tab_heading: Toot posts_with_replies: Toot e risposte - reserved_username: Il nome utente è gia stato preso + reserved_username: Questo nome utente è già stato preso roles: admin: Amministratore + bot: Bot moderator: Moderatore + unavailable: Profilo non disponibile unfollow: Non seguire più admin: account_actions: @@ -64,11 +91,14 @@ it: delete: Elimina destroyed_msg: Nota di moderazione distrutta con successo! accounts: + approve: Approva + approve_all: Approva tutto are_you_sure: Sei sicuro? + avatar: Immagine di profilo by_domain: Dominio change_email: changed_msg: Account email cambiato con successo! - current_email: Email corrente + current_email: Email attuale label: Cambia email new_email: Nuova email submit: Cambia email @@ -79,11 +109,12 @@ it: deleted: Cancellato demote: Declassa disable: Disabilita - disable_two_factor_authentication: Disabilita 2FA + disable_two_factor_authentication: Disabilita l'autenticazione a due fattori disabled: Disabilitato display_name: Nome visualizzato domain: Dominio edit: Modifica + email: Email email_status: Stato email enable: Abilita enabled: Abilitato @@ -94,7 +125,8 @@ it: header: Intestazione inbox_url: URL inbox invited_by: Invitato da - joined: Unito + ip: IP + joined: Iscritto da location: all: Tutto local: Locale @@ -106,15 +138,18 @@ it: moderation: active: Attivo all: Tutto + pending: In attesa silenced: Silenziati suspended: Sospesi title: Moderazione moderation_notes: Note di moderazione most_recent_activity: Attività più recenti - most_recent_ip: IP più recenti + most_recent_ip: IP più recente + no_account_selected: Nessun account è stato modificato visto che non ne è stato selezionato nessuno no_limits_imposed: Nessun limite imposto not_subscribed: Non sottoscritto outbox_url: URL outbox + pending: Revisioni in attesa perform_full_suspension: Sospendi profile_url: URL profilo promote: Promuovi @@ -122,6 +157,8 @@ it: public: Pubblico push_subscription_expires: Sottoscrizione PuSH scaduta redownload: Aggiorna avatar + reject: Rifiuta + reject_all: Rifiuta tutto remove_avatar: Rimuovi avatar remove_header: Rimuovi intestazione resend_confirmation: @@ -139,6 +176,7 @@ it: user: Utente salmon_url: URL Salmone search: Cerca + search_same_ip: Altri utenti con lo stesso IP shared_inbox_url: URL Inbox Condiviso show: created_reports: Rapporti creati da questo account @@ -148,6 +186,7 @@ it: statuses: Stati subscribe: Sottoscrivi suspended: Sospeso + time_in_queue: Attesa in coda %{time} title: Account unconfirmed_email: Email non confermata undo_silenced: Rimuovi silenzia @@ -155,6 +194,8 @@ it: unsubscribe: Annulla l'iscrizione username: Nome utente warn: Avverti + web: Web + whitelisted: Nella whitelist action_logs: actions: assigned_to_self_report: "%{name} ha assegnato il rapporto %{target} a se stesso" @@ -188,53 +229,77 @@ it: update_custom_emoji: "%{name} ha aggiornato l'emoji %{target}" update_status: "%{name} stato aggiornato da %{target}" deleted_status: "(stato cancellato)" + title: Registro di controllo custom_emojis: + assign_category: Assegna categoria by_domain: Dominio copied_msg: Creata con successo una copia locale dell'emoji copy: Copia copy_failed_msg: Impossibile creare una copia locale di questo emoji + create_new_category: Crea nuova categoria created_msg: Emoji creato con successo! delete: Elimina destroyed_msg: Emoji distrutto con successo! disable: Disabilita + disabled: Disabilitato disabled_msg: Questa emoji è stata disabilitata con successo + emoji: Emoji enable: Abilita + enabled: Abilitato enabled_msg: Questa emoji è stata abilitata con successo image_hint: PNG fino a 50 KB listed: Elencato new: title: Aggiungi nuovo emoji personalizzato overwrite: Sovrascrivi + shortcode: Scorciatoia shortcode_hint: Almeno due caratteri, solo caratteri alfanumerici e trattino basso title: Emoji personalizzate + uncategorized: Nessuna categoria unlisted: Non elencato update_failed_msg: Impossibile aggiornare questa emojii updated_msg: Emoji aggiornata con successo! upload: Carica dashboard: + authorized_fetch_mode: Modalità sicura + backlog: lavori arretrati config: Configurazione feature_deletions: Cancellazioni di account feature_invites: Link di invito feature_profile_directory: Directory dei profili feature_registrations: Registrazioni feature_relay: Ripetitore di federazione + feature_spam_check: Anti-spam + feature_timeline_preview: Anteprima timeline features: Funzionalità hidden_service: Federazione con servizi nascosti open_reports: apri report + pending_tags: hashtag in attesa di essere esaminati + pending_users: utenti in attesa di essere esaminati recent_users: Utenti Recenti search: Ricerca testo intero single_user_mode: Modalita utente singolo + software: Software space: Utilizzo dello spazio + title: Cruscotto total_users: utenti totali trends: Tendenze week_interactions: interazioni per questa settimana week_users_active: attivi questa settimana week_users_new: utenti questa settimana + whitelist_mode: Modalità whitelist + domain_allows: + add_new: Dominio nella whitelist + created_msg: Il dominio è stato inserito nella whitelist + destroyed_msg: Il dominio è stato eliminato dalla whitelist + undo: Elimina dalla whitelist domain_blocks: add_new: Aggiungi nuovo created_msg: Il blocco del dominio sta venendo processato destroyed_msg: Il blocco del dominio è stato rimosso domain: Dominio + edit: Modifica blocco di dominio + existing_domain_block_html: Hai già impostato limitazioni più stringenti su %{name}, dovresti <a href="%{unblock_url}">sbloccare</a> prima. new: create: Crea blocco hint: Il blocco dominio non previene la creazione di utenti nel database, ma applicherà automaticamente e retroattivamente metodi di moderazione specifici su quegli account. @@ -244,10 +309,16 @@ it: silence: Silenzia suspend: Sospendi title: Nuovo blocco dominio + private_comment: Commento privato + private_comment_hint: Commento su questa limitazione di dominio per uso interno da parte dei moderatori. + public_comment: Commento pubblico + public_comment_hint: Commento pubblico su questa limitazione di dominio, se l'elenco delle limitazioni di dominio è pubblico. reject_media: Rifiuta file media reject_media_hint: Rimuovi i file media salvati in locale e blocca i download futuri. Irrilevante per le sospensioni reject_reports: Respingi rapporti reject_reports_hint: Ignora tutti i rapporti provenienti da questo dominio. Irrilevante per sospensioni + rejecting_media: rigetta file media + rejecting_reports: rigetta segnalazioni severity: silence: silenziato suspend: sospeso @@ -261,6 +332,7 @@ it: title: Annulla il blocco del dominio per %{domain} undo: Annulla undo: Annulla + view: Visualizza blocco di dominio email_domain_blocks: add_new: Aggiungi nuovo created_msg: Dominio email aggiunto con successo alla lista nera @@ -276,16 +348,21 @@ it: title: Seguaci di %{acct} instances: by_domain: Dominio + delivery_available: Distribuzione disponibile known_accounts: one: "%{count} account noto" other: "%{count} account noti" moderation: + all: Tutto limited: Limitato title: Moderazione + private_comment: Commento privato + public_comment: Commento pubblico title: Istanze conosciute total_blocked_by_us: Bloccato da noi total_followed_by_them: Seguito da loro total_followed_by_us: Seguito da noi + total_reported: Segnalazioni su di loro total_storage: Media allegati invites: deactivate_all: Disattiva tutto @@ -295,6 +372,8 @@ it: expired: Scaduto title: Filtro title: Inviti + pending_accounts: + title: Account in attesa (%{count}) relays: add_new: Aggiungi ripetitore delete: Cancella @@ -308,12 +387,15 @@ it: pending: In attesa dell'approvazione del ripetitore save_and_enable: Salva e attiva setup: Crea una connessione con un ripetitore + signatures_not_enabled: I ripetitori non funzionano correttamente se la modalità sicura o la modalità whitelist è attiva + status: Stato title: Ripetitori report_notes: created_msg: Nota rapporto creata! destroyed_msg: Nota rapporto cancellata! reports: account: + note: note report: rapporto action_taken_by: Azione intrapresa da are_you_sure: Sei sicuro? @@ -349,10 +431,21 @@ it: desc_html: Separa i nomi utente con virgola. Funziona solo con account locali e non bloccati. Quando vuoto, valido per tutti gli amministratori locali. title: Seguiti predefiniti per i nuovi utenti contact_information: + email: E-mail di lavoro username: Nome utente del contatto custom_css: desc_html: Modifica l'aspetto con il CSS caricato in ogni pagina title: CSS personalizzato + default_noindex: + desc_html: Interessa tutti gli utenti che non hanno cambiato questa impostazione + title: Esclude gli utenti dall'indicizzazione dei motori di ricerca per impostazione predefinita + domain_blocks: + all: A tutti + disabled: A nessuno + title: Mostra blocchi di dominio + users: Agli utenti locali connessi + domain_blocks_rationale: + title: Mostra motivazione hero: desc_html: Mostrata nella pagina iniziale. Almeno 600x100 px consigliati. Se non impostata, sarà usato il thumbnail del server title: Immagine dell'eroe @@ -378,10 +471,17 @@ it: min_invite_role: disabled: Nessuno title: Permetti inviti da + registrations_mode: + modes: + approved: Approvazione richiesta per le iscrizioni + none: Nessuno può iscriversi + open: Chiunque può iscriversi + title: Modalità di registrazione show_known_fediverse_at_about_page: desc_html: Quando attivato, mostra nell'anteprima i toot da tutte le istanze conosciute. Altrimenti mostra solo i toot locali. title: Mostra la fediverse conosciuta nell'anteprima della timeline show_staff_badge: + desc_html: Mostra un distintivo dello staff sulla pagina dell'utente title: Mostra badge staff site_description: desc_html: Paragrafo introduttivo nella pagina iniziale. Descrive ciò che rende speciale questo server Mastodon e qualunque altra cosa sia importante dire. Potete usare marcatori HTML, in particolare <code><a></code> e <code><em></code>. @@ -396,6 +496,9 @@ it: desc_html: Potete scrivere la vostra politica sulla privacy, condizioni del servizio o altre informazioni legali. Potete usare tag HTML title: Termini di servizio personalizzati site_title: Nome del server + spam_check_enabled: + desc_html: Mastodon può silenziare e segnalare automaticamente account che inviano ripetutamente messaggi non richiesti. Potrebbero esserci falsi positivi. + title: Automazione anti-spam thumbnail: desc_html: Usato per anteprime tramite OpenGraph e API. 1200x630px consigliati title: Thumbnail del server @@ -403,29 +506,43 @@ it: desc_html: Mostra la timeline pubblica sulla pagina iniziale title: Anteprima timeline title: Impostazioni sito + trendable_by_default: + desc_html: Interessa gli hashtag che non sono stati precedentemente disattivati + title: Permetti agli hashtag di comparire nei trend senza prima controllarli + trends: + desc_html: Visualizza pubblicamente gli hashtag precedentemente esaminati che sono attualmente in tendenza + title: Hashtag di tendenza statuses: back_to_account: Torna alla pagina dell'account batch: delete: Elimina nsfw_off: Segna come non sensibile nsfw_on: Segna come sensibile + deleted: Cancellato failed_to_execute: Impossibile eseguire + media: + title: Media no_media: Nessun media no_status_selected: Nessun status è stato modificato perché nessuno era stato selezionato title: Gli status dell'account with_media: con media - subscriptions: - callback_url: URL Callback - confirmed: Confermato - expires_in: Scade in - topic: Argomento tags: - accounts: Account - hidden: Nascosto - hide: Non mostrare nella directory + accounts_today: Usi unici oggi + accounts_week: Usi unici questa settimana + breakdown: Suddivisione dell'utilizzo di oggi per fonte + context: Contesto + directory: Nella directory + in_directory: "%{count} nella directory" + last_active: Ultima attività + most_popular: Più popolari + most_recent: Più recenti + name: Hashtag + reviewed: Controllato title: Hashtag - unhide: Mostra nella directory - visible: Visibile + trending_right_now: Di tendenza ora + unique_uses_today: "%{count} post oggi" + unreviewed: Non controllato + updated_msg: Impostazioni degli hashtag aggiornate title: Amministrazione warning_presets: add_new: Aggiungi nuovo @@ -433,8 +550,35 @@ it: edit: Modifica edit_preset: Modifica avviso predefinito title: Gestisci avvisi predefiniti + admin_mailer: + new_pending_account: + body: I dettagli del nuovo account sono qui sotto. Puoi approvare o rifiutare questa richiesta. + subject: Nuovo account pronto per la revisione su %{instance} (%{username}) + new_report: + body: "%{reporter} ha segnalato %{target}" + body_remote: Qualcuno da %{domain} ha segnalato %{target} + subject: Nuova segnalazione per %{instance} (#%{id}) + new_trending_tag: + body: 'L''hashtag #%{name} oggi è di tendenza, ma non è stato mai controllato. Non sarà visualizzato pubblicamente se non lo permetti; se salvi il form senza modifiche non lo vedrai mai più.' + subject: Nuovo hashtag pronto per essere controllato su %{instance} (%{name}) + aliases: + add_new: Crea alias + created_msg: Hai creato un nuovo alias. Ora puoi iniziare lo spostamento dal vecchio account. + deleted_msg: L'alias è stato eliminato. Lo spostamento da quell'account a questo non sarà più possibile. + hint_html: Se vuoi trasferirti da un altro account a questo, qui puoi creare un alias, che è necessario prima di poter spostare i seguaci dal vecchio account a questo. Questa azione è <strong>innocua e reversibile</strong>. <strong>La migrazione dell'account è avviata dal vecchio account</strong>. + remove: Scollega alias + appearance: + advanced_web_interface: Interfaccia web avanzata + advanced_web_interface_hint: |- + Se vuoi utilizzare l'intera larghezza dello schermo, l'interfaccia web avanzata ti consente di configurare varie colonne per mostrare più informazioni allo stesso tempo, secondo le tue preferenze: + Home, notifiche, timeline federata, qualsiasi numero di liste e etichette. + animations_and_accessibility: Animazioni e accessibiiltà + confirmation_dialogs: Dialoghi di conferma + sensitive_content: Contenuto sensibile + toot_layout: Layout dei toot application_mailer: notification_preferences: Cambia preferenze email + salutation: "%{name}," settings: 'Cambia le impostazioni per le email: %{link}' view: 'Guarda:' view_profile: Mostra profilo @@ -446,22 +590,45 @@ it: regenerate_token: Rigenera il token di accesso token_regenerated: Token di accesso rigenerato warning: Fa' molta attenzione con questi dati. Non fornirli mai a nessun altro! + your_token: Il tuo token di accesso auth: - confirm_email: Conferma email + apply_for_account: Richiedi un invito + change_password: Password + checkbox_agreement_html: Sono d'accordo con le <a href="%{rules_path}" target="_blank">regole del server</a> ed i <a href="%{terms_path}" target="_blank">termini di servizio</a> + checkbox_agreement_without_rules_html: Accetto i <a href="%{terms_path}" target="_blank">termini di servizio</a> delete_account: Elimina account delete_account_html: Se desideri cancellare il tuo account, puoi <a href="%{path}">farlo qui</a>. Ti sarà chiesta conferma. + description: + prefix_invited_by_user: "@%{name} ti invita a iscriverti a questo server Mastodon!" + prefix_sign_up: Iscriviti oggi a Mastodon! + suffix: Con un account, sarai in grado di seguire le persone, pubblicare aggiornamenti e scambiare messaggi con gli utenti da qualsiasi server di Mastodon e altro ancora! didnt_get_confirmation: Non hai ricevuto le istruzioni di conferma? forgot_password: Hai dimenticato la tua password? + invalid_reset_password_token: Il token di reimpostazione della password non è valido o è scaduto. Per favore richiedine uno nuovo. login: Entra logout: Esci da Mastodon migrate_account: Sposta ad un account differente migrate_account_html: Se vuoi che questo account sia reindirizzato a uno diverso, puoi <a href="%{path}">configurarlo qui</a>. or_log_in_with: Oppure accedi con + providers: + cas: CAS + saml: SAML register: Iscriviti + registration_closed: "%{instance} non accetta nuovi membri" resend_confirmation: Invia di nuovo le istruzioni di conferma reset_password: Resetta la password security: Credenziali set_new_password: Imposta una nuova password + setup: + email_below_hint_html: Se l'indirizzo e-mail sottostante non è corretto, puoi cambiarlo qui e ricevere una nuova e-mail di conferma. + email_settings_hint_html: L'email di conferma è stata inviata a %{email}. Se l'indirizzo e-mail non è corretto, puoi modificarlo nelle impostazioni dell'account. + status: + account_status: Stato dell'account + confirming: In attesa che la conferma e-mail sia completata. + functional: Il tuo account è pienamente operativo. + pending: La tua richiesta è in attesa di esame da parte del nostro staff. Potrebbe richiedere un po' di tempo. Riceverai una e-mail se la richiesta è approvata. + redirecting_to: Il tuo account è inattivo perché attualmente reindirizza a %{acct}. + trouble_logging_in: Problemi di accesso? authorize_follow: already_following: Stai già seguendo questo account error: Sfortunatamente c'è stato un errore nel consultare l'account remoto @@ -473,6 +640,11 @@ it: return: Mostra il profilo dell'utente web: Vai al web title: Segui %{acct} + challenge: + confirm: Continua + hint_html: "<strong>Suggerimento:</strong> Non ti chiederemo di nuovo la tua password per la prossima ora." + invalid_password: Password non valida + prompt: Conferma la tua password per continuare datetime: distance_in_words: about_x_hours: "%{count} ore" @@ -488,34 +660,46 @@ it: x_months: "%{count} mesi" x_seconds: "%{count} secondi" deletes: - bad_password_msg: Ci avete provato, hacker! Password errata + challenge_not_passed: Le informazioni che hai inserito non sono corrette confirm_password: Inserisci la tua password attuale per verificare la tua identità - description_html: Questa azione eliminerà <strong>in modo permanente e irreversibile</strong> tutto il contenuto del tuo account e lo disattiverà. Il tuo nome utente resterà riservato per prevenire che qualcuno in futuro assuma la tua identità. + confirm_username: Inserisci il tuo nome utente per confermare la procedura proceed: Cancella l'account success_msg: Il tuo account è stato cancellato - warning_html: È garantita la cancellazione del contenuto solo da questo server. I contenuti che sono stati ampiamente condivisi probabilmente lasceranno delle tracce. I server offline e quelli che non ricevono più i tuoi aggiornamenti non aggiorneranno i loro database. + warning: + before: 'Prima di procedere, per favore leggi attentamente queste note:' + caches: Il contenuto che è stato memorizzato in cache da altri server può continuare ad esistere + data_removal: I tuoi post e altri dati saranno eliminati definitivamente + email_change_html: Puoi <a href="%{path}">cambiare il tuo indirizzo e-mail</a> senza cancellare il tuo account + email_contact_html: Se ancora non arriva, puoi mandare una mail a <a href="mailto:%{email}">%{email}</a> per chiedere aiuto + email_reconfirmation_html: Se non ricevi l'email di conferma, puoi <a href="%{path}">richiederla nuovamente</a> + irreversible: Non potrai ripristinare o riattivare il tuo account + more_details_html: Per maggiori dettagli, vedi la <a href="%{terms_path}">politica di privacy</a>. + username_available: Il tuo nome utente sarà nuovamente disponibile + username_unavailable: Il tuo nome utente rimarrà non disponibile directories: directory: Directory dei profili - enabled: Attualmente sei elencato nella directory. - enabled_but_waiting: Hai scelto di essere elencato nella directory, ma non hai ancora il numero minimo di seguaci (%{min_followers}) per comparire. explanation: Scopri utenti in base ai loro interessi explore_mastodon: Esplora %{title} - how_to_enable: Attualmente non hai scelto di comparire nella directory. Puoi farlo qui sotto. Se vuoi comparire sotto determinati hashtag, usali nel testo della tua biografia. - people: - one: "%{count} persona" - other: "%{count} persone" + domain_validator: + invalid_domain: non è un nome di dominio valido errors: + '400': La richiesta che hai inviato non è valida o non è corretta. '403': Non sei autorizzato a visualizzare questa pagina. '404': La pagina che stavi cercando non esiste. + '406': Questa pagina non è disponibile nel formato richiesto. '410': La pagina che stavi cercando qui non esiste più. '422': content: Verifica di sicurezza non riuscita. Stai bloccando i cookies? title: Verifica di sicurezza non riuscita - '429': Throttled + '429': Limitato '500': content: Siamo spiacenti, ma qualcosa non ha funzionato dal nostro lato. title: Questa pagina non è corretta + '503': La pagina non può essere trasmessa a causa di un errore temporaneo del server. noscript_html: Per usare l'interfaccia web di Mastodon dovi abilitare JavaScript. In alternativa puoi provare una delle <a href="%{apps_path}">app native</a> per Mastodon per la tua piattaforma. + existing_username_validator: + not_found: impossibile trovare un utente locale con quel nome utente + not_found_multiple: impossibile trovare %{usernames} exports: archive_takeout: date: Data @@ -525,6 +709,7 @@ it: request: Richiedi il tuo archivio size: Dimensioni blocks: Stai bloccando + csv: CSV domain_blocks: Blocchi di dominio follows: Stai seguendo lists: Liste @@ -534,6 +719,7 @@ it: add_new: Aggiungi nuovo errors: limit: Hai già messo in evidenza il numero massimo di hashtag + hint_html: "<strong>Cosa sono gli hashtag in evidenza?</strong> Sono visualizzati in evidenza sul tuo profilo pubblico e permettono alle persone di visualizzare i tuoi post pubblici marcati con questi hashtag. Sono un grande strumento per tenere traccia di opere creative o progetti a lungo termine." filters: contexts: home: Timeline home @@ -544,6 +730,7 @@ it: title: Modifica filtro errors: invalid_context: Contesto mancante o non valido + invalid_irreversible: Il filtraggio irreversibile funziona solo nei contesti di home o notifiche index: delete: Cancella title: Filtri @@ -552,13 +739,38 @@ it: footer: developers: Sviluppatori more: Altro… + resources: Risorse + trending_now: Di tendenza ora generic: + all: Tutto changes_saved_msg: Modifiche effettuate con successo! copy: Copia + no_batch_actions_available: Nessuna azione batch disponibile su questa pagina + order_by: Ordina per save_changes: Salva modifiche validation_errors: one: Qualcosa ancora non va bene! Per favore, controlla l'errore qui sotto other: Qualcosa ancora non va bene! Per favore, controlla i %{count} errori qui sotto + html_validator: + invalid_markup: 'contiene markup HTML non valido: %{error}' + identity_proofs: + active: Attive + authorize: Si, autorizza + authorize_connection_prompt: Autorizzare questa connessione crittografata? + errors: + failed: La connessione crittografata non è riuscita. Per favore riprova da %{provider}. + keybase: + invalid_token: I toked di Keybase sono hash di firme e devono essere lunghi 66 caratteri esadecimali + verification_failed: Keybase non riconosce questo token come firma dell'utente Keybase %{kb_username}. Per favore riprova da Keybase. + wrong_user: Impossibile creare una prova per %{proving} mentre si è effettuato l'accesso come %{current}. Accedi come %{proving} e riprova. + explanation_html: Qui puoi connettere crittograficamente le tue altre identità, come il profilo Keybase. Questo consente ad altre persone di inviarti messaggi criptati e fidarsi dei contenuto che tu invii a loro. + i_am_html: Io sono %{username} su %{service}. + identity: Identità + inactive: Inattiva + publicize_checkbox: 'E posta questo:' + publicize_toot: 'É provato! Io sono %{username} su %{service}: %{url}' + status: Stato della verifica + view_proof: Vedi prova imports: modes: merge: Fondi @@ -573,6 +785,7 @@ it: following: Lista dei seguaci muting: Lista dei silenziati upload: Carica + in_memoriam_html: In Memoriam. invites: delete: Disattiva expired: Scaduto @@ -604,9 +817,33 @@ it: too_many: Impossibile allegare più di 4 file migrations: acct: utente@dominio del nuovo account - currently_redirecting: 'Il tuo profilo sarà ridirezionato a:' - proceed: Salva - updated_msg: L'impostazione per la migrazione dell'account è sta aggiornata! + cancel: Annulla ridirezione + cancel_explanation: Se annulli il reindirizzamento sarà riattivato il tuo account attuale, ma i seguaci che sono stati spostati all'altro account non saranno riportati indietro. + cancelled_msg: Reindirizzamento annullato. + errors: + already_moved: è lo stesso account su cui ti sei già trasferito + missing_also_known_as: non reinvia a questo account + move_to_self: non può essere l'account attuale + not_found: non trovato + on_cooldown: Ti trovi nel periodo di pausa tra un trasferimento e l'altro + followers_count: Seguaci al momento dello spostamento + incoming_migrations_html: Per spostarti da un altro account a questo, devi prima creare <a href="%{path}">un alias</a>. + moved_msg: Il tuo account è ora reindirizzato a %{acct} e i tuoi follower sono stati spostati. + not_redirecting: Il tuo account attualmente non è reindirizzato ad alcun altro account. + on_cooldown: Hai recentemente trasferito il tuo account. Questa funzione sarà nuovamente disponibile tra %{count} giorni. + past_migrations: Trasferimenti passati + proceed_with_move: Sposta seguaci + redirecting_to: Il tuo account sta reindirizzando a %{acct}. + set_redirect: Imposta ridirezione + warning: + backreference_required: Il nuovo account deve essere prima configurato per collegarsi a questo + before: 'Prima di procedere, leggi attentamente queste avvertenze:' + cooldown: Dopo il trasferimento c'è un periodo di pausa durante il quale non potrai trasferirti di nuovo + disabled_account: Il tuo account attuale non sarà più pienamente utilizzabile. Tuttavia, avrai accesso all'esportazione dei dati e alla riattivazione. + followers: Questa azione sposterà tutti i seguaci dall'account attuale al nuovo account + only_redirect_html: In alternativa, puoi solo <a href="%{path}">impostare un redirect sul tuo profilo</a>. + other_data: Nessun altro dato verrà spostato automaticamente + redirect: Il profilo del tuo account corrente sarà aggiornato con un avviso di ridirezione e sarà escluso dalle ricerche moderation: title: Moderazione notification_mailer: @@ -643,14 +880,26 @@ it: body: 'Il tuo status è stato condiviso da %{name}:' subject: "%{name} ha condiviso il tuo status" title: Nuova condivisione + number: + human: + decimal_units: + format: "%n%u" + units: + billion: G + million: M + quadrillion: P + thousand: k + trillion: T pagination: newer: Più recente next: Avanti older: Più vecchio prev: Indietro + truncate: "…" polls: errors: already_voted: Hai già votato in questo sondaggio + duplicate_options: contiene oggetti duplicati duration_too_long: è troppo lontano nel futuro duration_too_short: è troppo presto expired: Il sondaggio si è già concluso @@ -659,12 +908,28 @@ it: too_many_options: non può contenere più di %{max} elementi preferences: other: Altro + posting_defaults: Predefinite di pubblicazione + public_timelines: Timeline pubbliche + relationships: + activity: Attività dell'account + dormant: Dormiente + last_active: Ultima volta attivo + most_recent: Più recente + moved: Trasferito + mutual: Reciproco + primary: Principale + relationship: Relazione + remove_selected_domains: Rimuovi tutti i seguaci dai domini selezionati + remove_selected_followers: Rimuovi i seguaci selezionati + remove_selected_follows: Smetti di seguire gli utenti selezionati + status: Stato dell'account remote_follow: acct: Inserisci il tuo username@dominio da cui vuoi seguire questo utente missing_resource: Impossibile trovare l'URL di reindirizzamento richiesto per il tuo account no_account_html: Non hai un account? Puoi <a href='%{sign_up_path}' target='_blank'>iscriverti qui</a> proceed: Conferma prompt: 'Stai per seguire:' + reason_html: "<strong>Perchè questo passo è necessario?</strong> <code>%{instance}</code> potrebbe non essere il server nel quale tu sei registrato, quindi dobbiamo reindirizzarti prima al tuo server." remote_interaction: favourite: proceed: Continua per segnare come apprezzato @@ -675,25 +940,56 @@ it: reply: proceed: Continua per rispondere prompt: 'Vuoi rispondere a questo toot:' - remote_unfollow: - error: Errore - title: Titolo - unfollowed: Non più seguito scheduled_statuses: over_daily_limit: Hai superato il limite di %{limit} toot programmati per questo giorno over_total_limit: Hai superato il limite di %{limit} toot programmati too_soon: La data di pubblicazione deve essere nel futuro sessions: activity: Ultima attività + browser: Browser browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Browser sconosciuto + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo current_session: Sessione corrente description: "%{browser} su %{platform}" explanation: Questi sono i browser da cui attualmente è avvenuto l'accesso al tuo account Mastodon. + ip: IP platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac other: piattaforma sconosciuta + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Revoca + revoke_success: Sessione revocata con successo title: Sessioni settings: + account: Account + account_settings: Impostazioni dell'account + aliases: Alias dell'account + appearance: Interfaccia authorized_apps: Applicazioni autorizzate back: Torna a Mastodon delete: Cancellazione account @@ -701,18 +997,28 @@ it: edit_profile: Modifica profilo export: Esporta impostazioni featured_tags: Hashtag in evidenza + identity_proofs: Prove di identità import: Importa + import_and_export: Importa ed esporta migrate: Migrazione dell'account notifications: Notifiche preferences: Preferenze + profile: Profilo + relationships: Follows e followers two_factor_authentication: Autenticazione a due fattori + spam_check: + spam_detected: Questo è un rapporto automatico. È stato rilevato dello spam. statuses: attached: description: 'Allegato: %{attached}' image: one: "%{count} immagine" other: "%{count} immagini" + video: + one: "%{count} video" + other: "%{count} video" boosted_from_html: Condiviso da %{acct_link} + content_warning: 'Avviso di contenuto: %{warning}' disallowed_hashtags: one: 'contiene un hashtag non permesso: %{tags}' other: 'contiene gli hashtags non permessi: %{tags}' @@ -725,12 +1031,16 @@ it: private: Un toot non pubblico non può essere fissato in cima reblog: Un toot condiviso non può essere fissato in cima poll: + total_people: + one: "%{count} persona" + other: "%{count} persone" total_votes: one: "%{count} voto" other: "%{count} voti" vote: Vota show_more: Mostra di più sign_in_to_participate: Accedi per partecipare alla conversazione + title: '%{name}: "%{quote}"' visibilities: private: Mostra solo ai tuoi seguaci private_long: Mostra solo ai seguaci @@ -742,12 +1052,18 @@ it: pinned: Toot fissato in cima reblogged: condiviso sensitive_content: Materiale sensibile + tags: + does_not_match_previous_name: non corrisponde al nome precedente terms: title: "%{instance} Termini di servizio e politica della privacy" themes: contrast: Mastodon (contrasto elevato) default: Mastodon (scuro) mastodon-light: Mastodon (chiaro) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: Inserisci il codice generato dalla tua app di autenticazione description_html: Se abiliti <strong>l'autorizzazione a due fattori</strong>, entrare nel tuo account ti richiederà di avere vicino il tuo telefono, il quale ti genererà un codice per eseguire l'accesso. @@ -769,7 +1085,26 @@ it: explanation: Hai richiesto un backup completo del tuo account Mastodon. È pronto per essere scaricato! subject: Il tuo archivio è pronto per essere scaricato title: Esportazione archivio + warning: + explanation: + disable: Mentre il tuo account è congelato, i tuoi dati dell'account rimangono intatti, ma non potrai eseguire nessuna azione fintanto che non viene sbloccato. + silence: Mentre il tuo account è limitato, solo le persone che già ti seguono possono vedere i tuoi toot su questo server, e potresti essere escluso da vari elenchi pubblici. Comunque, altri possono manualmente seguirti. + suspend: Il tuo account è stato sospeso, e tutti i tuoi toot ed i tuoi file media caricati sono stati irreversibilmente rimossi da questo server, e dai server dove avevi dei seguaci. + get_in_touch: Puoi rispondere a questa email per entrare in contatto con lo staff di %{instance}. + review_server_policies: Rivedi regole del server + statuses: 'Nello specifico, per:' + subject: + disable: Il tuo account %{acct} è stato congelato + none: Avviso per %{acct} + silence: Il tuo account %{acct} è stato limitato + suspend: Il tuo account %{acct} è stato sospeso + title: + disable: Account congelato + none: Avviso + silence: Account limitato + suspend: Account sospeso welcome: + edit_profile_action: Imposta profilo edit_profile_step: Puoi personalizzare il tuo profilo caricando un avatar, un'intestazione, modificando il tuo nome visualizzato e così via. Se vuoi controllare i tuoi nuovi seguaci prima di autorizzarli a seguirti, puoi bloccare il tuo account. explanation: Ecco alcuni suggerimenti per iniziare final_action: Inizia a postare @@ -789,6 +1124,7 @@ it: follow_limit_reached: Non puoi seguire più di %{limit} persone invalid_email: L'indirizzo email inserito non è valido invalid_otp_token: Codice d'accesso non valido + otp_lost_help_html: Se perdessi l'accesso ad entrambi, puoi entrare in contatto con %{email} seamless_external_login: Ti sei collegato per mezzo di un servizio esterno, quindi le impostazioni di email e password non sono disponibili. signed_in_as: 'Hai effettuato l''accesso come:' verification: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 895610d16..8bf225bee 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -11,19 +11,19 @@ ja: apps: アプリ apps_platforms: iOSやAndroidなど、各種環境から利用できます browse_directory: ディレクトリから気になる人を探しましょう + browse_local_posts: このサーバーの公開タイムラインをご覧ください browse_public_posts: Mastodonの公開ライブストリームをご覧ください contact: 連絡先 contact_missing: 未設定 contact_unavailable: N/A discover_users: ユーザーを見つける documentation: ドキュメント - extended_description_html: | - <h3>ルールを書くのに適した場所</h3> - <p>詳細説明が設定されていません。</p> federation_hint_html: "%{instance} のアカウントひとつでどんなMastodon互換サーバーのユーザーでもフォローできるでしょう。" - generic_description: "%{domain} は、Mastodon サーバーの一つです" get_apps: モバイルアプリを試す hosted_on: Mastodon hosted on %{domain} + instance_actor_flash: 'このアカウントはサーバーそのものを示す仮想的なもので、特定のユーザーを示すものではありません。これはサーバーの連合のために使用されます。サーバー全体をブロックするときは、このアカウントをブロックせずに、ドメインブロックを使用してください。 + +' learn_more: もっと詳しく privacy_policy: プライバシーポリシー see_whats_happening: やりとりを見てみる @@ -34,12 +34,22 @@ ja: status_count_before: トゥート数 tagline: Follow friends and discover new ones terms: 利用規約 + unavailable_content: 制限中のサーバー + unavailable_content_description: + domain: サーバー + reason: 制限理由 + rejecting_media: 'これらのサーバーからのメディアファイルは処理されず、保存や変換もされません。サムネイルも表示されません。表示するにはクリックしてそのサーバーに直接アクセスする必要があります:' + silenced: 'これらのサーバーからの投稿は公開タイムラインと会話から隠されます。また該当するユーザーからの通知は相手をフォローしている場合を除き表示されません:' + suspended: 'これらのサーバーからのデータは処理されず、保存や変換もされません。該当するユーザーとの交流もできません:' + unavailable_content_html: 通常 Mastodon では連合先のどんなサーバーのユーザーとでもやりとりできます。ただし次のサーバーには例外が設定されています。 user_count_after: other: 人 user_count_before: ユーザー数 what_is_mastodon: Mastodon とは? accounts: choices_html: "%{name} によるおすすめ:" + endorsements_hint: あなたがフォローしている中でおすすめしたい人をここで紹介できます。 + featured_tags_hint: 特定のハッシュタグをここに表示できます。 follow: フォロー followers: other: フォロワー @@ -50,6 +60,7 @@ ja: media: メディア moved_html: "%{name} さんは引っ越しました %{new_profile_link}:" network_hidden: この情報は利用できません + never_active: 活動なし nothing_here: 何もありません! people_followed_by: "%{name} さんがフォロー中のアカウント" people_who_follow: "%{name} さんをフォロー中のアカウント" @@ -161,6 +172,7 @@ ja: user: ユーザー salmon_url: Salmon URL search: 検索 + search_same_ip: 同じ IP のユーザーを検索 shared_inbox_url: Shared inbox URL show: created_reports: このアカウントで作られた通報 @@ -179,6 +191,7 @@ ja: username: ユーザー名 warn: 警告 web: Web + whitelisted: ホワイトリストに登録済み action_logs: actions: assigned_to_self_report: "%{name} さんが通報 %{target} を自身の担当に割り当てました" @@ -186,10 +199,12 @@ ja: confirm_user: "%{name} さんが %{target} さんのメールアドレスを確認済みにしました" create_account_warning: "%{name} さんが %{target} さんに警告メールを送信しました" create_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を追加しました" + create_domain_allow: "%{name} さんがドメイン %{target} をドメイン用ホワイトリストに追加しました" create_domain_block: "%{name} さんがドメイン %{target} をブロックしました" create_email_domain_block: "%{name} さんがドメイン %{target} をメールアドレス用ブラックリストに追加しました" demote_user: "%{name} さんが %{target} さんを降格しました" destroy_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を削除しました" + destroy_domain_allow: "%{name} さんがドメイン %{target} をドメイン用ホワイトリストから外しました" destroy_domain_block: "%{name} さんがドメイン %{target} のブロックを外しました" destroy_email_domain_block: "%{name} さんがドメイン %{target} をメールアドレス用ブラックリストから外しました" destroy_status: "%{name} さんが %{target} さんの投稿を削除しました" @@ -214,31 +229,39 @@ ja: deleted_status: "(削除済)" title: 操作履歴 custom_emojis: + assign_category: カテゴリーを割り当て by_domain: ドメイン copied_msg: 絵文字のコピーをローカルに作成しました copy: コピー copy_failed_msg: 絵文字のコピーをローカルに作成できませんでした + create_new_category: カテゴリーを作成 created_msg: 絵文字の追加に成功しました! delete: 削除 destroyed_msg: 絵文字の削除に成功しました! disable: 無効化 + disabled: 無効 disabled_msg: 絵文字を無効化しました emoji: 絵文字 enable: 有効化 + enabled: 有効 enabled_msg: 絵文字を有効化しました image_hint: 50KBまでのPNG画像を利用できます - listed: 収載 + list: 表示 + listed: 表示 new: title: 新規カスタム絵文字の追加 overwrite: 上書き shortcode: ショートコード shortcode_hint: 2文字以上の半角英数字とアンダーバーのみ利用できます title: カスタム絵文字 - unlisted: 未収載 + uncategorized: 未分類 + unlist: 非表示 + unlisted: 非表示 update_failed_msg: 絵文字を更新できませんでした updated_msg: 絵文字の更新に成功しました! upload: アップロード dashboard: + authorized_fetch_mode: セキュアモード backlog: 未処理のジョブ config: 構成 feature_deletions: アカウント削除 @@ -246,10 +269,13 @@ ja: feature_profile_directory: ディレクトリ feature_registrations: 新規登録 feature_relay: 連合リレー + feature_spam_check: スパム対策 feature_timeline_preview: タイムラインプレビュー features: 機能 hidden_service: 秘匿サービスとの連合 open_reports: 未解決の通報 + pending_tags: 審査待ちのハッシュタグ + pending_users: 承認待ちの人数 recent_users: 最近登録したユーザー search: 全文検索 single_user_mode: シングルユーザーモード @@ -261,11 +287,18 @@ ja: week_interactions: 今週交流のあった回数 week_users_active: 今週活動した人数 week_users_new: 今週登録した人数 + whitelist_mode: ホワイトリストモード + domain_allows: + add_new: ホワイトリストに追加 + created_msg: ドメインのホワイトリストへの登録が完了しました + destroyed_msg: ドメインをホワイトリストから削除しました + undo: ホワイトリストから削除 domain_blocks: add_new: ドメインブロックを追加 created_msg: ドメインブロック処理を完了しました destroyed_msg: ドメインブロックを外しました domain: ドメイン + edit: ドメインブロックを編集 existing_domain_block_html: 既に%{name}に対して、より厳しい制限を課しています。先に<a href="%{unblock_url}">その制限を解除</a>する必要があります。 new: create: ブロックを作成 @@ -276,6 +309,10 @@ ja: silence: サイレンス suspend: 停止 title: 新規ドメインブロック + private_comment: コメント (非公開) + private_comment_hint: このコメントは同じサーバーのモデレーターも閲覧できます。 + public_comment: コメント (公開) + public_comment_hint: ドメインブロックの公開を有効にしている場合、このコメントも公開されます。 reject_media: メディアファイルを拒否 reject_media_hint: ローカルに保存されたメディアファイルを削除し、今後のダウンロードを拒否します。停止とは無関係です reject_reports: 通報を拒否 @@ -294,6 +331,7 @@ ja: title: "%{domain}のドメインブロックを戻す" undo: 元に戻す undo: ドメインブロックを戻す + view: ドメインブロックを表示 email_domain_blocks: add_new: 新規追加 created_msg: ブラックリストに追加しました @@ -316,6 +354,8 @@ ja: all: すべて limited: 制限あり title: モデレーション + private_comment: コメント (非公開) + public_comment: コメント (公開) title: 既知のサーバー total_blocked_by_us: ブロック合計 total_followed_by_them: 被フォロー合計 @@ -345,6 +385,7 @@ ja: pending: リレーサーバーの承認待ちです save_and_enable: 保存して有効にする setup: リレー接続を設定する + signatures_not_enabled: セキュアモードまたはホワイトリストモードが有効の場合、リレーは正常に動作しません status: ステータス title: リレー report_notes: @@ -393,6 +434,16 @@ ja: custom_css: desc_html: 全ページに適用されるCSSの編集 title: カスタムCSS + default_noindex: + desc_html: この設定を変更していない全ユーザーに影響します + title: デフォルトで検索エンジンによるインデックスを拒否する + domain_blocks: + all: 誰にでも許可 + disabled: 誰にも許可しない + title: ドメインブロックを表示 + users: ログイン済みローカルユーザーのみ許可 + domain_blocks_rationale: + title: コメントを表示 hero: desc_html: フロントページに表示されます。サイズは600x100px以上推奨です。未設定の場合、標準のサムネイルが使用されます title: ヒーローイメージ @@ -416,17 +467,17 @@ ja: desc_html: 誰でも自分のアカウントを削除できるようにします title: アカウント削除を受け付ける min_invite_role: - disabled: 誰も許可しない + disabled: 誰にも許可しない title: 招待の作成を許可 registrations_mode: modes: approved: 登録には承認が必要 - none: 誰も許可しない + none: 誰にも許可しない open: 誰でも登録可 title: 新規登録 show_known_fediverse_at_about_page: - desc_html: チェックを入れるとプレビュー欄に既知の連合先全てのトゥートを表示します。外すとローカルのトゥートだけ表示します。 - title: タイムラインプレビューに連合タイムラインを表示する + desc_html: チェックを外すと、ランディングページからリンクされた公開タイムラインにローカルの公開トゥートのみ表示します。 + title: 公開タイムラインに連合先のコンテンツも表示する show_staff_badge: desc_html: ユーザーページにスタッフのバッジを表示します title: スタッフバッジを表示する @@ -443,19 +494,29 @@ ja: desc_html: 独自のプライバシーポリシーや利用規約、その他の法的根拠を記述できます。HTMLタグが使えます title: カスタム利用規約 site_title: サーバーの名前 + spam_check_enabled: + desc_html: 迷惑なメッセージを繰り返し送信するアカウントを自動で通報することができます。誤検知を含む可能性があります。 + title: スパム対策を有効にする thumbnail: desc_html: OpenGraphとAPIによるプレビューに使用されます。サイズは1200×630px推奨です title: サーバーのサムネイル timeline_preview: - desc_html: ランディングページに公開タイムラインを表示します - title: タイムラインプレビュー + desc_html: ランディングページに公開タイムラインへのリンクを表示し、認証なしでの公開タイムラインへの API アクセスを許可します + title: 公開タイムラインへの未認証のアクセスを許可する title: サイト設定 + trendable_by_default: + desc_html: 表示を拒否していないハッシュタグに影響します + title: 審査前のハッシュタグのトレンドへの表示を許可する + trends: + desc_html: 現在トレンドになっている承認済みのハッシュタグを公開します + title: トレンドタグを有効にする statuses: back_to_account: アカウントページに戻る batch: delete: 削除 nsfw_off: 閲覧注意をはずす nsfw_on: 閲覧注意にする + deleted: 削除済み failed_to_execute: 実行に失敗しました media: title: メディア @@ -463,21 +524,24 @@ ja: no_status_selected: 何も選択されていないため、変更されていません title: トゥート一覧 with_media: メディアあり - subscriptions: - callback_url: コールバックURL - confirmed: 確認済み - expires_in: 期限 - last_delivery: 最終配送 - title: WebSub - topic: トピック tags: - accounts: アカウント - hidden: 非表示 - hide: ディレクトリから隠す + accounts_today: 本日使用した人数 + accounts_week: 今週使用した人数 + breakdown: 直近のサーバー別使用状況 + context: 表示先 + directory: ディレクトリに使用 + in_directory: "%{count} 人がディレクトリに使用" + last_active: 最近使われた順 + most_popular: 使用頻度順 + most_recent: 新着順 name: ハッシュタグ + review: 審査状況 + reviewed: 審査済み title: ハッシュタグ - unhide: ディレクトリに表示する - visible: 表示 + trending_right_now: 現在のトレンド + unique_uses_today: 本日 %{count} 人がトゥートに使用 + unreviewed: 未審査 + updated_msg: ハッシュタグ設定が更新されました title: 管理 warning_presets: add_new: 追加 @@ -493,12 +557,23 @@ ja: body: "%{reporter} が %{target} を通報しました" body_remote: "%{domain} の誰かが %{target} を通報しました" subject: "%{instance} の新しい通報 (#%{id})" + new_trending_tag: + body: 'ハッシュタグ #%{name} が本日のトレンドになっていますが、審査がまだ行われていないためトレンドタグには表示されていません。一度許可すれば次回からこの操作は不要です。' + subject: "%{instance} で新しいハッシュタグ (#%{name}) が審査待ちです" + aliases: + add_new: エイリアスを作成 + created_msg: エイリアスを作成しました。これで以前のアカウントから引っ越しを開始できます。 + deleted_msg: エイリアスを削除しました。指定されていたアカウントからは引っ越しできなくなります。 + hint_html: 他のアカウントからこのアカウントにフォロワーを引き継いで引っ越したい場合、ここでエイリアスを作成しておく必要があります。エイリアス自体は<strong>無害で、取り消す</strong>ことができます。<strong>引っ越しは以前のアカウント側から開始する必要があります</strong>。 + remove: エイリアスを削除 appearance: advanced_web_interface: 上級者向け UI advanced_web_interface_hint: ディスプレイを幅いっぱいまで活用したい場合、上級者向け UI をおすすめします。ホーム、通知、連合タイムライン、更にはリストやハッシュタグなど、様々な異なるカラムから望む限りの情報を一度に受け取れるような設定が可能になります。 animations_and_accessibility: アニメーションとアクセシビリティー confirmation_dialogs: 確認ダイアログ + discovery: 見つける sensitive_content: 閲覧注意コンテンツ + toot_layout: トゥートレイアウト application_mailer: notification_preferences: メール設定の変更 salutation: "%{name} さん" @@ -518,9 +593,13 @@ ja: apply_for_account: 登録を申請する change_password: パスワード checkbox_agreement_html: <a href="%{rules_path}" target="_blank">サーバーのルール</a> と <a href="%{terms_path}" target="_blank">プライバシーポリシー</a> に同意します - confirm_email: メールアドレスの確認 + checkbox_agreement_without_rules_html: <a href="%{terms_path}" target="_blank">利用規約</a> に同意します delete_account: アカウントの削除 delete_account_html: アカウントを削除したい場合、<a href="%{path}">こちら</a> から手続きが行えます。削除する前に、確認画面があります。 + description: + prefix_invited_by_user: "@%{name} があなたをこの Mastodon サーバーに招待しました" + prefix_sign_up: 今すぐ Mastodon を始めよう! + suffix: アカウントがあれば、どんな Mastodon 互換サーバーのユーザーでもフォローしたりメッセージをやり取りできるようになります! didnt_get_confirmation: 確認メールを受信できませんか? forgot_password: パスワードをお忘れですか? invalid_reset_password_token: パスワードリセットトークンが正しくないか期限切れです。もう一度リクエストしてください。 @@ -538,6 +617,16 @@ ja: reset_password: パスワードを再発行 security: セキュリティ set_new_password: 新しいパスワード + setup: + email_below_hint_html: 下記のメールアドレスが間違っている場合、ここで変更することで新たに確認メールを受信できます。 + email_settings_hint_html: 確認用のメールを %{email} に送信しました。メールアドレスが正しくない場合、以下より変更することができます。 + title: セットアップ + status: + account_status: アカウントの状態 + confirming: メールアドレスの確認が完了するのを待っています。 + functional: アカウントは完全に機能しています。 + pending: あなたの申請は現在サーバー管理者による審査待ちです。これにはしばらくかかります。申請が承認されるとメールが届きます。 + redirecting_to: アカウントは %{acct} に引っ越し設定されているため非アクティブになっています。 trouble_logging_in: ログインできませんか? authorize_follow: already_following: あなたは既にこのアカウントをフォローしています @@ -550,6 +639,11 @@ ja: return: ユーザーのプロフィールを見る web: Web を開く title: "%{acct} をフォロー" + challenge: + confirm: 続ける + hint_html: 以後 1 時間はパスワードの再入力を求めません + invalid_password: パスワードが間違っています + prompt: 続行するにはパスワードを入力してください datetime: distance_in_words: about_x_hours: "%{count}時間" @@ -565,25 +659,33 @@ ja: x_months: "%{count}月" x_seconds: "%{count}秒" deletes: - bad_password_msg: パスワードが違います + challenge_not_passed: 入力された情報は正しくありません confirm_password: 本人確認のため、現在のパスワードを入力してください - description_html: あなたのアカウントに含まれるコンテンツは全て削除され、アカウントは無効化されます。これは恒久的なもので、<strong>取り消すことはできません</strong>。なりすましを防ぐために、同じユーザー名で再度登録することはできなくなります。 + confirm_username: 確認のためユーザー名を入力してください proceed: アカウントを削除する success_msg: アカウントは正常に削除されました - warning_html: 削除が保証されるのはこのサーバー上のコンテンツのみです。他のサーバー等、外部に広く共有されたコンテンツについては痕跡が残ることがあります。また、現在接続できないサーバーや、あなたの更新を受け取らなくなったサーバーに対しては、削除は反映されません。 - warning_title: 共有されたコンテンツについて + warning: + before: '続行する前に、次の点を再度確認してください:' + caches: 他のサーバーにコンテンツのキャッシュがずっと残る場合があります + data_removal: あなたの投稿やその他のデータはこのサーバーから完全に削除されます + email_change_html: アカウントを削除しなくても<a href="%{path}">メールアドレスを変更</a>できます + email_contact_html: それでも届かない場合、<a href="mailto:%{email}">%{email}</a> までメールで問い合わせてください + email_reconfirmation_html: 確認のメールが届かない場合、<a href="%{path}">もう一度申請</a>できます。 + irreversible: アカウントを元に戻したり復活させることはできません + more_details_html: 詳しくは<a href="%{terms_path}">プライバシーポリシー</a>をご覧ください。 + username_available: あなたのユーザー名は再利用できるようになります + username_unavailable: あなたのユーザー名は引き続き利用できません directories: directory: ディレクトリ - enabled: あなたはディレクトリに掲載されています。 - enabled_but_waiting: あなたはディレクトリへの掲載を選択しましたが、掲載に必要な最小フォロワー数 (%{min_followers} 人) を満たしていません。 explanation: 関心を軸にユーザーを発見しよう explore_mastodon: "%{title}を探索" - how_to_enable: あなたはディレクトリへの掲載を選択していません。下記から選択できます。ハッシュタグカラムに掲載するにはプロフィール文にハッシュタグを使用してください。 - people: - other: "%{count} 人" + domain_validator: + invalid_domain: は無効なドメイン名です errors: + '400': 送信されたリクエストは無効であるか、または不正なフォーマットです。 '403': このページを表示する権限がありません。 '404': お探しのページは見つかりませんでした。 + '406': このページは要求された形式では利用できません。 '410': お探しのページはもう存在しません。 '422': content: セキュリティ認証に失敗しました。Cookieをブロックしていませんか? @@ -592,6 +694,7 @@ ja: '500': content: もうしわけありませんが、なにかが間違っています。 title: このページは正しくありません + '503': 一時的なサーバー障害のため利用することができません。 noscript_html: Mastodonのウェブアプリケーションを利用する場合はJavaScriptを有効にしてください。またはあなたのプラットフォーム向けの<a href="%{apps_path}">Mastodonネイティブアプリ</a>を探すことができます。 existing_username_validator: not_found: そのようなユーザー名はローカルに見つかりませんでした @@ -615,6 +718,7 @@ ja: add_new: 追加 errors: limit: 注目のハッシュタグの上限に達しました + hint_html: "<strong>注目のハッシュタグとは?</strong>プロフィールページに目立つ形で表示され、そのハッシュタグのついたあなたの公開投稿だけを抽出して閲覧できるようにします。クリエイティブな仕事や長期的なプロジェクトを追うのに優れた機能です。" filters: contexts: home: ホームタイムライン @@ -635,10 +739,12 @@ ja: developers: 開発者向け more: さらに… resources: リソース + trending_now: トレンドタグ generic: all: すべて changes_saved_msg: 正常に変更されました! copy: コピー + no_batch_actions_available: このページに一括操作はありません order_by: 並び順 save_changes: 変更を保存 use_this: これを使う @@ -690,7 +796,7 @@ ja: '604800': 1 週間 '86400': 1 日 expires_in_prompt: 無期限 - generate: 作成 + generate: 招待リンクを作成 invited_by: '次の人に招待されました:' max_uses: other: "%{count}" @@ -709,9 +815,34 @@ ja: too_many: 追加できるファイルは4つまでです migrations: acct: 引っ越し先の ユーザー名@ドメイン - currently_redirecting: 'あなたのプロフィールは引っ越し先が設定されています:' - proceed: 保存 - updated_msg: アカウントの引っ越し設定を更新しました! + cancel: 引っ越しを取り消す + cancel_explanation: 引っ越しを取り消すと現在のアカウントが再度有効化されますが、引き継がれたフォロワーは戻されません。 + cancelled_msg: 引っ越し設定を取り消しました。 + errors: + already_moved: は既に引っ越したアカウントと同じです + missing_also_known_as: はこのアカウントとエイリアスの設定がされていません + move_to_self: 同じアカウントに引っ越すことはできません + not_found: 見つかりませんでした + on_cooldown: クールダウン期間中です + followers_count: 引き継がれるフォロワー + incoming_migrations: 別のアカウントから引っ越す + incoming_migrations_html: 別のアカウントからこのアカウントに引っ越すには、まず<a href="%{path}">アカウントエイリアスを作成</a>する必要があります。 + moved_msg: アカウントは %{acct} に引っ越し設定されており、フォロワーは引っ越し先に引き継がれています。 + not_redirecting: アカウントは現在引っ越し設定されていません。 + on_cooldown: あなたは最近アカウントを引っ越しました。この機能は %{count} 日後に再度利用できるようになります。 + past_migrations: 過去の引っ越し + proceed_with_move: フォロワーを引き継ぐ + redirecting_to: アカウントは %{acct} に引っ越し設定されています。 + set_redirect: 引っ越しを設定 + warning: + backreference_required: まずは引っ越し先のアカウントでこのアカウントに対しエイリアスを作成する必要があります + before: '続行する前に、次の点を再度確認してください:' + cooldown: 引っ越し後はクールダウン期間があります。その間再度引っ越すことはできません + disabled_account: 引っ越した後はデータのエクスポートと再有効化を除きほとんどの機能が利用できなくなります + followers: すべてのフォロワーを現在のアカウントから新しいアカウントに引き継ぎます + only_redirect_html: または、<a href="%{path}">フォロワーを残したまま引っ越す</a>こともできます。 + other_data: その他のデータは自動的に引き継がれません + redirect: プロフィールに引っ越し済みの通知が表示され、検索結果から除外されます moderation: title: モデレーション notification_mailer: @@ -806,10 +937,6 @@ ja: reply: proceed: 返信する prompt: '返信しようとしています:' - remote_unfollow: - error: エラー - title: タイトル - unfollowed: フォロー解除しました scheduled_statuses: over_daily_limit: その日予約できる投稿数 %{limit} を超えています over_total_limit: 予約できる投稿数 %{limit} を超えています @@ -836,7 +963,7 @@ ja: uc_browser: UCBrowser weibo: Weibo current_session: 現在のセッション - description: "%{browser} on %{platform}" + description: "%{platform} 上の %{browser}" explanation: あなたのMastodonアカウントに現在ログインしているウェブブラウザの一覧です。 ip: IP platforms: @@ -857,7 +984,8 @@ ja: title: セッション settings: account: アカウント - account_settings: セキュリティ + account_settings: アカウント設定 + aliases: アカウントエイリアス appearance: 外観 authorized_apps: 認証済みアプリ back: Mastodon に戻る @@ -876,6 +1004,8 @@ ja: profile: プロフィール relationships: フォロー・フォロワー two_factor_authentication: 二段階認証 + spam_check: + spam_detected: これは自動的に作成された通報です。スパムが検出されています。 statuses: attached: description: '添付: %{attached}' @@ -896,6 +1026,8 @@ ja: private: 非公開のトゥートを固定することはできません reblog: ブーストを固定することはできません poll: + total_people: + other: "%{count} 人" total_votes: other: "%{count}票" vote: 投票 @@ -913,6 +1045,8 @@ ja: pinned: 固定されたトゥート reblogged: さんがブースト sensitive_content: 閲覧注意 + tags: + does_not_match_previous_name: 以前の名前と一致しません terms: body_html: | <h2>プライバシーポリシー</h2> @@ -1005,9 +1139,9 @@ ja: default: "%Y年%m月%d日 %H:%M" month: "%Y年 %b" two_factor_authentication: - code_hint: 確認するには認証アプリで表示されたコードを入力してください + code_hint: 続行するには認証アプリで表示されたコードを入力してください description_html: "<strong>二段階認証</strong>を有効にするとログイン時、認証アプリからコードを入力する必要があります。" - disable: 無効 + disable: 無効化 enable: 有効 enabled: 二段階認証は有効になっています enabled_success: 二段階認証が有効になりました @@ -1030,12 +1164,14 @@ ja: disable: アカウントが凍結されている間、データはそのまま残りますが、凍結が解除されるまでは何の操作もできません。 silence: あなたのアカウントは制限されていますが、あなたをフォローしているユーザーのみ、このサーバー上の投稿を見ることができます。そしてあなたは様々な公開リストから除外されるかもしれません。ただし、他のユーザーは手動であなたをフォローすることができます。 suspend: あなたのアカウントは停止されています。あなたの投稿とアップロードされたメディアファイルは、このサーバーとあなたのフォロワーが参加していたサーバーから完全に削除されました。 + get_in_touch: このメールに返信することで %{instance} のスタッフと連絡を取ることができます。 review_server_policies: サーバーのポリシーを確認 + statuses: '特に次のトゥート:' subject: - disable: あなたのアカウント %{acct} は凍結されています + disable: あなたのアカウント %{acct} は凍結されました none: "%{acct} に対する警告" - silence: あなたのアカウント %{acct} はサイレンスにされています - suspend: あなたのアカウント %{acct} は停止されています + silence: あなたのアカウント %{acct} はサイレンスにされました + suspend: あなたのアカウント %{acct} は停止されました title: disable: アカウントが凍結されました none: 警告 diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 53057d860..0ab1f2d69 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -11,10 +11,6 @@ ka: contact_missing: არაა დაყენებული contact_unavailable: მიუწ. documentation: დოკუმენტაცია - extended_description_html: | - <h3>კარგი ადგილი წესებისთვის</h3> - <p>განვრცობილი აღწერილობა ჯერ არ შექმნილა.</p> - generic_description: "%{domain} ერთი სერვერია ქსელში" hosted_on: მასტოდონს მასპინძლობს %{domain} learn_more: გაიგე მეტი privacy_policy: კონფიდენციალურობის პოლიტიკა @@ -368,13 +364,6 @@ ka: no_status_selected: სატუსები არ შეცვლილა, რადგან არცერთი არ მონიშნულა title: ანგარიშის სტატუსები with_media: მედიით - subscriptions: - callback_url: ქოლბექ ურლ - confirmed: დამოწმდა - expires_in: ვადა გასდის - last_delivery: ბოლო მიღება - title: ვებ-საბი - topic: სათაური title: ადმინისტრაცია admin_mailer: new_report: @@ -397,7 +386,6 @@ ka: your_token: თქვენი წვდომის ტოკენი auth: change_password: პაროლი - confirm_email: ელ-ფოსტის დამოწმება delete_account: ანგარიშის გაუქმება delete_account_html: თუ გსურთ გააუქმოთ თქვენი ანგარიში, შეგიძლიათ <a href="%{path}">გააგრძელოთ აქ</a>. საჭირო იქნება დამოწმება. didnt_get_confirmation: არ მოგსვლიათ დამოწმების ინსტრუქციები? @@ -442,16 +430,14 @@ ka: x_months: "%{count}თვე" x_seconds: "%{count}წმ" deletes: - bad_password_msg: კარგად სცადეთ, ჰაკერებო! არასწორი პაროლი confirm_password: იდენტობის დასამოწმებლად შეიყვანეთ მიმდინარე პაროლი - description_html: ეს <strong>სამუდამოდ, დაუბრუნებლად</strong> გააუქმებს კონტენტს თქვენი ანგარიშიდან და მოახდენს მის დეაქტივაციას. მომხმარებლის სახელი კი, სამომავლო იმპერსონაციების შესაჩერებლად, გახდება რეზერვირებული. proceed: ანგარიშის გაუქმება success_msg: თქვენი ანგარიში წარმატებით გაუქმდა - warning_html: მოცულობის გაუქმება გარანტირებულია მხოლოდ ამ ინსტანციაზე. კონტენტი რომელიც ფართო მასშტაბით გაზიარდა უფრო დატოვებს კვალს. ოფლაინ სერვერები და სერვერები, რომლებმაც შეწყვიტეს თქვენი განახლებების გამოწერა არ განაახლებენ მონაცემთა ბაზებს. - warning_title: წვდომა გავრცელებულ კონტენტზე errors: + '400': The request you submitted was invalid or malformed. '403': ამ გვერდის ხილვის უფლება არ გაქვთ. '404': გვერდი რომელსაც ეძებთ არ არსებობს. + '406': This page is not available in the requested format. '410': გვერდი რომელსაც ეძებდით აღარ არსებობს. '422': content: უსაფრთხოების ვერიფიკაცია ვერ მოხერხდა. ბლოკავთ ქუქის? @@ -460,6 +446,7 @@ ka: '500': content: ბოდიში, ჩვენ მხარეს რაღაც არია. title: გვერდი არაა სწორი + '503': The page could not be served due to a temporary server failure. noscript_html: მასტოდონ ვებ-აპლიკაციის გამოყენებისთვის, გთხოვთ ჩართოთ ჯავასკრიპტი. სხვა შემთხვევაში, მასტოდონის თქვენი პატფორმისთვის სცადეთ გამოიყენოთ ერთ-ერთი <a href="%{apps_path}">მშობლიური აპლიკაცია</a>. exports: archive_takeout: @@ -540,9 +527,6 @@ ka: too_many: თან ვერ დაურთავთ 4 ფაილზე მეტს migrations: acct: username@domain ახალი ანგარიშის - currently_redirecting: 'თქვენი პროფილი გამართულია მოახდინოს გადამისამართება მისამართზე:' - proceed: შენახვა - updated_msg: თქვენი ანგარიშის მიგრაციის პარამეტრები წარმატეებით დამახსოვრდა! moderation: title: მოდერაცია notification_mailer: @@ -601,10 +585,6 @@ ka: no_account_html: არ გაქვთ ანგარიში? შეგიძლიათ <a href='%{sign_up_path}' target='_blank'>დარეგისტრირდეთ აქ</a> proceed: გააგრძელეთ გასაყოლად prompt: 'თქვენ გაჰყვებით:' - remote_unfollow: - error: შეცდომა - title: სათაური - unfollowed: დადევნების შეწყვეტა sessions: activity: ბოლო აქტივობა browser: ბრაუზერი diff --git a/config/locales/kk.yml b/config/locales/kk.yml index c6212c378..2b3f24e02 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -4,25 +4,45 @@ kk: about_hashtag_html: Бұл жерде <strong>#%{hashtag}</strong> хэштегімен жинақталған жазбалар. Желіге тіркеліп, сіз де қосыла аласыз бұл ортаға. about_mastodon_html: Mastodon - әлеуметтік желіге негізделген, тегін және веб протоколды, ашық кодты бағдарлама. Ол email сияқты орталығы жоқ құрылым. about_this: Туралы + active_count_after: актив + active_footnote: Соңғы айдағы актив қолданушылар (MAU) administered_by: 'Админ:' + api: API apps: Мобиль қосымшалар + apps_platforms: iOS, Android және басқа платформалардағы Mastodon қолданыңыз + browse_directory: Профильдер каталогын қажет фильтрлер арқылы қараңыз + browse_local_posts: Осы желідегі ашық посттар стримын қараңыз + browse_public_posts: Mastodon-дағы ашық посттар стримын қараңыз contact: Байланыс contact_missing: Бапталмаған contact_unavailable: Белгісіз + discover_users: Қолданушыларды іздеңіз documentation: Құжаттама - extended_description_html: | - <h3>Ережелерге арналған жақсы орын</h3> - <p>Әлі ештеңе жазылмапты</p> - generic_description: "%{domain} желідегі серверлердің бірі" + federation_hint_html: "%{instance} платформасындағы аккаунтыңыз арқылы Mastodon желісіндегі кез келген сервердегі қолданушыларға жазыла аласыз." + get_apps: Мобиль қосымшаны қолданып көріңіз hosted_on: Mastodon орнатылған %{domain} доменінде + instance_actor_flash: | + Бұл аккаунт кез-келген жеке пайдаланушыны емес, сервердің өзін көрсету үшін қолданылатын виртуалды актер. + Ол федерация мақсаттарында қолданылады және сіз барлығын бұғаттағыңыз келмейінше, бұғатталмауы керек, бұл жағдайда сіз домен блогын қолданған жөн. learn_more: Көбірек білу privacy_policy: Құпиялылық саясаты + see_whats_happening: Не болып жатқанын қараңыз + server_stats: 'Сервер статистикасы:' source_code: Ашық коды status_count_after: one: жазба other: жазба status_count_before: Барлығы + tagline: Достарыңызды оқыңыз және жаңа авторларды табыңыз terms: Қолдану шарттары + unavailable_content: Қолжетімсіз контент + unavailable_content_description: + domain: Сервер + reason: Себеп + rejecting_media: 'Бұл серверлердегі медиа файлдар өңделмейді немесе сақталмайды және түпнұсқаға қолмен басуды қажет ететін нобайлар көрсетілмейді:' + silenced: 'Осы серверлердегі жазбалар жалпы уақыт кестесінде және сөйлесулерде жасырын болады және егер сіз оларды бақыламасаңыз, олардың пайдаланушыларының өзара әрекеттестігі туралы ешқандай хабарламалар жасалмайды:' + suspended: 'Бұл серверлерден ешқандай дерек өңделмейді, сақталмайды немесе алмаспайды, бұл серверлердегі пайдаланушылармен өзара әрекеттесуді немесе байланыс орнатуды мүмкін етпейді:' + unavailable_content_html: Мастодон, әдетте, мазмұнды көруге және кез-келген басқа сервердегі пайдаланушылармен қарым-қатынас жасауға мүмкіндік береді. Бұл нақты серверде жасалған ерекше жағдайлар. user_count_after: one: қолданушы other: қолданушы @@ -30,6 +50,8 @@ kk: what_is_mastodon: Mastodon деген не? accounts: choices_html: "%{name} таңдаулары:" + endorsements_hint: Сіз веб-интерфейстен адамдарға қолдау көрсете аласыз және олар осында көрсетіледі. + featured_tags_hint: Мұнда көрсетілетін нақты хэштегтерді ұсына аласыз. follow: Жазылу followers: one: Оқырман @@ -41,6 +63,7 @@ kk: media: Медиа moved_html: "%{name} мына жерге көшті %{new_profile_link}:" network_hidden: Бұл ақпарат қолжетімді емес + never_active: Ешқашан nothing_here: Бұл жерде ештеңе жоқ! people_followed_by: "%{name} жазылған адамдар" people_who_follow: "%{name} атты қолданушының оқырмандары" @@ -56,6 +79,7 @@ kk: admin: Админ bot: Бот moderator: Мод + unavailable: Профиль қолжетімді емес unfollow: Оқымау admin: account_actions: @@ -67,6 +91,8 @@ kk: delete: Өшіру destroyed_msg: Модерация жазбасы өшірілді! accounts: + approve: Құптау + approve_all: Бәрін құптау are_you_sure: Шынымен бе? avatar: Аватар by_domain: Домен @@ -88,6 +114,7 @@ kk: display_name: Атын көрсет domain: Домен edit: Түзету + email: Пошта email_status: Email статусы enable: Қосу enabled: Қосылды @@ -98,6 +125,7 @@ kk: header: Басы inbox_url: Келген хаттар URL invited_by: Шақырған + ip: ІР joined: Қосылды location: all: Барлығы @@ -110,15 +138,18 @@ kk: moderation: active: Актив all: Барлығы + pending: Күтуде silenced: Үнсіз suspended: Тоқтатылды title: Модерация moderation_notes: Модерация жазбалары most_recent_activity: Соңғы белсенділіктер most_recent_ip: Соңғы ІР + no_account_selected: Бірде-бір аккаунт өзгерген жоқ, себебі ештеңе таңдалмады no_limits_imposed: Шектеу жоқ not_subscribed: Жазылмаған outbox_url: Кеткен хаттар URL + pending: Күтудегілерді қарау perform_full_suspension: Тоқтат profile_url: Профиль URL promote: Жарнамалау @@ -126,6 +157,8 @@ kk: public: Ашық push_subscription_expires: PuSH жазылу мерзімі аяқталады redownload: Профиль жаңарт + reject: Қабылдамау + reject_all: Бәрін қабылдамау remove_avatar: Аватар өшіру remove_header: Мұқаба суретін өшір resend_confirmation: @@ -135,7 +168,7 @@ kk: reset: Қалпына келтіру reset_password: Құпиясөзді қалпына келтіру resubscribe: Resubscribе - role: Қайта жазылу + role: Рұқсаттар roles: admin: Админ moderator: Модератор @@ -143,6 +176,7 @@ kk: user: Қолданушы salmon_url: Ақсерке URL search: Іздеу + search_same_ip: Осы ІРмен кірген басқа қолданушылар shared_inbox_url: Бөлісілген инбокс URL show: created_reports: Шағымдар жинағы @@ -152,6 +186,7 @@ kk: statuses: Статустар subscribe: Жазылу suspended: Тоқтатылды + time_in_queue: "%{time} күту" title: Аккаунттар unconfirmed_email: Құпталмаған email undo_silenced: Үнсіздікті қайтып алу @@ -160,6 +195,7 @@ kk: username: Логин warn: Ескерту web: Веб + whitelisted: Рұқсат тізімі action_logs: actions: assigned_to_self_report: "%{name} шағым тастады %{target} өздері үшін" @@ -167,10 +203,12 @@ kk: confirm_user: "%{name} e-mail адресін құптады - %{target}" create_account_warning: "%{name} ескерту жіберді - %{target}" create_custom_emoji: "%{name} жаңа эмодзи қосты %{target}" + create_domain_allow: "%{name} ақ тізімдегі домен %{target}" create_domain_block: "%{name} домен бұғаттады - %{target}" create_email_domain_block: "%{name} e-mail доменін қара тізімге қосты - %{target}" demote_user: "%{name} төмендетілген қолданушы - %{target}" destroy_custom_emoji: "%{name} эмодзи жойды %{target}" + destroy_domain_allow: "%{name} домені %{target} ақ тізімнен шығарылды" destroy_domain_block: "%{name} бұғатталмаған домен %{target}" destroy_email_domain_block: "%{name} e-mail доменін ақ тізімге кіргізді %{target}" destroy_status: "%{name} жазбасын өшірді %{target}" @@ -195,19 +233,24 @@ kk: deleted_status: "(өшірілген жазба)" title: Аудит логы custom_emojis: + assign_category: Санатты тағайындаңыз by_domain: Домен copied_msg: Жергілікті эмодзидің көшірмесі сәтті жасалды copy: Көшіру copy_failed_msg: Жергілікті эмодзидің көшірмесі жасалмады + create_new_category: Жаңа санат қосу created_msg: Эмодзи сәтті жаңартылды! delete: Өшіру destroyed_msg: Эмодзи сәтті жойылды! disable: Ажырату + disabled: Ажыратылды disabled_msg: Бұл эмодзи сәтті жойылды emoji: Эмодзи enable: Қосу + enabled: Қосылды enabled_msg: Эмодзи сәтті қосылды image_hint: PNG 50KB + list: Тізім listed: Тізілді new: title: Жаңа эмодзи қос @@ -215,11 +258,14 @@ kk: shortcode: Шорткод shortcode_hint: Кем дегенде 2 символ, тек латын әріптері мен асты сызылған таңбалар title: Таңдаулы эмодзилар + uncategorized: Санатсыз + unlist: Тізімге енбеген unlisted: Тізімде жоқ update_failed_msg: Бұл эмодзи жаңартылмады updated_msg: Эмодзи сәтті жаңартылды! upload: Жүктеу dashboard: + authorized_fetch_mode: Қауіпсіз режим backlog: босатылған тапсырмалар config: Конфигурация feature_deletions: Аккаунттарды жою @@ -227,9 +273,13 @@ kk: feature_profile_directory: Профиль каталогы feature_registrations: Тіркелулер feature_relay: Федерация релесі + feature_spam_check: Анти-спам + feature_timeline_preview: Таймлайн превьюі features: Мүмкіндіктер hidden_service: Жасырын қызметтер федерациясы open_reports: ашық шағымдар + pending_tags: хештегтер күтілуде + pending_users: қолданушылар күтілуде recent_users: Соңғы қолданушылар search: Толық мәтінмен іздеу single_user_mode: Жалғыз пайдаланушы режимі @@ -241,11 +291,19 @@ kk: week_interactions: осы аптадағы әрекеттер week_users_active: осы аптадағы белсенділік week_users_new: осы аптадағы қолданушылар + whitelist_mode: Рұқсат тізімі + domain_allows: + add_new: Рұқсат етілген домендер + created_msg: Доменге рұқсат берілді + destroyed_msg: Домен ақ тізімнен жойылды + undo: Ақ тізімнен шығару domain_blocks: add_new: Жаңа домен блокын қосу created_msg: Домендік блок енді өңделуде destroyed_msg: Домендік блок қалпына келтірілді domain: Домен + edit: Домен блокын өңдеу + existing_domain_block_html: Сіз %{name} үшін қатаң шектеулер қойдыңыз, алдымен <a href="%{unblock_url}"> бұғаттан босатуыңыз керек </a>. new: create: Блок құру hint: Домендік блок дерекқорда тіркелгі жазбаларын құруға кедергі жасамайды, бірақ сол есептік жазбаларда ретроактивті және автоматты түрде нақты модерация әдістерін қолданады. @@ -255,6 +313,10 @@ kk: silence: Үнсіз suspend: Тоқтатылған title: Жаңа домен блокы + private_comment: Құпия пікір + private_comment_hint: Модераторлардың ішкі қолдануы үшін осы доменнің шектеулілігі туралы түсініктеме. + public_comment: Ашық пікір + public_comment_hint: Егер доменде шектеулер тізімін жарнамалау мүмкіндігі болса, көпшілікке бұл доменнің шектеулілігі туралы түсініктеме беріңіз. reject_media: Медиа файлдарды қабылдамау reject_media_hint: Жергілікті сақталған мультимедиалық файлдарды жояды және болашақта кез келген жүктеуден бас тартады. Суспензияға байланысты емес reject_reports: Шағым қабылдамау @@ -274,6 +336,7 @@ kk: title: "%{domain} доменіндегі блокты алып таста" undo: Қайтару undo: Домен блокын қайтып алу + view: Домен блокын көрсету email_domain_blocks: add_new: Жаңасын қосу created_msg: Қаратізімге email домені қосылды @@ -297,6 +360,8 @@ kk: all: Барлығы limited: Лимит title: Модерация + private_comment: Құпия пікір + public_comment: Ашық пікір title: Федерация total_blocked_by_us: Біз бұғаттағандар total_followed_by_them: Олар жазылғандар @@ -311,6 +376,8 @@ kk: expired: Уақыты өткен title: Фильтр title: Шақырулар + pending_accounts: + title: Күтілген аккаунттар (%{count}) relays: add_new: Жаңа арна қосу delete: Өшіру @@ -324,6 +391,7 @@ kk: pending: Жаңа арна құпталуын күту save_and_enable: Сақта да қос setup: Арна байланысын баптау + signatures_not_enabled: Қорғаныс режимі немесе ақ тізім қосылған кезде реле дұрыс жұмыс істемейді status: Статус title: Арналар report_notes: @@ -372,6 +440,16 @@ kk: custom_css: desc_html: Әр беттегі өзгерістерді CSS жаңаруымен қарау title: Жеке CSS + default_noindex: + desc_html: Бұл параметрді өзгертпеген барлық пайдаланушыларға әсер етеді + title: Әдепкі бойынша іздеу жүйелерін индекстеуден бас тарту + domain_blocks: + all: Бәріне + disabled: Ешкімге + title: Домен блоктарын көрсету + users: Жергілікті қолданушыларға + domain_blocks_rationale: + title: Дәлелді көрсету hero: desc_html: Бастапқы бетінде көрсетіледі. Кем дегенде 600x100px ұсынылады. Орнатылмаған кезде, сервердің нобайына оралады title: Қаһарман суреті @@ -397,6 +475,12 @@ kk: min_invite_role: disabled: Ешкім title: Allow шақырулар by + registrations_mode: + modes: + approved: Тіркелу үшін мақұлдау қажет + none: Ешкім тіркеле алмайды + open: Бәрі тіркеле алады + title: Тіркелулер show_known_fediverse_at_about_page: desc_html: When toggled, it will show toots from all the known fediverse on preview. Otherwise it will only show жергілікті toots. title: Show known fediverse on timeline превью @@ -416,6 +500,9 @@ kk: desc_html: You can write your own privacy policy, terms of service or other legalese. You can use HTML тег title: Қолдану шарттары мен ережелер site_title: Сервер аты + spam_check_enabled: + desc_html: Мастодон бірнеше рет қажетсіз хабарламаларды жіберетін есептік жазбаларды автоматты түрде жасай алады. Жалған позитивтер болуы мүмкін. + title: Спамға қарсы автоматика thumbnail: desc_html: Used for previews via OpenGraph and API. 1200x630px рекоменделеді title: Сервер суреті @@ -423,12 +510,19 @@ kk: desc_html: Display public timeline on лендинг пейдж title: Таймлайн превьюі title: Сайт баптаулары + trendable_by_default: + desc_html: Бұрын тыйым салынбаған хэштегтерге әсер етеді + title: Хэштегтерге алдын-ала шолусыз тренд беруге рұқсат етіңіз + trends: + desc_html: Бұрын қарастырылған хэштегтерді қазіргі уақытта трендте көпшілікке көрсету + title: Тренд хештегтер statuses: back_to_account: Аккаунт бетіне оралы batch: delete: Delеte nsfw_off: Сезімтал емес ретінде белгіле nsfw_on: Сезімтал ретінде белгіле + deleted: Өшірілді failed_to_execute: Орындалмады media: title: Медиa @@ -436,21 +530,24 @@ kk: no_status_selected: Бірде-бір статус өзгерген жоқ, себебі ештеңе таңдалмады title: Аккаунт статустары with_media: Медиамен - subscriptions: - callback_url: Callbаck URL - confirmed: Confirmеd - expires_in: Expirеs in - last_delivery: Last dеlivery - title: WеbSub - topic: Tоpic tags: - accounts: Accоunts - hidden: Hiddеn - hide: Hidе from directory - name: Hаshtag + accounts_today: Бүгін қолданылғандар + accounts_week: Осы аптада қолданылғандар + breakdown: Бүгінгі пайдалану көздері бойынша бөлу + context: Контекст + directory: Бөлім ішінде + in_directory: "%{count} бөлім ішінде" + last_active: Соңғы белсенділік + most_popular: Ең танымал + most_recent: Ең соңғы + name: Хэштег + review: Статусты көрсету + reviewed: Көрілген title: Hashtаgs - unhide: Shоw in directory - visible: Visiblе + trending_right_now: Бұгінгі трендте + unique_uses_today: "%{count} бүгін жазылған" + unreviewed: Қаралды + updated_msg: Хэштег параметрлері сәтті жаңартылды title: Administrаtion warning_presets: add_new: Add nеw @@ -459,12 +556,33 @@ kk: edit_preset: Edit warning prеset title: Manage warning presеts admin_mailer: + new_pending_account: + body: Жаңа есептік жазба туралы мәліметтер төменде берілген. Бұл қолданбаны мақұлдауыңызға немесе қабылдамауыңызға болады. + subject: Жаңа аккаунт күтілуде %{instance} (#%{username}) new_report: body: "%{reporter} has rеported %{target}" body_remote: Someone from %{domain} has rеported %{target} subject: New rеport for %{instance} (#%{id}) + new_trending_tag: + body: "#%{name} хэштегі бүгін тренд, бірақ бұрын қарастырылмаған. Егер сіз оған рұқсат бермесеңіз немесе ол туралы ешқашан естімейтін болсаңыз, ол көпшілікке көрсетілмейді." + subject: Жаңа хештег күтілуде %{instance} (#%{name}) + aliases: + add_new: Алиас қосу + created_msg: Жаңа алиас сәтті жасалды. Енді сіз ескі аккаунттан көшіруді бастай аласыз. + deleted_msg: Алиасты сәтті алып тастаңыз. Осы есептік жазбадан екіншіге ауысу мүмкін болмайды. + hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is <strong>harmless and reversible</strong>. <strong>The account migration is initiated from the old account</strong>. + remove: Алиас сілтемесін алып тастау + appearance: + advanced_web_interface: Кеңейтілген веб-интерфейс + advanced_web_interface_hint: 'Егер сіз бүкіл экранның енін пайдаланғыңыз келсе, кеңейтілген веб-интерфейс сізге көптеген ақпаратты бір уақытта қалағанша көру үшін әр түрлі бағандарды конфигурациялауға мүмкіндік береді: негізгі бет, ескертпелер, жаһандық желі, тізім мен хэштегтерді.' + animations_and_accessibility: Анимациялар және қолжетімділік + confirmation_dialogs: Пікірталас диалогтары + discovery: Пікірталас + sensitive_content: Нәзік контент + toot_layout: Жазба формасы application_mailer: notification_preferences: Change e-mail prеferences + salutation: "%{name}," settings: 'Change e-mail preferеnces: %{link}' view: 'Viеw:' view_profile: Viеw Profile @@ -478,10 +596,16 @@ kk: warning: Be very carеful with this data. Never share it with anyone! your_token: Your access tokеn auth: + apply_for_account: Шақыруды сұрау change_password: Құпиясөз - confirm_email: Еmаil құптау + checkbox_agreement_html: Мен <a href="%{rules_path}" target="_blank">ережелер</a> мен <a href="%{terms_path}" target="_blank">шарттарды</a> қабылдаймын + checkbox_agreement_without_rules_html: Мен <a href="%{terms_path}" target="_blank">шарттармен</a> келісемін delete_account: Аккаунт өшіру delete_account_html: Аккаунтыңызды жойғыңыз келсе, <a href="%{path}">мына жерді</a> басыңыз. Сізден растау сұралатын болады. + description: + prefix_invited_by_user: "@%{name} сізді Желіге қосылуға шақырады!" + prefix_sign_up: Желіге бүгін қосылыңыз! + suffix: Аккаунтыңызбен сіз кез-келген Mastodon серверінен және желідегі басқа адамдарды оқып, пост жаза аласыз және хат алмаса аласыз! didnt_get_confirmation: Растау хаты келмеді ме? forgot_password: Құпиясөзіңізді ұмытып қалдыңыз ба? invalid_reset_password_token: Құпиясөз қайтып алу қолжетімді емес немесе мерзімі аяқталған. Қайтадан сұратыңыз. @@ -494,10 +618,22 @@ kk: cas: САS saml: SАML register: Тіркелу + registration_closed: "%{instance} жаңа мүшелер қабылдамайды" resend_confirmation: Растау нұсқаулықтарын жіберу reset_password: Құпиясөзді қалпына келтіру security: Қауіпсіздік set_new_password: Жаңа құпиясөз қою + setup: + email_below_hint_html: Егер төмендегі электрондық пошта мекенжайы дұрыс болмаса, оны осында өзгертіп, жаңа растау электрондық хатын ала аласыз. + email_settings_hint_html: Растау хаты %{email} адресіне жіберілді. Егер бұл электрондық пошта мекенжайы дұрыс болмаса, оны аккаунт параметрлерінде өзгертуге болады. + title: Баптау + status: + account_status: Аккаунт статусы + confirming: Электрондық поштаны растау аяқталуын күтуде. + functional: Сіздің есептік жазбаңыз толығымен жұмыс істейді. + pending: Сіздің өтінішіңіз біздің қызметкерлеріміздің қарауында. Бұл біраз уақыт алуы мүмкін. Өтінішіңіз мақұлданса, сізге электрондық пошта хабарламасы келеді. + redirecting_to: Сіздің есептік жазбаңыз белсенді емес, себебі ол %{acct} жүйесіне қайта бағытталуда. + trouble_logging_in: Кіру қиын ба? authorize_follow: already_following: Бұл аккаунтқа жазылғансыз error: Өкінішке орай, қашықтағы тіркелгіні іздеуде қате пайда болды @@ -509,6 +645,11 @@ kk: return: Қолданушы профилін көрсет web: Вебте ашу title: Жазылу %{acct} + challenge: + confirm: Жалғастыру + hint_html: "<strong> Кеңес: </strong> біз келесі сағат ішінде сізден құпия сөзді қайта сұрамаймыз." + invalid_password: Құпиясөз қате + prompt: Жалғастыру үшін құпия сөзді растаңыз datetime: distance_in_words: about_x_hours: "%{count}сағ" @@ -524,26 +665,33 @@ kk: x_months: "%{count}ай" x_seconds: "%{count}сек" deletes: - bad_password_msg: Болмады ма, хакер бала? Құпиясөз қате + challenge_not_passed: Сіз енгізген ақпарат дұрыс емес confirm_password: Қазіргі құпиясөзіңізді жазыңыз - description_html: This will <strong>permanently, irreversibly</strong> remove content from your account аnd deactivate it. Your username will remain reserved to prevent future impersonations. + confirm_username: Процедураны растау үшін логинді енгізіңіз proceed: Аккаунт өшіру success_msg: Аккаунтыңыз сәтті өшірілді - warning_html: Only deletion of content from this particular server is guaranteed. Content that has been widely sharеd is likely to leave traces. Offline servers and servers that have unsubscribed from your updates will not update their databases. - warning_title: Бөлінген мазмұнның қол жетімділігі + warning: + before: 'Жұмысты бастамас бұрын, осы жазбаларды мұқият оқып шығыңыз:' + caches: Басқа серверлер кэштеген мазмұн сақталуы мүмкін + data_removal: Сіздің жазбаларыңыз және басқа деректеріңіз толығымен жойылады + email_change_html: Аккаунтыңызды жоймай-ақ <a href="%{path}"> электрондық пошта мекенжайын өзгертуге болады </a> + email_contact_html: Егер әлі келмесе, көмек үшін <a href="mailto:%{email}">%{email} </a> мекен-жайына хат жібере аласыз + email_reconfirmation_html: Егер сіз растау электрондық хатын алмасаңыз, сіз <a href="%{path}"> оны қайтадан сұрай аласыз </a> + irreversible: Аккаунтты қалпына келтіре немесе қайта белсендіре алмайсыз + more_details_html: Қосымша мәліметтер алу үшін <a href="%{terms_path}"> құпиялылық саясатын </a> қараңыз. + username_available: Аккаунтыңыз қайтадан қолжетімді болады + username_unavailable: Логиніңіз қолжетімді болмайды directories: directory: Профильдер каталогы - enabled: Каталогтағы тізімге ендіңіз. - enabled_but_waiting: Каталогта көрінгіңіз келетінін түсінеміз, бірақ ол үшін кем дегенде (%{min_followers}) оқырманыңыз болуы қажет. explanation: Қолданушыларды қызығушылықтарына қарай реттеу explore_mastodon: "%{title} шарлау" - how_to_enable: Сіз қазіргі уақытта каталогқа қосылмағансыз. Төменде қосылуға болады. Арнайы био мәтініндегі хэштегтерді қолданыңыз! - people: - one: "%{count} адам" - other: "%{count} адам" + domain_validator: + invalid_domain: жарамды домен атауы емес errors: + '400': Сіз жіберген сұрау жарамсыз немесе дұрыс емес. '403': Бұны көру үшін сізде рұқсат жоқ. '404': Сіз іздеген бет бұл жерде емес екен. + '406': Бұл бет сұралған форматта қол жетімді емес. '410': Сіз іздеген бет қазір жоқ екен. '422': content: Қауіпсіздік растауы қате. кукилерді блоктағансыз ба? @@ -552,7 +700,11 @@ kk: '500': content: Кешірерсіз, бірақ қазір бір қате пайда болып тұр. title: Бұл бет дұрыс емес екен + '503': Уақытша сервер қатесі себебінен параққа қызмет көрсету мүмкін болмады. noscript_html: Mastodon веб қосымшасын қолдану үшін, JavaScript қосыңыз. Болмай жатса, <a href="%{apps_path}">мына қосымшаларды</a> қосып көріңіз, Mastodon қолдану үшін. + existing_username_validator: + not_found: осындай логині бар бар жергілікті пайдаланушы табылмады + not_found_multiple: табылмады %{usernames} exports: archive_takeout: date: Уақыты @@ -572,6 +724,7 @@ kk: add_new: Жаңасын қосу errors: limit: Хэштег лимитинен асып кеттіңіз + hint_html: "<strong> Ерекшеліктері бар хэштегтер дегеніміз не? </strong> Олар жалпыға қол жетімді профильде көрсетіледі және адамдарға сіздің жалпы хабарламаларыңызды сол хэштегтердің астына қарауға мүмкіндік береді. Олар шығармашылық жұмыстарды немесе ұзақ мерзімді жобаларды бақылаудың тамаша құралы." filters: contexts: home: Ішкі желі @@ -592,13 +745,37 @@ kk: developers: Жасаушылар more: Тағы… resources: Ресурстар + trending_now: Бүгінгі трендтер generic: + all: Барлығы changes_saved_msg: Өзгерістер сәтті сақталды! copy: Көшіру + no_batch_actions_available: Бұл бетте ешқандай әрекет жоқ + order_by: Сұрыптау save_changes: Өзгерістерді сақтау validation_errors: one: Бір нәрсе дұрыс емес! Төмендегі қатені қараңыз other: Бір нәрсе дұрыс емес! Төмендегі %{count} қатені қараңыз + html_validator: + invalid_markup: 'жарамсыз HTML код: %{error}' + identity_proofs: + active: Актив + authorize: Иә, авторластырыңыз + authorize_connection_prompt: Осы криптографиялық қосылымға рұқсат бересіз бе? + errors: + failed: Криптографиялық байланыс сәтсіз аяқталды. %{provider} әрекетті қайталаңыз. + keybase: + invalid_token: Пернетақтаның таңбалауыштары қолтаңбалар болып табылады және олар 66 таңбадан тұруы керек + verification_failed: Keybase бұл белгіні Keybase пайдаланушысының %{kb_username} қолтаңбасы ретінде танымайды. Keybase-тен қайталап көріңіз. + wrong_user: "%{current} ретінде кірген кезде %{proving} үшін дәлелдер жасау мүмкін емес. %{proving} ретінде кіріп, әрекетті қайталаңыз." + explanation_html: Мұнда сіз өзіңіздің жеке басыңызды, мысалы, Keybase профилі сияқты криптографиялық түрде байланыстыра аласыз. Бұл сізге басқа адамдарға шифрланған хабарламаларды жіберуге және сіз жіберетін мазмұнға сенімді болуға мүмкіндік береді. + i_am_html: Мен %{username} атты қолданушымын - %{service}. + identity: Жеке бас куәлігі + inactive: Инактив + publicize_checkbox: 'Түрт мынаны:' + publicize_toot: 'Керемет! Мен енді %{username} болып тіркелдім %{service}: %{url}' + status: Тексеру күйі + view_proof: Пруф көрсету imports: modes: merge: Біріктіру @@ -645,9 +822,34 @@ kk: too_many: 4 файлдан артық қосылмайды migrations: acct: жаңа аккаунт үшін username@domain - currently_redirecting: 'Профиліңіз көшіріледі:' - proceed: Сақтау - updated_msg: Аккаунт көшіруіңіз сәтті аяқталды! + cancel: Редайректті қайтару + cancel_explanation: Бағыттауды болдырмау сіздің ағымдағы есептік жазбаңызды қайта іске қосады, бірақ сол тіркелгіге көшкен оқырмандарды қайтармайды. + cancelled_msg: Редайрект қайтарылды. + errors: + already_moved: бұл сіз ауысқан есептік жазба + missing_also_known_as: бұл тіркелгіге сілтеме жасамайды + move_to_self: ағымдағы шот болуы мүмкін емес + not_found: табылмады + on_cooldown: You are on cooldown + followers_count: Көшу кезіндегі оқырмандар + incoming_migrations: Moving from a different account + incoming_migrations_html: To move from another account to this one, first you need to <a href="%{path}">create an account alias</a>. + moved_msg: Your account is now redirecting to %{acct} and your followers are being moved over. + not_redirecting: Your account is not redirecting to any other account currently. + on_cooldown: You have recently migrated your account. This function will become available again in %{count} days. + past_migrations: Past migrations + proceed_with_move: Move followers + redirecting_to: Your account is redirecting to %{acct}. + set_redirect: Set redirect + warning: + backreference_required: The new account must first be configured to back-reference this one + before: 'Жұмысты бастамас бұрын, осы жазбаларды мұқият оқып шығыңыз:' + cooldown: After moving there is a cooldown period during which you will not be able to move again + disabled_account: Your current account will not be fully usable afterwards. However, you will have access to data export as well as re-activation. + followers: This action will move all followers from the current account to the new account + only_redirect_html: Alternatively, you can <a href="%{path}">only put up a redirect on your profile</a>. + other_data: No other data will be moved automatically + redirect: Your current account's profile will be updated with a redirect notice and be excluded from searches moderation: title: Модерация notification_mailer: @@ -687,9 +889,11 @@ kk: number: human: decimal_units: + format: "%n%u" units: billion: В million: М + quadrillion: Q thousand: К trillion: Т pagination: @@ -697,6 +901,7 @@ kk: next: Келесі older: Ерте prev: Алдыңғы + truncate: "…" polls: errors: already_voted: Бұл сауалнамаға қатысқансыз @@ -709,6 +914,21 @@ kk: too_many_options: "%{max} жауаптан көп болмайды" preferences: other: Басқа + posting_defaults: Пост жазу негіздері + public_timelines: Ашық таймлайндар + relationships: + activity: Аккаунт белсенділігі + dormant: Ұйқысыз + last_active: Соңғы белсенділік + most_recent: Ең соңғы + moved: Көшірілді + mutual: Өзара + primary: Бастапқы + relationship: Қарым-қатынас + remove_selected_domains: Таңдалған домендерден барлық оқырмандарды алып тастаңыз + remove_selected_followers: Таңдалған оқырмандарды өшіру + remove_selected_follows: Таңдалған қолданушыларды оқымау + status: Аккаунт статусы remote_follow: acct: Өзіңіздің username@domain теріңіз missing_resource: Аккаунтыңызға байланған URL табылмады @@ -726,10 +946,6 @@ kk: reply: proceed: Жауап жазу prompt: 'Сіз мына жазбаға жауап жазасыз:' - remote_unfollow: - error: Қате - title: Тақырыбы - unfollowed: Жазылудан бас тартылды scheduled_statuses: over_daily_limit: Сіз бір күндік %{limit} жазба лимитін тауыстыңыз over_total_limit: Сіз %{limit} жазба лимитін тауыстыңыз @@ -776,6 +992,10 @@ kk: revoke_success: Сессиялар сәтті жабылды title: Сессиялар settings: + account: Аккаунт + account_settings: Аккаунт баптаулары + aliases: Аккаунт алиастары + appearance: Сыртқы түрі authorized_apps: Authorizеd apps back: Желіге оралу delete: Аккаунт өшіру @@ -783,11 +1003,17 @@ kk: edit_profile: Профиль өңдеу export: Экспорт уақыты featured_tags: Таңдаулы хэштегтер + identity_proofs: Жеке куәлік import: Импорт + import_and_export: Импорт/экспорт migrate: Аккаунт көшіру notifications: Ескертпелер - preferences: Таңдаулар + preferences: Баптаулар + profile: Профиль + relationships: Жазылымдар және оқырмандар two_factor_authentication: Екі-факторлы авторизация + spam_check: + spam_detected: Бұл автоматтандырылған есеп. Спам анықталды. statuses: attached: description: 'Жүктелді: %{attached}' @@ -811,12 +1037,16 @@ kk: private: Жабық жазба жабыстырылмайды reblog: Бөлісілген жазба жабыстырылмайды poll: + total_people: + one: "%{count} адам" + other: "%{count} адам" total_votes: one: "%{count} дауыс" other: "%{count} дауыс" vote: Дауыс беру show_more: Тағы әкел sign_in_to_participate: Сұхбатқа қатысу үшін кіріңіз + title: '%{name}: "%{quote}"' visibilities: private: Тек оқырмандарға private_long: Тек оқырмандарға ғана көрінеді @@ -828,6 +1058,8 @@ kk: pinned: Жабыстырылған жазба reblogged: бөлісті sensitive_content: Нәзік мазмұн + tags: + does_not_match_previous_name: алдыңғы атқа сәйкес келмейді terms: body_html: | <h2>Құпиялылық шарттары</h2> @@ -915,6 +1147,10 @@ kk: contrast: Mastodon (Жоғары контраст) default: Mastodon (Қою) mastodon-light: Mastodon (Ашық) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: Растау үшін түпнұсқалықты растау бағдарламасы арқылы жасалған кодты енгізіңіз description_html: "<strong>екі факторлы түпнұсқалықты растауды</strong> қоссаңыз, кіру үшін сізге телефонға кіруіңізді талап етеді, сізге арнайы токен беріледі." @@ -941,7 +1177,9 @@ kk: disable: Аккаунтыңыз қатып қалса, сіздің деректеріңіз өзгеріссіз қалады, бірақ ол құлыптан босатылғанша ешқандай әрекетті орындай алмайсыз. silence: While your account is limited, only people who are already following you will see your toots on this server, and you may be excluded from various public listings. However, others may still manually follоw you. suspend: Сіздің аккаунтыңыз уақытша тоқтатылды және сіздің барлық файлдарыңыз бен жүктеп салынған медиа файлдарыңыз осы серверлерден және оқырманы болған серверлерден қайтарылмайды. + get_in_touch: Сіз бұл электронды поштаға %{instance} қызметкерлерімен байланысу үшін жауап бере аласыз. review_server_policies: Сервер саясатын қарап шығыңыз + statuses: 'Арнайы:' subject: disable: Аккаунтыңыз %{acct} уақытша тоқтатылды none: "%{acct} ескертуі" diff --git a/config/locales/kn.yml b/config/locales/kn.yml new file mode 100644 index 000000000..d6c1d98eb --- /dev/null +++ b/config/locales/kn.yml @@ -0,0 +1,20 @@ +--- +kn: + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Throttled + '500': + '503': The page could not be served due to a temporary server failure. + invites: + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 3f14d5df6..ceeadfb36 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1,7 +1,7 @@ --- ko: about: - about_hashtag_html: "<strong>#%{hashtag}</strong> 라는 해시태그가 붙은 공개 툿 입니다. 같은 연합에 속한 임의의 인스턴스에 계정을 생성하면 당신도 대화에 참여할 수 있습니다." + about_hashtag_html: "<strong>#%{hashtag}</strong> 해시태그가 붙은 공개 툿 입니다. 같은 연합에 속한 임의의 인스턴스에 계정을 생성하면 당신도 대화에 참여할 수 있습니다." about_mastodon_html: 마스토돈은 <em>오픈 소스 기반의</em> 소셜 네트워크 서비스 입니다. 상용 플랫폼의 대체로서 <em>분산형 구조</em>를 채택해, 여러분의 대화가 한 회사에 독점되는 것을 방지합니다. 신뢰할 수 있는 인스턴스를 선택하세요 — 어떤 인스턴스를 고르더라도, 누구와도 대화할 수 있습니다. 누구나 자신만의 마스토돈 인스턴스를 만들 수 있으며, 아주 매끄럽게 <em>소셜 네트워크</em>에 참가할 수 있습니다. about_this: 이 인스턴스에 대해서 active_count_after: 활성 사용자 @@ -10,20 +10,20 @@ ko: api: API apps: 모바일 앱 apps_platforms: 마스토돈을 iOS, 안드로이드, 다른 플랫폼들에서도 사용하세요 - browse_directory: 프로필 디렉터리를 둘러보고 관심사 찾기 + browse_directory: 프로필 디렉토리를 둘러보고 관심사 찾기 + browse_local_posts: 이 서버의 공개글 실시간 스트림을 둘러보기 browse_public_posts: 마스토돈의 공개 라이브 스트림을 둘러보기 contact: 연락처 contact_missing: 미설정 contact_unavailable: 없음 discover_users: 유저 발견하기 documentation: 문서 - extended_description_html: | - <h3>룰을 작성하는 장소</h3> - <p>아직 설명이 작성되지 않았습니다.</p> federation_hint_html: "%{instance}에 계정을 만드는 것으로 모든 마스토돈 서버, 그리고 호환 되는 모든 서버의 사용자를 팔로우 할 수 있습니다." - generic_description: "%{domain} 은 네트워크에 있는 한 서버입니다" get_apps: 모바일 앱 사용해 보기 hosted_on: "%{domain}에서 호스팅 되는 마스토돈" + instance_actor_flash: | + 이 계정은 가상의 actor로서 개인 유저가 아닌 서버 자체를 나타냅니다. + 이것은 페더레이션을 목적으로 사용 되며 인스턴스 전체를 차단하려 하지 않는 이상 차단하지 않아야 합니다, 그 경우에는 도메인 차단을 사용하세요. learn_more: 자세히 privacy_policy: 개인정보 정책 see_whats_happening: 무슨 일이 일어나는 지 보기 @@ -34,12 +34,22 @@ ko: status_count_before: 툿 수 tagline: 친구들을 팔로우 하고 새로운 사람들도 만나기 terms: 이용약관 + unavailable_content: 이용 불가능한 컨텐츠 + unavailable_content_description: + domain: 서버 + reason: 이유 + rejecting_media: 이 서버의 미디어 파일들은 처리되지 않고 썸네일또한 보이지 않게 됩니다. 수동으로 클릭하여 해당 서버로 가게 됩니다. + silenced: 이 서버의 게시물은 작성자를 팔로우 한 경우에만 홈 피드에 나타나며 이를 제외한 어디에도 나타나지 않습니다. + suspended: 이 서버의 아무도 팔로우 할 수 없으며, 어떤 데이터도 처리되거나 저장 되지 않고 데이터가 교환 되지도 않습니다. + unavailable_content_html: 마스토돈은 일반적으로 연합우주에 있는 어떤 서버의 유저와도 게시물을 보고 응답을 할 수 있도록 허용합니다. 다음 항목들은 특정한 서버에 대해 만들어 진 예외사항입니다. user_count_after: other: 명 user_count_before: 사용자 수 what_is_mastodon: 마스토돈이란? accounts: choices_html: "%{name}의 추천:" + endorsements_hint: 내가 팔로우 하고 있는 사람들을 여기에 추천 할 수 있습니다. + featured_tags_hint: 특정한 해시태그들을 여기에 표시되도록 할 수 있습니다. follow: 팔로우 followers: other: 팔로워 @@ -50,6 +60,7 @@ ko: media: 미디어 moved_html: "%{name}은 %{new_profile_link}으로 이동되었습니다:" network_hidden: 이 정보는 사용할 수 없습니다 + never_active: 없음 nothing_here: 아무 것도 없습니다! people_followed_by: "%{name} 님이 팔로우 중인 계정" people_who_follow: "%{name} 님을 팔로우 중인 계정" @@ -161,6 +172,7 @@ ko: user: 사용자 salmon_url: Salmon URL search: 검색 + search_same_ip: 같은 IP의 다른 사용자들 shared_inbox_url: 공유된 inbox URL show: created_reports: 이 계정에서 제출된 신고 @@ -179,6 +191,7 @@ ko: username: 아이디 warn: 경고 web: 웹 + whitelisted: 허용 목록 action_logs: actions: assigned_to_self_report: "%{name}이 리포트 %{target}을 자신에게 할당했습니다" @@ -204,29 +217,34 @@ ko: reopen_report: "%{name}이 리포트 %{target}을 다시 열었습니다" reset_password_user: "%{name}이 %{target}의 암호를 초기화했습니다" resolve_report: "%{name}이 %{target} 신고를 처리됨으로 변경하였습니다" - silence_account: "%{name}이 %{target}의 계정을 뮤트시켰습니다" + silence_account: "%{name}이 %{target}의 계정을 침묵시켰습니다" suspend_account: "%{name}이 %{target}의 계정을 정지시켰습니다" unassigned_report: "%{name}이 리포트 %{target}을 할당 해제했습니다" - unsilence_account: "%{name}이 %{target}에 대한 뮤트를 해제했습니다" + unsilence_account: "%{name}이 %{target}에 대한 침묵을 해제했습니다" unsuspend_account: "%{name}이 %{target}에 대한 정지를 해제했습니다" update_custom_emoji: "%{name}이 에모지 %{target}를 업데이트 했습니다" update_status: "%{name}이 %{target}의 상태를 업데이트 했습니다" deleted_status: "(삭제됨)" title: 감사 기록 custom_emojis: + assign_category: 분류 지정 by_domain: 도메인 copied_msg: 성공적으로 에모지의 로컬 복사본을 생성했습니다 copy: 복사 copy_failed_msg: 에모지의 로컬 복사본을 만드는 데 실패하였습니다 + create_new_category: 분류 생성 created_msg: 에모지가 성공적으로 생성되었습니다! delete: 삭제 destroyed_msg: 에모지가 성공적으로 삭제되었습니다! disable: 비활성화 + disabled: 비활성 disabled_msg: 성공적으로 비활성화하였습니다 emoji: 에모지 enable: 활성화 + enabled: 활성됨 enabled_msg: 성공적으로 활성화하였습니다 image_hint: 50KB 이하의 PNG + list: 목록 listed: 목록에 실림 new: title: 새 커스텀 에모지 추가 @@ -234,11 +252,14 @@ ko: shortcode: 짧은 코드 shortcode_hint: 최소 2글자, 영문자, 숫자, _만 사용 가능 title: 커스텀 에모지 + uncategorized: 분류되지 않음 + unlist: 목록에서 제거 unlisted: 목록에 없음 update_failed_msg: 에모지를 업데이트 할 수 없습니다 updated_msg: 에모지가 성공적으로 업데이트 되었습니다! upload: 업로드 dashboard: + authorized_fetch_mode: 인증 된 페치 모드 backlog: 미처리 된 작업 config: 설정 feature_deletions: 계정 삭제 @@ -246,10 +267,13 @@ ko: feature_profile_directory: 프로필 디렉토리 feature_registrations: 가입 feature_relay: 연합 릴레이 + feature_spam_check: 안티 스팸 feature_timeline_preview: 타임라인 미리보기 features: 기능 hidden_service: 히든 서비스와의 연합 open_reports: 미해결 신고 + pending_tags: 심사를 기다리는 해시태그 + pending_users: 심사를 기다리는 유저 recent_users: 최근 가입 한 유저 search: 전문 검색 single_user_mode: 싱글 유저 모드 @@ -261,11 +285,18 @@ ko: week_interactions: 이번 주의 상호작용 week_users_active: 이번 주의 활성 사용자 week_users_new: 이번 주의 신규 유저 + whitelist_mode: 화이트리스트 모드 + domain_allows: + add_new: 허용 된 도메인 + created_msg: 도메인이 성공적으로 허용 목록에 추가되었습니다 + destroyed_msg: 도메인이 허용 목록에서 제거되었습니다 + undo: 허용 목록에서 제외 domain_blocks: add_new: 도메인 차단 추가하기 created_msg: 도메인 차단 처리를 완료했습니다 destroyed_msg: 도메인 차단이 해제되었습니다 domain: 도메인 + edit: 도메인 차단 수정 existing_domain_block_html: 이미 %{name}에 대한 더 강력한 제한이 걸려 있습니다, <a href="%{unblock_url}">차단 해제</a>를 먼저 해야 합니다. new: create: 차단 추가 @@ -278,6 +309,10 @@ ko: silence: 침묵 suspend: 정지 title: 새로운 도메인 차단 + private_comment: 비공개 주석 + private_comment_hint: 이 도메인 제한에 대한 주석은 모더레이터를 위해 내부적으로 사용 됩니다. + public_comment: 공개 주석 + public_comment_hint: 이 도메인 제한에 대한 공개적인 주석, 도메인 제한 공개를 활성화 한 경우 보여집니다. reject_media: 미디어 파일 거부하기 reject_media_hint: 로컬에 저장된 미디어 파일을 삭제하고, 이후로도 다운로드를 거부합니다. 정지와는 관계 없습니다 reject_reports: 신고 거부 @@ -296,6 +331,7 @@ ko: title: "%{domain}의 도메인 차단을 해제" undo: 실행 취소 undo: 도메인 차단 취소 + view: 도메인 차단 보기 email_domain_blocks: add_new: 새로 추가 created_msg: 이메일 도메인 차단 규칙을 생성했습니다 @@ -318,6 +354,8 @@ ko: all: 모두 limited: 제한됨 title: 모더레이션 + private_comment: 비공개 주석 + public_comment: 공개 주석 title: 연합 total_blocked_by_us: 우리에게 차단 됨 total_followed_by_them: 우리를 팔로우 @@ -347,6 +385,7 @@ ko: pending: 릴레이의 승인 대기중 save_and_enable: 저장하고 활성화 setup: 릴레이 연결 설정 + signatures_not_enabled: 시큐어모드나 화이트리스트모드를 사용하고 있다면 릴레이는 제대로 동작하지 않을 것입니다 status: 상태 title: 릴레이 report_notes: @@ -395,6 +434,16 @@ ko: custom_css: desc_html: 모든 페이지에 적용할 CSS title: 커스텀 CSS + default_noindex: + desc_html: 이 설정을 바꾸지 않은 모든 유저들에게 적용 됩니다 + title: 유저들이 기본적으로 검색엔진에 인덱싱 되지 않도록 합니다 + domain_blocks: + all: 모두에게 + disabled: 아무에게도 안 함 + title: 도메인 차단 보여주기 + users: 로그인 한 유저에게 + domain_blocks_rationale: + title: 사유 보여주기 hero: desc_html: 프론트페이지에 표시 됩니다. 최소 600x100픽셀을 권장합니다. 만약 설정되지 않았다면, 서버의 썸네일이 사용 됩니다 title: 히어로 이미지 @@ -415,7 +464,7 @@ ko: desc_html: 신규 등록을 받지 않을 때 프론트 페이지에 표시됩니다. HTML 태그를 사용할 수 있습니다 title: 신규 등록 정지 시 메시지 deletion: - desc_html: 유저가 자신의 계정을 삭제할 수 있도록 설정합니다 + desc_html: 유저가 자신의 계정을 삭제할 수 있도록 허용합니다 title: 계정 삭제를 허가함 min_invite_role: disabled: 아무도 못 하게 @@ -445,6 +494,9 @@ ko: desc_html: 당신은 독자적인 개인정보 취급 방침이나 이용약관, 그 외의 법적 근거를 작성할 수 있습니다. HTML태그를 사용할 수 있습니다 title: 커스텀 서비스 이용 약관 site_title: 서버 이름 + spam_check_enabled: + desc_html: 마스토돈은 반복된 메시지 등의 측정값에 따라 자동으로 계정을 침묵, 신고할 수 있습니다. 위양성(False-positive)이 존재할 수 있습니다. + title: 안티 스팸 thumbnail: desc_html: OpenGraph와 API의 미리보기로 사용 됩니다. 1200x630px을 권장합니다 title: 서버 썸네일 @@ -452,12 +504,19 @@ ko: desc_html: 랜딩 페이지에 공개 타임라인을 표시합니다 title: 타임라인 프리뷰 title: 사이트 설정 + trendable_by_default: + desc_html: 이전에 거부되지 않은 해시태그들에 영향을 미칩니다 + title: 해시태그가 사전 리뷰 없이 트렌드에 올라갈 수 있도록 허용 + trends: + desc_html: 리뷰를 거친 해시태그를 유행하는 해시태그에 공개적으로 보여줍니다 + title: 유행하는 해시태그 statuses: back_to_account: 계정으로 돌아가기 batch: delete: 삭제 nsfw_off: NSFW 끄기 nsfw_on: NSFW 켜기 + deleted: 삭제됨 failed_to_execute: 실행을 실패하였습니다 media: title: 미디어 @@ -465,21 +524,24 @@ ko: no_status_selected: 아무 것도 선택 되지 않아 아무 것도 바뀌지 않았습니다 title: 계정 툿 with_media: 미디어 있음 - subscriptions: - callback_url: 콜백 URL - confirmed: 확인됨 - expires_in: 기한 - last_delivery: 최종 발송 - title: WebSub - topic: 토픽 tags: - accounts: 계정들 - hidden: 숨겨짐 - hide: 디렉토리에서 숨기기 + accounts_today: 오늘의 순 사용자 + accounts_week: 금주의 순 사용자 + breakdown: 소스별 오늘의 사용량 분석 + context: 문맥 + directory: 디렉토리에 있음 + in_directory: 디렉토리에 %{count}개 있음 + last_active: 최근 활동 + most_popular: 최고 인기 + most_recent: 최신 name: 해시태그 + review: 심사 상태 + reviewed: 심사 됨 title: 해시태그 - unhide: 디렉토리에 표시 - visible: 보여짐 + trending_right_now: 지금 유행 중 + unique_uses_today: 오늘 %{count}명이 포스팅 + unreviewed: 심사 되지 않음 + updated_msg: 해시태그 설정이 성공적으로 갱신되었습니다 title: 관리 warning_presets: add_new: 새로 추가 @@ -495,12 +557,23 @@ ko: body: "%{reporter} 가 %{target} 를 신고했습니다" body_remote: "%{domain}의 누군가가 %{target}을 신고했습니다" subject: "%{instance} 에 새 신고 등록됨 (#%{id})" + new_trending_tag: + body: '오늘 #%{name} 해시태그가 유행하고 있습니다, 하지만 심사 된 적이 없습니다. 허용하지 않는 한 공개적으로 나타나지 않습니다. 또는 그냥 저장을 눌러 더이상 나타나지 않게 할 수 있습니다.' + subject: 새 해시태그가 %{instance}에서 심사 대기 중입니다(#%{name}) + aliases: + add_new: 별칭 만들기 + created_msg: 새 별칭이 성공적으로 만들어졌습니다. 이제 기존 계정에서 이주를 시작할 수 있습니다. + deleted_msg: 성공적으로 별칭을 삭제했습니다. 해당 계정에서 이 계정으로의 이주는 더이상 가능하지 않습니다. + hint_html: 다른 계정에서 이 계정으로 옮기길 원하는 경우, 여기에서 별칭을 만들 수 있습니다, 기존 계정의 팔로워를 이쪽으로 옮기고 싶은 경우 필요한 과정입니다. 이 행동 자체는 <strong>해롭지 않고 되돌리기가 가능합니다</strong>.<strong>계정 이주는 이전 계정에서 착수하게 됩니다</strong> + remove: 별칭 연결 끊기 appearance: advanced_web_interface: 고급 웹 인터페이스 advanced_web_interface_hint: '화면의 가로폭을 가득 채우고 싶다면, 고급 웹 인터페이스는 한 번에 여러 정보를 볼 수 있도록 여러 컬럼을 설정할 수 있도록 합니다: 홈, 알림, 연합타임라인, 리스트, 해시태그 등' animations_and_accessibility: 애니메이션과 접근성 confirmation_dialogs: 확인 대화상자 + discovery: 발견하기 sensitive_content: 민감한 내용 + toot_layout: 툿 레이아웃 application_mailer: notification_preferences: 메일 설정 변경 salutation: "%{name} 님," @@ -520,9 +593,13 @@ ko: apply_for_account: 가입 요청하기 change_password: 패스워드 checkbox_agreement_html: <a href="%{rules_path}" target="_blank">서버 규칙</a>과 <a href="%{terms_path}" target="_blank">이용약관</a>에 동의합니다 - confirm_email: 확인 메일 승인 + checkbox_agreement_without_rules_html: <a href="%{terms_path}" target="_blank">이용 약관</a>에 동의합니다 delete_account: 계정 삭제 delete_account_html: 계정을 삭제하고 싶은 경우, <a href="%{path}">여기서</a> 삭제할 수 있습니다. 삭제 전 확인 화면이 표시됩니다. + description: + prefix_invited_by_user: "@%{name} 님이 당신을 이 마스토돈 서버로 초대했습니다!" + prefix_sign_up: 마스토돈에 가입하세요! + suffix: 계정 하나로 사람들을 팔로우 하고, 게시물을 작성하며 마스토돈을 포함한 다른 어떤 서버의 유저와도 메시지를 주고 받을 수 있습니다! didnt_get_confirmation: 확인 메일을 받지 못하셨습니까? forgot_password: 비밀번호를 잊어버리셨습니까? invalid_reset_password_token: 암호 리셋 토큰이 올바르지 못하거나 기간이 만료되었습니다. 다시 요청해주세요. @@ -540,6 +617,16 @@ ko: reset_password: 암호 재설정 security: 보안 set_new_password: 새 암호 + setup: + email_below_hint_html: 아래의 이메일 계정이 올바르지 않을 경우, 여기서 변경하고 새 확인 메일을 받을 수 있습니다. + email_settings_hint_html: 확인 메일이 %{email}로 보내졌습니다. 이메일 주소가 올바르지 않은 경우, 계정 설정에서 변경하세요. + title: 설정 + status: + account_status: 계정 상태 + confirming: 이메일 확인 과정이 완료되기를 기다리는 중. + functional: 계정이 완벽이 작동합니다. + pending: 당신의 가입 신청은 스태프의 검사를 위해 대기중입니다. 이것은 시간이 다소 소요됩니다. 가입 신청이 승인 될 경우 이메일을 받게 됩니다. + redirecting_to: 계정이 %{acct}로 리다이렉트 중이기 때문에 비활성 상태입니다. trouble_logging_in: 로그인 하는데 문제가 있나요? authorize_follow: already_following: 이미 이 계정을 팔로우 하고 있습니다 @@ -552,6 +639,11 @@ ko: return: 유저 프로필 보기 web: 웹으로 가기 title: "%{acct} 를 팔로우" + challenge: + confirm: 계속 + hint_html: "<strong>팁:</strong> 한 시간 동안 다시 암호를 묻지 않을 것입니다." + invalid_password: 잘못된 암호 + prompt: 계속하려면 암호 확인 datetime: distance_in_words: about_x_hours: "%{count}시간" @@ -567,25 +659,33 @@ ko: x_months: "%{count}월" x_seconds: "%{count}초" deletes: - bad_password_msg: 비밀번호가 올바르지 않습니다 + challenge_not_passed: 입력한 정보가 올바르지 않습니다 confirm_password: 본인 확인을 위해 현재 사용 중인 암호를 입력해 주십시오 - description_html: 계정에 업로드된 모든 컨텐츠가 삭제되며, 계정은 비활성화 됩니다. 이것은 영구적으로 이루어지는 것이므로 <strong>되돌릴 수 없습니다</strong>. 사칭 행위를 방지하기 위해 같은 아이디로 다시 등록하는 것은 불가능합니다. + confirm_username: 절차를 진행하려면 당신의 사용자명을 입력하세요 proceed: 계정 삭제 success_msg: 계정이 성공적으로 삭제되었습니다 - warning_html: 삭제가 보장되는 것은 이 서버 상에서의 컨텐츠에 한합니다. 타 서버 등, 외부에 멀리 공유된 컨텐츠는 흔적이 남아 삭제되지 않는 경우도 있습니다. 그리고 현재 접속이 불가능한 서버나, 업데이트를 받지 않게 된 서버에 대해서는 삭제가 반영되지 않을 수도 있습니다. - warning_title: 공유된 컨텐츠에 대해서 + warning: + before: '진행하기 전, 주의사항을 꼼꼼히 읽어보세요:' + caches: 다른 서버에 캐싱 된 정보들은 남아있을 수 있습니다 + data_removal: 당신의 게시물과 다른 정보들은 영구적으로 삭제 됩니다 + email_change_html: 계정을 지우지 않고도 <a href="%{path}">이메일 주소를 수정할 수 있습니다</a> + email_contact_html: 아직 도착하지 않았다면, <a href="mailto:%{email}">%{email}</a>에 메일을 보내 도움을 요청할 수 있습니다 + email_reconfirmation_html: 아직 확인 메일이 도착하지 않은 경우, <a href="%{path}">다시 요청할 수 있습니다</a> + irreversible: 계정을 복구하거나 다시 사용할 수 없게 됩니다 + more_details_html: 더 자세한 정보는, <a href="%{terms_path}">개인정보 정책</a>을 참고하세요. + username_available: 당신의 계정명은 다시 사용할 수 있게 됩니다 + username_unavailable: 당신의 계정명은 앞으로 사용할 수 없습니다 directories: directory: 프로필 디렉토리 - enabled: 당신은 디렉터리에 표시 되고 있습니다. - enabled_but_waiting: 디렉터리에 표시 되기 위해서는 수동으로 참여해야 합니다, 하지만 디렉터리에 표시 되기 위한 최소 팔로워(%{min_followers})수에 미치지 못했습니다. explanation: 관심사에 대한 유저들을 발견합니다 explore_mastodon: "%{title} 탐사하기" - how_to_enable: 아직 디렉터리에 참여하지 않았습니다. 아래에서 참여할 수 있습니다. 바이오 텍스트에 해시태그를 사용해 특정 해시태그 디렉터리에 표시 될 수 있습니다! - people: - other: "%{count}명" + domain_validator: + invalid_domain: 올바른 도메인 네임이 아닙니다 errors: + '400': 제출한 요청이 올바르지 않습니다. '403': 이 페이지를 표시할 권한이 없습니다. '404': 당신이 찾으려는 페이지는 존재하지 않습니다. + '406': 이 페이지는 요청한 자료형으로 제공되지 않습니다. '410': 당신이 보려는 페이지는 더이상 여기에 존재하지 않습니다. '422': content: 보안 인증에 실패했습니다. 쿠키를 차단하고 있진 않습니까? @@ -594,6 +694,7 @@ ko: '500': content: 죄송합니다, 뭔가 잘못 되었습니다. title: 이 페이지는 잘못되었습니다 + '503': 이 페이지는 임시적인 서버 문제로 인해 제공 될 수 없습니다. noscript_html: 마스토돈을 사용하기 위해서는 자바스크립트를 켜 주십시오. 아니면 <a href="%{apps_path}">네이티브 앱</a> 중 하나를 사용할 수 있습니다. existing_username_validator: not_found: 해당 유저네임에 대한 로컬 유저를 찾을 수 없습니다 @@ -617,6 +718,7 @@ ko: add_new: 추가 errors: limit: 이미 추천 해시태그의 개수가 최대입니다 + hint_html: "<strong>추천 해시태그가 무엇이죠?</strong> 당신의 공개 프로필 페이지에 눈에 띄게 표현 되며 사람들이 그 해시태그를 포함한 당신의 글을 찾아 볼 수 있도록 합니다. 창작활동이나 긴 기간을 가지는 프로젝트를 쭉 따라가기에 좋은 도구입니다." filters: contexts: home: 홈 타임라인 @@ -637,10 +739,12 @@ ko: developers: 개발자 more: 더 보기… resources: 리소스 + trending_now: 지금 유행중 generic: all: 모두 changes_saved_msg: 정상적으로 변경되었습니다! copy: 복사 + no_batch_actions_available: 이 페이지에서 수행할 수 있는 일괄작업이 없습니다 order_by: 순서 save_changes: 변경 사항을 저장 validation_errors: @@ -710,9 +814,34 @@ ko: too_many: 최대 4개까지 첨부할 수 있습니다 migrations: acct: 새 계정의 username@domain - currently_redirecting: '당신의 프로파일은 여기로 리디렉션 됩니다:' - proceed: 저장 - updated_msg: 계정 이동 설정이 저장되었습니다! + cancel: 리디렉션 취소 + cancel_explanation: 리다이렉트를 취소하면 현재 계정이 다시 활성화 됩니다, 새 계정으로 이동한 팔로워를 되찾을 수는 없습니다. + cancelled_msg: 리다이렉트를 성공적으로 취소했습니다. + errors: + already_moved: 이미 이동한 계정과 동일합니다 + missing_also_known_as: 이 계정을 역으로 참조하지 않고 있습니다 + move_to_self: 현재 계정은 사용할 수 없습니다 + not_found: 찾을 수 없습니다 + on_cooldown: 쿨다운 기간입니다 + followers_count: 이주 될 팔로워들 + incoming_migrations: 다른 계정으로부터 옮기기 + incoming_migrations_html: 다른 계정을 이 계정으로 이주하고 싶은 경우, 먼저 <a href="%{path}">계정 별칭을 만들어야 합니다</a>. + moved_msg: 당신의 계정은 %{acct}로 리다이렉트 되고 있으며 팔로워들은 이주 될 것입니다. + not_redirecting: 현재 이 계정은 어디로도 리다이렉트 되고 있지 않습니다. + on_cooldown: 당신은 최근에 이미 계정을 이동했습니다. 이 기능은 %{count}일 후에 다시 이용 가능합니다. + past_migrations: 과거 이주 + proceed_with_move: 팔로워 이동 + redirecting_to: 당신의 계정은 %{acct} 로 리다이렉트됩니다. + set_redirect: 리디렉션 설정 + warning: + backreference_required: 새 계정은 이 계정으로 역참조를 하도록 설정되어 있어야 합니다 + before: '진행하기 전, 주의사항을 꼼꼼히 읽어보세요:' + cooldown: 이주 뒤에는 새로운 이주를 하지 못하는 쿨다운 기간이 존재합니다 + disabled_account: 이 계정은 완전한 사용이 불가능하게 됩니다. 하지만, 데이터 내보내기나 재활성화를 위해 접근할 수 있습니다. + followers: 이 행동은 현재 계정의 모든 팔로워를 새 계정으로 이동시킵니다 + only_redirect_html: 대신, <a href="%{path}">프로필에 리디렉션만 표시</a>할 수 있습니다. + other_data: 다른 어떤 데이터도 자동적으로 옮겨지지 않을 것입니다 + redirect: 현재 계정 프로필은 리다이렉트 알림과 함께 업데이트 되며 검색에서 제외 됩니다 moderation: title: 모더레이션 notification_mailer: @@ -807,10 +936,6 @@ ko: reply: proceed: 답장 진행 prompt: '이 툿에 답장을 하려 합니다:' - remote_unfollow: - error: 에러 - title: 타이틀 - unfollowed: 언팔로우됨 scheduled_statuses: over_daily_limit: 그 날짜에 대한 %{limit}개의 예약 툿 제한을 초과합니다 over_total_limit: 예약 툿 제한 %{limit}을 초과합니다 @@ -859,6 +984,7 @@ ko: settings: account: 계정 account_settings: 계정 설정 + aliases: 계정 별명 appearance: 외관 authorized_apps: 인증된 애플리케이션 back: 돌아가기 @@ -876,6 +1002,8 @@ ko: profile: 프로필 relationships: 팔로잉과 팔로워 two_factor_authentication: 2단계 인증 + spam_check: + spam_detected: 이것은 자동화 된 신고입니다. 스팸이 감지되었습니다. statuses: attached: description: '첨부: %{attached}' @@ -896,6 +1024,8 @@ ko: private: 비공개 툿은 고정될 수 없습니다 reblog: 부스트는 고정될 수 없습니다 poll: + total_people: + other: "%{count}명" total_votes: other: "%{count}명 투표함" vote: 투표 @@ -913,6 +1043,8 @@ ko: pinned: 고정된 툿 reblogged: 님이 부스트 했습니다 sensitive_content: 민감한 컨텐츠 + tags: + does_not_match_previous_name: 이전 이름과 맞지 않습니다 terms: body_html: | <h2>개인정보 정책</h2> @@ -1030,7 +1162,9 @@ ko: disable: 당신의 계정이 동결 된 동안 당신의 계정은 유지 됩니다. 하지만 잠금이 풀릴 때까지 당신은 아무 것도 할 수 없습니다. silence: 당신의 계정이 제한 된 동안엔 당신의 팔로워 이외엔 툿을 받아 볼 수 없고 공개 리스팅에서 제외 됩니다. 하지만 다른 사람들은 여전히 당신을 팔로우 가능합니다. suspend: 당신의 계정은 정지 되었으며, 모든 툿과 업로드 한 미디어가 서버에서 삭제 되어 되돌릴 수 없습니다. + get_in_touch: 이 메일에 대해 답장해서 %{instance}의 스태프와 연락 할 수 있습니다. review_server_policies: 서버 정책 검토하기 + statuses: '구체적으로:' subject: disable: 당신의 계정 %{acct}가 동결 되었습니다 none: "%{acct}에게의 경고" diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 2cf0b7c42..7a09bee59 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -9,10 +9,6 @@ lt: contact: Kontaktai contact_missing: Nenustatyta documentation: Dokumentacija - extended_description_html: | - <h3>Taisyklės</h3> - <p>Ilgas aprašymas dar nėra sudartyas</p> - generic_description: "%{domain} yra vienas serveris tinkle" hosted_on: Mastodon palaikomas naudojantis %{domain} talpinimu learn_more: Daugiau privacy_policy: Privatumo Politika @@ -419,21 +415,8 @@ lt: no_status_selected: Jokie statusai nebuvo pakeisti, nes niekas nepasirinkta title: Paskyros statusai with_media: Su medija - subscriptions: - callback_url: Atgalinė URL - confirmed: Patvirtinta - expires_in: Pasibaigia - last_delivery: Paskutinis pristatymas - title: WebSub protokolas - topic: Tema tags: - accounts: Paskyros - hidden: Paslėpti - hide: Paslėpti iš direktorijos - name: Saitažodis(#) title: Saitažodžiai(#) - unhide: Rodyti direktorijoje - visible: Matomas title: Administracija warning_presets: add_new: Pridėti naują @@ -462,7 +445,6 @@ lt: your_token: Jūsų prieigos žetonas auth: change_password: Slaptažodis - confirm_email: Patvirtinti el paštą delete_account: Ištrinti paskyrą delete_account_html: Jeigu norite ištrinti savo paskyrą, galite eiti <a href="%{path}">čia</a>. Jūsų prašys patvirtinti pasirinkimą. didnt_get_confirmation: Negavote patvirtinimo instrukcijų? @@ -504,23 +486,18 @@ lt: x_months: "%{count}mėn" x_seconds: "%{count}sek" deletes: - bad_password_msg: Geras bandymas, programišiau! Neteisingas slaptažodis confirm_password: Kad patvirtintumėte savo tapatybę, įveskite dabartini slaptažodį - description_html: Tai <strong>be sugrąžinimo, visam laikui</strong> panaikins visa turini iš Jūsų paskyros ir deaktyvuos ją. Jūsų vartotojo vardas paliks rezervuotas, kad išvengtumėme tapatybės pavagimo ateityje. proceed: Ištrinti paskyrą success_msg: Jūsų paskyra sėkmingai ištrinta - warning_html: Tiktai panaikinimas turinio iš šio serverio garantuotas. Turinys, kuris buvo viešai prieinamas ir dalinamas kituose serveriuose paliks pėdsakus. Serveriai, kurie neseka jūsų, kurie nėra tinkle, nepakeis savo duomenų sistemos. - warning_title: Platinamo turinio prieinamumas directories: directory: Profilio direktorija - enabled: Jūs esate rodomas šioje direktorijoje. - enabled_but_waiting: Jūs pasirinkote būti įtrauktas į direktorija, bet jūs neturite minimalaus sekėjų skaičiaus (%{min_followers}), kad būtumėte rodomas. explanation: Raskite vartotojus, remiantis tuo, kuo jie domisi explore_mastodon: Naršyti %{title} - how_to_enable: Jūs nesate prisijungęs prie šios direktorijos. Galite prisijungti žemiau. Naudokite saitažodžius savo biografiniame tekste, kad būtumėte rastas naudojantis specifinius saitažodžius! errors: + '400': The request you submitted was invalid or malformed. '403': Jūs neturie prieigos matyti šiam puslapiui. '404': Puslapis nerastas. + '406': This page is not available in the requested format. '410': Puslapis neegzistuoja. '422': content: Apsaugos patvirtinmas klaidingas. Ar jūs blokuojate sausainius? @@ -529,6 +506,7 @@ lt: '500': content: Atsiprašome, tačiau mūsų pusėje įvyko klaida. title: Netinkamas puslapis + '503': The page could not be served due to a temporary server failure. noscript_html: Kad naudotumėtės Mastodon web aplikacija, prašome įsijungti JavaScript. Alternatyviai, pabandykite viena iš <a href="%{apps_path}">vietinių aplikacijų</a> Mastodon savo platformai. exports: archive_takeout: @@ -615,9 +593,6 @@ lt: too_many: Negalima pridėti daugiau nei 4 failų migrations: acct: slapyvardis@domenas naujam vartotojui - currently_redirecting: 'Jūsų profilis nustatytas nukreipimui į:' - proceed: Išsaugoti - updated_msg: Jūsų paskyros migracijos nustatymai sėkmingai pakeisti! moderation: title: Moderacija notification_mailer: @@ -672,10 +647,6 @@ lt: reply: proceed: Atsakyti prompt: 'Jūs norite atsakyti šiam toot''ui:' - remote_unfollow: - error: Klaida - title: Pavadinimas - unfollowed: Nebesekama scheduled_statuses: over_daily_limit: Jūs pasieketė limitą (%{limit}) galimų toot'ų per dieną over_total_limit: Jūs pasieketė %{limit} limitą galimų toot'ų diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 971450a89..f6625dd41 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1,12 +1,15 @@ --- lv: errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': '429': Throttled '500': + '503': The page could not be served due to a temporary server failure. invites: expires_in: '1800': 30 minutes diff --git a/config/locales/mk.yml b/config/locales/mk.yml new file mode 100644 index 000000000..acb18fb5a --- /dev/null +++ b/config/locales/mk.yml @@ -0,0 +1,20 @@ +--- +mk: + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Throttled + '500': + '503': The page could not be served due to a temporary server failure. + invites: + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day diff --git a/config/locales/ml.yml b/config/locales/ml.yml new file mode 100644 index 000000000..45218b8be --- /dev/null +++ b/config/locales/ml.yml @@ -0,0 +1,22 @@ +--- +ml: + about: + contact_missing: സജ്ജമാക്കിയിട്ടില്ല + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Throttled + '500': + '503': The page could not be served due to a temporary server failure. + invites: + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day diff --git a/config/locales/mr.yml b/config/locales/mr.yml new file mode 100644 index 000000000..3f83ed785 --- /dev/null +++ b/config/locales/mr.yml @@ -0,0 +1,20 @@ +--- +mr: + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Throttled + '500': + '503': The page could not be served due to a temporary server failure. + invites: + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 3597ccd15..d824aed60 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -10,10 +10,6 @@ ms: contact_missing: Tidak ditetapkan contact_unavailable: Tidak tersedia documentation: Pendokumenan - extended_description_html: | - <h3>Tempat sesuai untuk peraturan</h3> - <p>Kenyataan penuh masih belum ditetapkan.</p> - generic_description: "%{domain} ialah salah sebuah pelayan dalam rangkaian Mastodon" hosted_on: Mastodon dihoskan di %{domain} learn_more: Ketahui lebih lanjut privacy_policy: Polisi privasi @@ -297,12 +293,15 @@ ms: create_and_resolve: Selesaikan dengan nota placeholder: Terangkan tindakan apa yang telah diambil, atau sebarang kemas kini lain yang berkaitan... errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': '429': Throttled '500': + '503': The page could not be served due to a temporary server failure. exports: archive_takeout: in_progress: Mengkompil arkib anda... diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 78be7872d..bfa4122ed 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -11,19 +11,19 @@ nl: apps: Mobiele apps apps_platforms: Gebruik Mastodon op iOS, Android en op andere platformen browse_directory: Gebruikersgids doorbladeren en op interesses filteren + browse_local_posts: Livestream van openbare berichten op deze server bekijken browse_public_posts: Livestream van openbare Mastodonberichten bekijken contact: Contact contact_missing: Niet ingesteld contact_unavailable: n.v.t discover_users: Gebruikers ontdekken documentation: Documentatie - extended_description_html: | - <h3>Een goede plek voor richtlijnen</h3> - <p>De uitgebreide omschrijving is nog niet ingevuld.</p> federation_hint_html: Met een account op %{instance} ben je in staat om mensen die zich op andere Mastodonservers (en op andere plekken) bevinden te volgen. - generic_description: "%{domain} is een server in het Mastodonnetwerk" get_apps: Mobiele apps hosted_on: Mastodon op %{domain} + instance_actor_flash: 'Dit account is een virtuel actor die wordt gebruikt om de server zelf te vertegenwoordigen en is geen individuele gebruiker. Het wordt voor federatiedoeleinden gebruikt en moet niet worden geblokkeerd, tenzij je de hele server wil blokkeren. In zo''n geval dien je echter een domeinblokkade te gebruiken. + +' learn_more: Meer leren privacy_policy: Privacybeleid see_whats_happening: Kijk wat er aan de hand is @@ -35,6 +35,14 @@ nl: status_count_before: Zij schreven tagline: Vrienden volgen en nieuwe ontdekken terms: Gebruiksvoorwaarden + unavailable_content: Niet beschikbare inhoud + unavailable_content_description: + domain: Server + reason: 'Reden:' + rejecting_media: Mediabestanden van deze server worden niet verwerkt en er worden geen thumbnails getoond. Je moet handmatig naar deze server doorklikken om de mediabestanden te kunnen bekijken. + silenced: Toots van deze server worden nergens weergegeven, behalve op jouw eigen starttijdlijn wanneer je het account volgt. + suspended: Je bent niet in staat om iemand van deze server te volgen, en er worden geen gegevens van deze server verwerkt of opgeslagen, en met deze server uitgewisseld. + unavailable_content_html: Met Mastodon kun je in het algemeen berichten bekijken van en communiceren met gebruikers van elke andere server in de fediverse. Dit zijn de uitzonderingen die door deze server zijn gemaakt en expliciet alleen hier gelden. user_count_after: one: gebruiker other: gebruikers @@ -42,6 +50,8 @@ nl: what_is_mastodon: Wat is Mastodon? accounts: choices_html: 'Aanbevelingen van %{name}:' + endorsements_hint: Je kunt mensen die je volgt in de webomgeving aanbevelen, waarna ze dan hier zullen verschijnen. + featured_tags_hint: Je kunt specifieke hashtags uitlichten, waarna ze dan hier zullen verschijnen. follow: Volgen followers: one: Volger @@ -53,6 +63,7 @@ nl: media: Media moved_html: "%{name} is verhuisd naar %{new_profile_link}:" network_hidden: Deze informatie is niet beschikbaar + never_active: Nooit nothing_here: Hier is niets! people_followed_by: Mensen die %{name} volgen people_who_follow: Mensen die %{name} volgen @@ -165,6 +176,7 @@ nl: user: Gebruiker salmon_url: Salmon-URL search: Zoeken + search_same_ip: Andere gebruikers met hetzelfde IP-adres shared_inbox_url: Gedeelde inbox-URL show: created_reports: Aangemaakte rapportages @@ -183,6 +195,7 @@ nl: username: Gebruikersnaam warn: Waarschuwen web: Webapp + whitelisted: Op de witte lijst action_logs: actions: assigned_to_self_report: "%{name} heeft rapportage %{target} aan zichzelf toegewezen" @@ -218,19 +231,24 @@ nl: deleted_status: "(verwijderde toot}" title: Auditlog custom_emojis: + assign_category: Categorie toewijzen by_domain: Domein copied_msg: Lokale kopie van emoji maken geslaagd copy: Kopiëren copy_failed_msg: Kan geen lokale kopie van deze emoji maken + create_new_category: Nieuwe categorie toevoegen created_msg: Aanmaken van emoji geslaagd! delete: Verwijderen destroyed_msg: Verwijderen van emoji geslaagd! disable: Uitschakelen + disabled: Uitgeschakeld disabled_msg: Uitschakelen van deze emoji geslaagd emoji: Emoji enable: Inschakelen + enabled: Ingeschakeld enabled_msg: Inschakelen van deze emoji geslaagd image_hint: PNG van max. 50KB + list: In lijst listed: Weergegeven new: title: Lokale emoji toevoegen @@ -238,11 +256,14 @@ nl: shortcode: Verkorte code shortcode_hint: Tenminste 2 tekens (alleen alfanumeriek en underscores) title: Lokale emoji’s + uncategorized: Niet gecategoriseerd + unlist: Niet in lijst unlisted: Niet weergegeven update_failed_msg: Deze emoji kon niet worden bijgewerkt updated_msg: Bijwerken van emoji is geslaagd! upload: Uploaden dashboard: + authorized_fetch_mode: Veilige modus backlog: achterstallige taken config: Configuratie feature_deletions: Verwijderen van account @@ -250,10 +271,13 @@ nl: feature_profile_directory: Gebruikersgids feature_registrations: Registraties feature_relay: Federatierelay + feature_spam_check: Anti-spam feature_timeline_preview: Voorvertoning van tijdlijn features: Functies hidden_service: Federatie met verborgen diensten open_reports: onopgeloste rapportages + pending_tags: hashtags die op een beoordeling wachten + pending_users: gebruikers die op een beoordeling wachten recent_users: Recente gebruikers search: In volledige tekst zoeken single_user_mode: Modus voor één gebruiker @@ -265,11 +289,18 @@ nl: week_interactions: interacties deze week week_users_active: actieve gebruikers deze week week_users_new: nieuwe gebruikers deze week + whitelist_mode: Modus voor de witte lijst + domain_allows: + add_new: Domein voor de witte lijst + created_msg: Het domein is succesvol aan de witte lijst toegevoegd + destroyed_msg: Het domein is van de witte lijst verwijderd + undo: Van de witte lijst verwijderen domain_blocks: add_new: Nieuwe domeinblokkade toevoegen created_msg: Domeinblokkade wordt nu verwerkt destroyed_msg: Domeinblokkade is ongedaan gemaakt domain: Domein + edit: Domeinblokkade bewerken existing_domain_block_html: Jij hebt al strengere beperkingen opgelegd aan %{name}, je moet het domein eerst <a href="%{unblock_url}">deblokkeren</a>. new: create: Blokkade aanmaken @@ -280,6 +311,10 @@ nl: silence: Negeren suspend: Opschorten title: Nieuwe domeinblokkade + private_comment: Privé-opmerking + private_comment_hint: Opmerking over deze domeinbeperking voor intern gebruik door de moderatoren. + public_comment: Openbare opmerking + public_comment_hint: Opmerking over deze domeinbeperking voor het grote publiek, voor wanneer de openbare lijst met domeinbeperkingen is ingeschakeld. reject_media: Mediabestanden weigeren reject_media_hint: Verwijderd lokaal opgeslagen mediabestanden en weigert deze in de toekomst te downloaden. Irrelevant voor opgeschorte domeinen reject_reports: Rapportages weigeren @@ -299,6 +334,7 @@ nl: title: Domeinblokkade voor %{domain} ongedaan maken undo: Ongedaan maken undo: domeinblokkade ongedaan maken + view: Domeinblokkade bekijken email_domain_blocks: add_new: Nieuwe toevoegen created_msg: Blokkeren e-maildomein geslaagd @@ -322,6 +358,8 @@ nl: all: Alles limited: Beperkt title: Moderatie + private_comment: Privé-opmerking + public_comment: Openbare opmerking title: Andere domeinen total_blocked_by_us: Door ons geblokkeerd total_followed_by_them: Door hun gevolgd @@ -351,6 +389,7 @@ nl: pending: Aan het wachten op toestemming van de relayserver save_and_enable: Opslaan en inschakelen setup: Een verbinding met een relayserver maken + signatures_not_enabled: Federatierelays werken niet goed wanneer de veilige modus of de witte lijstmodus is ingeschakeld status: Status title: Relayservers report_notes: @@ -399,6 +438,16 @@ nl: custom_css: desc_html: Het uiterlijk van deze server met CSS aanpassen title: Aangepaste CSS + default_noindex: + desc_html: Heeft invloed op alle gebruikers die deze instelling niet zelf hebben veranderd + title: Toots van gebruikers standaard niet door zoekmachines laten indexeren + domain_blocks: + all: Naar iedereen + disabled: Naar niemand + title: Domeinblokkades tonen + users: Naar ingelogde lokale gebruikers + domain_blocks_rationale: + title: Motivering tonen hero: desc_html: Wordt op de voorpagina getoond. Tenminste 600x100px aanbevolen. Wanneer dit niet is ingesteld wordt de thumbnail van de Mastodonserver getoond title: Hero-afbeelding @@ -431,8 +480,8 @@ nl: open: Iedereen kan zich registreren title: Registratiemodus show_known_fediverse_at_about_page: - desc_html: Wanneer ingeschakeld wordt de globale tijdlijn op de voorpagina getoond en wanneer uitgeschakeld de lokale tijdljn. - title: De globale tijdlijn op de voorpagina tonen + desc_html: Wanneer ingeschakeld wordt de globale tijdlijn op de voorpagina getoond en wanneer uitgeschakeld de lokale tijdlijn + title: De globale tijdlijn op de openbare tijdlijnpagina tonen show_staff_badge: desc_html: Medewerkersbadge op profielpagina tonen title: Medewerkersbadge tonen @@ -449,19 +498,29 @@ nl: desc_html: Je kan hier jouw eigen privacybeleid, gebruiksvoorwaarden en ander juridisch jargon kwijt. Je kan HTML gebruiken title: Aangepaste gebruiksvoorwaarden site_title: Naam Mastodonserver + spam_check_enabled: + desc_html: Mastodon kan accounts die herhaaldelijk ongevraagde berichten versturen automatisch negeren of rapporteren. Het is mogelijk dat er foutpositieven tussen zitten. + title: Automatische spambestrijding thumbnail: desc_html: Gebruikt als voorvertoning voor OpenGraph en de API. 1200x630px aanbevolen title: Thumbnail Mastodonserver timeline_preview: - desc_html: Toon een openbare tijdlijn op de voorpagina - title: Tijdlijn op de voorpagina tonen + desc_html: Toon een link naar de openbare tijdlijnpagina op de voorpagina en geef de API zonder in te loggen toegang tot de openbare tijdlijn + title: Toegang tot de openbare tijdlijn zonder in te loggen toestaan title: Server-instellingen + trendable_by_default: + desc_html: Heeft invloed op hashtags die nog niet eerder niet zijn toegestaan + title: Hashtags toestaan om trending te worden zonder voorafgaande beoordeling + trends: + desc_html: Eerder beoordeelde hashtags die op dit moment trending zijn openbaar tonen + title: Trending hashtags statuses: back_to_account: Terug naar accountpagina batch: delete: Verwijderen nsfw_off: Als niet gevoelig markeren nsfw_on: Als gevoelig markeren + deleted: Verwijderd failed_to_execute: Uitvoeren mislukt media: title: Media @@ -469,21 +528,24 @@ nl: no_status_selected: Er werden geen toots gewijzigd, omdat er geen enkele werd geselecteerd title: Toots van account with_media: Met media - subscriptions: - callback_url: Callback-URL - confirmed: Bevestigd - expires_in: Verloopt over - last_delivery: Laatste bezorging - title: WebSub - topic: Account tags: - accounts: Accounts - hidden: Verborgen - hide: Niet in gebruikersgids tonen + accounts_today: Aantal verschillende keren vandaag gebruikt + accounts_week: Aantal verschillende keren deze week gebruikt + breakdown: Uitsplitsing van het gebruik van vandaag naar bron + context: Context + directory: In de gebruikersgids + in_directory: "%{count} keer in de gebruikersgids" + last_active: Laatst actief + most_popular: Meest populair + most_recent: Meest recent name: Hashtag + review: Status beoordelen + reviewed: Beoordeeld title: Hashtags - unhide: In gebruikersgids tonen - visible: Zichtbaar + trending_right_now: Op dit moment trending + unique_uses_today: "%{count} keer vandaag gebruikt" + unreviewed: Niet beoordeeld + updated_msg: Instellingen hashtag succesvol bijgewerkt title: Beheer warning_presets: add_new: Nieuwe toevoegen @@ -499,12 +561,23 @@ nl: body: "%{reporter} heeft %{target} gerapporteerd" body_remote: Iemand van %{domain} heeft %{target} gerapporteerd subject: Nieuwe rapportage op %{instance} (#%{id}) + new_trending_tag: + body: 'De hashtag #%{name} is vandaag trending, maar is nog niet beoordeeld. Het wordt niet in het openbaar getoond alvorens je de hashtag goedkeurt. Je kunt ook het formulier zoals het nu is opslaan, waarna je er niks meer over zult horen.' + subject: Nieuwe hashtag te beoordelen op %{instance} (#%{name}) + aliases: + add_new: Alias aanmaken + created_msg: Succesvol een nieuwe alias aangemaakt. Je kunt nu met de verhuizing vanaf het oude account beginnen. + deleted_msg: De alias is succesvol verwijderd. Verhuizen vanaf dat account naar dit account is niet meer mogelijk. + hint_html: Wanneer je vanaf een ander account naar dit account wilt verhuizen, kun je hier een alias aanmaken. Dit is nodig voordat je verder kunt gaan met het verhuizen van volgers van het oude naar dit nieuwe account. Deze actie is op zich <strong>ongevaarlijk en omkeerbaar</strong>. <strong>De accountmigratie wordt gestart vanaf het oude account</strong>. + remove: Alias ontkoppelen appearance: advanced_web_interface: Geavanceerde webomgeving advanced_web_interface_hint: 'Wanneer je van de hele schermbreedte gebruik wilt maken, stelt de geavanceerde webomgeving je in staat om meerdere verschillende kolommen te configureren. Hiermee kun je zoveel mogelijk informatie op hetzelfde moment bekijken, zoals: Start, meldingen, de globale tijdlijn, meerdere lijsten en hashtags.' animations_and_accessibility: Animaties en toegankelijkheid confirmation_dialogs: Bevestigingen + discovery: Ontdekken sensitive_content: Gevoelige inhoud + toot_layout: Lay-out van toots application_mailer: notification_preferences: E-mailvoorkeuren wijzigen salutation: "%{name}," @@ -524,9 +597,13 @@ nl: apply_for_account: Een uitnodiging aanvragen change_password: Wachtwoord checkbox_agreement_html: Ik ga akkoord met de <a href="%{rules_path}" target="_blank">regels van deze server</a> en de <a href="%{terms_path}" target="_blank">gebruiksvoorwaarden</a> - confirm_email: E-mail bevestigen + checkbox_agreement_without_rules_html: Ik ga akkoord met de <a href="%{terms_path}" target="_blank">gebruiksvoorwaarden</a> delete_account: Account verwijderen delete_account_html: Wanneer je jouw account graag wilt verwijderen, kun je dat <a href="%{path}">hier doen</a>. We vragen jou daar om een bevestiging. + description: + prefix_invited_by_user: "@%{name} nodigt je hierbij uit om een account aan te maken op deze Mastodonserver!" + prefix_sign_up: Registreer je vandaag nog op Mastodon! + suffix: Met een account ben je in staat om mensen te volgen, berichten te plaatsen en uit te wisselen met mensen die zich op andere Mastodonservers bevinden en meer! didnt_get_confirmation: Geen bevestigingsinstructies ontvangen? forgot_password: Wachtwoord vergeten? invalid_reset_password_token: De code om jouw wachtwoord opnieuw in te stellen is verlopen. Vraag een nieuwe aan. @@ -544,6 +621,16 @@ nl: reset_password: Wachtwoord opnieuw instellen security: Beveiliging set_new_password: Nieuw wachtwoord instellen + setup: + email_below_hint_html: Wanneer onderstaand e-mailadres niet klopt, kun je dat hier veranderen. Je ontvangt dan hierna een bevestigingsmail. + email_settings_hint_html: De bevestigingsmail is verzonden naar %{email}. Wanneer dat e-mailadres niet klopt, kun je dat veranderen in je accountinstellingen. + title: Instellen + status: + account_status: Accountstatus + confirming: Aan het wachten totdat de e-mail is bevestigd. + functional: Jouw account is volledig operationeel. + pending: Jouw aanvraag moet nog worden beoordeeld door een van onze medewerkers. Dit kan misschien eventjes duren. Je ontvangt een e-mail wanneer jouw aanvraag is goedgekeurd. + redirecting_to: Jouw account is inactief omdat het momenteel wordt doorverwezen naar %{acct}. trouble_logging_in: Problemen met inloggen? authorize_follow: already_following: Je volgt dit account al @@ -556,6 +643,11 @@ nl: return: Profiel van deze gebruiker tonen web: Ga naar de webapp title: Volg %{acct} + challenge: + confirm: Doorgaan + hint_html: "<strong>Tip:</strong> We vragen jou het komende uur niet meer naar jouw wachtwoord." + invalid_password: Ongeldig wachtwoord + prompt: Bevestig wachtwoord om door te gaan datetime: distance_in_words: about_x_hours: "%{count}u" @@ -571,26 +663,33 @@ nl: x_months: "%{count}ma" x_seconds: "%{count}s" deletes: - bad_password_msg: Goed geprobeerd hackers! Ongeldig wachtwoord + challenge_not_passed: De informatie die u hebt ingevoerd is ongeldig confirm_password: Voer jouw huidige wachtwoord in om jouw identiteit te bevestigen - description_html: Hierdoor worden alle gegevens van jouw account <strong>permanent, onomkeerbaar</strong> verwijderd en wordt deze gedeactiveerd. Om toekomstige identiteitsdiefstal te voorkomen, kan op deze server jouw gebruikersnaam niet meer gebruikt worden. + confirm_username: Voer uw gebruikersnaam in om de procedure te bevestigen proceed: Account verwijderen success_msg: Jouw account is succesvol verwijderd - warning_html: We kunnen alleen garanderen dat jouw gegevens op deze server worden verwijderd. Berichten (toots), incl. media, die veel zijn gedeeld laten mogelijk sporen achter. Offline servers en servers die niet meer op jouw updates zijn geabonneerd zullen niet hun databases updaten. - warning_title: Verwijdering gegevens op andere servers + warning: + before: 'Lees deze tekst zorgvuldig voordat je verder gaat:' + caches: Toots en media die op andere servers zijn opgeslagen kunnen daar achterblijven + data_removal: Jouw toots en andere gegevens worden permanent verwijderd + email_change_html: Je kunt <a href="%{path}">je e-mailadres wijzigen</a> zonder dat je jouw account hoeft te verwijderen + email_contact_html: Wanneer het nog steeds niet aankomt, kun je voor hulp e-mailen naar <a href="mailto:%{email}">%{email}</a> + email_reconfirmation_html: Wanneer je de bevestigingsmail niet hebt ontvangen, kun je deze <a href="%{path}">opnieuw aanvragen</a> + irreversible: Je zult niet in staat zijn om jouw account te herstellen of te deactiveren + more_details_html: Zie het <a href="%{terms_path}">privacybeleid</a> voor meer informatie. + username_available: Jouw gebruikersnaam zal weer beschikbaar komen + username_unavailable: Jouw gebruikersnaam zal onbeschikbaar blijven directories: directory: Gebruikersgids - enabled: Je staat momenteel in de gebruikersgids vermeldt. - enabled_but_waiting: Je hebt er voor gekozen om in de gebruikersgids te worden vermeldt, maar je hebt daarvoor nog niet het minimaal aantal volgers (%{min_followers}). explanation: Ontdek gebruikers aan de hand van hun interesses explore_mastodon: "%{title} verkennen" - how_to_enable: Je geeft momenteel geen toestemming om in de gebruikersgids te worden vermeldt. Je kunt hieronder toestemming geven. Gebruik hashtags in de tekst van jouw bio, om onder bepaalde hashtags te worden vermeldt! - people: - one: "%{count} gebruikers" - other: "%{count} gebruikers" + domain_validator: + invalid_domain: is een ongeldige domeinnaam errors: + '400': De aanvraag die je hebt ingediend was ongeldig of foutief. '403': Jij hebt geen toestemming om deze pagina te bekijken. '404': De pagina waarnaar jij op zoek bent bestaat niet. + '406': Deze pagina is niet beschikbaar in het opgevraagde formaat. '410': De pagina waarnaar jij op zoek bent bestaat niet meer. '422': content: Veiligheidsverificatie mislukt. Blokkeer je toevallig cookies? @@ -599,6 +698,7 @@ nl: '500': content: Het spijt ons, er is aan onze kant iets fout gegaan. title: Er is iets mis + '503': De pagina kon door een tijdelijke serverstoring niet worden geladen. noscript_html: Schakel JavaScript in om de webapp van Mastodon te kunnen gebruiken. Als alternatief kan je een <a href="%{apps_path}">Mastodon-app</a> zoeken voor jouw platform. existing_username_validator: not_found: Kon geen lokale gebruiker met die gebruikersnaam vinden @@ -622,6 +722,7 @@ nl: add_new: Nieuwe toevoegen errors: limit: Je hebt al het maximaal aantal hashtags uitgelicht + hint_html: "<strong>Wat zijn uitgelichte hashtags?</strong> Deze worden prominent op jouw openbare profiel getoond en stelt mensen in staat om jouw openbare toots per hashtag te bekijken. Het zijn een goed hulpmiddel om creatieve werkzaamheden of langetermijnprojecten bij te houden." filters: contexts: home: Starttijdlijn @@ -642,10 +743,12 @@ nl: developers: Ontwikkelaars more: Meer… resources: Hulpmiddelen + trending_now: Trends generic: all: Alles changes_saved_msg: Wijzigingen succesvol opgeslagen! copy: Kopiëren + no_batch_actions_available: Geen batchacties op deze pagina beschikbaar order_by: Sorteer op save_changes: Wijzigingen opslaan validation_errors: @@ -697,7 +800,7 @@ nl: '604800': 1 week '86400': 1 dag expires_in_prompt: Nooit - generate: Genereren + generate: Uitnodigingslink genereren invited_by: 'Jij bent uitgenodigd door:' max_uses: one: 1 keer @@ -716,10 +819,35 @@ nl: images_and_video: Een video kan niet aan een toot met afbeeldingen worden gekoppeld too_many: Er kunnen niet meer dan 4 afbeeldingen toegevoegd worden migrations: - acct: gebruikersnaam@domein van het nieuwe account - currently_redirecting: 'Jouw profiel wordt nu doorverwezen naar:' - proceed: Opslaan - updated_msg: Jouw accountmigratie-instelling is succesvol bijgewerkt! + acct: Verhuisd naar + cancel: Doorverwijzing annuleren + cancel_explanation: Het annuleren van de doorverwijzing zal jouw huidige account opnieuw activeren, maar brengt geen volgers terug die naar het andere account zijn verhuisd. + cancelled_msg: De doorverwijzing is succesvol geannuleerd. + errors: + already_moved: is hetzelfde account waarnaar je al naar toe bent verhuisd + missing_also_known_as: verwijst niet terug naar dit account + move_to_self: kan niet het huidige account zijn + not_found: kon niet worden gevonden + on_cooldown: Jouw laatste migratie is nog te kort geleden + followers_count: Volgers op het moment van verhuizing + incoming_migrations: Verhuizen vanaf een ander account + incoming_migrations_html: Om vanaf een ander account naar dit account te verhuizen, dien je eerst <a href="%{path}">een accountalias aan te maken</a>. + moved_msg: Jouw account wordt nu naar %{acct} doorverwezen en jouw volgers worden verhuisd. + not_redirecting: Jouw account wordt momenteel niet naar een ander account doorverwezen. + on_cooldown: Je hebt recentelijk jouw account verhuisd. Deze mogelijkheid is weer beschikbaar over %{count} dagen. + past_migrations: Vorige migraties + proceed_with_move: Volgers verhuizen + redirecting_to: Jouw account wordt nu naar %{acct} doorverwezen. + set_redirect: Doorverwijzing instellen + warning: + backreference_required: Het nieuwe account moet eerst worden ingesteld om naar dit account te kunnen terugverwijzen + before: 'Lees eerst goed deze tekst, alvorens verder te gaan:' + cooldown: Na de verhuizing kun je tijdelijk niet opnieuw verhuizen + disabled_account: Jouw huidige account is hierna niet meer volledig bruikbaar. Je hebt echter wel toegang tot het exporteren van je gegevens en tot het opnieuw activeren van je account. + followers: Deze actie verhuisd alle volgers vanaf het huidige account naar het nieuwe account + only_redirect_html: Je kunt als alternatief ook <a href="%{path}">alleen de doorverwijzing op je profiel zetten</a>. + other_data: Geen andere gegevens worden automatisch verhuisd + redirect: Jouw huidige accountprofiel wordt bijgewerkt met een doorverwijzingsmelding en wordt uitgesloten van zoekresultaten moderation: title: Moderatie notification_mailer: @@ -816,10 +944,6 @@ nl: reply: proceed: Doorgaan met reageren prompt: 'Je wilt op de volgende toot reageren:' - remote_unfollow: - error: Fout - title: Titel - unfollowed: Ontvolgd scheduled_statuses: over_daily_limit: Je hebt de limiet van %{limit} in te plannen toots voor die dag overschreden over_total_limit: Je hebt de limiet van %{limit} in te plannen toots overschreden @@ -868,6 +992,7 @@ nl: settings: account: Account account_settings: Accountinstellingen + aliases: Accountaliassen appearance: Uiterlijk authorized_apps: Geautoriseerde apps back: Terug naar Mastodon @@ -885,6 +1010,8 @@ nl: profile: Profiel relationships: Volgers en gevolgden two_factor_authentication: Tweestapsverificatie + spam_check: + spam_detected: Dit is een automatisch gegenereerde rapportage. Er is spam gedetecteerd. statuses: attached: description: 'Bijlagen: %{attached}' @@ -908,6 +1035,9 @@ nl: private: Alleen openbare toots kunnen worden vastgezet reblog: Een boost kan niet worden vastgezet poll: + total_people: + one: "%{count} persoon" + other: "%{count} personen" total_votes: one: "%{count} stem" other: "%{count} stemmen" @@ -926,6 +1056,8 @@ nl: pinned: Vastgemaakte toot reblogged: boostte sensitive_content: Gevoelige inhoud + tags: + does_not_match_previous_name: komt niet overeen met de vorige naam terms: body_html: | <h2>Privacy Policy</h2> @@ -1043,7 +1175,9 @@ nl: disable: Zolang jouw account is bevroren blijven jouw accountgegevens intact, maar kun je geen handelingen uitvoeren totdat het account is vrijgegeven. silence: Zolang jouw account wordt beperkt, kunnen alleen mensen die jou al volgen jouw toots op deze server zien. Tevens ben je niet zichtbaar in meldingen, gesprekken en op openbare tijdlijnen. Anderen kunnen je echter wel handmatig volgen. suspend: Jouw account is opgeschort. Jouw toots en geüploade media zijn onomkeerbaar van deze server verwijderd, en ook o.a. van de servers waar jij volgers had. + get_in_touch: Je kunt deze e-mail beantwoorden om in contact te komen met de medewerkers van %{instance}. review_server_policies: Serverbeleid bekijken + statuses: 'Met name voor:' subject: disable: Jouw account %{acct} is bevroren none: Waarschuwing voor %{acct} diff --git a/config/locales/nn.yml b/config/locales/nn.yml new file mode 100644 index 000000000..a1b61d6e7 --- /dev/null +++ b/config/locales/nn.yml @@ -0,0 +1,20 @@ +--- +nn: + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Throttled + '500': + '503': The page could not be served due to a temporary server failure. + invites: + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day diff --git a/config/locales/no.yml b/config/locales/no.yml index d21dda6fb..fa40975a7 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -7,10 +7,6 @@ contact: Kontakt contact_missing: Ikke innstilt contact_unavailable: Ikke tilgjengelig - extended_description_html: | - <h3>En god plassering for regler</h3> - <p>En utvidet beskrivelse er ikke satt opp ennå.</p> - generic_description: "%{domain} er en tjener i nettverket" hosted_on: Mastodon driftet på %{domain} learn_more: Lær mer source_code: Kildekode @@ -267,12 +263,6 @@ no_media: Ingen media title: Kontostatuser with_media: Med media - subscriptions: - callback_url: Callback-URL - confirmed: Bekreftet - expires_in: Utløper om - last_delivery: Siste levering - topic: Emne title: Administrasjon admin_mailer: new_report: @@ -332,16 +322,14 @@ x_months: "%{count} mnd" x_seconds: "%{count} sek" deletes: - bad_password_msg: Godt forsøk, hacker! Feil passord confirm_password: Skriv inn ditt passord for å verifisere din identitet - description_html: Dette vil <strong>permanent, irreversibelt</strong> fjerne innhold fra din konto og deaktivere den. Ditt brukernavn vil forbli reservert for å forhindre fremtidige etterligninger. proceed: Slett konto success_msg: Din konto ble slettet - warning_html: Kun sletting av innhold fra denne instansen er garantert. Innhold som har blitt delt i stor utstrekning vil sannsynligvis legge igjen spor. Tjenere som er frakoblet og tjenere som ikke abbonerer på dine oppdatereringer vil ikke oppdatere sine databaser. - warning_title: Tilgjengelighet av spredt innhold errors: + '400': The request you submitted was invalid or malformed. '403': Du har ikke tillatelse til å vise denne siden. '404': Siden du leter etter finnes ikke. + '406': This page is not available in the requested format. '410': Siden du leter etter finnes ikke lenger. '422': content: Sikkerhetsverifisering feilet. Blokkerer du informasjonskapsler? @@ -350,6 +338,7 @@ '500': content: Beklager men noe gikk galt ved vår ende. title: Denne siden er ikke korrekt + '503': The page could not be served due to a temporary server failure. noscript_html: For å bruke Mastodon webapplikasjon må du aktivere JavaScript. Alternativt kan du forsøke en av de mange <a href="%{apps_path}">integrerte appene</a> for Mastodon til din plattform. exports: blocks: Du blokkerer @@ -401,9 +390,6 @@ too_many: Kan ikke legge ved mer enn 4 filer migrations: acct: brukernavn@domene til den nye kontoen - currently_redirecting: 'Din profil er omdirigert til:' - proceed: Lagre - updated_msg: Dine innstillinger for kontomigrering er oppdatert! moderation: title: Moderasjon notification_mailer: diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 785caa4ec..851db0491 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -7,6 +7,7 @@ oc: active_count_after: actius active_footnote: Utilizaire actius per mes (UAM) administered_by: 'Administrat per :' + api: API apps: Aplicacions per mobil apps_platforms: Utilizatz Mastodon d‘iOS, Android o d’autras plataforma estant browse_directory: Navigatz per l’annuari de perfil e filtratz segon çò qu’aimatz @@ -16,10 +17,7 @@ oc: contact_unavailable: Pas disponible discover_users: Descobrissètz de nòvas personas documentation: Documentacion - extended_description_html: | - <h3>Una bona plaça per las règlas</h3> - <p>La descripcion longa es pas estada causida pel moment.</p> - generic_description: "%{domain} es un dels servidors del malhum" + federation_hint_html: Amb un compte sus %{instance} poiretz sègre de personas de qualque siasque servidor Mastodon e encara mai. get_apps: Ensajatz una aplicacion mobil hosted_on: Mastodon albergat sus %{domain} learn_more: Ne saber mai @@ -31,7 +29,12 @@ oc: one: estatut other: estatuts status_count_before: qu’an escrich + tagline: Seguètz d’amics e trobatz-ne de nòus terms: Condicions d’utilizacion + unavailable_content: Contengut pas disponible + unavailable_content_description: + domain: Servidor + reason: 'Motiu :' user_count_after: one: utilizaire other: utilizaires @@ -50,6 +53,7 @@ oc: media: Mèdias moved_html: "%{name} a mudat a %{new_profile_link} :" network_hidden: Aquesta informacion es pas disponibla + never_active: Jamai nothing_here: I a pas res aquí ! people_followed_by: Lo monde que %{name} sèc people_who_follow: Lo monde que sègon %{name} @@ -62,8 +66,10 @@ oc: posts_with_replies: Tuts e responsas reserved_username: Aqueste nom d’utilizaire es reservat roles: + admin: Admin bot: Robòt moderator: Moderador + unavailable: Perfil indisponible unfollow: Quitar de sègre admin: account_actions: @@ -76,7 +82,9 @@ oc: destroyed_msg: Nòta de moderacion ben suprimida ! accounts: approve: Aprovar + approve_all: O validar tot are_you_sure: Sètz segur ? + avatar: Avatar by_domain: Domeni change_email: changed_msg: Adreça corrèctament cambiada ! @@ -107,6 +115,7 @@ oc: header: Bandièra inbox_url: URL de recepcion invited_by: Convidat per + ip: IP joined: Venguèt location: all: Totes @@ -126,6 +135,7 @@ oc: moderation_notes: Nòtas de moderacion most_recent_activity: Activitat mai recenta most_recent_ip: IP mai recenta + no_account_selected: Cap de compte pas cambiat estant que cap èra pas seleccionat no_limits_imposed: Cap de limit impausat not_subscribed: Pas seguidor outbox_url: URL Outbox @@ -134,8 +144,11 @@ oc: profile_url: URL del perfil promote: Promòure protocol: Protocòl + public: Public push_subscription_expires: Fin de l’abonament PuSH redownload: Actualizar lo perfil + reject: Regetar + reject_all: O regetar tot remove_avatar: Supriir l’avatar remove_header: Levar la bandièra resend_confirmation: @@ -145,7 +158,9 @@ oc: reset: Reïnicializar reset_password: Reïnicializar lo senhal resubscribe: Se tornar abonar + role: Autorizacions roles: + admin: Administrator moderator: Moderador staff: Personnal user: Uitlizaire @@ -160,6 +175,7 @@ oc: statuses: Estatuts subscribe: S’abonar suspended: Suspendut + time_in_queue: En espèra a la fila %{time} title: Comptes unconfirmed_email: Adreça pas confirmada undo_silenced: Levar lo silenci @@ -167,6 +183,8 @@ oc: unsubscribe: Se desabonar username: Nom d’utilizaire warn: Avisar + web: Web + whitelisted: Mes en lista blanca action_logs: actions: assigned_to_self_report: "%{name} s’assignèt lo rapòrt %{target}" @@ -202,18 +220,23 @@ oc: deleted_status: "(estatut suprimit)" title: Audit dels jornals custom_emojis: + assign_category: Atribuir una categoria by_domain: Domeni copied_msg: Còpia locala de l’emoji ben creada copy: Copiar copy_failed_msg: Fracàs de la còpia locala de l’emoji + create_new_category: Crear una nòva categoria created_msg: Emoji ben creat ! delete: Suprimir destroyed_msg: Emoji ben suprimit ! disable: Desactivar disabled_msg: Aqueste emoji es ben desactivat + emoji: Emoji enable: Activar + enabled: Activat enabled_msg: Aqueste emoji es ben activat image_hint: PNG cap a 50Ko + list: Listar listed: Listat new: title: Ajustar un nòu emoji personal @@ -221,11 +244,14 @@ oc: shortcode: Acorchi shortcode_hint: Almens 2 caractèrs, solament alfanumerics e jonhent bas title: Emojis personals + uncategorized: Sens categoria + unlist: Listar pas unlisted: Pas listat update_failed_msg: Mesa a jorn de l’emoji fracasada updated_msg: Emoji ben mes a jorn ! upload: Enviar dashboard: + authorized_fetch_mode: Mòde recuperacion autorizat backlog: Accions en retard config: Configuracion feature_deletions: Supressions de comptes @@ -233,9 +259,13 @@ oc: feature_profile_directory: Annuari de perfils feature_registrations: Inscripcions feature_relay: Relai de federacion + feature_spam_check: Anti-spam + feature_timeline_preview: Apercebut del flux d’actualitats features: Foncionalitats hidden_service: Federacion amb servicis amagats open_reports: Senhalaments dobèrts + pending_tags: etiquetas en espèra de validacion + pending_users: utilizaires en espèra de validacion recent_users: Utilizaires recents search: Recèrca tèxte complèt single_user_mode: Mòde sol utilizaire @@ -247,11 +277,19 @@ oc: week_interactions: interaccions aquesta setmana week_users_active: actius aquesta setmana week_users_new: utilizaires aquesta setmana + whitelist_mode: Mòde lista blanca + domain_allows: + add_new: Plaçar en lista blanca + created_msg: Lo domeni es corrèctament estat plaçat en lista blanca + destroyed_msg: Lo domeni es corrèctament estat levat de la lista blanca + undo: Levar de la lista blanca domain_blocks: add_new: Ajustar un novèl blocatge de domeni created_msg: Domeni blocat es a èsser tractat destroyed_msg: Lo blocatge del domeni es estat levat domain: Domeni + edit: Modificar lo blocatge de domeni + existing_domain_block_html: Impausèretz ja de limitas mai estrictas per %{name}, vos cal lo <a href="%{unblock_url}">desblocar</a>d’en primièr. new: create: Crear blocatge hint: Lo blocatge empacharà pas la creacion de compte dins la basa de donadas, mai aplicarà la moderacion sus aquestes comptes. @@ -261,6 +299,9 @@ oc: silence: Silenci suspend: Suspendre title: Nòu blocatge domeni + private_comment: Comentari privat + private_comment_hint: Comentari tocant la limitacion d’aqueste domeni per un usatge intèrn pels moderators. + public_comment: Comentari public reject_media: Regetar los fichièrs mèdias reject_media_hint: Lèva los fichièrs gardats localament e regèta las demandas de telecargament dins lo futur. Servís pas a res per las suspensions reject_reports: Regetar los senhalaments @@ -280,6 +321,7 @@ oc: title: Restablir lo blocatge de domeni de %{domain} undo: Restablir undo: Restablir + view: Veire lo blocatge de domeni email_domain_blocks: add_new: Ajustar created_msg: Blocatge del domeni de corrièl ben plaçat @@ -303,6 +345,8 @@ oc: all: Totas limited: Limitat title: Moderacion + private_comment: Comentari privat + public_comment: Comentari public title: Federacion total_blocked_by_us: Avèm blocat total_followed_by_them: Sègon @@ -317,6 +361,8 @@ oc: expired: Expirats title: Filtre title: Convits + pending_accounts: + title: Comptes en espèra (%{count}) relays: add_new: Ajustar un nòu relai delete: Suprimir @@ -330,6 +376,7 @@ oc: pending: En espèra d’aprovacion del relai save_and_enable: Salvar e activar setup: Configurar una connexion relai + signatures_not_enabled: Los relais foncionaràn pas coma cal se lo mòde segur o lista blanca es activat status: Estatut title: Relais report_notes: @@ -378,6 +425,15 @@ oc: custom_css: desc_html: Modificar l’estil amb una fuèlha CSS cargada sus cada pagina title: CSS personalizada + default_noindex: + desc_html: Tòca totes los utilizaires qu’an pas cambiat lo paramètre + domain_blocks: + all: A tot lo monde + disabled: A degun + title: Mostrar los blocatges de domeni + users: Als utilizaires locals connectats + domain_blocks_rationale: + title: Mostrar lo rasonament hero: desc_html: Mostrat en primièra pagina. Almens 600x100px recomandat. S’es pas configurat l’imatge del servidor serà mostrat title: Imatge de l’eròi @@ -405,7 +461,9 @@ oc: title: Autorizat amb invitacions registrations_mode: modes: + approved: Validacion necessària per s’inscriure none: Degun pòt pas se marcar + open: Tot lo monde se pòt marcar title: Mòdes d’inscripcion show_known_fediverse_at_about_page: desc_html: Un còp activat mostrarà los tuts de totes los fediverse dins l’apercebut. Autrament mostrarà pas que los tuts locals. @@ -426,6 +484,8 @@ oc: desc_html: Afichada sus la pagina de las condicions d’utilizacion<br>Podètz utilizar de balisas HTML title: Politica de confidencialitat del site site_title: Títol del servidor + spam_check_enabled: + title: Anti-spam thumbnail: desc_html: Servís pels apercebuts via OpenGraph e las API. Talha de 1200x630px recomandada title: Miniatura del servidor @@ -433,12 +493,15 @@ oc: desc_html: Mostrar lo flux public sus la pagina d’acuèlh title: Apercebut flux public title: Paramètres del site + trends: + title: Etiquetas tendéncia statuses: back_to_account: Tornar a la pagina Compte batch: delete: Suprimir nsfw_off: Marcar coma pas sensible nsfw_on: Marcar coma sensible + deleted: Suprimits failed_to_execute: Fracàs media: title: Mèdia @@ -446,19 +509,23 @@ oc: no_status_selected: Cap d’estatut pas cambiat estant que cap èra pas seleccionat title: Estatuts del compte with_media: Amb mèdia - subscriptions: - callback_url: URL de rapèl - confirmed: Confirmat - expires_in: S’acaba dins - last_delivery: Darrièra distribucion - topic: Subjècte tags: - accounts: Comptes - hidden: Amagat - hide: Amagar dins l’annuari + accounts_today: Utilizacions unicas uèi + accounts_week: Utilizacions unicas aquesta setmana + context: Contèxt + directory: A l’annuari + in_directory: "%{count} a l’annuari" + last_active: Darrièra activitat + most_popular: Mai popularas + most_recent: Mai recentas name: Etiqueta + review: Repassar l’estatut + reviewed: Repassadas title: Etiquetas - unhide: Aparéisser dins l’annuari + trending_right_now: Actualament en tendéncia + unique_uses_today: "%{count} publicacions uèi" + unreviewed: Pas repassadas + updated_msg: Paramètres d’etiquetas corrèctament actualizats title: Administracion warning_presets: add_new: N’ajustar un nòu @@ -467,12 +534,23 @@ oc: edit_preset: Modificar lo tèxt predefinit d’avertiment title: Gerir los tèxtes predefinits admin_mailer: + new_pending_account: + body: Los detalhs del nòu compte son çai-jos. Podètz validar o regetar aquesta demanda. + subject: Nòu compte per repassar sus %{instance} (%{username}) new_report: body: "%{reporter} a senhalat %{target}" body_remote: Qualqu’un de %{domain} senhalèt %{target} subject: Novèl senhalament per %{instance} (#%{id}) + appearance: + advanced_web_interface: Interfàcia web avançada + advanced_web_interface_hint: 'Se volètz utilizar la nautor complèta de l’ecran, l’interfàcia web avançada vos permet de configurar diferentas colomnas per mostrar tan d’informacions que volètz : Acuèlh, notificacions, flux d’actualitat, e d’autras listas e etiquetas.' + animations_and_accessibility: Animacion e accessibilitat + confirmation_dialogs: Fenèstras de confirmacion + discovery: Descobèrta + sensitive_content: Contengut sensible application_mailer: notification_preferences: Cambiar las preferéncias de corrièl + salutation: "%{name}," settings: 'Cambiar las preferéncias de corrièl : %{link}' view: 'Veire :' view_profile: Veire lo perfil @@ -489,9 +567,12 @@ oc: apply_for_account: Demandar una invitacion change_password: Senhal checkbox_agreement_html: Accepti las <a href="%{rules_path}" target="_blank">règlas del servidor</a> e <a href="%{terms_path}" target="_blank">los tèrmes del servici</a> - confirm_email: Confirmar lo corrièl + checkbox_agreement_without_rules_html: Soi d’acòrdi amb las <a href="%{terms_path}" target="_blank">condicions d’utilizacion</a> delete_account: Suprimir lo compte delete_account_html: Se volètz suprimir vòstre compte, podètz <a href="%{path}">o far aquí</a>. Vos demandarem que confirmetz. + description: + prefix_invited_by_user: "@%{name} vos convida a rejónher aqueste servidor Mastodon !" + prefix_sign_up: Marcatz-vos a Mostodon uèi ! didnt_get_confirmation: Avètz pas recebut las instruccions de confirmacion ? forgot_password: Senhal oblidat ? invalid_reset_password_token: Lo geton de reïnicializacion es invalid o acabat. Tornatz demandar un geton se vos plai. @@ -500,12 +581,20 @@ oc: migrate_account: Mudar endacòm mai migrate_account_html: Se volètz mandar los visitors d’aqueste compte a un autre, podètz<a href="%{path}"> o configurar aquí</a>. or_log_in_with: O autentificatz-vos amb + providers: + cas: CAS + saml: SAML register: Se marcar registration_closed: "%{instance} accepta pas de nòus membres" resend_confirmation: Tornar mandar las instruccions de confirmacion reset_password: Reïnicializar lo senhal security: Seguretat set_new_password: Picar un nòu senhal + setup: + title: Configuracion + status: + account_status: Estat del compte + functional: Vòstre compte es complètament foncional. trouble_logging_in: Problèmas de connexion ? authorize_follow: already_following: Seguètz ja aqueste compte @@ -518,6 +607,11 @@ oc: return: Veire lo perfil a la persona web: Tornar a l’interfàcia Web title: Sègre %{acct} + challenge: + confirm: Contunhar + hint_html: "<strong>Asutúcia :</strong> vos demandarem pas vòstre senhal de nòu d’aquí unas oras." + invalid_password: Senhal invalid + prompt: Confirmatz lo senhal per dire de contunhar datetime: distance_in_words: about_x_hours: "%{count} h" @@ -531,27 +625,31 @@ oc: x_days: "%{count} jorns" x_minutes: "%{count} min" x_months: "%{count} meses" + x_seconds: "%{count}s" deletes: - bad_password_msg: Ben ensajat pirata ! Senhal incorrècte + challenge_not_passed: Las informacions qu’avètz fornidas son pas corrèctas confirm_password: Picatz vòstre senhal actual per verificar vòstra identitat - description_html: Aquò suprimirà <strong>definitivament e sens possibilitat de retorn</strong> lo contengut de vòstre compte e lo desactivarà. Lo nom d’utilizaire serà gardat per evitar una futura impostura. + confirm_username: Picatz vòstre nom d’utilizaire per confirmar la procedura proceed: Suprimir lo compte success_msg: Compte ben suprimit - warning_html: La supression del contengut d’aqueste servidor es sola assegurada. Lo contengut fòrça partejat daissarà probablament de traças. Los servidors fòra-linha e los que vos sègon pas mai auràn pas la mesa a jorn de lor basa de donada. - warning_title: Disponibilitat del contengut difusat + warning: + caches: Lo contengut en cache suls autres servidors pòt demorar + email_change_html: Podètz <a href="%{path}">cambiar vòstra adreça electronia</a>sens suprimir vòstre compte + irreversible: Poiretz pas restaurar o reactivar vòstre compte + more_details_html: Per mai d’informacion, vejatz la <a href="%{terms_path}">politica de confidencialitat</a>. + username_available: Vòstre nom d’utilizaire serà disponible de nòu + username_unavailable: Vòstre nom d’utilizaire demorarà pas disponible directories: directory: Annuari de perfils - enabled: Sètz actualament listat dins l'annuari. - enabled_but_waiting: Avètz causit d'èsser listat dins l'annuari mas avètz pas encara lo nombre minimum de seguidors (%{min_followers}) per i èsser listat. explanation: Trobar d’utilizaires segon lor interèsses explore_mastodon: Explorar %{title} - how_to_enable: Sètz pas actualament listat dins l’annuari. Podètz cambiar aquò çai-jos. Utilizatz d'etiquetas dins vòstre tèxt de bio per èsser listat amb d’etiquetas especificas ! - people: - one: "%{count} persona" - other: "%{count} personas" + domain_validator: + invalid_domain: es pas un nom de domeni valid errors: + '400': The request you submitted was invalid or malformed. '403': Avètz pas l’autorizacion de veire aquesta pagina. '404': La pagina que cercatz existís pas aquí. + '406': La pagina es pas disponibla dins lo format demandat. '410': La pagina que cercatz existís pas mai aquí. '422': content: Verificacion de seguretat fracassada. Blocatz los cookies ? @@ -560,16 +658,21 @@ oc: '500': content: Un quicomet a pas foncionat coma caliá. title: Aquesta pagina es pas corrècta + '503': The page could not be served due to a temporary server failure. noscript_html: Per utilizar l’aplicacion web de Mastodon, mercés d’activar JavaScript. O podètz utilizar <a href="%{apps_path}">una aplicacion</a> per vòstra plataforma coma alernativa. + existing_username_validator: + not_found: impossible de trobar un utilizaire local amb aqueste nom d’utilizaire + not_found_multiple: impossible de trobar %{usernames} exports: archive_takeout: date: Data download: Telecargar vòstre archiu - hint_html: Podètz demandar un archiu de vòstres <strong>tuts e mèdias enviats</strong>. Las donadas exportadas seràn al format ActivityPub, ligible pels logicials compatibles. Podètz demandar un archiu cada 7 jorns. - in_progress: Complilacion de vòstre archiu... + hint_html: Podètz demandar un archiu de vòstres <strong>tuts e mèdias enviats</strong>. Las donadas exportadas seràn al format ActivityPub, legible pels logicials compatibles. Podètz demandar un archiu cada 7 jorns. + in_progress: Compilacion de vòstre archiu... request: Demandar vòstre archiu size: Talha blocks: Personas que blocatz + csv: CSV domain_blocks: Blocatge de domenis follows: Personas que seguètz lists: Listas @@ -599,20 +702,37 @@ oc: developers: Desvolopaires more: Mai… resources: Ressorsas + trending_now: Tendéncia del moment generic: all: Tot changes_saved_msg: Cambiaments ben realizats ! copy: Copiar + no_batch_actions_available: Cap d’accion de massa pas disponibla sus aquesta pagina + order_by: Triar per save_changes: Salvar los cambiaments validation_errors: one: I a quicòm que truca ! Mercés de corregir l’error çai-jos other: I a quicòm que truca ! Mercés de corregir las %{count} errors çai-jos + html_validator: + invalid_markup: 'conten un balisatge HTML invalid : %{error}' identity_proofs: + active: Actiu authorize: Òc, autorizar authorize_connection_prompt: Autorizar aquesta connexion criptografica ? + errors: + failed: La connexion criptografica a fracassat. Ensajatz tornamai de %{provider} estant. + keybase: + invalid_token: Los getons Keybase son de hashes de signaturas e devon èsser de caractèrs 66 hex + verification_failed: Keybase reconeis pas aqueste geton coma signatura de l’utilizaire Keybase %{kb_username}. Ensajatz tornamai de Keybase estant. + wrong_user: Creacion impossibla de la pròva per %{proving} en estant connectat coma %{current}. Connectatz-vos coma %{proving} e ensajatz tornamai. + explanation_html: Aquí podètz connectar d’un biais criptografic vòstras identitats, coma un perfil Keybase. Aquò permet al monde de vos enviar de messatges chifrats e fisar al contengut que lor enviatz. i_am_html: Soi %{username} a %{service}. identity: Identitat + inactive: Inactiu + publicize_checkbox: 'E enviatz lo tut seguent :' + publicize_toot: 'Es provat ! Soi %{username} de %{service} : %{url}' status: Estatut de verificacion + view_proof: Veire la pròva imports: modes: merge: Fondre @@ -659,9 +779,20 @@ oc: too_many: Se pòt pas ajustar mai de 4 fichièrs migrations: acct: nomutilizaire@domeni del nòu compte - currently_redirecting: 'Vòstre perfil es parametrat per mandar a :' - proceed: Enregistrar - updated_msg: Vòstre paramètre de migracion es ben estat mes a jorn ! + cancel: Anullar la redireccion + cancelled_msg: Redireccion corrèctament anullada. + errors: + move_to_self: pòt pas èsser lo compte actual + not_found: impossible de trobar + incoming_migrations: Mudar d’un compte diferent + moved_msg: Vòstre compte manda ara a %{acct} e vòstres seguidors son desplaçats. + not_redirecting: Vòstre compte manda pas enlòc pel moment. + past_migrations: Migracions passadas + proceed_with_move: Desplaçar los seguidors + redirecting_to: Vòstre compte manda a %{acct}. + warning: + before: 'Abans de contunhar, volgatz legir aquestas nòtas amb atencion :' + other_data: Cap d’autra donada serà desplaçada automaticament moderation: title: Moderacion notification_mailer: @@ -698,11 +829,22 @@ oc: body: "%{name} a tornat partejar vòstre estatut :" subject: "%{name} a tornat partejar vòstre estatut" title: Novèl partatge + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T pagination: newer: Mai recents next: Seguent older: Mai ancians prev: Precedent + truncate: "…" polls: errors: already_voted: Avètz ja votat per aqueste sondatge @@ -715,13 +857,20 @@ oc: too_many_options: pòt pas contenir mai de %{max} opcions preferences: other: Autre + posting_defaults: Valors per defaut de las publicacions + public_timelines: Fluxes d’actualitats publics relationships: activity: Activitat del compte dormant: Inactiu + last_active: Darrièra activitat + most_recent: Mai recenta moved: Mudat mutual: Mutuala primary: Pirmària relationship: Relacion + remove_selected_domains: Levar totes los seguidors dels domenis seleccionats + remove_selected_followers: Levar los seguidors seleccionats + remove_selected_follows: Quitar de sègre las personas seleccionadas status: Estat del compte remote_follow: acct: Picatz vòstre utilizaire@domeni que que volètz utilizar per sègre aqueste utilizaire @@ -740,9 +889,6 @@ oc: reply: proceed: Contunhar per respondre prompt: 'Volètz respondre a aqueste tut :' - remote_unfollow: - title: Títol - unfollowed: Pas mai seguit scheduled_statuses: over_daily_limit: Avètz passat la limita de %{limit} tuts programats per aquel jorn over_total_limit: Avètz passat la limita de %{limit} tuts programats @@ -751,15 +897,48 @@ oc: activity: Darrièra activitat browser: Navigator browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Navigator desconegut + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo current_session: Session en cors description: "%{browser} sus %{platform}" explanation: Aquí los navigators connectats a vòstre compte Mastodon. + ip: IP platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac other: plataforma desconeguda + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Revocar revoke_success: Session ben revocada + title: Sessions settings: + account: Compte + account_settings: Paramètres de compte + aliases: Alias de compte + appearance: Aparéncia authorized_apps: Aplicacions autorizadas back: Tornar a Mastodon delete: Supression de compte @@ -767,10 +946,13 @@ oc: edit_profile: Modificar lo perfil export: Exportar de donadas featured_tags: Etiquetas en avant + identity_proofs: Pròvas d’identitat import: Importar de donadas + import_and_export: Import e export migrate: Migracion de compte notifications: Notificacions preferences: Preferéncias + profile: Perfil relationships: Abonaments e seguidors two_factor_authentication: Autentificacion en dos temps statuses: @@ -806,6 +988,7 @@ oc: visibilities: private: Seguidors solament private_long: Mostrar pas qu’als seguidors + public: Public public_long: Tot lo monde pòt veire unlisted: Pas listat unlisted_long: Tot lo monde pòt veire mai serà pas visible sul flux public @@ -813,6 +996,8 @@ oc: pinned: Tut penjat reblogged: a partejat sensitive_content: Contengut sensible + tags: + does_not_match_previous_name: correspond pas al nom precedent terms: body_html: | <h2>Politica de confidencialitat</h2> @@ -905,6 +1090,7 @@ oc: time: formats: default: Lo %d %b de %Y a %Ho%M + month: "%b de %Y" two_factor_authentication: code_hint: Picatz lo còdi generat per vòstra aplicacion d’autentificacion per confirmar description_html: S’activatz <strong> l’autentificacion two-factor</strong>, vos caldrà vòstre mobil per vos connectar perque generarà un geton per vos daissar dintrar. @@ -931,7 +1117,9 @@ oc: disable: Quand vòstre compte es gelat, las donadas d’aqueste demòran senceras, mas podètz pas realizar cap d’accion fins que siá desblocat. silence: Del temps que vòstre compte es limitat, solament lo monde que vos sègon veiràn vòstres tuts sus aqueste servidor, e poiriatz èsser tirat de mantunas listas publicas. Pasmens, d’autres vos pòdon sègre manualament. suspend: Vòstre compte es suspendut e totes vòstres tuts e fichièrs enviats son estats suprimits sens retorn possible d’aqueste servidor e los de vòstres seguidors. + get_in_touch: Podètz respondre a aqueste corrièl per contactar la còla de %{instance}. review_server_policies: Repassar las politicas del servidor + statuses: 'Especificament per :' subject: disable: Vòstre compte %{acct} es gelat none: Avertiment per %{acct} diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 538e6d554..5cf346dc7 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -17,13 +17,12 @@ pl: contact_unavailable: Nie dotyczy discover_users: Odkrywaj użytkowników documentation: Dokumentacja - extended_description_html: | - <h3>Dobre miejsce na zasady użytkowania</h3> - <p>Nie ustawiono jeszcze szczegółowego opisu</p> federation_hint_html: Z kontem na %{instance}, możesz śledzić użytkowników każdego serwera Mastodona i nie tylko. - generic_description: "%{domain} jest jednym z serwerów sieci" get_apps: Spróbuj aplikacji mobilnej hosted_on: Mastodon uruchomiony na %{domain} + instance_actor_flash: | + To konto jest wirtualnym nadawcą, używanym do reprezentacji serwera, a nie jakiegokolwiek użytkownika. + Jest używane w celu federowania i nie powinno być blokowane, chyba że chcesz zablokować całą instację, w takim przypadku użyj blokady domeny. learn_more: Dowiedz się więcej privacy_policy: Polityka prywatności see_whats_happening: Zobacz co się dzieje @@ -35,8 +34,16 @@ pl: one: wpisu other: wpisów status_count_before: Są autorami - tagline: Śledź znajomych i poznawal nowych + tagline: Śledź znajomych i poznawaj nowych terms: Zasady użytkowania + unavailable_content: Niedostępne treści + unavailable_content_description: + domain: Serwer + reason: Powód + rejecting_media: 'Pliki multimedialne z tych serwerów nie będą przetwarzane ani przechowywane, ani ich miniaturki nie będą wyświetlane, wymuszając ręczne przejście do oryginalnego pliku:' + silenced: 'Posty z tych serwerów będą ukryte na publicznych osiach czasu i konwersacjach, a powiadomienia z interakcji ich użytkowników nie będą generowane, chyba że ich obserwujesz:' + suspended: 'Żadne dane z tych serwerów nie będą przetwarzane, przechowywane ani wymieniane, sprawiając że jakakolwiek interakcja czy komunikacja z użytkownikami tych serwerów będzie niemożliwa:' + unavailable_content_html: Normalnie Mastodon pozwala ci przeglądać treści od innych użytkowników z jakiegokolwiek serwera w fediwersum. To są wyjątki, które zostały stworzone na tym konkretnym serwerze. user_count_after: few: użytkowników many: użytkowników @@ -46,19 +53,22 @@ pl: what_is_mastodon: Czym jest Mastodon? accounts: choices_html: 'Polecani przez %{name}:' + endorsements_hint: Możesz promować ludzi, których obserwujesz, z poziomu interfejsu webowego - wtedy oni pojawią się w tym miejscu. + featured_tags_hint: Możesz przedstawić w tym miejscu kilka wybranych hasztagów. follow: Śledź followers: few: śledzących many: śledzących one: śledzący other: Śledzących - following: Śledzonych + following: śledzonych joined: Dołączył(a) %{date} last_active: ostatnio aktywny(-a) link_verified_on: Własność tego odnośnika została sprawdzona %{date} media: Zawartość multimedialna moved_html: "%{name} korzysta teraz z konta %{new_profile_link}:" network_hidden: Ta informacja nie jest dostępna + never_active: Nigdy nothing_here: Niczego tu nie ma! people_followed_by: Konta śledzone przez %{name} people_who_follow: Osoby, które śledzą konto %{name} @@ -191,6 +201,7 @@ pl: username: Nazwa użytkownika warn: Ostrzeż web: Sieć + whitelisted: Na białej liście action_logs: actions: assigned_to_self_report: "%{name} przypisał(a) sobie zgłoszenie %{target}" @@ -226,10 +237,12 @@ pl: deleted_status: "(usunięty wpis)" title: Dziennik działań administracyjnych custom_emojis: + assign_category: Ustaw kategorię by_domain: Domeny copied_msg: Pomyślnie utworzono lokalną kopię emoji copy: Kopiuj copy_failed_msg: Nie udało się utworzyć lokalnej kopii emoji + create_new_category: Stwórz nową kategorię created_msg: Pomyślnie utworzono emoji! delete: Usuń destroyed_msg: Pomyślnie usunięto emoji! @@ -239,6 +252,7 @@ pl: enable: Włącz enabled_msg: Pomyślnie przywrócono emoji image_hint: Plik PNG ważący do 50KB + list: Dodaj do listy listed: Widoczne new: title: Dodaj nowe niestandardowe emoji @@ -246,11 +260,14 @@ pl: shortcode: Krótki kod shortcode_hint: Co najmniej 2 znaki, tylko znaki alfanumeryczne i podkreślniki title: Niestandardowe emoji + uncategorized: Bez kategorii + unlist: Usuń z listy unlisted: Niewidoczne update_failed_msg: Nie udało się zaktualizować emoji updated_msg: Pomyślnie zaktualizowano emoji! upload: Dodaj dashboard: + authorized_fetch_mode: Tryb bezpieczny backlog: zaległe zadania config: Konfiguracja feature_deletions: Usuwanie kont @@ -258,10 +275,13 @@ pl: feature_profile_directory: Katalog profilów feature_registrations: Rejestracja feature_relay: Przekazywanie federacji + feature_spam_check: Anty-spam feature_timeline_preview: Podgląd osi czasu features: Możliwości hidden_service: Federowanie z ukrytymi usługami open_reports: otwarte zgłoszenia + pending_tags: hasztagi oczekujące na sprawdzenie + pending_users: użytkownicy oczekujący na sprawdzenie recent_users: Ostatni użytkownicy search: Wyszukiwanie pełnego tekstu single_user_mode: Tryb jednego użytkownika @@ -273,11 +293,18 @@ pl: week_interactions: interakcje w tym tygodniu week_users_active: aktywni w tym tygodniu week_users_new: rejestracje w tym tygodniu + whitelist_mode: Tryb białej listy + domain_allows: + add_new: Zatwierdź domenę + created_msg: Domena dodana do białej listy + destroyed_msg: Domena usunięta z białej listy + undo: Usuń z białej listy domain_blocks: add_new: Dodaj nową created_msg: Blokada domen jest przetwarzana destroyed_msg: Blokada domeny nie może zostać odwrócona domain: Domena + edit: Edytuj blokadę domeny existing_domain_block_html: Już narzuciłeś bardziej rygorystyczne limity na %{name}, musisz najpierw <a href="%{unblock_url}">je odblokować</a>. new: create: Utwórz blokadę @@ -288,6 +315,9 @@ pl: silence: Wycisz suspend: Zawieś title: Nowa blokada domen + private_comment: Prywatny komentarz + private_comment_hint: Komentarz na temat ograniczeń dla tej domeny do wewnętrznej informacji dla moderatorów. + public_comment: Publiczny komentarz reject_media: Odrzucaj pliki multimedialne reject_media_hint: Usuwa przechowywane lokalnie pliki multimedialne i nie pozwala na ich pobieranie. Nieprzydatne przy zawieszeniu reject_reports: Odrzucaj zgłoszenia @@ -309,6 +339,7 @@ pl: title: Odwołaj blokadę dla domeny %{domain} undo: Cofnij undo: Cofnij + view: Zobacz blokadę domeny email_domain_blocks: add_new: Dodaj nową created_msg: Pomyślnie utworzono blokadę domeny e-mail @@ -334,6 +365,8 @@ pl: all: Wszystkie limited: Ograniczone title: Moderacja + private_comment: Prywatny komentarz + public_comment: Publiczny komentarz title: Znane instancje total_blocked_by_us: Zablokowane przez nas total_followed_by_them: Śledzeni przez nich @@ -363,6 +396,7 @@ pl: pending: Oczekiwanie na przyjęcie przez przekaźnik save_and_enable: Zapisz i aktywuj setup: Skonfiguruj połączenie z przekaźnikiem + signatures_not_enabled: Przekaźniki nie będą funkcjonować poprawnie kiedy tryb bezpieczeństwa lub białej listy są włączone status: Stan title: Przekaźniki report_notes: @@ -481,21 +515,8 @@ pl: no_status_selected: Żaden wpis nie został zmieniony, bo żaden nie został wybrany title: Wpisy konta with_media: Z zawartością multimedialną - subscriptions: - callback_url: URL zwrotny - confirmed: Potwierdzone - expires_in: Wygasa - last_delivery: Ostatnio doręczono - title: WebSub - topic: Temat tags: - accounts: Konta - hidden: Ukryte - hide: Ukryj w katalogu - name: Hasztag title: Hashtagi - unhide: Pokazuj w katalogu - visible: Widoczne title: Administracja warning_presets: add_new: Dodaj nowy @@ -536,7 +557,6 @@ pl: apply_for_account: Poproś o zaproszenie change_password: Hasło checkbox_agreement_html: Zgadzam się z <a href="%{rules_path}" target="_blank">regułami serwera</a> i <a href="%{terms_path}" target="_blank">zasadami korzystania z usługi</a> - confirm_email: Potwierdź adres e-mail delete_account: Usunięcie konta delete_account_html: Jeżeli chcesz usunąć konto, <a href="%{path}">przejdź tutaj</a>. Otrzymasz prośbę o potwierdzenie. didnt_get_confirmation: Nie otrzymałeś(-aś) instrukcji weryfikacji? @@ -583,28 +603,18 @@ pl: x_months: "%{count} miesięcy" x_seconds: "%{count}s" deletes: - bad_password_msg: Niezła próba, hakerze! Wprowadzono nieprawidłowe hasło confirm_password: Wprowadź aktualne hasło, aby potwierdzić tożsamość - description_html: Ta opcja usunie <strong>bezpowrotnie i nieodwracalnie</strong> całą zawartość konta i zdezaktywuje je. Twoja nazwa użytkownika pozostanie zarezerwowana, aby zapobiec nadużyciom. proceed: Usuń konto success_msg: Twoje konto zostało pomyślnie usunięte - warning_html: Możemy usunąć zawartość jedynie w obrębie tego serwera. Zawartość udostępniona publicznie pozostawia trwałe ślady. Serwery niepodłączone do sieci bądź nieśledzące Twoich aktualizacji mogą zachować Twoje dane. - warning_title: Dostępność usuniętej zawartości directories: directory: Katalog profilów - enabled: Jesteś obecnie zapisany(-a) do katalogu - enabled_but_waiting: Jesteś zapisany(-a) do katalogu, ale jeszcze nie śledzi Cię wystarczająca liczba osób (%{min_followers}), aby się tam pojawić. explanation: Poznaj profile na podstawie zainteresowań explore_mastodon: Odkrywaj %{title} - how_to_enable: Nie jesteś obecnie zapisany(-a) do katalogu. Poniżej możesz zapisać się. Użyj hashtagów w swoim opisie, aby zostać wyświetlonym pod określonymi hashtagami! - people: - few: "%{count} osoby" - many: "%{count} osób" - one: "%{count} osoba" - other: "%{count} osób" errors: + '400': The request you submitted was invalid or malformed. '403': Nie masz uprawnień, aby wyświetlić tę stronę. '404': Strona, którą próbujesz odwiedzić, nie istnieje. + '406': This page is not available in the requested format. '410': Strona, którą próbujesz odwiedzić, przestała istnieć. '422': content: Sprawdzanie bezpieczeństwa nie powiodło się. Czy blokujesz pliki cookie? @@ -613,6 +623,7 @@ pl: '500': content: Przepraszamy, coś poszło nie tak, po naszej stronie. title: Ta strona jest nieprawidłowa + '503': The page could not be served due to a temporary server failure. noscript_html: Aby korzystać z aplikacji Mastodon, włącz JavaScript. Możesz też skorzystać z jednej z <a href="%{apps_path}">natywnych aplikacji</a> obsługującej Twoje urządzenie. existing_username_validator: not_found: nie znaleziono lokalnego użytkownika o tej nazwie @@ -736,9 +747,6 @@ pl: too_many: Nie możesz załączyć więcej niż 4 plików migrations: acct: nazwa@domena nowego konta - currently_redirecting: 'Obecnie Twoje konto przekierowuje do:' - proceed: Zapisz - updated_msg: Pomyślnie zaktualizowano ustawienia migracji Twojego konta! moderation: title: Moderacja notification_mailer: @@ -839,10 +847,6 @@ pl: reply: proceed: Przejdź do dodawania odpowiedzi prompt: 'Chcesz odpowiedzieć na ten wpis:' - remote_unfollow: - error: Błąd - title: Tytuł - unfollowed: Przestałeś(-aś) śledzić scheduled_statuses: over_daily_limit: Przekroczyłeś(-aś) limit %{limit} zaplanowanych wpisów na ten dzień over_total_limit: Przekroczyłeś(-aś) limit %{limit} zaplanowanych wpisów @@ -1025,9 +1029,9 @@ pl: <h3 id="children">Korzystanie ze strony przez dzieci</h3> - <p>Jeżeli serwer znajduje się w UE lub w EOG: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 16 lat. Jeżeli nie ukończyłeś(-aś) 16 roku życia, zgodnie z wymogami COPPA (<a href="https://pl.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Prawo o Ochronie Prywatności Dzieci w Internecie</a>), nie używaj tej strony.</p> + <p>Jeżeli serwer znajduje się w UE lub w EOG: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 16 lat. Jeżeli nie ukończyłeś(-aś) 16 roku życia, zgodnie z wymogami RODO (<a href="https://pl.wikipedia.org/wiki/Ogólne_rozporządzenie_o_ochronie_danych">Ogólne rozporządzenie o ochronie danych</a>), nie używaj tej strony.</p> - <p>Jeżeli serwer znajduje się w USA: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 13 lat. Jeżeli nie ukończyłeś(-aś) 13 roku życia, zgodnie z wymogami RODO (<a href="https://pl.wikipedia.org/wiki/Ogólne_rozporządzenie_o_ochronie_danych">Ogólne rozporządzenie o ochronie danych</a>), nie używaj tej strony.</p> + <p>Jeżeli serwer znajduje się w USA: Ta strona, produkty i usługi są przeznaczone dla osób, które ukończyły 13 lat. Jeżeli nie ukończyłeś(-aś) 13 roku życia, zgodnie z wymogami COPPA (<a href="https://pl.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Prawo o Ochronie Prywatności Dzieci w Internecie</a>), nie używaj tej strony.</p> <p>Wymogi mogą być inne, jeżeli serwer znajduje się w innym kraju.</p> diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index d75e91b8b..7391ff06c 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -7,6 +7,7 @@ pt-BR: active_count_after: Ativo active_footnote: Usuários ativos mensais (UAM) administered_by: 'Administrado por:' + api: API apps: Apps apps_platforms: Use o Mastodon a partir de iOS, Android e outras plataformas browse_directory: Navegue pelo diretório de perfis e filtre por interesses @@ -16,11 +17,7 @@ pt-BR: contact_unavailable: Não disponível discover_users: Descubra usuários documentation: Documentação - extended_description_html: | - <h3>Um bom lugar para regras</h3> - <p>A descrição da instância ainda não foi feita.</p> federation_hint_html: Com uma conta em %{instance} você vai poder seguir pessoas em qualquer servidor Mastodon ou outros do fediverso. - generic_description: "%{domain} é um servidor na rede" get_apps: Experimente um aplicativo hosted_on: Mastodon hospedado em %{domain} learn_more: Saiba mais @@ -31,6 +28,11 @@ pt-BR: status_count_before: Autores de tagline: Siga amigos e encontre novos terms: Termos de serviço + unavailable_content: Conteúdo indisponível + unavailable_content_description: + reason: 'Motivo:' + suspended: Você não será capaz de seguir ninguém deste servidor, e nenhum dado dele será processado ou armazenado, e nenhum dado trocado. + unavailable_content_html: Mastodon geralmente permite que você veja o conteúdo e interaja com usuários de qualquer outro servidor no fediverso. Estas são as exceções deste servidor específico. user_count_after: one: usuário other: usuários @@ -38,6 +40,7 @@ pt-BR: what_is_mastodon: O que é Mastodon? accounts: choices_html: 'Escolhas de %{name}:' + featured_tags_hint: Você pode destacar hashtags específicas que serão exibidas aqui. follow: Seguir followers: one: Seguidor @@ -49,11 +52,16 @@ pt-BR: media: Mídia moved_html: "%{name} se mudou para %{new_profile_link}:" network_hidden: Esta informação não está disponível + never_active: Nunca nothing_here: Não há nada aqui! people_followed_by: Pessoas que %{name} segue people_who_follow: Pessoas que seguem %{name} pin_errors: following: Você tem que estar seguindo a pessoa que você quer sugerir + posts: + one: Toot + other: Toots + posts_tab_heading: Toots posts_with_replies: Toots e respostas reserved_username: Este usuário está reservado roles: @@ -75,6 +83,7 @@ pt-BR: approve: Aprovar approve_all: Aprovar tudo are_you_sure: Você tem certeza? + avatar: Imagem de Perfil by_domain: Domínio change_email: changed_msg: E-mail da conta modificado com sucesso! @@ -105,9 +114,11 @@ pt-BR: header: Cabeçalho inbox_url: URL da caixa de entrada invited_by: Convidado por + ip: IP joined: Se cadastrou location: all: Todos + local: Local remote: Remoto title: Localização login_status: Situação de login @@ -163,6 +174,7 @@ pt-BR: statuses: Postagens subscribe: Inscrever-se suspended: Suspenso + time_in_queue: Esperando na fila por %{time} title: Contas unconfirmed_email: E-mail não confirmado undo_silenced: Retirar silenciamento @@ -170,6 +182,7 @@ pt-BR: unsubscribe: Desinscrever-se username: Nome de usuário warn: Notificar + web: Web action_logs: actions: assigned_to_self_report: "%{name} designou a denúncia %{target} para si" @@ -205,15 +218,18 @@ pt-BR: deleted_status: "(status deletado)" title: Auditar relatório custom_emojis: + assign_category: Designar Categoria by_domain: Domínio copied_msg: Cópia local do emoji criada com sucesso copy: Copiar copy_failed_msg: Não foi possível criar uma cópia local deste emoji + create_new_category: Criar nova categoria created_msg: Emoji criado com sucesso! delete: Excluir destroyed_msg: Emoji deletado com sucesso! disable: Desabilitar disabled_msg: Emoji desabilitado com sucesso + emoji: Emoji enable: Habilitar enabled_msg: Emoji habilitado com sucesso image_hint: PNG de até 50KB @@ -224,6 +240,7 @@ pt-BR: shortcode: Atalho shortcode_hint: Pelo menos 2 caracteres, apenas caracteres alfanuméricos e underscores title: Emojis customizados + uncategorized: Não categorizado unlisted: Não listado update_failed_msg: Não foi possível atualizar esse emoji updated_msg: Emoji atualizado com sucesso! @@ -236,13 +253,17 @@ pt-BR: feature_profile_directory: Diretório de perfis feature_registrations: Cadastros feature_relay: Repetidor da federação + feature_spam_check: Anti-spam feature_timeline_preview: pré-visualização da timeline features: Funcionalidades hidden_service: Federação com serviços onion open_reports: Denúncias em aberto + pending_tags: hashtags aguardando revisão + pending_users: usuários aguardando revisão recent_users: Usuários recentes search: Pesquisa em texto single_user_mode: Modo de usuário único + software: Software space: Uso de espaço em disco title: Painel de controle total_users: usuários no total @@ -255,6 +276,8 @@ pt-BR: created_msg: Bloqueio de domínio está sendo processado destroyed_msg: Bloqueio de domínio desfeito domain: Domínio + edit: Editar bloqueio de domínio + existing_domain_block_html: Você já impôs limites mais restritivos a %{name}, é necessário primeiro <a href="%{unblock_url}">desbloqueá-lo</a>. new: create: Criar bloqueio hint: O bloqueio de domínio não prevenirá a criação de entradas de contas na base de dados, mas vai reatroativa e automaticamente aplicar métodos específicos de moderação nestas contas. @@ -264,6 +287,8 @@ pt-BR: silence: Silêncio suspend: Suspensão title: Novo bloqueio de domínio + private_comment: Comentário privado + public_comment: Comentário público reject_media: Rejeitar arquivos de mídia reject_media_hint: Remove arquivos de mídia armazenados localmente e recusa quaisquer outros no futuro. Irrelevante para suspensões reject_reports: Rejeitar denúncias @@ -283,6 +308,7 @@ pt-BR: title: Retirar bloqueio de domínio de %{domain} undo: Retirar undo: Retirar bloqueio de domínio + view: Ver domínios bloqueados email_domain_blocks: add_new: Adicionar novo created_msg: Bloqueio de domínio de e-mail criado com sucesso @@ -306,6 +332,8 @@ pt-BR: all: Todas limited: Limitado title: Moderação + private_comment: Comentário privado + public_comment: Comentário público title: Federação total_blocked_by_us: Bloqueado por nós total_followed_by_them: Seguidos por eles @@ -381,6 +409,15 @@ pt-BR: custom_css: desc_html: Modificar o visual com CSS que é carregado em todas as páginas title: CSS customizado + default_noindex: + desc_html: Afeta qualquer usuário que não tenha modificado esta configuração manualmente + domain_blocks: + all: Para todo mundo + disabled: Para ninguém + title: Mostrar domínios bloqueados + users: Para usuários locais logados + domain_blocks_rationale: + title: Visualizar justificativa hero: desc_html: Aparece na página inicial. Ao menos 600x100px é recomendado. Se não estiver definido, o thumbnail da instância é usado no lugar title: Imagem de capa @@ -431,6 +468,8 @@ pt-BR: desc_html: Você pode escrever a sua própria política de privacidade, termos de serviço, entre outras coisas. Você pode usar tags HTML title: Termos de serviço customizados site_title: Nome da instância + spam_check_enabled: + title: Automação anti-spam thumbnail: desc_html: Usada para prévias via OpenGraph e API. Recomenda-se 1200x630px title: Miniatura da instância @@ -438,12 +477,15 @@ pt-BR: desc_html: Exibir a timeline pública na página inicial title: Prévia da timeline title: Configurações do site + trends: + title: Hashtags em alta statuses: back_to_account: Voltar para página da conta batch: delete: Deletar nsfw_off: Marcar como não-sensível nsfw_on: Marcar como sensível + deleted: Excluídos failed_to_execute: Falha em executar media: title: Mídia @@ -451,18 +493,16 @@ pt-BR: no_status_selected: Nenhum status foi modificado porque nenhum estava selecionado title: Postagens da conta with_media: Com mídia - subscriptions: - callback_url: URL de Callback - confirmed: Confirmado - expires_in: Expira em - last_delivery: Última entrega - topic: Tópico tags: - accounts: Contas - hidden: Escondido - hide: Esconder do diretório - unhide: Mostrar no diretório - visible: Visível + context: Contexto + directory: No diretório + most_popular: Mais populares + most_recent: Mais recentes + name: Hashtag + title: Hashtags + trending_right_now: Em alta no momento + unreviewed: Não revisadas + updated_msg: Configurações de hashtag atualizadas com sucesso title: Administração warning_presets: add_new: Adicionar um novo @@ -478,8 +518,17 @@ pt-BR: body: "%{reporter} denunciou %{target}" body_remote: Alguém da instância %{domain} reportou %{target} subject: Nova denúncia sobre %{instance} (#%{id}) + appearance: + advanced_web_interface: Interface web avançada + advanced_web_interface_hint: 'Se você deseja usar toda a sua largura de tela, a interface web avançada permite que você configure muitas colunas diferentes para ver tantas informações ao mesmo tempo quanto você deseja: Início, notificações, linha do tempo federada, qualquer número de listas e hashtags.' + animations_and_accessibility: Animações e acessibilidade + confirmation_dialogs: Popups de confirmação + discovery: Descobrir + sensitive_content: Conteúdo sensível + toot_layout: Layout do Toot application_mailer: notification_preferences: Mudar preferências de e-mail + salutation: "%{name}," settings: 'Mudar e-mail de preferência: %{link}' view: 'Visualizar:' view_profile: Ver perfil @@ -496,9 +545,13 @@ pt-BR: apply_for_account: Pedir um convite change_password: Senha checkbox_agreement_html: Eu concordo com <a href="%{rules_path}" target="_blank">as regras do servidor</a> e com <a href="%{terms_path}" target="_blank">os termos de serviço</a> - confirm_email: Confirmar e-mail + checkbox_agreement_without_rules_html: Concordo com os <a href="%{terms_path}" target="_blank">termos do serviço </a> delete_account: Excluir conta delete_account_html: Se você deseja excluir a sua conta, você pode <a href="%{path}">prosseguir para cá</a>. Uma confirmação será requisitada. + description: + prefix_invited_by_user: "@%{name} convidou você para entrar neste servidor do Mastodon!" + prefix_sign_up: Cadastre-se no Mastodon hoje! + suffix: Com uma conta, você poderá seguir pessoas, postar atualizações, trocar mensagens com usuários de qualquer servidor Mastodon e muito mais! didnt_get_confirmation: Não recebeu instruções de confirmação? forgot_password: Esqueceu a sua senha? invalid_reset_password_token: Token de modificação de senha é inválido ou expirou. Por favor, requisite um novo. @@ -507,12 +560,20 @@ pt-BR: migrate_account: Mudar para uma conta diferente migrate_account_html: Se você quer redirecionar essa conta para uma outra você pode <a href="%{path}">configurar isso aqui</a>. or_log_in_with: Ou faça login com + providers: + cas: CAS + saml: SAML register: Cadastrar-se registration_closed: "%{instance} não está aceitando novos membros" resend_confirmation: Reenviar instruções de confirmação reset_password: Redefinir senha security: Segurança set_new_password: Definir uma nova senha + setup: + email_below_hint_html: Se o endereço de e-mail abaixo estiver incorreto, você pode alterá-lo aqui e receber um novo e-mail de confirmação. + email_settings_hint_html: O e-mail de confirmação foi enviado para %{email}. Se esse endereço de e-mail não estiver correto, você pode alterá-lo nas configurações da conta. + status: + redirecting_to: Sua conta está inativa porque atualmente está redirecionando para %{acct}. trouble_logging_in: Problemas para se conectar? authorize_follow: already_following: Você já está seguindo esta conta @@ -525,8 +586,12 @@ pt-BR: return: Exibir o perfil do usuário web: Voltar para a página inicial title: Seguir %{acct} + challenge: + invalid_password: Senha inválida + prompt: Confirme sua senha para continuar datetime: distance_in_words: + about_x_hours: "%{count}h" about_x_months: "%{count} meses" about_x_years: "%{count} anos" almost_x_years: "%{count} anos" @@ -539,26 +604,25 @@ pt-BR: x_months: "%{count} meses" x_seconds: "%{count} segundos" deletes: - bad_password_msg: Boa tentativa, hackers! Senha incorreta + challenge_not_passed: As informações que você inseriu não estão corretas confirm_password: Insira a sua senha atual para verificar a sua identidade - description_html: Isto vai <strong>permanente e irreversivelmente</strong> remover conteúdo de sua conta e desativá-la. O seu nome de usuário permanecerá reservado para previnir futuros roubos de identidade. + confirm_username: Digite seu nome de usuário para confirmar o procedimento proceed: Excluir conta success_msg: A sua conta foi excluída com sucesso - warning_html: Apenas a exclusão de conteúdo desta instância em particular é garantida. Conteúdo que tenha sido largamente compartilhado muito provavelmente deixará traços. Servidores offline e servidores que se desinscreveram de suas atualizações não irão atualizar as suas bases de dados. - warning_title: Disponibilidade de conteúdo disseminado + warning: + before: 'Antes de prosseguir, por favor leia com cuidado:' + data_removal: Suas postagens e outros dados serão removidos permanentemente + username_available: Seu nome de usuário ficará disponível novamente + username_unavailable: Seu nome de usuário permanecerá indisponível directories: directory: Diretório de perfis - enabled: Você está na lista do diretório. - enabled_but_waiting: Você escolheu ser listado no diretório, mas você ainda não tem o mínimo de seguidores (%{min_followers}) para ser listado. explanation: Descobrir usuários baseado em seus interesses explore_mastodon: Explorar %{title} - how_to_enable: Você não se inscreveu no diretório. Você pode se inscrever abaixo. Use hashtags no texto da sua bio para ser listado em hashtags específicas! - people: - one: "%{count} pessoa" - other: "%{count} pessoas" errors: + '400': The request you submitted was invalid or malformed. '403': Você não tem permissão para ver esta página. '404': A página pela qual você está procurando não existe. + '406': This page is not available in the requested format. '410': A página pela qual você está procurando não existe mais. '422': content: A verificação de segurança falhou. Você desativou o uso de cookies? @@ -567,6 +631,7 @@ pt-BR: '500': content: Desculpe, algo deu errado. title: Esta página não está certa + '503': The page could not be served due to a temporary server failure. noscript_html: Para usar o aplicativo web do Mastodon, por favor ative o JavaScript. Ou, se quiser, experimente um dos <a href="%{apps_path}">apps nativos</a> para o Mastodon em sua plataforma. existing_username_validator: not_found: não foi possível encontrar um usuário local com esse nome de usuário @@ -580,6 +645,7 @@ pt-BR: request: Solicitar o seu arquivo size: Tamanho blocks: Você bloqueou + csv: CSV domain_blocks: Bloqueios de domínio follows: Você segue lists: Listas @@ -684,9 +750,15 @@ pt-BR: too_many: Não é possível anexar mais de 4 imagens migrations: acct: username@domain da nova conta - currently_redirecting: 'Seu perfil está configurado para redirecionar para:' - proceed: Salvar - updated_msg: As configurações de migração da sua conta foram atualizadas com sucesso! + incoming_migrations: Migrando de outra conta + moved_msg: Agora sua conta está redirecionando para %{acct} e seus seguidores estão sendo movidos. + not_redirecting: Sua conta não está redirecionando para nenhuma outra conta atualmente. + on_cooldown: Você migrou recentemente sua conta. Esta função ficará disponível novamente em %{count} dias. + past_migrations: Migrações passadas + proceed_with_move: Migrar seguidores + redirecting_to: Sua conta está redirecionando para %{acct}. + warning: + before: 'Antes de prosseguir, por favor leia com cuidado:' moderation: title: Moderação notification_mailer: @@ -770,10 +842,6 @@ pt-BR: reply: proceed: Proceder para responder prompt: 'Você quer responder à esse toot:' - remote_unfollow: - error: Erro - title: Título - unfollowed: Deixou de seguir scheduled_statuses: over_daily_limit: Você excedeu o limite de %{limit} toots planejados para esse dia over_total_limit: Você excedeu o limite de %{limit} toots planejados @@ -782,13 +850,40 @@ pt-BR: activity: Última atividade browser: Navegador browsers: + alipay: Alipay + blackberry: BlackBerry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Navegador desconhecido + ie: Internet Explorer + micro_messenger: MicroMessenger nokia: Navegador Nokia S40 Ovi + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo current_session: Sessão atual description: "%{browser} em %{platform}" explanation: Estes são os navegadores que estão conectados com a sua conta do Mastodon. + ip: IP platforms: + adobe_air: Adobe Air + android: Android + blackberry: BlackBerry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac other: Plataforma desconhecida + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Revogar revoke_success: Sessão revogada com sucesso title: Sessões @@ -841,6 +936,7 @@ pt-BR: vote: Votar show_more: Mostrar mais sign_in_to_participate: Entre para participar dessa conversa + title: '%{name}: "%{quote}"' visibilities: private: Apenas seguidores private_long: Mostrar apenas para seguidores @@ -852,6 +948,8 @@ pt-BR: pinned: Toot fixado reblogged: compartilhou sensitive_content: Conteúdo sensível + tags: + does_not_match_previous_name: não corresponde ao nome anterior terms: body_html: | <h2>Política de privacidade</h2> @@ -968,6 +1066,7 @@ pt-BR: disable: Enquanto sua conta está congelada, seus dados estão intactos, mas você não pode realizar nenhuma ação até que sua conta seja desbloqueada. silence: Enquanto sua conta está limitada, somente pessoas que já estão seguindo você poderão ver seus toots nesse servidor, e você pode ser excluído de diversas listagens públicas. No entanto, outros ainda podem seguir você manualmente. suspend: Sua conta está suspensa e todos os seus toots e mídias foram irreversivelmente removidas desse servidor e de servidores onde você tinha seguidores. + get_in_touch: Você pode responder a este e-mail para entrar em contato com a equipe de %{instance}. review_server_policies: Revisar as políticas do servidor subject: disable: Sua conta %{acct} foi congelada diff --git a/config/locales/pt.yml b/config/locales/pt-PT.yml index 9cd92f6bd..bb1de517e 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt-PT.yml @@ -1,28 +1,44 @@ --- -pt: +pt-PT: about: about_hashtag_html: Estes são toots públicos marcados com <strong>#%{hashtag}</strong>. Podes interagir com eles se tiveres uma conta Mastodon. about_mastodon_html: Mastodon é uma rede social baseada em protocolos abertos da web e software livre e gratuito. É descentralizado como e-mail. about_this: Sobre esta instância + active_count_after: activo + active_footnote: Utilizadores activos mensais (UAM) administered_by: 'Administrado por:' + api: API apps: Aplicações móveis + apps_platforms: Usar o Mastodon a partir do iOS, Android e outras plataformas + browse_directory: Navegue pelo directório de perfis e filtre por interesses + browse_local_posts: Visualize as publicações públicas deste servidor em tempo real + browse_public_posts: Visualize as publicações públicas do Mastodon em tempo real contact: Contacto contact_missing: Não configurado contact_unavailable: n.d. + discover_users: Descobrir utilizadores documentation: Documentação - extended_description_html: | - <h3>Um bom lugar para regras</h3> - <p>A descrição estendida ainda não foi configurada.</p> - generic_description: "%{domain} é um servidor na rede" + federation_hint_html: Ter uma conta em %{instance} permitirá seguir pessoas em qualquer servidor Mastodon. + get_apps: Experimente uma aplicação hosted_on: Mastodon em %{domain} + instance_actor_flash: | + Esta conta é um actor virtual usado para representar o próprio servidor e não um utilizador individual. + É usada para motivos de federação e não deve ser bloqueada a não ser que que queira bloquear a instância por completo. Se for esse o caso, deverá usar o bloqueio de domínio. learn_more: Saber mais privacy_policy: Política de privacidade + see_whats_happening: Veja o que está a acontecer + server_stats: 'Estatísticas do servidor:' source_code: Código fonte status_count_after: one: publicação other: publicações status_count_before: Que fizeram + tagline: Siga os seus amigos e descubra novas amizades terms: termos de serviço + unavailable_content: Conteúdo indisponível + unavailable_content_description: + domain: Servidor + reason: Motivo user_count_after: one: utilizador other: utilizadores @@ -292,6 +308,8 @@ pt: all: Todas limited: Limitadas title: Moderação + private_comment: Comentários privados + public_comment: Comentários públicos title: Instâncias conhecidas total_blocked_by_us: Bloqueadas por nós total_followed_by_them: Seguidas por eles @@ -306,6 +324,8 @@ pt: expired: Expirados title: Filtro title: Convites + pending_accounts: + title: Contas pendentes (%{count}) relays: add_new: Adicionar novo repetidor delete: Apagar @@ -319,6 +339,7 @@ pt: pending: À espera da aprovação do repetidor save_and_enable: Guardar e ativar setup: Configurar uma ligação ao repetidor + signatures_not_enabled: Relays não funcionarão corretamente enquanto o modo seguro ou o modo whitelist estiver activado status: Estado title: Retransmissores report_notes: @@ -367,6 +388,16 @@ pt: custom_css: desc_html: Modificar a aparência com CSS carregado em cada página title: CSS personalizado + default_noindex: + desc_html: Afeta todos os utilizadores que não alteraram esta configuração + title: Desactivar, por omissão, a indexação de utilizadores por parte dos motores de pesquisa + domain_blocks: + all: Para toda a gente + disabled: Para ninguém + title: Mostrar domínios bloqueados + users: Para utilizadores locais que se encontrem autenticados + domain_blocks_rationale: + title: Mostrar motivo hero: desc_html: Apresentado na primeira página. Pelo menos 600x100px recomendados. Quando não é definido, é apresentado o thumbnail do servidor title: Imagem Hero @@ -392,6 +423,12 @@ pt: min_invite_role: disabled: Ninguém title: Permitir convites de + registrations_mode: + modes: + approved: Registo sujeito a aprovação + none: Ninguém se pode registar + open: Qualquer pessoa se pode registar + title: Modo de registo show_known_fediverse_at_about_page: desc_html: Quando comutado, irá mostrar a previsualização de publicações de todo o fediverse conhecido. De outro modo só mostrará publicações locais. title: Mostrar o fediverse conhecido na previsualização da cronologia @@ -411,6 +448,9 @@ pt: desc_html: Podes escrever a tua própria política de privacidade, termos de serviço, entre outras coisas. Podes usar tags HTML title: Termos de serviço customizados site_title: Título do site + spam_check_enabled: + desc_html: O Mastodon pode reportar automaticamente contas que enviem repetidamente mensagens não solicitadas. Poderão ocorrer alguns falso-positivos. + title: Automação anti-spam thumbnail: desc_html: Usada para visualizações via OpenGraph e API. Recomenda-se 1200x630px title: Miniatura da instância @@ -418,6 +458,9 @@ pt: desc_html: Exibir a linha temporal pública na página inicial title: Visualização da linha temporal title: Preferências do site + trendable_by_default: + desc_html: Afecta as hashtags que ainda não tenham sido proibidas + title: Permitir hashtags em tendência sem revisão prévia statuses: back_to_account: Voltar para página da conta batch: @@ -431,18 +474,6 @@ pt: no_status_selected: Nenhum estado foi alterado porque nenhum foi selecionado title: Estado das contas with_media: Com media - subscriptions: - callback_url: URL de Callback - confirmed: Confirmado - expires_in: Expira em - last_delivery: Última entrega - topic: Tópico - tags: - accounts: Contas - hidden: Escondidas - hide: Esconder no diretório - unhide: Mostrar no diretório - visible: Visível title: Administração warning_presets: add_new: Adicionar novo @@ -471,7 +502,6 @@ pt: your_token: O teu token de acesso auth: change_password: Palavra-passe - confirm_email: Confirmar e-mail delete_account: Eliminar conta delete_account_html: Se desejas eliminar a conta, podes <a href="%{path}">continua aqui</a>. Uma confirmação será pedida. didnt_get_confirmation: Não recebeu o email de confirmação? @@ -512,28 +542,18 @@ pt: x_months: "%{count} meses" x_seconds: "%{count} segundos" deletes: - bad_password_msg: Boa tentativa, hackers! Palavra-passe incorreta confirm_password: Introduz a palavra-passe atual para verificar a tua identidade - description_html: Isto vai <strong>permanente e irreversivelmente</strong> remover conteúdo da tua conta e desativá-la. O teu nome de utilizador permanecerá reservado para prevenir futuros roubos de identidade. proceed: Eliminar conta success_msg: A tua conta foi eliminada com sucesso - warning_html: |- - Apenas a eliminação de conteúdo desta instância é garantido. - Conteúdo que tenha sido partilhado com outras instâncias muito provavelmente deixará pegadas. Servidores offline e servidores que se desinscreveram das tuas atualizações não atualizarão as suas bases de dados. - warning_title: Disponibilidade de conteúdo disseminado directories: directory: Dirétorio de perfil - enabled: Neste momento tu estás listado no dirétorio. - enabled_but_waiting: Tu escolheste ser listado no diretório, mas ainda não tens o número mínimo de seguidores (%{min_followers}) para integrares esta lista. explanation: Descobre utilizadores com base nos seus interesses explore_mastodon: Explorar %{title} - how_to_enable: Tu ainda não integras este directório. Podes fazer isso abaixo. Usa hashtags na tua biografia para seres listado em hashtags específicas! - people: - one: "%{count} pessoa" - other: "%{count} pessoas" errors: + '400': The request you submitted was invalid or malformed. '403': Não tens a permissão necessária para ver esta página. '404': A página que estás a procurar não existe. + '406': This page is not available in the requested format. '410': A página que estás a procurar não existe mais. '422': content: "A verificação de segurança falhou. \nDesativaste o uso de cookies?" @@ -542,6 +562,7 @@ pt: '500': content: Desculpe, mas algo correu mal. title: Esta página não está correta + '503': The page could not be served due to a temporary server failure. noscript_html: Para usar o aplicativo web do Mastodon, por favor ativa o JavaScript. Alternativamente, experimenta um dos <a href="%{apps_path}">apps nativos</a> para o Mastodon na sua plataforma. exports: archive_takeout: @@ -634,9 +655,6 @@ pt: too_many: Não é possível anexar mais de 4 arquivos migrations: acct: username@domain da nova conta - currently_redirecting: 'O teu perfil está configurado para redirecionar para:' - proceed: Salvar - updated_msg: As configurações de migração da tua conta foram atualizadas com sucesso! moderation: title: Moderação notification_mailer: @@ -707,10 +725,6 @@ pt: reply: proceed: Prosseguir com resposta prompt: 'Queres responder a esta publicação:' - remote_unfollow: - error: Erro - title: Título - unfollowed: Não seguido scheduled_statuses: over_daily_limit: Excedeste o limite de %{limit} publicações agendadas para esse dia over_total_limit: Tu excedeste o limite de %{limit} publicações agendadas @@ -744,6 +758,8 @@ pt: notifications: Notificações preferences: Preferências two_factor_authentication: Autenticação em dois passos + spam_check: + spam_detected: Este é um relatório automatizado. Foi detectado spam. statuses: attached: description: 'Anexadas: %{attached}' diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 6e6c6f403..7deab6021 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -4,7 +4,6 @@ ro: hosted_on: Mastodon găzduit de %{domain} auth: change_password: Parolă - confirm_email: Confirmă email delete_account: Șterge contul delete_account_html: Dacă vrei să ștergi acest cont <a href="%{path}">poți începe aici</a>. Va trebui să confirmi această acțiune. didnt_get_confirmation: Nu ai primit instrucțiunile de confirmare? @@ -44,22 +43,17 @@ ro: x_days: "%{count}z" x_months: "%{count}l" deletes: - bad_password_msg: Bună încercare, hackere! Parolă incorectă confirm_password: Introdu parola curentă pentru a-ți verifica identitatea - description_html: Această acțiune este <strong>permanentă și ireversibilă,</strong> elimină conținutul și dezactivează contul tău. Acest username va rămâne permanent rezervat pentru a evita furtul de identitate. proceed: Șterge contul success_msg: Contul tău a fost șterg. Nu mai poate fi recuperat :D - warning_html: Doar ștergerea conținutului de pe acest server este garantată. Conținutul tău care a fost redistribuit în alte instațe e posibil să lase urme. Serverele deconecate sau care nu mai sunt abonate la actualizările contului tău nu își vor mai actualiza baza de date. directories: explanation: Descoperă oameni și companii în funcție de interesele lor explore_mastodon: Explorează %{title} - people: - few: "%{count} persoană" - one: "%{count} persoană" - other: "%{count} oameni" errors: + '400': The request you submitted was invalid or malformed. '403': Nu ai permisiunea să vizitezi această pagină. '404': Pagina pe care o cauți nu există. + '406': This page is not available in the requested format. '410': Pagina pe care o cauți nu mai există. '422': content: Verificarea securității a eșuat. Ai blocat cookiurile? @@ -68,6 +62,7 @@ ro: '500': content: Ne pare rău, dar ceva a funcționat greșit. Încercați din nou!? title: Această pagină nu este corectă + '503': The page could not be served due to a temporary server failure. noscript_html: Pentru a utiliza o aplicație web Mastodon, te rog activează JavaScript. Alternativ, încearcă una din <a href="%{apps_path}">aplicațiile native</a> Mastodon pentru platforma ta. exports: archive_takeout: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 7e336be98..4c1035627 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1,8 +1,8 @@ --- ru: about: - about_hashtag_html: Это публичные статусы, отмеченные хэштегом <strong>#%{hashtag}</strong>. Вы можете взаимодействовать с ними при наличии у Вас аккаунта в глобальной сети Mastodon. - about_mastodon_html: Mastodon - это <em>свободная</em> социальная сеть с <em>открытым исходным кодом</em>. Как <em>децентрализованная</em> альтернатива коммерческим платформам, Mastodon предотвращает риск монополизации Вашего общения одной компанией. Выберите сервер, которому Вы доверяете — что бы Вы ни выбрали, Вы сможете общаться со всеми остальными. Любой может запустить свой собственный узел Mastodon и участвовать в <em>социальной сети</em> совершенно бесшовно. + about_hashtag_html: Это публичные статусы, отмеченные хэштегом <strong>#%{hashtag}</strong>. Вы можете взаимодействовать с ними при наличии у Вас учётной записи в глобальной сети Mastodon. + about_mastodon_html: 'Социальная сеть будущего: никакой рекламы, слежки корпорациями, этичный дизайн и децентрализация! С Mastodon ваши данные под вашим контролем.' about_this: Об этом узле active_count_after: активных active_footnote: Ежемесячно активные пользователи (MAU) @@ -11,41 +11,51 @@ ru: apps: Приложения apps_platforms: Используйте Mastodon на iOS, Android и других платформах browse_directory: Изучайте каталог профилей и ищите по интересам + browse_local_posts: Просматривайте в реальном времени новые статусы с этого сервера browse_public_posts: Просматривайте в реальном времени новые статусы в Mastodon contact: Связаться contact_missing: не указан contact_unavailable: неизв. discover_users: Находите пользователей documentation: Документация - extended_description_html: | - <h3>Хорошее место для правил</h3> - <p>Расширенное описание еще не настроено.</p> federation_hint_html: С учётной записью на %{instance} вы сможете подписываться на людей с любого сервера Mastodon и не только. - generic_description: "%{domain} - один из серверов сети" get_apps: Попробуйте мобильное приложение hosted_on: Mastodon размещен на %{domain} + instance_actor_flash: | + Эта учетная запись является виртуальным персонажем, используемым для представления самого сервера, а не какого-либо пользователя. + Используется для целей федерации и не должен быть заблокирован, если вы не хотите заблокировать всю инстанцию, вместо этого лучше использовать доменную блокировку. learn_more: Узнать больше privacy_policy: Политика конфиденциальности see_whats_happening: Узнавайте, что происходит вокруг server_stats: 'Статистика сервера:' source_code: Исходный код status_count_after: - few: статуса - many: статусов - one: статус - other: статусов - status_count_before: Опубликовано + few: поста + many: постов + one: пост + other: поста + status_count_before: И опубликовано tagline: Подписывайтесь на друзей и заводите новые знакомства terms: Условия использования + unavailable_content: Содержимое недоступно + unavailable_content_description: + domain: Сервер + reason: Причина + rejecting_media: 'Медиафайлы с этих серверов не будут обработаны или сохранены. Их миниатюры не будут отображаться и вам придётся вручную нажимать на исходный файл:' + silenced: 'Сообщения с этих серверов будут скрыты в публичных лентах и обсуждениях, уведомления от ихпользователй также не будут призодить никому, кроме подписанных на них:' + suspended: 'Обмен, хранение и обработка данных с этих серверов будут прекращены, что сделает невозможным взаимодействие или общение с пользователями с этих серверов:' + unavailable_content_html: Мастодон обычно позволяет просматривать контент с любого другого сервера и взаимодействовать с ними. Это исключения, сделанные на этом сервере. user_count_after: few: пользователя many: пользователей one: пользователь - other: пользователей - user_count_before: Здесь живет + other: пользователя + user_count_before: Здесь расположились what_is_mastodon: Что такое Mastodon? accounts: choices_html: "%{name} рекомендует:" + endorsements_hint: Вы можете рекомендовать людей, которые вы отслеживаете из веб-интерфейса, и они будут показаны здесь. + featured_tags_hint: Вы можете указать конкретные хэштеги, которые будут отображаться здесь. follow: Подписаться followers: few: подписчика @@ -59,6 +69,7 @@ ru: media: Медиа moved_html: "%{name} переехал(а) на %{new_profile_link}:" network_hidden: Эта информация недоступна + never_active: Никогда nothing_here: Здесь ничего нет! people_followed_by: Люди, на которых подписан(а) %{name} people_who_follow: Подписчики %{name} @@ -81,7 +92,7 @@ ru: admin: account_actions: action: Выполнить действие - title: Произвести модерацию аккаунта %{acct} + title: Произвести модерацию учётной записи %{acct} account_moderation_notes: create: Создать created_msg: Заметка модератора успешно создана! @@ -94,7 +105,7 @@ ru: avatar: Аватар by_domain: Домен change_email: - changed_msg: E-mail аккаунта успешно изменён! + changed_msg: E-mail учётной записи успешно изменён! current_email: Текущий e-mail label: Сменить e-mail new_email: Новый e-mail @@ -119,7 +130,7 @@ ru: followers: Подписчики followers_url: URL подписчиков follows: Подписки - header: Заголовок + header: Шапка inbox_url: URL входящих invited_by: Приглашение выдал(а) ip: IP @@ -129,7 +140,7 @@ ru: local: Локальные remote: Удаленные title: Размещение - login_status: Статус аккаунта + login_status: Статус учётной записи media_attachments: Мультимедийные вложения memorialize: Превратить в Памятник moderation: @@ -142,7 +153,7 @@ ru: moderation_notes: Заметки модератора most_recent_activity: Последняя активность most_recent_ip: Последний IP - no_account_selected: Ничего не выбрано, никакие аккаунты не изменены + no_account_selected: Ничего не выбрано, никакие учётные записи не изменены no_limits_imposed: Без ограничений not_subscribed: Не подписаны outbox_url: URL исходящих @@ -171,17 +182,20 @@ ru: moderator: Модератор staff: Персонал user: Пользователь + salmon_url: Страница Salmon search: Поиск + search_same_ip: Другие пользователи с таким же IP shared_inbox_url: URL общих входящих show: - created_reports: Жалобы, отправленные этим аккаунтом - targeted_reports: Жалобы на этот аккаунт + created_reports: Жалобы, отправленные с этой учётной записи + targeted_reports: Жалобы на эту учётную запись silence: Заглушить silenced: Заглушен statuses: Статусы subscribe: Подписаться suspended: Заморожен - title: Аккаунты + time_in_queue: Ожидание в очереди %{time} + title: Учётные записи unconfirmed_email: Неподтверждённый e-mail undo_silenced: Снять глушение undo_suspension: Снять блокировку @@ -189,6 +203,7 @@ ru: username: Имя пользователя warn: Предупредить web: Веб + whitelisted: В белом списке action_logs: actions: assigned_to_self_report: "%{name} назначил(а) жалобу %{target} на себя" @@ -196,10 +211,12 @@ ru: confirm_user: "%{name} подтвердил(а) e-mail адрес пользователя %{target}" create_account_warning: "%{name} отправил(а) предупреждение для %{target}" create_custom_emoji: "%{name} загрузил(а) новый эмодзи %{target}" + create_domain_allow: "%{name} внёс домен %{target} в белый список" create_domain_block: "%{name} заблокировал(а) домен %{target}" create_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в чёрный список" demote_user: "%{name} разжаловал(а) пользователя %{target}" destroy_custom_emoji: "%{name} удалил(а) эмодзи %{target}" + destroy_domain_allow: "%{name} убрал домен %{target} из белого списка" destroy_domain_block: "%{name} разблокировал(а) домен %{target}" destroy_email_domain_block: "%{name} добавил(а) e-mail домен %{target} в белый список" destroy_status: "%{name} удалил(а) статус пользователя %{target}" @@ -208,58 +225,69 @@ ru: disable_user: "%{name} запретил(а) вход пользователя %{target}" enable_custom_emoji: "%{name} включил(а) эмодзи %{target}" enable_user: "%{name} включил(а) вход пользователя %{target}" - memorialize_account: "%{name} перевел(а) аккаунт пользователя %{target} в режим памятника" + memorialize_account: "%{name} перевел(а) учётную запись пользователя %{target} в режим памятника" promote_user: "%{name} повысил(а) пользователя %{target}" remove_avatar_user: "%{name} удалил(а) аватар пользователя %{target}" reopen_report: "%{name} переоткрыл(а) жалобу %{target}" reset_password_user: "%{name} сбросил(а) пароль пользователя %{target}" resolve_report: "%{name} решил(а) жалобу %{target}" - silence_account: "%{name} заглушил(а) аккаунт %{target}" - suspend_account: "%{name} заморозил(а) аккаунт %{target}" + silence_account: "%{name} заглушил(а) учётную запись %{target}" + suspend_account: "%{name} заморозил(а) учётную запись %{target}" unassigned_report: "%{name} сняла назначение жалобы %{target}" - unsilence_account: "%{name} снял(а) глушение аккаунта %{target}" - unsuspend_account: "%{name} разморозил(а) аккаунт %{target}" + unsilence_account: "%{name} снял(а) глушение учётной записи %{target}" + unsuspend_account: "%{name} разморозил(а) учётную запись %{target}" update_custom_emoji: "%{name} обновил(а) эмодзи %{target}" update_status: "%{name} изменил(а) статус пользователя %{target}" deleted_status: "(удалённый статус)" title: Журнал событий custom_emojis: + assign_category: Задать категорию by_domain: Домен copied_msg: Локальная копия эмодзи успешно создана copy: Копировать copy_failed_msg: Не удалось создать локальную копию эмодзи + create_new_category: Создать новую категорию created_msg: Эмодзи успешно создано! delete: Удалить destroyed_msg: Эмодзи успешно удалено! disable: Отключить + disabled: Отключено disabled_msg: Эмодзи успешно отключено emoji: Эмодзи enable: Включить + enabled: Включено enabled_msg: Эмодзи успешно включено image_hint: PNG до 50KB + list: Список listed: В списке new: title: Добавить новый эмодзи overwrite: Заменить shortcode: Шорткод shortcode_hint: Как минимум 2 символа, только алфавитно-цифровые символы и подчеркивания - title: Собственные эмодзи + title: Особенные эмодзи + uncategorized: Вне категорий + unlist: Убрать unlisted: Не в списке update_failed_msg: Невозможно обновить этот эмодзи updated_msg: Эмодзи обновлён! upload: Загрузить dashboard: + authorized_fetch_mode: Защищённый режим backlog: задачи config: Конфигурация - feature_deletions: Удаление аккаунтов + feature_deletions: Удаление учётных записей feature_invites: Пригласительные ссылки feature_profile_directory: Каталог профилей feature_registrations: Регистрация feature_relay: Ретрансляторы + feature_spam_check: Анти-спам feature_timeline_preview: Предпросмотр ленты features: Возможности hidden_service: Федерация со скрытыми сервисами open_reports: открытых жалоб + pending_tags: хэштеги, ожидающие проверки + pending_users: пользователи, ожидающие проверки recent_users: Недавние пользователи search: Полнотекстовый поиск single_user_mode: Однопользовательский режим @@ -267,24 +295,36 @@ ru: space: Использовано места title: Панель управления total_users: всего пользователей - trends: Тренды + trends: Актуальное week_interactions: взаимодействий на этой неделе week_users_active: активно на этой неделе week_users_new: пользователей на этой неделе + whitelist_mode: Белый список + domain_allows: + add_new: Внести в белый список + created_msg: Домен добавлен в белый список + destroyed_msg: Домен убран из белого списка + undo: Убрать из белого списка domain_blocks: add_new: Заблокировать домен created_msg: Блокировка домена обрабатывается destroyed_msg: Блокировка домена снята domain: Домен + edit: Редактировать блокировку + existing_domain_block_html: Вы уже ввели более строгие ограничения на %{name}, вам нужно <a href="%{unblock_url}">разблокировать его</a> сначала. new: create: Создать блокировку - hint: Блокировка домена не предотвратит создание новых аккаунтов в базе данных, но ретроактивно и автоматически применит указанные методы модерации для этих аккаунтов. + hint: Блокировка домена не предотвратит создание новых учётных записей в базе данных, но ретроактивно и автоматически применит указанные методы модерации для этих учётных записей. severity: - desc_html: "<strong>Глушение</strong> сделает статусы аккаунта невидимыми для всех, кроме их подписчиков. <strong>Блокировка</strong> удалит весь контент аккаунта, включая мультимедийные вложения и данные профиля. Используйте <strong>Ничего</strong>, если хотите только запретить медиаконтент." + desc_html: "<strong>Глушение</strong> сделает статусы учётной записи невидимыми для всех, кроме их подписчиков. <strong>Блокировка</strong> удалит весь контент учётной записи, включая мультимедийные вложения и данные профиля. Используйте <strong>Ничего</strong>, если хотите только запретить медиаконтент." noop: Ничего silence: Глушение suspend: Блокировка title: Новая доменная блокировка + private_comment: Приватный комментарий + private_comment_hint: Комментарий к доменной блокировке для внутреннего использования модераторами. + public_comment: Публичный комментарий + public_comment_hint: Комментарий к этой доменной блокировке для широкой публики, если включена публикация списка блокировок. reject_media: Запретить медиаконтент reject_media_hint: Удаляет локально хранимый медиаконтент и запрещает его загрузку в будущем. Не имеет значения в случае блокировки. reject_reports: Отклонять жалобы @@ -296,16 +336,17 @@ ru: suspend: заморожен show: affected_accounts: - few: Влияет на %{count} аккаунта в базе данных - many: Влияет на %{count} аккаунтов в базе данных - one: Влияет на один аккаунт в базе данных - other: Влияет на %{count} аккаунтов в базе данных + few: "%{count} учетных записей в базе данных затронуты" + many: "%{count} учетных записей в базе данных затронуты" + one: Влияет на одну учётную запись в базе данных + other: "%{count} учетных записей в базе данных затронуты" retroactive: - silence: Снять глушение со всех существующих аккаунтов этого домена - suspend: Снять блокировку со всех существующих аккаунтов этого домена + silence: Снять глушение со всех существующих учётных записей этого домена + suspend: Снять блокировку со всех существующих учётных записей этого домена title: Снять блокировку с домена %{domain} undo: Отменить undo: Отменить блокировку домена + view: Посмотреть доменные блокировки email_domain_blocks: add_new: Добавить новую created_msg: Доменная блокировка еmail успешно создана @@ -317,23 +358,25 @@ ru: title: Новая доменная блокировка еmail title: Доменная блокировка email followers: - back_to_account: Вернуться к аккаунту + back_to_account: Вернуться к учётной записи title: Подписчики пользователя %{acct} instances: by_domain: Домен delivery_available: Доставка возможна known_accounts: - few: "%{count} известных аккаунта" - many: "%{count} известных аккаунтов" - one: "%{count} известный аккаунт" - other: "%{count} известных аккаунтов" + few: "%{count} известных учётных записей" + many: "%{count} известных учётных записей" + one: "%{count} известных учётных записей" + other: "%{count} известных учётных записей" moderation: all: Все limited: Ограниченные title: Модерация + private_comment: Приватный комментарий + public_comment: Публичный комментарий title: Известные узлы total_blocked_by_us: Заблокировано нами - total_followed_by_them: Заблокировано ими + total_followed_by_them: Их подписчиков total_followed_by_us: Наших подписчиков total_reported: Жалобы на них total_storage: Медиафайлы @@ -346,7 +389,7 @@ ru: title: Фильтр title: Приглашения pending_accounts: - title: Ожидающие аккаунты (%{count}) + title: Ожидающие учетные записи (%{count}) relays: add_new: Добавить ретранслятор delete: Удалить @@ -360,6 +403,7 @@ ru: pending: Ожидание подтверждения ретранслятора save_and_enable: Сохранить и включить setup: Настроить соединение с ретранслятором + signatures_not_enabled: Ретрансляторы не будут работать правильно, пока включен безопасный режим или режим белого списка status: Состояние title: Ретрансляторы report_notes: @@ -386,7 +430,7 @@ ru: placeholder: Опишите, какие действия были приняты, или любые другие подробности… reopen: Переоткрыть жалобу report: 'Жалоба #%{id}' - reported_account: Аккаунт нарушителя + reported_account: Учётная запись нарушителя reported_by: Отправитель жалобы resolved: Разрешенные resolved_msg: Жалоба успешно обработана! @@ -400,7 +444,7 @@ ru: desc_html: Подсчёт количества локальных статусов, активных пользователей и новых регистраций на еженедельной основе title: Публикация агрегированной статистики активности пользователей bootstrap_timeline_accounts: - desc_html: Разделяйте имена пользователей запятыми. Сработает только для локальных незакрытых аккаунтов. По умолчанию включены все локальные администраторы. + desc_html: Разделяйте имена пользователей запятыми. Сработает только для локальных незакрытых учётных записей. По умолчанию включены все локальные администраторы. title: Подписки по умолчанию для новых пользователей contact_information: email: Введите публичный e-mail @@ -408,6 +452,16 @@ ru: custom_css: desc_html: Измените внешний вид с CSS, загружаемым на каждой странице title: Особый CSS + default_noindex: + desc_html: Влияет на всех пользователей, которые не изменили эти настройки сами + title: Исключить пользователей из индексации поисковиками по умолчанию + domain_blocks: + all: Всем + disabled: Никому + title: Доменные блокировки + users: Залогиненным локальным пользователям + domain_blocks_rationale: + title: Показать обоснование hero: desc_html: Отображается на главной странице. Рекомендуется разрешение не менее 600х100px. Если не установлено, используется изображение узла title: Баннер узла @@ -428,8 +482,8 @@ ru: desc_html: Отображается на титульной странице, когда закрыта регистрация<br>Можно использовать HTML-теги title: Сообщение о закрытой регистрации deletion: - desc_html: Позволяет всем удалять собственные аккаунты - title: Разрешить удаление аккаунтов + desc_html: Позволяет всем удалять собственные учётные записи + title: Разрешить удаление учётных записей min_invite_role: disabled: Никого title: Разрешать приглашения от @@ -458,6 +512,9 @@ ru: desc_html: Вы можете добавить сюда собственную политику конфиденциальности, пользовательское соглашение и другие документы. Можно использовать теги HTML title: Условия использования site_title: Название сайта + spam_check_enabled: + desc_html: Мастодон может автоматически сообщать об учётных записях, отправляющих повторяющиеся нежелательные сообщения. Возможны ложные срабатывания. + title: Анти-спам thumbnail: desc_html: Используется для предпросмотра с помощью OpenGraph и API. Рекомендуется разрешение 1200x630px title: Картинка узла @@ -465,34 +522,44 @@ ru: desc_html: Показывать публичную ленту на приветственной странице title: Предпросмотр ленты title: Настройки сайта + trendable_by_default: + desc_html: Влияет на хэштеги, которые не были ранее запрещены + title: Разрешить добавление хештегов в список актульных без предварительной проверки + trends: + desc_html: Публично отобразить проверенные хэштеги, актуальные на данный момент + title: Популярные хэштеги statuses: - back_to_account: Назад к странице аккаунта + back_to_account: Назад к учётной записи batch: delete: Удалить nsfw_off: Выключить NSFW nsfw_on: Включить NSFW + deleted: Удалено failed_to_execute: Не удалось выполнить media: title: Медиаконтент no_media: Без медиаконтента no_status_selected: Не выбран ни один статус, ничего не изменено - title: Статусы аккаунта + title: Статусы учётной записи with_media: С медиаконтентом - subscriptions: - callback_url: Callback URL - confirmed: Подтверждено - expires_in: Истекает через - last_delivery: Последняя доставка - title: WebSub - topic: Тема tags: - accounts: Аккаунты - hidden: Скрыты - hide: Скрыть из каталога + accounts_today: Уникальных использований за сегодня + accounts_week: Уникальных использований за эту неделю + breakdown: Разбивка сегодняшнего использования по источникам + context: Контекст + directory: В каталоге + in_directory: "%{count} в каталоге" + last_active: Последняя активность + most_popular: Самые популярные + most_recent: Последние name: Хэштег + review: Состояние проверки + reviewed: Проверенные title: Хэштеги - unhide: Показывать в каталоге - visible: Видны + trending_right_now: Популярно сейчас + unique_uses_today: "%{count} чел. пишут об этом" + unreviewed: Непроверенные + updated_msg: Настройки хэштега обновлены title: Администрирование warning_presets: add_new: Добавить @@ -502,15 +569,29 @@ ru: title: Управление шаблонами предупреждений admin_mailer: new_pending_account: - body: Ниже указана информация об аккаунте. Вы можете одобрить или отклонить заявку. - subject: Новый аккаунт для рассмотрения на %{instance} (%{username}) + body: Ниже указана информация учётной записи. Вы можете одобрить или отклонить заявку. + subject: Новая учётная запись для рассмотрения на %{instance} (%{username}) new_report: body: "%{reporter} подал(а) жалобу на %{target}" body_remote: Кто-то с узла %{domain} пожаловался на %{target} subject: Новая жалоба, узел %{instance} (#%{id}) + new_trending_tag: + body: 'Хэштег #%{name} актуален сегодня, но не был проверен. Он не будет отображаться публично, если вы не одобрите его, или просто сохраните эту форму как есть, чтоб никогда больше о нём не слышать.' + subject: Новый хэштег для проверки на %{instance} (#%{name}) + aliases: + add_new: Создать псевдоним + created_msg: Успешно создан новый псевдоним. Теперь вы можете начать миграцию со старой учетной записи. + deleted_msg: Псевдоним успешно удалён. Миграция старой учётной записи в текущую более невозможна. + hint_html: Если вы хотите мигрировать с другой учётной записи в эту, здесь вы можете создать псевдоним, который требуется, прежде чем вы можете начать перенос подписок со старой учётной записи сюда. Это действие само по себе <strong>безвредно и обратимо</strong>. <strong>Миграция учётной записи начинается со старой учётной записи</strong>. + remove: Отвязать псевдоним appearance: advanced_web_interface: Многоколоночный интерфейс + advanced_web_interface_hint: 'Если вы хотите использовать всю ширину экрана, расширенный веб-интерфейс позволяет настроить множество различных столбцов, чтобы увидеть столько информации, сколько вы хотите: главную ленту, уведомления, глобальную ленту, любое количество списков и хэштегов.' + animations_and_accessibility: Анимации и доступность + confirmation_dialogs: Окна подтверждений + discovery: Обзор sensitive_content: Чувствительное содержимое + toot_layout: Структура постов application_mailer: notification_preferences: Изменить настройки e-mail salutation: "%{name}," @@ -530,16 +611,20 @@ ru: apply_for_account: Запросить приглашение change_password: Пароль checkbox_agreement_html: Я соглашаюсь с <a href="%{rules_path}" target="_blank">правилами сервера</a> и <a href="%{terms_path}" target="_blank">Условиями использования</a> - confirm_email: Подтвердите email - delete_account: Удалить аккаунт - delete_account_html: Если Вы хотите удалить свой аккаунт, вы можете <a href="%{path}">перейти сюда</a>. У Вас будет запрошено подтверждение. + checkbox_agreement_without_rules_html: Я согласен с <a href="%{terms_path}" target="_blank">условиями использования</a> + delete_account: Удалить учётную запись + delete_account_html: Если Вы хотите удалить свою учётную запись, вы можете <a href="%{path}">перейти сюда</a>. У Вас будет запрошено подтверждение. + description: + prefix_invited_by_user: "@%{name} приглашает вас присоединиться к этому узлу Mastodon." + prefix_sign_up: Зарегистрируйтесь в Mastodon уже сегодня! + suffix: Имея учётную запись, вы можете подписываться на людей, постить обновления, обмениваться сообщениями с пользователями любых узлов Mastodon и не только! didnt_get_confirmation: Не получили инструкцию для подтверждения? forgot_password: Забыли пароль? invalid_reset_password_token: Токен сброса пароля неверен или устарел. Пожалуйста, запросите новый. login: Войти logout: Выйти - migrate_account: Перенести аккаунт - migrate_account_html: Если Вы хотите перенести этот аккаунт на другой, вы можете <a href="%{path}">сделать это здесь</a>. + migrate_account: Перенести учётную запись + migrate_account_html: Если вы хотите перенаправить подписчиков на другую учётную запись, это можно <a href="%{path}">настроить здесь</a>. or_log_in_with: Или войти с помощью providers: cas: CAS @@ -550,10 +635,20 @@ ru: reset_password: Сбросить пароль security: Безопасность set_new_password: Задать новый пароль + setup: + email_below_hint_html: Если ниже указан неправильный адрес, вы можете исправить его здесь и получить новое письмо подтверждения. + email_settings_hint_html: Письмо с подтверждением было отправлено на %{email}. Если адрес указан неправильно, его можно поменять в настройках учётной записи. + title: Установка + status: + account_status: Статус учётной записи + confirming: Ожидание подтверждения e-mail. + functional: Ваша учётная запись в полном порядке. + pending: Ваша заявка ожидает одобрения администраторами, это может занять немного времени. Вы получите письмо, как только заявку одобрят. + redirecting_to: Ваша учётная запись признана неактивным, потому что она перенаправляется на %{acct}. trouble_logging_in: Не удаётся войти? authorize_follow: - already_following: Вы уже подписаны на этот аккаунт - error: К сожалению, при поиске удаленного аккаунта возникла ошибка + already_following: Вы уже подписаны на эту учётную запись + error: К сожалению, при поиске удалённой учётной записи возникла ошибка follow: Подписаться follow_request: 'Вы отправили запрос на подписку:' following: 'Ура! Теперь Вы подписаны на:' @@ -562,6 +657,11 @@ ru: return: Вернуться к профилю пользователя web: Перейти к WWW title: Подписаться на %{acct} + challenge: + confirm: Продолжить + hint_html: "<strong>Подсказка</strong>: мы не будем спрашивать пароль повторно в течение часа." + invalid_password: Неверный пароль + prompt: Введите пароль для продолжения datetime: distance_in_words: about_x_hours: "%{count}ч" @@ -577,28 +677,33 @@ ru: x_months: "%{count}мес" x_seconds: "%{count}сек" deletes: - bad_password_msg: Не вышло, хакеры! Неверный пароль + challenge_not_passed: Введённая вами информация некорректна confirm_password: Введите текущий пароль для подтверждения Вашей личности - description_html: Это действие <strong>перманентно и необратимо</strong> удалит контент Вашего аккаунта и деактивирует его. Ваше имя пользователя будет зарезервировано для предотвращения имперсонации в будущем. - proceed: Удалить аккаунт - success_msg: Ваш аккаунт был успешно удален - warning_html: Гарантируется удаление контента только на этом узле. Широко распространившийся контент, скорее всего, оставит следы. Сервера, отключенные от сети или отписавшиеся от Ваших обновлений, не обновят свои базы данных. - warning_title: О доступности распространившегося контента + confirm_username: Введите свой юзернейм для подтверждения + proceed: Удалить учётную запись + success_msg: Ваша учётная запись была успешно удалена + warning: + before: 'Внимательно прочитайте следующую информацию перед началом:' + caches: Содержимое, которое было закэшировано другими серверами, может сохраниться + data_removal: Ваши записи и прочие данные будут безвозвратно удалены + email_change_html: <a href="%{path}">Поменять свой e-mail</a> можно не удаляя учётной записи + email_contact_html: Если письмо не приходит, обратитесь за помощю на <a href="mailto:%{email}">%{email}</a> + email_reconfirmation_html: Если вы не получили письмо с подтверждением, его можно <a href="%{path}">запросить ещё раз</a> + irreversible: Вы не сможете восстановить или повторно активировать свою учётную запись + more_details_html: Подробнее см. в политике конфиденциальности <a href="%{terms_path}"></a>. + username_available: Ваш юзернейм снова станет доступным + username_unavailable: Ваш юзернейм останется недоступным directories: directory: Каталог профилей - enabled: В настоящий момент вы указаны в каталоге. - enabled_but_waiting: Вы согласились находиться в каталоге, но у вас ещё нет необходимого количества подписчиков (%{min_followers}), чтобы оказаться в каталоге. explanation: Находите пользователей по интересам explore_mastodon: Изучайте %{title} - how_to_enable: Вы ещё не находитесь в каталоге. Можете добавиться ниже. Используйте хэштеги в разделе "о себе", чтобы вас находили по этим хэштегам! - people: - few: "%{count} человека" - many: "%{count} человек" - one: "%{count} человек" - other: "%{count} человек" + domain_validator: + invalid_domain: не является корректным доменным именем errors: + '400': Ваш запрос был недействительным или неправильным. '403': У Вас нет доступа к просмотру этой страницы. '404': Страница, которую Вы искали, не существует. + '406': Эта страница недоступна в запрошенном формате. '410': Страница, которую Вы искали, больше не существует. '422': content: Проверка безопасности не удалась. Возможно, Вы блокируете cookies? @@ -607,6 +712,7 @@ ru: '500': content: Приносим извинения, но на нашей стороне что-то пошло не так. title: Страница неверна + '503': Страница не может быть отображена из-за временного сбоя на сервере. noscript_html: Для работы с Mastodon, пожалуйста, включите JavaScript. Кроме того, вы можете использовать одно из <a href="%{apps_path}">приложений</a> Mastodon для Вашей платформы. existing_username_validator: not_found: не удалось найти локального пользователя с таким именем @@ -630,6 +736,7 @@ ru: add_new: Добавить errors: limit: Вы уже добавили максимальное число хэштегов + hint_html: "<strong>Что такое хэштеги?</strong> Они видны в вашем публичном профиле и позволяют людям просматривать публичные записи под этими хэштегами. Они являются отличным инструментом для отслеживания творчества или долгосрочных проектов." filters: contexts: home: Домашняя лента @@ -650,10 +757,12 @@ ru: developers: Разработчикам more: Ещё… resources: Ссылки + trending_now: Актуально сейчас generic: all: Все changes_saved_msg: Изменения успешно сохранены! copy: Копировать + no_batch_actions_available: На этой странице нет запланированных действий order_by: Сортировать по save_changes: Сохранить изменения validation_errors: @@ -687,7 +796,7 @@ ru: merge_long: Сохранить имеющиеся данные и добавить новые overwrite: Перезаписать overwrite_long: Перезаписать имеющиеся данные новыми - preface: Вы можете загрузить некоторые данные, например, списки людей, на которых Вы подписаны или которых блокируете, в Ваш аккаунт на этом узле из файлов, экспортированных с другого узла. + preface: Вы можете загрузить некоторые данные, например, списки людей, на которых Вы подписаны или которых блокируете, в Вашу учётную запись на этом узле из файлов, экспортированных с другого узла. success: Ваши данные были успешно загружены и будут обработаны с должной скоростью types: blocking: Список блокировки @@ -714,8 +823,8 @@ ru: many: "%{count} исп." one: 1 исп other: "%{count} исп" - max_uses_prompt: Без лимита - prompt: Генерируйте и делитесь ссылками с другими, чтобы предоставить им доступ к этому узлу + max_uses_prompt: Без ограничения + prompt: Создавайте и делитесь ссылками с другими, чтобы предоставить им доступом к этому узлу table: expires_at: Истекает uses: Исп. @@ -728,10 +837,35 @@ ru: images_and_video: Нельзя добавить видео к статусу с изображениями too_many: Нельзя добавить более 4 файлов migrations: - acct: имя@домен нового аккаунта - currently_redirecting: 'Ваш профиль будет перенаправлен на:' - proceed: Сохранить - updated_msg: Настройки миграции вашего аккаунта обновлены! + acct: имя@домен новой учётной записи + cancel: Отменить переезд + cancel_explanation: Отмена перенаправления повторно активирует текущую учётную запись, но не вернёт обратно подписчиков, которые были перемещены на другую. + cancelled_msg: Переезд был успешно отменён. + errors: + already_moved: это та же учётная запись, на которую вы мигрировали + missing_also_known_as: не ссылается на эту учетную запись + move_to_self: не может быть текущей учётной записью + not_found: не удалось найти + on_cooldown: Вы пока не можете переезжать + followers_count: Подписчиков на момент переезда + incoming_migrations: Переезд с другой учётной записи + incoming_migrations_html: Чтобы мигрировать с другой учётной записи на эту, сначала вам нужно <a href="%{path}">создать псевдоним учетной записи</a>. + moved_msg: Ваша учётная запись теперь перенаправляется на %{acct} и подписчики перемещаются туда. + not_redirecting: Ваша учётная запись пока что не перенаправляется на какую-либо иную. + on_cooldown: Вы уже недавно переносили свою учётную запись. Эта возможность будет снова доступна через %{count} дн. + past_migrations: Прошлые переезды + proceed_with_move: Перенести подписчиков + redirecting_to: Ваша учётная запись перенаправлена на %{acct}. + set_redirect: Настроить перенаправление + warning: + backreference_required: Новая учётная запись должна быть сначала настроена так, чтоб ссылаться на текущую + before: 'Прежде чем продолжить, внимательно прочитайте следующую информацию:' + cooldown: После переезда наступает период, в течение которого вы не сможете ещё раз переехать + disabled_account: Вашу текущую учётная запись впоследствии нельзя будет больше использовать. При этом, у вас будет доступ к экспорту данных, а также к повторной активации учётной записи. + followers: Это действие перенесёт всех ваших подписчиков с текущей учётной записи на новую + only_redirect_html: Или же вы можете <a href="%{path}">просто настроить перенаправление в ваш профиль</a>. + other_data: Никакие другие данные не будут автоматически перенесены + redirect: Профиль этой учётной записи будет обновлён с заметкой о перенаправлении, а также исключён из поиска moderation: title: Модерация notification_mailer: @@ -747,7 +881,7 @@ ru: subject: few: "%{count} новых уведомления с вашего последнего захода \U0001F418" many: "%{count} новых уведомлений с вашего последнего захода \U0001F418" - one: "1 новое уведомление с вашего последнего захода \U0001F418" + one: "%{count} новое уведомление с вашего последнего захода \U0001F418" other: "%{count} новых уведомлений с вашего последнего захода \U0001F418" title: В ваше отсутствие… favourite: @@ -800,9 +934,10 @@ ru: too_many_options: может содержать не больше %{max} вариантов preferences: other: Другое + posting_defaults: Настройки отправки по умолчанию public_timelines: Публичные ленты relationships: - activity: Активность аккаунта + activity: Активность учётной записи dormant: Заброшенные last_active: Недавно активные most_recent: Новые @@ -813,14 +948,14 @@ ru: remove_selected_domains: Удалить всех подписчиков для выбранных доменов remove_selected_followers: Удалить выбранных подписчиков remove_selected_follows: Отписаться от выбранных пользователей - status: Статус аккаунта + status: Статус учётной записи remote_follow: acct: Введите свой username@domain для продолжения - missing_resource: Поиск требуемого перенаправления URL для Вашего аккаунта завершился неудачей + missing_resource: Поиск требуемого перенаправления URL для Вашей учётной записи завершился неудачей no_account_html: Нет учётной записи? Вы можете <a href='%{sign_up_path}' target='_blank'>зарегистрироваться здесь</a> proceed: Продолжить подписку prompt: 'Вы хотите подписаться на:' - reason_html: "<strong>Почему это необходимо?</strong> <code>%{instance}</code> может не являться сервером, на котором вы зарегистрированы, поэтому нам сперва нужно перенаправить вас на домашний сервер." + reason_html: "<strong>Почему это необходимо?</strong> Возможно, <code>%{instance}</code> не является узлом, на котором вы зарегистрированы, поэтому нам сперва нужно перенаправить вас на домашний узел." remote_interaction: favourite: proceed: Отметить как "нравится" @@ -831,10 +966,6 @@ ru: reply: proceed: Ответить prompt: 'Вы собираетесь ответить на этот статус:' - remote_unfollow: - error: Ошибка - title: Заголовок - unfollowed: Отписаны scheduled_statuses: over_daily_limit: Вы превысили лимит в %{limit} запланированных постов на указанный день over_total_limit: Вы превысили лимит на %{limit} запланированных постов @@ -862,7 +993,7 @@ ru: weibo: Weibo current_session: Текущая сессия description: "%{browser} на %{platform}" - explanation: Это веб-браузеры, в которых на данный момент выполнен вход в Ваш аккаунт Mastodon. + explanation: Это веб-браузеры, в которых на данный момент выполнен вход в Вашу учётную запись Mastodon. ip: IP platforms: adobe_air: Adobe Air @@ -883,10 +1014,11 @@ ru: settings: account: Учётная запись account_settings: Настройки учётной записи + aliases: Псевдонимы учётной записи appearance: Внешний вид authorized_apps: Авторизованные приложения back: Назад в Mastodon - delete: Удаление аккаунта + delete: Удаление учётной записи development: Разработка edit_profile: Изменить профиль export: Экспорт данных @@ -894,12 +1026,14 @@ ru: identity_proofs: Подтверждения личности import: Импорт import_and_export: Импорт и экспорт - migrate: Перенос аккаунта + migrate: Миграция учётной записи notifications: Уведомления preferences: Настройки profile: Профиль relationships: Подписки и подписчики two_factor_authentication: Двухфакторная аутентификация + spam_check: + spam_detected: Это автоматический отчет. Обнаружен спам. statuses: attached: description: 'Вложение: %{attached}' @@ -929,6 +1063,11 @@ ru: private: Нельзя закрепить непубличный статус reblog: Нельзя закрепить продвинутый статус poll: + total_people: + few: "%{count} человек" + many: "%{count} человек" + one: "%{count} человек" + other: "%{count} человек" total_votes: few: "%{count} голоса" many: "%{count} голосов" @@ -949,6 +1088,8 @@ ru: pinned: Закреплённый статус reblogged: продвинул(а) sensitive_content: Чувствительный контент + tags: + does_not_match_previous_name: не совпадает с предыдущим именем terms: body_html: | <h2>Privacy Policy</h2> @@ -1045,37 +1186,39 @@ ru: enabled_success: Двухфакторная аутентификация успешно включена generate_recovery_codes: Сгенерировать коды восстановления instructions_html: "<strong>Отсканируйте этот QR-код с помощью Google Authenticator или другого подобного приложения на Вашем телефоне</strong>. С этого момента приложение будет генерировать токены, которые будет необходимо ввести для входа." - lost_recovery_codes: Коды восстановления позволяют вернуть доступ к аккаунту в случае утери телефона. Если Вы потеряли Ваши коды восстановления, вы можете заново сгенерировать их здесь. Ваши старые коды восстановления будут аннулированы. + lost_recovery_codes: Коды восстановления позволяют вернуть доступ к учётной записи в случае утери телефона. Если Вы потеряли Ваши коды восстановления, вы можете заново сгенерировать их здесь. Ваши старые коды восстановления будут аннулированы. manual_instructions: 'Если Вы не можете отсканировать QR-код и хотите ввести его вручную, секрет представлен здесь открытым текстом:' recovery_codes: Коды восстановления recovery_codes_regenerated: Коды восстановления успешно сгенерированы - recovery_instructions_html: В случае утери доступа к Вашему телефону Вы можете использовать один из кодов восстановления, указанных ниже, чтобы вернуть доступ к аккаунту. Держите коды восстановления в безопасности, например, распечатав их и храня с другими важными документами. + recovery_instructions_html: В случае утери доступа к Вашему телефону Вы можете использовать один из кодов восстановления, указанных ниже, чтобы вернуть доступ к учётной записи. Держите коды восстановления в безопасности, например, распечатав их и храня с другими важными документами. setup: Настроить wrong_code: Введенный код неверен! Правильно ли установлены серверное время и время устройства? user_mailer: backup_ready: - explanation: Вы запросили полный архив вашего аккаунта Mastodon. Он готов к загрузке! + explanation: Вы запросили полный архив вашей учётной записи Mastodon. Он готов к загрузке! subject: Ваш архив готов к загрузке title: Вынос архива warning: explanation: - disable: Пока ваш аккаунт заморожен, ваши данные остаются нетронутыми, но вы не можете производить никаких действий до разблокировки. - silence: Пока ваш аккаунт ограничен, ваши посты на этом сервере увидят только ваши действующие подписчики, а ваш аккаунт может быть исключён из различных каталогов. Впрочем, остальные могут подписаться на вас вручную. - suspend: Ваш аккаунт заблокирован и все ваши посты и загруженные медиафайлы безвозвратно удалены с этого сервера и других серверов, где у вас были подписчики. + disable: Пока ваша учётная запись заморожена, ваши данные остаются нетронутыми, но вы не можете производить никаких действий до разблокировки. + silence: Пока ваша учётная запись ограничена, ваши посты на этом сервере увидят только ваши действующие подписчики, а ваш профиль может быть исключён из различных каталогов. Впрочем, остальные могут подписаться на вас вручную. + suspend: Ваша учётная запись заблокирована и все ваши посты и загруженные медиафайлы безвозвратно удалены с этого сервера и других серверов, где у вас были подписчики. + get_in_touch: Вы можете ответить на это письмо, чтобы связаться с сотрудниками %{instance}. review_server_policies: Посмотреть правила сервера + statuses: 'В частности, для:' subject: - disable: Ваш аккаунт %{acct} заморожен + disable: Ваша учётная запись %{acct} заморожена none: "%{acct}, вам вынесено предупреждение" - silence: Ваш аккаунт %{acct} был ограничен - suspend: Ваш аккаунт %{acct} был заблокирован + silence: Ваша учётная запись %{acct} была ограничена + suspend: Ваша учётная запись %{acct} была заблокирована title: - disable: Аккаунт заморожен + disable: Учётная запись заморожена none: Предупреждение - silence: Аккаунт ограничен - suspend: Аккаунт заблокирован + silence: Учётная запись ограничена + suspend: Учётная запись заблокирована welcome: edit_profile_action: Настроить профиль - edit_profile_step: Вы можете настроить свой профиль, загрузив аватар, обложку, сменив имя и много чего ещё. Если вы хотите фильтровать подписчиков до того, как они смогут на вас подписаться, вы можете закрыть свой аккаунт. + edit_profile_step: Настройте свой профиль, загрузив аватарку, шапку, изменив отображаемое имя и ещё много чего. Если вы хотите вручную рассматривать и подтверждать подписчиков, можно закрыть свою учётную запись. explanation: Несколько советов для новичков final_action: Начать постить final_step: 'Начните постить! Ваши публичные посты могут видеть другие, например, в локальной ленте или по хэштегам, даже если у вас нет подписчиков. Вы также можете поздороваться с остальными и представиться, используя хэштег #приветствие.' diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index b948a5c50..65e6a8590 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -14,8 +14,9 @@ ar: bot: يُعلِم أنّ هذا الحساب لا يمثل شخصًا context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة + discoverable: سِجل الملفات التعريفية للمستخدمين هو طريقة أخرى لبلوغ جمهور أوسع email: سوف تتلقى رسالة إلكترونية للتأكيد - fields: يُمكنك عرض 4 عناصر على شكل جدول في ملفك الشخصي + fields: يُمكنك عرض 4 عناصر على شكل جدول في صفحتك التعريفية header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px inbox_url: نسخ العنوان الذي تريد استخدامه مِن صفحة الاستقبال للمُرحَّل irreversible: التبويقات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا @@ -25,14 +26,19 @@ ar: phrase: سوف يتم العثور عليه مهما كان نوع النص أو حتى و إن كان داخل الويب فيه تحذير عن المحتوى scopes: ما هي المجالات المسموح بها في التطبيق ؟ إن قمت باختيار أعلى المجالات فيمكنك الاستغناء عن الخَيار اليدوي. setting_aggregate_reblogs: لا تقم بعرض المشارَكات الجديدة لتبويقات قد قُمتَ بمشاركتها سابقا (هذا الإجراء يعني المشاركات الجديدة فقط التي تلقيتَها) + setting_default_sensitive: تُخفى الوسائط الحساسة تلقائيا ويمكن اظهارها عن طريق النقر عليها setting_display_media_default: إخفاء الوسائط المُعيَّنة كحساسة setting_display_media_hide_all: إخفاء كافة الوسائط دائمًا setting_display_media_show_all: دائمًا عرض الوسائط المُعيَّنة كحساسة - setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك الشخصية - setting_noindex: ذلك يؤثر على حالة ملفك الشخصي و صفحاتك + setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك التعريفية + setting_noindex: ذلك يؤثر على صفحتك التعريفية وصفحات المنشورات + setting_show_application: يتم عرض اسم التطبيق الذي تستخدمه عند التبويق في العرض المفصّل لتبوبيقاتك + setting_use_pending_items: إخفاء تحديثات الخط وراء نقرة بدلًا مِن التمرير التلقائي للتدفق username: اسم المستخدم الخاص بك سوف يكون فريدا مِن نوعه على %{domain} featured_tag: - name: 'رُبَّما تريد/ي استخدام أحد هؤلاء:' + name: 'رُبَّما تريد·ين استخدام واحد مِن هذه:' + form_challenge: + current_password: إنك بصدد الدخول إلى منطقة آمنة imports: data: ملف CSV تم تصديره مِن خادوم ماستدون آخر invite_request: @@ -46,9 +52,14 @@ ar: fields: name: التسمية value: المحتوى + account_alias: + acct: مُعرّف الحساب القديم + account_migration: + acct: مُعرّف الحساب الجديد account_warning_preset: text: نموذج نصي admin_account_action: + include_statuses: أدرج التبويقات التي تم الإبلاغ عنها ضمن الرسالة الإلكترونية send_email_notification: إشعار المستخدِم عبر البريد الإلكتروني text: تحذير مخصص type: الإجراء @@ -72,7 +83,7 @@ ar: display_name: الاسم المعروض email: عنوان البريد الإلكتروني expires_in: تنتهي مدة صلاحيته بعد - fields: البيانات الوصفية للصفحة الشخصية + fields: البيانات الوصفية للصفحة التعريفية header: الرأسية inbox_url: عنوان رابط صندوق المُرَحِّل irreversible: إسقاط بدلا من إخفائها @@ -103,7 +114,9 @@ ar: setting_show_application: اكشف اسم التطبيقات المستخدمة لنشر التبويقات setting_system_font_ui: استخدم الخطوط الافتراضية للنظام setting_theme: سمة الموقع + setting_trends: اعرض ما يُتداوَل اليوم setting_unfollow_modal: إظهار مربع حوار للتأكيد قبل إلغاء متابعة أي حساب + setting_use_pending_items: الوضع البطيء severity: القوّة type: صيغة الاستيراد username: اسم المستخدم @@ -115,6 +128,8 @@ ar: must_be_follower: حظر الإخطارات القادمة من حسابات لا تتبعك must_be_following: حظر الإخطارات القادمة من الحسابات التي لا تتابعها must_be_following_dm: حظر الرسائل المباشرة القادمة من طرف أشخاص لا تتبعهم + invite: + comment: التعليق invite_request: text: لماذا ترغب في الانضمام؟ notification_emails: @@ -123,8 +138,15 @@ ar: follow: ابعث بريداً إلكترونيًا عندما يتبعك أحد follow_request: ابعث بريدا إلكترونيا عندما يقوم أحدهم بإرسال طلب بالمتابعة mention: ابعث بريداً إلكترونيًا عندما يُشير إليك أو يذكُرك أحدهم + pending_account: ابعث رسالة إلكترونية إن كان هناك حساب جديد بحاجة إلى مراجعة reblog: ابعث بريداً إلكترونيًا عندما يقوم أحدهم بترقية منشورك report: إرسال رسالة إلكترونية عند تلقّي إبلاغ جديد + trending_tag: ابعث رسالة إلكترونية إن كان هناك وسم متداوَل بحاجة إلى مراجعة + tag: + listable: اسمح لهذا الوسم بالظهور في البحث وفي دليل الصفحات التعريفية + name: الوسم + trendable: السماح لهذه الكلمة المفتاحية بالظهور تحت المتداوَلة + usable: اسمح للتبويقات باستخدام هذا الوسم 'no': لا recommended: موصى بها required: diff --git a/config/locales/simple_form.bn.yml b/config/locales/simple_form.bn.yml index 152c69829..607e6bd8e 100644 --- a/config/locales/simple_form.bn.yml +++ b/config/locales/simple_form.bn.yml @@ -1 +1,13 @@ +--- bn: + simple_form: + hints: + defaults: + setting_display_media_default: সংবেদনশীল হিসেবে চিহ্নিত করা মিডিয়াসমূহ লুকান + setting_display_media_hide_all: সবসময় মিডিয়া লুকান + setting_display_media_show_all: সংবেদনশীল হিসেবে চিহ্নিত করা মিডিয়াসমূহ দেখান + labels: + account: + fields: + name: লেবেল + value: বিষয়বস্তু diff --git a/config/locales/simple_form.br.yml b/config/locales/simple_form.br.yml new file mode 100644 index 000000000..c7677c850 --- /dev/null +++ b/config/locales/simple_form.br.yml @@ -0,0 +1 @@ +br: diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index d8713e4ca..80703950b 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -2,9 +2,14 @@ ca: simple_form: hints: + account_alias: + acct: Especifica l'usuari@domini del compte des d'on et vols moure + account_migration: + acct: Especifica l'usuari@domini del compte al que et vols moure account_warning_preset: text: Pots utilitzar totes les sintaxi com ara URL, etiquetes i mencions admin_account_action: + include_statuses: L'usuari veurà quin tuts ha causat l'acció de moderació o avís send_email_notification: L'usuari rebrà una explicació del que ha passat amb el seu compte text_html: Opcional. Pots utilitzar tota la sintaxi. Pots <a href="%{path}">afegir configuracions predefinides d'avís</a> per a estalviar temps type_html: Tria què fer amb <strong>%{acct}</strong> @@ -14,8 +19,10 @@ ca: avatar: PNG, GIF o JPG. Màxim %{size}. S'escalarà a %{dimensions}px bot: Aquest compte realitza principalment accions automatitzades i pot no estar controlat per cap persona context: Un o diversos contextos on s'ha d'aplicar el filtre + current_password: Per motius de seguretat si us plau entra la contrasenya del compte actual + current_username: Per a confirmar, si us plau entra el nom d'usuari del compte actual digest: Només s'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència - discoverable_html: El <a href="%{path}" target="_blank">directori</a> permet trobar usuaris en funció dels interessos i activitat. Requereix almenys %{min_followers} seguidors + discoverable: El directori de perfils és una altra manera per quin el teu compte pot assolir una audiència més àmplia email: Se t'enviarà un correu electrònic de confirmació fields: Pots tenir fins a 4 elements que es mostren com a taula al teu perfil header: PNG, GIF o JPG. Màxim %{size}. S'escalarà a %{dimensions}px @@ -34,16 +41,24 @@ ca: setting_hide_network: Qui tu segueixes i els que et segueixen a tu no es mostraran en el teu perfil setting_noindex: Afecta el teu perfil públic i les pàgines d'estat setting_show_application: L'aplicació que fas servir per a publicar es mostrarà a la vista detallada dels teus toots + setting_use_blurhash: Els degradats es basen en els colors de les imatges ocultes, però enfosqueixen els detalls + setting_use_pending_items: Amaga les actualitzacions de la línia de temps després d'un clic en comptes de desplaçar-se automàticament username: El teu nom d'usuari serà únic a %{domain} whole_word: Quan la paraula clau o la frase sigui només alfanumèrica, s'aplicarà si coincideix amb la paraula sencera + domain_allow: + domain: Aquest domini podrà obtenir dades d’aquest servidor i les dades entrants d’aquests seran processades i emmagatzemades featured_tag: name: 'És possible que vulguis utilitzar un d''aquests:' + form_challenge: + current_password: Estàs entrant en una àrea segura imports: data: Fitxer CSV exportat des d'un altre servidor de Mastodon invite_request: text: Això ens ajudarà a revisar la teva petició sessions: otp: 'Introdueix el codi de dos factors generat per el teu telèfon o utilitza un dels teus codis de recuperació:' + tag: + name: Només pots canviar la caixa de les lletres, per exemple, per fer-la més llegible user: chosen_languages: Quan estigui marcat, només es mostraran els toots de les llengües seleccionades en les línies de temps públiques labels: @@ -51,9 +66,14 @@ ca: fields: name: Etiqueta value: Contingut + account_alias: + acct: Nom del compte vell + account_migration: + acct: Nom del nou compte account_warning_preset: text: Text predefinit admin_account_action: + include_statuses: Inclou tuts reportats en el correu electrònic send_email_notification: Notifica l'usuari per correu electrònic text: Avís personalitzat type: Acció @@ -93,6 +113,7 @@ ca: setting_aggregate_reblogs: Agrupa impulsos en les línies de temps setting_auto_play_gif: Reproducció automàtica de GIFs animats setting_boost_modal: Mostra la finestra de confirmació abans d'impulsar + setting_crop_images: Retalla les imatges en tuts no ampliats a 16x9 setting_default_language: Llengua de les publicacions setting_default_privacy: Privacitat de les publicacions setting_default_sensitive: Marca sempre els elements multimèdia com a sensibles @@ -108,7 +129,10 @@ ca: setting_show_application: Desvela l'aplicació utilitzada per enviar toots setting_system_font_ui: Utilitza el tipus de lletra predeterminat del sistema setting_theme: Tema del lloc + setting_trends: Mostra les tendències d'avui setting_unfollow_modal: Mostra el diàleg de confirmació abans de deixar de seguir a algú + setting_use_blurhash: Mostra degradats de colors per als Mèdia amagats + setting_use_pending_items: Mode lent severity: Severitat type: Importa el tipus username: Nom d'usuari @@ -120,6 +144,8 @@ ca: must_be_follower: Blocar les notificacions de persones que no et segueixen must_be_following: Bloca les notificacions de persones que no segueixes must_be_following_dm: Bloca els missatges directes de persones que no segueixes + invite: + comment: Comenta invite_request: text: Per què vols unir-te? notification_emails: @@ -131,6 +157,12 @@ ca: pending_account: Envia un correu electrònic quan es necessiti revisar un compte nou reblog: Envia un correu electrònic si algú comparteix el teu estat report: Envia un correu electrònic quan s'enviï un nou informe + trending_tag: Envia un correu quan una etiqueta sense revisar està en tendència + tag: + listable: Permet que aquesta etiqueta aparegui en les cerques i en el directori de perfils + name: Etiqueta + trendable: Permet que aquesta etiqueta aparegui en les tendències + usable: Permet als tuts emprar aquesta etiqueta 'no': 'No' recommended: Recomanat required: diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml index 1f5dba43f..7ffc8fe3d 100644 --- a/config/locales/simple_form.co.yml +++ b/config/locales/simple_form.co.yml @@ -2,9 +2,14 @@ co: simple_form: hints: + account_alias: + acct: Entrate u cugnome@duminiu di u contu attuale + account_migration: + acct: Entrate u cugnome@duminiu di u contu induve vulete traslucà account_warning_preset: text: Pudete utilizà a sintassa di i statuti, per esempiu l'URL, hashtag, minzione admin_account_action: + include_statuses: L'utilizatore viderà i statuti rispunsevuli di l'azzione o l'avertimentu di muderazione send_email_notification: L'utilizatore hà da riceve una spiegazione di cio chì hè accadutu à u so contu text_html: In uzzione. Pudete utilizà a sintassa di i statuti. Pudete ancu <a href="%{path}">aghjustà preselezzione d'avertimentu</a> per piglià tempu type_html: Sceglie chì fà cù <strong>%{acct}</strong> @@ -14,8 +19,10 @@ co: avatar: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu context: Cuntestu·i induve u filtru deve esse applicatu + current_password: Per ragione di sicurità, entrate a chjave d'accessu di stu contu + current_username: Per cunfirmà, entrate u cugnome di questu contu digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti - discoverable_html: L'<a href="%{path}" target="_blank">annuariu</a> permette à a ghjente di truvà conti à partesi d'interessi è d'attività. Ci vole à avè almenu %{min_followers} abbunati + discoverable: L'annuariu di i prufili hè un'altra manera per u vostru contu di tuccà un'audienza più larga email: Avete da riceve un'e-mail di cunfirmazione fields: Pudete avè fin’à 4 elementi mustrati cum’un tavulone nant’à u vostru prufile header: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px @@ -34,16 +41,24 @@ co: setting_hide_network: I vostri abbunati è abbunamenti ùn saranu micca mustrati nant’à u vostru prufile setting_noindex: Tocca à u vostru prufile pubblicu è i vostri statuti setting_show_application: L'applicazione chì voi utilizate per mandà statuti sarà affissata indè a vista ditagliata di quelli + setting_use_blurhash: I digradati blurhash sò basati nant'à i culori di u ritrattu piattatu ma senza i ditagli + setting_use_pending_items: Clicchi per messe à ghjornu i statuti invece di fà sfilà a linea autumaticamente username: U vostru cugnome sarà unicu nant'à %{domain} whole_word: Quandu a parolla o a frasa sana hè alfanumerica, sarà applicata solu s'ella currisponde à a parolla sana + domain_allow: + domain: Stu duminiu puderà ricuperà i dati di stu servore è i dati ch'affaccanu da quallà saranu trattati è cunservati featured_tag: name: 'Pudete vulè utilizà unu di quelli:' + form_challenge: + current_password: Entrate in in una zona sicurizata imports: data: Un fugliale CSV da un’altru servore di Mastodon invite_request: text: Quessu ci aiutarà à valutà a vostra dumanda sessions: otp: 'Entrate u codice d’identificazione à dui fattori nant’à u vostru telefuninu, o unu di i vostri codici di ricuperazione:' + tag: + name: Pudete solu cambià a cassa di i caratteri, per esempiu per u rende più lighjevule user: chosen_languages: Soli i statuti scritti in e lingue selezziunate saranu mustrati indè e linee pubbliche labels: @@ -51,9 +66,14 @@ co: fields: name: Marcu value: Cuntinutu + account_alias: + acct: Cugnome di l'anzianu contu + account_migration: + acct: Cugnome di u novu contu account_warning_preset: text: Testu preselezziunatu admin_account_action: + include_statuses: Inchjude i statuti palisati indè l'e-mail send_email_notification: Nutificà l'utilizatore cù un'e-mail text: Avertimentu persunalizatu type: Azzione @@ -93,6 +113,7 @@ co: setting_aggregate_reblogs: Gruppà e spartere indè e linee setting_auto_play_gif: Lettura autumatica di i GIF animati setting_boost_modal: Mustrà una cunfirmazione per sparte un statutu + setting_crop_images: Riquatrà i ritratti in 16x9 indè i statuti micca selezziunati setting_default_language: Lingua di pubblicazione setting_default_privacy: Cunfidenzialità di i statuti setting_default_sensitive: Sempre cunsiderà media cum’è sensibili @@ -108,7 +129,10 @@ co: setting_show_application: Indicà u nome di l'applicazione utilizata per mandà statuti setting_system_font_ui: Pulizza di caratteri di u sistemu setting_theme: Tema di u situ + setting_trends: Vede e tendenze per oghji setting_unfollow_modal: Mustrà una cunfirmazione per siguità qualch’unu + setting_use_blurhash: Vede digradati di culori per i media piattati + setting_use_pending_items: Modu lentu severity: Severità type: Tippu d’impurtazione username: Cugnome @@ -120,6 +144,8 @@ co: must_be_follower: Piattà e nutificazione di quelli·e ch’ùn vi seguitanu must_be_following: Piattà e nutificazione di quelli·e ch’ùn seguitate must_be_following_dm: Bluccà e missaghji diretti di quelli·e ch’ùn seguitate + invite: + comment: Cummentariu invite_request: text: Perchè vulete ghjunghje? notification_emails: @@ -131,6 +157,12 @@ co: pending_account: Mandà un'e-mail quandu un novu contu hà bisognu d'esse valutatu reblog: Mandà un’e-mail quandu qualch’unu sparte i mo statuti report: Mandà un'e-mail quandu c'hè un novu signalamentu + trending_tag: Mandà un'e-mail quandu un hashtag micca verificatu hè in e tendenze + tag: + listable: Auturizà stu hashtag à esse vistu nant'à l'annuariu di i prufili + name: Hashtag + trendable: Auturizà stu hashtag à esse vistu in e tendenze + usable: Auturizà i statuti à utilizà stu hashtag 'no': Nò recommended: Ricumandati required: diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 3bf74e971..7a14a78b0 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -2,9 +2,14 @@ cs: simple_form: hints: + account_alias: + acct: Zadejte přezdívku@doménu účtu, ze kterého se chcete přesunout + account_migration: + acct: Zadejte přezdívku@doménu účtu, na který se chcete přesunout account_warning_preset: text: Můžete používat syntaxi tootů, jako například URL, hashtagy a zmínky admin_account_action: + include_statuses: Uživatel uvidí, které tooty způsobily moderátorskou akci nebo varování send_email_notification: Uživatel obdrží vysvětlení toho, co se stalo s jeho účtem text_html: Volitelné. Můžete používat syntaxi tootů. Pro ušetření času si můžete <a href="%{path}">přidat předlohy pro varování</a> type_html: Vyberte, co chcete udělat s účtem <strong>%{acct}</strong> @@ -14,8 +19,10 @@ cs: avatar: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px bot: Tento účet provádí hlavně automatizované akce a nemusí být spravován context: Jeden či více kontextů, ve kterých má být filtr uplatněn + current_password: Z bezpečnostních důvodů prosím zadejte heslo aktuálního účtu + current_username: Prosím potvrďte zadáním uživatelského jména aktuálního účtu digest: Odesíláno pouze po dlouhé době nečinnosti a pouze, pokud jste při své nepřítomnosti obdržel/a osobní zprávy - discoverable_html: <a href="%{path}" target="_blank">Adresář</a> dovoluje lidem najít účty podle zájmů a aktivity. Vyžaduje alespoň %{min_followers} sledujících + discoverable: Adresář profilů je další způsob, díky kterému se může váš účet dostat k širšímu publiku email: Bude vám poslán potvrzovací e-mail fields: Na profilu můžete mít až 4 položky zobrazené jako tabulka header: PNG, GIF či JPG. Maximálně %{size}. Bude zmenšen na %{dimensions} px @@ -34,16 +41,24 @@ cs: setting_hide_network: Koho sledujete a kdo sleduje vás nebude zobrazeno na vašem profilu setting_noindex: Ovlivňuje váš veřejný profil a stránky tootů setting_show_application: Aplikace, kterou používáte k psaní tootů, bude zobrazena v detailním zobrazení vašich tootů + setting_use_blurhash: Gradienty jsou založeny na barvách skryté grafiky, ale zakrývají jakékoliv detaily + setting_use_pending_items: Skrýt aktualizace časové osy a načíst je kliknutím namísto automatického rolování proudu username: Vaše uživatelské jméno bude na %{domain} unikátní whole_word: Je-li klíčové slovo či fráze pouze alfanumerická, bude aplikována pouze, pokud se shoduje s celým slovem + domain_allow: + domain: Tato doména bude moci stahovat data z tohoto serveru a příchozí data z ní budou zpracována a uložena featured_tag: name: 'Nejspíš budete chtít použít jeden z těchto:' + form_challenge: + current_password: Vstupujete do zabezpečeného prostoru imports: data: Soubor CSV exportovaný z jiného serveru Mastodon invite_request: text: To nám pomůže posoudit váš požadavek sessions: otp: 'Napište dvoufázový kód vygenerovaný vaší mobilní aplikací, nebo použijte jeden z vašich záložních kódů:' + tag: + name: Můžete měnit pouze velikost písmen, například kvůli lepší čitelnosti user: chosen_languages: Je-li tohle zaškrtnuto, budou ve veřejných časových osách zobrazeny pouze tooty ve zvolených jazycích labels: @@ -51,9 +66,14 @@ cs: fields: name: Označení value: Obsah + account_alias: + acct: Adresa starého účtu + account_migration: + acct: Adresa nového účtu account_warning_preset: text: Text předlohy admin_account_action: + include_statuses: Zahrnout v e-mailu nahlášené tooty send_email_notification: Informovat uživatele e-mailem text: Vlastní varování type: Akce @@ -93,6 +113,7 @@ cs: setting_aggregate_reblogs: Seskupovat boosty v časových osách setting_auto_play_gif: Automaticky přehrávat animace GIF setting_boost_modal: Zobrazovat před boostnutím potvrzovací okno + setting_crop_images: Ořezávat obrázky v nerozbalených tootech na velikost 16x9 setting_default_language: Jazyk příspěvků setting_default_privacy: Soukromí příspěvků setting_default_sensitive: Vždy označovat média jako citlivá @@ -108,7 +129,10 @@ cs: setting_show_application: Zobrazit aplikaci používanou k psaní tootů setting_system_font_ui: Použít výchozí písmo systému setting_theme: Motiv stránky + setting_trends: Zobrazit dnešní trendy setting_unfollow_modal: Zobrazovat před zrušením sledování potvrzovací okno + setting_use_blurhash: Zobrazit pro skrytá média barevné gradienty + setting_use_pending_items: Pomalý režim severity: Přísnost type: Typ importu username: Uživatelské jméno @@ -120,6 +144,8 @@ cs: must_be_follower: Blokovat oznámení od lidí, kteří vás nesledují must_be_following: Blokovat oznámení od lidí, které nesledujete must_be_following_dm: Blokovat přímé zprávy od lidí, které nesledujete + invite: + comment: Komentář invite_request: text: Proč se chcete připojit? notification_emails: @@ -131,6 +157,12 @@ cs: pending_account: Posílat e-maily, když je třeba posoudit nový účet reblog: Posílat e-maily, když někdo boostne váš toot report: Posílat e-maily, je-li odesláno nové nahlášení + trending_tag: Posílat e-maily, když se neschválený hashtag stane populárním + tag: + listable: Dovolit tomuto hashtagu objevovat se v hledáních a v adresáři profilů + name: Hashtag + trendable: Dovolit tomuto hashtagu objevovat se v trendech + usable: Dovolit tootům používat tento hashtag 'no': Ne recommended: Doporučeno required: diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index b3c879b2f..6a3e74d59 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -2,42 +2,78 @@ cy: simple_form: hints: + account_alias: + acct: Rhowch enwdefnyddiwr@parth y cyfrif rydych chi am symud ohono + account_migration: + acct: Rhowch enwdefnyddiwr@parth y cyfrif rydych chi am symud iddo + account_warning_preset: + text: Gallwch defnyddio cystrawen tŵt, fel URLs, hashnodau a sôniadau + admin_account_action: + include_statuses: Bydd y defnyddiwr yn gweld pa tŵtiau sydd wedi achosi'r weithred gymedroli neu'r rhybudd + send_email_notification: Bydd y defnyddiwr yn derbyn esboniad o beth digwyddodd gyda'i cyfrif + text_html: Yn ddewisol. Gallwch defnyddio cystrawen tŵt. Gallwch <a href="%{path}">ychwanegu rhagosodiadau rhybydd</a> i arbed amser + type_html: Dewis beth i wneud gyda <strong>%{acct}</strong> + warning_preset_id: Yn ddewisol. Gallwch dal ychwanegu testun addasiol I ddiwedd y rhagosodiad defaults: autofollow: Bydd pobl sy'n cofrestru drwy'r gwahoddiad yn eich dilyn yn awtomatig avatar: PNG, GIF neu JPG. %{size} ar y mwyaf. Caiff ei israddio i %{dimensions}px bot: Mae'r cyfrif hwn yn perfformio gweithredoedd awtomatig yn bennaf ac mae'n bosib nad yw'n cael ei fonitro context: Un neu fwy cyd-destun lle dylai'r hidlydd weithio + current_password: At ddibenion diogelwch, nodwch gyfrinair y cyfrif cyfredol + current_username: I gadarnhau, nodwch enw defnyddiwr y cyfrif cyfredol digest: Ond yn cael eu hanfon ar ôl cyfnod hir o anweithgarwch ac ond os ydych wedi derbyn unrhyw negeseuon personol yn eich absenoldeb + discoverable: Mae'r cyfeirlyfr proffil yn ffordd arall y gall eich cyfrif gyrraedd cynulleidfa ehangach email: Byddwch yn derbyn e-bost i gadarnhau fields: Mae modd i chi arddangos hyd at 4 eitem fel tabl ar eich proffil header: PNG, GIF neu JPG. %{size} ar y mwyaf. Ceith ei israddio i %{dimensions}px inbox_url: Copïwch yr URL o dudalen flaen y relái yr ydych am ei ddefnyddio irreversible: Bydd tŵtiau wedi eu hidlo yn diflannu am byth, hyd yn oed os ceith yr hidlydd ei ddileu'n hwyrach - locale: Iaith y rhyngwyneb, e-byst a hysbysiadau push + locale: Iaith y rhyngwyneb, e-byst a hysbysiadau gwthiadwy locked: Ei wneud yn ofynnol i chi i ganiatau dilynwyr a llaw password: Defnyddiwch oleiaf 8 nodyn phrase: Caiff ei gyfateb heb ystyriaeth o briflythrennu mewn testun neu rhybudd ynghylch cynnwys tŵt scopes: Pa APIau y bydd gan y rhaglen ganiatad i gael mynediad iddynt. Os dewiswch maes lefel uchaf, yna nid oes angen dewis rhai unigol. + setting_aggregate_reblogs: Paid dangos bŵstiau newydd ar gyfer tŵtiau sydd wedi'i fŵstio yn ddiweddar (dim ond yn effeithio bŵstiau newydd ei dderbyn) + setting_default_sensitive: Mae cyfryngau sensitif yn cael ei gyddio'n rhagosodiedig, a gall cael eu dangos â chlic setting_display_media_default: Cuddio cyfryngau wedi eu marcio'n sensitif setting_display_media_hide_all: Cuddio cyfryngau bob tro setting_display_media_show_all: Dangos cyfryngau wedi eu marcio'n sensitif bob tro setting_hide_network: Ni fydd y rheini yr ydych yn eu dilyn a phwy sy'n eich dilyn chi yn cael ei ddangos ar eich proffil setting_noindex: Mae hyn yn effeithio ar eich proffil cyhoeddus a'ch tudalennau statws + setting_show_application: Bydd y offer frydych yn defnyddio i dŵtio yn cael ei arddangos yn golwg manwl eich tŵtiau + setting_use_blurhash: Mae graddiannau wedi'u seilio ar liwiau'r delweddau cudd ond maent yn cuddio unrhyw fanylion + setting_use_pending_items: Cuddio diweddariadau llinell amser y tu ôl i glic yn lle sgrolio yn awtomatig username: Bydd eich enw defnyddiwr yn unigryw ar %{domain} whole_word: Os yw'r allweddair neu'r ymadrodd yn alffaniwmerig yn unig, mi fydd ond yn cael ei osod os yw'n cyfateb a'r gair cyfan + domain_allow: + domain: Bydd y parth hwn yn gallu nôl data o'r gweinydd hwn a bydd data sy'n dod i mewn ohono yn cael ei brosesu a'i storio + featured_tag: + name: 'Efallai hoffech defnyddio un o''r rhain:' + form_challenge: + current_password: Rydych chi'n mynd i mewn i ardal sicr imports: data: Allforiwyd dogfen CSV o achos Mastodon arall + invite_request: + text: Bydd hyn yn helpu ni adolygu eich cais sessions: otp: 'Mewnbynnwch y cod dau gam a gynhyrchwyd gan eich ap ffôn neu defnyddiwch un o''ch codau adfer:' + tag: + name: Dim ond er mwyn ei gwneud yn fwy darllenadwy y gallwch chi newid y llythrennau, er enghraifft user: chosen_languages: Wedi eu dewis, dim ond tŵtiau yn yr ieithoedd hyn bydd yn cael eu harddangos mewn ffrydiau cyhoeddus labels: account: fields: + name: Label value: Cynnwys + account_alias: + acct: Enw'r hen gyfrif + account_migration: + acct: Enw'r cyfrif newydd account_warning_preset: text: Testun rhagosodedig admin_account_action: + include_statuses: Cynhwyswch tŵtiau yr adroddwyd amdanynt yn yr e-bost send_email_notification: Hysbysu'r defnyddiwr trwy e-bost text: Rhybudd wedi'i addasu type: Gweithredu @@ -56,6 +92,7 @@ cy: confirm_password: Cadarnhau cyfrinair context: Hidlo cyd-destunau current_password: Cyfrinair presennol + data: Data discoverable: Rhestrwch y cyfrif hwn ar y cyfeiriadur display_name: Enw arddangos email: Cyfeiriad e-bost @@ -72,9 +109,11 @@ cy: otp_attempt: Côd dau gam password: Cyfrinair phrase: Allweddair neu ymadrodd + setting_advanced_layout: Alluogi rhyngwyneb wê uwch setting_aggregate_reblogs: Grŵp hybiau mewn ffrydiau setting_auto_play_gif: Chwarae GIFs wedi'u hanimeiddio yn awtomatig setting_boost_modal: Dangos deialog cadarnhad cyn bŵstio + setting_crop_images: Tocio lluniau o fewn tŵtiau ddi-ehangedig i 16x9 setting_default_language: Cyhoeddi iaith setting_default_privacy: Cyfrinachedd cyhoeddi setting_default_sensitive: Marcio cyfryngau fel eu bod yn sensitif bob tro @@ -87,27 +126,46 @@ cy: setting_hide_network: Cuddio eich rhwydwaith setting_noindex: Dewis peidio mynegeio peiriant chwilota setting_reduce_motion: Lleihau mudiant mewn animeiddiadau + setting_show_application: Datguddio'r offer defnyddwyd i anfon tŵtiau setting_system_font_ui: Defnyddio ffont rhagosodedig y system setting_theme: Thema'r wefan + setting_trends: Dangos tueddiadau o heddiw ymlaen setting_unfollow_modal: Dangos deialog cadarnhau cyn dad-ddilyn rhywun + setting_use_blurhash: Dangoswch raddiannau lliwgar ar gyfer cyfryngau cudd + setting_use_pending_items: Modd araf severity: Difrifoldeb type: Modd mewnforio username: Enw defnyddiwr username_or_email: Enw defnyddiwr neu e-bost whole_word: Gair cyfan + featured_tag: + name: Hashnod interactions: must_be_follower: Blocio hysbysiadau o bobl nad ydynt yn eich dilyn must_be_following: Blocio hysbysiadau o bobl nad ydych yn eu dilyn must_be_following_dm: Blocio negeseuon uniongyrchol o bobl nad ydych yn eu dilyn + invite: + comment: Sylw + invite_request: + text: Pam hoffech ymuno? notification_emails: digest: Anfonwch e-byst crynhoi favourite: Anfon e-bost pan mae rhywun yn ffefrynnu eich statws follow: Anfon e-bost pan mae rhywun yn eich dilyn chi follow_request: Anfon e-bost pan mae rhywun yn gofyn i chi i'w dilyn mention: Anfon e-bost pan mae rhywun yn eich crybwyll + pending_account: Anfon ebost pan mae cyfrif newydd angen adolygiad reblog: Anfon e-bost pan mae rhywun yn bŵstio eich statws report: Anfon e-bost pan y cyflwynir adroddiad newydd + trending_tag: Anfonwch e-bost pan fydd hashnod heb ei adolygu yn tueddu + tag: + listable: Gadewch i'r hashnod hwn ymddangos mewn chwiliadau ac ar y cyfeiriadur proffil + name: Hashnod + trendable: Gadewch i'r hashnod hwn ymddangos o dan dueddiadau + usable: Caniatáu i tŵtiau ddefnyddio'r hashnod hwn 'no': Na + recommended: Argymhellwyd required: + mark: "*" text: gofynnol 'yes': Ie diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 324afece6..738d4070b 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -26,6 +26,8 @@ da: setting_noindex: Påvirker din offentlige profil og status sider username: Dit brugernavn vil være unikt på %{domain} whole_word: Når nøgle ordet eller udtrykket kun er alfanumerisk, vil det kun blive brugt hvis det passer hele ordet + featured_tag: + name: 'Du kunne måske tænke dig at bruge en af følgende:' imports: data: CSV fil eksporteret fra en anden Mastodon server sessions: @@ -51,6 +53,7 @@ da: confirm_password: Bekræft adgangskode context: Filtrer sammenhænge current_password: Nuværende adgangskode + data: Data display_name: Visningsnavn email: E-mail adresse expires_in: Udløber efter @@ -82,16 +85,22 @@ da: setting_reduce_motion: Reducer animationers bevægelse setting_system_font_ui: Brug systemets standard font setting_theme: Tema for side + setting_trends: Vis dagens tendenser setting_unfollow_modal: Vis bekræftelses dialog før du stopper med at følge nogen + setting_use_pending_items: Langsom tilstand severity: Omfang type: Importtype username: Brugernavn username_or_email: Brugernavn eller Email whole_word: Helt ord + featured_tag: + name: Hashtag interactions: must_be_follower: Bloker notifikationer fra folk der ikke følger dig must_be_following: Bloker notifikationer fra folk du ikke følger must_be_following_dm: Bloker direkte beskeder fra folk du ikke følger + invite_request: + text: Hvorfor ønsker du at tilmelde dig? notification_emails: digest: Send sammendrag via emails favourite: Send email når nogen favoriserer din status @@ -100,7 +109,12 @@ da: mention: Send e-mail når nogen nævner dig reblog: Send email når nogen fremhæver din status report: Send email når en ny anmeldelse bliver indsendt + tag: + name: Hashtag + usable: Tillad toots at benytte dette hashtag 'no': Nej + recommended: Anbefalet required: + mark: "*" text: påkrævet 'yes': Ja diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 61e0f9740..ed30b32d3 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -2,9 +2,14 @@ de: simple_form: hints: + account_alias: + acct: Gib den benutzernamen@domain des Kontos an, von dem du umziehen möchtest + account_migration: + acct: Gib den benutzernamen@domain des Kontos an, zu dem du umziehen möchtest account_warning_preset: text: Du kannst Beitragssyntax benutzen, wie z.B. URLs, Hashtags und Erwähnungen admin_account_action: + include_statuses: Der Benutzer wird sehen, welche Beiträge diese Maßnahme verursacht haben send_email_notification: Benutzer_in wird Bescheid gegeben, was mit dem Konto geschehen ist text_html: Optional. Du kannst Beitragssyntax nutzen. Du kannst <a href="%{path}">Warnungsvorlagen</a> benutzen um Zeit zu sparen type_html: Wähle aus, was du mit <strong>%{acct}</strong> machen möchtest @@ -14,8 +19,10 @@ de: avatar: PNG, GIF oder JPG. Maximal %{size}. Wird auf %{dimensions} px herunterskaliert bot: Dieses Konto führt lediglich automatisierte Aktionen durch und wird möglicherweise nicht überwacht context: Ein oder mehrere Kontexte, wo der Filter aktiv werden soll + current_password: Aus Sicherheitsgründen gib bitte das Passwort des aktuellen Kontos ein + current_username: Um das zu bestätigen, gib den Benutzernamen des aktuellen Kontos ein digest: Wenn du eine lange Zeit inaktiv bist, wird dir eine Zusammenfassung von Erwähnungen zugeschickt, die du in deiner Abwesenheit empfangen hast - discoverable_html: Das <a href="%{path}" target="_blank">Verzeichnis</a> erlaubt es dein Profil durch deine Hashtags und deine Aktivitäten zu entdecken. Voraussetzung ist allerdings mindestens %{min_followers} Folger_innen + discoverable: Das Profilverzeichnis ist eine andere Möglichkeit, mit der dein Konto ein größeres Publikum erreichen kann email: Du wirst eine Bestätigungs-E-Mail erhalten fields: Du kannst bis zu 4 Elemente auf deinem Profil anzeigen lassen, die als Tabelle dargestellt werden header: PNG, GIF oder JPG. Maximal %{size}. Wird auf %{dimensions} px herunterskaliert @@ -34,16 +41,24 @@ de: setting_hide_network: Wem du folgst und wer dir folgt, wird in deinem Profil nicht angezeigt setting_noindex: Betrifft dein öffentliches Profil und deine Beiträge setting_show_application: Die Anwendung die du nutzst wird in der detaillierten Ansicht deiner Beiträge angezeigt - username: Dein Profilname wird auf %{domain} einzigartig sein + setting_use_blurhash: Die Farbverläufe basieren auf den Farben der versteckten Medien, aber verstecken irgendwelche Details + setting_use_pending_items: Neue Beiträge hinter einem Klick verstecken anstatt automatisch zu scrollen + username: Dein Benutzername wird auf %{domain} einzigartig sein whole_word: Wenn das Schlagwort nur aus Buchstaben und Zahlen besteht, wird es nur angewendet, wenn es dem ganzen Wort entspricht + domain_allow: + domain: Diese Domain kann Daten von diesem Server abrufen und eingehende Daten werden verarbeitet und gespeichert featured_tag: name: 'Du möchtest vielleicht einen von diesen benutzen:' + form_challenge: + current_password: Du betrittst einen sicheren Bereich imports: data: CSV-Datei, die aus einem anderen Mastodon-Server exportiert wurde invite_request: text: Dies wird uns helfen deine Anmeldungsanfrage besser zu verarbeiten sessions: otp: 'Gib die Zwei-Faktor-Authentifizierung von deinem Telefon ein oder benutze einen deiner Wiederherstellungscodes:' + tag: + name: Du kannst zum Beispiel nur die Groß- und Kleinschreibung der Buchstaben ändern, um es lesbarer zu machen user: chosen_languages: Wenn aktiviert, werden nur Beiträge in den ausgewählten Sprachen auf den öffentlichen Zeitleisten angezeigt labels: @@ -51,9 +66,14 @@ de: fields: name: Bezeichnung value: Inhalt + account_alias: + acct: Adresse des alten Kontos + account_migration: + acct: Adresse des neuen Kontos account_warning_preset: text: Vorlagentext admin_account_action: + include_statuses: Meldungen der E-Mail beifügen send_email_notification: Benachrichtige den Nutzer per E-Mail text: Eigene Warnung type: Aktion @@ -64,7 +84,7 @@ de: suspend: Deaktivieren und Benutzerdaten unwiderruflich löschen warning_preset_id: Benutze eine Warnungsvorlage defaults: - autofollow: Eingeladene Nutzer_innen sollen dir automatisch folgen + autofollow: Eingeladene Nutzer sollen dir automatisch folgen avatar: Profilbild bot: Dieses Profil ist ein Bot chosen_languages: Sprachen filtern @@ -93,6 +113,7 @@ de: setting_aggregate_reblogs: Gruppiere erneut geteilte Beiträge auf der Startseite setting_auto_play_gif: Animierte GIFs automatisch abspielen setting_boost_modal: Bestätigungsdialog anzeigen, bevor ein Beitrag geteilt wird + setting_crop_images: Bilder in nicht ausgeklappten Beiträgen auf 16:9 zuschneiden setting_default_language: Beitragssprache setting_default_privacy: Beitragssichtbarkeit setting_default_sensitive: Medien immer als heikel markieren @@ -108,7 +129,10 @@ de: setting_show_application: Anwendung preisgeben, die benutzt wurde um Beiträge zu versenden setting_system_font_ui: Standardschriftart des Systems verwenden setting_theme: Theme + setting_trends: Heutige Trends anzeigen setting_unfollow_modal: Bestätigungsdialog anzeigen, bevor jemandem entfolgt wird + setting_use_blurhash: Farbverlauf für versteckte Medien anzeigen + setting_use_pending_items: Langsamer Modus severity: Schweregrad type: Art des Imports username: Profilname @@ -120,6 +144,8 @@ de: must_be_follower: Benachrichtigungen von Profilen blockieren, die mir nicht folgen must_be_following: Benachrichtigungen von Profilen blockieren, denen ich nicht folge must_be_following_dm: Private Nachrichten von Profilen, denen ich nicht folge, blockieren + invite: + comment: Kommentar invite_request: text: Warum möchtest du beitreten? notification_emails: @@ -131,6 +157,12 @@ de: pending_account: E-Mail senden, wenn ein neues Benutzerkonto zur Überprüfung aussteht reblog: E-Mail senden, wenn jemand meinen Beitrag teilt report: E-Mail senden, wenn ein neuer Bericht vorliegt + trending_tag: E-Mail senden, wenn ein ausstehender Hashtag angesagt ist + tag: + listable: Erlaube diesem Hashtag im Profilverzeichnis zu erscheinen + name: Hashtag + trendable: Erlaube es diesen Hashtag in den Trends erscheinen zu lassen + usable: Beiträge erlauben, diesen Hashtag zu verwenden 'no': Nein recommended: Empfohlen required: diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index bd78881ae..32bb1530c 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -2,9 +2,14 @@ el: simple_form: hints: + account_alias: + acct: Ορίστε το username@domain του λογαριασμού από τον οποίο θέλετε να μετακινηθείτε + account_migration: + acct: Ορίστε το username@domain του λογαριασμού στον οποίο θέλετε να μετακινηθείτε account_warning_preset: text: Μπορεις να χρησιμοποιήσεις συντακτικό ενός τουτ όπως διευθύνσεις URL, ταμπέλες και αναφορές admin_account_action: + include_statuses: Ο χρήστης θα δει ποια τουτ προκάλεσαν την προειδοποίηση ή την ενέργεια των διαχειριστών send_email_notification: Ο χρήστης θα λάβει μια εξήγηση του τι συνέβη με τον λογαριασμό του text_html: Προαιρετικό. Μπορείς να χρησιμοποιήσεις συντακτικό ενός τουτ. Μπορείς να <a href="%{path}">ορίσεις προκαθορισμένες προειδοποιήσεις</a> για να γλυτώσεις χρόνο type_html: Διάλεξε τι θα κανείς με τον <strong>%{acct}</strong> @@ -14,8 +19,10 @@ el: avatar: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px bot: Ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται context: Ένα ή περισσότερα πλαίσια στα οποία μπορεί να εφαρμόζεται αυτό το φίλτρο + current_password: Για λόγους ασφαλείας παρακαλώ γράψε τον κωδικό του τρέχοντος λογαριασμού + current_username: Για επιβεβαίωση, παρακαλώ γράψε το όνομα χρήστη του τρέχοντος λογαριασμού digest: Αποστέλλεται μόνο μετά από μακρά περίοδο αδράνειας και μόνο αν έχεις λάβει προσωπικά μηνύματα κατά την απουσία σου - discoverable_html: "Ο <a href=\"%{path}\" target=\"_blank\">κατάλογος</a> \nσου επιτρέπει να βρεις λογαριασμούς βάσει ενδιαφερόντων και δραστηριότητας. Απαιτεί τουλάχιστον %{min_followers} ακόλουθους" + discoverable: Ο κατάλογος λογαριασμών είναι ένας ακόμα τρόπος ώστε ο λογαριασμός σου να βρει μεγαλύτερο κοινό email: Θα σου σταλεί email επιβεβαίωσης fields: Μπορείς να έχεις έως 4 σημειώσεις σε μορφή πίνακα στο προφίλ σου header: PNG, GIF ή JPG. Έως %{size}. Θα περιοριστεί σε διάσταση %{dimensions}px @@ -34,16 +41,24 @@ el: setting_hide_network: Δε θα εμφανίζεται στο προφίλ σου ποιους ακολουθείς και ποιοι σε ακολουθούν setting_noindex: Επηρεάζει το δημόσιο προφίλ και τις δημοσιεύσεις σου setting_show_application: Η εφαρμογή που χρησιμοποιείς για να στέλνεις τα τουτ σου θα εμφανίζεται στις αναλυτικές λεπτομέρειες τους + setting_use_blurhash: Οι χρωματισμοί βασίζονται στα χρώματα του κρυμμένου πολυμέσου αλλά θολώνουν τις λεπτομέρειες + setting_use_pending_items: Εμφάνιση ενημερώσεων ροής μετά από κλικ αντί για αυτόματη κύλισή τους username: Το όνομα χρήστη σου θα είναι μοναδικό στο %{domain} whole_word: Όταν η λέξη ή η φράση κλειδί είναι μόνο αλφαριθμητική, θα εφαρμοστεί μόνο αν ταιριάζει με ολόκληρη τη λέξη + domain_allow: + domain: Ο τομέας αυτός θα επιτρέπεται να ανακτά δεδομένα από αυτό τον διακομιστή και τα εισερχόμενα δεδομένα θα επεξεργάζονται και θα αποθηκεύονται featured_tag: name: 'Ίσως να θες να χρησιμοποιήσεις μια από αυτές:' + form_challenge: + current_password: Μπαίνεις σε ασφαλή περιοχή imports: data: Αρχείο CSV που έχει εξαχθεί από διαφορετικό κόμβο Mastodon invite_request: text: Αυτό θα μας βοηθήσει να επιθεωρήσουμε την αίτησή σου sessions: otp: 'Βάλε τον κωδικό δυο παραγόντων (2FA) από την εφαρμογή του τηλεφώνου σου ή χρησιμοποίησε κάποιον από τους κωδικούς ανάκτησης σου:' + tag: + name: Μπορείς να αλλάξεις μόνο το πλαίσιο των χαρακτήρων, για παράδειγμα για να γίνει περισσότερο ευανάγνωστο user: chosen_languages: Όταν ενεργοποιηθεί, στη δημόσια ροή θα εμφανίζονται τουτ μόνο από τις επιλεγμένες γλώσσες labels: @@ -51,9 +66,14 @@ el: fields: name: Ταμπέλα value: Περιεχόμενο + account_alias: + acct: Διακριτικό του παλιού λογαριασμού + account_migration: + acct: Διακριτικό του νέου λογαριασμού account_warning_preset: text: Προκαθορισμένο κείμενο admin_account_action: + include_statuses: Συμπερίληψη των καταγγελλομένων τουτ στο email send_email_notification: Ενημέρωση χρήστη μέσω email text: Προσαρμοσμένη προειδοποίηση type: Ενέργεια @@ -67,7 +87,7 @@ el: autofollow: Προσκάλεσε για να ακολουθήσουν το λογαριασμό σου avatar: Αβατάρ bot: Αυτός είναι ένας αυτοματοποιημένος λογαριασμός (bot) - chosen_languages: Φίλτραρε γλώσσες + chosen_languages: Φιλτράρισμα γλωσσών confirm_new_password: Επιβεβαίωσε νέο συνθηματικό confirm_password: Επιβεβαίωσε συνθηματικό context: Πλαίσια φιλτραρίσματος @@ -93,9 +113,10 @@ el: setting_aggregate_reblogs: Ομαδοποίηση προωθήσεων στις ροές setting_auto_play_gif: Αυτόματη αναπαραγωγή των GIF setting_boost_modal: Εμφάνιση ερώτησης επιβεβαίωσης πριν την προώθηση + setting_crop_images: Περιορισμός των εικόνων σε μη-ανεπτυγμένα τουτ σε αναλογία 16x9 setting_default_language: Γλώσσα δημοσιεύσεων setting_default_privacy: Ιδιωτικότητα δημοσιεύσεων - setting_default_sensitive: Σημείωνε πάντα τα πολυμέσα ως ευαίσθητου περιεχομένου + setting_default_sensitive: Σημείωση των πολυμέσων πάντα ως ευαίσθητου περιεχομένου setting_delete_modal: Εμφάνιση ερώτησης επιβεβαίωσης πριν διαγράψεις ένα τουτ setting_display_media: Εμφάνιση πολυμέσων setting_display_media_default: Προκαθορισμένο @@ -105,10 +126,13 @@ el: setting_hide_network: Κρύψε τις διασυνδέσεις σου setting_noindex: Επέλεξε να μην συμμετέχεις στα αποτελέσματα μηχανών αναζήτησης setting_reduce_motion: Μείωση κίνησης κινουμένων στοιχείων - setting_show_application: Να αποκαλύπτεται η εφαρμογή που χρησιμοποιήθηκε για την αποστολή των τουτ + setting_show_application: Αποκάλυψη εφαρμογής που χρησιμοποιήθηκε για την αποστολή των τουτ setting_system_font_ui: Χρησιμοποίησε την προεπιλεγμένη γραμματοσειρά του συστήματος setting_theme: Θέμα ιστότοπου + setting_trends: Εμφάνιση σημερινών τάσεων setting_unfollow_modal: Εμφάνιση ερώτησης επιβεβαίωσης πριν διακόψεις την παρακολούθηση κάποιου + setting_use_blurhash: Εμφάνιση χρωματισμών για τα κρυμμένα πολυμέσα + setting_use_pending_items: Αργή λειτουργία severity: Αυστηρότητα type: Τύπος εισαγωγής username: Όνομα χρηστη @@ -120,17 +144,25 @@ el: must_be_follower: Μπλόκαρε τις ειδοποιήσεις από όσους δεν ακολουθείς must_be_following: Μπλόκαρε τις ειδοποιήσεις που προέρχονται από άτομα που δεν τα ακολουθείς must_be_following_dm: Μπλόκαρε τα προσωπικά μηνύματα από όσους δεν ακολουθείς + invite: + comment: Σχόλια invite_request: text: Γιατί θέλεις να συμμετάσχεις; notification_emails: digest: Στέλνε συνοπτικά email - favourite: Στελνε email όταν κάποιος σημειώνει ως αγαπημένη τη δημοσίευσή σου - follow: Στελνε email όταν κάποιος σε ακολουθεί - follow_request: Στέλνε email όταν κάποιος ζητάει να σε ακολουθήσει - mention: Στέλνε email όταν κάποιος σε αναφέρει + favourite: Αποστολή email όταν κάποιος σημειώνει ως αγαπημένη τη δημοσίευσή σου + follow: Αποστολή email όταν κάποιος σε ακολουθεί + follow_request: Αποστολή email όταν κάποιος ζητάει να σε ακολουθήσει + mention: Αποστολή email όταν κάποιος σε αναφέρει pending_account: Αποστολή email όταν υπάρχει νέος λογαριασμός για επιθεώρηση - reblog: Στέλνε email όταν κάποιος προωθεί τη δημοσίευση σου + reblog: Αποστολή email όταν κάποιος προωθεί τη δημοσίευση σου report: Αποστολή email όταν υποβάλλεται νέα καταγγελία + trending_tag: Αποστολή email όταν μια μη-εγκεκριμένη ταμπέλα γίνεται δημοφιλής + tag: + listable: Εμφάνιση αυτής της ταμπέλας στο δημόσιο κατάλογο + name: Ταμπέλα + trendable: Εμφάνιση της ταμπέλας στις τάσεις + usable: Χρήση της ταμπέλας σε τουτ 'no': Όχι recommended: Προτείνεται required: diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index e5e12c05a..8386c8cf1 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -2,9 +2,14 @@ en: simple_form: hints: + account_alias: + acct: Specify the username@domain of the account you want to move from + account_migration: + acct: Specify the username@domain of the account you want to move to account_warning_preset: text: You can use toot syntax, such as URLs, hashtags and mentions admin_account_action: + include_statuses: The user will see which toots have caused the moderation action or warning send_email_notification: The user will receive an explanation of what happened with their account text_html: Optional. You can use toot syntax. You can <a href="%{path}">add warning presets</a> to save time type_html: Choose what to do with <strong>%{acct}</strong> @@ -14,8 +19,10 @@ en: avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px bot: This account mainly performs automated actions and might not be monitored context: One or multiple contexts where the filter should apply + current_password: For security purposes please enter the password of the current account + current_username: To confirm, please enter the username of the current account digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence - discoverable_html: The <a href="%{path}" target="_blank">directory</a> lets people find accounts based on interests and activity. Requires at least %{min_followers} followers + discoverable: The profile directory is another way by which your account can reach a wider audience email: You will be sent a confirmation e-mail fields: You can have up to 4 items displayed as a table on your profile header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px @@ -39,16 +46,24 @@ en: setting_noindex: Affects your public profile and status pages setting_show_application: The application you use to toot will be displayed in the detailed view of your toots setting_skin: Reskins the selected Mastodon flavour + setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details + setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed username: Your username will be unique on %{domain} whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word + domain_allow: + domain: This domain will be able to fetch data from this server and incoming data from it will be processed and stored featured_tag: name: 'You might want to use one of these:' + form_challenge: + current_password: You are entering a secure area imports: data: CSV file exported from another Mastodon server invite_request: text: This will help us review your application sessions: otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' + tag: + name: You can only change the casing of the letters, for example, to make it more readable user: chosen_languages: When checked, only toots in selected languages will be displayed in public timelines labels: @@ -56,14 +71,19 @@ en: fields: name: Label value: Content + account_alias: + acct: Handle of the old account + account_migration: + acct: Handle of the new account account_warning_preset: text: Preset text admin_account_action: + include_statuses: Include reported toots in the e-mail send_email_notification: Notify the user per e-mail text: Custom warning type: Action types: - disable: Disable + disable: Disable login none: Do nothing silence: Silence suspend: Suspend and irreversibly delete account data @@ -98,6 +118,7 @@ en: setting_aggregate_reblogs: Group boosts in timelines setting_auto_play_gif: Auto-play animated GIFs setting_boost_modal: Show confirmation dialog before boosting + setting_crop_images: Crop images in non-expanded toots to 16x9 setting_default_content_type: Default format for toots setting_default_content_type_html: HTML setting_default_content_type_markdown: Markdown @@ -118,8 +139,13 @@ en: setting_reduce_motion: Reduce motion in animations setting_show_application: Disclose application used to send toots setting_skin: Skin + setting_system_emoji_font: Use system's default font for emojis (applies to Glitch flavour only) setting_system_font_ui: Use system's default font + setting_theme: Site theme + setting_trends: Show today's trends setting_unfollow_modal: Show confirmation dialog before unfollowing someone + setting_use_blurhash: Show colorful gradients for hidden media + setting_use_pending_items: Slow mode severity: Severity type: Import type username: Username @@ -131,17 +157,25 @@ en: must_be_follower: Block notifications from non-followers must_be_following: Block notifications from people you don't follow must_be_following_dm: Block direct messages from people you don't follow + invite: + comment: Comment invite_request: text: Why do you want to join? notification_emails: digest: Send digest e-mails - favourite: Send e-mail when someone favourites your status - follow: Send e-mail when someone follows you - follow_request: Send e-mail when someone requests to follow you - mention: Send e-mail when someone mentions you - pending_account: Send e-mail when a new account needs review - reblog: Send e-mail when someone boosts your status - report: Send e-mail when a new report is submitted + favourite: Someone favourited your status + follow: Someone followed you + follow_request: Someone requested to follow you + mention: Someone mentioned you + pending_account: New account needs review + reblog: Someone boosted your status + report: New report is submitted + trending_tag: An unreviewed hashtag is trending + tag: + listable: Allow this hashtag to appear in searches and on the profile directory + name: Hashtag + trendable: Allow this hashtag to appear under trends + usable: Allow toots to use this hashtag 'no': 'No' recommended: Recommended required: diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index 1b63b27a8..c8239b230 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -15,7 +15,6 @@ eo: bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto - discoverable_html: La <a href="%{path}" target="_blank">profilujo</a> permesas al homoj trovi kontojn laŭ interesoj kaj aktiveco. Postulas almenaŭ %{min_followers} sekvantojn email: Vi ricevos konfirman retmesaĝon fields: Vi povas havi ĝis 4 tabelajn elementojn en via profilo header: Formato PNG, GIF aŭ JPG. Ĝis %{size}. Estos malgrandigita al %{dimensions}px @@ -51,6 +50,10 @@ eo: fields: name: Etikedo value: Enhavo + account_alias: + acct: Tenilo de la malnovan konton + account_migration: + acct: Tenilo de la novan konton account_warning_preset: text: Antaŭagordita teksto admin_account_action: @@ -108,7 +111,9 @@ eo: setting_show_application: Publikigi la aplikaĵon uzatan por sendi mesaĝojn setting_system_font_ui: Uzi la dekomencan tiparon de la sistemo setting_theme: Reteja etoso + setting_trends: Montri hodiaŭajn furoraĵojn setting_unfollow_modal: Montri fenestron por konfirmi antaŭ ol ĉesi sekvi iun + setting_use_pending_items: Malrapida reĝimo severity: Graveco type: Importa tipo username: Uzantnomo @@ -120,6 +125,8 @@ eo: must_be_follower: Bloki sciigojn de nesekvantoj must_be_following: Bloki sciigojn de homoj, kiujn vi ne sekvas must_be_following_dm: Bloki rektajn mesaĝojn de homoj, kiujn vi ne sekvas + invite: + comment: Komento invite_request: text: Kial vi volas aliĝi? notification_emails: @@ -131,6 +138,11 @@ eo: pending_account: Sendi retmesaĝon kiam nova konto bezonas kontrolon reblog: Sendi retmesaĝon kiam iu diskonigas vian mesaĝon report: Sendi retmesaĝon kiam nova signalo estas sendita + trending_tag: Sendi retpoŝtmesaĝon kiam nekontrolita kradvorto furoras + tag: + name: Kradvorto + trendable: Permesi al ĉi tiu kradvorto aperi en furoraĵoj + usable: Permesi tootojn uzi ĉiun tiun haketon 'no': Ne recommended: Rekomendita required: diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml new file mode 100644 index 000000000..c62ded28b --- /dev/null +++ b/config/locales/simple_form.es-AR.yml @@ -0,0 +1,171 @@ +--- +es-AR: + simple_form: + hints: + account_alias: + acct: Especificá el nombredeusuario@dominio de la cuenta desde la que querés mudarte + account_migration: + acct: Especificá el nombredeusuario@dominio de la cuenta a la que querés mudarte + account_warning_preset: + text: Podés usar sintaxis de toots, como direcciones web, etiquetas y menciones + admin_account_action: + include_statuses: El usuario verá qué toots causaron la acción de moderación o advertencia + send_email_notification: El usuario recibirá una explicación de lo que sucedió con su cuenta + text_html: Opcional. Podés usar sintaxis de toots. Podés <a href="%{path}">agregar preajustes de advertencia</a> para ahorrar tiempo. + type_html: Elegí qué hacer con <strong>%{acct}</strong> + warning_preset_id: Opcional. Todavía podés agregar texto personalizado al final del preajuste + defaults: + autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente + avatar: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles.' + bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada + context: Uno o múltiples contextos en los que debe aplicarse el filtro + current_password: Por razones de seguridad, por favor, ingresá la contraseña de la cuenta actual + current_username: Para confirmar, por favor, ingresá el nombre de usuario de la cuenta actual + digest: Sólo enviado tras un largo periodo de inactividad, y sólo si has recibiste mensajes personales en tu ausencia + discoverable: El directorio del perfil es otra forma en la que tu cuenta puede llegar a un público más amplio + email: Se te enviará un correo electrónico de confirmación + fields: Podés tener hasta 4 elementos mostrados en una tabla en tu perfil + header: 'PNG, GIF o JPG. Máximo: %{size}. Será subescalado a %{dimensions} píxeles.' + inbox_url: Copiá la dirección web desde la página principal del relé que querés usar + irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado después + locale: El idioma de la interface de usuario, correos electrónicos y notificaciones PuSH + locked: Requiere que manualmente aprobés seguidores + password: Usá al menos 8 caracteres + phrase: Se aplicará sin importar las mayúsculas o las advertencias de contenido de un toot + scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionás el alcance de nivel más alto, no necesitás seleccionar las individuales. + setting_aggregate_reblogs: No mostrar nuevos retoots de los toots que fueron recientemente retooteados (sólo afecta a los retoots recibidos recientemente) + setting_default_sensitive: El contenido de medios sensibles está oculto predeterminadamente y puede ser mostrado con un clic + setting_display_media_default: Ocultar medios que están marcados como sensibles + setting_display_media_hide_all: Siempre ocultar todos los medios + setting_display_media_show_all: Siempre mostrar todos los medios que están marcados como sensibles + setting_hide_network: A quiénes seguís y tus seguidores no serán mostrados en tu perfil + setting_noindex: Afecta a tu perfil público y páginas de estado + setting_show_application: La aplicación que usás para tootear se mostrará en la vista detallada de tus toots + setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles + setting_use_pending_items: Ocultar actualizaciones de la línea temporal detrás de un clic en lugar de desplazar automáticamente el flujo + username: Tu nombre de usuario será único en %{domain} + whole_word: Cuando la palabra clave o frase es sólo alfanumérica, sólo será aplicado si coincide con toda la palabra + domain_allow: + domain: Este dominio podrá recolectar datos de este servidor, y los datos entrantes serán procesados y archivados + featured_tag: + name: 'Puede que quieras usar una de estas:' + form_challenge: + current_password: Estás ingresando en un área segura + imports: + data: Archivo CSV exportado desde otro servidor de Mastodon + invite_request: + text: Esto nos ayudará a revisar tu aplicación + sessions: + otp: 'Ingresá el código de autenticación de dos factores generado por la aplicación de tu dispositivo móvil, o usá uno de tus códigos de recuperación:' + tag: + name: Sólo podés cambiar la capitalización de las letras, por ejemplo, para que sea más legible + user: + chosen_languages: Cuando esté marcado, sólo se mostrarán los toots en los idiomas seleccionados en las líneas temporales públicas + labels: + account: + fields: + name: Nombre de campo + value: Valor de campo + account_alias: + acct: Alias de la cuenta antigua + account_migration: + acct: Alias de la cuenta nueva + account_warning_preset: + text: Texto predefinido + admin_account_action: + include_statuses: Incluir en el correo electrónico a los toots denunciados + send_email_notification: Notificar al usuario por correo electrónico + text: Advertencia personalizada + type: Acción + types: + disable: Deshabilitar inicio de sesión + none: No hacer nada + silence: Silenciar + suspend: Suspender y eliminar de forma irreversible los datos de la cuenta + warning_preset_id: Usar un texto predeterminado + defaults: + autofollow: Invitar para seguir tu cuenta + avatar: Avatar + bot: Esta es una cuenta bot + chosen_languages: Filtrar idiomas + confirm_new_password: Confirmar nueva contraseña + confirm_password: Confirmar contraseña + context: Filtrar contextos + current_password: Contraseña actual + data: Datos + discoverable: Listar esta cuenta en el directorio + display_name: Nombre para mostrar + email: Dirección de correo electrónico + expires_in: Vence después de + fields: Metadatos de perfil + header: Cabecera + inbox_url: Dirección web de la bandeja de entrada del relé + irreversible: Dejar en lugar de ocultar + locale: Idioma de la interface + locked: Hacer privada esta cuenta + max_uses: Número máximo de usos + new_password: Nueva contraseña + note: Biografía + otp_attempt: Código de dos factores + password: Contraseña + phrase: Palabra clave o frase + setting_advanced_layout: Habilitar interface web avanzada + setting_aggregate_reblogs: Agrupar retoots en las líneas temporales + setting_auto_play_gif: Reproducir automáticamente los GIFs animados + setting_boost_modal: Mostrar diálogo de confirmación antes de retootear + setting_crop_images: Recortar imágenes en toots no expandidos a 16x9 + setting_default_language: Idioma de tus toots + setting_default_privacy: Privacidad de toots + setting_default_sensitive: Siempre marcar medios como sensibles + setting_delete_modal: Mostrar diálogo de confirmación antes de eliminar un toot + setting_display_media: Visualización de medios + setting_display_media_default: Predeterminada + setting_display_media_hide_all: Ocultar todo + setting_display_media_show_all: Mostrar todo + setting_expand_spoilers: Siempre expandir los toots marcados con advertencias de contenido + setting_hide_network: Ocultar tu red + setting_noindex: Excluirse del indexado de motores de búsqueda + setting_reduce_motion: Reducir el movimiento de las animaciones + setting_show_application: Mostrar aplicación usada para tootear + setting_system_font_ui: Utilizar la tipografía predeterminada del sistema + setting_theme: Tema del sitio + setting_trends: Mostrar las tendencias de hoy + setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a alguien + setting_use_blurhash: Mostrar gradientes coloridos para medios ocultos + setting_use_pending_items: Modo lento + severity: Severidad + type: Tipo de importación + username: Nombre de usuario + username_or_email: Nombre de usuario o correo electrónico + whole_word: Palabra entera + featured_tag: + name: Etiqueta + interactions: + must_be_follower: Bloquear notificaciones de cuentas que no te siguen + must_be_following: Bloquear notificaciones de cuentas que no seguís + must_be_following_dm: Bloquear mensajes directos de cuentas que no seguís + invite: + comment: Comentar + invite_request: + text: "¿Por qué querés unirte?" + notification_emails: + digest: Enviar correos electrónicos compilatorios + favourite: Enviar correo electrónico cuando una cuenta marca como favorito tu estado + follow: Enviar correo electrónico cuando una cuenta te siga + follow_request: Enviar correo electrónico cuando una cuenta solicita seguirte + mention: Enviar correo electrónico cuando una cuenta te mencione + pending_account: Enviar correo electrónico cuando una nueva cuenta necesita revisión + reblog: Enviar correo electrónico cuando una cuenta retootee tu estado + report: Enviar correo electrónico cuando se envíe un nuevo informe + trending_tag: Enviar correo electrónico cuando una etiqueta no revisada esté en tendencia + tag: + listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio de perfiles + name: Etiqueta + trendable: Permitir que esta etiqueta aparezca bajo tendencias + usable: Permitir a los toots usar esta etiqueta + 'no': 'No' + recommended: Opción recomendada + required: + mark: "*" + text: obligatorio + 'yes': Sí diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index 7b871e8ba..837ca8101 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -2,16 +2,27 @@ es: simple_form: hints: + account_alias: + acct: Especifique el nombre de usuario@dominio de la cuenta desde la cual se desea migrar + account_migration: + acct: Especifique el nombre de usuario@dominio de la cuenta a la cual se desea migrar account_warning_preset: text: Puede usar sintaxis de toots, como URLs, hashtags y menciones admin_account_action: + include_statuses: El usuario verá qué toots han causado la acción de moderación o advertencia send_email_notification: El usuario recibirá una explicación de lo que sucedió con respecto a su cuenta + text_html: Opcional. Puede usar sintaxis de toots. Puede añadir <a href="%{path}">configuraciones predefinidas de advertencia</a> para ahorrar tiempo + type_html: Elige qué hacer con <strong>%{acct}</strong> + warning_preset_id: Opcional. Aún puede añadir texto personalizado al final de la configuración predefinida defaults: autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente avatar: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada context: Uno o múltiples contextos en los que debe aplicarse el filtro + current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual + current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia + discoverable: El directorio del perfil es otra forma en la que su cuenta puede llegar a un público más amplio email: Se le enviará un correo de confirmación fields: Puedes tener hasta 4 elementos mostrándose como una tabla en tu perfil header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px @@ -22,16 +33,32 @@ es: password: Utilice al menos 8 caracteres phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. + setting_aggregate_reblogs: No mostrar nuevos retoots para los toots que han sido recientemente retooteados (sólo afecta a los retoots recibidos recientemente) + setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un click + setting_display_media_default: Ocultar contenido multimedia marcado como sensible + setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia + setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible setting_hide_network: A quién sigues y quién te sigue no será mostrado en tu perfil setting_noindex: Afecta a tu perfil público y páginas de estado setting_show_application: La aplicación que utiliza usted para publicar toots se mostrará en la vista detallada de sus toots + setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles + setting_use_pending_items: Ocultar nuevos estados detrás de un clic en lugar de desplazar automáticamente el feed + username: Tu nombre de usuario será único en %{domain} whole_word: Cuando la palabra clave o frase es solo alfanumérica, solo será aplicado si concuerda con toda la palabra + domain_allow: + domain: Este dominio podrá obtener datos de este servidor y los datos entrantes serán procesados y archivados + featured_tag: + name: 'Puede que quieras usar uno de estos:' + form_challenge: + current_password: Estás entrando en un área segura imports: data: Archivo CSV exportado desde otra instancia de Mastodon invite_request: text: Esto nos ayudará a revisar su aplicación sessions: otp: 'Introduce el código de autenticación de dos factores geberado por tu aplicación de teléfono o usa uno de tus códigos de recuperación:' + tag: + name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible user: chosen_languages: Cuando se marca, solo se mostrarán los toots en los idiomas seleccionados en los timelines públicos labels: @@ -39,15 +66,26 @@ es: fields: name: Etiqueta value: Contenido + account_alias: + acct: Maneja la cuenta antigua + account_migration: + acct: Maneja la cuenta nueva + account_warning_preset: + text: Texto predefinido admin_account_action: + include_statuses: Incluir en el correo electrónico a los toots denunciados send_email_notification: Notificar al usuario por correo electrónico text: Aviso personalizado type: Acción types: disable: Deshabilitar + none: No hacer nada silence: Silenciar + suspend: Suspender y eliminar de forma irreversible la información de la cuenta + warning_preset_id: Usar un aviso predeterminado defaults: autofollow: Invitar a seguir tu cuenta + avatar: Avatar bot: Esta es una cuenta bot chosen_languages: Filtrar idiomas confirm_new_password: Confirmar nueva contraseña @@ -55,6 +93,7 @@ es: context: Filtrar contextos current_password: Contraseña actual data: Información + discoverable: Listar esta cuenta en el directorio display_name: Nombre para mostrar email: Dirección de correo electrónico expires_in: Expirar tras @@ -70,28 +109,43 @@ es: otp_attempt: Código de dos factores password: Contraseña phrase: Palabra clave o frase + setting_advanced_layout: Habilitar interfaz web avanzada + setting_aggregate_reblogs: Agrupar retoots en las líneas de tiempo setting_auto_play_gif: Reproducir automáticamente los GIFs animados setting_boost_modal: Mostrar ventana de confirmación antes de un Retoot + setting_crop_images: Recortar a 16x9 las imágenes de los toots no expandidos setting_default_language: Idioma de publicación setting_default_privacy: Privacidad de publicaciones setting_default_sensitive: Marcar siempre imágenes como sensibles setting_delete_modal: Mostrar diálogo de confirmación antes de borrar un toot + setting_display_media: Visualización multimedia + setting_display_media_default: Por defecto + setting_display_media_hide_all: Ocultar todo + setting_display_media_show_all: Mostrar todo + setting_expand_spoilers: Siempre expandir los toots marcados con advertencias de contenido setting_hide_network: Ocultar tu red setting_noindex: Excluirse del indexado de motores de búsqueda setting_reduce_motion: Reducir el movimiento de las animaciones setting_show_application: Mostrar aplicación usada para publicar toots setting_system_font_ui: Utilizar la tipografía por defecto del sistema setting_theme: Tema del sitio + setting_trends: Mostrar las tendencias de hoy setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a alguien + setting_use_blurhash: Mostrar gradientes coloridos para contenido multimedia oculto + setting_use_pending_items: Modo lento severity: Severidad type: Importar tipo username: Nombre de usuario username_or_email: Usuario o Email whole_word: Toda la palabra + featured_tag: + name: Etiqueta interactions: must_be_follower: Bloquear notificaciones de personas que no te siguen must_be_following: Bloquear notificaciones de personas que no sigues must_be_following_dm: Bloquear mensajes directos de la gente que no sigues + invite: + comment: Comentar invite_request: text: "¿Por qué quiere unirse usted?" notification_emails: @@ -103,8 +157,15 @@ es: pending_account: Enviar correo electrónico cuando una nueva cuenta necesita revisión reblog: Enviar correo electrónico cuando alguien comparta su publicación report: Enviar un correo cuando se envía un nuevo informe + trending_tag: Enviar correo electrónico cuando una etiqueta no revisada está de tendencia + tag: + listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio del perfil + name: Etiqueta + trendable: Permitir que esta etiqueta aparezca bajo tendencias + usable: Permitir a los toots usar esta etiqueta 'no': 'No' recommended: Recomendado required: + mark: "*" text: necesario 'yes': Sí diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml new file mode 100644 index 000000000..0b8c2c22b --- /dev/null +++ b/config/locales/simple_form.et.yml @@ -0,0 +1,171 @@ +--- +et: + simple_form: + hints: + account_alias: + acct: Sisesta selle konto kasutajanimi@domeen, millelt soovite kolida + account_migration: + acct: Sisesta selle konto kasutajanimi@domeen, millele soovite kolida + account_warning_preset: + text: Te saate kasutada tuututuse süntaksi, näiteks URLe, silte ja mainimisi + admin_account_action: + include_statuses: Kasutaja näeb, millised tuututused on põhjustanud selle moderaatori tegevuse või hoiatuse + send_email_notification: Konto omanik saab selgituse selle kohta, mis juhtus nende kontoga + text_html: Valikuline. Te saate kasutada tuututuse süntaksi. Te saate <a href="%{path}">lisada hoiatuste eelseadistusi</a> aega säästmiseks + type_html: Vali, mida teha kasutajaga <strong>%{acct}</strong> + warning_preset_id: Valikuline. Te saate ikka lisada mis tahes teksti eelseadistuse lõppu + defaults: + autofollow: Inimesed, kes loovad konto selle kutse läbi, automaatselt jälgivad Teid + avatar: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini + bot: See konto teeb enamjaolt automatiseeritud tegevusi ja ei pruugi olla järelvalve all + context: Üks või mitu konteksti, mille vastu see filter peaks rakenduma + current_password: Turvalisuse huvides palun sisestage praeguse konto salasõna + current_username: Kinnitamiseks palun sisestage oma konto kasutajanimi + digest: Saadetakse ainult pärast pikka perioodi tegevusetust ja ainult siis, kui Teile on saadetud privaatseid sõnumeid + discoverable: Profiilikataloog on veel üks viis, kuidas Teie konto saab jõuda laiema publikuni + email: Teile saadetakse kinnituskiri e-posti teel + fields: Te saate oma profiilil tabelina kuvada kuni 4 asja + header: PNG, GIF või JPG. Kõige rohkem %{size}. Vähendatakse %{dimensions} pikslini + inbox_url: Kopeerige soovitud relee avalehe URL + irreversible: Filtreeritud tuututused kaovad taastamatult, isegi kui filter on hiljem eemaldatud + locale: Kasutajaliidese, e-kirjade ja push-teadete keel + locked: Nõuab käsitsi jälgijate kinnitamist + password: Sisestage vähemalt 8 tähemärki + phrase: Kattub olenemata tuututuse teksti suurtähtedest või sisuhoiatusest + scopes: Milliseid API-sid see rakendus tohib kasutada. Kui Te valite kõrgeima taseme, ei pea Te valima individuaalseid. + setting_aggregate_reblogs: Ära näita uusi upitusi tuututustele, mis on just hiljuti upitatud (ainult kehtib uutele upitusele) + setting_default_sensitive: Tundlik meedia on vaikimisi peidetud ning seda saab avada sellele klikkides + setting_display_media_default: Peida tundlikuks märgitud meedia + setting_display_media_hide_all: Alati peida kõik meedia + setting_display_media_show_all: Alati näita tundlikuks märgistatud meedia + setting_hide_network: Keda Te jälgite ja kes jägib Teid ei kuvata Teie profiilil + setting_noindex: Mõjutab Teie avalikku profiili ja staatuse lehekülgi + setting_show_application: Rakendus, mida kasutate tuututamiseks, kuvatakse tuututuste üksikasjade vaates + setting_use_blurhash: Värvid põhinevad peidetud visuaalidel, kuid hägustavad igasuguseid detaile + setting_use_pending_items: Peida ajajoone uuendused kliki taga selle asemel, et automaatselt kerida voogu + username: Teie kasutajanimi on %{domain}-il unikaalne + whole_word: Kui võtmesõna või fraas on ainult tähtnumbriline, rakendub see ainult siis, kui see kattub terve sõnaga + domain_allow: + domain: See domeen saab tõmmata andmeid sellelt serverilt ning sissetulevad andmed sellelt domeenilt töödeldakse ning salvestatakse + featured_tag: + name: 'Äkki soovite kasutada mõnda neist:' + form_challenge: + current_password: Te sisenete turvalisele alale + imports: + data: CSV fail eksporditi teisest Mastodoni serverist + invite_request: + text: See aitab meil üle vaadata Teie taotlust + sessions: + otp: 'Sisesta kahesammulise autentimise kood loodud Teie mobiilirakenduse poolt või sisesta mõni taastuskood:' + tag: + name: Te saate ainult muuta tähtede tõstetust, näiteks selleks, et muuta seda rohkem loetavaks + user: + chosen_languages: Kui valitud, ainult valitud keeltes tuututused näidatakse avalikes ajajoontes + labels: + account: + fields: + name: Nimetus + value: Sisu + account_alias: + acct: Vana konto täisnimi + account_migration: + acct: Uue konto täisnimi + account_warning_preset: + text: Eelseadistatud tekst + admin_account_action: + include_statuses: Kaasa teavitatud tuututused selles e-kirjas + send_email_notification: Teavita kasutajat e-posti teel + text: Hoiatus + type: Tegevus + types: + disable: Keela + none: Ära tee midagi + silence: Vaigista + suspend: Peata ja taastamatult kustuta konto andmed + warning_preset_id: Kasuta hoiatuse eelseadistust + defaults: + autofollow: Kutsu oma kontot jälgima + avatar: Profiilipilt + bot: See konto on robot + chosen_languages: Filtreeri keeli + confirm_new_password: Kinnita uus salasõna + confirm_password: Kinnita salasõna + context: Filtreeri kontekste + current_password: Kehtiv salasõna + data: Andmed + discoverable: Lisage see konto kataloogi + display_name: Kuvanimi + email: E-posti aadress + expires_in: Aegu pärast + fields: Profiili metaandmed + header: Päis + inbox_url: Relee sisendkausta URL + irreversible: Kustuta selle asemel, et peita + locale: Kasutajaliidese keel + locked: Lukusta konto + max_uses: Maksimum kasutajate arv + new_password: Uus salasõna + note: Elulugu + otp_attempt: Kahesammulise autentimise kood + password: Salasõna + phrase: Võtmesõna või fraas + setting_advanced_layout: Aktiveeri arenenud veebiliides + setting_aggregate_reblogs: Grupita upitused ajajoontes + setting_auto_play_gif: Mängi GIF-e automaatselt + setting_boost_modal: Näita kinnitusdialoogi enne upitamist + setting_crop_images: Kärbi suurendamata tuututuste pildid resolutsiooni 16x9 + setting_default_language: Postituse keel + setting_default_privacy: Postituse privaatsus + setting_default_sensitive: Alati märgista meedia tundlikuks + setting_delete_modal: Näita kinnitusdialoogi enne tuututuse kustutamist + setting_display_media: Meedia kuvarežiim + setting_display_media_default: Vaikimisi + setting_display_media_hide_all: Peida kõik + setting_display_media_show_all: Kuva kõik + setting_expand_spoilers: Alati laienda sisuhoiatustega tuututused + setting_hide_network: Peida oma võrk + setting_noindex: Keeldu otsingumootorite indekseerimistest + setting_reduce_motion: Vähenda liikumist animatsioonides + setting_show_application: Avalikusta tuututuste saatmisel kasutatud rakendused + setting_system_font_ui: Kasuta süsteemi vaikefonti + setting_theme: Saidi teema + setting_trends: Näita tänaseid trende + setting_unfollow_modal: Näita kinnitusdialoogi enne jälgimise eemaldamist + setting_use_blurhash: Näita peidetud meedia asemel värvilist pilti + setting_use_pending_items: Aeglane režiim + severity: Tõsidus + type: Impordi tüüp + username: Kasutajanimi + username_or_email: Kasutajanimi või e-post + whole_word: Terve sõna + featured_tag: + name: Silt + interactions: + must_be_follower: Keela teavitused mittejälgijatelt + must_be_following: Keela teavitused kasutajatelt, keda sa ei jälgi + must_be_following_dm: Keela privaatsõnumid kasutajatelt, keda sa ei jälgi + invite: + comment: Kommenteerima + invite_request: + text: Miks Te soovite liituda? + notification_emails: + digest: Saada ülevaatlike e-kirju + favourite: Saada e-kiri, kui keegi lisab teie staatuse lemmikuks + follow: Saada e-kiri, kui keegi alustab Teie jälgimist + follow_request: Saada e-kiri, kui keegi soovib Teid jälgida + mention: Saada e-kiri, kui keegi mainib Teid + pending_account: Saada e-kiri, kui uus konto vajab ülevaatlust + reblog: Saada e-kiri, kui keegi upitab Teie staatust + report: Saada e-kiri, kui esitatud on uus teavitus + trending_tag: Saada e-kiri, kui ülevaatamata silt trendib + tag: + listable: Luba sellel sildil ilmuda profiilide kataloogis + name: Silt + trendable: Luba sellel sildil trendida + usable: Luba tuututustel seda silti kasutada + 'no': Ei + recommended: Soovituslik + required: + mark: "*" + text: kohustuslik + 'yes': Jah diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml index acd5fd6d9..1f34adb05 100644 --- a/config/locales/simple_form.eu.yml +++ b/config/locales/simple_form.eu.yml @@ -2,9 +2,14 @@ eu: simple_form: hints: + account_alias: + acct: Zehaztu migrazioaren jatorri den kontuaren erabiltzailea@domeinua + account_migration: + acct: Zehaztu migrazioaren xede den kontuaren erabiltzaile@domeinua account_warning_preset: text: Toot sintaxia erabili dezakezu, URLak, traolak eta aipamenak admin_account_action: + include_statuses: Erabiltzaileak moderazio ekintza edo abisu bat eragin duten toot-ak ikusi ahal izango ditu send_email_notification: Erabiltzaileak bere kontuarekin gertatutakoaren azalpen bat jasoko du text_html: Aukerakoa. Toot sintaxia erabili dezakezu. <a href="%{path}">Abisu aurre-ezarpenak</a> gehitu ditzakezu denbora aurrezteko type_html: Erabaki zer egin <strong>%{acct}</strong> kontuarekin @@ -14,8 +19,10 @@ eu: avatar: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px neurrira eskalatuko da bot: Kontu honek nagusiki automatizatutako ekintzak burutzen ditu eta agian ez du inork monitorizatzen context: Iragazkia aplikatzeko testuinguru bat edo batzuk - digest: Soilik jarduerarik gabeko epe luze bat eta gero, eta soilik ez zeudela mezu pertsonalen bat jaso baduzu - discoverable_html: <a href="%{path}" target="_blank">Direktorioa</a>k Jendea interesen eta jardueraren arabera aurkitzea ahalbidetzen du. Gutxienez %{min_followers} jarraitzaile behar dira bertan agertzeko + current_password: Segurtasunagatik sartu uneko kontuaren pasahitza + current_username: Berresteko sartu uneko kontuaren erabiltzaile-izena + digest: Jarduerarik gabeko epe luze bat eta gero mezu pertsonalen bat jaso baduzu, besterik ez + discoverable: Profilen direktorioa zure kontua jende gehiagok irakurtzeko modu bat da email: Baieztapen e-mail bat bidaliko zaizu fields: 4 elementu bistaratu ditzakezu taula batean zure profilean header: PNG, GIF edo JPG. Gehienez %{size}. %{dimensions}px eskalara txikituko da @@ -26,7 +33,7 @@ eu: password: Erabili 8 karaktere gutxienez phrase: Bat egingo du Maiuskula/minuskula kontuan hartu gabe eta edukiaren abisua kontuan hartu gabe scopes: Zeintzuk API atzitu ditzakeen aplikazioak. Goi mailako arloa aukeratzen baduzu, ez dituzu azpikoak aukeratu behar. - setting_aggregate_reblogs: Ez erakutsi buktzada berriak berriki bultzada jaso duten tootentzat (berriki jasotako bultzadei eragiten die besterik ez) + setting_aggregate_reblogs: Ez erakutsi bultzada berriak berriki bultzada jaso duten toot-entzat (berriki jasotako bultzadei eragiten die bakarrik) setting_default_sensitive: Multimedia hunkigarria lehenetsita ezkutatzen da, eta sakatuz ikusi daiteke setting_display_media_default: Ezkutatu hunkigarri gisa markatutako multimedia setting_display_media_hide_all: Ezkutatu multimedia guztia beti @@ -34,16 +41,24 @@ eu: setting_hide_network: Nor jarraitzen duzun eta nork jarraitzen zaituen ez da bistaratuko zure profilean setting_noindex: Zure profil publiko eta Toot-en orrietan eragina du setting_show_application: Tootak bidaltzeko erabiltzen duzun aplikazioa zure tooten ikuspegi xehetsuan bistaratuko da + setting_use_blurhash: Gradienteak ezkutatutakoaren koloreetan oinarritzen dira, baina xehetasunak ezkutatzen dituzte + setting_use_pending_items: Ezkutatu denbora-lerroko eguneraketak klik baten atzean jarioa automatikoki korritu ordez username: Zure erabiltzaile-izena bakana izango da %{domain} domeinuan whole_word: Hitz eta esaldi gakoa alfanumerikoa denean, hitz osoarekin bat datorrenean besterik ez da aplikatuko + domain_allow: + domain: Domeinu honek zerbitzari honetatik datuak hartu ahal izango ditu eta bertatik jasotako informazioa prozesatu eta gordeko da featured_tag: name: 'Hauetakoren bat erabili zenezake:' + form_challenge: + current_password: Zonalde seguruan sartzen ari zara imports: data: Beste Mastodon zerbitzari batetik esportatutako CSV fitxategia invite_request: text: Honek zure eskaera berrikustean lagunduko digu sessions: otp: 'Sartu zure telefonoko aplikazioak sortutako bi faktoreetako kodea, edo erabili zure berreskuratze kodeetako bat:' + tag: + name: Letrak maiuskula/minuskulara aldatu ditzakezu besterik ez, adibidez irakurterrazago egiteko user: chosen_languages: Ezer markatzekotan, hautatutako hizkuntzetan dauden toot-ak besterik ez dira erakutsiko labels: @@ -51,9 +66,14 @@ eu: fields: name: Etiketa value: Edukia + account_alias: + acct: Kontu zaharraren helbidea + account_migration: + acct: Kontu berriaren helbidea account_warning_preset: text: Aurrez ezarritako testua admin_account_action: + include_statuses: Txertatu salatutako toot-ak e-mailean send_email_notification: Jakinarazi erabiltzaileari e-mail bidez text: Abisu pertsonalizatua type: Ekintza @@ -93,6 +113,7 @@ eu: setting_aggregate_reblogs: Taldekatu bultzadak denbora-lerroetan setting_auto_play_gif: Erreproduzitu GIF animatuak automatikoki setting_boost_modal: Erakutsi baieztapen elkarrizketa-koadroa bultzada eman aurretik + setting_crop_images: Moztu irudiak hedatu gabeko toot-etan 16x9 proportzioan setting_default_language: Argitalpenen hizkuntza setting_default_privacy: Mezuen pribatutasuna setting_default_sensitive: Beti markatu edukiak hunkigarri gisa @@ -108,7 +129,10 @@ eu: setting_show_application: Utzi agerian tootak bidaltzeko erabilitako aplikazioa setting_system_font_ui: Erabili sistemako tipografia lehenetsia setting_theme: Gunearen gaia + setting_trends: Erakutsi gaurko joerak setting_unfollow_modal: Erakutsi baieztapen elkarrizketa-koadroa inor jarraitzeari utzi aurretik + setting_use_blurhash: Erakutsi gradiente koloretsuak ezkutatutako multimediaren ordez + setting_use_pending_items: Modu geldoa severity: Larritasuna type: Inportazio mota username: Erabiltzaile-izena @@ -118,8 +142,10 @@ eu: name: Traola interactions: must_be_follower: Blokeatu jarraitzaile ez direnen jakinarazpenak - must_be_following: Blokeatu zuk jarraitzen ez dituzunen jakinarazpenak - must_be_following_dm: Blokeatu zuk jarraitzen ez dituzunen mezu zuzenak + must_be_following: Blokeatu zuk jarraitzen ez dituzu horien jakinarazpenak + must_be_following_dm: Blokeatu zuk jarraitzen ez dituzun horien mezu zuzenak + invite: + comment: Iruzkina invite_request: text: Zergatik elkartu nahi duzu? notification_emails: @@ -131,6 +157,12 @@ eu: pending_account: Bidali e-mail bat kontu bat berrikusi behar denean reblog: Bidali e-mail bat norbaitek zure mezuari bultzada ematen badio report: Bidali e-maila txosten berri bat aurkezten denean + trending_tag: Bidali e-mail bat errebisatu gabeko traola bat joeran dagoenean + tag: + listable: Baimendu traola hau bilaketetan agertzea eta profilen direktorioan + name: Traola + trendable: Baimendu traola hau joeretan agertzea + usable: Baimendu toot-ek traola hau erabiltzea 'no': Ez recommended: Aholkatua required: diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index cbe97095b..2cfbad182 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -2,9 +2,14 @@ fa: simple_form: hints: + account_alias: + acct: نشانی username@domain را برای حسابی که میخواهید از آن منتقل شوید بنویسید + account_migration: + acct: نشانی username@domain را برای حسابی که میخواهید به آن منتقل شوید بنویسید account_warning_preset: text: میتوانید مانند بوقهای معمولی کاربران دیگر را نام ببرید یا پیوند و برچسب بگذارید admin_account_action: + include_statuses: این کاربر خواهد دید که کدام بوق او موجب اقدام مدیریتی یا هشدار شده است send_email_notification: توضیحی که کاربر میبینید که برای حسابش چه رخ داده است text_html: اختیاری. میتوانید مثل بوقهای معمولی بنویسید. میتوانید برای صرفهجویی در زمان <a href="%{path}">هشدارهای ازپیشآماده بیفزایید</a> type_html: با حساب <strong>%{acct}</strong> میخواهید چه کار کنید؟ @@ -14,8 +19,10 @@ fa: avatar: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد bot: این حساب بیشتر به طور خودکار فعالیت میکند و نظارت پیوستهای روی آن وجود ندارد context: یک یا چند زمینه که فیلتر باید در آنها اعمال شود + current_password: به دلایل امنیتی لطفاً رمز این حساب را وارد کنید + current_username: برای تأیید، لطفاً نام کاربری حساب فعلی را وارد کنید digest: تنها وقتی فرستاده میشود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصیای نوشته شده باشد - discoverable_html: با <a href="%{path}" target="_blank">فهرست گزیدهٔ کاربران</a> مردم میتوانند حسابهای این سرور را بر اساس علاقهمندیها و فعالیتشان پیدا کنند. هر حساب دستکم باید %{min_followers} پیگیر داشته باشد + discoverable: فهرست گزیدهٔ کاربران این سرور راه دیگری است که با آن حساب شما میتواند مخاطبان بیشتری پیدا کند email: به شما ایمیل تأییدی فرستاده خواهد شد fields: شما میتوانید تا چهار مورد را در یک جدول در نمایهٔ خود نمایش دهید header: یکی از قالبهای PNG یا GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد @@ -27,20 +34,31 @@ fa: phrase: مستقل از کوچکی و بزرگی حروف، با متن اصلی یا هشدار محتوای بوقها مقایسه میشود scopes: واسطهای برنامهنویسی که این برنامه به آن دسترسی دارد. اگر بالاترین سطح دسترسی را انتخاب کنید، دیگر نیازی به انتخاب سطحهای پایینی ندارید. setting_aggregate_reblogs: برای بازبوقهایی که به تازگی برایتان نمایش داده شدهاند، بازبوقهای بیشتر را نشان نده (فقط روی بازبوقهای اخیر تأثیر میگذارد) + setting_default_sensitive: تصاویر حساس به طور پیشفرض پنهان هستند و میتوانند با یک کلیک آشکار شوند setting_display_media_default: تصویرهایی را که به عنوان حساس علامت زده شدهاند پنهان کن setting_display_media_hide_all: همیشه همهٔ عکسها و ویدیوها را پنهان کن setting_display_media_show_all: همیشه تصویرهایی را که به عنوان حساس علامت زده شدهاند را نشان بده setting_hide_network: فهرست پیگیران شما و فهرست کسانی که شما پی میگیرید روی نمایهٔ شما دیده نخواهد شد setting_noindex: روی نمایهٔ عمومی و صفحهٔ نوشتههای شما تأثیر میگذارد setting_show_application: برنامهای که به کمک آن بوق میزنید، در جزئیات بوق شما نمایش خواهد یافت + setting_use_blurhash: سایهها بر اساس رنگهای بهکاررفته در تصویر پنهانشده ساخته میشوند ولی جزئیات تصویر در آنها آشکار نیست + setting_use_pending_items: به جای پیشرفتن خودکار در فهرست، بهروزرسانی فهرست نوشتهها را پشت یک کلیک پنهان کن username: نام کاربری شما روی %{domain} یکتا خواهد بود whole_word: اگر کلیدواژه فقط دارای حروف و اعداد باشد، تنها وقتی پیدا میشود که با کل یک واژه در متن منطبق باشد، نه با بخشی از یک واژه + domain_allow: + domain: این دامین خواهد توانست دادهها از این سرور را دریافت کند و دادههای از این دامین در اینجا پردازش و ذخیره خواهند شد featured_tag: name: 'شاید بخواهید چنین چیزهایی را به کار ببرید:' + form_challenge: + current_password: شما در حال ورود به یک منطقهٔ حفاظتشده هستید imports: data: پروندهٔ CSV که از سرور ماستدون دیگری برونسپاری شده + invite_request: + text: این برای بررسی درخواست شما به ما کمک خواهد کرد sessions: otp: 'کد تأیید دومرحلهای که اپ روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:' + tag: + name: شما تنها میتوانید بزرگی و کوچکی حروف را تغییر دهید تا مثلاً آن را خواناتر کنید user: chosen_languages: اگر انتخاب کنید، تنها نوشتههایی که به زبانهای برگزیدهٔ شما نوشته شدهاند در فهرست نوشتههای عمومی نشان داده میشوند labels: @@ -48,9 +66,14 @@ fa: fields: name: برچسب value: محتوا + account_alias: + acct: نشانی حساب قدیمی + account_migration: + acct: نشانی حساب تازه account_warning_preset: text: متن از پیش آمادهشده admin_account_action: + include_statuses: بوقهای گزارششده را در ایمیل بگنجان send_email_notification: اطلاعرسانی به کاربر از راه ایمیل text: هشدار موردی type: نوع کنش @@ -86,9 +109,11 @@ fa: otp_attempt: کد ورود دومرحلهای password: رمز phrase: کلیدواژه یا عبارت + setting_advanced_layout: فعالسازی رابط کاربری پیشرفته setting_aggregate_reblogs: بازبوقها را متحد کن setting_auto_play_gif: پخش خودکار تصویرهای متحرک setting_boost_modal: نمایش پیغام تأیید پیش از بازبوقیدن + setting_crop_images: در بوقهای بازنشده، تصویرها را به ابعاد ۱۶×۹ کوچک کن setting_default_language: زبان نوشتههای شما setting_default_privacy: حریم خصوصی نوشتهها setting_default_sensitive: همیشه تصاویر را به عنوان حساس علامت بزن @@ -104,7 +129,10 @@ fa: setting_show_application: برنامهای که به کار میبرید آشکار شود setting_system_font_ui: بهکاربردن قلم پیشفرض سیستم setting_theme: تم سایت + setting_trends: نشاندادن موضوعات پرطرفدار روز setting_unfollow_modal: نمایش پیغام تأیید پیش از لغو پیگیری دیگران + setting_use_blurhash: به جای تصویرهای پنهانشده، سایههای رنگی نشان بده + setting_use_pending_items: حالت آهسته severity: شدت type: نوع درونریزی username: نام کاربری (لاتین) @@ -116,15 +144,28 @@ fa: must_be_follower: مسدودکردن اعلانهای همه به جز پیگیران must_be_following: مسدودکردن اعلانهای کسانی که شما پی نمیگیرید must_be_following_dm: مسدودکردن پیغامهای خصوصی کسانی که شما پی نمیگیرید + invite: + comment: توضیح + invite_request: + text: چرا میخواهید عضو شوید؟ notification_emails: digest: خلاصهکردن چند اعلان در یک ایمیل favourite: وقتی کسی نوشتهٔ شما را پسندید ایمیل بفرست follow: وقتی کسی پیگیر شما شد ایمیل بفرست follow_request: وقتی کسی درخواست پیگیری کرد ایمیل بفرست mention: وقتی کسی از شما نام برد ایمیل بفرست + pending_account: وقتی حساب تازهای نیاز به بازبینی داشت ایمیل بفرست reblog: وقتی کسی نوشتهٔ شما را بازبوقید ایمیل بفرست report: وقتی گزارش تازهای فرستاده شد ایمیل بفرست + trending_tag: وقتی یک برچسب بازبینینشده پرطرفدار شد ایمیل بفرست + tag: + listable: بگذارید که این برچسب در جستجوها و در فهرست گزیدهٔ کاربران نمایش داده شود + name: برچسب + trendable: بگذارید که این برچسب در موضوعات پرطرفدار دیده شود + usable: بگذارید که این برچسب در بوقها به کار بروند 'no': خیر + recommended: توصیه میشود required: + mark: "*" text: ضروری 'yes': بله diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 2bb56b40e..3cc3e7344 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -6,11 +6,18 @@ fi: send_email_notification: Käyttäjä saa selityksen mitä tapahtui hänen tililleen defaults: avatar: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px + bot: Tämä tili suorittaa enimmäkseen automaattisia toimintoja, eikä sitä ehkä valvota digest: Lähetetään vain pitkän poissaolon jälkeen ja vain, jos olet saanut suoria viestejä poissaolosi aikana + email: Sinulle lähetetään vahvistussähköposti fields: Sinulla voi olla korkeintaan 4 asiaa profiilissasi taulukossa header: PNG, GIF tai JPG. Enintään %{size}. Skaalataan kokoon %{dimensions} px locked: Sinun täytyy hyväksyä seuraajat manuaalisesti + setting_display_media_default: Piilota arkaluonteiseksi merkitty media + setting_display_media_hide_all: Piilota aina kaikki media + setting_display_media_show_all: Näytä aina arkaluonteiseksi merkitty media setting_noindex: Vaikuttaa julkiseen profiiliisi ja tilasivuihisi + setting_show_application: Tuuttaamiseen käyttämäsi sovellus näkyy tuuttauksiesi yksityiskohtaisessa näkymässä + setting_use_blurhash: Liukuvärit perustuvat piilotettujen kuvien väreihin, mutta sumentavat yksityiskohdat imports: data: Toisesta Mastodon-instanssista tuotu CSV-tiedosto sessions: diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 6b3aa9bfb..6beee0076 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -2,9 +2,14 @@ fr: simple_form: hints: + account_alias: + acct: Spécifiez le nom d’utilisateur@domaine du compte que vous souhaitez migrer + account_migration: + acct: Spécifiez le nom d’utilisateur@domaine du compte vers lequel vous souhaitez déménager account_warning_preset: text: Vous pouvez utiliser la syntaxe des pouets, comme les URLs, les hashtags et les mentions admin_account_action: + include_statuses: L’utilisateur·rice verra quels sont les pouets qui ont provoqué l’action de modération ou l’avertissement send_email_notification: L’utilisateur recevra une explication de ce qu’il s’est passé avec son compte text_html: Optionnel. Vous pouvez utilisez la syntaxe des pouets. Vous pouvez <a href="%{path}">ajouter des présélections d’attention</a> pour économiser du temps type_html: Choisir que faire avec <strong>%{acct}</strong> @@ -14,8 +19,10 @@ fr: avatar: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px bot: Ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé context: Un ou plusieurs contextes où le filtre devrait s’appliquer + current_password: Pour des raisons de sécurité, veuillez saisir le mot de passe du compte courant + current_username: Pour confirmer, veuillez saisir le nom d'utilisateur du compte courant digest: Uniquement envoyé après une longue période d’inactivité et uniquement si vous avez reçu des messages personnels pendant votre absence - discoverable_html: L’<a href="%{path}" target="_blank">annuaire</a> permet aux gens de trouver des comptes en se basant sur les intérêts et les activités. Nécessite au moins %{min_followers} abonnés + discoverable: L’annuaire des profils est une autre façon pour votre compte d’atteindre une plus grand audience email: Vous recevrez un courriel de confirmation fields: Vous pouvez avoir jusqu’à 4 éléments affichés en tant que tableau sur votre profil header: Au format PNG, GIF ou JPG. %{size} maximum. Sera réduit à %{dimensions}px @@ -34,16 +41,24 @@ fr: setting_hide_network: Ceux que vous suivez et ceux qui vous suivent ne seront pas affichés sur votre profil setting_noindex: Affecte votre profil public ainsi que vos statuts setting_show_application: Le nom de l’application que vous utilisez afin d’envoyer des pouets sera affiché dans la vue détaillée de ceux-ci + setting_use_blurhash: Les dégradés sont basés sur les couleurs des visuels cachés mais ne divulgent pas les détails + setting_use_pending_items: Masquer les mises à jour chronologiques derrière un clic au lieu de les montrer automatiquement en faisant défiler le flux d'actualités username: Votre nom d’utilisateur sera unique sur %{domain} whole_word: Lorsque le mot-clef ou la phrase-clef est uniquement alphanumérique, ça sera uniquement appliqué s’il correspond au mot entier + domain_allow: + domain: Ce domaine pourra récupérer des données de ce serveur et les données entrantes seront traitées et stockées featured_tag: name: 'Vous pourriez vouloir utiliser l’un d’entre eux :' + form_challenge: + current_password: Vous entrez une zone sécurisée imports: data: Un fichier CSV généré par un autre serveur de Mastodon invite_request: text: Cela nous aidera à considérer votre demande sessions: otp: 'Entrez le code d’authentification à deux facteurs généré par l’application de votre téléphone ou utilisez un de vos codes de récupération :' + tag: + name: Vous ne pouvez modifier que la casse des lettres, par exemple, pour le rendre plus lisible user: chosen_languages: Lorsque coché, seuls les pouets dans les langues sélectionnées seront affichés sur les fils publics labels: @@ -51,9 +66,14 @@ fr: fields: name: Étiquette value: Contenu + account_alias: + acct: L’identifiant de l’ancien compte + account_migration: + acct: L’identifiant du nouveau compte account_warning_preset: text: Texte de présélection admin_account_action: + include_statuses: Inclure les pouets signalés dans le courriel send_email_notification: Notifier l’utilisateur par courriel text: Attention personnalisée type: Action @@ -93,6 +113,7 @@ fr: setting_aggregate_reblogs: Repartagés en groupe dans la ligne de temps setting_auto_play_gif: Lire automatiquement les GIFs animés setting_boost_modal: Afficher une fenêtre de confirmation avant de partager + setting_crop_images: Recadrer les images dans les pouets non-expansés à 16x9 setting_default_language: Langue de publication setting_default_privacy: Confidentialité des statuts setting_default_sensitive: Toujours marquer les médias comme sensibles @@ -108,7 +129,10 @@ fr: setting_show_application: Dévoiler le nom de l’application utilisée pour envoyer des pouets setting_system_font_ui: Utiliser la police par défaut du système setting_theme: Thème du site + setting_trends: Afficher les tendances du jour setting_unfollow_modal: Afficher une fenêtre de confirmation avant de vous désabonner d’un compte + setting_use_blurhash: Afficher les dégradés colorés pour les médias cachés + setting_use_pending_items: Mode lent severity: Sévérité type: Type d’import username: Identifiant @@ -120,6 +144,8 @@ fr: must_be_follower: Masquer les notifications des personnes qui ne vous suivent pas must_be_following: Masquer les notifications des personnes que vous ne suivez pas must_be_following_dm: Bloquer les messages directs des personnes que vous ne suivez pas + invite: + comment: Commentaire invite_request: text: Pourquoi voulez-vous vous inscrire ? notification_emails: @@ -131,6 +157,12 @@ fr: pending_account: Envoyer un courriel lorsqu’un nouveau compte est en attente d’approbation reblog: Envoyer un courriel lorsque quelqu’un partage mes statuts report: Envoyer un courriel lorsqu’un nouveau rapport est soumis + trending_tag: Envoyer un e-mail quand un hashtag non contrôlé est en tendance actuelle + tag: + listable: Autoriser ce hashtag à apparaître dans les recherches et dans l’annuaire des profils + name: Hashtag + trendable: Autoriser ce hashtag à apparaître sous les tendances du jour + usable: Autoriser les pouets à utiliser ce hashtag 'no': Non recommended: Recommandé required: diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 22389051f..19c0c7002 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -2,9 +2,14 @@ gl: simple_form: hints: + account_alias: + acct: Indica o usuaria@servidor da conta desde a cal queres migrar + account_migration: + acct: Indica o usuaria@servidor da conta a cal queres migrar account_warning_preset: - text: Vostede pode utilizar dar formato ao toot, como URLs, etiquetas e mencións + text: Pódeslle dar formato ao toot, como URLs, etiquetas e mencións admin_account_action: + include_statuses: A usuaria verá que toots causaron a acción da moderación ou aviso send_email_notification: A usuaria recibirá unha explicación sobre o que lle aconteceu a súa conta text_html: Optativo. Pode utilizar formato no toot. Pode <a href="%{path}">engadir avisos preestablecidos</a> para aforrar tempo type_html: Escolla que facer con <strong>%{acct}</strong> @@ -14,12 +19,14 @@ gl: avatar: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px bot: Esta conta realiza principalmente accións automatizadas e podería non estar monitorizada context: Un ou varios contextos onde se debería aplicar o filtro + current_password: Por razóns de seguridade, introduce o contrasinal da conta actual + current_username: Para confirmar, introduce o nome de usuaria da conta actual digest: Enviar só tras un longo período de inactividade e só si recibeu algunha mensaxe persoal na súa ausencia - discoverable_html: O <a href="%{path}" target="_blank">directorio</a> permite atopar contas en función de intereses e actividade. Require ter ao menos %{min_followers} seguidoras + discoverable: O directorio de perfil é outro xeito para que a túa conta alcance unha maior audiencia email: Enviaráselle un correo-e de confirmación fields: Pode ter ate 4 elementos no seu perfil mostrados como unha táboa header: PNG, GIF ou JPG. Máximo %{size}. Será reducida a %{dimensions}px - inbox_url: Copiar o URL desde a páxina de inicio do repetidor que quere utilizar + inbox_url: Copiar o URL desde a páxina de inicio do repetidor que queres utilizar irreversible: Os toots filtrados desaparecerán de xeito irreversible, incluso si despois se elimina o filtro locale: O idioma da interface de usuaria, correos e notificacións locked: Require que vostede acepte as seguidoras de xeito manual @@ -34,16 +41,24 @@ gl: setting_hide_network: Non se mostrará no seu perfil quen a segue e quen a está a seguir setting_noindex: Afecta ao seu perfil público e páxinas de estado setting_show_application: A aplicación que está a utilizar para enviar toots mostrarase na vista detallada do toot + setting_use_blurhash: Os gradientes toman as cores da imaxe oculta pero esborranchando todos os detalles + setting_use_pending_items: Ocultar as actualizacións da liña temporal tras un click no lugar de desprazar automáticamente os comentarios username: O seu nome de usuaria será único en %{domain} whole_word: Se a chave ou frase de paso é só alfanumérica, só se aplicará se concorda a palabra completa + domain_allow: + domain: Este dominio estará en disposición de obter datos desde este servidor e datos de entrada a el poderán ser procesados e gardados featured_tag: name: 'Podería utilizar algunha de estas:' + form_challenge: + current_password: Estás entrando nun área segura imports: data: Ficheiro CSV exportado desde outro servidor Mastodon invite_request: text: Esto axudaranos a revisar a súa aplicación sessions: - otp: 'Introduza o código de doble-factor xerado no aplicativo do seu móbil ou utilice un dos seus códigos de recuperación:' + otp: 'Introduza o código de dobre-factor creado pola aplicación do seu móbil ou utilice un dos seus códigos de recuperación:' + tag: + name: Só pode cambiar maiús/minúsculas, por exemplo, mellorar a lexibilidade user: chosen_languages: Se ten marca, só os toots nos idiomas seleccionados serán mostrados en liñas temporais públicas labels: @@ -51,9 +66,14 @@ gl: fields: name: Etiqueta value: Contido + account_alias: + acct: Xestiona a conta antiga + account_migration: + acct: Xestiona a nova conta account_warning_preset: text: Texto preestablecido admin_account_action: + include_statuses: Incluír toots reportados no correo send_email_notification: Notificar a usuaria por correo-e text: Aviso personalizado type: Acción @@ -86,13 +106,14 @@ gl: max_uses: Número máximo de usos new_password: Novo contrasinal note: Sobre vostede - otp_attempt: Código de Doble-Factor + otp_attempt: Código de Dobre-Factor password: Contrasinal phrase: Palabra chave ou frase setting_advanced_layout: Activar interface web avanzada setting_aggregate_reblogs: Agrupar promocións nas liñas temporais setting_auto_play_gif: Reprodución automática de GIFs animados setting_boost_modal: Pedir confirmación antes de promocionar + setting_crop_images: Recortar imaxes a 16x9 en toots non despregados setting_default_language: Idioma de publicación setting_default_privacy: Intimidade da publicación setting_default_sensitive: Marcar sempre multimedia como sensible @@ -108,7 +129,10 @@ gl: setting_show_application: Mostrar a aplicación utilizada para tootear setting_system_font_ui: Utilizar a tipografía por defecto do sistema setting_theme: Decorado da instancia + setting_trends: Mostrar as tendencias de hoxe setting_unfollow_modal: Solicitar confirmación antes de deixar de seguir alguén + setting_use_blurhash: Mostrar gradientes coloridos para medios ocultos + setting_use_pending_items: Modo lento severity: Severidade type: Tipo de importación username: Nome de usuaria @@ -120,8 +144,10 @@ gl: must_be_follower: Bloquear as notificacións de non-seguidoras must_be_following: Bloquea as notificacións de personas que non segue must_be_following_dm: Bloquea as mensaxes directas de personas que non segue + invite: + comment: Comentar invite_request: - text: Por que quere unirse? + text: Por que queres unirte? notification_emails: digest: Enviar correos con resumos favourite: Enviar un correo cando alguén marca como favorita unha das súas publicacións @@ -131,6 +157,12 @@ gl: pending_account: Enviar correo-e cando unha nova conta precisa revisión reblog: Enviar un correo cando alguén promociona a súa mensaxe report: Enviar un correo cando se envíe un novo informe + trending_tag: Enviar correo cando unha etiqueta non revisada é tendencia + tag: + listable: Permitir a esta etiqueta aparecer no directorio de perfil + name: Etiqueta + trendable: Permitir a esta etiqueta aparecer baixo Tendencias + usable: Permitir que os toots utilicen esta etiqueta 'no': Non recommended: Recomendado required: diff --git a/config/locales/simple_form.hi.yml b/config/locales/simple_form.hi.yml new file mode 100644 index 000000000..d758a5b53 --- /dev/null +++ b/config/locales/simple_form.hi.yml @@ -0,0 +1 @@ +hi: diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index c508a5906..91ecd8746 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -2,59 +2,170 @@ hu: simple_form: hints: + account_alias: + acct: Adjad meg annak a fióknak a felhasználóneve@domainjét, ahonnan át szeretnéd mozgatni + account_migration: + acct: Add meg a fióknév@domain fiókot, melybe költözni szeretnél + account_warning_preset: + text: Használhatod a tülkökben szokásos szintaxist, URL-eket, hashtageket, megemlítéseket + admin_account_action: + include_statuses: A felhasználó látni fogja, melyik tülk okozta a moderációt vagy figyelmeztetést + send_email_notification: A felhasználó magyarázatot kap arra, mi történt a fiókjával + text_html: Opcionális. A tülk szintaxis használható. Egyszerűsítés végett létre is hozhatsz <a href="%{path}">figyelmeztetéseket</a> + type_html: Megmondhatod, mi legyen vele <strong>%{acct}</strong> + warning_preset_id: Opcionális. A figyelmeztetés végére saját szöveget is írhatsz defaults: - avatar: PNG, GIF vagy JPG. Maximum %{size}. Át lesz méretezve %{dimensions} pixelre - digest: Csak hosszú távollét esetén küldve és csak ha személyes üzenetet kaptál távollétedben - header: PNG, GIF vagy JPG. Maximum %{size}. Át lesz méretezve %{dimensions} pixelre + autofollow: Akik meghívón keresztül regisztrálnak, automatikusan követni fognak téged + avatar: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre + bot: Ez a fiók automatikus műveleteket végez és valószínűleg nem figyeljük + context: Kontextusok, ahol a szűrőnek működnie kell + current_password: Biztonsági okok miatt kérlek, írd be a jelenlegi fiók jelszavát + current_username: A jóváhagyáshoz írd be a jelenlegi fiók felhasználói nevét + digest: Csak hosszú távollét esetén küldődik és csak ha személyes üzenetet kaptál távollétedben + discoverable: A profil adatbázis egy újabb mód, ahogyan a fiókod szélesebb tömegeket érhet el + email: Kapsz egy megerősítő e-mailt + fields: A profilodon legfeljebb 4 bejegyzés szerepelhet táblázatos formában + header: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre + inbox_url: Másold ki a használandó relé szerver kezdőoldalának URL-jét + irreversible: A kiszűrt tülkök visszafordíthatatlanul eltűnnek, a szűrő későbbi törlése esetén is + locale: A felhasználói felület, e-mailek, push üzenetek nyelve locked: Egyenként engedélyezned kell a követőidet - setting_noindex: A publikus profilodra és státusz oldalra vonatkozik + password: Legalább 8 karakter + phrase: Illeszkedni fog kis/nagybetű függetlenül, és tartalom-figyelmeztetések mögött is + scopes: Mely API-kat érheti el az alkalmazás. Ha felső szintű hatáskört választasz, nem kell egyesével kiválasztanod az alatta lévőeket. + setting_aggregate_reblogs: Ne mutassunk megtolásokat olyan tülkökhöz, melyeket nemrég toltak meg (csak új megtolásokra lép életbe) + setting_default_sensitive: A szenzitív médiát alapesetben elrejtjük, de egyetlen kattintással előhozható + setting_display_media_default: Szenzitív tartalomként jelölt média elrejtése + setting_display_media_hide_all: Mindig minden média elrejtése + setting_display_media_show_all: Mindig mutasd a szenzitív tartalomként jelölt médiát + setting_hide_network: Nem látszik majd a profilodon, kik követnek és te kiket követsz + setting_noindex: A nyilvános profilodra és a tülkjeidre vonatkozik + setting_show_application: A tülkök részletes nézetében látszani fog, milyen alkalmazást használtál a tülköléshez + setting_use_blurhash: A kihomályosítás az eredeti képből történik, de minden részletet elrejt + setting_use_pending_items: Idővonal frissítése csak kattintásra automatikus görgetés helyett + username: A felhasználói neved egyedi lesz a %{domain} domainen + whole_word: Ha a kulcsszó alfanumerikus, csak akkor minősül majd találatnak, ha teljes szóra illeszkedik + domain_allow: + domain: Ez a domain adatot kérhet le a szerverünkről és az ettől érkező adatokat feldolgozzuk és mentjük + featured_tag: + name: 'Ezeket esetleg használhatod:' + form_challenge: + current_password: Beléptél egy biztonsági térben imports: data: Egy másik Mastodon szerverről exportált CSV fájl + invite_request: + text: Ez segít nekünk átnézni a jelentkezésedet sessions: - otp: Add meg a Második-faktor kódodat a telefonodról vagy használd az egyik tartalék bejelentkező kódodat. + otp: 'Add meg a telefonodon generált kétlépcsős azonosító kódodat vagy használd az egyik tartalék bejelentkező kódot:' + tag: + name: Csak a kis/nagybetűséget változtathatod meg, pl. hogy olvashatóbb legyen + user: + chosen_languages: Ha aktív, csak a kiválasztott nyelvű tülkök jelennek majd meg a nyilvános idővonalon labels: + account: + fields: + name: Címke + value: Tartalom + account_alias: + acct: Régi fiók kezelése + account_migration: + acct: Új fiók kezelése + account_warning_preset: + text: Figyelmeztető szöveg + admin_account_action: + include_statuses: Helyezd az e-mailbe a jelentett tülköket + send_email_notification: Figyelmeztessük a felhasználót e-mailben + text: Egyedi figyelmeztetés + type: Művelet + types: + disable: Letiltás + none: Ne csinálj semmit + silence: Elnémítás + suspend: Fiók felfüggesztése, adatok törlése visszaállíthatatlanul + warning_preset_id: Figyelmeztetés használata defaults: + autofollow: Meghívás a fiókod követésére avatar: Profilkép + bot: Ez a fiók egy bot + chosen_languages: Nyelvek szűrése confirm_new_password: Új jelszó megerősítése confirm_password: Jelszó megerősítése + context: Szűrés kontextusai current_password: Jelenlegi jelszó data: Adatok + discoverable: Fiók listázása a profilok adatbázisában display_name: Megjelenített név email: E-mail cím expires_in: Elévül + fields: Profil metaadatok header: Fejléc - locale: Nyelv - locked: Zárt felhasználói fiók - max_uses: Felhasználhatóság + inbox_url: Relé inbox-hoz tartozó URL + irreversible: Eldobás elrejtés helyett + locale: Felhasználói felület nyelve + locked: Felhasználói fiók lezárása + max_uses: Hányszor használható new_password: Új jelszó - note: Önéletrajz - otp_attempt: Második-faktor kód + note: Bemutatkozás + otp_attempt: Kétlépcsős azonosító kód password: Jelszó + phrase: Kulcsszó vagy kifejezés + setting_advanced_layout: Haladó webes felület engedélyezése + setting_aggregate_reblogs: Megtolások csoportosítása az idővonalakon setting_auto_play_gif: GIF-ek automatikus lejátszása - setting_boost_modal: Megerősítés kérése reblogolás előtt - setting_default_privacy: Tülkök alapártelmezett adatvédelmi szintje + setting_boost_modal: Megerősítés kérése megtolás előtt + setting_crop_images: Képek 16x9-re vágása nem kinyitott tülköknél + setting_default_language: Tülkölés nyelve + setting_default_privacy: Tülkök alapértelmezett láthatósága setting_default_sensitive: Minden médiafájl megjelölése szenzitívként setting_delete_modal: Megerősítés kérése tülk törlése előtt + setting_display_media: Média megjelenítése + setting_display_media_default: Alapértelmezés + setting_display_media_hide_all: Mindent elrejt + setting_display_media_show_all: Mindent mutat + setting_expand_spoilers: Tartalom figyelmeztetéssel ellátott tülkök automatikus kinyitása + setting_hide_network: Hálózatod elrejtése setting_noindex: Megtiltom a keresőmotoroknak, hogy indexeljék a tülkjeimet setting_reduce_motion: Animációk mozgásának csökkentése + setting_show_application: A tülkölésre használt alkalmazás feltüntetése setting_system_font_ui: Rendszer betűtípusának használata - setting_theme: Oldalsablon + setting_theme: Megjelenítési sablon + setting_trends: Mai trend mutatása setting_unfollow_modal: Megerősítés kérése mielőtt abbahagyod valaki követését + setting_use_blurhash: Rejtett média helyett homály mutatása + setting_use_pending_items: Lassú mód severity: Súlyosság type: Importálás típusa username: Felhasználónév + username_or_email: Felhasználónév vagy E-mail + whole_word: Teljes szó + featured_tag: + name: Hashtag interactions: must_be_follower: Nem követőidtől érkező értesítések tiltása must_be_following: Nem követettjeidtől érkező értesítések tiltása must_be_following_dm: Nem követettjeidtől érkező üzenetek tiltása + invite: + comment: Hozzászólás + invite_request: + text: Miért akarsz csatlakozni? notification_emails: digest: Összevont e-mailek küldése - favourite: E-mail küldése amikor valaki kedvencnek jelöli az állapotod - follow: E-mail küldése amikor valaki követni kezd téged - follow_request: E-mail küldése amikor valaki követni szeretne téged - mention: E-mail küldése amikor valaki megemlít téged - reblog: E-mail küldése amikor valaki reblogolja az állapotod + favourite: E-mail küldése, amikor valaki kedvencnek jelöli a tülködet + follow: E-mail küldése, amikor valaki követni kezd téged + follow_request: E-mail küldése, amikor valaki követni szeretne téged + mention: E-mail küldése, amikor valaki megemlít téged + pending_account: E-mail küldése, ha új fiókot kell engedélyezni + reblog: E-mail küldése, amikor valaki megtolja a tülködet + report: E-mail küldése, ha új bejelentés érkezett + trending_tag: E-mail küldése, ha egy még nem látott hashtag trendi lett + tag: + listable: A hashtag megjelenhet a profiladatbázisban + name: Címke + trendable: A hashtag megjelenhet a trendek között + usable: Tülkök használhatják ezt a hashtaget 'no': Nem + recommended: Ajánlott required: + mark: "*" text: kötelező 'yes': Igen diff --git a/config/locales/simple_form.id.yml b/config/locales/simple_form.id.yml index ba9fbb4e8..54d10f21a 100644 --- a/config/locales/simple_form.id.yml +++ b/config/locales/simple_form.id.yml @@ -2,42 +2,167 @@ id: simple_form: hints: + account_alias: + acct: Tentukan namapengguna@domain akun yang ingin Anda pindah + account_migration: + acct: Tentukan namapengguna@domain akun yang ingin Anda pindah + account_warning_preset: + text: Anda dapat memakai sintaks toot, seperti URL, tagar, dan sebutan + admin_account_action: + include_statuses: Pengguna dapat melihat toot mana yang menyebabkan aksi atau peringatan moderasi + send_email_notification: Pengguna akan menerima penjelasan tentang apa yang terjadi pada akun mereka + text_html: Opsional. Anda dapat memakai sintaks toot. Anda dapat <a href="%{path}">menambahkan preset peringatan</a> untuk hemat waktu + type_html: Pilih apa yang perlu dilakukan dengan <strong>%{acct}</strong> + warning_preset_id: Opsional. Anda tetap dapat menambahkan teks kustom pada akhir preset defaults: + autofollow: Orang yang ingin mendaftar lewat undangan, otomatis mengikuti Anda avatar: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px + bot: Akun ini melakukan aksi otomatis dan mungkin tak termonitor + context: Satu atau lebih konteks tempat saringan perlu diterapkan + current_password: Untuk tujuan keamanan mohon masukkan kata sandi akun ini + current_username: Untuk konfirmasi, mohon masukkan nama pengguna akun ini + digest: Hanya kirim setelah lama tidak aktif dan hanya jika Anda menerima pesan personal atas absensi Anda + discoverable: Direktori profil adalah cara lain agar akun Anda menyentuh audiens yang lebih luas + email: Anda akan dikirimi surel konfirmasi + fields: Anda bisa memiliki hingga 4 item utk ditampilkan sebagai tabel di profil Anda header: PNG, GIF atau JPG. Maksimal %{size}. Ukuran dikecilkan menjadi %{dimensions}px + inbox_url: Salin URL dari halaman depan relai yang ingin Anda pakai + irreversible: Toot tersaring akan hilang permanen bahkan jika saringan dihapus kemudian + locale: Bahasa antar muka pengguna, surel, dan notifikasi dorong locked: Anda harus menerima permintaan pengikut secara manual dan setting privasi postingan akan diubah khusus untuk pengikut + password: Gunakan minimal 8 karakter + phrase: Akan dicocokkan terlepas dari luaran dalam teks atau peringatan konten dari toot + scopes: API mana yang diizinkan untuk diakses aplikasi. Jika Anda memilih cakupan level-atas, Anda tak perlu memilih yang individual. + setting_aggregate_reblogs: Jangan tampilkan boost baru untuk toot yang baru saja di-boost (hanya memengaruhi boost yang baru diterima) + setting_default_sensitive: Media sensitif disembunyikan secara bawaan dan akan ditampilkan dengan klik + setting_display_media_default: Sembunyikan media yang ditandai sebagai sensitif + setting_display_media_hide_all: Selalu sembunyikan semua media + setting_display_media_show_all: Selalu tampilkan media sensitif + setting_hide_network: Siapa yang Anda ikuti dan yang mengikuti Anda tak akan ditampilkan dalam profil + setting_noindex: Pengaruhi profil publik dan halaman status Anda + setting_show_application: Aplikasi yang Anda pakai untuk men-toot akan ditampilkan di tampilan detail toot + setting_use_blurhash: Gradien didasarkan pada warna visual yang tersembunyi tetapi mengaburkan setiap detail + setting_use_pending_items: Sembunyikan pembaruan linimasa di balik klik alih-alih bergulir secara otomatis + username: Nama pengguna Anda unik di %{domain} + whole_word: Ketika kata kunci/frasa hanya alfanumerik, maka itu hanya akan diterapkan jika cocok dengan semua kata + domain_allow: + domain: Domain ini dapat mengambil data dari server ini dan data yang diterima akan diproses dan disimpan + featured_tag: + name: 'Anda mungkin ingin pakai salah satu dari ini:' + form_challenge: + current_password: Anda memasuki area aman imports: data: File CSV yang diexpor dari server Mastodon lain + invite_request: + text: Ini akan membantu kami meninjau aplikasi Anda sessions: otp: Masukkan kode dua-faktor dari handphone atau gunakan kode pemulihan anda. + user: + chosen_languages: Ketika dicentang, hanya toot dalam bahasa yang dipilih yang akan ditampilkan di linimasa publik labels: + account: + fields: + name: Label + value: Konten + account_alias: + acct: Menangani akun lama + account_migration: + acct: Menangani akun baru + account_warning_preset: + text: Teks preset + admin_account_action: + include_statuses: Sertakan toot terlapor pada surel + send_email_notification: Beritahu pengguna per surel + text: Peringatan kustom + type: Aksi + types: + disable: Matikan + none: Biarkan + silence: Diamkan + suspend: Tangguhkan dan hapus data akun scr permanen + warning_preset_id: Gunakan preset peringatan defaults: + autofollow: Undang untuk mengikuti Anda + avatar: Avatar + bot: Ini akun bot + chosen_languages: Saring bahasa confirm_new_password: Konfirmasi kata sandi baru confirm_password: Konfirmasi kata sandi + context: Saring konteks current_password: Kata sandi sekarang + data: Data + discoverable: Daftarkan akun ini di direktori display_name: Nama yang ditampilkan email: Alamat e-mail + expires_in: Kedaluwarsa setelah + fields: Metadata profil + header: Tajuk + inbox_url: URL kotak relai + irreversible: Hapus alih-alih sembunyikan locale: Bahasa locked: Buat akun menjadi pribadi + max_uses: Jumlah maksimal penggunaan new_password: Password baru + note: Bio otp_attempt: Kode dua-faktor password: Kata sandi + phrase: Kata kunci atau frasa + setting_advanced_layout: Aktifkan antar muka web mahir + setting_aggregate_reblogs: Boost grup di linimasa + setting_auto_play_gif: Mainkan otomatis animasi GIF setting_boost_modal: Tampilkan dialog konfirmasi dialog sebelum boost + setting_default_language: Bahasa posting setting_default_privacy: Privasi postingan + setting_default_sensitive: Selalu tandai media sebagai sensitif + setting_delete_modal: Tampilkan dialog konfirmasi sebelum hapus toot + setting_display_media: Tampilan media + setting_display_media_default: Bawaan + setting_display_media_hide_all: Sembunyikan semua + setting_display_media_show_all: Tunjukkan semua + setting_expand_spoilers: Selalu bentangkan toot yang bertanda peringatan konten + setting_hide_network: Sembunyikan jaringan Anda + setting_noindex: Opt-out dari pengindeksan mesin pencari + setting_reduce_motion: Kurangi gerakan animasi + setting_show_application: Singkap aplikasi yang dipakai utk kirim toot + setting_system_font_ui: Gunakan fon bawaan sistem + setting_theme: Tema situs + setting_trends: Tampilkan tren hari ini + setting_unfollow_modal: Tampilkan konfirmasi dialog sebelum berhenti mengikuti seseorang + setting_use_blurhash: Tampilkan gradien penuh warna utk media tersembunyi + setting_use_pending_items: Mode pelan severity: Keparahan type: Tipe impor username: Nama pengguna + username_or_email: Nama pengguna atau Surel + whole_word: Seluruh kata + featured_tag: + name: Tagar interactions: must_be_follower: Blokir notifikasi dari non-pengikut must_be_following: Blokir notifikasi dari orang yang tidak anda ikuti + must_be_following_dm: Blokir pesan langsung dari orang yang tak Anda ikuti + invite: + comment: Komentar + invite_request: + text: Mengapa Anda ingin gabung? notification_emails: digest: Kirim email berisi rangkuman favourite: Kirim email saat seseorang menyukai status anda follow: Kirim email saat seseorang mengikuti anda follow_request: Kirim email saat seseorang meminta untuk mengikuti anda mention: Kirim email saat seseorang menyebut anda + pending_account: Kirim surel ketika akun baru perlu ditinjau reblog: Kirim email saat seseorang mem-boost status anda + report: Kirim surel ketika laporan baru dikirim + trending_tag: Kirim surel ketika tagar tak tertinjau jadi tren + tag: + listable: Izinkan tagar ini muncul di penelusuran dan di direktori profil + name: Tagar + trendable: Izinkan tagar ini muncul di bawah tren + usable: Izinkan toot memakai tagar ini 'no': Tidak + recommended: Direkomendasikan required: + mark: "*" text: wajib 'yes': Ya diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index b832a8035..3a0e1d265 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -2,9 +2,14 @@ it: simple_form: hints: + account_alias: + acct: Indica il nomeutente@dominio dell'account da cui vuoi trasferirti + account_migration: + acct: Indica il nomeutente@dominio dell'account al quale vuoi trasferirti account_warning_preset: text: Puoi usare la sintassi dei toot, come URL, hashtag e menzioni admin_account_action: + include_statuses: L'utente vedrà quali toot hanno causato l'azione di moderazione o l'avviso send_email_notification: L'utente riceverà una spiegazione di ciò che è successo con suo account text_html: Opzionale. Puoi usare la sintassi dei toot. Puoi <a href="%{path}">aggiungere avvisi preimpostati</a> per risparmiare tempo type_html: Decidi cosa fare con <strong>%{acct}</strong> @@ -14,8 +19,10 @@ it: avatar: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px bot: Questo account esegue principalmente operazioni automatiche e potrebbe non essere tenuto sotto controllo da una persona context: Uno o più contesti nei quali il filtro dovrebbe essere applicato + current_password: Per motivi di sicurezza inserisci la password dell'account attuale + current_username: Per confermare, inserisci il nome utente dell'account attuale digest: Inviata solo dopo un lungo periodo di inattività e solo se hai ricevuto qualche messaggio personale in tua assenza - discoverable_html: La <a href="%{path}" target="_blank">directory</a> permette alle persone di trovare account in base a determinati interessi o attività. Richiede almeno %{min_followers} seguaci + discoverable: La directory dei profili è un altro modo in cui il tuo account può raggiungere un pubblico più ampio email: Ti manderemo una email di conferma fields: Puoi avere fino a 4 voci visualizzate come una tabella sul tuo profilo header: PNG, GIF o JPG. Al massimo %{size}. Verranno scalate a %{dimensions}px @@ -27,20 +34,31 @@ it: phrase: Il confronto sarà eseguito ignorando minuscole/maiuscole e i content warning scopes: A quali API l'applicazione potrà avere accesso. Se selezionate un ambito di alto livello, non c'è bisogno di selezionare quelle singole. setting_aggregate_reblogs: Non mostrare nuove condivisioni per toot che sono stati condivisi di recente (ha effetto solo sulle nuove condivisioni) + setting_default_sensitive: Media con contenuti sensibili sono nascosti in modo predefinito e possono essere rivelati con un click setting_display_media_default: Nascondi media segnati come sensibili setting_display_media_hide_all: Nascondi sempre tutti i media setting_display_media_show_all: Nascondi sempre i media segnati come sensibili setting_hide_network: Chi segui e chi segue te non saranno mostrati sul tuo profilo setting_noindex: Ha effetto sul tuo profilo pubblico e sulle pagine degli status setting_show_application: L'applicazione che usi per pubblicare i toot sarà mostrata nella vista di dettaglio dei tuoi toot + setting_use_blurhash: I gradienti sono basati sui colori delle immagini nascoste ma offuscano tutti i dettagli + setting_use_pending_items: Fare clic per mostrare i nuovi messaggi invece di aggiornare la timeline automaticamente username: Il tuo nome utente sarà unico su %{domain} whole_word: Quando la parola chiave o la frase è solo alfanumerica, si applica solo se corrisponde alla parola intera + domain_allow: + domain: Questo dominio potrà recuperare i dati da questo server e i dati in arrivo da esso verranno elaborati e memorizzati featured_tag: name: 'Eccone alcuni che potresti usare:' + form_challenge: + current_password: Stai entrando in un'area sicura imports: data: File CSV esportato da un altro server Mastodon + invite_request: + text: Questo ci aiuterà ad esaminare la tua richiesta sessions: otp: 'Inserisci il codice a due fattori generato dall''app del tuo telefono o usa uno dei codici di recupero:' + tag: + name: Puoi cambiare solo il minuscolo/maiuscolo delle lettere, ad esempio, per renderlo più leggibile user: chosen_languages: Quando una o più lingue sono contrassegnate, nelle timeline pubbliche vengono mostrati solo i toot nelle lingue selezionate labels: @@ -48,9 +66,14 @@ it: fields: name: Etichetta value: Contenuto + account_alias: + acct: Handle del vecchio account + account_migration: + acct: Handle del nuovo account account_warning_preset: text: Testo preimpostato admin_account_action: + include_statuses: Includi i toots segnalati nell'email send_email_notification: Informa l'utente via email text: Avviso personalizzato type: Azione @@ -62,12 +85,14 @@ it: warning_preset_id: Usa un avviso preimpostato defaults: autofollow: Invita a seguire il tuo account + avatar: Immagine di profilo bot: Questo account è un bot chosen_languages: Filtra lingue confirm_new_password: Conferma nuova password confirm_password: Conferma password context: Contesti del filtro current_password: Password corrente + data: Data discoverable: Inserisci questo account nella directory display_name: Nome visualizzato email: Indirizzo email @@ -82,10 +107,13 @@ it: new_password: Nuova password note: Biografia otp_attempt: Codice due-fattori + password: Password phrase: Parola chiave o frase + setting_advanced_layout: Abilita interfaccia web avanzata setting_aggregate_reblogs: Raggruppa condivisioni in timeline setting_auto_play_gif: Play automatico GIF animate setting_boost_modal: Mostra dialogo di conferma prima del boost + setting_crop_images: Ritaglia immagini in toot non espansi a 16x9 setting_default_language: Lingua dei post setting_default_privacy: Privacy dei post setting_default_sensitive: Segna sempre i media come sensibili @@ -101,24 +129,41 @@ it: setting_show_application: Rendi pubblica l'applicazione usata per inviare i toot setting_system_font_ui: Usa il carattere predefinito del sistema setting_theme: Tema sito + setting_trends: Mostra tendenze di oggi setting_unfollow_modal: Chiedi conferma prima di smettere di seguire qualcuno + setting_use_blurhash: Mostra i gradienti colorati per i media nascosti + setting_use_pending_items: Modalità lenta severity: Severità type: Tipo importazione username: Nome utente username_or_email: Nome utente o email whole_word: Parola intera + featured_tag: + name: Etichetta interactions: must_be_follower: Blocca notifiche da chi non ti segue must_be_following: Blocca notifiche dalle persone che non segui must_be_following_dm: Blocca i messaggi diretti dalle persone che non segui + invite_request: + text: Perché vuoi iscriverti? notification_emails: digest: Invia email riassuntive favourite: Invia email quando segna come preferito al tuo stato follow: Invia email quando qualcuno ti segue follow_request: Invia email quando qualcuno richiede di seguirti mention: Invia email quando qualcuno ti menziona + pending_account: Invia e-mail quando un nuovo account richiede l'approvazione reblog: Invia email quando qualcuno da un boost al tuo stato report: Manda una mail quando viene inviato un nuovo rapporto + trending_tag: Invia e-mail quando un hashtag non controllato è in tendenza + tag: + listable: Permetti a questo hashtag di apparire nella directory dei profili + name: Hashtag + trendable: Permetti a questo hashtag di apparire nelle tendenze + usable: Permetti ai toot di utilizzare questo hashtag + 'no': 'No' + recommended: Consigliato required: + mark: "*" text: richiesto 'yes': Si diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 89f2e7a8d..fea6e04d7 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -2,9 +2,14 @@ ja: simple_form: hints: + account_alias: + acct: 引っ越し元のユーザー名@ドメインを指定してください + account_migration: + acct: 引っ越し先のユーザー名@ドメインを指定してください account_warning_preset: text: URL、ハッシュタグ、メンションなど、投稿に用いる構文が使用できます admin_account_action: + include_statuses: ユーザーは取られた制限や警告の原因となったトゥートを確認できるようになります send_email_notification: ユーザーは自分のアカウントに何が起こったのか説明を受け取ります text_html: オプションです。投稿に用いる構文を使うことができます。簡略化のため<a href="%{path}">プリセット警告文を追加</a>することができます type_html: "<strong>%{acct}</strong>さんに対し、何を行うか選択してください" @@ -14,8 +19,10 @@ ja: avatar: "%{size}までのPNG、GIF、JPGが利用可能です。%{dimensions}pxまで縮小されます" bot: このアカウントは主に自動で動作し、人が見ていない可能性があります context: フィルターを適用する対象 (複数選択可) + current_password: 現在のアカウントのパスワードを入力してください + current_username: 確認のため、現在のアカウントのユーザー名を入力してください digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます - discoverable_html: <a href="%{path}" target="_blank">ディレクトリ</a> は興味や活動をもとにアカウントを見つけることを可能にします。 掲載には %{min_followers} 人以上のフォロワーが必要です + discoverable: ディレクトリはあなたのアカウントをより多くの人に見つけてもらうためのひとつの手段です email: 確認のメールが送信されます fields: プロフィールに表として4つまでの項目を表示することができます header: "%{size}までのPNG、GIF、JPGが利用可能です。 %{dimensions}pxまで縮小されます" @@ -34,16 +41,24 @@ ja: setting_hide_network: フォローとフォロワーの情報がプロフィールページで見られないようにします setting_noindex: 公開プロフィールおよび各投稿ページに影響します setting_show_application: トゥートするのに使用したアプリがトゥートの詳細ビューに表示されるようになります + setting_use_blurhash: ぼかしはメディアの色を元に生成されますが、細部は見えにくくなっています + setting_use_pending_items: 新着があってもタイムラインを自動的にスクロールしないようにします username: あなたのユーザー名は %{domain} の中で重複していない必要があります whole_word: キーワードまたはフレーズが英数字のみの場合、単語全体と一致する場合のみ適用されるようになります + domain_allow: + domain: 登録するとこのサーバーからデータを受信したり、このドメインから受信するデータを処理して保存できるようになります featured_tag: name: 'これらを使うといいかもしれません:' + form_challenge: + current_password: セキュリティ上重要なエリアにアクセスしています imports: data: 他の Mastodon サーバーからエクスポートしたCSVファイルを選択して下さい invite_request: text: このサーバーは現在承認制です。申請を承認する際に役立つメッセージを添えてください sessions: otp: '携帯電話のアプリで生成された二段階認証コードを入力するか、リカバリーコードを使用してください:' + tag: + name: 視認性向上などのためにアルファベット大文字小文字の変更のみ行うことができます user: chosen_languages: 選択すると、選択した言語のトゥートのみが公開タイムラインに表示されるようになります labels: @@ -51,9 +66,14 @@ ja: fields: name: ラベル value: 内容 + account_alias: + acct: 引っ越し元のユーザー ID + account_migration: + acct: 引っ越し先のユーザー ID account_warning_preset: text: プリセット警告文 admin_account_action: + include_statuses: 通報されたトゥートをメールに含める send_email_notification: メールでユーザーに通知 text: カスタム警告文 type: アクション @@ -93,6 +113,7 @@ ja: setting_aggregate_reblogs: ブーストをまとめる setting_auto_play_gif: アニメーションGIFを自動再生する setting_boost_modal: ブーストする前に確認ダイアログを表示する + setting_crop_images: トゥート詳細以外では画像を16:9に切り抜く setting_default_language: 投稿する言語 setting_default_privacy: 投稿の公開範囲 setting_default_sensitive: メディアを常に閲覧注意としてマークする @@ -109,7 +130,10 @@ ja: setting_show_application: 送信したアプリを開示する setting_system_font_ui: システムのデフォルトフォントを使う setting_theme: サイトテーマ + setting_trends: 本日のトレンドタグを表示する setting_unfollow_modal: フォローを解除する前に確認ダイアログを表示する + setting_use_blurhash: 非表示のメディアを色付きのぼかしで表示する + setting_use_pending_items: 手動更新モード severity: 重大性 type: インポートする項目 username: ユーザー名 @@ -121,6 +145,8 @@ ja: must_be_follower: フォロワー以外からの通知をブロック must_be_following: フォローしていないユーザーからの通知をブロック must_be_following_dm: フォローしていないユーザーからのダイレクトメッセージをブロック + invite: + comment: コメント invite_request: text: 意気込みをお聞かせください notification_emails: @@ -132,8 +158,15 @@ ja: pending_account: 新しいアカウントの承認が必要な時にメールで通知する reblog: トゥートがブーストされた時にメールで通知する report: 通報を受けた時にメールで通知する + trending_tag: 未審査のハッシュタグが人気の時にメールで通知する + tag: + listable: 検索とディレクトリへの使用を許可する + name: ハッシュタグ + trendable: トレンドへの表示を許可する + usable: トゥートへの使用を許可する 'no': いいえ recommended: おすすめ required: + mark: "*" text: 必須 'yes': はい diff --git a/config/locales/simple_form.kk.yml b/config/locales/simple_form.kk.yml index 1dcc9b127..544c684a6 100644 --- a/config/locales/simple_form.kk.yml +++ b/config/locales/simple_form.kk.yml @@ -1 +1,171 @@ +--- kk: + simple_form: + hints: + account_alias: + acct: Specify the username@domain of the account you want to move from + account_migration: + acct: Specify the username@domain of the account you want to move to + account_warning_preset: + text: You can use toot syntax, such as URLs, hashtags and mentions + admin_account_action: + include_statuses: The user will see which toots have caused the moderation action or warning + send_email_notification: The user will receive an explanation of what happened with their account + text_html: Optional. You can use toot syntax. You can <a href="%{path}">add warning presets</a> to save time + type_html: Choose what to do with <strong>%{acct}</strong> + warning_preset_id: Optional. You can still add custom text to end of the preset + defaults: + autofollow: People who sign up through the invite will automatically follow you + avatar: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + bot: This account mainly performs automated actions and might not be monitored + context: One or multiple contexts where the filter should apply + current_password: For security purposes please enter the password of the current account + current_username: To confirm, please enter the username of the current account + digest: Only sent after a long period of inactivity and only if you have received any personal messages in your absence + discoverable: The profile directory is another way by which your account can reach a wider audience + email: You will be sent a confirmation e-mail + fields: You can have up to 4 items displayed as a table on your profile + header: PNG, GIF or JPG. At most %{size}. Will be downscaled to %{dimensions}px + inbox_url: Copy the URL from the frontpage of the relay you want to use + irreversible: Filtered toots will disappear irreversibly, even if filter is later removed + locale: The language of the user interface, e-mails and push notifications + locked: Requires you to manually approve followers + password: Use at least 8 characters + phrase: Will be matched regardless of casing in text or content warning of a toot + scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones. + setting_aggregate_reblogs: Do not show new boosts for toots that have been recently boosted (only affects newly-received boosts) + setting_default_sensitive: Sensitive media is hidden by default and can be revealed with a click + setting_display_media_default: Hide media marked as sensitive + setting_display_media_hide_all: Always hide all media + setting_display_media_show_all: Always show media marked as sensitive + setting_hide_network: Who you follow and who follows you will not be shown on your profile + setting_noindex: Affects your public profile and status pages + setting_show_application: The application you use to toot will be displayed in the detailed view of your toots + setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details + setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed + username: Your username will be unique on %{domain} + whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word + domain_allow: + domain: This domain will be able to fetch data from this server and incoming data from it will be processed and stored + featured_tag: + name: 'You might want to use one of these:' + form_challenge: + current_password: You are entering a secure area + imports: + data: CSV file exported from another Mastodon server + invite_request: + text: This will help us review your application + sessions: + otp: 'Enter the two-factor code generated by your phone app or use one of your recovery codes:' + tag: + name: You can only change the casing of the letters, for example, to make it more readable + user: + chosen_languages: When checked, only toots in selected languages will be displayed in public timelines + labels: + account: + fields: + name: Label + value: Мазмұн + account_alias: + acct: Handle of the old account + account_migration: + acct: Handle of the new account + account_warning_preset: + text: Алдын ала белгіленген мәтін + admin_account_action: + include_statuses: Include reported toots in the e-mail + send_email_notification: Notify the user per e-mail + text: Жеке ескерту + type: Әрекет + types: + disable: Ажырату + none: Ештеңе істемеу + silence: Үнсіз + suspend: Suspend and irreversibly delete account data + warning_preset_id: Use a warning preset + defaults: + autofollow: Жазылуға шақыру + avatar: Аватар + bot: Бұл бот аккаунт + chosen_languages: Тіл фильтрі + confirm_new_password: Жаңа құпиясөзді құптау + confirm_password: Құпиясөзді құптау + context: Фильтр контекстері + current_password: Ағымдағы кілтсөз + data: Дата + discoverable: Бұл аккаунтты каталогта көрсету + display_name: Атын көрсет + email: Эл. пошта мекен жайы + expires_in: Аяқталу мерзімі + fields: Профиль метадатасы + header: Басы + inbox_url: URL of the relay inbox + irreversible: Drop instead of hide + locale: Интерфейс тілі + locked: Аккаунтты құлыптау + max_uses: Максимум қолданушы саны + new_password: Жаңа құпиясөз + note: Био + otp_attempt: Екі факторлы код + password: Құпиясөз + phrase: Кілтсөз немесе фраза + setting_advanced_layout: Кеңейтілген веб-интерфейс қосу + setting_aggregate_reblogs: Group boosts in timelines + setting_auto_play_gif: GIF анимацияларды бірден қосу + setting_boost_modal: Бөлісу алдында растау диалогын көрсету + setting_crop_images: Кеңейтілмеген жазбаларда суреттерді 16х9 көлеміне кес + setting_default_language: Жазба тілі + setting_default_privacy: Жазба құпиялылығы + setting_default_sensitive: Медиаларды әрдайым нәзік ретінде белгілеу + setting_delete_modal: Жазбаны өшірместен бұрын растау диалогын көрсету + setting_display_media: Медианы көрсету + setting_display_media_default: Əдепкі + setting_display_media_hide_all: Бәрін жасыру + setting_display_media_show_all: Бәрін көрсет + setting_expand_spoilers: Мазмұн ескертуімен белгіленген жазбаларды кеңейту + setting_hide_network: Желіні жасыру + setting_noindex: Opt-out of search engine indexing + setting_reduce_motion: Reduce motion in animations + setting_show_application: Disclose application used to send toots + setting_system_font_ui: Жүйенің әдепкі қарпі + setting_theme: Сайт темасы + setting_trends: Show today's trends + setting_unfollow_modal: Анфоллоудан бұрын растау диалогын көрсету + setting_use_blurhash: Жасырын медиаға арналған түрлі-түсті градиенттерді көрсетіңіз + setting_use_pending_items: Баяу режим + severity: Маңыздылығы + type: Импорт түрі + username: Логин + username_or_email: Логин немесе Email + whole_word: Бүкіл апта + featured_tag: + name: Хэштег + interactions: + must_be_follower: Оқырман еместерден ескертпе әкелме + must_be_following: Жазылмаған адамдардан ескертпе әкелме + must_be_following_dm: Жазылмаған адамдардан хат әкелме + invite: + comment: Пікір + invite_request: + text: Неліктен қосылғыңыз келеді? + notification_emails: + digest: Дайджест e-mail жібер + favourite: Біреу жазбамды ұнатқан кезде хат жібер + follow: Біреу жазылған кезде хат жібер + follow_request: Біреу жазылуға сұранған кезде хат жібер + mention: Біреу мен туралы жазған кезде хат жібер + pending_account: Жаңа аккаунт құптау күткен кезде хат жібер + reblog: Жазбамды біреу бөліскен кезде хат жібер + report: Жаңа шағым түскен кезде хат жібер + trending_tag: Қаралмаған хештег шыққан кезде хат жібер + tag: + listable: Бұл хештегті барлық жерде көрсетуге рұқсат бер + name: Хэштег + trendable: Хештегті трендтерде көрсетуге рұқсат бер + usable: Бұл хештегті қолдануға рұқсат бер + 'no': Жоқ + recommended: Рекоменделген + required: + mark: "*" + text: міндетті + 'yes': Иә diff --git a/config/locales/simple_form.kn.yml b/config/locales/simple_form.kn.yml new file mode 100644 index 000000000..d094088d8 --- /dev/null +++ b/config/locales/simple_form.kn.yml @@ -0,0 +1 @@ +kn: diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 8147cde5d..aadec0cac 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -2,23 +2,30 @@ ko: simple_form: hints: + account_alias: + acct: 이동하고자 하는 계정의 사용자이름@도메인을 설정하세요 + account_migration: + acct: 이동하고자 하는 목적지 계정의 사용자이름@도메인을 설정하세요 account_warning_preset: text: URL, 해시태그, 멘션과 같은 툿 문법을 사용할 수 있습니다 admin_account_action: + include_statuses: 사용자는 어떤 툿에 대해 경고나 조치가 취해졌는지 볼 수 있게 됩니다 send_email_notification: 유저는 어떤 일이 일어났는 지에 대한 설명을 받게 됩니다 text_html: 선택사항. 툿 문법을 사용할 수 있습니다. <a href="%{path}">경고 틀을 추가</a>하여 시간을 절약할 수 있습니다 type_html: "<strong>%{acct}</strong>에 대해 취할 행동 선택" warning_preset_id: 선택사항. 틀의 마지막에 임의의 텍스트를 추가 할 수 있습니다 defaults: autofollow: 이 초대를 통해 가입하는 사람은 당신을 자동으로 팔로우 하게 됩니다 - avatar: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 다운스케일 될 것임 + avatar: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨 bot: 사람들에게 계정이 사람이 아님을 알립니다 context: 필터를 적용 할 한 개 이상의 컨텍스트 + current_password: 보안을 위해 현재 계정의 암호를 입력해주세요 + current_username: 확인을 위해, 현재 계정의 사용자명을 입력해주세요 digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기 - discoverable_html: <a href="%{path}" target="_blank">디렉토리</a> 는 사람들의 관심사와 활동에 관련 된 계정들을 찾을 수 있게 해 줍니다. 최소 %{min_followers}명의 팔로어가 필요합니다 + discoverable: 프로필 디렉토리는 내 계정이 더 많은 관심을 갖게 할 수 있는 다른 방법입니다 email: 당신은 확인 메일을 받게 됩니다 fields: 당신의 프로파일에 최대 4개까지 표 형식으로 나타낼 수 있습니다 - header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 다운스케일 됨 + header: PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소 됨 inbox_url: 사용 할 릴레이 서버의 프론트페이지에서 URL을 복사합니다 irreversible: 필터링 된 툿은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다 locale: 유저 인터페이스, 이메일, 푸시 알림 언어 @@ -34,16 +41,24 @@ ko: setting_hide_network: 나를 팔로우 하는 사람들과 내가 팔로우 하는 사람들이 내 프로필에 표시되지 않게 합니다 setting_noindex: 공개 프로필 및 각 툿페이지에 영향을 미칩니다 setting_show_application: 당신이 툿을 작성하는데에 사용한 앱이 툿의 상세정보에 표시 됩니다 + setting_use_blurhash: 그라디언트는 숨겨진 내용의 색상을 기반으로 하지만 상세 내용은 보이지 않게 합니다 + setting_use_pending_items: 타임라인의 새 게시물을 자동으로 보여 주는 대신, 클릭해서 나타내도록 합니다 username: 당신의 유저네임은 %{domain} 안에서 유일해야 합니다 whole_word: 키워드가 영문과 숫자로만 이루어 진 경우, 단어 전체에 매칭 되었을 때에만 작동하게 합니다 + domain_allow: + domain: 이 도메인은 이 서버에서 데이터를 가져갈 수 있고 이 도메인에서 보내진 데이터는 처리되고 저장 됩니다 featured_tag: name: '이것들을 사용하면 좋을 것 같습니다:' + form_challenge: + current_password: 당신은 보안 구역에 진입하고 있습니다 imports: data: 다른 마스토돈 서버에서 추출된 CSV 파일 invite_request: text: 이 정보는 우리가 심사를 하는 데에 참고할 수 있습니다 sessions: otp: '휴대전화에서 생성 된 2단계 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:' + tag: + name: 읽기 쉽게하기 위한 글자의 대소문자만 변경할 수 있습니다. user: chosen_languages: 체크하면, 선택 된 언어들만 공개 타임라인에 보여집니다 labels: @@ -51,9 +66,14 @@ ko: fields: name: 라벨 value: 내용 + account_alias: + acct: 기존 계정의 핸들 + account_migration: + acct: 새 계정의 핸들 account_warning_preset: text: 프리셋 텍스트 admin_account_action: + include_statuses: 신고된 툿을 이메일에 포함 send_email_notification: 이메일로 유저에게 알리기 text: 커스텀 경고 type: 조치 @@ -93,6 +113,7 @@ ko: setting_aggregate_reblogs: 타임라인의 부스트를 그룹화 setting_auto_play_gif: 애니메이션 GIF를 자동 재생 setting_boost_modal: 부스트 전 확인 창을 표시 + setting_crop_images: 확장되지 않은 툿의 이미지를 16x9로 자르기 setting_default_language: 게시물 언어 setting_default_privacy: 툿 프라이버시 setting_default_sensitive: 미디어를 언제나 민감한 컨텐츠로 설정 @@ -108,7 +129,10 @@ ko: setting_show_application: 툿 작성에 사용한 앱을 공개 setting_system_font_ui: 시스템의 초기 설정 폰트를 사용 setting_theme: 사이트 테마 + setting_trends: 오늘의 유행 보이기 setting_unfollow_modal: 언팔로우 전 언팔로우 확인 표시 + setting_use_blurhash: 숨겨진 미디어에 대해 그라디언트 표시 + setting_use_pending_items: 느린 모드 severity: 심각도 type: 불러오기 종류 username: 유저 이름 @@ -120,6 +144,8 @@ ko: must_be_follower: 나를 팔로우 하지 않는 사람에게서 온 알림을 차단 must_be_following: 내가 팔로우 하지 않는 사람에게서 온 알림을 차단 must_be_following_dm: 내가 팔로우 하지 않은 사람에게서 오는 다이렉트메시지를 차단 + invite: + comment: 주석 invite_request: text: 가입하려는 이유가 무엇인가요? notification_emails: @@ -131,8 +157,15 @@ ko: pending_account: 새 계정이 심사가 필요할 때 이메일 보내기 reblog: 누군가 내 툿을 부스트 했을 때 이메일 보내기 report: 새 신고 등록시 이메일로 알리기 + trending_tag: 리뷰 되지 않은 해시태그가 유행할 때 이메일 보내기 + tag: + listable: 이 해시태그가 프로필 디렉토리에 보여지도록 허용 + name: 해시태그 + trendable: 이 해시태그가 유행에 보여지도록 허용 + usable: 이 해시태그를 툿에 사용 가능하도록 허용 'no': 아니오 recommended: 추천함 required: + mark: "*" text: 필수 항목 'yes': 네 diff --git a/config/locales/simple_form.mk.yml b/config/locales/simple_form.mk.yml new file mode 100644 index 000000000..8b9144a98 --- /dev/null +++ b/config/locales/simple_form.mk.yml @@ -0,0 +1 @@ +mk: diff --git a/config/locales/simple_form.ml.yml b/config/locales/simple_form.ml.yml new file mode 100644 index 000000000..0439b2053 --- /dev/null +++ b/config/locales/simple_form.ml.yml @@ -0,0 +1,8 @@ +--- +ml: + simple_form: + hints: + admin_account_action: + type_html: "<strong>%{acct}</strong> നെ എന്ത് ചെയ്യണമെന്ന് തീരുമാനിക്കുക" + defaults: + password: 8 അക്ഷരങ്ങൾ എങ്കിലും ഉപയോഗിക്കുക diff --git a/config/locales/simple_form.mr.yml b/config/locales/simple_form.mr.yml new file mode 100644 index 000000000..fe1639c6a --- /dev/null +++ b/config/locales/simple_form.mr.yml @@ -0,0 +1 @@ +mr: diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 58d29ce12..5c417c84e 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -2,9 +2,14 @@ nl: simple_form: hints: + account_alias: + acct: Vul de gebruikersnaam@domein van het account in, die je wilt verhuizen + account_migration: + acct: Vul de gebruikersnaam@domein van het account in, waarnaartoe je wilt verhuizen account_warning_preset: text: Je kunt voor toots specifieke tekst gebruiken, zoals URL's, hashtags en vermeldingen admin_account_action: + include_statuses: De gebruiker ziet welke toots verantwoordelijk zijn voor de moderatieactie of waarschuwing send_email_notification: De gebruiker ontvangt een uitleg over wat er met hun account is gebeurd text_html: Optioneel. Je kunt voor toots specifieke tekst gebruiken. Om tijd te besparen kun je <a href="%{path}">voorinstellingen van waarschuwingen toevoegen</a> type_html: Kies wat er met <strong>%{acct}</strong> moet gebeuren @@ -14,8 +19,10 @@ nl: avatar: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px bot: Dit is een geautomatiseerd account en wordt mogelijk niet gemonitord context: Een of meerdere locaties waar de filter actief moet zijn + current_password: Voer voor veiligheidsredenen het wachtwoord van je huidige account in + current_username: Voer ter bevestiging de gebruikersnaam van je huidige account in digest: Wordt alleen na een lange periode van inactiviteit verzonden en alleen wanneer je tijdens jouw afwezigheid persoonlijke berichten hebt ontvangen - discoverable_html: In de <a href="%{path}" target="_blank">gebruikersgids</a> kunnen mensen andere accounts vinden aan de hand van interesses en activiteit. Dit vereist tenminste %{min_followers} volgers + discoverable: De gebruikersgids is een andere manier waarmee jouw account een groter publiek kan bereiken email: Je krijgt een bevestigingsmail fields: Je kan maximaal 4 items als een tabel op je profiel weergeven header: PNG, GIF of JPG. Maximaal %{size}. Wordt teruggeschaald naar %{dimensions}px @@ -34,16 +41,24 @@ nl: setting_hide_network: Wie jij volgt en wie jou volgen wordt niet op jouw profiel getoond setting_noindex: Heeft invloed op jouw openbare profiel en toots setting_show_application: De toepassing de je gebruikt om te tooten wordt in de gedetailleerde weergave van de toot getoond + setting_use_blurhash: Wazige kleurovergangen zijn gebaseerd op de kleuren van de verborgen media, waarmee elk detail verdwijnt + setting_use_pending_items: De tijdlijn wordt bijgewerkt door op het aantal nieuwe items te klikken, in plaats van dat deze automatisch wordt bijgewerkt username: Jouw gebruikersnaam is uniek op %{domain} whole_word: Wanneer het trefwoord of zinsdeel alfanumeriek is, wordt het alleen gefilterd wanneer het hele woord overeenkomt + domain_allow: + domain: Dit domein is in staat om gegevens van deze server op te halen, en binnenkomende gegevens worden verwerkt en opgeslagen featured_tag: name: 'Je wilt misschien een van deze gebruiken:' + form_challenge: + current_password: Je betreedt een veilige omgeving imports: data: CSV-bestand dat op een andere Mastodonserver werd geëxporteerd invite_request: text: Dit helpt ons om jouw aanvraag te beoordelen sessions: otp: 'Voer de tweestaps-aanmeldcode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcodes:' + tag: + name: Je kunt elk woord met een hoofdletter beginnen, om zo bijvoorbeeld de tekst leesbaarder te maken user: chosen_languages: Alleen toots in de aangevinkte talen worden op de openbare tijdlijnen getoond labels: @@ -51,14 +66,19 @@ nl: fields: name: Label value: Inhoud + account_alias: + acct: Mastodonadres van het oude account + account_migration: + acct: Mastodonadres van het nieuwe account account_warning_preset: text: Tekst van voorinstelling admin_account_action: + include_statuses: Gerapporteerde toots aan de e-mail toevoegen send_email_notification: Meld dit per e-mail aan de gebruiker text: Aangepaste waarschuwing type: Actie types: - disable: Uitschakelen + disable: Inloggen uitschakelen none: Niets doen silence: Negeren suspend: Opschorten en onomkeerbaar accountgegevens verwijderen @@ -93,6 +113,7 @@ nl: setting_aggregate_reblogs: Boosts in tijdlijnen groeperen setting_auto_play_gif: Speel geanimeerde GIF's automatisch af setting_boost_modal: Vraag voor het boosten van een toot een bevestiging + setting_crop_images: Afbeeldingen tot 16x9 besnijden in niet uitgebreide toots setting_default_language: Taal van jouw toots setting_default_privacy: Standaardzichtbaarheid van jouw toots setting_default_sensitive: Media altijd als gevoelig markeren @@ -108,7 +129,10 @@ nl: setting_show_application: Toepassing onthullen die je voor het verzenden van toots gebruikt setting_system_font_ui: Standaardlettertype van jouw systeem gebruiken setting_theme: Thema website + setting_trends: Trends van vandaag tonen setting_unfollow_modal: Vraag voor het ontvolgen van iemand een bevestiging + setting_use_blurhash: Wazige kleurovergangen voor verborgen media tonen + setting_use_pending_items: Langzame modus severity: Zwaarte type: Importtype username: Gebruikersnaam @@ -120,6 +144,8 @@ nl: must_be_follower: Meldingen van mensen die jou niet volgen blokkeren must_be_following: Meldingen van mensen die jij niet volgt blokkeren must_be_following_dm: Directe berichten van mensen die jij niet volgt blokkeren + invite: + comment: Opmerking invite_request: text: Waarom wil jij je aanmelden? notification_emails: @@ -131,6 +157,12 @@ nl: pending_account: Een e-mail verzenden wanneer een nieuw account moet worden beoordeeld reblog: Een e-mail versturen wanneer iemand jouw toot heeft geboost report: Verstuur een e-mail wanneer een nieuw rapportage is ingediend + trending_tag: Een e-mail versturen wanneer een nog niet beoordeelde hashtag trending is + tag: + listable: Toestaan dat deze hashtag in zoekopdrachten en in de gebruikersgids te zien valt + name: Hashtag + trendable: Toestaan dat deze hashtag onder trends te zien valt + usable: Toestaan dat deze hashtag in toots gebruikt mag worden 'no': Nee recommended: Aanbevolen required: diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml new file mode 100644 index 000000000..777f4e600 --- /dev/null +++ b/config/locales/simple_form.nn.yml @@ -0,0 +1 @@ +nn: diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml index e0bfcfef9..e692d2d64 100644 --- a/config/locales/simple_form.oc.yml +++ b/config/locales/simple_form.oc.yml @@ -2,9 +2,14 @@ oc: simple_form: hints: + account_alias: + acct: Donatz l’utilizaire@domeni del compte que volètz desplaçar + account_migration: + acct: Donatz l’utilizaire@domeni del compte ont volètz anar account_warning_preset: text: Podètz utilizar la sintaxi dels tuts, coma las URL, las etiquetas e las mencions admin_account_action: + include_statuses: L’utilizaire veiràs quals tuts a provocat l’accion de moderacion o avertiment send_email_notification: L’utilizaire recebrà una explicacion de çò qu’arribèt a son compte text_html: Opcional. Podètz utilizar la sintaxi dels tuts. Podètz <a href="%{path}">ajustar un avertiment personalizat</a> per estalviar de temps type_html: Causir de qué far amb <strong>%{acct}</strong> @@ -14,8 +19,10 @@ oc: avatar: PNG, GIF o JPG. Maximum %{size}. Serà retalhat en %{dimensions}px bot: Avisar lo monde qu’aqueste compte es pas d’una persona context: Un o mai de contèxtes ont lo filtre deuriá s’aplicar + current_password: Per de rasons de seguretat volgatz picar lo senhal del compte actual + current_username: Per confirmar, volgatz picar lo nom d’utilizaire del compte actual digest: Solament enviat aprèp un long moment d’inactivitat e solament s’avètz recebut de messatges personals pendent vòstra abséncia - discoverable_html: L’<a href="%{path}" target="_blank">annuari</a> permet al monde de trobar de comptes segon lor interèsses e activitats. Requerís almens %{min_followers} seguidors + discoverable: L’annuari de perfiles es un biais mai per que vòstre compte aja una audiéncia mai granda email: Vos mandarem un corrièl de confirmacion fields: Podètz far veire cap a 4 elements sus vòstre perfil header: PNG, GIF o JPG. Maximum %{size}. Serà retalhada en %{dimensions}px @@ -27,22 +34,31 @@ oc: phrase: Serà pres en compte que siá en majuscula o minuscula o dins un avertiment de contengut sensible scopes: A quinas APIs poiràn accedir las aplicacions. Se seleccionatz un encastre de naut nivèl, fa pas mestièr de seleccionar los nivèls mai basses. setting_aggregate_reblogs: Mostrar pas los nòus partatges que son estats partejats recentament (afecta pas que los nòus partatges recebuts) + setting_default_sensitive: Los mèdias sensibles son resconduts per defaut e se revelhan amb un clic setting_display_media_default: Rescondre los mèdias marcats coma sensibles setting_display_media_hide_all: Totjorn rescondre los mèdias setting_display_media_show_all: Totjorn mostrar los mèdias marcats coma sensibles setting_hide_network: Vòstre perfil mostrarà pas los que vos sègon e lo monde que seguètz setting_noindex: Aquò es destinat a vòstre perfil public e vòstra pagina d’estatuts setting_show_application: Lo nom de l’aplicacion qu’utilizatz per publicar serà mostrat dins la vista detalhada de vòstres tuts + setting_use_blurhash: Los degradats venon de las colors de l’imatge rescondut en enfoscar los detalhs + setting_use_pending_items: Rescondre las actualizacions del flux d’actualitat aprèp un clic allòc de desfilar lo flux automaticament username: Vòstre nom d’utilizaire serà unic sus %{domain} whole_word: Quand lo mot-clau o frasa es solament alfranumeric, serà pas qu’aplicat se correspond al mot complèt + domain_allow: + domain: Aqueste domeni poirà recuperar las donadas d’aqueste servidor estant e las donadas venent d’aqueste domeni seràn tractadas e gardadas featured_tag: name: 'Benlèu que volètz utilizar una d’aquestas causas :' + form_challenge: + current_password: Dintratz dins una zòna segura imports: data: Fichièr CSV exportat d’un autre servidor Mastodon invite_request: text: Aquò nos ajudarà per validar vòstra demanda sessions: otp: 'Picatz lo còdi d’autentificacion en dos temps (Two factor code) de vòstra aplicacion mobil o utilizatz un de vòstres còdis de recuperacion :' + tag: + name: Podètz pas que cambiar la talha de las letras, per exemple, per que sián de melhor legir user: chosen_languages: Quand seleccionadas, solament los tuts dins las lengas triadas seràn mostrats dins vòstre flux d’actualitat labels: @@ -50,9 +66,14 @@ oc: fields: name: Nom value: Contengut + account_alias: + acct: Identificant de l’ancian compte + account_migration: + acct: Identificant del nòu compte account_warning_preset: text: Tèxt predefinit admin_account_action: + include_statuses: Inclure los tuts senhalats dins lo corrièl send_email_notification: Avisar l’utilizaire per corrièl text: Avertiment personalizat type: Accions @@ -64,6 +85,7 @@ oc: warning_preset_id: Utilizar un avertiment predefinit defaults: autofollow: Convidar a sègre vòstre compte + avatar: Avatar bot: Aquò es lo compte a un robòt chosen_languages: Filtrar las lengas confirm_new_password: Confirmacion del nòu senhal @@ -83,12 +105,15 @@ oc: locked: Far venir lo compte privat max_uses: Limit d’utilizacions new_password: Nòu senhal + note: Bio otp_attempt: Còdi Two-factor password: Senhal phrase: Senhal o frasa + setting_advanced_layout: Activar l’interfàcia web avançada setting_aggregate_reblogs: Agropar los partatges dins lo flux d’actualitat setting_auto_play_gif: Lectura automatica dels GIFS animats setting_boost_modal: Mostrar una fenèstra de confirmacion abans de partejar un estatut + setting_crop_images: Retalhar los imatges dins los tuts pas desplegats a 16x9 setting_default_language: Lenga de publicacion setting_default_privacy: Confidencialitat dels tuts setting_default_sensitive: Totjorn marcar los mèdias coma sensibles @@ -104,7 +129,10 @@ oc: setting_show_application: Revelar lo nom de l’aplicacion utilizada per enviar de tuts setting_system_font_ui: Utilizar la polissa del sistèma setting_theme: Tèma del site + setting_trends: Veire las tendéncias d’uèi setting_unfollow_modal: Mostrar una confirmacion abans de quitar de sègre qualqu’un + setting_use_blurhash: Mostrar los degradats colorats pels mèdias resconduts + setting_use_pending_items: Mòde lent severity: Severitat type: Tipe d’impòrt username: Nom d’utilizaire @@ -116,6 +144,8 @@ oc: must_be_follower: Blocar las notificacions del mond que vos sègon pas must_be_following: Blocar las notificacions del mond que seguètz pas must_be_following_dm: Blocar los messatges del monde que seguètz pas + invite: + comment: Comentari invite_request: text: Perqué volètz vos marcar ? notification_emails: @@ -127,7 +157,15 @@ oc: pending_account: Enviar un corrièl quand cal validar un compte novèl reblog: Enviar un corrièl quand qualqu’un tòrna partejar vòstre estatut report: Enviar un corrièl pels nòus senhalaments + trending_tag: Enviar un corrièl quand una etiqueta pas repassada es en tendéncia + tag: + listable: Permetre a aquesta etiqueta d’aparéisser a las recèrcas e a l’annuari de perfils + name: Etiqueta + trendable: Permetre a aquesta etiqueta d’aparéisser a las tendéncias + usable: Permetre als tuts d’utilizar aquesta etiqueta 'no': Non + recommended: Recomandat required: + mark: "*" text: requesit 'yes': Òc diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index b74bbc2f5..d3d726440 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -15,7 +15,6 @@ pl: bot: To konto wykonuje głównie zautomatyzowane działania i może nie być monitorowane context: Jedno lub wiele miejsc, w których filtr zostanie zastosowany digest: Wysyłane tylko po długiej nieaktywności, jeżeli w tym czasie otrzymaleś jakąś wiadomość bezpośrednią - discoverable_html: <a href="%{path}" target="_blank">Katalog</a> pozwala znaleźć konta na podstawie zainteresowań i aktywności. Profil musi śledzić przynajmniej %{min_followers} osób email: Otrzymasz e-mail potwierdzający fields: Możesz ustawić maksymalnie 4 niestandardowe pola wyświetlane jako tabela na Twoim profilu header: PNG, GIF lub JPG. Maksymalnie %{size}. Zostanie zmniejszony do %{dimensions}px @@ -35,6 +34,7 @@ pl: setting_noindex: Wpływa na widoczność strony profilu i Twoich wpisów setting_show_application: W informacjach o wpisie będzie widoczna informacja o aplikacji, z której został wysłany setting_skin: Zmienia wygląd używanej odmiany Mastodona + setting_use_blurhash: Gradienty są oparte na kolorach ukrywanej zawartości, ale uniewidaczniają wszystkie szczegóły username: Twoja nazwa użytkownika będzie niepowtarzalna na %{domain} whole_word: Jeśli słowo lub fraza składa się jedynie z liter lub cyfr, filtr będzie zastosowany tylko do pełnych wystąpień featured_tag: @@ -111,6 +111,7 @@ pl: setting_skin: Motyw setting_system_font_ui: Używaj domyślnej czcionki systemu setting_unfollow_modal: Pytaj o potwierdzenie przed cofnięciem śledzenia + setting_use_blurhash: Pokazuj kolorowe gradienty dla ukrytej zawartości multimedialnej severity: Priorytet type: Importowane dane username: Nazwa użytkownika diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 10475e515..9b96e1b94 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -2,9 +2,14 @@ pt-BR: simple_form: hints: + account_alias: + acct: Especifique o usuário@domínio da conta da qual você deseja mover + account_migration: + acct: Especifique o usuário@domínio da conta para o qual você deseja mover account_warning_preset: text: Você pode usar a sintaxe de um toot, como URLs, hashtags e menções admin_account_action: + include_statuses: O usuário verá quais toots causaram o aviso ou ação da moderação send_email_notification: O usuário vai receber uma explicação do que aconteceu com a sua conta text_html: Opcional. Você pode usar a sintaxe de toots. Você pode <a href="%{path}">adicionar avisos pré-definidos</a> para ganhar tempo type_html: Escolha o que fazer com <strong>%{acct}</strong> @@ -14,8 +19,10 @@ pt-BR: avatar: PNG, GIF or JPG. Arquivos de até %{size}. Eles serão diminuídos para %{dimensions}px bot: Essa conta executa principalmente ações automatizadas e pode não ser monitorada context: Um ou mais contextos onde o filtro deve ser aplicado + current_password: Para fins de segurança digite a senha da conta atual + current_username: Para confirmar, por favor, digite o usuário da conta atual digest: Enviado após um longo período de inatividade com um resumo das menções que você recebeu em sua ausência - discoverable_html: O <a href="%{path}" target="_blank">diretório</a> permite encontrar contas baseado em seus interesses e atividades. Requer pelo menos %{min_followers} seguidores + discoverable: O diretório de perfis é outra maneira de sua conta alcançar um público mais vasto email: Você receberá um email de confirmação fields: Você pode ter até 4 itens exibidos em forma de tabela no seu perfil header: PNG, GIF or JPG. Arquivos de até %{size}. Eles serão diminuídos para %{dimensions}px @@ -27,22 +34,31 @@ pt-BR: phrase: Vai coincidir, independente de maiúsculas ou minúsculas, no texto ou no aviso de conteúdo de um toot scopes: Quais APIs a aplicação vai ter permissão de acessar. Se você selecionar um escopo de alto nível, você não precisa selecionar individualmente os outros. setting_aggregate_reblogs: Não mostrar novos compartilhamentos para toots que foram compartilhados recentemente (afeta somente novos compartilhamentos recebidos) + setting_default_sensitive: Mídia sensível está oculta por padrão e pode ser revelada com um clique setting_display_media_default: Esconder mídia marcada como sensível setting_display_media_hide_all: Sempre esconder todas as mídias setting_display_media_show_all: Sempre mostrar mídia marcada como sensível setting_hide_network: Quem você segue e quem segue você não serão exibidos no seu perfil setting_noindex: Afeta seu perfil público e as páginas de suas postagens setting_show_application: A aplicação que você usar para enviar seus toots vai aparecer na visão detalhada dos seus toots + setting_use_blurhash: Os gradientes são baseados nas cores das imagens escondidas, mas ofuscam quaisquer detalhes + setting_use_pending_items: Ocultar atualizações de linha de tempo atrás de um clique ao invés de rolar automaticamente o feed username: Seu nome de usuário será único em %{domain} whole_word: Quando a palavra ou frase é inteiramente alfanumérica, ela será aplicada somente se corresponder a palavra inteira + domain_allow: + domain: Este domínio será capaz de obter dados deste servidor e os dados recebidos dele serão processados e armazenados featured_tag: name: 'Você pode querer usar um destes:' + form_challenge: + current_password: Você está entrando em uma área segura imports: data: Arquivo CSV exportado de outra instância do Mastodon invite_request: text: Isso vai nos ajudar a revisar sua aplicação sessions: otp: 'Insira o código de autenticação gerado pelo app no seu celular ou use um dos códigos de recuperação:' + tag: + name: Você pode mudar a capitalização das letras, por exemplo, para torná-la mais legível user: chosen_languages: Ao marcar, apenas toots dos idiomas selecionados serão exibidos nas timelines públicas labels: @@ -53,6 +69,7 @@ pt-BR: account_warning_preset: text: Texto pré-definido admin_account_action: + include_statuses: Incluir toots reportados no e-mail send_email_notification: Notificar o usuário por e-mail text: Aviso customizado type: Ação @@ -64,6 +81,7 @@ pt-BR: warning_preset_id: Usar um aviso pré-definido defaults: autofollow: Convite para seguir a sua conta + avatar: Imagem de Perfil bot: Esta é uma conta-robô chosen_languages: Filtros de idioma confirm_new_password: Confirmar nova senha @@ -83,12 +101,15 @@ pt-BR: locked: Trancar conta max_uses: Número máximo de usos new_password: Nova senha + note: Biografia otp_attempt: Código de autenticação em dois passos password: Senha phrase: Palavra-chave ou frase + setting_advanced_layout: Ativar interface web avançada setting_aggregate_reblogs: Agrupar compartilhamentos nas timelines setting_auto_play_gif: Reproduzir GIFs automaticamente setting_boost_modal: Mostrar diálogo de confirmação antes de compartilhar postagem + setting_crop_images: Cortar imagens no formato 16x9 em toots não expandidos setting_default_language: Idioma das postagens setting_default_privacy: Privacidade das postagens setting_default_sensitive: Sempre marcar mídia como sensível @@ -104,16 +125,23 @@ pt-BR: setting_show_application: Mostrar o nome da aplicação utilizada para enviar os toots setting_system_font_ui: Usar a fonte padrão de seu sistema setting_theme: Tema do site + setting_trends: Mostrar tendências de hoje setting_unfollow_modal: Mostrar diálogo de confirmação antes de deixar de seguir alguém + setting_use_blurhash: Mostrar gradientes coloridos para mídias ocultas + setting_use_pending_items: Modo lento severity: Gravidade type: Tipo de importação username: Nome de usuário username_or_email: Nome de usuário ou e-mail whole_word: Palavra inteira + featured_tag: + name: Hashtag interactions: must_be_follower: Bloquear notificações de não-seguidores must_be_following: Bloquear notificações de pessoas que você não segue must_be_following_dm: Bloquear mensagens diretas de pessoas que você não segue + invite: + comment: Comentário invite_request: text: Por que você quer se cadastrar? notification_emails: @@ -125,7 +153,15 @@ pt-BR: pending_account: Mandar um -mail quando uma nova conta precisar ser revisada reblog: Mandar um e-mail quando alguém compartilhar suas postagens report: Mandar um e-mail quando uma nova denúncia é submetida + trending_tag: Enviar e-mail quando uma hashtag não revisada estiver em alta + tag: + listable: Permitir que esta hashtag apareça em pesquisas e no diretório de perfis + name: Hashtag + trendable: Permitir que esta hashtag apareça em alta + usable: Permitir que toots usem esta hastag 'no': Não + recommended: Recomendado required: + mark: "*" text: obrigatório 'yes': Sim diff --git a/config/locales/simple_form.pt.yml b/config/locales/simple_form.pt-PT.yml index bf6381889..57acde4d9 100644 --- a/config/locales/simple_form.pt.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -1,10 +1,15 @@ --- -pt: +pt-PT: simple_form: hints: + account_alias: + acct: Especifique o nome de usuário@domínio da conta de onde você deseja mover + account_migration: + acct: Especifique o nome de usuário@domínio da conta para onde você deseja mover account_warning_preset: text: Tu podes usar sintaxe de escrita, como URLs, hashtags e referências admin_account_action: + include_statuses: O usuário verá quais ferramentas causaram a ação de moderação ou aviso send_email_notification: O utilizador receberá uma explicação sobre o que aconteceu com a sua conta text_html: Opcional. Tu podes usar sintaxe de escrita. Tu podes <a href="%{path}"> adicionar predefinições de aviso</a> para poupar tempo type_html: Escolhe o que fazer com <strong>%{acct}</strong> @@ -14,8 +19,8 @@ pt: avatar: PNG, GIF or JPG. Arquivos até %{size}. Vão ser reduzidos para %{dimensions}px bot: Esta conta executa essencialmente acções automáticas e pode não poder ser monitorizada context: Um ou múltiplos contextos nos quais o filtro deve ser aplicado + current_password: Para fins de segurança, por favor, digite a senha da conta atual digest: Enviado após um longo período de inatividade e apenas se foste mencionado na tua ausência - discoverable_html: O <a href="%{path}" target="_blank">directory</a> permite encontrar contas de pessoas com base nos seus interesses e actividades. Exige, pelo menos %{min_followers} seguidores email: Será enviado um e-mail de confirmação fields: Podes ter até 4 itens expostos, em forma de tabela, no teu perfil header: PNG, GIF or JPG. Arquivos até %{size}. Vão ser reduzidos para %{dimensions}px diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml index 4df2fe161..ac4c344f1 100644 --- a/config/locales/simple_form.ro.yml +++ b/config/locales/simple_form.ro.yml @@ -15,7 +15,6 @@ ro: bot: Acest cont performează în cea mai mare parte acțiuni automate și nu poate fi monitorizat context: Contextele în care filtrul trebuie aplicat digest: Este trimis doar după o lungă perioadă de inactivitate și numai dacă primești mesaje personale în perioada de absență - discoverable_html: <a href="%{path}" target="_blank">Directorul</a> permite utilizatorilor să găsească conturi după interese și activități. Necesită minim %{min_followers} urmăritori email: Vei primi un e-mail de confirmare fields: Poti afișa pană la maxim 4 adrese sub formă de tabel pe pofilul tău header: PNG, GIF sau JPG. Cel mult %{size}. Vor fi redimensionate la %{dimensions}px diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 26a73c3c6..b4951dc74 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -2,27 +2,34 @@ ru: simple_form: hints: + account_alias: + acct: Укажите имя пользователя@домен учетной записи, с которой вы хотите мигрировать + account_migration: + acct: Укажите имя пользователя@домен учетной записи, на которую вы хотите мигрировать account_warning_preset: text: Вы можете использовать всё, что в обычных постах — ссылки, хэштеги, упоминания и т.д. admin_account_action: + include_statuses: Пользователь будет видеть к каким постами применялись модераторские действия и выносились предупреждения send_email_notification: Пользователь получит сообщение о том, что случилось с его/её аккаунтом text_html: (Необязательно) Можно использовать обычный синтаксис. Для экономии времени <a href="%{path}">добавьте шаблоны предупреждений</a> type_html: Выберите, что делать с аккаунтом <strong>%{acct}</strong> warning_preset_id: Необязательно. Вы можете добавить собственный текст в конце шаблона defaults: - autofollow: Люди, пришедшие по этому приглашению автоматически будут подписаны на Вас - avatar: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px + autofollow: Люди, пришедшие по этому приглашению, автоматически будут подписаны на вас + avatar: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшен до %{dimensions}px bot: Этот аккаунт обычно выполяет автоматизированные действия и может не просматриваться владельцем context: Один или несколько контекстов, к которым должны быть применены фильтры + current_password: В целях безопасности введите пароль текущей учётной записи + current_username: Для подтверждения, пожалуйста, введите имя пользователя текущей учетной записи digest: Отсылается лишь после длительной неактивности, если вы в это время получали личные сообщения - discoverable_html: <a href="%{path}" target="_blank">Каталог</a> позволяет пользователям искать людей по интересам и активности. Необходимо наличие не менее %{min_followers} подписчиков + discoverable: Каталог профилей является другим способом, с помощью которого ваша учетная запись может стать доступной более широкой аудитории email: Вам будет отправлено электронное письмо с подтверждением fields: В профиле можно отобразить до 4 пунктов как таблицу - header: PNG, GIF или JPG. Максимально %{size}. Будет уменьшено до %{dimensions}px + header: Поддерживается PNG, GIF и JPG. Максимальный размер — %{size}. Будет уменьшена до %{dimensions}px inbox_url: Копировать URL с главной страницы ретранслятора, который вы хотите использовать irreversible: Отфильтрованные статусы будут утеряны навсегда, даже если в будущем фильтр будет убран locale: Язык интерфейса, e-mail писем и push-уведомлений - locked: Потребует от вас ручного подтверждения подписчиков, изменит приватность постов по умолчанию на "только для подписчиков" + locked: Подписчиков нужно будет подтверждать самостоятельно password: Укажите не менее 8 символов phrase: Будет сопоставлено независимо от присутствия в тексте или предупреждения о содержании статуса scopes: Какие API приложению будет позволено использовать. Если вы выберете самый верхний, нижестоящие будут выбраны автоматически. @@ -34,16 +41,24 @@ ru: setting_hide_network: Те, на кого вы подписаны и кто подписан на Вас, не будут отображены в вашем профиле setting_noindex: Относится к вашему публичному профилю и страницам статусов setting_show_application: В окне просмотра вашего статуса будет видно, с какого приложения он был отправлен + setting_use_blurhash: Градиенты основаны на цветах скрытых медиа, но скрывают любые детали + setting_use_pending_items: Показывать обновления в ленте только после клика вместо автоматической прокрутки username: Ваш юзернейм будет уникальным на %{domain} whole_word: Если слово или фраза состоит только из букв и цифр, сопоставление произойдёт только по полному совпадению + domain_allow: + domain: Этот домен сможет получать данные с этого сервера и его входящие данные будут обрабатываться и сохранены featured_tag: name: 'Возможно, вы захотите выбрать из них:' + form_challenge: + current_password: Вы входите в зону безопасности imports: data: Файл CSV, экспортированный с другого узла Mastodon invite_request: text: Это поможет нам рассмотреть вашу заявку sessions: otp: 'Введите код двухфакторной аутентификации, сгенерированный в мобильном приложении, или используйте один из ваших кодов восстановления:' + tag: + name: Вы можете изменить только регистр букв чтобы, например, сделать тег более читаемым user: chosen_languages: Если выбрано, то в публичных лентах будут показаны только посты на выбранных языках labels: @@ -51,9 +66,14 @@ ru: fields: name: Пункт value: Значение + account_alias: + acct: Обработчик старой учётной записи + account_migration: + acct: Обработчик новой учётной записи account_warning_preset: text: Текст шаблона admin_account_action: + include_statuses: Включать в письмо жалобы на посты send_email_notification: Уведомить юзера по e-mail text: Свой текст предупреждения type: Действие @@ -64,7 +84,7 @@ ru: suspend: Заблокировать и безвозвратно удалить все данные аккаунта warning_preset_id: Использовать шаблон defaults: - autofollow: Пригласите подписаться на Ваш аккаунт + autofollow: С подпиской на ваш аккаунт avatar: Аватар bot: Это аккаунт бота chosen_languages: Фильтр языков @@ -74,7 +94,7 @@ ru: current_password: Текущий пароль data: Данные discoverable: Показывать этот аккаунт в каталоге - display_name: Показываемое имя + display_name: Отображаемое имя email: Адрес e-mail expires_in: Истекает через fields: Метаданные профиля @@ -83,20 +103,21 @@ ru: irreversible: Удалять, а не скрывать locale: Язык интерфейса locked: Сделать аккаунт закрытым - max_uses: Макс. число использований + max_uses: Максимальное число использований new_password: Новый пароль - note: О Вас + note: О себе otp_attempt: Двухфакторный код password: Пароль phrase: Слово или фраза setting_advanced_layout: Включить многоколоночный интерфейс setting_aggregate_reblogs: Группировать продвижения в лентах setting_auto_play_gif: Автоматически проигрывать анимированные GIF - setting_boost_modal: Показывать диалог подтверждения перед продвижением + setting_boost_modal: Всегда спрашивать перед продвижением + setting_crop_images: Кадрировать изображения в нераскрытых постах до 16:9 setting_default_language: Язык отправляемых статусов setting_default_privacy: Видимость постов setting_default_sensitive: Всегда отмечать медиаконтент как чувствительный - setting_delete_modal: Показывать диалог подтверждения перед удалением + setting_delete_modal: Всегда спрашивать перед удалении поста setting_display_media: Отображение медиафайлов setting_display_media_default: По умолчанию setting_display_media_hide_all: Скрывать все @@ -108,7 +129,10 @@ ru: setting_show_application: Раскрывать приложение, с которого отправляются статусы setting_system_font_ui: Использовать шрифт системы по умолчанию setting_theme: Тема сайта - setting_unfollow_modal: Показывать диалог подтверждения перед тем, как отписаться от аккаунта + setting_trends: Показывать сегодняшние тренды + setting_unfollow_modal: Всегда спрашивать перед отпиской от аккаунта + setting_use_blurhash: Показать цветные градиенты для скрытых медиа + setting_use_pending_items: Медленный режим severity: Строгость type: Тип импорта username: Имя пользователя @@ -120,6 +144,8 @@ ru: must_be_follower: Заблокировать уведомления не от подписчиков must_be_following: Заблокировать уведомления от людей, на которых вы не подписаны must_be_following_dm: Заблокировать личные сообщения от людей, на которых вы не подписаны + invite: + comment: Комментарий invite_request: text: Почему вы хотите присоединиться к нам? notification_emails: @@ -131,6 +157,12 @@ ru: pending_account: Отправлять e-mail при наличии новых заявок на присоединение reblog: Уведомлять по e-mail, когда кто-то продвинул ваш статус report: Уведомлять по e-mail при создании жалобы + trending_tag: Отправлять e-mail при непроверенных хэштегах в трендах + tag: + listable: Разрешить показ хэштега в поиске или в каталоге профилей + name: Хэштег + trendable: Разрешить показ хэштега в трендах + usable: Разрешить использовать этот хэштег в постах 'no': Нет recommended: Рекомендуется required: diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 7e9c0f277..3d5402b88 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -2,9 +2,14 @@ sk: simple_form: hints: + account_alias: + acct: Urči prezyvku@domenu účtu, s ktorého sa chceš presunúť + account_migration: + acct: Urči prezyvku@domenu účtu, na ktorý sa chceš presunúť account_warning_preset: text: Môžeš používať rovnakú syntaxiu ako v rámci príspevkov, čiže URL, haštagy, a spomenutia admin_account_action: + include_statuses: Užívateľ uvidí, ktoré príspevky majú za následok moderačný zásah, alebo upozornenie send_email_notification: Užívateľ dostane vysvetlenie ohľadom toho, čo sa stalo s ich účtom text_html: Voliteľné. Môžeš používať rovnakú syntaxiu ako v príspevkoch. Môžeš pridať <a href="%{path}">varovné predlohy</a> a ušetriť tak čas type_html: Vyber si, čo urobiť s účtom <strong>%{acct}</strong> @@ -14,8 +19,9 @@ sk: avatar: PNG, GIF alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px bot: Tento účet vykonáva hlavne automatizované akcie, a je pravdepodobne nespravovaný context: Jedno, alebo viac kritérií, v ktorých má byť filtrovanie uplatnené + current_password: Z bezpečtnostných dôvodov prosím zadaj heslo súčasného účtu + current_username: Pre potvrdenie prosím zadaj prezývku súčasného účtu digest: Odoslané iba v prípade dlhodobej neprítomnosti, a len ak si obdržal/a nejaké osobné správy kým si bol/a preč - discoverable_html: Táto <a href="%{path}" target="_blank">databáza</a> umožňuje ľudom nájsť profily podľa záujmu a aktívnosti. Vyžaduje aby mali aspoň %{min_followers} sledovateľov email: Bude ti odoslaný potvrdzujúci email fields: Až štyri položky môžeš mať na svojom profile zobrazené vo forme tabuľky header: PNG, GIF, alebo JPG. Maximálne %{size}. Bude zmenšený na %{dimensions}px @@ -34,10 +40,16 @@ sk: setting_hide_network: Koho následuješ, a kto následuje teba, nebude zobrazené na tvojom profile setting_noindex: Ovplyvňuje verejný profil a stránky s príspevkami setting_show_application: Aplikácia, ktorú používaš na písanie príspevkov, bude zobrazená v podrobnom náhľade jednotlivých tvojích príspevkov + setting_use_blurhash: Prechody sú založené na farbách skrytých vizuálov, ale zahaľujú akékoľvek podrobnosti + setting_use_pending_items: Skry aktualizovanie časovej osi tak, aby bola načitávaná iba po kliknutí, namiesto samostatného posúvania username: Tvoja prezývka bude unikátna pre server %{domain} whole_word: Ak je kľúčové slovo, alebo fráza poskladaná iba s písmen a čísel, bude použité iba ak sa zhoduje s celým výrazom + domain_allow: + domain: Táto doména bude schopná získavať dáta z tohto servera, a prichádzajúce dáta ním budú spracovávané a uložené featured_tag: name: 'Možno by si chcel/a použiť niektoré z týchto:' + form_challenge: + current_password: Vstupuješ do zabezpečenej časti imports: data: CSV súbor vyexportovaný z iného Mastodon serveru invite_request: @@ -51,9 +63,14 @@ sk: fields: name: Označenie value: Obsah + account_alias: + acct: Adresa starého účtu + account_migration: + acct: Adresa nového účtu account_warning_preset: text: Text predlohy admin_account_action: + include_statuses: Zahrnúť nahlásené príspevky v emaile send_email_notification: Oznam užívateľovi cez email text: Špecifické varovanie type: Úkon @@ -65,6 +82,7 @@ sk: warning_preset_id: Použi varovnú predlohu defaults: autofollow: Pozvi k následovaniu tvojho profilu + avatar: Maskot bot: Toto je automatizovaný bot účet chosen_languages: Filtruj jazyky confirm_new_password: Znovu tvoje nové heslo, pre potvrdenie @@ -92,6 +110,7 @@ sk: setting_aggregate_reblogs: Zoskupuj vyzdvihnutia v časovej osi setting_auto_play_gif: Automaticky prehrávaj animované GIFy setting_boost_modal: Zobrazuj potvrdzovacie okno pred povýšením + setting_crop_images: Orež obrázky v nerozbalených príspevkoch na 16x9 setting_default_language: Píšeš v jazyku setting_default_privacy: Súkromie príspevkov setting_default_sensitive: Označ všetky mediálne súbory ako chúlostivé @@ -100,14 +119,17 @@ sk: setting_display_media_default: Štandard setting_display_media_hide_all: Ukry všetky setting_display_media_show_all: Ukáž všetky - setting_expand_spoilers: Stále rozbaľ príspevky označené varovaním o obsahu + setting_expand_spoilers: Stále rozbaľ príspevky označené varovaním o chúlostivom obsahu setting_hide_network: Ukry svoju sieť kontaktov setting_noindex: Nezaraďuj príspevky do indexu pre vyhľadávče setting_reduce_motion: Mierni pohyb pri animáciách setting_show_application: Zverejni akú aplikáciu používaš na posielanie príspevkov setting_system_font_ui: Použi základné systémové písmo setting_theme: Vzhľad webu + setting_trends: Ukáž dnešné trendy setting_unfollow_modal: Vyžaduj potvrdenie pred skončením sledovania iného užívateľa + setting_use_blurhash: Ukáž farebné prechody pre skryté médiá + setting_use_pending_items: Pomalý režim severity: Závažnosť type: Typ importu username: Prezývka @@ -118,7 +140,11 @@ sk: interactions: must_be_follower: Blokuj oboznámenia od užívateľov, ktorí ma nenásledujú must_be_following: Blokuj oboznámenia od ľudí, ktorých nesledujem - must_be_following_dm: Blokuj súkromné správy od ľudí ktorých nesledujem + must_be_following_dm: Blokuj priame správy od ľudí, ktorých nesleduješ + invite: + comment: Okomentuj + invite_request: + text: Prečo sa k nám chceš pridať? notification_emails: digest: Zasielať súhrnné emaily favourite: Zaslať email, ak si niekto obľúbi tvoj príspevok @@ -128,7 +154,15 @@ sk: pending_account: Zaslať email, ak treba prehodnotiť nový účet reblog: Zaslať email, ak niekto re-tootne tvoj príspevok report: Zaslať email, ak niekto podá nové nahlásenie + trending_tag: Pošli email, ak sa neoverený haštag stane populárnym + tag: + listable: Povoľ zobrazovanie tohto haštagu v zozname profilov + name: Haštag + trendable: Povoľ zobrazovanie tohto haštagu medzi trendujúcimi + usable: Povoľ používanie tohto haštagu v príspevkoch 'no': Nie + recommended: Odporúčané required: + mark: "*" text: povinné 'yes': Áno diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index 2e0495551..771edf383 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -2,6 +2,13 @@ sl: simple_form: hints: + account_warning_preset: + text: Lahko uporabite skladnjo tuta, kot so URL-ji, ključniki in omembe + admin_account_action: + send_email_notification: Uporabnik bo prejel razlago, kaj se je zgodilo z njihovim računom + text_html: Neobvezno. Lahko uporabite skladnjo tuta. <a href="%{path}">Prednastavite opozorila</a>, da prihranite čas + type_html: Izberite, kaj boste storili z <strong>%{acct}</strong> + warning_preset_id: Neobvezno. Še vedno lahko dodate besedilo po meri na konec prednastavitve defaults: autofollow: Osebe, ki se prijavijo prek povabila, vas bodo samodejno sledile avatar: PNG, GIF ali JPG. Največ %{size}. Zmanjšana bo na %{dimensions}px @@ -18,15 +25,26 @@ sl: password: Uporabite najmanj 8 znakov phrase: Se bo ujemal, ne glede na začetnice v tekstu ali opozorilo o vsebini troba scopes: Do katerih API-jev bo imel program dostop. Če izberete obseg najvišje ravni, vam ni treba izbrati posameznih. + setting_aggregate_reblogs: Ne prikažite novih spodbud za tute, ki so bili nedavno spodbujeni (vpliva samo na novo prejete spodbude) + setting_default_sensitive: Občutljivi mediji so privzeto skriti in jih je mogoče razkriti s klikom setting_display_media_default: Skrij medij, ki je označen kot občutljiv setting_display_media_hide_all: Vedno skrij vse medije setting_display_media_show_all: Vedno pokaži medij, ki je označen kot občutljiv setting_hide_network: Kogar spremljate in kdo vas spremlja ne bo prikazano na vašem profilu setting_noindex: Vpliva na vaš javni profil in na strani s stanjem + setting_show_application: Aplikacija, ki jo uporabljate za tutanje, bo prikazana v podrobnem pogledu vaših tutov + setting_use_blurhash: Gradienti temeljijo na barvah skrite vizualne slike, vendar zakrivajo vse podrobnosti + setting_use_pending_items: Skrij posodobitev časovnice za klikom namesto samodejnega posodabljanja username: Vaše uporabniško ime bo edinstveno na %{domain} whole_word: Ko je ključna beseda ali fraza samo alfanumerična, se bo uporabljala le, če se bo ujemala s celotno besedo + domain_allow: + domain: Ta domena bo lahko prejela podatke s tega strežnika, dohodni podatki z nje pa bodo obdelani in shranjeni + featured_tag: + name: 'Morda boste želeli uporabiti eno od teh:' imports: data: Izvožena CSV datoteka iz drugega Mastodon vozlišča + invite_request: + text: To nam bo pomagalo pregledati vašo prijavo sessions: otp: 'Vnesite dvomestno kodo, ki je ustvarjena z aplikacijo na telefonu, ali uporabite eno od vaših obnovitvenih kod:' user: @@ -36,6 +54,18 @@ sl: fields: name: Oznaka value: Vsebina + account_warning_preset: + text: Prednastavljeno besedilo + admin_account_action: + send_email_notification: Obvesti uporabnika po e-pošti + text: Opozorilo po meri + type: Dejanje + types: + disable: Onemogoči + none: Ne naredi ničesar + silence: Utišaj + suspend: Suspendiraj in nepovratno izbriši podatke računa + warning_preset_id: Uporabi prednastavljeno opozorilo defaults: autofollow: Povabite, da sledi vašemu računu avatar: Podoba @@ -46,6 +76,7 @@ sl: context: Filtriraj vsebino current_password: Trenutno geslo data: Podatki + discoverable: Dodaj ta račun v imenik display_name: Prikazno ime email: E-poštni naslov expires_in: Preteče po @@ -57,9 +88,12 @@ sl: locked: Zaklenjen račun max_uses: Največje število uporabnikov new_password: Novo geslo + note: Bio otp_attempt: Dvofaktorska koda password: Geslo phrase: Ključna beseda ali fraza + setting_advanced_layout: Omogoči napredni spletni vmesnik + setting_aggregate_reblogs: Skupinske spodbude na časovnicah setting_auto_play_gif: Samodejno predvajanje animiranih GIF-ov setting_boost_modal: Pred sunkom pokaži potrditveno okno setting_default_language: Jezik objavljanja @@ -74,27 +108,37 @@ sl: setting_hide_network: Skrij svoje omrežje setting_noindex: Odsotnost indeksiranja iskalnikov setting_reduce_motion: Zmanjšanje premikanja v animacijah + setting_show_application: Razkrij aplikacijo za pošiljanje tutov setting_system_font_ui: Uporabi privzeto pisavo sistema setting_theme: Tema strani setting_unfollow_modal: Pokaži potrditveno okno, preden nekoga prenehamo slediti + setting_use_blurhash: Pokaži barvite gradiente za skrite medije + setting_use_pending_items: Počasen način severity: Strogost type: Vrsta uvoza username: Uporabniško ime username_or_email: Uporabniško ime ali E-pošta whole_word: Celotna beseda + featured_tag: + name: Ključnik interactions: must_be_follower: Blokiraj obvestila nesledilcev must_be_following: Blokiraj obvestila oseb, ki jim ne sledite must_be_following_dm: Blokiraj neposredna sporočila oseb, ki jim ne sledite + invite_request: + text: Zakaj se želite pridružiti? notification_emails: digest: Pošlji izvlečke e-pošt favourite: Pošlji e-pošto, ko nekdo doda vaše stanje med priljubljene follow: Pošlji e-pošto, ko vas nekdo sledi follow_request: Pošlji e-pošto, ko vam nekdo želi slediti mention: Pošlji e-pošto, ko vas nekdo omeni + pending_account: Pošlji e-pošto, ko je potreben pregled novega računa reblog: Pošlji e-pošto, ko nekdo sune vaše stanje report: Pošlji e-pošto, ko je oddana nova prijava 'no': Ne + recommended: Priporočeno required: + mark: "*" text: zahtevano 'yes': Da diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 04ef12c9a..b365bdda8 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -15,7 +15,6 @@ sq: bot: Kjo llogari kryesisht bën veprime të automatizuara dhe mund të mos mbikëqyret dot context: Një ose disa kontekste kur duhet të zbatohet filtri digest: I dërguar vetëm pas një periudhe të gjatë pasiviteti dhe vetëm nëse keni marrë ndonjë mesazh personal gjatë mungesës suaj - discoverable_html: <a href="%{path}" target="_blank">Drejtoria</a> u lejon njerëzve të gjejnë llogari bazuar në interesat dhe veprimtarinë. Lyp të paktën %{min_followers} ndjekës email: Do t’ju dërgohet një email ripohimi fields: Te profili juaj mund të keni deri në 4 objekte të shfaqur si tabelë header: PNG, GIF ose JPG. E shumta %{size}. Do të ripërmasohet në %{dimensions}px diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml index a097be5dd..6901b842c 100644 --- a/config/locales/simple_form.sr.yml +++ b/config/locales/simple_form.sr.yml @@ -15,7 +15,6 @@ sr: bot: Овај налог углавном врши аутоматизоване радње и можда се не надгледа context: Један или више контекста у којима треба да се примени филтер digest: Послато после дужег периода неактивности са прегледом свих битних ствари које сте добили док сте били одсутни - discoverable_html: <a href="%{path}" target="_blank">Директоријум</a> омогућава људима да пронађу налоге засноване на интересима и активности. Захтева бар %{min_followers} пратиоца email: Биће вам послата е-пошта са потврдом fields: Можете имати до 4 ставке приказане као табела на вашем профилу header: PNG, GIF или JPG. Највише %{size}. Биће смањена на %{dimensions}px diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 171714ab0..d310bab34 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -2,11 +2,18 @@ sv: simple_form: hints: + account_alias: + acct: Ange användarnamn@domän för kontot du flyttar från + account_migration: + acct: Ange användarnamn@domän för kontot du flyttar till account_warning_preset: text: Du kan använda inläggssyntax som webbadresser, hashtaggar och omnämnanden admin_account_action: + include_statuses: Användaren ser de toots som orsakat moderering eller varning send_email_notification: Användaren kommer att få en förklaring av vad som hände med sitt konto + text_html: Extra. Du kan använda toot syntax. Du kan <a href="%{path}">lägga till förvalda varningar</a> för att spara tid type_html: Välj vad du vill göra med <strong>%{acct}</strong> + warning_preset_id: Extra. Du kan lägga till valfri text i slutet av förinställningen defaults: autofollow: Användarkonton som skapas genom din inbjudan kommer automatiskt följa dig avatar: PNG, GIF eller JPG. Högst %{size}. Kommer att skalas ner till %{dimensions}px @@ -19,8 +26,14 @@ sv: locale: Användargränssnittets språk, e-post och push-aviseringar locked: Kräver att du manuellt godkänner följare password: Använd minst 8 tecken + setting_display_media_default: Dölj media markerad som känslig + setting_display_media_hide_all: Dölj alltid all media + setting_display_media_show_all: Visa alltid media markerad som känslig setting_hide_network: Vem du följer och vilka som följer dig kommer inte att visas på din profilsida setting_noindex: Påverkar din offentliga profil och statussidor + username: Ditt användarnamn måste vara unikt på %{domain} + featured_tag: + name: 'Du kan vilja använda en av dessa:' imports: data: CSV-fil som exporteras från en annan Mastodon-instans sessions: @@ -51,17 +64,22 @@ sv: note: Biografi otp_attempt: Tvåstegslösenord password: Lösenord + phrase: Nyckelord eller fras setting_auto_play_gif: Auto-play animerade GIF-filer setting_boost_modal: Visa bekräftelsedialog innan du knuffar setting_default_language: Språk setting_default_privacy: Postintegritet setting_default_sensitive: Markera alltid media som känsligt setting_delete_modal: Visa bekräftelsedialog innan du raderar en toot + setting_display_media: Mediavisning + setting_display_media_hide_all: Dölj alla + setting_display_media_show_all: Visa alla setting_hide_network: Göm ditt nätverk setting_noindex: Uteslutning av sökmotorindexering setting_reduce_motion: Minska rörelser i animationer setting_system_font_ui: Använd systemets standardfont setting_theme: Sidans tema + setting_trends: Visa dagens trender setting_unfollow_modal: Visa bekräftelse innan du slutar följa någon severity: Strikthet type: Importtyp @@ -71,6 +89,10 @@ sv: must_be_follower: Blockera meddelanden från icke-följare must_be_following: Blockera meddelanden från personer du inte följer must_be_following_dm: Blockera direktmeddelanden från personer du inte följer + invite: + comment: Kommentar + invite_request: + text: Varför vill du gå med? notification_emails: digest: Skicka sammandrag via e-post favourite: Skicka e-post när någon favoriserar din status @@ -79,6 +101,8 @@ sv: mention: Skicka e-post när någon nämner dig reblog: Skicka e-post när någon knuffar din status 'no': Nej + recommended: Rekommenderad required: + mark: "*" text: obligatorisk 'yes': Ja diff --git a/config/locales/simple_form.ta.yml b/config/locales/simple_form.ta.yml index 4320953ce..edf731690 100644 --- a/config/locales/simple_form.ta.yml +++ b/config/locales/simple_form.ta.yml @@ -1 +1,53 @@ +--- ta: + simple_form: + hints: + account_alias: + acct: நீங்கள் இங்கே நகர்த்த விரும்பும் கணக்கின் பயனர் பெயர் + account_migration: + acct: நீங்கள் இங்கே நகர்த்த விரும்பும் கணக்கின் பயனர் பெயர் username@domain + admin_account_action: + send_email_notification: தங்கள் கணக்கிற்கு என்ன நேர்ந்தது என்ற விவரம் பயனரால் பெறப்படும் + defaults: + autofollow: அழைப்பின் வாயிலாக புதிய கணக்கை துவங்குவோர் தாமாகவே உங்களை பின்தொடர்வர் + avatar: PNG, GIF or JPG. அதிகபட்சம் %{size}, %{dimensions}px க்கு குறைக்கப்படும் + bot: இந்த கணக்கு முக்கியமாக தானியங்கு செயல்களைச் செய்கிறது மற்றும் கண்காணிக்கப்படாமல் போகலாம் + current_password: பாதுகாப்பு காரணங்களுக்காக, தங்களின் தற்போதைய கணக்கின் கடவுச்சொல்லை உள்ளீடு செய்க + current_username: உறுதிசெய்ய, தற்போதைய கணக்கின் பயனர் பெயரை உள்ளிடுக + email: உறுதிசெய் மின்னஞ்சல் உங்களுக்கு அனுப்பப்படும் + password: குறைந்தது 8 எழுத்துக்களைப் பயன்படுத்தவும் + setting_display_media_hide_all: எப்போதும் எல்லா ஊடகங்களையும் மறைக்கவும் + setting_display_media_show_all: உணர்ச்சி வயப்படு (Sensitive) குறிக்கப்பட்ட மீடியாவை எப்போதும் காட்டுங்கள் + labels: + account: + fields: + name: லேபிள் + admin_account_action: + types: + disable: உள்நுழைவை முடக்கு + none: எதுவும் செய்யாதே + silence: சைலன்ஸ் + defaults: + avatar: அவதார் + bot: இது ஒரு போட்(bot) கணக்கு + chosen_languages: மொழிவாரியாக தேர்ந்தெடுக்கவும் + confirm_new_password: புதிய கடவுச்சொல்லை உறுதிப்படுத்தவும் + confirm_password: கடவுச்சொல்லை உறுதிப்படுத்தவும் + context: அமைப்பு + current_password: தற்போதைய கடவுச்சொல் + data: தரவு + discoverable: கோப்பகத்தில் இந்த கணக்கை பட்டியலிடுங்கள் + email: மின்னஞ்சல் முகவரி + header: தலைப்பு + locale: பயனர் இடைமுக மொழி + locked: கணக்கைப் பூட்டு + max_uses: பயன்பாடுகளின் அதிகபட்ச எண்ணிக்கை + new_password: புதிய கடவுச்சொல் + note: சுயசரிதை + password: கடவுச்சொல் + setting_use_pending_items: மெதுவான பயன்முறை + username: பயனர்பெயர் + username_or_email: பயனர் பெயர் அல்லது மின்னஞ்சல் + required: + text: தேவை + 'yes': ஆம் diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index a2d430558..ba353c713 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -15,9 +15,8 @@ th: bot: บัญชีนี้ทำการกระทำอัตโนมัติเป็นหลักและอาจไม่ได้รับการสังเกตการณ์ context: บริบทจำนวนหนึ่งหรือมากกว่าที่ตัวกรองควรใช้ digest: ส่งเฉพาะหลังจากไม่มีการใช้งานเป็นเวลานานและในกรณีที่คุณได้รับข้อความส่วนบุคคลใด ๆ เมื่อคุณไม่อยู่เท่านั้น - discoverable_html: <a href="%{path}" target="_blank">ไดเรกทอรี</a> ช่วยให้ผู้คนค้นหาบัญชีตามความสนใจและกิจกรรม ต้องการอย่างน้อย %{min_followers} ผู้ติดตาม email: คุณจะได้รับอีเมลยืนยัน - fields: คุณสามารถมีได้มากถึง 4 รายการแสดงผลเป็นตารางในโปรไฟล์ของคุณ + fields: คุณสามารถมีได้มากถึง 4 รายการแสดงเป็นตารางในโปรไฟล์ของคุณ header: PNG, GIF หรือ JPG สูงสุด %{size} จะถูกย่อขนาดเป็น %{dimensions}px inbox_url: คัดลอก URL จากหน้าแรกของรีเลย์ที่คุณต้องการใช้ irreversible: โพสต์ที่กรองจะหายไปอย่างถาวร แม้ว่าจะเอาตัวกรองออกในภายหลัง @@ -27,22 +26,29 @@ th: phrase: จะถูกจับคู่โดยไม่คำนึงถึงตัวอักษรใหญ่เล็กในข้อความหรือคำเตือนเนื้อหาของโพสต์ scopes: API ใดที่แอปพลิเคชันจะได้รับอนุญาตให้เข้าถึง หากคุณเลือกขอบเขตระดับบนสุด คุณไม่จำเป็นต้องเลือกแต่ละขอบเขต setting_aggregate_reblogs: ไม่แสดงการดันใหม่สำหรับโพสต์ที่เพิ่งดัน (มีผลต่อการดันที่ได้รับใหม่เท่านั้น) + setting_default_sensitive: ซ่อนสื่อที่ละเอียดอ่อนโดยค่าเริ่มต้นและสามารถเปิดเผยได้ด้วยการคลิก setting_display_media_default: ซ่อนสื่อที่ถูกทำเครื่องหมายว่าละเอียดอ่อน setting_display_media_hide_all: ซ่อนสื่อทั้งหมดเสมอ setting_display_media_show_all: แสดงสื่อที่ถูกทำเครื่องหมายว่าละเอียดอ่อนเสมอ setting_hide_network: จะไม่แสดงผู้ที่คุณติดตามและผู้ที่ติดตามคุณในโปรไฟล์ของคุณ setting_noindex: มีผลต่อโปรไฟล์สาธารณะและหน้าสถานะของคุณ - setting_show_application: จะแสดงผลแอปพลิเคชันที่คุณใช้เพื่อโพสต์ในมุมมองโดยละเอียดของโพสต์ของคุณ - username: ชื่อผู้ใช้ของคุณจะไม่ซ้ำกันบน %{domain} + setting_show_application: จะแสดงแอปพลิเคชันที่คุณใช้เพื่อโพสต์ในมุมมองโดยละเอียดของโพสต์ของคุณ + setting_use_blurhash: การไล่ระดับสีอิงตามสีของภาพที่ซ่อนอยู่แต่ทำให้รายละเอียดใด ๆ คลุมเครือ + setting_use_pending_items: ซ่อนการอัปเดตเส้นเวลาไว้หลังการคลิกแทนที่จะเลื่อนฟีดโดยอัตโนมัติ + username: ชื่อผู้ใช้ของคุณจะไม่ซ้ำกันใน %{domain} whole_word: เมื่อคำสำคัญหรือวลีมีแค่ตัวอักษรและตัวเลข จะถูกใช้หากตรงกันทั้งคำเท่านั้น featured_tag: name: 'คุณอาจต้องการใช้หนึ่งในนี้:' + form_challenge: + current_password: คุณกำลังเข้าสู่พื้นที่ปลอดภัย imports: data: ไฟล์ CSV ที่ส่งออกจากเซิร์ฟเวอร์ Mastodon อื่น + invite_request: + text: นี่จะช่วยให้เราตรวจทานใบสมัครของคุณ sessions: otp: 'ป้อนรหัสสองปัจจัยที่สร้างโดยแอปในโทรศัพท์ของคุณหรือใช้หนึ่งในรหัสกู้คืนของคุณ:' user: - chosen_languages: เมื่อกาเครื่องหมาย จะแสดงผลเฉพาะโพสต์ในภาษาที่เลือกในเส้นเวลาสาธารณะ + chosen_languages: เมื่อกาเครื่องหมาย จะแสดงเฉพาะโพสต์ในภาษาที่เลือกในเส้นเวลาสาธารณะ labels: account: fields: @@ -71,7 +77,7 @@ th: current_password: รหัสผ่านปัจจุบัน data: ข้อมูล discoverable: แสดงรายการบัญชีนี้ในไดเรกทอรี - display_name: ชื่อที่แสดงผล + display_name: ชื่อที่แสดง email: ที่อยู่อีเมล expires_in: หมดอายุหลังจาก fields: ข้อมูลเมตาโปรไฟล์ @@ -86,6 +92,7 @@ th: otp_attempt: รหัสสองปัจจัย password: รหัสผ่าน phrase: คำสำคัญหรือวลี + setting_advanced_layout: เปิดใช้งานส่วนติดต่อเว็บขั้นสูง setting_aggregate_reblogs: จัดกลุ่มการดันในเส้นเวลา setting_auto_play_gif: เล่น GIF แบบเคลื่อนไหวโดยอัตโนมัติ setting_boost_modal: แสดงกล่องโต้ตอบการยืนยันก่อนดัน @@ -93,7 +100,7 @@ th: setting_default_privacy: ความเป็นส่วนตัวของโพสต์ setting_default_sensitive: ทำเครื่องหมายสื่อว่าละเอียดอ่อนเสมอ setting_delete_modal: แสดงกล่องโต้ตอบการยืนยันก่อนลบโพสต์ - setting_display_media: การแสดงผลสื่อ + setting_display_media: การแสดงสื่อ setting_display_media_default: ค่าเริ่มต้น setting_display_media_hide_all: ซ่อนทั้งหมด setting_display_media_show_all: แสดงทั้งหมด @@ -104,7 +111,10 @@ th: setting_show_application: เปิดเผยแอปพลิเคชันที่ใช้ในการส่งโพสต์ setting_system_font_ui: ใช้แบบอักษรเริ่มต้นของระบบ setting_theme: ชุดรูปแบบไซต์ + setting_trends: แสดงแนวโน้มของวันนี้ setting_unfollow_modal: แสดงกล่องโต้ตอบการยืนยันก่อนเลิกติดตามใครสักคน + setting_use_blurhash: แสดงการไล่ระดับสีที่มีสีสันสำหรับสื่อที่ซ่อนอยู่ + setting_use_pending_items: โหมดช้า severity: ความรุนแรง type: ชนิดการนำเข้า username: ชื่อผู้ใช้ @@ -116,15 +126,25 @@ th: must_be_follower: ปิดกั้นการแจ้งเตือนจากที่ไม่ใช่ผู้ติดตาม must_be_following: ปิดกั้นการแจ้งเตือนจากผู้คนที่คุณไม่ได้ติดตาม must_be_following_dm: ปิดกั้นข้อความโดยตรงจากผู้คนที่คุณไม่ได้ติดตาม + invite: + comment: ความคิดเห็น + invite_request: + text: ทำไมคุณจึงต้องการเข้าร่วม? notification_emails: digest: ส่งอีเมลสรุป favourite: ส่งอีเมลเมื่อใครสักคนชื่นชอบสถานะของคุณ follow: ส่งอีเมลเมื่อใครสักคนติดตามคุณ follow_request: ส่งอีเมลเมื่อใครสักคนขอติดตามคุณ mention: ส่งอีเมลเมื่อใครสักคนกล่าวถึงคุณ + pending_account: ส่งอีเมลเมื่อบัญชีใหม่ต้องการการตรวจทาน reblog: ส่งอีเมลเมื่อใครสักคนดันสถานะของคุณ report: ส่งอีเมลเมื่อมีการส่งรายงานใหม่ + tag: + name: แฮชแท็ก + usable: อนุญาตให้โพสต์ใช้แฮชแท็กนี้ 'no': ไม่ + recommended: แนะนำ required: + mark: "*" text: ต้องระบุ 'yes': ใช่ diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index 68b4c24c9..4d022368a 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -2,51 +2,170 @@ tr: simple_form: hints: + account_alias: + acct: Taşımak istediğiniz hesabın kullanıcı-adı@alan-adını belirtin + account_migration: + acct: Taşınmak istediğiniz hesabın kullanıcı-adı@alan-adını belirtin + account_warning_preset: + text: URL'ler, etiketler ve bahsetmeler gibi toot sözdizimleri kullanabilirsiniz admin_account_action: + include_statuses: Kullanıcı hangi tootların denetleme eylemi ya da uyarısına neden olduğunu görecektir send_email_notification: Kullanıcı, hesabına ne olduğu hakkında bir bildirim alacak + text_html: İsteğe bağlı. Toot sözdizimleri kullanabilirsiniz. Zamandan kazanmak için <a href="%{path}">uyarı ön-ayarları ekleyebilirsiniz</a> + type_html: "<strong>%{acct}</strong> ile ne yapılacağını seçin" warning_preset_id: İsteğe bağlı. Hazır ayarın sonuna hala özel metin ekleyebilirsiniz defaults: autofollow: Davetiyeyle kaydolan kişiler sizi otomatik olarak takip eder avatar: En fazla %{size} olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. %{dimensions}px büyüklüğüne indirgenecektir + bot: Bu hesap temelde otomatik eylemler gerçekleştirir ve izlenmeyebilir + context: Filtrenin geçerli olması gereken bir veya daha fazla içerik + current_password: Güvenlik nedeniyle lütfen şu anki hesabın parolasını girin + current_username: Onaylamak için lütfen şu anki hesabın kullanıcı adını girin + digest: Yalnızca uzun süre kullanılmadığında ve yalnızca yokluğunda kişisel mesajlar aldıysanız gönderilir + discoverable: Profil dizini, hesabınızın daha geniş bir kitleye ulaşmasının başka bir yoludur + email: Onay e-postası gönderilecek + fields: Profilinizde tablo olarak görüntülenen en fazla 4 ögeye sahip olabilirsiniz header: En fazla %{size} olacak şekilde PNG, GIF veya JPG formatında yükleyiniz. %{dimensions}px büyüklüğüne indirgenecektir. + inbox_url: Kullanmak istediğiniz aktarıcının ön sayfasından URL'yi kopyalayın + irreversible: Filtre uygulanmış tootlar, filtre daha sonra çıkartılsa bile geri dönüşümsüz biçimde kaybolur + locale: Kullanıcı arayüzünün dili, e-postalar ve push bildirimleri locked: Takipçilerinizi manuel olarak kabul etmenizi ve gönderilerinizi varsayılan olarak sadece takipçilerinizin göreceği şekilde paylaşmanızı sağlar. + password: En az 8 karakter kullanın + phrase: Metnin büyük/küçük harf durumundan veya tootun içerik uyarısından bağımsız olarak eşleştirilecek + scopes: Uygulamanın erişmesine izin verilen API'ler. Üst seviye bir kapsam seçtiyseniz, bireysel kapsam seçmenize gerek yoktur. + setting_aggregate_reblogs: Yakın zamanda yinelenmiş tootlar için yeni yinelemeler gösterme (yalnızca yeni alınan yinelemeleri etkiler) + setting_default_sensitive: Hassas medya varsayılan olarak gizlenir ve bir tıklama ile görüntülenebilir + setting_display_media_default: Hassas olarak işaretlenmiş medyayı gizle + setting_display_media_hide_all: Tüm medyayı gizle + setting_display_media_show_all: Hassas olarak işaretlenmiş medyayı göster + setting_hide_network: Takip edilenler ve takipçiler profilinizde gösterilmeyecek + setting_noindex: Herkese açık profilinizi ve durum sayfalarınızı etkiler + setting_show_application: Tootlamak için kullandığınız uygulama, tootlarınızın detaylı görünümünde gösterilecektir + setting_use_blurhash: Gradyenler gizli görsellerin renklerine dayanır, ancak detayları gizler + setting_use_pending_items: Zaman çizelgesi güncellemelerini, akışı otomatik olarak kaydırmak yerine bir tıklamanın arkasına gizleyin + username: Kullanıcı adınız %{domain} alanında benzersiz olacak + whole_word: Anahtar kelime veya kelime öbeği yalnızca alfasayısal olduğunda, yalnızca tüm sözcükle eşleşirse uygulanır + domain_allow: + domain: Bu alan adı, bu sunucudan veri alabilecek ve ondan gelen veri işlenecek ve saklanacaktır + featured_tag: + name: 'Bunlardan birini kullanmak isteyebilirsiniz:' + form_challenge: + current_password: Güvenli bir bölgeye giriyorsunuz imports: data: Diğer Mastodon sunucusundan dışarı aktardığınız CSV dosyası + invite_request: + text: Bu, başvurunuzu gözden geçirmemize yardımcı olacaktır sessions: otp: Telefonunuzdaki two-factor kodunuzu giriniz veya kurtarma kodlarınızdan birini giriniz. + tag: + name: Harflerin, örneğin daha okunabilir yapmak için, sadece büyük/küçük harf durumlarını değiştirebilirsiniz + user: + chosen_languages: İşaretlendiğinde, yalnızca seçilen dillerdeki tootlar genel zaman çizelgelerinde görüntülenir labels: + account: + fields: + name: Etiket + value: İçerik + account_alias: + acct: Eski hesabın tanıtıcısı + account_migration: + acct: Yeni hesabın tanıtıcısı + account_warning_preset: + text: Ön-ayar metni + admin_account_action: + include_statuses: Birdirilen tootları e-postaya dahil et + send_email_notification: E-postayla kullanıcıyı bilgilendir + text: Özel uyarı + type: Eylem + types: + disable: Devre dışı + none: Hiç birşey + silence: Sessiz + suspend: Hesap verilerini askıya alın ve geri alınamaz şekilde silin + warning_preset_id: Bir uyarı ön-ayarı kullan defaults: + autofollow: Hesabınızı takip etmeye davet edin avatar: Profil resmi + bot: Bu bir bot hesabı + chosen_languages: Dilleri filtrele confirm_new_password: Yeni parolanız (tekrar) confirm_password: Parolanız (tekrar) + context: İçeriği filtrele current_password: Mevcut parolanız data: Dosya + discoverable: Bu hesabı dizinde listele display_name: Görünen adınız email: E-posta adresiniz + expires_in: Bitiş tarihi + fields: Profil Metaverisi header: Kapak resmi + inbox_url: Aktarıcı gelen kutusunun URL'si + irreversible: Gizlemek yerine bırak locale: Dil locked: Hesabımı kilitle + max_uses: Maksimum kullanım sayısı new_password: Yeni parolanız note: Kişisel bilgiler otp_attempt: İki-faktörlü kod password: Parolanız + phrase: Anahtar kelime veya kelime öbeği + setting_advanced_layout: Gelişmiş web arayüzünü etkinleştir + setting_aggregate_reblogs: Zaman çizelgesindeki grup yinelemeleri setting_auto_play_gif: GIF'leri otomatik oynatt setting_boost_modal: Boost etmeden önce onay diyaloğu göster + setting_crop_images: Genişletilmemiş tootlardaki resimleri 16x9 olarak kırp + setting_default_language: Gönderi dili setting_default_privacy: Gönderi gizliliği + setting_default_sensitive: Her zaman hassas medya olarak işaretle + setting_delete_modal: Bir tootu silmeden önce onay iletişim kutusunu göster + setting_display_media: Medya görünümü + setting_display_media_default: Varsayılan + setting_display_media_hide_all: Tümünü gizle + setting_display_media_show_all: Tümünü göster + setting_expand_spoilers: İçerik uyarılarıyla işaretli tootları her zaman genişlet + setting_hide_network: Ağını gizle + setting_noindex: Arama motoru endekslemesini iptal et + setting_reduce_motion: Animasyonlarda hareketi azalt + setting_show_application: Toot göndermek için kullanılan uygulamayı belirt + setting_system_font_ui: Sistemin varsayılan yazı tipini kullan + setting_theme: Site teması + setting_trends: Bugünün trendlerini göster + setting_unfollow_modal: Birini takip etmeden önce onay iletişim kutusunu göster + setting_use_blurhash: Gizli ortamlar için renkli gradyen göster + setting_use_pending_items: Yavaş mod severity: Zorluk type: Dosya türü username: Kullanıcı adınız + username_or_email: Kullanıcı adı ya da email + whole_word: Tüm dünya + featured_tag: + name: Hashtag interactions: must_be_follower: Takipçim olmayan kişilerden gelen bildirimleri engelle must_be_following: Takip etmediğim kişilerden gelen bildirimleri engelle + must_be_following_dm: Takip etmediğiniz kişilerin doğrudan ileti göndermesini engelle + invite: + comment: Yorum + invite_request: + text: Neden katılmak istiyorsun? notification_emails: digest: Özet e-postaları gönder favourite: Biri durumumu favorilerine eklediginde bana e-posta gönder follow: Biri beni takip ettiğinde bana e-posta gönder follow_request: Biri bana takip isteği gönderdiğinde, bana e-posta gönder mention: Biri benden bahsettiğinde, bana e-posta gönder + pending_account: Yeni bir hesap incelemesi gerektiğinde e-posta gönder reblog: Biri durumumu paylaştığında, bana e-posta gönder + report: Yeni bir rapor gönderildiğinde e-posta gönder + trending_tag: İncelenmemiş bir hashtag trend olduğunda e-posta gönder + tag: + listable: Bu etiketin aramalarda ve profil dizininde görünmesine izin ver + name: Hashtag + trendable: Bu etiketin trendlerin altında görünmesine izin ver + usable: Tootların bu etiketi kullanmasına izin ver 'no': Hayır + recommended: Önerilen required: + mark: "*" text: gerekli 'yes': Evet diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index 35b20d8a9..272d2fe43 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -2,48 +2,170 @@ uk: simple_form: hints: + account_alias: + acct: Вкажіть ім'я користувача@домен облікового запису, з якої ви хочете переміститися + account_migration: + acct: Вкажіть ім'я користувача@домен облікового запису, на яку ви хочете переміститися + account_warning_preset: + text: Ви можете використовувати синтаксис дмухів, наприклад URLи, хештеґи та згадки + admin_account_action: + include_statuses: Користувач побачить, які дмухи призвели до адміністративних дій або попереджень + send_email_notification: Користувач отримає роз'яснення, що сталося з його обліковим записом + text_html: Необов'язково. Ви можете використовувати синтакс дмухів. Ви можете <a href="%{path}">додати шаблони попереджень</a>, щоб заощадити час + type_html: Оберіть, що робити з <strong>%{acct}</strong> + warning_preset_id: Необов'язково. Ви можете ще додати будь-який текст до кінця шаблону defaults: + autofollow: Люди, що зареєструвалися за вашим запрошенням, автоматично підпишуться на вас avatar: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px bot: Цей аккаунт в основному виконує автоматичні дії та може не відстежуватіся + context: Один або кілька контекстів, до яких повинні бути застосовані фільтри + current_password: Для цілей безпеки, будь ласка, введіть пароль поточного облікового запису + current_username: Для підтвердження, будь ласка, введіть ім'я користувача поточного облікового запису + digest: Буде послано тільки після довгого періоду неактивності, та тільки якщо ви отримаєте персональне повідомлення у цей період + discoverable: Ще один шлях, за яким про вас можуть дізнатися користувачі — каталог профілів + email: Вам надійде електронний лист з підтвердженням + fields: До 4 елементів може бути відображено як таблиця у вашому профілі header: PNG, GIF, або JPG. Максимум - %{size}. Буде зменшено до %{dimensions}px + inbox_url: Скопіюйте інтернет-адресу з титульної сторінки ретранслятора + irreversible: Відсіяні дмухи зникнуть назавжди, навіть якщо фільтр потім буде знято + locale: Мова інтерфейсу, електронних листів та push-сповіщень locked: Буде вимагати від Вас самостійного підтверждення підписників, змінить приватність постів за замовчуванням на "тільки для підписників" + password: Не менше 8 символів + phrase: Шукає без врахування регістру у тексті дмуха або у його попередженні про вміст + scopes: Які API додатку буде дозволено використовувати. Якщо ви виберете самий верхній, нижчестоящі будуть обрані автоматично. + setting_aggregate_reblogs: Не показувати передмухи для дмухів, які нещодавно вже були передмухнуті (не вплине на вже отримані передмухи) + setting_default_sensitive: Дражливі медіа приховані за промовчанням та можуть бути розкрити кліком + setting_display_media_default: Приховувати медіа, помічені як дражливі + setting_display_media_hide_all: Приховувати будь-які медіа + setting_display_media_show_all: Завжди відображати медіа, помічені як дражливі + setting_hide_network: У вашому профілі не буде відображено підписки та підписників + setting_noindex: Впливає на ваш публічний профіль та сторінки статусу + setting_show_application: Застосунок, за допомогою якого ви дмухнули, буде відображено серед деталей дмуху + setting_use_blurhash: Градієнти, що базуються на кольорах прихованих медіа, але роблять нерозрізненними будь-які деталі + setting_use_pending_items: Не додавати нові повідомлення до стрічок миттєво. Показувати їх тільки після додаткового клацання. + username: Ваше ім'я користувача буде унікальним у %{domain} + whole_word: Якщо пошукове слово або фраза містить тільки літери та цифри, воно має співпадати цілком + domain_allow: + domain: Цей домен зможе отримувати дані з цього серверу. Вхідні дані будуть оброблені та збережені + featured_tag: + name: 'Можливо, ви захочете використовувати один з цих:' + form_challenge: + current_password: Ви входите до безпечної зони imports: - data: Файл CSV, экспортированный с другого узла Mastodon + data: Файл CSV, експортований з іншого сервера Mastodon + invite_request: + text: Це допоможе нам розглянути вашу заяву sessions: otp: Введите код двухфакторной аутентификации или используйте один из Ваших кодов восстановления. + tag: + name: Тут ви можете лише змінювати регістр літер, щоб підвищити читабельність + user: + chosen_languages: У глобальних стрічках будуть відображатися дмухи тільки обраними мовами labels: + account: + fields: + name: Позначка + value: Вміст + account_alias: + acct: Оброблювач старого облікового запису + account_migration: + acct: Оброблювач нового облікового запису + account_warning_preset: + text: Текст шаблону + admin_account_action: + include_statuses: Додати дмухи, на які ви скаржитесь, до електронного листа + send_email_notification: Сповістити користувача електронною поштою + text: Користувацьке попередження + type: Дія + types: + disable: Вимкнути + none: Нічого не робити + silence: Глушення + suspend: Призупинити та незворотньо видалити дані облікового запису + warning_preset_id: Використати шаблон попередження defaults: + autofollow: Запросити слідкувати за вашим обліковим записом avatar: Аватар + bot: Це обліковий запис бота + chosen_languages: Фільтрувати мови confirm_new_password: Підтвердіть новий пароль confirm_password: Підтвердіть пароль + context: Фільтр контексту current_password: Поточний пароль data: Дані + discoverable: Оприлюднити обліковий запис у каталозі display_name: Ім'я email: Email адреса + expires_in: Закінчується після + fields: Метадані профіля header: Заголовок + inbox_url: URL поштової скриньки ретранслятора + irreversible: Видалити назавжди, а не просто сховати locale: Мова locked: Зробити акаунт приватним + max_uses: Максимальна кількість використань new_password: Новий пароль note: Про Вас otp_attempt: Двофакторний код password: Пароль + phrase: Ключове слово або фраза + setting_advanced_layout: Увімкнути розширений web-інтерфейс + setting_aggregate_reblogs: Групувати просування в стрічках setting_auto_play_gif: Автоматично відтворювати анімовані GIF - setting_boost_modal: Показывать диалог подтверждения перед продвижением - setting_default_privacy: Видимость постов - severity: Строгость - type: Тип импорта - username: Имя пользователя + setting_boost_modal: Відображати діалог підтвердження під час передмухування + setting_crop_images: Обрізати зображення в нерозкритих постах до 16x9 + setting_default_language: Мова дмухів + setting_default_privacy: Видимість постів + setting_default_sensitive: Позначити медіа як дражливе + setting_delete_modal: Показувати діалог підтвердження під час видалення дмуху + setting_display_media: Відображення медіа + setting_display_media_default: За промовчанням + setting_display_media_hide_all: Сховати всі + setting_display_media_show_all: Показати всі + setting_expand_spoilers: Завжди розгортати дмухи з попередженнями про вміст + setting_hide_network: Сховати вашу мережу + setting_noindex: Відмовитися від індексування пошуковими системами + setting_reduce_motion: Менше руху в анімаціях + setting_show_application: Відображати застосунки, використані для дмухання + setting_system_font_ui: Використовувати типовий системний шрифт + setting_theme: Тема сайту + setting_trends: Показати сьогоднішні тренди + setting_unfollow_modal: Відображати діалог підтвердження під час відписки від когось + setting_use_blurhash: Відображати барвисті градієнти замість прихованих медіа + setting_use_pending_items: Повільний режим + severity: Серйозність + type: Тип імпорту + username: Ім'я користувача + username_or_email: Ім'я користувача або електронна пошта + whole_word: Ціле слово + featured_tag: + name: Хештеґ interactions: must_be_follower: Блокувати сповіщення від непідписаних людей must_be_following: Блокувати сповіщення від людей, на яких ви не підписані + must_be_following_dm: Заблокувати прямі сповіщення від людей, на яких ви не підписані + invite: + comment: Коментар + invite_request: + text: Чому ви хочете приєднатися? notification_emails: - digest: Присылать дайджест по e-mail + digest: Надсилати дайджест електронною поштою favourite: Надсилати листа, коли комусь подобається Ваш статус follow: Надсилати листа, коли хтось підписується на Вас follow_request: Надсилати листа, коли хтось запитує дозволу на підписку mention: Надсилати листа, коли хтось згадує Вас + pending_account: Надсилати електронного листа, коли новий обліковий запис потребує розгляду reblog: Надсилати листа, коли хтось передмухує Ваш статус + report: Надсилати електронного листа, коли з'являється нова скарга + trending_tag: Надсилати електронного листа, коли нерозглянутий хештеґ стає популярним + tag: + listable: Дозволити появу цього хештеґа у каталозі профілів + name: Хештеґ + trendable: Дозволити появу цього хештеґа у списку популярних хештеґів + usable: Дозволити дмухам використовувати цей хештеґ 'no': Ні + recommended: Рекомендовано required: + mark: "*" text: обов'язкове 'yes': Так diff --git a/config/locales/simple_form.ur.yml b/config/locales/simple_form.ur.yml new file mode 100644 index 000000000..2cace5883 --- /dev/null +++ b/config/locales/simple_form.ur.yml @@ -0,0 +1 @@ +ur: diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 2dbd7d66e..ec5486257 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -15,7 +15,6 @@ zh-CN: bot: 来自这个帐户的绝大多数操作都是自动进行的,并且可能无人监控 context: 过滤器的应用场景 digest: 仅在你长时间未登录,且收到了私信时发送 - discoverable_html: <a href="%{path}" target="_blank">目录</a> 让大家能根据兴趣和活动寻找用户。需要至少 %{min_followers} 位关注者 email: 我们会向你发送一封确认邮件 fields: 这将会在个人资料页上以表格的形式展示,最多 4 个项目 header: 文件大小限制 %{size},只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 %{dimensions}px @@ -34,6 +33,7 @@ zh-CN: setting_hide_network: 你关注的人和关注你的人将不会在你的个人资料页上展示 setting_noindex: 此设置会影响到你的公开个人资料以及嘟文页面 setting_show_application: 你用来发表嘟文的应用程序将会在你嘟文的详细内容中显示 + setting_use_blurhash: 渐变是基于模糊后的隐藏内容生成的 username: 你的用户名在 %{domain} 上是独特的 whole_word: 如果关键词只包含字母和数字,就只会在整个词被匹配时才会套用 featured_tag: @@ -73,7 +73,7 @@ zh-CN: context: 过滤器场景 current_password: 当前密码 data: 数据文件 - discoverable: 在本站用户资料目录中列出此账户 + discoverable: 在本站用户目录中收录此账户 display_name: 昵称 email: 电子邮件地址 expires_in: 失效时间 @@ -90,9 +90,10 @@ zh-CN: password: 密码 phrase: 关键词 setting_advanced_layout: 启用高级 web 界面 - setting_aggregate_reblogs: 在时间线中合并转嘟 + setting_aggregate_reblogs: 在时间轴中合并转嘟 setting_auto_play_gif: 自动播放 GIF 动画 setting_boost_modal: 在转嘟前询问我 + setting_crop_images: 裁剪未展开嘟文的图片到 16x9 setting_default_language: 发布语言 setting_default_privacy: 嘟文默认可见范围 setting_default_sensitive: 总是将我发送的媒体文件标记为敏感内容 @@ -108,7 +109,9 @@ zh-CN: setting_show_application: 展示你用来发嘟的应用 setting_system_font_ui: 使用系统默认字体 setting_theme: 站点主题 + setting_trends: 显示今日热门 setting_unfollow_modal: 在取消关注前询问我 + setting_use_blurhash: 将隐藏媒体显示为彩色渐变 severity: 级别 type: 导入数据类型 username: 用户名 @@ -120,17 +123,25 @@ zh-CN: must_be_follower: 屏蔽来自未关注我的用户的通知 must_be_following: 屏蔽来自我未关注的用户的通知 must_be_following_dm: 屏蔽来自我未关注的用户的私信 + invite: + comment: 评论 invite_request: text: 你为什么想要加入? notification_emails: digest: 发送摘要邮件 - favourite: 当有用户收藏了我的嘟文时,发送电子邮件提醒我 + favourite: 当有用户喜欢了我的嘟文时,发送电子邮件提醒我 follow: 当有用户关注我时,发送电子邮件提醒我 follow_request: 当有用户向我发送关注请求时,发送电子邮件提醒我 mention: 当有用户在嘟文中提及我时,发送电子邮件提醒我 pending_account: 在有账户需要审核时,发送电子邮件提醒我 reblog: 当有用户转嘟了我的嘟文时,发送电子邮件提醒我 report: 在提交新举报时,发送电子邮件提醒我 + trending_tag: 当未经审核的话题当前热门时邮件提醒 + tag: + listable: 允许这个话题标签在用户目录中显示 + name: 话题标签 + trendable: 允许在热门下显示此话题 + usable: 允许嘟文使用此话题 'no': 否 recommended: 推荐 required: diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index 4da117b61..fbbbff6ca 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -2,6 +2,10 @@ zh-TW: simple_form: hints: + account_alias: + acct: 指定欲移動之帳戶的 使用者名稱@站台 + account_migration: + acct: 指定欲移動至之帳戶的 使用者名稱@站台 account_warning_preset: text: 您可使用嘟文語法,例如網址、「#」標籤和提及功能 admin_account_action: @@ -15,7 +19,6 @@ zh-TW: bot: 此帳戶主要執行自動操作且可能未被監控 context: 應該套用過濾器的一項或多項內容 digest: 僅在你長時間未登入且在未登入期間收到私訊時傳送 - discoverable_html: <a href="%{path}" target="_blank">目錄</a> 讓使用者們能基於興趣與活動尋找帳戶。需要至少 %{min_followers} 位關注者 email: 您將收到一封確認電子郵件 fields: 您可在個人資料上有至多 4 個以表格形式顯示的項目 header: 支援 PNG, GIF 或 JPG 圖片,檔案最大為 %{size},會按比例縮小成 %{dimensions} 像素 diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 21ce53217..5dc2113fd 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -7,35 +7,57 @@ sk: active_count_after: aktívni active_footnote: Mesačne aktívnych užívateľov (MAU) administered_by: 'Správcom je:' + api: API apps: Aplikácie - apps_platforms: Uživaj Mastodon z iOSu, Androidu a iných platforiem + apps_platforms: Užívaj Mastodon z iOSu, Androidu, a iných platforiem browse_directory: Prehľadávaj databázu profilov, filtruj podľa záujmov - browse_public_posts: Prebádaj naživo prúd verejných príspevkov na Mastodone + browse_local_posts: Prebádaj naživo prúd verejných príspevkov z tohto servera + browse_public_posts: Sleduj naživo prúd verejných príspevkov na Mastodone contact: Kontakt contact_missing: Nezadaný contact_unavailable: Neuvedený/á discover_users: Objavuj užívateľov documentation: Dokumentácia - extended_description_html: | - <h3>Pravidlá</h3> - <p>Žiadne zatiaľ uvedené nie sú</p> - federation_hint_html: S účtom na %{instance} budeš môcť následovať ľúdí na hociakom Mastodon serveri, ale aj inde. - generic_description: "%{domain} je jeden server v sieti" + federation_hint_html: S účtom na %{instance} budeš môcť následovať ľúdí na hociakom Mastodon serveri, ale aj na iných serveroch. get_apps: Vyskúšaj aplikácie hosted_on: Mastodon hostovaný na %{domain} + instance_actor_flash: | + Tento účet je virtuálnym aktérom, ktorý predstavuje samotný server a nie žiadného jedného užívateľa. + Je využívaný pre potreby federovania a nemal by byť blokovaný, pokiaľ nechceš zablokovať celý server, čo ide lepšie dosiahnúť cez blokovanie domény. learn_more: Zisti viac - privacy_policy: Ustanovenia o súkromí + privacy_policy: Zásady súkromia see_whats_happening: Pozoruj, čo sa deje server_stats: 'Serverové štatistiky:' source_code: Zdrojový kód + status_count_after: + few: príspevkov + many: príspevkov + one: príspevok + other: príspevky status_count_before: Ktorí napísali tagline: Následuj kamarátov, a objavuj nových - terms: Podmienky užívania + terms: Podmienky užitia + unavailable_content: Nedostupný obsah + unavailable_content_description: + domain: Server + reason: 'Dôvod:' + user_count_after: + few: užívateľov + many: užívatelia + one: užívateľ + other: užívateľov user_count_before: Domov pre what_is_mastodon: Čo je Mastodon? accounts: choices_html: "%{name}vé voľby:" + endorsements_hint: Môžeš ukázať sledovaných užívateľov, s ktorými si spriaznený/á cez webové rozhranie, a tí tu budú zobrazení. + featured_tags_hint: Môžeš zvýrazniť určité haštagy, ktoré tu budú zobrazené. follow: Následuj + followers: + few: Sledovateľov + many: Sledovateľov + one: Sledujúci + other: Sledovatelia following: Následujem joined: Pridal/a sa v %{date} last_active: naposledy aktívny @@ -43,16 +65,23 @@ sk: media: Médiá moved_html: "%{name} účet bol presunutý na %{new_profile_link}:" network_hidden: Táto informácia nieje k dispozícii + never_active: Nikdy nothing_here: Nič tu nie je! people_followed_by: Ľudia, ktorých %{name} sleduje people_who_follow: Ľudia sledujúci %{name} pin_errors: following: Musíš už následovať toho človeka, ktorého si praješ zviditeľniť + posts: + few: Príspevkov + many: Príspevkov + one: Príspevok + other: Príspevky posts_tab_heading: Príspevky posts_with_replies: Príspevky s odpoveďami reserved_username: Prihlasovacie meno je vyhradené roles: admin: Správca + bot: Bot moderator: Moderátor unavailable: Profil nieje dostupný unfollow: Prestaň sledovať @@ -89,6 +118,7 @@ sk: display_name: Ukáž meno domain: Doména edit: Uprav + email: Email email_status: Stav emailu enable: Povoľ enabled: Povolený @@ -150,6 +180,7 @@ sk: user: Užívateľ salmon_url: Salmon adresa search: Hľadaj + search_same_ip: Ostatní užívatelia s rovnakou IP adresou shared_inbox_url: URL zdieľanej schránky show: created_reports: Vytvorené hlásenia @@ -159,6 +190,7 @@ sk: statuses: Príspevky subscribe: Odoberaj suspended: Vylúčený/á + time_in_queue: Čakajúci %{time} v poradí title: Účty unconfirmed_email: Nepotvrdený email undo_silenced: Zruš stíšenie @@ -166,11 +198,13 @@ sk: unsubscribe: Prestaň odoberať username: Prezývka warn: Varuj + web: Web + whitelisted: Na bielej listine action_logs: actions: - assigned_to_self_report: "%{name}pridelil/a hlásenie užívateľa %{target}sebe" + assigned_to_self_report: "%{name} pridelil/a hlásenie užívateľa %{target} sebe" change_email_user: "%{name} zmenil/a emailovú adresu užívateľa %{target}" - confirm_user: "%{name} potvrdil e-mailovú adresu používateľa %{target}" + confirm_user: "%{name} potvrdil emailovú adresu používateľa %{target}" create_account_warning: "%{name} poslal/a varovanie užívateľovi %{target}" create_custom_emoji: "%{name} nahral nový emoji %{target}" create_domain_block: "%{name} zablokoval doménu %{target}" @@ -180,12 +214,12 @@ sk: destroy_domain_block: "%{name} povolil doménu %{target}" destroy_email_domain_block: "%{name} pridal e-mailovú doménu %{target} na zoznam povolených" destroy_status: "%{name} zmazal status %{target}" - disable_2fa_user: "%{name} zakázal 2FA pre používateľa %{target}" + disable_2fa_user: "%{name} vypol požiadavku 2FA pre používateľa %{target}" disable_custom_emoji: "%{name} zakázal emoji %{target}" disable_user: "%{name} zakázal prihlásenie pre používateľa %{target}" enable_custom_emoji: "%{name} povolil emoji %{target}" enable_user: "%{name} povolil prihlásenie pre používateľa %{target}" - memorialize_account: '%{name} zmenil účet %{target} na stránku "Navždy budeme spomínať"' + memorialize_account: "%{name} zmenil účet %{target} na pamätnú stránku" promote_user: "%{name} povýšil/a používateľa %{target}" remove_avatar_user: "%{name} odstránil/a %{target}ov avatár" reopen_report: "%{name} znovu otvoril/a hlásenie užívateľa %{target}" @@ -201,19 +235,24 @@ sk: deleted_status: "(zmazaný príspevok)" title: Kontrólny záznam custom_emojis: + assign_category: Priraď kategóriu by_domain: Doména copied_msg: Miestna kópia emoji bola úspešne vytvorená copy: Kopíruj copy_failed_msg: Nebolo možné vytvoriť miestnu kópiu tohto emoji + create_new_category: Vytvor novú kategóriu created_msg: Emoji úspešne vytvorené! delete: Zmaž destroyed_msg: Emoji úspešne zničené! disable: Zakáž + disabled: Vypnuté disabled_msg: Emoji bolo úspešne zakázané emoji: Emotikony enable: Povoľ + enabled: Povolené enabled_msg: Emoji bolo úspešne povolené image_hint: PNG do 50KB + list: Zoznam listed: V zozname new: title: Pridaj nové, vlastné emoji @@ -221,11 +260,14 @@ sk: shortcode: Skratka shortcode_hint: Aspoň 2 znaky, povolené sú alfanumerické, alebo podčiarkovník title: Vlastné emoji + uncategorized: Nezaradené + unlist: Nezaraď unlisted: Nie je na zozname update_failed_msg: Nebolo možné aktualizovať toto emoji updated_msg: Emoji bolo úspešne aktualizované! upload: Nahraj dashboard: + authorized_fetch_mode: Autorizovaný režim backlog: odložené aktivity config: Nastavenia feature_deletions: Vymazanie účtov @@ -233,10 +275,13 @@ sk: feature_profile_directory: Katalóg profilov feature_registrations: Registrácie feature_relay: Federovací mostík + feature_spam_check: Proti spamu feature_timeline_preview: Náhľad časovej osi features: Vymoženosti hidden_service: Federácia so skrytými službami open_reports: otvorené hlásenia + pending_tags: haštagy čakajúce na posúdenie + pending_users: užívatelia čakajúci na posúdenie recent_users: Nedávni užívatelia search: Celofrázové vyhľadávanie single_user_mode: Jednouživateľské rozhranie @@ -248,11 +293,18 @@ sk: week_interactions: Tohto-týždňové interakcie week_users_active: aktívni tento týždeň week_users_new: užívateľov počas tohto týždňa + whitelist_mode: Režim povolených + domain_allows: + add_new: Povolená doména + created_msg: Doména bola úspešne povolená + destroyed_msg: Doména bola odstránená zo zoznamu povolených + undo: Odober zo zoznamu povolených domain_blocks: add_new: Blokuj novú doménu created_msg: Doména je v štádiu blokovania destroyed_msg: Blokovanie domény bolo zrušené domain: Doména + edit: Uprav blokovanie domény existing_domain_block_html: Pre účet %{name} si už nahodil/a přísnejšie obmedzenie, najskôr ho teda musíš <a href="%{unblock_url}">odblokovať</a>. new: create: Vytvor blokovanie domény @@ -263,6 +315,9 @@ sk: silence: Stíš suspend: Vylúč title: Nové blokovanie domény + private_comment: Súkromný komentár + private_comment_hint: Odôvodni toto doménové obmedzenie, pre vnútorné vyrozumenie moderátorov. + public_comment: Verejný komentár reject_media: Odmietaj súbory s obrázkami, alebo videami reject_media_hint: Vymaže miestne uložené súbory médií a odmietne ich sťahovanie v budúcnosti. Nepodstatné pri vylúčení reject_reports: Zamietni hlásenia @@ -273,12 +328,18 @@ sk: silence: stíšené suspend: vylúčené show: + affected_accounts: + few: "%{count} účtov v databázi ovplyvnených" + many: "%{count} účtov v databázi ovplyvnených" + one: Jeden účet v databázi ovplyvnený + other: "%{count} účty v databázi ovplyvnené" retroactive: silence: Zruš stíšenie všetkých momentálne utíšených účtov z tejto domény suspend: Zruš suspendáciu všetkých momentálne ovplyvnených účtov z tejto domény title: Zruš blokovanie domény %{domain} undo: Vráť späť undo: Odvolaj blokovanie domény + view: Ukáž blokovanie domén email_domain_blocks: add_new: Pridaj nový created_msg: Emailová doména bola úspešne pridaná do zoznamu zakázaných @@ -295,10 +356,17 @@ sk: instances: by_domain: Doména delivery_available: Je v dosahu doručovania + known_accounts: + few: "%{count} známych účtov" + many: "%{count} známych účtov" + one: "%{count} známy účet" + other: "%{count} známe účty" moderation: all: Všetky limited: Obmedzené title: Moderácia + private_comment: Súkromný komentár + public_comment: Verejný komentár title: Federácia total_blocked_by_us: Nami blokované total_followed_by_them: Nimi sledované @@ -328,6 +396,7 @@ sk: pending: Čaká sa na povolenie od prechodného mostu save_and_enable: Ulož a povoľ setup: Nastav prepojenie s mostom + signatures_not_enabled: Prechodové mostíky nebudú fungovať správne, kým je povolený bezpečtnostný režim, alebo biela listina status: Stav title: Mosty report_notes: @@ -376,6 +445,16 @@ sk: custom_css: desc_html: Uprav vzhľad pomocou CSS, ktoré je načítané na každej stránke title: Vlastné CSS + default_noindex: + desc_html: Ovplyvňuje všetkých užívateľov, ktorí si toto nasavenie nezmenili sami + title: Vyraď užívateľov z indexovania vyhľadávačmi, ako východzie nastavenie + domain_blocks: + all: Všetkým + disabled: Nikomu + title: Ukáž blokované domény + users: Prihláseným, miestnym užívateľom + domain_blocks_rationale: + title: Ukáž zdôvodnenie hero: desc_html: Zobrazuje sa na hlavnej stránke. Doporučené je rozlišenie aspoň 600x100px. Pokiaľ nič nieje dodané, bude nastavený základný orázok serveru. title: Obrázok hrdinu @@ -426,6 +505,9 @@ sk: desc_html: Môžeš si napísať svoje vlastné pravidla o súkromí, prevádzke, alebo aj iné legality. Môžeš tu používať HTML kód title: Vlastné pravidlá prevádzky site_title: Názov servera + spam_check_enabled: + desc_html: Mastodon môže sám stíšiť, a nahlásiť účty v závislosti od rozpoznania parametrov ako napríklad opakované rozosielanie nevyžiadanej komunikácie. Môže dôjsť aj k nesprávnej identifikácii. + title: Proti spamu thumbnail: desc_html: Používané pre náhľady cez OpenGraph a API. Doporučuje sa rozlišenie 1200x630px title: Miniatúra servera @@ -433,12 +515,19 @@ sk: desc_html: Zobraziť verejnú nástenku na hlavnej stránke title: Náhľad nástenky title: Nastavenia stránky + trendable_by_default: + desc_html: Ovplyvňuje haštagy ktoré predtým neboli zakázané + title: Dovoľ haštagom zobrazovať sa ako populárne, bez predchodzieho posudzovania + trends: + desc_html: Verejne zobraz už schválené haštagy, ktoré práve trendujú + title: Populárne haštagy statuses: back_to_account: Späť na účet batch: delete: Vymaž nsfw_off: Označ ako nechúlostivé nsfw_on: Označ ako chúlostivé + deleted: Vymazané failed_to_execute: Nepodarilo sa vykonať media: title: Médiá @@ -446,20 +535,24 @@ sk: no_status_selected: Žiadne príspevky neboli zmenené, keďže si žiadne nemal/a zvolené title: Príspevky na účte with_media: S médiami - subscriptions: - callback_url: Zdrojová adresa URL - confirmed: Potvrdené - expires_in: Vyprší do - last_delivery: Posledné doručenie - topic: Téma tags: - accounts: Účty - hidden: Skryté - hide: Ukri od databázy + accounts_today: Jedinečných užívateľov za dnešok + accounts_week: Jedinečných užívateľov tento týždeň + breakdown: Rozpis dnešného využitia podľa zdroja + context: Súvis + directory: V zozname + in_directory: "%{count} v zozname" + last_active: Naposledy aktívny + most_popular: Najpopulárnejšie + most_recent: Najnovšie name: Haštag + review: Prehodnoť stav + reviewed: Zhodnotené title: Haštagy - unhide: Ukáž v databázi - visible: Viditeľné + trending_right_now: Práve populárne + unique_uses_today: "%{count} dnes prispievajú" + unreviewed: Neposúdené + updated_msg: Nastavenia haštagov boli úspešne aktualizované title: Spravovanie warning_presets: add_new: Pridaj nové @@ -470,17 +563,29 @@ sk: admin_mailer: new_pending_account: body: Podrobnosti o novom účte sú uvedené nižšie. Môžeš túto registračnú požiadavku buď prijať, alebo zamietnúť. + subject: Nový účet očakáva preverenie na %{instance} (%{username}) new_report: body: "%{reporter} nahlásil/a %{target}" body_remote: Niekto z %{domain} nahlásil/a %{target} subject: Nové hlásenie pre %{instance} (#%{id}) + new_trending_tag: + subject: Nový haštag očakáva preverenie na %{instance} (#%{name}) + aliases: + add_new: Vytvor alias + created_msg: Nový alias úspešne vytvorený. Teraz môžeš začať presun zo starého účtu. + deleted_msg: Alias úspešne odstránený. Presun z tamtoho účtu na tento už viac nebude možný. + remove: Odpoj alias appearance: advanced_web_interface: Pokročilé webové rozhranie + advanced_web_interface_hint: 'Ak chceš využiť celkovú šírku tvojej obrazovky, pokročilé webové rozhranie ti umožňuje nastaviť mnoho rôznych stĺpcov, aby si videl/a toľko informácií naraz, koľko chceš: Domov, oboznámenia, federovanú časovú os, a ľubovolný počet zoznamov, či haštagov.' animations_and_accessibility: Animácie a prístupnosť confirmation_dialogs: Potvrdzovacie dialógy + discovery: Nájdenie sensitive_content: Chúlostivý obsah + toot_layout: Rozloženie príspevkov application_mailer: notification_preferences: Zmeň emailové voľby + salutation: "%{name}," settings: 'Zmeň emailové voľby: %{link}' view: 'Zobraziť:' view_profile: Zobraz profil @@ -497,9 +602,13 @@ sk: apply_for_account: Vyžiadaj si pozvánku change_password: Heslo checkbox_agreement_html: Súhlasím s <a href="%{rules_path}" target="_blank">pravidlami servera</a>, aj s <a href="%{terms_path}" target="_blank">prevoznými podmienkami</a> - confirm_email: Potvrď email + checkbox_agreement_without_rules_html: Súhlasím s <a href="%{terms_path}" target="_blank">podmienkami užívania</a> delete_account: Vymaž účet delete_account_html: Pokiaľ chceš svoj účet odtiaľto vymazať, môžeš tak <a href="%{path}">urobiť tu</a>. Budeš požiadaný/á o potvrdenie tohto kroku. + description: + prefix_invited_by_user: "@%{name} ťa pozýva na tento Mastodon server!" + prefix_sign_up: Zaregistruj sa na Mastodone už dnes! + suffix: S pomocou účtu budeš môcť následovať ľudí, posielať príspevky, a vymienať si správy s užívateľmi na hociakom Mastodon serveri, ale aj na iných serveroch! didnt_get_confirmation: Neobdržal/a si kroky na potvrdenie? forgot_password: Zabudnuté heslo? invalid_reset_password_token: Token na obnovu hesla vypršal. Prosím vypítaj si nový. @@ -509,10 +618,21 @@ sk: migrate_account_html: Ak si želáš presmerovať tento účet na nejaký iný, môžeš si to <a href="%{path}">nastaviť tu</a>. or_log_in_with: Alebo prihlás s register: Zaregistruj sa + registration_closed: "%{instance} neprijíma nových členov" resend_confirmation: Zašli potvrdzujúce pokyny znovu reset_password: Obnov heslo security: Zabezpečenie set_new_password: Nastav nové heslo + setup: + email_below_hint_html: Ak je nižšie uvedená emailová adresa nesprávna, môžeš ju zmeniť a dostať nový potvrdzovací email. + email_settings_hint_html: Potvrdzovací email bol odoslaný na %{email}. Ak táto emailová adresa nieje správna, môžeš si ju zmeniť v nastaveniach účtu. + title: Nastavenie + status: + account_status: Stav účtu + confirming: Čaká sa na dokončenie potvrdenia emailom. + functional: Tvoj účet je plne funkčný. + pending: Tvoja žiadosť čaká na schvílenie od nášho týmu. Môže to chviľu potrvať. Ak bude tvoja žiadosť schválená, dostaneš o tom email. + redirecting_to: Tvoj účet je neaktívny, lebo v súčasnosti presmerováva na %{acct}. trouble_logging_in: Problém s prihlásením? authorize_follow: already_following: Tento účet už následuješ @@ -525,6 +645,11 @@ sk: return: Ukáž užívateľov profil web: Prejdi do siete title: Následuj %{acct} + challenge: + confirm: Pokračuj + hint_html: "<strong>Tip:</strong> Hodinu nebudeme znovu vyžadovať tvoje heslo." + invalid_password: Nesprávne heslo + prompt: Pre pokračovanie potvrď svoje heslo datetime: distance_in_words: about_x_hours: "%{count}hod" @@ -540,23 +665,33 @@ sk: x_months: "%{count}mesiace" x_seconds: "%{count}sek" deletes: - bad_password_msg: Dobrý pokus, hakeri! Nesprávne heslo + challenge_not_passed: Údaje, ktoré si zadal/a, sú nesprávne confirm_password: Napíšte svoje terajšie heslo pre overenie vašej identity - description_html: Týmto <strong> natrvalo, nenavrátiteľne </strong> vymažeš obsah tvojho účtu, a deaktivuješ ho. Tvoja prezývka ale ostane rezervovaná ako prevencia pred budúcimi impersonáciami. + confirm_username: Zadaj svoju prezývku, na potvrdenie úkonu proceed: Vymaž účet success_msg: Tvoj účet bol úspešne vymazaný - warning_html: Iba vymazanie obsahu z tohto konkrétneho serveru je zaručené. Obsah, ktorý bol zdieľaný široko-ďaleko pravdepodobne zanechá nejaké stopy. Servery ktoré sú offline a tie ktoré ignorujú tvoje zmeny teda nezaktualizujú svoje databázy. - warning_title: Dostupnosť rozšírovaného obsahu + warning: + before: 'Než budeš pokračovať, prosím pozorne si prečítaj tieto poznámky:' + caches: Obsah, ktorý bol predčítaný inými servermi môže zanechať pozostatky + data_removal: Tvoje príspevky a iné dáta budú natrvalo odstránené + email_change_html: Môžeš si <a href="%{path}">zmeniť svoju emailovú adresu</a> bez mazania účtu + email_contact_html: Ak stále neprichádza, môžeš poslať email na <a href="mailto:%{email}">%{email}</a> so žiadosťou o pomoc + email_reconfirmation_html: Ak ti potvrdzovací email neprichádza, môžeš si ho <a href="%{path}">vyžiadať znovu</a> + irreversible: Nebudeš môcť navrátiť, alebo znova aktivovať svoj účet + more_details_html: Pre viac podrobností, pozri <a href="%{terms_path}">zásady súkromia</a>. + username_available: Tvoje užívateľské meno bude znova dostupné + username_unavailable: Tvoja prezývka ostane neprístupná directories: directory: Katalóg profilov - enabled: Momentálne si uvedený/á na zozname profilov. - enabled_but_waiting: Vyjadril/a si záujem o uvedenie na zozname profilov, lenže ešte nemáš minimálny vyžadovaný počet následovateľov (%{min_followers}), aby si tam bol/a uveden/á. explanation: Pátraj po užívateľoch podľa ich záujmov explore_mastodon: Prebádaj %{title} - how_to_enable: Momentálne niesi zaradený/á do verejnej profilovej databázy. Prihlásiť sa môžeš nižšie. Použi haštagy vo svojom biografickom popise na profile, ak chceš byť uvedený/á aj pod konkrétnými haštagmi! + domain_validator: + invalid_domain: nieje správny tvar domény errors: + '400': Požiadavka, ktorú si odoslal/a, bola buď nesprávna, alebo znehodnotená. '403': Nemáš povolenie pre zobrazenie tejto stránky. '404': Stránka ktorú hľadáš nieje tu. + '406': Táto stránka nie je dostupná v požadovanom formáte. '410': Stránka ktorú si tu hľadal/a sa tu už viac nenachádza. '422': content: Bezpečtnostné overenie zlyhalo. Blokuješ cookies? @@ -565,7 +700,11 @@ sk: '500': content: Ospravedlňujem sa. Niečo sa pokazilo na našom konci. title: Táto stránka nieje v poriadku + '503': Táto stránka nemôže byť načítaná, kvôli dočasnému výpadku servera. noscript_html: Aby bolo možné používať Mastodon web aplikáciu, povoľ prosím JavaScript. Alebo skús jednu z <a href="%{apps_path}"> aplikácii </a> dostupných pre vašu platformu. + existing_username_validator: + not_found: nepodarilo sa nájsť miestného užívateľa s takouto prezývkou + not_found_multiple: nepodarilo sa nájsť %{usernames} exports: archive_takeout: date: Dátum @@ -575,6 +714,7 @@ sk: request: Vyžiadaj si tvoj archív size: Veľkosť blocks: Blokujete + csv: CSV domain_blocks: Blokované domény follows: Následujete lists: Zoznamy @@ -604,10 +744,41 @@ sk: developers: Vývojári more: Viac… resources: Podklady + trending_now: Teraz populárne generic: + all: Všetko changes_saved_msg: Zmeny boli úspešne uložené! copy: Kopíruj + no_batch_actions_available: Na tejto stránke niesú k dispozícii žiadne hromadné akcie + order_by: Zoraď podľa save_changes: Ulož zmeny + validation_errors: + few: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chýb uvedených nižšie + many: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chýb uvedených nižšie + one: Niečo ešte nieje celkom v poriadku! Prosím skontroluj chybu uvedenú nižšie + other: Niečo ešte nieje celkom v poriadku! Prosím skontroluj %{count} chyby uvedené nižšie + html_validator: + invalid_markup: 'obsahuje neplatný HTML kód: %{error}' + identity_proofs: + active: Aktívne + authorize: Áno, povoľ + authorize_connection_prompt: Povoliť toto kryptografické prepojenie? + errors: + failed: Kryptografické prepojenie sa nepodarilo. Prosím skús to znova z %{provider}. + keybase: + invalid_token: Keybase tokeny sú hašovaniami podpisov a musia mať 66 znakov + verification_failed: Keybase nerozpoznáva tento token ako podpis od Keybase užívateľa menom %{kb_username}. Prosím skús to znova cez Keybase. + wrong_user: Nemožno vytvoriť overenie pre %{proving}, pokiaľ si prihlásený/á ako %{current}. Prihlás sa za %{proving} a skús to znova. + explanation_html: |- + Tu si môžeš kryptograficky prepojiť svoje iné identity, ako napríklad tvoj profil na Keybase. + Umožňuje to ostatním ľudom posielať ti enkryptované správy a veriť obsahu ktorý im pošleš ty. + i_am_html: Na %{service} som %{username}. + identity: Identita + inactive: Neaktívne + publicize_checkbox: 'A poslať toto:' + publicize_toot: 'Je to dokázané! Na %{service} som %{username}: %{url}' + status: Stav overenia + view_proof: Ukáž overenie imports: modes: merge: Spoj dohromady @@ -636,6 +807,11 @@ sk: expires_in_prompt: Nikdy generate: Vygeneruj invited_by: 'Bol/a si pozvaný/á užívateľom:' + max_uses: + few: "%{count} využití" + many: "%{count} využití" + one: 1 využitie + other: "%{count} využitia" max_uses_prompt: Bez obmedzení prompt: Vygeneruj a zdieľaj linky s ostatnými, aby mali umožnený prístup k tomuto serveru table: @@ -651,9 +827,33 @@ sk: too_many: Nemôžeš priložiť viac ako 4 súbory migrations: acct: prezývka@doména nového účtu - currently_redirecting: 'Tvoj profil má nastavené presmerovanie na:' - proceed: Uložiť - updated_msg: Tvoje nastavenia pre presmerovanie účtu boli úspešne aktualizované! + cancel: Zruš presmerovanie + cancel_explanation: Zrušenie presmerovania znovu aktivuje tvoj súčasný účet, ale neprenesie naspäť sledovateľov, ktorí už boli presunutý na tamten účet. + cancelled_msg: Presmerovanie úspešne zrušené. + errors: + already_moved: je ten istý účet, na ktorý si sa už presunul/a + missing_also_known_as: neodkazuje spätne na tento účet + move_to_self: nemôže to byť tvoj súčasný účet + not_found: nebolo možné nájsť + on_cooldown: Si v spánkovom stave + followers_count: Následovatelia v čase presunu + incoming_migrations: Presúvam sa z iného účtu + incoming_migrations_html: K presunutiu z iného účtu na tento, si najskôr potrebuješ <a href="%{path}">vytvoriť alias pre účet</a>. + moved_msg: Tvoj účet teraz presmerováva na %{acct} a tvoji sledovatelia sú presúvaní tam. + not_redirecting: Tvoj účet v súčasnosti nepresmerováva na žiaden iný účet. + on_cooldown: Účet si si presunul/a len nedávno. Táto vymoženosť bude znovu sprístupnená za %{count} dní. + past_migrations: Predošlé presuny + proceed_with_move: Presuň sledovateľov + redirecting_to: Tvoj účet presmerováva na %{acct}. + set_redirect: Nastav presmerovanie + warning: + backreference_required: Nový účet musí byť najskôr nastavený tak, aby spätne odkazoval na tento + before: 'Než budeš pokračovať, prosím pozorne si prečítaj tieto poznámky:' + disabled_account: Tvoj súčasný účet už po tomto nebude plne použiteľný. Stále ale budeš mať prístup ku stiahnutiu dát a možnosti znovu-aktivácie. + followers: Tento úkon presunie všetkých následovateľov zo súčasného účtu na nový účet + only_redirect_html: Ako alternatívu, môžeš <a href="%{path}">iba nastaviť presmerovanie na tvoj profil</a>. + other_data: Žiadne iné dáta nebudú presunuté automaticky + redirect: Tvoj súčastný účet bude aktualizovaný s oznamom o presunutí a bude vylúčený z vyhľadávania moderation: title: Moderovanie notification_mailer: @@ -661,6 +861,16 @@ sk: action: Zobraziť všetky notifikácie body: Tu nájdete krátky súhrn správ ktoré ste zmeškali od svojej poslednj návštevi od %{since} mention: "%{name} ťa spomenul/a v:" + new_followers_summary: + few: A ešte, kým si bol/a preč, si získal/a %{count} nových následovateľov! Hurá! + many: A ešte, kým si bol/a preč, si získal/a %{count} nových následovateľov! Hurá! + one: A ešte, kým si bol/a preč, si získal/a jedného nového následovateľa! Hurá! + other: A ešte, kým si bol/a preč, si získal/a %{count} nových následovateľov! Hurá! + subject: + few: "%{count} nových oboznámení od tvojej poslednej návštevy \U0001F418" + many: "%{count} nových oboznámení od tvojej poslednej návštevy \U0001F418" + one: "Jedno nové oboznámenie od tvojej poslednej návštevy \U0001F418" + other: "%{count} nové oboznámenia od tvojej poslednej návštevy \U0001F418" title: Zatiaľ čo si bol/a preč… favourite: body: 'Tvoj príspevok bol uložený medzi obľúbené užívateľa %{name}:' @@ -701,6 +911,21 @@ sk: too_many_options: nemôže zahŕňať viac ako %{max} položiek preferences: other: Ostatné + posting_defaults: Východiskové nastavenia príspevkov + public_timelines: Verejné časové osi + relationships: + activity: Aktivita účtu + dormant: Spiace + last_active: Naposledy aktívny + most_recent: Najnovšie + moved: Presunuli sa + mutual: Spoločné + primary: Hlavné + relationship: Vzťah + remove_selected_domains: Vymaž všetkých následovateľov z vybraných domén + remove_selected_followers: Odstráň vybraných následovatrľov + remove_selected_follows: Prestaň sledovať vybraných užívateľov + status: Stav účtu remote_follow: acct: Napíš svoju prezývku@doménu z ktorej chceš následovať missing_resource: Nemožno nájsť potrebnú presmerovaciu adresu k tvojmu účtu @@ -718,10 +943,6 @@ sk: reply: proceed: Pokračuj odpovedaním prompt: 'Chceš odpovedať na tento príspevok:' - remote_unfollow: - error: Chyba - title: Názov - unfollowed: Už nesleduješ scheduled_statuses: over_daily_limit: Prekročil/a si denný limit %{limit} predplánovaných príspevkov over_total_limit: Prekročil/a si limit %{limit} predplánovaných príspevkov @@ -756,6 +977,7 @@ sk: settings: account: Účet account_settings: Nastavenia účtu + aliases: Aliasy účtov appearance: Vzhľad authorized_apps: Povolené aplikácie back: Späť na Mastodon @@ -764,28 +986,56 @@ sk: edit_profile: Uprav profil export: Exportuj dáta featured_tags: Zvýraznené haštagy + identity_proofs: Overenia identity import: Importuj import_and_export: Import a export migrate: Presuň účet notifications: Oboznámenia preferences: Voľby profile: Profil - relationships: Následovaní a následovatelia - two_factor_authentication: Dvoj-faktorové overenie + relationships: Sledovania a následovatelia + two_factor_authentication: Dvojfázové overenie + spam_check: + spam_detected: Toto je automatizované hlásenie. Bol odhalený spam. statuses: attached: description: 'Priložené: %{attached}' - boosted_from_html: Povýšené od %{acct_link} + image: + few: "%{count} obrázkov" + many: "%{count} obrázkov" + one: "%{count} obrázok" + other: "%{count} obrázky" + video: + few: "%{count} videí" + many: "%{count} videí" + one: "%{count} video" + other: "%{count} videá" + boosted_from_html: Vyzdvihnuté od %{acct_link} content_warning: 'Varovanie o obsahu: %{warning}' + disallowed_hashtags: + few: 'obsah nepovolených haštagov: %{tags}' + many: 'obsah nepovolených haštagov: %{tags}' + one: 'obsahoval nepovolený haštag: %{tags}' + other: 'obsahoval nepovolené haštagy: %{tags}' language_detection: Zisti automaticky open_in_web: Otvor v okne na webe over_character_limit: limit %{max} znakov bol presiahnutý pin_errors: limit: Už si si pripol ten najvyšší možný počet hlášok ownership: Nieje možné pripnúť hlášku od niekoho iného - private: Neverejné príspevky nemôžu byť pripnuté + private: Neverejný príspevok nemôže byť pripnutý reblog: Vyzdvihnutie sa nedá pripnúť poll: + total_people: + few: "%{count} ľudí" + many: "%{count} ľudia" + one: "%{count} človek" + other: "%{count} ľudí" + total_votes: + few: "%{count} hlasov" + many: "%{count} hlasov" + one: "%{count} hlas" + other: "%{count} hlasy" vote: Hlasuj show_more: Ukáž viac sign_in_to_participate: Prihlás sa pre zapojenie do diskusie @@ -801,6 +1051,8 @@ sk: pinned: Pripnutý príspevok reblogged: vyzdvihnutý sensitive_content: Senzitívny obsah + tags: + does_not_match_previous_name: nezhoduje sa s predošlým názvom terms: body_html: | <h2>Podmienky súkromia</h2> @@ -838,11 +1090,11 @@ sk: default: "%b %d, %R, %H:%M" two_factor_authentication: code_hint: Pre potvrdenie teraz zadaj kód vygenerovaný pomocou tvojej overovacej aplikácie - description_html: Ak povolíš <strong> dvoj-faktorové overovanie</strong>, na prihlásenie potom budeš potrebovať svoj telefón, ktorý vygeneruje prístupové kódy, čo musíš zadať. + description_html: Ak povolíš <strong> dvojfázové overovanie</strong>, na prihlásenie potom budeš potrebovať svoj telefón, ktorý vygeneruje prístupové kódy, čo musíš zadať. disable: Zakáž enable: Povoľ - enabled: Dvoj-faktorové overovanie je povolené - enabled_success: Dvoj-faktorové overovanie bolo úspešne povolené + enabled: Dvojfázové overovanie je povolené + enabled_success: Dvojfázové overovanie úspešne povolené generate_recovery_codes: Vygeneruj zálohové kódy instructions_html: "<strong>Naskenuj tento QR kód do Google Autentikátora, alebo do podobnej TOTP aplikácie pomocou svojho telefónu.</strong> Od tejto chvíle bude táto aplikácia pre teba generovať kódy ktoré musíš zadať aby si sa prihlásil/a." lost_recovery_codes: Zálohové kódy ti umožnia dostať sa k svojmu účtu ak stratíš telefón. Pokiaľ si stratila svoje zálohové kódy, môžeš si ich tu znovu vygenerovať. Tvoje staré zálohové kódy budú zneplatnené. @@ -862,7 +1114,9 @@ sk: disable: Pokiaľ je tvoj účet zamrazený, tvoje dáta zostávajú nedoknuté, ale nemôžeš v rámci neho nič robiť, až kým nebude odomknutý. silence: Kým máš účet obmedzený, tvoje príspevky na tomto serveri uvidia iba tí ľudia, ktorí ťa už následujú, a môžeš byť vylúčený/á z rôznych verejných záznamov. Ostatní ťa však stále budú môcť následovať manuálne. suspend: Tvoj účet bol vylúčený, a všetky tvoje príspevky a nahraté médiálné súbory boli nenávratne zmazané z tohto serveru, a zo serverov na ktorých si mal následovateľov. + get_in_touch: Môžeš na tento email odpovedať, pre skontaktovanie sa s tímom %{instance}. review_server_policies: Prehodnoť pravidlá servera + statuses: 'Konkrétne kvôli:' subject: disable: Tvoj účet %{acct} bol zamrazený none: Varovanie pre %{acct} @@ -875,7 +1129,7 @@ sk: suspend: Tvoj účet bol vylúčený welcome: edit_profile_action: Nastav profil - edit_profile_step: Profil si môžeš prispôsobiť nahratím portrétu a hlavičky, môžeš upraviť svoje meno a viac. Pokiaľ chceš preverovať nových následovateľov predtým než ťa budú môcť sledovať, môžeš uzamknúť svoj účet. + edit_profile_step: Profil si môžeš prispôsobiť nahratím portrétu a záhlavia, môžeš upraviť svoje meno a viac. Pokiaľ chceš preverovať nových následovateľov predtým než ťa budú môcť sledovať, môžeš uzamknúť svoj účet. explanation: Tu nájdeš nejaké tipy do začiatku final_action: Začni prispievať final_step: 'Začni písať! Aj bez následovateľov budú tvoje verejné príspevky videné ostatnými, napríklad na miestnej osi a pod haštagmi. Ak chceš, môžeš sa ostatným predstaviť pod haštagom #introductions.' diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 85e167ca9..22b58e7b6 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1,22 +1,32 @@ --- sl: about: - about_hashtag_html: To so javni tuti, označeni z <strong>#%{hashtag}</strong>. Z njimi se lahko povežete, če imate račun kjerkoli v fediversu. + about_hashtag_html: To so javni tuti, označeni z <strong>#%{hashtag}</strong>. Z njimi se lahko povežete, če imate račun kjerkoli v fediverse-u. about_mastodon_html: Mastodon je socialno omrežje, ki temelji na odprtih spletnih protokolih in prosti ter odprtokodni programski opremi. Je decentraliziran, kot e-pošta. about_this: O Mastodonu + active_count_after: dejaven + active_footnote: Aktivni mesečni uporabniki (AMU) administered_by: 'Upravlja:' + api: API apps: Mobilne aplikacije + apps_platforms: Uporabljajte Mastodon iz iOS, Android ali iz drugih platform + browse_directory: Brskajte po imeniku profilov in filtriranje po interesih + browse_public_posts: Brskajte javnih objav v živo na Mastodonu contact: Kontakt contact_missing: Ni nastavljeno contact_unavailable: Ni na voljo + discover_users: Odkrijte uporabnike documentation: Dokumentacija - extended_description_html: | - <h3>Dober prostor za pravila</h3> - <p>Razširjen opis še ni bil nastavljen.</p> - generic_description: "%{domain} je en strežnik v omrežju" + federation_hint_html: Z računom na %{instance} boste lahko spremljali ljudi na kateremkoli Mastodon strežniku. + get_apps: Poskusite mobilno aplikacijo hosted_on: Mastodon gostuje na %{domain} - learn_more: Spoznaj več - privacy_policy: Politika zasebnosti + instance_actor_flash: | + Ta račun je navidezni igralec, ki predstavlja strežnik in ne posameznega uporabnika. + Uporablja se za namene federacije in se ne blokira, če ne želite blokirati celotne instance. V tem primeru blokirajte domeno. + learn_more: Nauči se več + privacy_policy: Pravilnik o zasebnosti + see_whats_happening: Poglejte, kaj se dogaja + server_stats: 'Statistika strežnika:' source_code: Izvorna koda status_count_after: few: stanja @@ -24,12 +34,13 @@ sl: other: stanj two: stanja status_count_before: Ki so avtorji + tagline: Sledite prijateljem in odkrijte nove terms: Pogoji storitve user_count_after: few: uporabniki one: uporabnik other: uporabnikov - two: uporabniki + two: uporabnika user_count_before: Dom za what_is_mastodon: Kaj je Mastodon? accounts: @@ -38,56 +49,61 @@ sl: followers: few: Sledilci one: Sledilec - other: Sledilci - two: Sledilci + other: Sledilcev + two: Sledilca following: Sledim joined: Se je pridružil na %{date} - last_active: zadnji aktivni + last_active: zadnja dejavnost link_verified_on: Lastništvo te povezave je bilo preverjeno na %{date} - media: Medij + media: Mediji moved_html: "%{name} se je prestavil na %{new_profile_link}:" - network_hidden: Te informacije niso na voljo - nothing_here: Nič ni tukaj! + network_hidden: Ta informacija ni na voljo + nothing_here: Tukaj ni ničesar! people_followed_by: Ljudje, ki jim sledi %{name} people_who_follow: Ljudje, ki sledijo %{name} pin_errors: following: Verjetno že sledite osebi, ki jo želite potrditi posts: - few: Trob - one: Trob - other: Trob - two: Trob - posts_tab_heading: Trobi + few: Tuti + one: Tut + other: Tutov + two: Tuta + posts_tab_heading: Tuti posts_with_replies: Tuti in odgovori reserved_username: Uporabniško ime je zasedeno roles: admin: Skrbnik bot: Robot + moderator: Mod + unavailable: Profil ni na voljo unfollow: Prenehaj slediti admin: account_actions: action: Izvedi dejanje - title: Izvedi moderirano dejanje %{acct} + title: Izvedi moderirano dejanje za %{acct} account_moderation_notes: create: Pusti opombo - created_msg: Uspešno ustvarjena opomba moderiranja! + created_msg: Moderirana opomba je uspešno ustvarjena! delete: Izbriši destroyed_msg: Moderirana opomba je uspešno uničena! accounts: - are_you_sure: Ali si prepričan? + approve: Odobri + approve_all: Odobri vse + are_you_sure: Ali ste prepričani? + avatar: Podoba by_domain: Domena change_email: changed_msg: E-pošta računa je uspešno spremenjena! - current_email: Trenutna E-pošta - label: Spremeni E-pošto - new_email: Nova E-pošta - submit: Spremeni E-pošto - title: Spremeni E-pošto za %{username} + current_email: Trenutna e-pošta + label: Spremeni e-pošto + new_email: Nova e-pošta + submit: Spremeni e-pošto + title: Spremeni e-pošto za %{username} confirm: Potrdi confirmed: Potrjeno confirming: Potrjujem deleted: Izbrisano - demote: Ponižaj + demote: Degradiraj disable: Onemogoči disable_two_factor_authentication: Onemogoči 2FA disabled: Onemogočeno @@ -95,44 +111,50 @@ sl: domain: Domena edit: Uredi email: E-pošta - email_status: Stanje E-pošte + email_status: Stanje e-pošte enable: Omogoči enabled: Omogočeno - feed_url: URL vir + feed_url: URL vira followers: Sledilci - followers_url: URL sledilci + followers_url: URL sledilcev follows: Sledi header: Glava - inbox_url: URl v mapi "Prejeto" + inbox_url: URL mape "Prejeto" invited_by: Povabljen od + ip: IP joined: Pridružil location: all: Vse - local: Lokalno + local: Lokalni remote: Oddaljeni title: Lokacija login_status: Stanje prijave - media_attachments: Medijske priloge + media_attachments: Predstavnostne priloge memorialize: Spremenite v spomin moderation: active: Dejaven all: Vse + pending: Na čakanju silenced: Utišan suspended: Suspendiran title: Moderiranje moderation_notes: Opombe moderiranja - most_recent_activity: Zadnja aktivnost + most_recent_activity: Zadnja dejavnost most_recent_ip: Zadnji IP + no_account_selected: Noben račun ni bil spremenjen, ker ni bil izbran noben no_limits_imposed: Brez omejitev - not_subscribed: Ni naročeno - outbox_url: URl za pošiljanje - perform_full_suspension: Začasno ustavi + not_subscribed: Ni naročen + outbox_url: URL za pošiljanje + pending: Čakanje na pregled + perform_full_suspension: Suspendiraj profile_url: URL profila - promote: Spodbujanje + promote: Promoviraj protocol: Protokol public: Javen push_subscription_expires: Naročnina PuSH preteče redownload: Osveži profil + reject: Zavrni + reject_all: Zavrni vse remove_avatar: Odstrani podobo remove_header: Odstrani glavo resend_confirmation: @@ -145,9 +167,11 @@ sl: role: Dovoljenja roles: admin: Skrbnik + moderator: Moderator staff: Osebje user: Uporabnik - search: Poišči + salmon_url: URL lososa + search: Iskanje shared_inbox_url: URL mape "Prejeto v skupni rabi" show: created_reports: Narejene prijave @@ -157,6 +181,7 @@ sl: statuses: Stanja subscribe: Naroči suspended: Suspendiran + time_in_queue: Čakanje v vrsti %{time} title: Računi unconfirmed_email: Nepotrjena e-pošta undo_silenced: Razveljavi utišanje @@ -165,33 +190,34 @@ sl: username: Uporabniško ime warn: Opozori web: Splet + whitelisted: Na belem seznamu action_logs: actions: assigned_to_self_report: "%{name} je prijavil %{target} sebi" change_email_user: "%{name} je spremenil naslov e-pošte uporabnika %{target}" confirm_user: "%{name} je potrdil naslov e-pošte uporabnika %{target}" create_account_warning: "%{name} je poslal opozorilo %{target}" - create_custom_emoji: "%{name} je poslal nove emotikone %{target}" + create_custom_emoji: "%{name} je posodobil emotikone %{target}" create_domain_block: "%{name} je blokiral domeno %{target}" create_email_domain_block: "%{name} je dal na črni seznam e-pošto domene %{target}" demote_user: "%{name} je degradiral uporabnika %{target}" - destroy_custom_emoji: "%{name} je uničil emotikon %{target}" + destroy_custom_emoji: "%{name} je uničil emotikone %{target}" destroy_domain_block: "%{name} je odblokiral domeno %{target}" destroy_email_domain_block: "%{name} je dal na beli seznam e-pošto domene %{target}" destroy_status: "%{name} je odstranil stanje od %{target}" disable_2fa_user: "%{name} je onemogočil dvofaktorsko zahtevo za uporabnika %{target}" - disable_custom_emoji: "%{name} je onemogočil emotikon %{target}" + disable_custom_emoji: "%{name} je onemogočil emotikone %{target}" disable_user: "%{name} je onemogočil prijavo za uporabnika %{target}" - enable_custom_emoji: "%{name} je omogočil emotikon %{target}" + enable_custom_emoji: "%{name} je omogočil emotikone %{target}" enable_user: "%{name} je omogočil prijavo za uporabnika %{target}" memorialize_account: "%{name} je spremenil račun od %{target} v stran spominov" - promote_user: "%{name} je spodbudil uporabnika %{target}" + promote_user: "%{name} je promoviral uporabnika %{target}" remove_avatar_user: "%{name} je odstranil podobo od %{target}" reopen_report: "%{name} je ponovno odprl prijavo %{target}" reset_password_user: "%{name} je ponastavil geslo od uporabnika %{target}" resolve_report: "%{name} je razrešil prijavo %{target}" silence_account: "%{name} je utišal račun od %{target}" - suspend_account: "%{name} je začasno ustavil račun od %{target}" + suspend_account: "%{name} je suspendiral račun od %{target}" unassigned_report: "%{name} je nedodeljeno prijavil %{target}" unsilence_account: "%{name} je preklical utišanje računa od %{target}" unsuspend_account: "%{name} je aktiviral račun od %{target}" @@ -201,9 +227,9 @@ sl: title: Dnevnik revizije custom_emojis: by_domain: Domena - copied_msg: Lokalna kopija emotikona je bila uspešno ustvarjena + copied_msg: Lokalna kopija emotikonov je bila uspešno ustvarjena copy: Kopiraj - copy_failed_msg: Lokalne kopije emotikona ni bilo mogoče ustvariti + copy_failed_msg: Lokalne kopije emotikonov ni bilo mogoče ustvariti created_msg: Emotikon je uspešno ustvarjen! delete: Izbriši destroyed_msg: Emotikon je uspešno uničen! @@ -225,13 +251,15 @@ sl: updated_msg: Emotikon je uspešno posodobljen! upload: Pošlji dashboard: - backlog: Zaostala opravila + backlog: zaostala opravila config: Nastavitve feature_deletions: Brisanje računov - feature_invites: Poveza povabil - feature_profile_directory: Mapa profila + feature_invites: Povezave povabil + feature_profile_directory: Imenik profilov feature_registrations: Registracije feature_relay: Rele federacije + feature_spam_check: Anti-spam + feature_timeline_preview: Predogled časovnice features: Zmožnosti hidden_service: Federacija s skritimi storitvami open_reports: odprte prijave @@ -241,22 +269,28 @@ sl: software: Programska oprema space: Uporaba prostora title: Nadzorna plošča - total_users: Skupaj uporabnikov + total_users: skupaj uporabnikov trends: Trendi week_interactions: interakcije ta teden week_users_active: aktivni ta teden week_users_new: uporabniki ta teden + domain_allows: + add_new: Dodaj domeno na beli seznam + created_msg: Domena je bila uspešno dodana na beli seznam + destroyed_msg: Domena je bila odstranjena iz belega seznama + undo: Odstrani iz belega seznama domain_blocks: add_new: Dodaj nov domenski blok created_msg: Domenski blok se sedaj obdeluje destroyed_msg: Domenski blok je bil razveljavljen domain: Domena + existing_domain_block_html: Uvedli ste strožje omejitve za %{name}, sedaj ga morate najprej <a href="%{unblock_url}">odblokirati</a>. new: create: Ustvari blok hint: Domenski blok ne bo preprečil ustvarjanja vnosov računov v zbirko podatkov, ampak bo retroaktivno in samodejno uporabil posebne metode moderiranja na teh računih. severity: desc_html: "<strong>Utišaj</strong> bo vse objave računa naredil nevidne vsem, ki jih ne sledijo. <strong>Suspendiraj</strong> bo odstranil vso vsebino, medije in podatke profila računa. Uporabi <strong>nič</strong>, če želite le zavrniti predstavnostne datoteke." - noop: Nič + noop: Brez silence: Utišaj suspend: Suspendiraj title: Nov domenski blok @@ -271,13 +305,13 @@ sl: suspend: suspendirani show: affected_accounts: - few: "%{count} računov v bazi podatkov so prizadeti" + few: "%{count} računi v bazi podatkov so prizadeti" one: En račun v bazi podatkov je prizadet - other: "%{count} računov v bazi podatkov so prizadeti" - two: "%{count} računov v bazi podatkov so prizadeti" + other: "%{count} računov v bazi podatkov je prizadetih" + two: "%{count} računa v bazi podatkov so prizadeta" retroactive: silence: Prekliči utišanje za vse obstoječe račune iz te domene - suspend: Odsuspendiraj vse obstoječe račune iz te domene + suspend: Aktiviraj vse obstoječe račune iz te domene title: Razveljavi domenski blok za %{domain} undo: Razveljavi undo: Razveljavi domenski blok @@ -290,17 +324,18 @@ sl: new: create: Dodaj domeno title: Nov vnos e-pošte na črni seznam - title: Črni seznam e-pošte + title: Črni seznam e-pošt followers: back_to_account: Nazaj na račun title: Sledilci od %{acct} instances: + by_domain: Domena delivery_available: Na voljo je dostava known_accounts: - few: "%{count} znanih računov" + few: "%{count} znani računi" one: "%{count} znan račun" other: "%{count} znanih računov" - two: "%{count} znanih računov" + two: "%{count} znana računa" moderation: all: Vse limited: Omejeno @@ -317,15 +352,18 @@ sl: all: Vse available: Razpoložljivo expired: Potekel + title: Filter title: Povabila + pending_accounts: + title: "(%{count}) računov na čakanju" relays: add_new: Dodaj nov rele delete: Izbriši - description_html: "<strong>Rele federacije</strong> je posredniški strežnik, ki si izmenjuje velike količine javnih trobov med strežniki, ki so se naročili in objavili na njem. <strong>Majhnim in srednjim strežnikom lahko pomaga pri odkrivanju vsebine iz sistema fediverse</strong>, kar bi sicer zahtevalo, da lokalni uporabniki ročno sledijo druge osebe na oddaljenih strežnikih." + description_html: "<strong>Rele federacije</strong> je posredniški strežnik, ki si izmenjuje velike količine javnih tutov med strežniki, ki so se naročili in objavili na njem. <strong>Majhnim in srednjim strežnikom lahko pomaga pri odkrivanju vsebine iz sistema fediverse</strong>, kar bi sicer zahtevalo, da lokalni uporabniki ročno sledijo druge osebe na oddaljenih strežnikih." disable: Onemogoči disabled: Onemogočeno enable: Omogoči - enable_hint: Ko je omogočen, se bo vaš strežnik naročil na vse javne trobe iz tega releja in začel pošiljati javne trobe tega strežnika. + enable_hint: Ko je omogočen, se bo vaš strežnik naročil na vse javne tute iz tega releja in začel pošiljati javne tute tega strežnika. enabled: Omogočeno inbox_url: URL releja pending: Čakanje na odobritev releja @@ -345,7 +383,7 @@ sl: assign_to_self: Dodeli meni assigned: Dodeljen moderator comment: - none: Nič + none: Brez created_at: Prijavljeno mark_as_resolved: Označi kot rešeno mark_as_unresolved: Označi kot nerešeno @@ -359,19 +397,19 @@ sl: report: 'Prijavi #%{id}' reported_account: Prijavljeni račun reported_by: Prijavljen od - resolved: Razrešeno + resolved: Razrešeni resolved_msg: Prijava je uspešno razrešena! status: Stanje title: Prijave - unassign: Odstopi - unresolved: Nerešeno - updated_at: Posodobljen + unassign: Odstopljeni + unresolved: Nerešeni + updated_at: Posodobljeni settings: activity_api_enabled: desc_html: Številke lokalno objavljenih stanj, aktivnih uporabnikov in novih registracij na tedenskih seznamih title: Objavi združeno statistiko o dejavnosti uporabnikov bootstrap_timeline_accounts: - desc_html: Več uporabniških imen ločite z vejico. Deluje samo na lokalnih in odklenjenih računih. Privzeto, ko je prazno, pri vseh lokalnih skrbnikih. + desc_html: Več uporabniških imen ločite z vejico. Deluje samo na lokalnih in odklenjenih računih. Privzeto, ko je prazno, je pri vseh lokalnih skrbnikih. title: Privzeta sledenja za nove uporabnike contact_information: email: Poslovna e-pošta @@ -379,24 +417,685 @@ sl: custom_css: desc_html: Spremeni videz z naloženim CSS na vsaki strani title: CSS po meri + hero: + desc_html: Prikazano na sprednji strani. Priporoča se vsaj 600x100px. Ko ni nastavljen, se vrne na sličico strežnika + title: Slika junaka + mascot: + desc_html: Prikazano na več straneh. Priporočena je najmanj 293 × 205 px. Ko ni nastavljen, se vrne na privzeto maskoto + title: Slika maskote + peers_api_enabled: + desc_html: Domene, na katere je ta strežnik naletel na fediverse-u + title: Objavi seznam odkritih strežnikov + preview_sensitive_media: + desc_html: Predogledi povezav na drugih spletiščih bodo prikazali sličico, tudi če je medij označen kot občutljiv + title: Prikaži občutljive medije v predogledih OpenGraph + profile_directory: + desc_html: Dovoli uporabnikom, da jih lahko odkrijejo + title: Omogoči imenik profilov + registrations: + closed_message: + desc_html: Prikazano na prvi strani, ko so registracije zaprte. Lahko uporabite oznake HTML + title: Sporočilo o zaprti registraciji + deletion: + desc_html: Dovoli vsakomur, da izbriše svoj račun + title: Odpri brisanje računa + min_invite_role: + disabled: Nihče + title: Dovoli vabila od + registrations_mode: + modes: + approved: Potrebna je odobritev za prijavo + none: Nihče se ne more prijaviti + open: Vsakdo se lahko prijavi + title: Način registracije + show_known_fediverse_at_about_page: + desc_html: Ko preklopite, bo prikazal tute vseh znanih fediverse-ov v predogledu. V nasprotnem primeru bodo prikazani samo lokalni tuti. + title: Pokaži znane fediverse-e v predogledu časovnice + show_staff_badge: + desc_html: Prikaži značko osebja na uporabniški strani + title: Prikaži značko osebja + site_description: + desc_html: Uvodni odstavek na API-ju. Opišite, zakaj je ta Mastodon strežnik poseben in karkoli pomembnega. Lahko uporabite HTML oznake, zlasti <code><a></code> in <code><em></code>. + title: Opis strežnika + site_description_extended: + desc_html: Dober kraj za vaš kodeks ravnanja, pravila, smernice in druge stvari, ki ločujejo vaš strežnik. Lahko uporabite oznake HTML + title: Razširjene informacije po meri + site_short_description: + desc_html: Prikazano v stranski vrstici in metaoznakah. V enem odstavku opišite, kaj je Mastodon in kaj naredi ta strežnik poseben. + title: Kratek opis strežnika + site_terms: + desc_html: Lahko napišete svojo pravilnik o zasebnosti, pogoje storitve ali druge pravne dokumente. Lahko uporabite oznake HTML + title: Pogoji storitve po meri + site_title: Ime strežnika + spam_check_enabled: + desc_html: Mastodon lahko samodejno utiša in samodejno prijavi račune, ki temeljijo na ukrepih, kot je odkrivanje računov, ki pošiljajo ponavljajoča se neželena sporočila. Lahko pride do zmot. + title: Anti-spam + thumbnail: + desc_html: Uporablja se za predogled prek OpenGrapha in API-ja. Priporočamo 1200x630px + title: Sličica strežnika + timeline_preview: + desc_html: Prikaži javno časovnico na ciljni strani + title: Predogled časovnice + title: Nastavitve strani + statuses: + back_to_account: Nazaj na stran računa + batch: + delete: Izbriši + nsfw_off: Označi, da ni občutljivo + nsfw_on: Označi, kot občutljivo + failed_to_execute: Ni bilo mogoče izvesti + media: + title: Mediji + no_media: Ni medijev + no_status_selected: Nobeno stanje ni bilo spremenjeno, ker ni bilo izbrano nobeno + title: Stanja računa + with_media: Z mediji + tags: + title: Ključniki + title: Upravljanje + warning_presets: + add_new: Dodaj novo + delete: Izbriši + edit: Uredi + edit_preset: Uredi prednastavitev opozoril + title: Upravljaj prednastavitev opozoril + admin_mailer: + new_pending_account: + body: Podrobnosti o novem računu so navedene spodaj. To aplikacijo lahko odobrite ali zavrnete. + subject: Nov račun za pregled na %{instance} (%{username}) + new_report: + body: "%{reporter} je prijavil %{target}" + body_remote: Nekdo iz %{domain} je prijavil %{target} + subject: Nove prijave za %{instance} (#%{id}) + appearance: + advanced_web_interface: Napredni spletni vmesnik + advanced_web_interface_hint: 'Če želite uporabiti celotno širino zaslona, vam napredni spletni vmesnik omogoča, da si nastavite več različnih stolpcev in da si hkrati ogledate toliko informacij, kot želite: domačo stran, obvestila, združeno časovnico, poljubno število seznamov in ključnikov.' + animations_and_accessibility: Animacije in dostopnost + confirmation_dialogs: Potrditvena okna + sensitive_content: Občutljiva vsebina + application_mailer: + notification_preferences: Spremenite e-poštne nastavitve + salutation: "%{name}," + settings: 'Spremenite e-poštne nastavitve: %{link}' + view: 'Pogled:' + view_profile: Ogled profila + view_status: Ogled stanja + applications: + created: Aplikacija je bila uspešno ustvarjena + destroyed: Aplikacija je bila uspešno izbrisana + invalid_url: Navedeni URL je neveljaven + regenerate_token: Obnovite dostopni žeton + token_regenerated: Dostopni žeton je bil uspešno regeneriran + warning: Bodite zelo previdni s temi podatki. Nikoli jih ne delite z nikomer! + your_token: Vaš dostopni žeton + auth: + apply_for_account: Zahtevajte povabilo + change_password: Geslo + checkbox_agreement_html: Strinjam se s <a href="%{rules_path}" target="_blank">pravili strežnika</a> in <a href="%{terms_path}" target="_blank">pogoji storitve</a> + checkbox_agreement_without_rules_html: Strinjam se s <a href="%{terms_path}" target="_blank">pogoji storitve</a> + delete_account: Izbriši račun + delete_account_html: Če želite izbrisati svoj račun, lahko nadaljujete <a href="%{path}">tukaj</a>. Prosili vas bomo za potrditev. + didnt_get_confirmation: Niste prejeli navodil za potrditev? + forgot_password: Ste pozabili svoje geslo? + invalid_reset_password_token: Žeton za ponastavitev gesla je neveljaven ali je potekel. Zahtevajte novo. + login: Prijava + logout: Odjava + migrate_account: Premakni se na drug račun + migrate_account_html: Če želite ta račun preusmeriti na drugega, ga lahko <a href="%{path}">nastavite tukaj</a>. + or_log_in_with: Ali se prijavite z + providers: + cas: CAS + saml: SAML + register: Vpis + registration_closed: "%{instance} ne sprejema novih članov" + resend_confirmation: Ponovno pošlji navodila za potrditev + reset_password: Ponastavi geslo + security: Varnost + set_new_password: Nastavi novo geslo + setup: + email_below_hint_html: Če spodnji e-poštni naslov ni pravilen, ga lahko spremenite tukaj in prejmete novo potrditveno e-pošto. + email_settings_hint_html: Potrditvena e-pošta je bila poslana na %{email}. Če ta e-poštni naslov ni pravilen, ga lahko spremenite v nastavitvah računa. + title: Nastavitev + status: + account_status: Stanje računa + confirming: Čakanje na potrditev e-pošte. + pending: Naše osebje preverja vašo prijavo. To lahko traja nekaj časa. Če bo vaša prijava odobrena, boste prejeli e-pošto. + trouble_logging_in: Težave pri prijavi? + authorize_follow: + already_following: Temu računu že sledite + error: Na žalost je prišlo do napake pri iskanju oddaljenega računa + follow: Sledi + follow_request: 'Prošnjo za sledenje se poslali:' + following: 'Uspeh! Zdaj sledite:' + post_follow: + close: Lahko pa tudi zaprete to okno. + return: Prikaži uporabnikov profil + web: Pojdi na splet + title: Sledi %{acct} + datetime: + distance_in_words: + about_x_hours: "%{count}h" + about_x_months: "%{count}mo" + about_x_years: "%{count}y" + almost_x_years: "%{count}y" + half_a_minute: Pravkar + less_than_x_minutes: "%{count}m" + less_than_x_seconds: Pravkar + over_x_years: "%{count}y" + x_days: "%{count}d" + x_minutes: "%{count}m" + x_months: "%{count}mo" + x_seconds: "%{count}s" + deletes: + confirm_password: Vnesite svoje trenutno geslo, da potrdite svojo identiteto + proceed: Izbriši račun + success_msg: Vaš račun je bil uspešno izbrisan + directories: + directory: Imenik profilov + explanation: Odkrijte uporabnike glede na njihove interese + explore_mastodon: Razišči %{title} errors: - '403': You don't have permission to view this page. - '404': The page you are looking for isn't here. - '410': The page you were looking for doesn't exist here anymore. - '422': - '429': Throttled - '500': + '400': The request you submitted was invalid or malformed. + '403': Nimate dovoljenja za ogled te strani. + '404': Iskana stran ne obstaja. + '406': This page is not available in the requested format. + '410': Iskana stran ne obstaja več. + '422': + content: Varnostno preverjanje ni uspelo. Ali blokirate piškotke? + title: Varnostno preverjanje je spodletelo + '429': Omejeno + '500': + content: Žal nam je, toda na našem koncu je prišlo do napake. + title: Ta stran ni pravilna + '503': The page could not be served due to a temporary server failure. + noscript_html: Če želite uporabljati spletno aplikacijo Mastodon, omogočite JavaScript. Druga možnost je, da za svojo platformo poskusite eno od <a href="%{apps_path}">lastnih aplikacij</a> za Mastodon. + existing_username_validator: + not_found: s tem uporabniškim imenom ni bilo mogoče najti lokalnega uporabnika + not_found_multiple: ni bilo mogoče najti %{usernames} + exports: + archive_takeout: + date: Datum + download: Prenesi svoj arhiv + hint_html: Zahtevate lahko arhiv vaših <strong>tutov in naloženih medijev</strong>. Izvoženi podatki bodo v formatu ActivityPub, ki ga bo mogoče brati s katerokoli skladno programsko opremo. Arhiv lahko zahtevate vsakih 7 dni. + in_progress: Prevajanje arhiva... + request: Zahtevajte svoj arhiv + size: Velikost + blocks: Blokirate + csv: CSV + domain_blocks: Bloki domene + follows: Sledite + lists: Seznami + mutes: Utišate + storage: Shranjeni mediji + featured_tags: + add_new: Dodaj novo + errors: + limit: Ste že dodali največje število ključnikov + filters: + contexts: + home: Domača časovnica + notifications: Obvestila + public: Javne časovnice + thread: Pogovori + edit: + title: Uredite filter + errors: + invalid_context: Ne vsebuje nobenega ali vsebuje neveljaven kontekst + invalid_irreversible: Nepovratno filtriranje deluje le v kontekstu doma ali obvestil + index: + delete: Izbriši + title: Filtri + new: + title: Dodaj nov filter + footer: + developers: Razvijalci + more: Več… + resources: Viri + generic: + all: Vse + changes_saved_msg: Spremembe so uspešno shranjene! + copy: Kopiraj + order_by: Razvrsti po + save_changes: Shrani spremembe + validation_errors: + few: Nekaj še ni čisto v redu! Spodaj si oglejte %{count} napake + one: Nekaj še ni čisto v redu! Spodaj si oglejte napako + other: Nekaj še ni čisto v redu! Spodaj si oglejte %{count} napak + two: Nekaj še ni čisto v redu! Spodaj si oglejte %{count} napaki + html_validator: + invalid_markup: 'vsebuje neveljavno oznako HTML: %{error}' + identity_proofs: + active: Dejaven + authorize: Da, odobri + authorize_connection_prompt: Odobrite to kriptografsko povezavo? + errors: + failed: Kriptografska povezava ni uspela. Poskusite znova od %{provider}. + keybase: + invalid_token: Žetoni Keybase so algoritem podpisov in morajo biti sestavljeni iz 66 heksadecimalnih znakov + verification_failed: Keybase ne prepozna tega žetona kot podpis uporabnika %{kb_username}. Poskusite znova s Keybase-om. + wrong_user: Dokler se prijavite kot %{current}, ni mogoče ustvariti dokazila za %{proving}. Prijavite se kot %{proving} in poskusite znova. + explanation_html: Tukaj lahko kriptografsko povežete druge identitete, na primer profil Keybase. To omogoča drugim, da vam pošljejo šifrirana sporočila in zaupate vsebino, ki ste jo poslali. + i_am_html: Jaz sem %{username} na %{service}. + identity: Identiteta + inactive: Neaktiven + publicize_checkbox: 'In to tutnite:' + publicize_toot: 'Dokazano je! Jaz sem %{username} na %{service}: %{url}' + status: Stanje preverjanja + view_proof: Oglejte si dokaz + imports: + modes: + merge: Združi + merge_long: Ohrani obstoječe zapise in dodaj nove + overwrite: Prepiši + overwrite_long: Zamenjaj trenutne zapise z novimi + preface: Podatke, ki ste jih izvozili iz drugega strežnika, lahko uvozite. Na primer seznam oseb, ki jih spremljate ali blokirate. + success: Vaši podatki so bili uspešno naloženi in bodo zdaj pravočasno obdelani + types: + blocking: Seznam blokiranih + domain_blocking: Seznam blokiranih domen + following: Seznam uporabnikov, katerim sledite + muting: Seznam utišanih + upload: Pošlji + in_memoriam_html: V spomin. invites: + delete: Onemogoči + expired: Poteklo expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day + '1800': 30 minut + '21600': 6 ur + '3600': 1 ura + '43200': 12 ur + '604800': 1 teden + '86400': 1 dan + expires_in_prompt: Nikoli + generate: Ustvari + invited_by: 'Povabil/a vas je:' + max_uses: + few: "%{count} uporabe" + one: 1 uporaba + other: "%{count} uporab" + two: "%{count} uporabi" + max_uses_prompt: Brez omejitve + prompt: Ustvarite in delite povezave z drugimi, da omogočite dostop do tega strežnika + table: + expires_at: Poteče + uses: Uporabe + title: Povabite ljudi + lists: + errors: + limit: Dosegli ste največje število seznamov + media_attachments: + validations: + images_and_video: Videoposnetka ni mogoče priložiti stanju, ki že vsebuje slike + too_many: Ni možno priložiti več kot 4 datoteke + migrations: + acct: username@domain novega računa + moderation: + title: Moderiranje + notification_mailer: + digest: + action: Prikaži vsa obvestila + body: Tukaj je kratek povzetek sporočil, ki ste jih zamudili od vašega zadnjega obiska v %{since} + mention: "%{name} vas je omenil/a v:" + new_followers_summary: + few: Prav tako ste pridobili %{count} nove sledilce, ko ste bili odsotni! Juhu! + one: Prav tako ste pridobili enega novega sledilca, ko ste bili odsotni! Juhu! + other: Prav tako ste pridobili %{count} novih sledilcev, ko ste bili odsotni! Juhu! + two: Prav tako ste pridobili %{count} nova sledilca, ko ste bili odsotni! Juhu! + subject: + few: "%{count} nova obvestila od vašega zadnjega obiska \U0001F418" + one: "1 novo obvestilo od vašega zadnjega obiska \U0001F418" + other: "%{count} novih obvestil od vašega zadnjega obiska \U0001F418" + two: "%{count} novi obvestili od vašega zadnjega obiska \U0001F418" + title: V vaši odsotnosti... + favourite: + body: "%{name} je vzljubil/a vaše stanje:" + subject: "%{name} je vzljubil/a vaše stanje" + title: Novo priljubljeno + follow: + body: "%{name} vam sedaj sledi!" + subject: "%{name} vam sedaj sledi" + title: Novi sledilec + follow_request: + action: Upravljajte s prošnjami za sledenje + body: "%{name} vas je prosil/a za sledenje" + subject: 'Čakajoči sledilec/ka: %{name}' + title: Nova prošnja za sledenje + mention: + action: Odgovori + body: "%{name} vas je omenil/a v:" + subject: "%{name} vas je omenil/a" + title: Nova omemba + reblog: + body: "%{name} je spodbudil/a vaše stanje:" + subject: "%{name} je spodbudil/a vaše stanje" + title: Nova spodbuda + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T + pagination: + newer: Novejše + next: Naprej + older: Starejše + prev: Nazaj + truncate: "…" + polls: + errors: + already_voted: Na tej anketi ste že glasovali + duplicate_options: vsebuje podvojene elemente + duration_too_long: je predaleč v prihodnosti + duration_too_short: je prezgodaj + expired: Glasovanje se je že zaključilo + over_character_limit: ne more biti daljše od %{max} znakov + too_few_options: mora imeti več kot en element + too_many_options: ne more vsebovati več kot %{max} elementov + preferences: + other: Ostalo + posting_defaults: Privzete nastavitev objavljanja + public_timelines: Javne časovnice + relationships: + activity: Dejavnost računa + dormant: Skrit + last_active: Zadnja dejavnost + most_recent: Najnovejša + moved: Prestavljeno + mutual: Vzajemna + primary: Primarna + relationship: Razmerje + remove_selected_domains: Odstrani vse sledilce iz izbranih domen + remove_selected_followers: Odstrani izbrane sledilce + remove_selected_follows: Prenehaj slediti izbranim uporabnikom + status: Stanje računa + remote_follow: + acct: Vnesite uporabniško_ime@domena, iz katerega želite delovati + missing_resource: Za vaš račun ni bilo mogoče najti zahtevanega URL-ja za preusmeritev + no_account_html: Še nimate računa? Tukaj se lahko <a href='%{sign_up_path}' target='_blank'>prijavite</a> + proceed: Nadaljujte + prompt: 'Sledili boste:' + reason_html: "<strong>Zakaj je ta korak potreben?</strong> <code>%{instance}</code> morda ni strežnik, kjer ste registrirani, zato vas moramo najprej preusmeriti na domači strežnik." + remote_interaction: + favourite: + proceed: Nadaljuj s priljubljenim + prompt: 'Ali želite vzljubiti ta tut:' + reblog: + proceed: Nadaljuj s spodbudo + prompt: 'Ali želite spodbuditi ta tut:' + reply: + proceed: Nadaljuj z odgovorom + prompt: 'Ali želite odgovoriti na ta tut:' + scheduled_statuses: + over_daily_limit: Za ta dan ste presegli omejitev %{limit} načrtovanih tutov + over_total_limit: Presegli ste omejitev %{limit} načrtovanih tutov + too_soon: Načrtovani datum mora biti v prihodnosti + sessions: + activity: Zadnja dejavnost + browser: Brskalnik + browsers: + alipay: Alipay + blackberry: BlackBerry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Neznan brskalnik + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UC Browser + weibo: Weibo + current_session: Trenutna seja + description: "%{browser} na %{platform}" + explanation: To so spletni brskalniki, ki so trenutno prijavljeni v vaš Mastodon račun. + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: BlackBerry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac + other: neznana platforma + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone + revoke: Prekliči + revoke_success: Seja je bila uspešno preklicana + title: Seje + settings: + account: Račun + account_settings: Nastavitve računa + appearance: Videz + authorized_apps: Pooblaščene aplikacije + back: Nazaj na Mastodon + delete: Brisanje računa + development: Razvoj + edit_profile: Uredi profil + export: Izvoz podatkov + featured_tags: Vključeni ključniki + identity_proofs: Dokazi o identiteti + import: Uvozi + import_and_export: Uvoz in izvoz + migrate: Selitev računa + notifications: Obvestila + preferences: Nastavitve + profile: Profil + relationships: Sledenja in sledilci + two_factor_authentication: Dvofaktorsko overjanje statuses: + attached: + description: 'Priloženo: %{attached}' + image: + few: "%{count} slike" + one: "%{count} slika" + other: "%{count} slik" + two: "%{count} sliki" + video: + few: "%{count} video posnetki" + one: "%{count} video posnetek" + other: "%{count} video posnetkov" + two: "%{count} video posnetka" + boosted_from_html: Spodbujeno iz %{acct_link} + content_warning: 'Opozorilo o vsebini: %{warning}' + disallowed_hashtags: + few: 'vsebuje nedovoljene ključnike: %{tags}' + one: 'vsebuje nedovoljeni ključnik: %{tags}' + other: 'vsebuje nedovoljenih ključnikov: %{tags}' + two: 'vsebuje nedovoljena ključnika: %{tags}' + language_detection: Samodejno zaznaj jezik + open_in_web: Odpri na spletu + over_character_limit: omejitev %{max} znakov je presežena pin_errors: + limit: Pripeli ste največje število tutov ownership: Trob nekoga drugega ne more biti pripet private: Nejavnega troba ni mogoče pripeti + reblog: Spodbuda ne more biti pripeta + poll: + total_votes: + few: "%{count} glasovi" + one: "%{count} glas" + other: "%{count} glasov" + two: "%{count} glasova" + vote: Glasuj + show_more: Pokaži več + sign_in_to_participate: Prijavite se, če želite sodelovati v pogovoru + title: '%{name}: "%{quote}"' + visibilities: + private: Samo sledilci + private_long: Prikaži samo sledilcem + public: Javno + public_long: Vsi lahko vidijo + unlisted: Ni prikazano + unlisted_long: Vsi lahko vidijo, vendar ni objavljeno na javnih časovnicah stream_entries: pinned: Pripet trob + reblogged: spodbujen + sensitive_content: Občutljiva vsebina + terms: + body_html: | + <h2>Pravilnik o zasebnosti</h2> + <h3 id="collect">Katere informacije zbiramo?</h3> + + <ul> + <li><em>Osnovni podatki o računu</em>: Če se registrirate na tem strežniku, boste morda morali vnesti uporabniško ime, e-poštni naslov in geslo. Vnesete lahko tudi dodatne informacije o profilu, na primer prikazno ime in biografijo, ter naložite sliko profila in sliko glave. Uporabniško ime, prikazno ime, biografija, slika profila in slika glave so vedno javno dostopni.</li> + <li><em>Objave, sledenja in druge javne informacije</em>: Seznam oseb, ki jim sledite, je javno dostopen, enako velja za vaše sledilce. Ko pošljete sporočilo, sta datum in čas shranjena, kot tudi aplikacija, iz katere ste poslali sporočilo. Sporočila lahko vsebujejo medijske priloge, kot so slike in video posnetki. Javne in neprikazane objave so javno dostopne. Ko v profilu vključite objavo, je to tudi javno dostopna informacija. Vaše objave, ki so dostavljene vašim sledilcem, so včasih dostavljeni na različne strežnike, kjer se kopije objav tudi shranijo. Ko izbrišete objave, se to prav tako dostavi vašim sledilcem. Spodbujanje in vzljubitev drugih objav sta veno javni.</li> + <li><em>Neposredne objave in objave samo za sledilce</em>: Vse objave so shranjene in obdelane na strežniku. Objave samo za sledilce se dostavijo vašim sledilcem in uporabnikom, ki so v njih omenjeni. Neposredne objave se posredujejo samo uporabnikom, ki so v njih omenjeni. V nekaterih primerih so dostavljeni na različne strežnike, kopije pa se shranijo tam. V dobri veri si prizadevamo omejiti dostop do teh objav samo pooblaščenim osebam, vendar drugi strežniki to morda ne bodo storili. Zato je pomembno, da pregledate strežnike, na katerih so sledilci. V nastavitvah lahko preklapljate med možnostmi za odobritev in zavrnitev novih sledilcev. <em> Ne pozabite, da lahko operaterji strežnika in kateri koli prejemni strežnik takšna sporočila pregledajo </em> in da jih lahko prejemniki posnamejo, kopirajo ali drugače ponovno delijo. <em> Ne pošiljajte nevarnih informacij skozi Mastodon. </em> </li> + <li><em>IP-ji in drugi metapodatki</em>: Ko se prijavite, zabeležimo naslov IP, s katerega se prijavljate, in ime aplikacije brskalnika. V nastavitvah so za pregled in preklic na voljo vse prijavljene seje. Zadnji uporabljeni IP naslov je shranjen do 12 mesecev. Prav tako lahko obdržimo dnevnike strežnikov, ki vsebujejo IP naslov vsake zahteve na naš strežnik. </li> + </ul> + + <hr class="spacer" /> + + <h3 id="use">Za kaj uporabljamo vaše podatke?</h3> + + <p>Vse informacije, ki jih zbiramo od vas, so lahko uporabljene na naslednje načine:</p> + + <ul> + <li>Za zagotavljanje osrednje funkcionalnosti Mastodona. Komunicirate lahko z vsebino drugih oseb in objavljate lastno vsebino, ko ste prijavljeni. Na primer, lahko spremljate druge osebe in si ogledate njihove kombinirane objave v svoji prilagojeni domači časovnici.</li> + <li>Za pomoč pri moderiranju skupnosti, na primer primerjavo vašega naslova IP naslova z drugimi znanimi, za izobčitev izmikanja ali drugih kršitev.</li> + <li>E-poštni naslov, ki ga navedete, se lahko uporabi za pošiljanje informacij, obvestil o drugih osebah, ki komunicirajo z vašo vsebino ali pošiljanju sporočil, ter za odzivanje na poizvedbe in/ali druge zahteve ali vprašanja.</li> + </ul> + + <hr class="spacer" /> + + <h3 id="protect">Kako zaščitimo vaše podatke?</h3> + + <p>Za ohranitev varnosti vaših osebnih podatkov izvajamo različne varnostne ukrepe, ko vnašate, pošiljate ali dostopate do vaših osebnih podatkov. Med drugim je seja brskalnika, pa tudi promet med vašimi aplikacijami in API-jem zaščitena s SSL-jem, geslo pa je zgoščeno z uporabo močnega enosmernega algoritma. Če želite omogočiti varen dostop do računa, lahko omogočite dvofaktorsko preverjanje pristnosti.</p> + + <hr class="spacer" /> + + <h3 id="data-retention">Kakšna je naša politika hrambe podatkov?</h3> + + <p>Prizadevali si bomo za:</p> + + <ul> + <li>Shranjevanje dnevnike strežnikov, ki vsebujejo naslov IP vseh zahtev za ta strežnik, če so hranjeni, največ 90 dni.</li> + <li>Obdržiitev naslovov IP, povezane z registriranimi uporabniki, ne več kot 12 mesecev.</li> + </ul> + + <p>Lahko zahtevate in prenesete arhiv vaše vsebine, vključno z objavami, predstavnostnimi prilogami, sliko profila in sliko glave.</p> + + <p>Račun lahko kadar koli nepovratno izbrišete.</p> + + <hr class="spacer"/> + + <h3 id="cookies">Ali uporabljamo piškotke?</h3> + + <p>Da. Piškotki so majhne datoteke, ki jih spletno mesto ali njegov ponudnik storitev prenese na trdi disk vašega računalnika prek spletnega brskalnika (če dovolite). Ti piškotki omogočajo, da spletno mesto prepozna vaš brskalnik in ga, če imate registriran račun, povežete z vašim registriranim računom.</p> + + <p>Piškotke uporabljamo za razumevanje in shranjevanje vaših nastavitev za prihodnje obiske.</p> + + <hr class="spacer" /> + + <h3 id="disclose">Ali razkrivamo informacije zunanjim strankam?</h3> + + <p>Vaših osebnih podatkov ne prodajamo, preprodajamo ali kako drugače posredujemo zunanjim osebam. To ne vključuje zaupanja vrednih tretjih oseb, ki nam pomagajo pri upravljanju naše spletne strani, vodenju našega poslovanja ali storitev, če se te strani strinjajo, da bodo te informacije zaupne. Vaše podatke lahko tudi objavimo, če menimo, da je objava ustrezna in v skladu z zakonom, uveljavlja pravilnike o spletnih mestih ali ščiti naše ali druge pravice, lastnino ali varnost.</p> + + <p>Vaše javne vsebine lahko prenesejo drugi strežniki v omrežju. Vaše objave in objave samo za sledilce so dostavljene na strežnike, na katerih prebivajo vaši sledilci, in neposredna sporočila so dostavljena na strežnike prejemnikov, če so ti sledilci ali prejemniki na drugem strežniku.</p> + + <p>Ko odobrite aplikacijo za uporabo vašega računa, lahko glede na obseg dovoljenj, ki jih odobravate, dostopa do vaših javnih podatkov o profilu, seznama osebam, ki jim sledite, vaših sledilcev, seznamov, vseh vaših objav in priljubljenih. Aplikacije ne morejo nikoli dostopati do vašega e-poštnega naslova ali gesla.</p> + + <hr class="spacer" /> + + <h3 id="children">Uporaba strani s strani otrok</h3> + + <p>Če je ta strežnik v EU ali EEA: Naše spletno mesto, izdelki in storitve so namenjeni ljudem, ki so stari vsaj 16 let. Če ste mlajši od 16 let, po zahtevah GDPR (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) ne uporabljajte tega spletnega mesta.</p> + + <p>Če je ta strežnik v ZDA Naše spletno mesto, izdelki in storitve so namenjeni ljudem, ki so stari vsaj 13 let. Če ste mlajši od 13 let, po zahtevah COPPA (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) ne uporabljajte tega spletnega mesta.</p> + + <p>Če je ta strežnik v drugi jurisdikciji, so lahko zakonske zahteve drugačne.</p> + + <hr class="spacer" /> + + <h3 id="changes">Spremembe našega pravilnika o zasebnosti</h3> + + <p>Če se odločimo za spremembo našega pravilnika o zasebnosti, bomo te spremembe objavili na tej strani.</p> + + <p>Ta dokument je CC-BY-SA. Zadnja posodobitev je bila 7. marca 2018.</p> + + <p>Prvotno je bila prilagojena v skladu s <a href="https://github.com/discourse/discourse">pravilnikom o zasebnosti diskurza</a>.</p> + title: "%{instance} Pogoji storitve in pravilnik o zasebnosti" + themes: + contrast: Mastodon (Visok kontrast) + default: Mastodon (Temna) + mastodon-light: Mastodon (Svetla) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" + two_factor_authentication: + code_hint: Za potrditev vnesite kodo, ki jo je ustvarila aplikacija za preverjanje pristnosti + description_html: Če omogočite <strong>dvofaktorsko preverjanje pristnosti</strong>, boste za prijavo morali imeti svoj telefon, s katerim boste ustvarili žetone za vstop. + disable: Onemogoči + enable: Omogoči + enabled: Dvofaktorsko preverjanje pristnosti je omogočeno + enabled_success: Dvofaktorsko preverjanje pristnosti je uspešno omogočeno + generate_recovery_codes: Ustvari kode za obnovitev + instructions_html: "<strong>Skenirajte QR kodo z Google Authenticator ali s podobno aplikacijo TOTP</strong>. Od zdaj naprej bo ta aplikacija ustvarjala žetone, ki jih boste morali vnesti ob prijavi." + lost_recovery_codes: Obnovitvene kode vam omogočajo, da ponovno pridobite dostop do svojega računa, če izgubite telefon. Če ste izgubili obnovitvene kode, jih lahko obnovite tukaj. Vaše stare obnovitvene kode bodo neveljavne. + manual_instructions: 'Če ne morete skenirati QR kode in jo morate vnesti ročno, je tu skrivnost v tekstovni obliki:' + recovery_codes: Varnostna kopija obnovitvenih kod + recovery_codes_regenerated: Obnovitvene kode so bile uspešno regenerirane + recovery_instructions_html: Če kdaj izgubite dostop do telefona, lahko uporabite eno od spodnjih obnovitvenih kod, da ponovno pridobite dostop do svojega računa. <strong>Shranite obnovitvene kode</strong>. Lahko jih natisnete in shranite z drugimi pomembnimi dokumenti. + setup: Nastavi + wrong_code: Vnesena koda je bila neveljavna! Ali sta čas strežnika in čas naprave pravilna? + user_mailer: + backup_ready: + explanation: Zahtevali ste popolno varnostno kopijo računa Mastodon. Zdaj je pripravljen za prenos! + subject: Vaš arhiv je pripravljen za prenos + title: Prevzem arhiva + warning: + explanation: + disable: Medtem ko je vaš račun zamrznjen, podatki vašega računa ostanejo nedotaknjeni, vendar ne morete izvajati nobenih dejanj, dokler ga ne odklenete. + silence: Medtem ko je vaš račun omejen, bodo na tem strežniku videli vaše tute samo osebe, ki vam že sledijo in morda boste izključeni iz različnih javnih seznamov. Vendar vam lahko še vedno ročno sledijo drugi. + suspend: Vaš račun je bil začasno ukinjen, vsi vaši tuti in naložene predstavnostne datoteke so bili nepovratno odstranjeni s tega strežnika in strežnikov, kjer ste imeli sledilce. + review_server_policies: Preglejte pravilnike strežnika + subject: + disable: Vaš račun %{acct} je zamrznjen + none: Opozorila za %{acct} + silence: Vaš račun %{acct} je omejen + suspend: Vaš račun %{acct} je suspendiran + title: + disable: Račun je zamrznjen + none: Opozorilo + silence: Račun je omejen + suspend: Račun je suspendiran + welcome: + edit_profile_action: Nastavitve profila + edit_profile_step: Profil lahko prilagodite tako, da naložite podobo, glavo, spremenite prikazno ime in drugo. Če želite pregledati nove sledilce, preden jim dovolite sledenje, lahko zaklenete svoj račun. + explanation: Tu je nekaj nasvetov za začetek + final_action: Začnite objavljati + final_step: 'Začnite objavljati! Tudi brez sledilcev bodo vaša javna sporočila videli drugi, na primer na lokalni časovnici in v ključnikih. Morda se želite predstaviti s ključnikom #introductions.' + full_handle: Vaša polna ročica + full_handle_hint: To bi povedali svojim prijateljem, da vam lahko pošljejo sporočila ali vam sledijo iz drugega strežnika. + review_preferences_action: Spremenite nastavitve + review_preferences_step: Poskrbite, da določite svoje nastavitve, na primer, katera e-poštna sporočila želite prejemati ali katere privzete ravni zasebnosti bodo imele vaše objave. Če nimate potovalne slabosti, lahko omogočite samodejno predvajanje GIF-ov. + subject: Dobrodošli na Mastodon + tip_federated_timeline: Združena časovnica je pogled na mrežo Mastodona. Vključuje pa samo ljudi, na katere so naročeni vaši sosedje, zato ni popolna. + tip_following: Privzeto sledite skrbnikom strežnika. Če želite najti več zanimivih ljudi, preverite lokalne in združene časovnice. + tip_local_timeline: Lokalna časovnica je strežniški pogled ljudi na %{instance}. To so vaši neposredni sosedje! + tip_mobile_webapp: Če vam mobilni brskalnik ponuja, da dodate Mastodon na domači zaslon, lahko prejmete potisna obvestila. Deluje kot lastna aplikacija na več načinov! + tips: Nasveti + title: Dobrodošli, %{name}! + users: + follow_limit_reached: Ne morete spremljati več kot %{limit} ljudi + invalid_email: E-poštni naslov je napačen + invalid_otp_token: Neveljavna dvofaktorska koda + otp_lost_help_html: Če ste izgubili dostop do obeh, stopite v stik z %{email} + seamless_external_login: Prijavljeni ste prek zunanje storitve, tako da nastavitve gesla in e-pošte niso na voljo. + signed_in_as: 'Vpisani kot:' + verification: + explanation_html: '<strong>V metapodatkih svojega profila se lahko potrdite kot lastnik povezav</strong>. Za to mora povezano spletno mesto vsebovati povezavo do vašega Mastodon profila. Povezava <strong>mora</strong> imeti atribut <code>el="me"</code>. Vsebina besedila povezave ni pomembna. Tukaj je primer:' + verification: Potrditev diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 6cab03332..ac811b0b0 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -9,10 +9,6 @@ sq: contact: Kontakt contact_missing: I parregulluar documentation: Dokumentim - extended_description_html: | - <h3>Një vend i mirë për rregulla</h3> - <p>Përshkrimi i zgjeruar s’është sajuar ende.</p> - generic_description: "%{domain} është një shërbyes te rrjeti" hosted_on: Mastodon i strehuar në %{domain} learn_more: Mësoni më tepër privacy_policy: Rregulla privatësie @@ -423,19 +419,8 @@ sq: no_status_selected: S’u ndryshua ndonjë gjendje, ngaqë s’u përzgjodh ndonjë e tillë title: Gjendje llogarish with_media: Me media - subscriptions: - callback_url: URL Callback-u - confirmed: U ripohua - expires_in: Skadon më - last_delivery: Dorëzimi e fundit - topic: Temë tags: - accounts: Llogari - hidden: Fshehur - hide: Fshihe prej drejtorie title: Hashtage - unhide: Shfaqe në drejtori - visible: E dukshme title: Administrim warning_presets: add_new: Shtoni të ri @@ -464,7 +449,6 @@ sq: your_token: Token-i juaj për hyrje auth: change_password: Fjalëkalim - confirm_email: Ripohoni email-in delete_account: Fshije llogarinë delete_account_html: Nëse dëshironi të fshihni llogarinë tuaj, mund <a href="%{path}">ta bëni që këtu</a>. Do t’ju kërkohet ta ripohoni. didnt_get_confirmation: S’morët udhëzime ripohimi? @@ -502,23 +486,18 @@ sq: over_x_years: "%{count}v" x_months: "%{count}mj" deletes: - bad_password_msg: Provë e bukur, trimosha! Fjalëkalim i pasaktë confirm_password: Jepni fjalëkalimin tuaj të tanishëm që të verifikohet identiteti juaj - description_html: Kjo të heqë <strong>në mënyrë të përhershme, të pakthyeshme</strong> lëndë nga llogaria juaj dhe do ta çaktivizojë atë. Emri juaj i përdoruesit do të mbetet i rezervuar për të shmangur sozi të ardhme. proceed: Fshini llogarinë success_msg: Llogaria juaj u fshi me sukses - warning_html: Garantohet vetëm fshirja e lëndës prej këtij shërbyesi të veçantë. Lënda që është ndarë gjerësisht me të tjerët ka gjasa të lërë gjurmë. Shërbyesit <em>offline</em> dhe shërbyesit që janë shpajtuar prej përditësimeve tuaja, s’do t’i përditësojnë bazat e tyre të të dhënave. - warning_title: Mund të ketë lëndë të përhapur directories: directory: Drejtori profilesh - enabled: Gjendeni te lista e drejtorisë. - enabled_but_waiting: Keni zgjedhur të jeni pjesë e drejtorisë, por ende s’keni numrin minimum të ndjekësve (%{min_followers}) për përfshirje në të. explanation: Zbuloni përdorues bazuar në interesat e tyre explore_mastodon: Eksploroni %{title} - how_to_enable: S’keni zgjedhur të jeni i pranishëm te drejtoria. Mund ta bëni më poshtë. Përdorni te teksti i jetëshkrimit tuaj hashtagë, për t’u përfshirë nën hashtagë specifikë! errors: + '400': The request you submitted was invalid or malformed. '403': S’keni leje të shihni këtë faqe. '404': Faqja që po kërkonit, s’gjendet këtu. + '406': This page is not available in the requested format. '410': Faqja që po kërkonit, s’gjendet më këtu. '422': content: Verifikimi i sigurisë dështoi. Mos i bllokoni gjë cookie-t? @@ -527,6 +506,7 @@ sq: '500': content: Na ndjeni, diçka shkoi ters në anën tonë. title: Kjo faqe s’është e saktë + '503': The page could not be served due to a temporary server failure. noscript_html: Që të përdorni aplikacionin web Mastodon, ju lutemi, aktivizoni JavaScript-in. Ndryshe, provoni për Mastodon-in një nga <a href="%{apps_path}">aplikacionet e brendshëm</a> të platformës tuaj. exports: archive_takeout: @@ -618,9 +598,6 @@ sq: too_many: S’mund të bashkëngjiten më shumë se 4 kartela migrations: acct: emërpërdoruesi@përkatësi e llogarisë së re - currently_redirecting: 'Profili juaj është caktuar të ridrejtojë te:' - proceed: Ruaje - updated_msg: Rregullimi juaj për migrim llogarish u përditësua me sukses! moderation: title: Moderim notification_mailer: @@ -686,10 +663,6 @@ sq: reply: proceed: Ripohoni përgjigjen prompt: 'Doni t’i përgjigjeni këtij mesazhi:' - remote_unfollow: - error: Gabim - title: Titull - unfollowed: U hoq ndjekja scheduled_statuses: over_daily_limit: Keni tejkaluar kufirin e %{limit} mesazheve të planifikuara për atë ditë over_total_limit: Keni tejkaluar kufirin prej %{limit} mesazhesh të planifikuara diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index 3310716e0..2bddaf311 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -6,10 +6,6 @@ sr-Latn: about_this: O instanci contact: Kontakt contact_missing: Nije postavljeno - extended_description_html: | - <h3>Dobro mesto za pravila</h3> - <p>Prošireni opis koji još nije postavljen.</p> - generic_description: "%{domain} je server na mreži" hosted_on: Mastodont hostovan na %{domain} learn_more: Saznajte više source_code: Izvorni kod @@ -263,10 +259,6 @@ sr-Latn: no_media: Bez multimedije title: Statusi naloga with_media: Sa multimedijom - subscriptions: - confirmed: Potvrđeno - expires_in: Ističe za - last_delivery: Poslednja dostava title: Administracija admin_mailer: new_report: @@ -318,22 +310,21 @@ sr-Latn: over_x_years: "%{count}god" x_months: "%{count}mesec" deletes: - bad_password_msg: Dobar pokušaj, hakeri! Neispravna lozinka confirm_password: Unesite trenutnu lozinku da bismo proverili Vaš identitet - description_html: Ovo će <strong>trajno, bespovratno</strong> ukloniti sadržaj sa Vašef naloga i deaktivirati ga. Vaše korisničko ime će ostati rezervisano da se spreči da se neko ne predstavlja kao Vi sutra. proceed: Obriši nalog success_msg: Vaš nalog je uspešno obrisan - warning_html: Garantovano je samo brisanje sadržaja sa ove instance. Sadržaj koji je deljen dalje će verovatno da ostavi neke tragove. Nedostupni i ugašeni serveri, kao i serveri koji su odjavljeni od primanja statusa od Vas, neće ažurirati svoje baze. - warning_title: Dostupnost rasejanog sadržaja errors: + '400': The request you submitted was invalid or malformed. '403': Nemate dozvola da vidite ovu stranu. '404': Strana koju ste tražili ne postoji. + '406': This page is not available in the requested format. '410': Strana koju ste tražili više ne postoji. '422': '429': Uspored '500': content: Izvinjavamo se, nešto je pošlo po zlu sa ove strane. title: Strana nije ispravna + '503': The page could not be served due to a temporary server failure. noscript_html: Da biste koristili Mastodont veb aplikaciju, omogućite JavaScript. U suprotnom, probajte neku od <a href="%{apps_path}">originalnih aplikacija</a> za Mastodont za Vašu platformu. exports: blocks: Blokirali ste @@ -386,9 +377,6 @@ sr-Latn: too_many: Ne može se prikačiti više od 4 fajla migrations: acct: korisnik@domen novog naloga - currently_redirecting: 'Profil Vam je podešen da preusmerava na :' - proceed: Sačuvaj - updated_msg: Prebacivanje postavki Vašeg naloga uspešno izmenjeno! moderation: title: Moderacija notification_mailer: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 1555fb235..404310fe9 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -9,10 +9,6 @@ sr: contact: Контакт contact_missing: Није постављено documentation: Документација - extended_description_html: | - <h3>Добро место за правила</h3> - <p>Проширени опис који још није постављен.</p> - generic_description: "%{domain} је сервер на мрежи" hosted_on: Мастодонт хостован на %{domain} learn_more: Сазнајте више privacy_policy: Полиса приватности @@ -440,18 +436,8 @@ sr: no_status_selected: Ниједан статус није промењен јер ниједан није изабран title: Статуси налога with_media: Са мултимедијом - subscriptions: - confirmed: Потврђено - expires_in: Истиче за - last_delivery: Последња достава tags: - accounts: Налози - hidden: Скривено - hide: Сакриј од фасцикле - name: Тараба title: Тараба - unhide: Прикажи у фасцикли - visible: Видљиво title: Администрација warning_presets: add_new: Додај нови @@ -480,7 +466,6 @@ sr: your_token: Ваш приступни токен auth: change_password: Лозинка - confirm_email: Потврдите адресу е-поште delete_account: Обриши налог delete_account_html: Ако желите да обришете Ваш налог, можете <a href="%{path}">наставити овде</a>. Бићете упитани да потврдите. didnt_get_confirmation: Нисте добили поруку са упутствима за потврду налога? @@ -521,25 +506,18 @@ sr: x_days: "%{count}д" x_months: "%{count}месец" deletes: - bad_password_msg: Добар покушај, хакери! Неисправна лозинка confirm_password: Унесите тренутну лозинку да бисмо проверили Ваш идентитет - description_html: Ово ће <strong>трајно, бесповратно</strong> уклонити садржај са Вашеф налога и деактивирати га. Ваше корисничко име ће остати резервисано да се спречи да се неко не представља као Ви сутра. proceed: Обриши налог success_msg: Ваш налог је успешно обрисан - warning_html: Гарантовано је само брисање садржаја са ове инстанце. Садржај који је дељен даље ће вероватно да остави неке трагове. Недоступни и угашени сервери, као и сервери који су одјављени од примања статуса од Вас, неће ажурирати своје базе. - warning_title: Доступност расејаног садржаја directories: directory: Профил фасцикле - enabled: Ви сте тренутно видљиви у фасцикли. explanation: Откријте кориснике на основу њихових интереса explore_mastodon: Истражи %{title} - people: - few: "%{count} људе" - one: "%{count} особа/е" - other: "%{count} људи" errors: + '400': The request you submitted was invalid or malformed. '403': Немате дозвола да видите ову страну. '404': Страна коју сте тражили не постоји. + '406': This page is not available in the requested format. '410': Страна коју сте тражили више не постоји. '422': content: Безбедоносна провера није успела. Да не блокирате колачиће? @@ -548,6 +526,7 @@ sr: '500': content: Извињавамо се, нешто је пошло по злу са ове стране. title: Страна није исправна + '503': The page could not be served due to a temporary server failure. noscript_html: Да бисте користили Мастодонт веб апликацију, омогућите JavaScript. У супротном, пробајте неку од <a href="%{apps_path}">оригиналних апликација</a> за Мастодонт за Вашу платформу. exports: archive_takeout: @@ -631,9 +610,6 @@ sr: too_many: Не може се прикачити више од 4 фајла migrations: acct: корисник@домен новог налога - currently_redirecting: 'Профил Вам је подешен да преусмерава на :' - proceed: Сачувај - updated_msg: Пребацивање поставки Вашег налога успешно измењено! moderation: title: Модерација notification_mailer: @@ -693,10 +669,6 @@ sr: reply: proceed: Наставите да бисте одговорили prompt: 'Желите да одговорите на ову трубу:' - remote_unfollow: - error: Грешка - title: Наслов - unfollowed: Отпраћени scheduled_statuses: over_daily_limit: Прекорачили сте границу од %{limit} планираних труба за тај дан over_total_limit: Прекорачили сте границу од %{limit} планираних труба diff --git a/config/locales/sv.yml b/config/locales/sv.yml index d3d0cb888..0068f59f4 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -4,43 +4,85 @@ sv: about_hashtag_html: Dessa är offentliga toots märkta med <strong>#%{hashtag}</strong>. Du kan interagera med dem om du har ett konto någonstans i federationen. about_mastodon_html: Mastodon är ett socialt nätverk baserat på öppna webbprotokoll och gratis, öppen källkodsprogramvara. Det är decentraliserat som e-post. about_this: Om + active_count_after: aktiv + active_footnote: Månatligen Aktiva användare (MAU) administered_by: 'Administreras av:' api: API + apps: Mobilappar + apps_platforms: Använd Mastodon från iOS, Android och andra plattformar + browse_directory: Titta på en profilkatalog och filtrera enligt intressen + browse_local_posts: Titta på strömmande publika inlägg från denna server + browse_public_posts: Titta på strömmande publika inlägg på Mastodon contact: Kontakt contact_missing: Inte inställd - extended_description_html: | - <h3>En bra plats för regler</h3> - <p>Den utökade beskrivningen har inte konfigurerats ännu.</p> - generic_description: "%{domain} är en server i nätverket" + contact_unavailable: Ej tillämplig + discover_users: Upptäck användare + documentation: Dokumentation + federation_hint_html: Med ett konto på %{instance} kommer du att kunna följa personer på alla Mastodon-servers och mer än så. + get_apps: Prova en mobilapp hosted_on: Mastodon värd på %{domain} + instance_actor_flash: 'Detta konto är en virtuell agent som används för att representera servern själv och inte någon individuell användare. Det används av sammanslutningsskäl och ska inte blockeras såvitt du inte vill blockera hela instansen, och för detta fall ska domänblockering användas. + +' learn_more: Lär dig mer + privacy_policy: Integritetspolicy + see_whats_happening: Se vad som händer + server_stats: 'Serverstatistik:' source_code: Källkod status_count_before: Som skapat + tagline: Följ vänner och upptäck nya terms: Användarvillkor + unavailable_content: Otillgängligt innehåll + unavailable_content_description: + domain: Server + reason: Anledning + rejecting_media: 'Mediafiler från dessa servers kommer inte hanteras eller lagras, och inga miniatyrer kammer att visas, utan manuell klickning erfordras på originalfilen:' + silenced: 'Poster från dessa servers kommer att döljas i publika tidslinjer och konversationer, och meddelanden kommer inte att genereras från deras användares handlingar, förutom om du följer dem:' + suspended: 'Ingen data från dessa serverdatorer kommer bearbetas, lagras eller bytas ut vilket omöjliggör kommunikation med användare från dessa serverdatorer:' + unavailable_content_html: Mastodon låter dig se material från, och interagera med, andra användare i servernätverket. Det är undantag som gjorts på denna serverdator. user_count_before: Hem till what_is_mastodon: Vad är Mastodon? accounts: + choices_html: "%{name}s val:" + endorsements_hint: Från webbgränssnittet kan du rekommendera följare, som sedan visas här. + featured_tags_hint: Du kan använda fyrkanter som visas här. follow: Följa following: Följer + joined: Gick med %{date} + last_active: senast aktiv + link_verified_on: Ägarskap för denna länk kontrollerades den %{date} media: Media moved_html: "%{name} har flyttat till %{new_profile_link}:" network_hidden: Denna information är inte tillgänglig + never_active: Aldrig nothing_here: Det finns inget här! people_followed_by: Personer som %{name} följer people_who_follow: Personer som följer %{name} + pin_errors: + following: Du måste vara följare av den person du vill godkänna + posts_tab_heading: Toots posts_with_replies: Toots med svar reserved_username: Användarnamnet är reserverat roles: + admin: Administratör + bot: Robot moderator: Moderator + unavailable: Profilen är inte tillgänglig unfollow: Sluta följa admin: + account_actions: + action: Utför åtgärd + title: Utför aktivitet för moderering på %{acct} account_moderation_notes: create: Lämna kommentar created_msg: Modereringsnotering skapad utan problem! delete: Ta bort destroyed_msg: Modereringsnotering borttagen utan problem! accounts: + approve: Godkänn + approve_all: Godkänn alla are_you_sure: Är du säker? + avatar: Profilbild by_domain: Domän change_email: changed_msg: E-postadressen har ändrats! @@ -52,6 +94,7 @@ sv: confirm: Bekräfta confirmed: Bekräftad confirming: Bekräftande + deleted: Raderad demote: Degradera disable: inaktivera disable_two_factor_authentication: Inaktivera 2FA @@ -67,7 +110,11 @@ sv: followers: Följare followers_url: Följare URL follows: Följs + header: Rubrik inbox_url: Inkorgs URL + invited_by: Inbjuden av + ip: IP-adress + joined: Gick med location: all: Alla local: Lokal @@ -77,15 +124,20 @@ sv: media_attachments: Media bifogade filer memorialize: Förvandla till ett memoriam moderation: + active: Aktiv all: Alla + pending: Väntande silenced: Tystas suspended: Avstängd title: Moderering moderation_notes: Moderation anteckning most_recent_activity: Senaste aktivitet most_recent_ip: Senaste IP + no_account_selected: Inga konton har ändrats och inget har valts + no_limits_imposed: Inga begränsningar har införts not_subscribed: Inte prenumererat outbox_url: Utkorg URL + pending: Inväntar granskning perform_full_suspension: Utför full avstängning profile_url: Profil URL promote: Befordra @@ -93,7 +145,10 @@ sv: public: Offentlig push_subscription_expires: PuSH-prenumerationen löper ut redownload: Uppdatera avatar + reject: Förkasta + reject_all: Förkasta allt / Avvisa alla remove_avatar: Ta bort avatar + remove_header: Ta bort rubrik resend_confirmation: already_confirmed: Den här användaren är redan bekräftad send: Skicka om e-postbekräftelse @@ -104,33 +159,44 @@ sv: role: Behörigheter roles: admin: Administratör + moderator: Moderator staff: Personal user: Användare salmon_url: Lax URL search: Sök + search_same_ip: Annan användare med samma IP-adress shared_inbox_url: Delad inkorg URL show: created_reports: Anmälningar som skapats av det här kontot targeted_reports: Anmälningar gjorda om detta konto silence: Tystnad + silenced: Tystad / Tystat statuses: Status subscribe: Prenumerera + suspended: Avstängd / Avstängt + time_in_queue: Väntar i kö %{time} title: Konton unconfirmed_email: Obekräftad E-postadress undo_silenced: Ångra tystnad undo_suspension: Ångra avstängning unsubscribe: Avsluta prenumeration username: Användarnamn + warn: Varna web: Webb + whitelisted: Vitlistad action_logs: actions: assigned_to_self_report: "%{name} tilldelade anmälan %{target} till sig själv" change_email_user: "%{name} bytte e-postadress för användare %{target}" confirm_user: "%{name} bekräftade e-postadress för användare %{target}" + create_account_warning: "%{name} sände en varning till %{target}" create_custom_emoji: "%{name} laddade upp ny emoji %{target}" + create_domain_allow: "%{name} vitlistade domän %{target}" create_domain_block: "%{name} blockerade domän %{target}" create_email_domain_block: "%{name} svartlistade e-postdomän %{target}" demote_user: "%{name} degraderade användare %{target}" + destroy_custom_emoji: "%{name} förstörde emoji %{target}" + destroy_domain_allow: "%{name} raderade domän %{target} från vitlistan" destroy_domain_block: "%{name} avblockerade domän %{target}" destroy_email_domain_block: "%{name} vitlistade e-postdomän %{target}" destroy_status: "%{name} tog bort status av %{target}" @@ -152,20 +218,27 @@ sv: unsuspend_account: "%{name} aktiverade %{target}s konto" update_custom_emoji: "%{name} uppdaterade emoji %{target}" update_status: "%{name} uppdaterade status för %{target}" + deleted_status: "(raderad status)" title: Revisionslogg custom_emojis: + assign_category: Ange kategori by_domain: Domän copied_msg: Skapade en lokal kopia av emoji utan problem copy: Kopia copy_failed_msg: Kunde inte skapa en lokal kopia av den emoji + create_new_category: Skapa ny kategori created_msg: Emoji skapades utan problem! delete: Radera destroyed_msg: Emojo borttagen utan problem! disable: Inaktivera + disabled: Inaktiverad disabled_msg: Inaktiverade emoji utan problem + emoji: Emoji enable: Aktivera + enabled: Aktiverad enabled_msg: Aktiverade den emoji utan problem image_hint: PNG upp till 50KB + list: Lista listed: Noterade new: title: Lägg till ny egen emoji @@ -173,10 +246,29 @@ sv: shortcode: Kortkod shortcode_hint: Minst 2 tecken, endast alfanumeriska tecken och understreck title: Egentillverkade emojis + uncategorized: Okategoriserad / Okategoiserat / Okategoriserade + unlist: Avnotera / Tag bort unlisted: Olistade update_failed_msg: Kunde inte uppdatera emoji updated_msg: Emoji uppdaterades utan problem! upload: Ladda upp + dashboard: + authorized_fetch_mode: Säkert läge + backlog: återstående jobb + config: Konfiguration + feature_deletions: Kontoraderingar + feature_invites: Inbjudningslänkar + feature_profile_directory: Profilkatalog + feature_registrations: Registreringar + feature_relay: Förbundsmöte + feature_spam_check: Anti-skräp + feature_timeline_preview: Förhandsgranskning av tidslinje + features: Funktioner + hidden_service: Sammanslutning med gömda tjänster + open_reports: öppna rapporter + pending_tags: hashtags som inväntar granskning + pending_users: användare som inväntar granskning + recent_users: Senaste användare domain_blocks: add_new: Lägg till ny created_msg: Domänblocket behandlas nu @@ -313,12 +405,6 @@ sv: no_media: Ingen media title: Kontostatus with_media: med media - subscriptions: - callback_url: Återanrop URL - confirmed: Bekräftad - expires_in: Utgår om - last_delivery: Sista leverans - topic: Ämne admin_mailer: new_report: body: "%{reporter} har rapporterat %{target}" @@ -340,7 +426,6 @@ sv: your_token: Din access token auth: change_password: Lösenord - confirm_email: Bekräfta e-postadress delete_account: Ta bort konto delete_account_html: Om du vill radera ditt konto kan du <a href="%{path}">fortsätta här</a>. Du kommer att bli ombedd att bekräfta. didnt_get_confirmation: Fick inte instruktioner om bekräftelse? @@ -384,16 +469,14 @@ sv: x_months: "%{count}mån" x_seconds: "%{count}sek" deletes: - bad_password_msg: Bra försök, hackare! Fel lösenord confirm_password: Ange ditt lösenord för att verifiera din identitet - description_html: Detta vill <strong>permanent, irreversibelt</strong> ta bort innehåll från ditt konto och avaktivera det. Ditt användarnamn kommer att förbli reserverat för att förhindra framtida efterföljare. proceed: Ta bort konto success_msg: Ditt konto har tagits bort - warning_html: Endast borttagning av innehåll från denna speciella instans garanteras. Innehåll som har delats i stor utsträckning kommer sannolikt att lämna spår. Offline-servrar och servrar som har avstängt från dina uppdateringar uppdaterar inte sina databaser. - warning_title: Spridet innehåll och tillgänglighet errors: + '400': The request you submitted was invalid or malformed. '403': Du har inte behörighet att visa den här sidan. '404': Sidan du letade efter existerar inte. + '406': This page is not available in the requested format. '410': Sidan du letade efter existerar inte längre. '422': content: Säkerhetsverifiering misslyckades Blockerar du cookies? @@ -402,6 +485,7 @@ sv: '500': content: Vi är ledsna, men något gick fel från vårat håll. title: Den här sidan är inte korrekt + '503': The page could not be served due to a temporary server failure. noscript_html: För att använda Mastodon webbapplikationen, vänligen aktivera JavaScript. Alternativt kan du prova en av <a href="%{apps_path}">inhemska appar</a> för Mastodon för din plattform. exports: archive_takeout: @@ -462,9 +546,6 @@ sv: too_many: Det går inte att bifoga mer än 4 filer migrations: acct: användarnamn@domän av det nya kontot - currently_redirecting: 'Din profil är satt att omdirigeras till:' - proceed: Spara - updated_msg: Dina kontoflyttsinställning har uppdaterats! moderation: title: Moderera notification_mailer: @@ -513,10 +594,6 @@ sv: missing_resource: Det gick inte att hitta den begärda omdirigeringsadressen för ditt konto proceed: Fortsätt för att följa prompt: 'Du kommer att följa:' - remote_unfollow: - error: Fel - title: Titel - unfollowed: Slutade följa sessions: activity: Senaste aktivitet browser: Webbläsare @@ -560,6 +637,8 @@ sv: notifications: Meddelanden preferences: Inställningar two_factor_authentication: Tvåstegsautentisering + spam_check: + spam_detected: Det här är en automatisk rapport. Spam har upptäckts. statuses: attached: description: 'Bifogad: %{attached}' diff --git a/config/locales/ta.yml b/config/locales/ta.yml index eef06fa7c..48252a5bb 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -1,12 +1,54 @@ --- ta: + about: + about_this: தகவல் + administered_by: 'நிர்வாகம்:' + api: செயலிக்கான மென்பொருள் இடைமுகம் API + apps: கைப்பேசி செயலிகள் + contact: தொடர்புக்கு + get_apps: கைப்பேசி செயலியை முயற்சி செய்யவும் + learn_more: மேலும் அறிய + privacy_policy: தனியுரிமை கொள்கை + see_whats_happening: என்ன நடக்கிறது என்று பார்க்க + server_stats: 'வழங்கியின் புள்ளிவிவரங்கள்:' + source_code: நிரல் மூலம் + status_count_after: + one: பதிவு + other: பதிவுகள் + status_count_before: எழுதிய + tagline: நண்பர்களைப் பின்தொடரவும் மற்றும் புதியவர்களைக் கண்டுபிடிக்கவும் + terms: சேவை விதிமுறைகள் + unavailable_content: விசயங்கள் இல்லை + unavailable_content_description: + domain: வழங்கி + reason: காரணம் + user_count_after: + one: பயனர் + other: பயனர்கள் + user_count_before: இணைந்திருக்கும் + what_is_mastodon: மச்டொடன் என்றால் என்ன? + accounts: + choices_html: "%{name}-இன் தேர்வுகள்:" + follow: பின்தொடர் + followers: + one: பின்தொடர்பவர் + other: பின்தொடர்பவர்கள் + following: பின்தொடரும் + joined: "%{date} அன்று இனைந்தார்" + last_active: கடைசியாக பார்த்தது + media: படங்கள் + never_active: எப்போதுமில்லை + nothing_here: இங்கு எதுவும் இல்லை! errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': '429': Throttled '500': + '503': The page could not be served due to a temporary server failure. invites: expires_in: '1800': 30 minutes diff --git a/config/locales/te.yml b/config/locales/te.yml index d4a2f507d..526b03b49 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -10,10 +10,6 @@ te: contact_missing: ఇంకా సెట్ చేయలేదు contact_unavailable: వర్తించదు documentation: పత్రీకరణ - extended_description_html: | - <h3>నియమాలకు ఒక మంచి ప్రదేశం</h3> - <p>మరింత విశదీకరణ ఇంకా సెట్ చేయబడలేదు.</p> - generic_description: "%{domain} అనేది నెట్వర్కులోని ఒక సర్వరు" hosted_on: మాస్టొడాన్ %{domain} లో హోస్టు చేయబడింది learn_more: మరింత తెలుసుకోండి privacy_policy: గోప్యత విధానము @@ -113,12 +109,15 @@ te: most_recent_activity: ఇటీవల యాక్టివిటీ most_recent_ip: ఇటీవలి IP errors: + '400': The request you submitted was invalid or malformed. '403': You don't have permission to view this page. '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. '410': The page you were looking for doesn't exist here anymore. '422': '429': Throttled '500': + '503': The page could not be served due to a temporary server failure. invites: expires_in: '1800': 30 minutes diff --git a/config/locales/th.yml b/config/locales/th.yml index 9ef6bc3dd..a63bbe917 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1,12 +1,14 @@ --- th: about: - about_mastodon_html: Mastodon เป็นเครือข่ายสังคมที่ทำงานบนโปรโตคอลเว็บแบบเปิดและซอฟต์แวร์เสรีที่เปิดต้นฉบับ กระจายศูนย์เหมือนอีเมล + about_hashtag_html: มีการแท็กโพสต์สาธารณะเหล่านี้ด้วย <strong>#%{hashtag}</strong> คุณสามารถโต้ตอบกับโพสต์หากคุณมีบัญชีที่ใดก็ตามในเฟดิเวิร์ส + about_mastodon_html: 'เครือข่ายสังคมแห่งอนาคต: ไม่มีโฆษณา, ไม่มีการสอดแนมโดยองค์กร, การออกแบบตามหลักจริยธรรม และการกระจายศูนย์! เป็นเจ้าของข้อมูลของคุณด้วย Mastodon!' about_this: เกี่ยวกับ active_count_after: ที่ใช้งาน active_footnote: ผู้ใช้งานรายเดือน (MAU) administered_by: 'ดูแลโดย:' - apps: แอปสำหรับมือถือ + api: API + apps: แอปมือถือ apps_platforms: ใช้ Mastodon จาก iOS, Android และแพลตฟอร์มอื่น ๆ browse_directory: เรียกดูไดเรกทอรีโปรไฟล์และกรองตามความสนใจ browse_public_posts: เรียกดูสตรีมสดของโพสต์สาธารณะใน Mastodon @@ -15,23 +17,28 @@ th: contact_unavailable: ไม่มี discover_users: ค้นพบผู้ใช้ documentation: เอกสารประกอบ - extended_description_html: | - <h3>สถานที่ที่ดีสำหรับกฎ</h3> - <p>ยังไม่ได้ตั้งคำอธิบายแบบขยาย</p> - generic_description: "%{domain} เป็นเซิร์ฟเวอร์หนึ่งในเครือข่าย" - get_apps: ลองแอปสำหรับมือถือ + federation_hint_html: ด้วยบัญชีที่ %{instance} คุณจะสามารถติดตามผู้คนในเซิร์ฟเวอร์ Mastodon และอื่น ๆ + get_apps: ลองแอปมือถือ + hosted_on: Mastodon ที่โฮสต์ที่ %{domain} learn_more: เรียนรู้เพิ่มเติม privacy_policy: นโยบายความเป็นส่วนตัว + see_whats_happening: ดูสิ่งที่กำลังเกิดขึ้น server_stats: 'สถิติเซิร์ฟเวอร์:' source_code: โค้ดต้นฉบับ status_count_after: other: สถานะ status_count_before: ผู้สร้าง + tagline: ติดตามเพื่อน ๆ และค้นพบเพื่อนใหม่ ๆ + terms: เงื่อนไขการให้บริการ + unavailable_content_description: + domain: เซิร์ฟเวอร์ + reason: 'เหตุผล:' user_count_after: other: ผู้ใช้ user_count_before: บ้านของ what_is_mastodon: Mastodon คืออะไร? accounts: + choices_html: 'ทางเลือกของ %{name}:' follow: ติดตาม followers: other: ผู้ติดตาม @@ -41,6 +48,7 @@ th: media: สื่อ moved_html: "%{name} ได้ย้ายไปยัง %{new_profile_link}:" network_hidden: ไม่มีข้อมูลนี้ + never_active: ไม่เลย nothing_here: ไม่มีสิ่งใดที่นี่! people_followed_by: ผู้คนที่ %{name} ติดตาม people_who_follow: ผู้คนที่ติดตาม %{name} @@ -48,18 +56,22 @@ th: other: โพสต์ posts_tab_heading: โพสต์ posts_with_replies: โพสต์และการตอบกลับ + reserved_username: ชื่อผู้ใช้นี้ถูกสงวนไว้ roles: admin: ผู้ดูแล bot: บอต moderator: ผู้ควบคุม + unavailable: ไม่มีโปรไฟล์ unfollow: เลิกติดตาม admin: account_moderation_notes: + create: เขียนข้อความอธิบาย created_msg: สร้างหมายเหตุการควบคุมสำเร็จ! delete: ลบ destroyed_msg: ทำลายหมายเหตุการควบคุมสำเร็จ! accounts: approve: อนุมัติ + approve_all: อนุมัติทั้งหมด are_you_sure: คุณแน่ใจหรือไม่? avatar: ภาพประจำตัว by_domain: โดเมน @@ -78,7 +90,7 @@ th: disable: ปิดใช้งาน disable_two_factor_authentication: ปิดใช้งาน 2FA disabled: ปิดใช้งานอยู่ - display_name: ชื่อที่แสดงผล + display_name: ชื่อที่แสดง domain: โดเมน edit: แก้ไข email: อีเมล @@ -88,10 +100,11 @@ th: feed_url: URL ฟีด followers: ผู้ติดตาม followers_url: URL ผู้ติดตาม - follows: ติดตาม + follows: การติดตาม header: ส่วนหัว inbox_url: URL กล่องขาเข้า invited_by: เชิญโดย + ip: IP joined: เข้าร่วมเมื่อ location: all: ทั้งหมด @@ -101,7 +114,9 @@ th: login_status: สถานะการเข้าสู่ระบบ media_attachments: ไฟล์แนบสื่อ moderation: + active: ใช้งานอยู่ all: ทั้งหมด + pending: รอการยืนยัน silenced: เงียบอยู่ suspended: ระงับอยู่ title: การควบคุม @@ -112,10 +127,13 @@ th: outbox_url: URL กล่องขาออก perform_full_suspension: ระงับ profile_url: URL โปรไฟล์ + promote: เลื่อนตำแหน่ง protocol: โปรโตคอล public: สาธารณะ push_subscription_expires: การบอกรับ PuSH หมดอายุเมื่อ + redownload: รีเฟรชโปรไฟล์ reject: ปฏิเสธ + reject_all: ปฏิเสธทั้งหมด remove_avatar: เอาภาพประจำตัวออก remove_header: เอาส่วนหัวออก resend_confirmation: @@ -124,6 +142,7 @@ th: success: ส่งอีเมลยืนยันสำเร็จ! reset_password: ตั้งรหัสผ่านใหม่ resubscribe: บอกรับใหม่ + role: สิทธิอนุญาต roles: admin: ผู้ดูแล moderator: ผู้ควบคุม @@ -139,6 +158,7 @@ th: subscribe: บอกรับ suspended: ระงับอยู่ title: บัญชี + unconfirmed_email: ยังไม่ได้ยืนยันอีเมล undo_silenced: เลิกทำการเงียบ undo_suspension: เลิกทำการระงับ unsubscribe: เลิกบอกรับ @@ -146,31 +166,63 @@ th: warn: เตือน web: เว็บ action_logs: + actions: + change_email_user: "%{name} ได้เปลี่ยนที่อยู่อีเมลของผู้ใช้ %{target}" + confirm_user: "%{name} ได้ยืนยันที่อยู่อีเมลของผู้ใช้ %{target}" + create_account_warning: "%{name} ได้ส่งคำเตือนไปยัง %{target}" + create_domain_block: "%{name} ได้ปิดกั้นโดเมน %{target}" + destroy_custom_emoji: "%{name} ได้ทำลายอีโมจิ %{target}" + destroy_domain_block: "%{name} ได้เลิกปิดกั้นโดเมน %{target}" + destroy_status: "%{name} ได้เอาสถานะโดย %{target} ออก" + disable_custom_emoji: "%{name} ได้ปิดใช้งานอีโมจิ %{target}" + disable_user: "%{name} ได้ปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}" + enable_custom_emoji: "%{name} ได้เปิดใช้งานอีโมจิ %{target}" + enable_user: "%{name} ได้เปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้ %{target}" + remove_avatar_user: "%{name} ได้เอาภาพประจำตัวของ %{target} ออก" + reopen_report: "%{name} ได้เปิดรายงาน %{target} ใหม่" + suspend_account: "%{name} ได้ระงับบัญชีของ %{target}" + unsuspend_account: "%{name} ได้เลิกระงับบัญชีของ %{target}" + update_custom_emoji: "%{name} ได้อัปเดตอีโมจิ %{target}" + update_status: "%{name} ได้อัปเดตสถานะโดย %{target}" deleted_status: "(สถานะที่ลบแล้ว)" title: รายการบันทึกการตรวจสอบ custom_emojis: + assign_category: กำหนดหมวดหมู่ by_domain: โดเมน copy: คัดลอก + create_new_category: สร้างหมวดหมู่ใหม่ created_msg: สร้างอีโมจิสำเร็จ! delete: ลบ + destroyed_msg: ทำลายอีโมโจสำเร็จ! disable: ปิดใช้งาน + disabled: ปิดใช้งานอยู่ + disabled_msg: ปิดใช้งานอีโมจินั้นสำเร็จ emoji: อีโมจิ enable: เปิดใช้งาน + enabled: เปิดใช้งานอยู่ + enabled_msg: เปิดใช้งานอีโมจินั้นสำเร็จ + image_hint: PNG สูงสุด 50KB + list: แสดงรายการ + listed: อยู่ในรายการ new: title: เพิ่มอีโมจิที่กำหนดเองใหม่ overwrite: เขียนทับ shortcode: รหัสย่อ title: อีโมจิที่กำหนดเอง + unlist: เลิกแสดงรายการ unlisted: ไม่อยู่ในรายการ update_failed_msg: ไม่สามารถอัปเดตอีโมจินั้น updated_msg: อัปเดตอีโมจิสำเร็จ! upload: อัปโหลด dashboard: + authorized_fetch_mode: โหมดปลอดภัย config: การกำหนดค่า feature_deletions: การลบบัญชี feature_invites: ลิงก์เชิญ feature_profile_directory: ไดเรกทอรีโปรไฟล์ feature_registrations: การลงทะเบียน + feature_spam_check: การป้องกันสแปม + feature_timeline_preview: ตัวอย่างเส้นเวลา features: คุณลักษณะ open_reports: รายงานที่เปิด recent_users: ผู้ใช้ล่าสุด @@ -189,6 +241,7 @@ th: created_msg: กำลังประมวลผลการปิดกั้นโดเมน destroyed_msg: เลิกทำการปิดกั้นโดเมนแล้ว domain: โดเมน + edit: แก้ไขการปิดกั้นโดเมน new: create: สร้างการปิดกั้น hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะใช้วิธีการควบคุมเฉพาะกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ @@ -198,6 +251,8 @@ th: silence: เงียบ suspend: ระงับ title: การปิดกั้นโดเมนใหม่ + private_comment: ความคิดเห็นส่วนตัว + public_comment: ความคิดเห็นสาธารณะ reject_media: ปฏิเสธไฟล์สื่อ reject_media_hint: เอาไฟล์สื่อที่จัดเก็บไว้ในเว็บออกและปฏิเสธที่จะดาวน์โหลดไฟล์ใด ๆ ในอนาคต ไม่เกี่ยวข้องกับการระงับ reject_reports: ปฏิเสธรายงาน @@ -213,6 +268,7 @@ th: title: เลิกทำการปิดกั้นโดเมนสำหรับ %{domain} undo: เลิกทำ undo: เลิกทำการปิดกั้นโดเมน + view: ดูการปิดกั้นโดเมน email_domain_blocks: add_new: เพิ่มใหม่ delete: ลบ @@ -224,15 +280,21 @@ th: title: ผู้ติดตามของ %{acct} instances: by_domain: โดเมน + known_accounts: + other: "%{count} บัญชีที่รู้จัก" moderation: all: ทั้งหมด limited: จำกัดอยู่ title: การควบคุม + private_comment: ความคิดเห็นส่วนตัว + public_comment: ความคิดเห็นสาธารณะ title: การติดต่อกับภายนอก total_storage: ไฟล์แนบสื่อ invites: deactivate_all: ปิดใช้งานทั้งหมด title: คำเชิญ + pending_accounts: + title: บัญชีที่รอดำเนินการ (%{count}) relays: add_new: เพิ่มรีเลย์ใหม่ delete: ลบ @@ -241,6 +303,7 @@ th: enable: เปิดใช้งาน enabled: เปิดใช้งานอยู่ inbox_url: URL รีเลย์ + save_and_enable: บันทึกแล้วเปิดใช้งาน status: สถานะ title: รีเลย์ report_notes: @@ -252,6 +315,7 @@ th: report: รายงาน are_you_sure: คุณแน่ใจหรือไม่? assign_to_self: มอบหมายให้ฉัน + assigned: ผู้ควบคุมที่ได้รับมอบหมาย comment: none: ไม่มี created_at: รายงานเมื่อ @@ -259,7 +323,10 @@ th: mark_as_unresolved: ทำเครื่องหมายว่ายังไม่ได้แก้ปัญหา notes: create: เพิ่มหมายเหตุ + create_and_resolve: แก้ปัญหาโดยมีหมายเหตุ + create_and_unresolve: เปิดใหม่โดยมีหมายเหตุ delete: ลบ + reopen: เปิดรายงานใหม่ report: 'รายงาน #%{id}' reported_account: บัญชีที่ได้รับการรายงาน reported_by: รายงานโดย @@ -271,16 +338,21 @@ th: unresolved: ยังไม่ได้แก้ปัญหา updated_at: อัปเดตเมื่อ settings: + bootstrap_timeline_accounts: + title: การติดตามเริ่มต้นสำหรับผู้ใช้ใหม่ contact_information: email: อีเมลธุรกิจ username: ชื่อผู้ใช้ในการติดต่อ custom_css: title: CSS ที่กำหนดเอง + domain_blocks: + title: แสดงการปิดกั้นโดเมน profile_directory: + desc_html: อนุญาตให้ผู้ใช้สามารถค้นพบได้ title: เปิดใช้งานไดเรกทอรีโปรไฟล์ registrations: closed_message: - desc_html: แสดงผลในหน้าแรกเมื่อปิดการลงทะเบียน คุณสามารถใช้แท็ก HTML + desc_html: แสดงในหน้าแรกเมื่อปิดการลงทะเบียน คุณสามารถใช้แท็ก HTML title: ข้อความการปิดการลงทะเบียน deletion: desc_html: อนุญาตให้ใครก็ตามลบบัญชีของเขา @@ -297,42 +369,43 @@ th: desc_html: แสดงป้ายพนักงานในหน้าผู้ใช้ title: แสดงป้ายพนักงาน site_description: - desc_html: ย่อหน้าเกริ่นนำในหน้าแรก อธิบายถึงสิ่งที่ทำให้เซิร์ฟเวอร์ Mastodon นี้พิเศษและสิ่งอื่นใดที่สำคัญ คุณสามารถใช้แท็ก HTML โดยเฉพาะอย่างยิ่ง <code><a></code> และ <code><em></code> + desc_html: ย่อหน้าเกริ่นนำใน API อธิบายถึงสิ่งที่ทำให้เซิร์ฟเวอร์ Mastodon นี้พิเศษและสิ่งอื่นใดที่สำคัญ คุณสามารถใช้แท็ก HTML โดยเฉพาะอย่างยิ่ง <code><a></code> และ <code><em></code> title: คำอธิบายเซิร์ฟเวอร์ site_description_extended: desc_html: สถานที่ที่ดีสำหรับแนวทางปฏิบัติ, กฎ, หลักเกณฑ์ และสิ่งอื่น ๆ ของคุณที่ทำให้เซิร์ฟเวอร์ของคุณแตกต่าง คุณสามารถใช้แท็ก HTML title: ข้อมูลแบบขยายที่กำหนดเอง site_short_description: title: คำอธิบายเซิร์ฟเวอร์แบบสั้น + site_terms: + title: เงื่อนไขการให้บริการที่กำหนดเอง site_title: ชื่อเซิร์ฟเวอร์ timeline_preview: desc_html: แสดงเส้นเวลาสาธารณะในหน้าเริ่มต้น title: ตัวอย่างเส้นเวลา title: การตั้งค่าไซต์ + trends: + title: แฮชแท็กที่กำลังนิยม statuses: back_to_account: กลับไปที่หน้าบัญชี batch: delete: ลบ nsfw_off: ทำเครื่องหมายว่าไม่ละเอียดอ่อน nsfw_on: ทำเครื่องหมายว่าละเอียดอ่อน + deleted: ลบแล้ว media: title: สื่อ no_media: ไม่มีสื่อ title: สถานะบัญชี - subscriptions: - callback_url: URL เรียกกลับ - confirmed: ยืนยันแล้ว - expires_in: หมดอายุภายใน - last_delivery: ส่งล่าสุด - topic: หัวข้อ tags: - accounts: บัญชี - hidden: ซ่อนอยู่ - hide: ซ่อนจากไดเรกทอรี + context: บริบท + directory: ในไดเรกทอรี + in_directory: "%{count} ในไดเรกทอรี" + last_active: ใช้งานล่าสุด + most_popular: ยอดนิยม + most_recent: ล่าสุด name: แฮชแท็ก title: แฮชแท็ก - unhide: แสดงในไดเรกทอรี - visible: มองเห็น + trending_right_now: กำลังนิยม title: การดูแล warning_presets: add_new: เพิ่มใหม่ @@ -340,6 +413,16 @@ th: edit: แก้ไข edit_preset: แก้ไขคำเตือนที่ตั้งไว้ล่วงหน้า title: จัดการคำเตือนที่ตั้งไว้ล่วงหน้า + aliases: + add_new: สร้างนามแฝง + remove: เลิกเชื่อมโยงนามแฝง + appearance: + advanced_web_interface: ส่วนติดต่อเว็บขั้นสูง + animations_and_accessibility: ภาพเคลื่อนไหวและการช่วยการเข้าถึง + confirmation_dialogs: กล่องโต้ตอบการยืนยัน + discovery: ค้นพบ + sensitive_content: เนื้อหาที่ละเอียดอ่อน + toot_layout: เค้าโครงโพสต์ application_mailer: notification_preferences: เปลี่ยนการกำหนดลักษณะอีเมล settings: 'เปลี่ยนการกำหนดลักษณะอีเมล: %{link}' @@ -347,31 +430,46 @@ th: view_profile: ดูโปรไฟล์ view_status: ดูสถานะ applications: + created: สร้างแอปพลิเคชันสำเร็จ + destroyed: ลบแอปพลิเคชันสำเร็จ invalid_url: URL ที่ระบุไม่ถูกต้อง + your_token: โทเคนการเข้าถึงของคุณ auth: apply_for_account: ขอคำเชิญ change_password: รหัสผ่าน - confirm_email: ยืนยันอีเมล + checkbox_agreement_html: ฉันยอมรับ <a href="%{rules_path}" target="_blank">กฎของเซิร์ฟเวอร์</a> และ <a href="%{terms_path}" target="_blank">เงื่อนไขการให้บริการ</a> + checkbox_agreement_without_rules_html: ฉันยอมรับ <a href="%{terms_path}" target="_blank">เงื่อนไขการให้บริการ</a> delete_account: ลบบัญชี + didnt_get_confirmation: ไม่ได้รับคำแนะนำการยืนยัน? forgot_password: ลืมรหัสผ่านของคุณ? login: เข้าสู่ระบบ logout: ออกจากระบบ migrate_account: ย้ายไปยังบัญชีอื่น or_log_in_with: หรือเข้าสู่ระบบด้วย + providers: + cas: CAS + saml: SAML register: ลงทะเบียน - resend_confirmation: ส่งขั้นตอนวิธีการยืนยันใหม่อีกครั้ง + resend_confirmation: ส่งคำแนะนำการยืนยันใหม่ reset_password: ตั้งรหัสผ่านใหม่ security: ความปลอดภัย set_new_password: ตั้งรหัสผ่านใหม่ + status: + account_status: สถานะบัญชี trouble_logging_in: มีปัญหาในการเข้าสู่ระบบ? authorize_follow: already_following: คุณกำลังติดตามบัญชีนี้อยู่แล้ว follow: ติดตาม + follow_request: 'คุณได้ส่งคำขอติดตามไปยัง:' following: 'สำเร็จ! คุณกำลังติดตาม:' post_follow: return: แสดงโปรไฟล์ของผู้ใช้ web: ไปยังเว็บ title: ติดตาม %{acct} + challenge: + confirm: ดำเนินการต่อ + invalid_password: รหัสผ่านไม่ถูกต้อง + prompt: ยืนยันรหัสผ่านเพื่อดำเนินการต่อ datetime: distance_in_words: about_x_hours: "%{count} ชั่วโมง" @@ -394,8 +492,10 @@ th: explanation: ค้นพบผู้ใช้ตามความสนใจของเขา explore_mastodon: สำรวจ %{title} errors: - '403': คุณไม่มีสิทธิดูหน้านี้ + '400': The request you submitted was invalid or malformed. + '403': คุณไม่มีสิทธิอนุญาตเพื่อดูหน้านี้ '404': หน้าที่คุณกำลังมองหาไม่ได้อยู่ที่นี่ + '406': This page is not available in the requested format. '410': หน้าที่คุณกำลังมองหาไม่มีอยู่ที่นี่อีกต่อไป '422': content: การตรวจสอบความปลอดภัยล้มเหลว คุณกำลังปิดกั้นคุกกี้หรือไม่? @@ -403,6 +503,9 @@ th: '429': Throttled '500': title: หน้านี้ไม่ถูกต้อง + '503': The page could not be served due to a temporary server failure. + existing_username_validator: + not_found_multiple: ไม่พบ %{usernames} exports: archive_takeout: date: วันที่ @@ -410,6 +513,7 @@ th: request: ขอการเก็บถาวรของคุณ size: ขนาด blocks: คุณปิดกั้น + csv: CSV domain_blocks: การปิดกั้นโดเมน follows: คุณติดตาม lists: รายการ @@ -434,11 +538,15 @@ th: developers: นักพัฒนา more: เพิ่มเติม… resources: ทรัพยากร + trending_now: กำลังนิยม generic: all: ทั้งหมด changes_saved_msg: บันทึกการเปลี่ยนแปลงสำเร็จ! copy: คัดลอก + order_by: เรียงลำดับตาม save_changes: บันทึกการเปลี่ยนแปลง + identity_proofs: + authorize: ใช่ อนุญาต imports: modes: merge: ผสาน @@ -446,6 +554,7 @@ th: preface: You can import certain data like all the people you are following or blocking into your account on this instance, from files created by an export on another instance. types: blocking: รายการปิดกั้น + domain_blocking: รายการปิดกั้นโดเมน following: รายการติดตาม muting: รายการปิดเสียง upload: อัปโหลด @@ -460,9 +569,12 @@ th: '86400': 1 วัน expires_in_prompt: ไม่เลย generate: สร้าง + max_uses: + other: "%{count} การใช้" max_uses_prompt: ไม่มีขีดจำกัด table: expires_at: หมดอายุเมื่อ + uses: การใช้ title: เชิญผู้คน media_attachments: validations: @@ -470,7 +582,13 @@ th: too_many: ไม่สามารถแนบมากกว่า 4 ไฟล์ migrations: acct: username@domain ของบัญชีใหม่ - proceed: บันทึก + cancel: ยกเลิกการเปลี่ยนเส้นทาง + errors: + move_to_self: ไม่สามารถเป็นบัญชีปัจจุบัน + not_found: ไม่พบ + proceed_with_move: ย้ายผู้ติดตาม + redirecting_to: บัญชีของคุณกำลังเปลี่ยนเส้นทางไปยัง %{acct} + set_redirect: ตั้งการเปลี่ยนเส้นทาง moderation: title: การควบคุม notification_mailer: @@ -479,6 +597,7 @@ th: mention: "%{name} ได้กล่าวถึงคุณใน:" new_followers_summary: other: You have gotten %{count} new followers! Amazing! + title: เมื่อคุณไม่อยู่... favourite: body: 'สถานะของคุณได้รับการชื่นชอบโดย %{name}:' subject: "%{name} ได้ชื่นชอบสถานะของคุณ" @@ -506,8 +625,22 @@ th: next: ถัดไป older: เก่ากว่า prev: ก่อนหน้า + truncate: "…" + polls: + errors: + already_voted: คุณได้ลงคะแนนในโพลนี้อยู่แล้ว + duplicate_options: มีรายการที่ซ้ำกัน + preferences: + other: อื่น ๆ + posting_defaults: ค่าเริ่มต้นการโพสต์ + public_timelines: เส้นเวลาสาธารณะ relationships: activity: กิจกรรมบัญชี + last_active: ใช้งานล่าสุด + most_recent: ล่าสุด + moved: ย้ายแล้ว + mutual: ร่วมกัน + primary: หลัก relationship: ความสัมพันธ์ remove_selected_domains: เอาผู้ติดตามทั้งหมดออกจากโดเมนที่เลือก remove_selected_followers: เอาผู้ติดตามที่เลือกออก @@ -528,24 +661,62 @@ th: reply: proceed: ดำเนินการต่อเพื่อตอบกลับ prompt: 'คุณต้องการตอบกลับโพสต์นี้:' - remote_unfollow: - error: ข้อผิดพลาด - title: ชื่อเรื่อง - unfollowed: เลิกติดตามแล้ว sessions: activity: กิจกรรมล่าสุด browser: เบราว์เซอร์ + browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: เบราว์เซอร์ที่ไม่รู้จัก + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UCBrowser + weibo: Weibo + current_session: เซสชันปัจจุบัน + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac + other: แพลตฟอร์มที่ไม่รู้จัก + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: เพิกถอน + revoke_success: เพิกถอนเซสชันสำเร็จ + title: เซสชัน settings: + account: บัญชี + account_settings: การตั้งค่าบัญชี + appearance: ลักษณะที่ปรากฏ authorized_apps: แอปที่ได้รับอนุญาต back: กลับไปที่ Mastodon delete: การลบบัญชี development: การพัฒนา edit_profile: แก้ไขโปรไฟล์ export: การส่งออกข้อมูล - import: นำเข้า + featured_tags: แฮชแท็กที่แนะนำ + import: การนำเข้า + import_and_export: การนำเข้าและการส่งออก + migrate: การโยกย้ายบัญชี notifications: การแจ้งเตือน preferences: การกำหนดลักษณะ + profile: โปรไฟล์ relationships: การติดตามและผู้ติดตาม two_factor_authentication: การรับรองความถูกต้องด้วยสองปัจจัย statuses: @@ -556,14 +727,19 @@ th: video: other: "%{count} วิดีโอ" content_warning: 'คำเตือนเนื้อหา: %{warning}' + language_detection: ตรวจหาภาษาโดยอัตโนมัติ open_in_web: เปิดในเว็บ pin_errors: reblog: ไม่สามารถปักหมุดการดัน poll: + total_people: + other: "%{count} คน" total_votes: other: "%{count} การลงคะแนน" + vote: ลงคะแนน show_more: แสดงเพิ่มเติม sign_in_to_participate: ลงชื่อเข้าเพื่อเข้าร่วมการสนทนา + title: '%{name}: "%{quote}"' visibilities: private: ผู้ติดตามเท่านั้น private_long: แสดงต่อผู้ติดตามเท่านั้น diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 3113e7a08..b2b1dd078 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1,28 +1,48 @@ --- tr: about: - about_hashtag_html: Bunlar <strong>#%{hashtag}X</strong> ile etiketlenen genel paylaşımlar. Açık alanda herhangi bir yerde bir hesabınız varsa, onlarla etkileşime geçebilirsiniz. + about_hashtag_html: Bunlar <strong>#%{hashtag}</strong> ile etiketlenen genel tootlar. Fediverse içinde herhangi bir yerde bir hesabınız varsa, onlarla etkileşime geçebilirsiniz. about_mastodon_html: Mastodon <em>ücretsiz ve açık kaynaklı</em> bir sosyal ağdır. <em>Merkezileştirilmemiş</em> yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon <em>sosyal ağına</em> dahil edebilir. about_this: Bu sunucu hakkında + active_count_after: etkin + active_footnote: Aylık Aktif Kullanıcılar (AAK) administered_by: 'Tarafından yönetildi:' + api: API apps: Mobil uygulamalar + apps_platforms: İos, Android ve diğer platformlardaki Mastodon'u kullanın + browse_directory: Bir profil dizinine göz atın ve ilgi alanlarına göre filtreleyin + browse_local_posts: Bu sunucudaki herkese açık yayınlara göz atın + browse_public_posts: Mastodon'daki herkese açık yayınlara göz atın contact: İletişim contact_missing: Ayarlanmadı contact_unavailable: Yok + discover_users: Kullanıcıları keşfet documentation: Belgeler - extended_description_html: | - <h3>Kural için iyi bir yer</h3> - <p>Genişletilmiş açıklama henüz ayarlanmamış.</p> - generic_description: "%{domain} ağdaki bir sunucudur" + federation_hint_html: "%{instance} hesabınızla, herhangi bir Mastodon sunucusundaki ve haricindeki kişileri takip edebilirsiniz." + get_apps: Bir mobil uygulamayı deneyin hosted_on: Mastodon %{domain} üzerinde barındırılıyor + instance_actor_flash: | + Bu hesap, herhangi bir kullanıcıyı değil sunucunun kendisini temsil etmek için kullanılan sanal bir aktördür. + Federasyon amaçlı kullanılır ve tüm yansıyı engellemek istemediğiniz sürece engellenmemelidir; bu durumda bir etki alanı bloğu kullanmanız gerekir. learn_more: Daha fazla bilgi edinin privacy_policy: Gizlilik politikası + see_whats_happening: Neler olduğunu görün + server_stats: 'Sunucu istatistikleri:' source_code: Kaynak kodu status_count_after: one: durum other: durum status_count_before: Şu ana kadar + tagline: Arkadaşlarını takip et ve yenilerini keşfet terms: Kullanım şartları + unavailable_content: Mevcut olmayan içerik + unavailable_content_description: + domain: Sunucu + reason: Sebep + rejecting_media: 'Bu sunuculardaki medya dosyaları işlenmeyecek ya da saklanmayacak, ve hiçbir küçük resim gösterilmeyecektir, dolayısıyla orjinal dosyaya manuel tıklama gerekecektir:' + silenced: 'Bu sunuculardan gelen gönderiler genel zaman çizelgelerinde ve konuşmalarda gizlenecek ve siz onları takip etmediğiniz sürece, kullanıcıların etkileşimlerinden hiçbir bildirim alınmayacaktır:' + suspended: 'Bu sunuculardaki hiçbir veri işlenmeyecek, saklanmayacak veya değiş tokuş edilmeyecektir, dolayısıyla bu sunuculardaki kullanıcılarla herhangi bir etkileşim ya da iletişim imkansız olacaktır:' + unavailable_content_html: Mastodon, genel olarak fediverse'teki herhangi bir sunucudan içerik görüntülemenize ve kullanıcılarıyla etkileşim kurmanıza izin verir. Bunlar, bu sunucuda yapılmış olan istisnalardır. user_count_after: one: kullanıcı other: kullanıcı @@ -30,38 +50,51 @@ tr: what_is_mastodon: Mastodon nedir? accounts: choices_html: "%{name} seçimleri:" + endorsements_hint: Takip ettiğiniz kişileri web arayüzünden onaylayabilirsiniz, burada görünecekler. + featured_tags_hint: Burada görüntülenecek belirli etiketlere sahip olabilirsiniz. follow: Takip et followers: one: Takipçi other: Takipçi following: Takip ediliyor joined: "%{date} tarihinde katıldı" + last_active: son aktivite link_verified_on: Bu bağlantının mülkiyeti %{date} tarihinde kontrol edildi media: Medya moved_html: "%{name}, %{new_profile_link} adresine taşındı:" network_hidden: Bu bilgi mevcut değil + never_active: Asla nothing_here: Burada henüz hiçbir gönderi yok! people_followed_by: Kullanıcı %{name}'in takip ettikleri people_who_follow: Kullanıcı %{name}'i takip edenler pin_errors: following: Onaylamak istediğiniz kişiyi zaten takip ediyor olmalısınız + posts: + one: Toot + other: Tootlar posts_tab_heading: Tootlar posts_with_replies: Tootlar ve yanıtlar reserved_username: Kullanıcı adı saklıdır roles: admin: Yönetici + bot: Bot moderator: Denetleyici + unavailable: Profil kullanılamıyor unfollow: Takibi bırak admin: account_actions: action: Eylemi gerçekleştir + title: "%{acct} üzerinde denetleme eylemi gerçekleştir" account_moderation_notes: create: Not bırakın created_msg: Denetim notu başarıyla oluşturuldu! delete: Sil destroyed_msg: Denetim notu başarıyla yok edildi! accounts: + approve: Onayla + approve_all: Tümünü onayla are_you_sure: Emin misiniz? + avatar: Avatar by_domain: Sunucu change_email: changed_msg: Hesap e-postası başarıyla değiştirildi! @@ -74,6 +107,7 @@ tr: confirmed: Onaylandı confirming: Onaylama deleted: Silinen + demote: Düşür disable: Devre dışı disable_two_factor_authentication: 2AD kapat disabled: Kapalı @@ -91,6 +125,7 @@ tr: header: Üstbilgi inbox_url: Gelen kutusu bağlantısı invited_by: Tarafından davet edildi + ip: IP joined: Katıldı location: all: Hepsi @@ -101,14 +136,20 @@ tr: media_attachments: Medya ekleri memorialize: Bir hatıraya dön moderation: + active: Etkin all: Hepsi + pending: Bekliyor silenced: Susturulanlar suspended: Uzaklaştırılanlar title: Yönetim moderation_notes: Denetleme notları most_recent_activity: Son aktivite most_recent_ip: Son IP + no_account_selected: Hiçbiri seçilmediğinden hiçbir hesap değiştirilmedi + no_limits_imposed: Sınır koymaz not_subscribed: Abone edilmedi + outbox_url: Giden Kutusu URL'si + pending: Bekleyen yorum perform_full_suspension: Askıya al profile_url: Profil linki promote: Yükselt @@ -116,6 +157,8 @@ tr: public: Herkese açık push_subscription_expires: PuSH aboneliği dolumu redownload: Profili yenile + reject: Reddet + reject_all: Tümünü reddet remove_avatar: Avatarı kaldır remove_header: Üstbilgiyi kaldır resend_confirmation: @@ -133,6 +176,7 @@ tr: user: Kullanıcı salmon_url: Salmon Linki search: Ara + search_same_ip: Aynı IP adresine sahip diğer kullanıcılar shared_inbox_url: Paylaşılan gelen kutusu bağlantısı show: created_reports: Yapılan şikayetler @@ -142,6 +186,7 @@ tr: statuses: Durumlar subscribe: Abone ol suspended: Askıya alındı + time_in_queue: "%{time} kuyruğunda bekliyor" title: Hesaplar unconfirmed_email: Onaylanmamış e-posta undo_silenced: Susturmayı geri al @@ -149,25 +194,138 @@ tr: unsubscribe: Abonelikten çık username: Kullanıcı adı warn: Uyar + web: Web + whitelisted: Beyaz listede action_logs: actions: + assigned_to_self_report: "%{name} kendilerine %{target} adlı raporu verdi" + change_email_user: "%{name}, %{target} kullanıcısının e-posta adresini değiştirdi" confirm_user: "%{name} %{target} kullanıcısının e-posta adresini onayladı" + create_account_warning: "%{name} %{target} 'a bir uyarı gönderdi" create_custom_emoji: "%{name} yeni ifade yükledi %{target}" + create_domain_allow: "%{target} alan adı, %{name} tarafından beyaz listeye alındı" + create_domain_block: "%{target} alanı, %{name} tarafından engellendi" + create_email_domain_block: "%{target} e-posta alanı, %{name} tarafından kara listeye alınmış" + demote_user: "%{name} %{target} kullanıcısını düşürdü" + destroy_custom_emoji: "%{target} emoji, %{name} tarafından kaldırıldı" + destroy_domain_allow: "%{target} alan adı, %{name} tarafından beyaz listeden çıkartıldı" + destroy_domain_block: "%{target} alan adının engeli %{name} tarafından kaldırıldı" + destroy_email_domain_block: "%{target} e-posta sunucusu, %{name} tarafından beyaz listeye alındı" + destroy_status: "%{name}, %{target} kullanıcısının durumunu kaldırdı" disable_2fa_user: "%{name}, %{target} kullanıcısı için iki adım gereksinimini kapattı" + disable_custom_emoji: "%{target} emoji, %{name} tarafından devre dışı bırakıldı" + disable_user: "%{name} %{target} kullanıcısı için oturum açmayı devre dışı bıraktı" + enable_custom_emoji: "%{name} %{target} için emojiyi etkinleştirdi" + enable_user: "%{name} %{target} için oturum açmayı etkinleştirdi" + memorialize_account: "%{name} %{target}'in hesabını bir hatıra sayfasına dönüştürdü" + promote_user: "%{name} %{target} kullanıcısını yükseltti" + remove_avatar_user: "%{name} %{target}'in avatarını kaldırdı" + reopen_report: "%{name} %{target} şikayetini yeniden açtı" + reset_password_user: "%{name} %{target} kullanıcısının parolasını resetledi" + resolve_report: "%{name} %{target} şikayetini çözdü" + silence_account: "%{name} %{target}'in hesabını susturdu" + suspend_account: "%{name} %{target}'in hesabını uzaklaştırdı" + unassigned_report: "%{name} %{target} şikayetinin atamasını geri aldı" + unsilence_account: "%{name} %{target}'in hesabının susturmasını kaldırdı" + unsuspend_account: "%{name} %{target}'in hesabının uzaklaştırmasını kaldırdı" + update_custom_emoji: "%{name} %{target} emojiyi güncelledi" + update_status: "%{name}, %{target} kullanıcısının durumunu güncelledi" + deleted_status: "(silinmiş durum)" + title: Denetim günlüğü + custom_emojis: + assign_category: Kategori ata + by_domain: Alan adı + copied_msg: Emojinin yerel kopyası başarıyla oluşturuldu + copy: Kopyala + copy_failed_msg: Bu emojinin yerel bir kopyası oluşturulamadı + create_new_category: Yeni kategori ekle + created_msg: Emoji başarıyla oluşturuldu! + delete: Sil + destroyed_msg: Emojo başarıyla yok edildi! + disable: Devre dışı bırak + disabled: Devre dışı + disabled_msg: Bu emoji başarıyla devre dışı bırakıldı + emoji: İfadeler + enable: Etkinleştir + enabled: Etkin + enabled_msg: Bu emojiyi başarıyla etkinleştirdi + image_hint: 50 KB'a kadar PNG + list: Liste + listed: Listelenen + new: + title: Yeni özel emoji ekle + overwrite: Üzerine yaz + shortcode: Kısa kod + shortcode_hint: En az 2 karakter, sadece alfanümerik karakterler ve alt çizgiler + title: Özel emojiler + uncategorized: Kategorilenmemiş + unlist: Liste dışı + unlisted: Listelenmemiş + update_failed_msg: Bu emoji güncellenemedi + updated_msg: Emoji başarıyla güncellendi! + upload: Yükle + dashboard: + authorized_fetch_mode: Güvenli mod + backlog: bekleyen işler + config: Yapılandırma + feature_deletions: Hesap silme + feature_invites: Davet linkleri + feature_profile_directory: Profil dizini + feature_registrations: Kayıtlar + feature_relay: Federasyon aktarıcısı + feature_spam_check: Anti-spam + feature_timeline_preview: Zaman çizelgesi önizlemesi + features: Özellikler + hidden_service: Gizli servislere sahip federasyon + open_reports: raporları aç + pending_tags: inceleme için bekleyen hashtag'ler + pending_users: inceleme için bekleyen kullanıcılar + recent_users: Son kullanıcılar + search: Tam metin araması + single_user_mode: Tek kullanıcı modu + software: Yazılım + space: Alan kullanımı + title: Kontrol Paneli + total_users: toplam kullanıcı + trends: Trendler + week_interactions: bu haftaki etkileşimler + week_users_active: bu hafta aktif + week_users_new: bu hafta kullanıcılar + whitelist_mode: Beyaz liste modu + domain_allows: + add_new: Alan adını beyaz listeye al + created_msg: Alan adı başarıyla beyaz listeye alındı + destroyed_msg: Alan adı beyaz listeden kaldırıldı + undo: Beyaz listeden çıkar domain_blocks: add_new: Yeni ekle created_msg: Domain bloğu şu an işleniyor destroyed_msg: Domain bloğu silindi + domain: Alan adı + edit: Etki alanı bloğunu düzenle + existing_domain_block_html: '%{name}''e zaten daha katı sınırlar uyguladınız, önce <a href="%{unblock_url}">engellemesini kaldırmanız</a> gerekiyor.' new: create: Yeni blok oluştur hint: Domain bloğu, veri tabanında hesap kayıtlarının oluşturulmasını engellemez, fakat o hesapların üzerine otomatik olarak belirli yönetim metodlarını olarak uygular. severity: desc_html: "<strong>Susturma</strong>, uygulanan hesabın gönderilerini, o hesabı takip etmeyen diğer herkese gizler. <strong>Uzaklaştırma</strong> hesabın bütün içeriğini, ortam dosyalarını ve profil verisini siler." + noop: Yok silence: Sustur suspend: Uzaklaştır title: Yeni domain bloğu + private_comment: Özel yorum + private_comment_hint: Denetleyiciler tarafından dahili kullanım için bu alan adı sınırlaması hakkında yorum. + public_comment: Genel yorum + public_comment_hint: Eğer alan adı sınırlamaları listesinin tanıtılması etkinleştirilmişse, genel kullanım için bu alan adı sınırlaması hakkında yorum. reject_media: Ortam dosyalarını reddetme reject_media_hint: Yerel olarak depolanmış ortam dosyalarını ve gelecekte indirilecek olanları reddeder. Uzaklaştırma için uygun değildir + reject_reports: Raporları reddet + reject_reports_hint: Bu alan adından gelen tüm şikayetleri yok sayın. Uzaklaştırmalar için mevzu dışıdır + rejecting_media: ortam dosyalarını reddet + rejecting_reports: şikayetleri reddet + severity: + silence: susturulmuş + suspend: uzaklaştırılmış show: affected_accounts: one: Veritabanındaki bir hesap etkilendi @@ -178,69 +336,320 @@ tr: title: "%{domain} domain'i için yapılan işlemi geri al" undo: Geri al undo: Geri al + view: Alan adı bloğunu görüntüle + email_domain_blocks: + add_new: Yeni ekle + created_msg: E-posta alan adı kara listeye başarıyla eklendi + delete: Sil + destroyed_msg: E-posta alan adı kara listeden başarıyla silindi + domain: Alan adı + new: + create: Alan adı ekle + title: Yeni e-posta kara liste girişi + title: E-posta kara listesi + followers: + back_to_account: Hesaba Geri Dön + title: "%{acct} Takipçileri" instances: + by_domain: Alan adı + delivery_available: Teslimat mevcut + known_accounts: + one: "%{count} bilinen hesap" + other: "%{count} bilinen hesap" + moderation: + all: Tümü + limited: Sınırlı + title: Denetim + private_comment: Özel yorum + public_comment: Genel yorum title: Bilinen Sunucular + total_blocked_by_us: Tarafımızca engellenen + total_followed_by_them: Onlar tarafından takip edilen + total_followed_by_us: Tarafımızca takip edilen + total_reported: Onlar hakkında şikayetler + total_storage: Medya ekleri + invites: + deactivate_all: Tümünü devre dışı bırak + filter: + all: Tümü + available: Mevcut + expired: Süresi dolmuş + title: Filtre + title: Davetler + pending_accounts: + title: Bekleyen hesaplar (%{count}) + relays: + add_new: Yeni aktarıcı ekle + delete: Sil + description_html: "<strong>Federasyon aktarıcısı</strong>, kendisine abone olan ve yayın yapan sunucular arasında büyük miktarlarda herkese açık tootların değiş tokuşunu yapan aracı bir sunucudur. <strong>Küçük ve orta boyutlu sunucuların fediverse'ten içerik keşfetmesine yardımcı olurlar</strong>, aksi takdirde yerel kullanıcıların uzak sunuculardaki diğer kişileri manuel olarak takip etmeleri gerekecektir." + disable: Devre dışı + disabled: Devre dışı + enable: Etkin + enable_hint: Etkinleştirildiğinde, sunucunuz bu aktarıcıdan gelecek tüm herkese açık tootlara abone olacak, ve kendisinin herkese açık tootlarını bu aktarıcıya göndermeye başlayacaktır. + enabled: Etkin + inbox_url: Aktarıcı URL'si + pending: Aktarıcının onaylaması için bekleniyor + save_and_enable: Kaydet ve etkinleştir + setup: Bir aktarıcı bağlantısı kur + signatures_not_enabled: Güvenli mod ya da beyaz liste modu etkin iken aktarıcılar düzgün çalışmayacaktır + status: Durum + title: Aktarıcılar + report_notes: + created_msg: Şikayet notu başarıyla oluşturuldu! + destroyed_msg: Şikayet notu başarıyla silindi! reports: + account: + note: not + report: şikayet + action_taken_by: tarafından gerçekleştirilen eylem + are_you_sure: Emin misiniz? + assign_to_self: Bana ata + assigned: Denetleyici atandı comment: none: Yok + created_at: Şikayet edildi mark_as_resolved: Giderildi olarak işaretle + mark_as_unresolved: Çözümlenmemiş olarak işaretle + notes: + create: Not Ekle + create_and_resolve: Not ile çözümle + create_and_unresolve: Not ile tekrar aç + delete: Sil + placeholder: Hangi işlemlerin yapıldığını, ya da diğer ilgili güncellemeleri açıklayın... + reopen: Şikayeti tekrar aç report: 'Şikayet #%{id}' reported_account: Şikayet edilen hesap reported_by: Şikayet eden resolved: Giderildi + resolved_msg: Şikayet başarıyla çözümlendi! status: Durum title: Şikayetler + unassign: Atamayı geri al unresolved: Giderilmedi + updated_at: Güncellendi settings: + activity_api_enabled: + desc_html: Yerel olarak yayınlanan durumların, aktif kullanıcıların, ve haftalık kovalardaki yeni kayıtların sayısı + title: Kullanıcı etkinliği hakkında toplu istatistikler yayınlayın + bootstrap_timeline_accounts: + desc_html: Birden fazla kullanıcı adını virgülle ayırın. Yalnızca yerel ve kilitlenmemiş hesaplar geçerlidir. Boş olduğunda varsayılan tüm yerel yöneticilerdir. + title: Yeni kullanıcılar için varsayılan takipler contact_information: email: Herkese açık e-posta adresiniz username: Bir kullanıcı adı giriniz + custom_css: + desc_html: Görünümü her sayfada yüklenecek CSS ile değiştirin + title: Özel CSS + default_noindex: + desc_html: Bu ayarı kendileri değiştirmeyen tüm kullanıcıları etkiler + title: Varsayılan olarak kullanıcıları arama motoru indekslemesinin dışında tut + domain_blocks: + all: Herkes için + disabled: Hiç kimseye + title: Alan adı bloklarını göster + users: Oturum açan yerel kullanıcılara + domain_blocks_rationale: + title: Gerekçeyi göster + hero: + desc_html: Önsayfada görüntülenir. En az 600x100px önerilir. Ayarlanmadığında, sunucu küçük resmi kullanılır + title: Kahraman görseli + mascot: + desc_html: Birden fazla sayfada görüntülenir. En az 293x205px önerilir. Ayarlanmadığında, varsayılan maskot kullanılır + title: Maskot görseli + peers_api_enabled: + desc_html: Bu sunucunun fediverse'te karşılaştığı alan adları + title: Keşfedilen sunucuların listesini yayınla + preview_sensitive_media: + desc_html: Medya duyarlı olarak işaretlenmiş olsa bile, diğer web sitelerindeki bağlantı ön izlemeleri küçük resim gösterecektir + title: OpenGraph ön izlemelerinde hassas medyayı göster + profile_directory: + desc_html: Kullanıcıların keşfedilebilir olmasına izin ver + title: Profil dizinini etkinleştir registrations: closed_message: desc_html: Kayıt alımları kapatıldığında ana sayfada görüntülenecek mesajdır. <br> HTML etiketleri kullanabilirsiniz title: Kayıt alımları kapatılma mesajı + deletion: + desc_html: Herkese hesabını silme izni ver + title: Hesap silmeyi aç + min_invite_role: + disabled: Hiç kimse + title: tarafından yapılan davetlere izin ver + registrations_mode: + modes: + approved: Kayıt için onay gerekli + none: Hiç kimse kayıt olamaz + open: Herkes kaydolabilir + title: Kayıt modu + show_known_fediverse_at_about_page: + desc_html: Değiştirildiğinde, bilinen bütün fediverse'lerden gönderileri ön izlemede gösterir. Diğer türlü sadece yerel gönderileri gösterecektir. + title: Zaman çizelgesi ön izlemesinde bilinen fediverse'i göster + show_staff_badge: + desc_html: Kullanıcının sayfasında bir personel rozeti göster + title: Personel rozeti göster site_description: desc_html: Ana sayfada paragraf olarak görüntülenecek bilgidir.<br>Özellikle <code><a></code> ve <code><em></code> olmak suretiyle HTML etiketlerini kullanabilirsiniz. title: Site açıklaması site_description_extended: desc_html: Harici bilgi sayfasında gösterilir.<br>HTML etiketleri girebilirsiniz title: Sunucu hakkında detaylı bilgi + site_short_description: + desc_html: Kenar çubuğunda ve meta etiketlerinde görüntülenir. Mastodon'un ne olduğunu ve bu sunucuyu özel kılan şeyleri tek bir paragrafta açıklayın. + title: Kısa sunucu açıklaması + site_terms: + desc_html: Kendi gizlilik politikanızı, hizmet şartlarınızı ya da diğer hukuki metinlerinizi yazabilirsiniz. HTML etiketleri kullanabilirsiniz + title: Özel hizmet şartları site_title: Site başlığı + spam_check_enabled: + desc_html: Mastodon, tekrar eden istenmeyen mesajlar gönderen hesapları otomatik olarak susturabilir ve şikayet edebilir. Yanlışlar olabilir. + title: Anti-spam otomasyonu + thumbnail: + desc_html: OpenGraph ve API ile ön izlemeler için kullanılır. 1200x630px tavsiye edilir + title: Sunucu küçük resmi + timeline_preview: + desc_html: Açılış sayfasında genel zaman çizelgesini görüntüle + title: Zaman çizelgesi önizlemesi title: Site Ayarları - subscriptions: - callback_url: Callback linki - confirmed: Onaylandı - expires_in: Bitiş Tarihi - last_delivery: Son gönderim - topic: Konu + trendable_by_default: + desc_html: Daha önce izin verilmeyen etiketleri etkiler + title: Ön inceleme yapmadan etiketlerin trend olmasına izin ver + trends: + desc_html: Şu anda trend olan ve daha önce incelenen etiketleri herkese açık olarak göster + title: Trend etiketler + statuses: + back_to_account: Hesap sayfasına geri dön + batch: + delete: Sil + nsfw_off: Hassas değil olarak işaretle + nsfw_on: Hassas olarak işaretle + deleted: Silindi + failed_to_execute: Çalıştırılamadı + media: + title: Medya + no_media: Medya yok + no_status_selected: Hiçbiri seçilmediğinden hiçbir durum değiştirilmedi + title: Hesap durumları + with_media: Medya ile tags: - accounts: Hesaplar - name: Etiketler + accounts_today: Bugünkü eşsiz kullanımlar + accounts_week: Bu haftaki eşsiz kullanımlar + breakdown: Bugünkü kullanımın kaynağa göre dağılımı + context: İçerik + directory: Dizinde + in_directory: Dizinde %{count} + last_active: Son aktiflik + most_popular: En popüler + most_recent: En yeni + name: Etiket + review: Durumu gözden geçir + reviewed: Gözden geçirildi title: Etiketler + trending_right_now: Şu anda trend + unique_uses_today: bugün %{count} gönderi + unreviewed: Gözden geçirilmedi + updated_msg: Etiket ayarları başarıyla güncellendi title: Yönetim warning_presets: add_new: Yeni ekle delete: Sil edit: Düzenle + edit_preset: Uyarı ön-ayarını düzenle + title: Uyarı ön-ayarlarını yönet + admin_mailer: + new_pending_account: + body: Yeni hesabın detayları aşağıdadır. Bu başvuruyu onaylayabilir ya da reddedebilirsiniz. + subject: "%{instance} üzerinde gözden geçirmek için yeni hesap (%{username})" + new_report: + body: "%{reporter} %{target}'i şikayet etti" + body_remote: "%{domain}'den birisi %{target}'i şikayet etti" + subject: "%{instance} için yeni şikayet (#%{id})" + new_trending_tag: + body: "#%{name} etiketi bugün trend, ancak daha önce incelenmedi. Siz izin vermediğiniz sürece herkese açık olarak gösterilmeyecek, ya da bir daha asla hakkında bir şey duymamak için olduğu şekliyle formu kaydedin." + subject: "%{instance} üzerinde gözden geçirmek için yeni etiket (#%{name})" + aliases: + add_new: Takma ad oluştur + created_msg: Yeni takma ad başarıyla oluşturuldu. Artık eski hesaptan taşınmayı başlatabilirsiniz. + deleted_msg: Yeni takma ad başarıyla kaldırıldı. O hesaptan bu hesaba taşınmak artık mümkün değil. + hint_html: Başka bir hesaptan bu hesaba taşınmak istiyorsanız, takipçileri eski hesaptan bu hesaba taşımadan önce gerekli olan takma adı burada oluşturabilirsiniz. Bu eylem kendi başına <strong>zararsızdır ve geri döndürülebilir</strong>. <strong>Hesap taşıma işlemi eski hesaptan başlatılır</strong>. + remove: Takma adların bağlantısını kaldır + appearance: + advanced_web_interface: Gelişmiş web arayüzü + advanced_web_interface_hint: 'Tüm ekran genişliğinizden yararlanmak istiyorsanız, gelişmiş web arayüzü istediğiniz kadar bilgi görecek kadar çok sayıda farklı sütunu yapılandırmanıza olanak tanır: Anasayfa, bildirimler, birleşik zaman çizelgesi, istediğiniz sayıda liste ve etiket.' + animations_and_accessibility: Animasyonlar ve erişilebilirlik + confirmation_dialogs: Onay iletişim kutuları + discovery: Keşfet + sensitive_content: Hassas içerik + toot_layout: Toot yerleşimi application_mailer: + notification_preferences: E-posta tercihlerini değiştir + salutation: "%{name}," settings: 'E-mail tercihlerini değiştir: %{link}' view: 'Görüntüle:' + view_profile: Profili Görüntüle + view_status: Durumu görüntüle applications: + created: Uygulama başarıyla oluşturuldu + destroyed: Uygulama başarıyla silindi invalid_url: Verilen URL geçerli değil + regenerate_token: Erişim belirtecini yeniden oluştur + token_regenerated: Erişim belirteci başarıyla oluşturuldu + warning: Bu verilere çok dikkat edin. Asla kimseyle paylaşmayın! + your_token: Erişim belirteciniz auth: + apply_for_account: Davet et + change_password: Parola + checkbox_agreement_html: <a href="%{rules_path}" target="_blank">sunucu kuralları</a> ve<a href="%{terms_path}" target="_blank">hizmet şartlarını</a> kabul ediyorum + checkbox_agreement_without_rules_html: <a href="%{terms_path}" target="_blank">Hizmet şartlarını</a> kabul ediyorum + delete_account: Hesabı sil + delete_account_html: Hesabınızı silmek isterseniz, <a href="%{path}">buradan devam edebilirsiniz</a>. Sizden onay istenecektir. + description: + prefix_invited_by_user: "@%{name} sizi Mastodon'un bu sunucusuna katılmaya davet ediyor!" + prefix_sign_up: Bugün Mastodon'a kaydolun! + suffix: Bir hesapla, kişileri takip edebilir, güncellemeler gönderebilir, herhangi bir Mastodon sunucusundan kullanıcılarla mesaj alışverişinde bulunabilir ve daha birçok şey yapabilirsin! didnt_get_confirmation: Hesap doğrulama mailini almadınız mı? forgot_password: Parolanızı unuttunuz mu? + invalid_reset_password_token: Parola sıfırlama belirteci geçersiz veya süresi dolmuş. Lütfen yeni bir tane talep edin. login: Giriş yap logout: Çıkış + migrate_account: Farklı bir hesaba taşının + migrate_account_html: Bu hesabı başka bir hesaba yönlendirmek istiyorsanız, <a href="%{path}">buradan yapılandırabilirsiniz</a>. + or_log_in_with: Veya giriş yapın + providers: + cas: CAS + saml: SAML register: Üye ol + registration_closed: "%{instance} yeni üyeler kabul etmemektedir" resend_confirmation: Doğrulama mailini tekrar gönder reset_password: Parolayı değiştir security: Kimlik bilgileri set_new_password: Yeni parola oluştur + setup: + email_below_hint_html: Eğer aşağıdaki e-posta adresi yanlışsa, onu burada değiştirebilir ve yeni bir doğrulama e-postası alabilirsiniz. + email_settings_hint_html: Onaylama e-postası %{email} adresine gönderildi. Eğer bu e-posta adresi doğru değilse, hesap ayarlarından değiştirebilirsiniz. + title: Kurulum + status: + account_status: Hesap durumu + confirming: E-posta doğrulamasının tamamlanması bekleniyor. + functional: Hesabınız tamamen kullanıma hazır. + pending: Başvurunuz personelimiz tarafından gözden geçirilmeyi beklemektedir. Bu biraz zaman alabilir. Başvurunuz onaylanırsa bir e-posta alacaksınız. + redirecting_to: Hesabınız aktif değil çünkü şu anda %{acct} adresine yönlendirilmektedir. + trouble_logging_in: Oturum açarken sorun mu yaşıyorsunuz? authorize_follow: + already_following: Bu hesabı zaten takip ediyorsunuz error: Uzak hesap aranırken bir hata oluştu follow: Takip et + follow_request: 'Şuna takip isteği gönderdiniz:' + following: 'Başarılı! Artık şunu takip ediyorsunuz:' + post_follow: + close: Ya da, sadece bu pencereyi kapatabilirsiniz. + return: Kullanıcının profilini göster + web: Web'e git title: "%{acct}'i takip et" + challenge: + confirm: Devam et + hint_html: "<strong>İpucu:</strong> Önümüzdeki saat boyunca sana parolanı sormayacağız." + invalid_password: Geçersiz parola + prompt: Devam etmek parolayı doğrulayın datetime: distance_in_words: about_x_hours: "%{count}sa" @@ -255,48 +664,197 @@ tr: x_minutes: "%{count}dk" x_months: "%{count}ay" x_seconds: "%{count}sn" + deletes: + challenge_not_passed: Girdiğiniz bilgi doğru değildi + confirm_password: Kimliğinizi doğrulamak için mevcut parolanızı girin + confirm_username: Prosedürü doğrulamak için kullanıcı adınızı girin + proceed: Hesabı sil + success_msg: Hesabınız başarıyla silindi + warning: + before: 'Devam etmeden önce, lütfen bu notları dikkatlice okuyun:' + caches: Diğer sunucular tarafından ön belleğe alınan içerik kalabilir + data_removal: Gönderileriniz ve diğer verileriniz kalıcı olarak silinecektir + email_change_html: Hesabınızı silmeden <a href="%{path}">e-posta adresinizi değiştirebilirsiniz</a> + email_contact_html: Eğer hala ulaşmazsa, yardım için <a href="mailto:%{email}">%{email}</a> adresine e-posta gönderebilirsiniz + email_reconfirmation_html: Eğer doğrulama e-postası almıyorsanız, <a href="%{path}">tekrar talep edebilirsiniz</a> + irreversible: Hesabınızı geri yükleyemeyecek ya da yeniden etkinleştiremeyeceksiniz + more_details_html: Daha fazla ayrıntı için, <a href="%{terms_path}">gizlilik politikası</a>na göz atın. + username_available: Kullanıcı adınız tekrar kullanılabilir olacaktır + username_unavailable: Kullanıcı adınız kullanılamaz kalacaktır + directories: + directory: Profil dizini + explanation: Kullanıcıları ilgi alanlarına göre keşfedin + explore_mastodon: "%{title} keşfet" + domain_validator: + invalid_domain: geçerli bir alan adı değil errors: + '400': Gönderdiğiniz istek geçersiz veya hatalı biçimlendirilmiş. '403': Bu sayfayı görmek için izniniz yok. '404': Aradığınız sayfa bulunamadı. + '406': Bu sayfa istenen formatta mevcut değil. '410': Aradığınız sayfa artık yok. '422': content: Güvenlik doğrulaması başarısız oldu. Site cookie'lerini engellemiş olabilirsiniz. title: Güvenlik doğrulamasu başarısız - '429': Throttled - '500': + '429': Kısıtlandı + '500': + content: Üzgünüz, ancak bir şey ters gitti. + title: Bu sayfa doğru değil + '503': Geçici sunucu hatası nedeniyle sayfa görüntülenemedi. + noscript_html: Mastodon web uygulamasını kullanmak için lütfen JavaScript'i etkinleştirin. Alternatif olarak, platformunuz için Mastodon <a href="%{apps_path}">yerel uygulamalardan</a> birini deneyin. + existing_username_validator: + not_found: bu kullanıcı adına sahip yerel bir kullanıcı bulunamadı + not_found_multiple: "%{usernames} bulunamadı" exports: + archive_takeout: + date: Tarih + download: Arşivinizi indirin + hint_html: "<strong>Tootlarınızın ve yüklediğiniz ortamların</strong> bir arşivini talep edebilirsiniz. Dışa aktarılan veriler, herhangi bir uyumlu yazılım tarafından okunabilen ActivityPub formatında olacaktır. Her 7 günde bir arşiv talep edebilirsiniz." + in_progress: Arşivinizi derliyoruz... + request: Arşiv isteği + size: Boyut blocks: Blokladıklarınız + csv: CSV + domain_blocks: Alan adı blokları follows: Takip ettikleriniz + lists: Listeler mutes: Susturduklarınız storage: Ortam deposu + featured_tags: + add_new: Yeni ekle + errors: + limit: Zaten azami hashtag miktarı belirlediniz + hint_html: "<strong>Öne çıkan etiketler nelerdir?</strong> Genel profilinizde belirgin bir şekilde görüntülenirler ve kişilerin genel yayınlarınıza özellikle bu etiketler altında göz atmalarına izin verir. Yaratıcı çalışmaları veya uzun vadeli projeleri takip etmek için harika bir araçtır." + filters: + contexts: + home: Ana zaman çizelgesi + notifications: Bildirimler + public: Genel zaman çizelgesi + thread: Sohbetler + edit: + title: Filtreyi düzenle + errors: + invalid_context: Sıfır ya da geçersiz içerik sağlandı + invalid_irreversible: Geri dönüşümsüz filtreleme sadece anasayfa ya da bildirim bağlamında çalışır + index: + delete: Sil + title: Filtreler + new: + title: Yeni filtre ekle + footer: + developers: Geliştiriciler + more: Daha Fazla… + resources: Kaynaklar + trending_now: Trendler generic: + all: Tümü changes_saved_msg: Değişiklikler başarıyla kaydedildi! + copy: Kopyala + no_batch_actions_available: Bu sayfada toplu işlem yok + order_by: Sıralama ölçütü save_changes: Değişiklikleri kaydet validation_errors: one: Bir şeyler ters gitti! Lütfen aşağıdaki hatayı gözden geçiriniz other: Bir şeyler ters gitti! Lütfen aşağıdaki %{count} hatayı gözden geçiriniz + html_validator: + invalid_markup: 'geçersiz HTML markup içermektedir: %{error}' + identity_proofs: + active: Aktif + authorize: Evet, yetkilendir + authorize_connection_prompt: Bu kriptolu bağlantıyı yetkilendir? + errors: + failed: Kriptolu bağlantı başarısız oldu. Lütfen %{provider} üzerinden tekrar deneyin. + keybase: + invalid_token: Keybase belirteçleri imza hash'leridir ve 66 hex karakter içermelidir + verification_failed: Keybase, bu belirteci, %{kb_username} Keybase kullanıcısının imzası olarak tanımıyor. Lütfen Keybase'den tekrar deneyin. + wrong_user: "%{current} olarak giriş yaparken %{proving} için bir kanıt oluşturulamıyor. %{proving} olarak giriş yapın ve tekrar deneyin." + explanation_html: Burada, Keybase profili gibi diğer kimliklerinizi şifreli olarak bağlayabilirsiniz. Bu, diğer kişilerin size şifreli mesajlar göndermesini ve gönderdiğiniz içeriğe güvenmelerini sağlar. + i_am_html: Ben %{service} üzerinde %{username}. + identity: Kimlik + inactive: Pasif + publicize_checkbox: 'Ve bunu tootla:' + publicize_toot: 'İspatlandı! Ben %{service} üzerinde %{username}: %{url}' + status: Doğrulama durumu + view_proof: Kanıt görüntüle imports: + modes: + merge: Birleştir + merge_long: Mevcut kayıtları sakla ve yenileri ekle + overwrite: Üzerine yaz + overwrite_long: Mevcut kayıtları yenileriyle değiştir preface: Diğer sunucudan alarak oluşturduğunuz dosyalar sayesinde, bu sunucudaki hesabınıza takipçilerinizi aktarabilir veya istemediğiniz kişileri otomatik olarak engelleyebilirsiniz. success: Verileriniz başarıyla yüklendi ve zaman içinde işlenecek types: blocking: Engellenenler listesi + domain_blocking: Alan adı engelleme listesi following: Takip edilenler listesi muting: Susturulanlar listesi upload: Yükle + in_memoriam_html: Hatırada. invites: + delete: Devre dışı bırak + expired: Süresi dolmuş expires_in: - '1800': 30 minutes - '21600': 6 hours - '3600': 1 hour - '43200': 12 hours - '604800': 1 week - '86400': 1 day + '1800': 30 dakika + '21600': 6 saat + '3600': 1 saat + '43200': 12 saat + '604800': 1 hafta + '86400': 1 gün + expires_in_prompt: Asla + generate: Oluştur + invited_by: 'Tarafından davet edildi:' + max_uses: + one: 1 kullanım + other: "%{count} kullanım" + max_uses_prompt: Limit yok + prompt: Bu sunucuya erişim vermek için bağlantılar oluşturun ve başkalarıyla paylaşın + table: + expires_at: Bitiş tarihi + uses: Kullanım + title: İnsanları davet et + lists: + errors: + limit: Maksimum liste miktarına ulaştınız media_attachments: validations: images_and_video: Halihazırda görsel içeren bir gönderiye video ekleyemezsiniz too_many: 4'ten fazla dosya ekleyemezsiniz + migrations: + acct: Taşındı + cancel: Yönlendirmeyi iptal et + cancel_explanation: Yönlendirmeyi iptal etmek, mevcut hesabınızı yeniden etkinleştirecek, ancak söz konusu hesaba taşınan takipçileri geri getirmeyecektir. + cancelled_msg: Yönlendirme başarıyla iptal edildi. + errors: + already_moved: zaten taşındığınızla aynı hesap + missing_also_known_as: bu hesaba geri referans yapmamaktadır + move_to_self: mevcut hesap olamaz + not_found: bulunamadı + on_cooldown: Soğuma aşamasındasınız + followers_count: Taşınma zamanındaki takipçiler + incoming_migrations: Farklı bir hesaptan taşınma + incoming_migrations_html: Başka bir hesaptan bu hesaba taşınmak için önce bir <a href="%{path}">hesap takma adı oluşturmanız</a> gerekmektedir. + moved_msg: Hesabınız şimdi %{acct} adresine yönlendiriliyor ve takipçileriniz taşınıyor. + not_redirecting: Hesabınız şu anda başka bir hesaba yönlendirilmemektedir. + on_cooldown: Son zamanlarda hesabınızı taşıdınız. Bu işlev %{count} gün içinde tekrar kullanılabilir olacaktır. + past_migrations: Geçmiş taşınmalar + proceed_with_move: Takipçileri taşı + redirecting_to: Hesabınız %{acct} hesabına yönlendirilmektedir. + set_redirect: Yönlendirme ayarla + warning: + backreference_required: Öncelikle, yeni hesap bu hesabı geri referans edecek şekilde yapılandırılmalıdır + before: 'Devam etmeden önce, lütfen bu notları dikkatlice okuyun:' + cooldown: Taşındıktan sonra, yeniden taşınma imkanınızın olmayacağı bir soğuma periyodu vardır + disabled_account: Sonrasında, mevcut hesabınız tamamen kullanılabilir olmayacaktır. Ancak, yeniden etkinleştirme işleminin yanı sıra veri dışa aktarma erişimine sahip olacaksınız. + followers: Bu eylem tüm takipçileri şu anki hesaptan yeni hesaba taşıyacaktır + only_redirect_html: Alternatif olarak, <a href="%{path}">sadece profilinize bir yönlendirme koyabilirsiniz</a>. + other_data: Başka bir veri otomatik olarak taşınmayacaktır + redirect: Mevcut hesabınızın profili bir yönlendirme bildirimi ile güncellenecek ve aramaların dışında tutulacaktır + moderation: + title: Yönetim notification_mailer: digest: + action: Tüm bildirimleri görüntüle body: Son ziyaretiniz olan %{since}'den beri'da kaçırdığınız şeylerin özeti mention: "%{name} senden bahsetti:" new_followers_summary: @@ -305,41 +863,190 @@ tr: subject: one: "Son ziyaretinizden beri 1 yeni bildiriminiz var \U0001F418" other: "Son ziyaretinizden beri %{count} yeni bildiriminiz var \U0001F418" + title: Senin yokluğunda... favourite: body: "%{name} durumunuzu favorilere ekledi:" subject: "%{name} favorilere ekledi" + title: Yeni favori follow: body: "%{name} sizi takip etmeye başladı!" subject: "%{name} sizi takip etmeye başladı" + title: Yeni takipçi follow_request: + action: Takip isteklerini yönet body: "%{name} size takip isteği gönderdi" subject: 'Takip isteği: %{name}' + title: Yeni takip isteği mention: + action: Yanıt body: "%{name} sizden bahsetti:" subject: "%{name} sizden bahsetti" + title: Yeni bahsetme reblog: body: "%{name} durumunuzu boost etti:" subject: "%{name} durumunuzu boost etti" + title: Yeni gönderi + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T pagination: + newer: Daha yeni next: Sonraki + older: Daha Eski prev: Önceki + truncate: "…" + polls: + errors: + already_voted: Bu ankete daha önce oy verdiniz + duplicate_options: kopya ögeler içeriyor + duration_too_long: ileriye doğru çok geç + duration_too_short: çok erken + expired: Anket çoktan sona erdi + over_character_limit: her biri %{max} karakterden daha uzun olamaz + too_few_options: birden fazla öğeye sahip olmalı + too_many_options: "%{max} öğeden fazla öğe içeremez" + preferences: + other: Diğer + posting_defaults: Gönderi varsayılanları + public_timelines: Genel zaman çizelgeleri + relationships: + activity: Hesap etkinliği + dormant: Atıl + last_active: Son aktivite + most_recent: En son + moved: Taşındı + mutual: Ortak + primary: Birincil + relationship: İlişki + remove_selected_domains: Seçili alan adlarından tüm takipçileri kaldır + remove_selected_followers: Seçili takipçileri kaldır + remove_selected_follows: Seçili kullanıcıları takip etmeyi bırak + status: Hesap durumu remote_follow: acct: Takip edeceğiniz kişiyi kullaniciadi@sunuculinki şeklinde giriniz missing_resource: Hesabınız için yönlendirme linki bulunamadı + no_account_html: Hesabınız yok mu? <a href='%{sign_up_path}' target='_blank'>Buradan kaydolabilirsiniz</a> proceed: Takip onayı prompt: Bu kullanıcıyı takip etmek istediğinize emin misiniz? + reason_html: "<strong>Bu adım neden gerekli?</strong><code>%{instance}</code> kayıtlı olduğunuz sunucu olmayabilir, bu yüzden önce sizi kendi sunucunuza yönlendirmemiz gerekmektedir." + remote_interaction: + favourite: + proceed: Favorilere eklemek için ilerle + prompt: 'Bu tootu favorilerinize eklemek istiyorsunuz:' + reblog: + proceed: Yinelemek için ilerle + prompt: 'Bu tootu yinelemek istiyorsunuz:' + reply: + proceed: Cevap vermek için ilerle + prompt: 'Bu toota cevap vermek istiyorsunuz:' + scheduled_statuses: + over_daily_limit: O gün için %{limit} zamanlanmış toot sınırını aştınız + over_total_limit: "%{limit} zamanlanmış toot sınırını aştınız" + too_soon: Programlanan tarih bugünden ileri bir tarihte olmalıdır + sessions: + activity: Son aktivite + browser: Tarayıcı + browsers: + alipay: Alipay + blackberry: BlackBerry + chrome: Chrome + edge: Microsoft Edge + electron: Electron + firefox: Firefox + generic: Bilinmeyen tarayıcı + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Opera + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Safari + uc_browser: UC Browser + weibo: Weibo + current_session: Şu anki oturum + description: "%{platform} üzerinde %{browser}" + explanation: Bunlar şu anda Mastodon hesabınızda oturum açan web tarayıcılarıdır. + ip: IP + platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: GNU/Linux + mac: Mac + other: bilinmeyen platform + windows: Windows + windows_mobile: Windows Mobil + windows_phone: Windows Phone + revoke: İptal + revoke_success: Oturum başarıyla iptal edildi + title: Oturumlar settings: + account: Hesap + account_settings: Hesap ayarları + aliases: Hesap takma adları + appearance: Görünüm authorized_apps: Yetkilendirilen uygulamalar back: Mastodon'a geri dön + delete: Hesap silme + development: Geliştirme edit_profile: Profili düzenle export: Dışa aktar + featured_tags: Öne çıkan hashtag'ler + identity_proofs: Kimlik belgesi import: İçe aktar + import_and_export: İçe al ve dışarı aktar + migrate: Hesap taşıma + notifications: Bildirim preferences: Tercihler + profile: Profil + relationships: Takip edilenler ve takipçiler two_factor_authentication: İki-faktörlü doğrulama + spam_check: + spam_detected: Bu otomatik bir şikayettir. Spam tespit edildi. statuses: + attached: + description: 'Ekli: %{attached}' + image: + one: "%{count} görsel" + other: "%{count} görsel" + video: + one: "%{count} video" + other: "%{count} video" + boosted_from_html: "%{acct_link} den yinelendi" + content_warning: 'İçerik uyarısı: %{warning}' + disallowed_hashtags: + one: 'izin verilmeyen bir etiket içeriyordu: %{tags}' + other: 'izin verilmeyen hashtag''leri içeriyordu: %{tags}' + language_detection: Dili otomatik olarak algıla open_in_web: Web sayfasında aç over_character_limit: "%{max} karakter limiti aşıldı" + pin_errors: + limit: Hali hazırda maksimum sayıda tootu sabitlediniz + ownership: Başkasının tootu sabitlenemez + private: Halka açık olmayan toot sabitlenemez + reblog: Bir yineleme sabitlenemez + poll: + total_people: + one: "%{count} kişi" + other: "%{count} kişi" + total_votes: + one: "%{count} oy" + other: "%{count} oy" + vote: Oy show_more: Daha fazla + sign_in_to_participate: Sohbete katılmak için oturum açın + title: '%{name}: "%{quote}"' visibilities: private: Sadece takipçiler private_long: Sadece takipçilerime gönder @@ -348,22 +1055,165 @@ tr: unlisted: Listelenmemiş unlisted_long: Herkes görebilir fakat herkese açık zaman tünellerinde listelenmez stream_entries: + pinned: Sabitlenmiş toot reblogged: boost edildi sensitive_content: Hassas içerik + tags: + does_not_match_previous_name: önceki adla eşleşmiyor + terms: + body_html: | + <h2>Gizlilik Politikası</h2> + <h3 id="collect">Hangi bilgileri topluyoruz?</h3> + + <ul> + <li><em>Temel hesap bilgileri</em>: Bu sunucuya kaydolursanız, bir kullanıcı adı, bir e-posta adresi ve bir parola girmeniz istenebilir. Ayrıca, ekran adı ve biyografi gibi ek profil bilgileri girebilir ve bir profil fotoğrafı ve başlık resmi yükleyebilirsiniz. Kullanıcı adı, ekran ad, biyografi, profil fotoğrafı ve başlık resmi her zaman herkese açık olarak listelenir.</li> + <li><em>Gönderiler, takip etmeler ve diğer herkese açık bilgiler</em>: Takip ettiğiniz kişilerin listesi herkese açık olarak listelenir, sizi takip edenler için de aynısı geçerlidir. Bir mesaj gönderdiğinizde, mesajı gönderdiğiniz uygulamanın yanı sıra tarih ve saati de saklanır. Mesajlar, resim ve video gibi medya ekleri içerebilir. Herkese açık ve listelenmemiş gönderiler halka açıktır. Profilinizde bir gönderiyi yayınladığınızda, bu da herkese açık olarak mevcut bir bilgidir. Gönderileriniz takipçilerinize iletilir, bazı durumlarda farklı sunuculara gönderilir ve kopyalar orada saklanır. Gönderilerinizi sildiğinizde, bu da takipçilerinize iletilir. Başka bir gönderiyi yeniden bloglama veya favorileme eylemi her zaman halka açıktır.</li> + <li><em>Doğrudan ve takipçilere özel gönderiler</em>: Tüm gönderiler sunucuda saklanır ve işlenir. Takipçilere özel gönderiler, takipçilerinize ve içinde bahsedilen kullanıcılara, doğrudan gönderiler ise yalnızca içinde bahsedilen kullanıcılara iletilir. Bu, bazı durumlarda farklı sunuculara iletildiği ve kopyaların orada saklandığı anlamına gelir. Bu gönderilere erişimi yalnızca yetkili kişilerle sınırlamak için iyi niyetle çalışıyoruz, ancak diğer sunucular bunu yapamayabilir. Bu nedenle, takipçilerinizin ait olduğu sunucuları incelemek önemlidir. Ayarlarda yeni izleyicileri manuel olarak onaylama ve reddetme seçeneğini değiştirebilirsiniz. <em>Sunucuyu ve alıcı sunucuyu işleten kişilerin bu mesajları görüntüleyebileceğini unutmayın</em>, ve alıcılar ekran görüntüsü alabilir, kopyalayabilir veya başka bir şekilde yeniden paylaşabilir. <em>Mastodon üzerinden herhangi bir tehlikeli bilgi paylaşmayın.</em></li> + <li><em>IP'ler ve diğer meta veriler</em>: Oturum açarken, giriş yaptığınız IP adresini ve tarayıcı uygulamanızın adını kaydederiz. Giriş yapılan tüm oturumlar, incelemek ve iptal etmek için ayarlarda mevcuttur. En son kullanılan IP adresi 12 aya kadar saklanır. Sunucumuza gelen her isteğin IP adresini içeren sunucu loglarını da saklayabiliriz.</li> + </ul> + + <hr class="spacer" /> + + <h3 id="use">Bilgilerinizi ne için kullanıyoruz?</h3> + + <p>Sizden topladığımız bilgilerin herhangi bir kısmı aşağıdaki şekillerde kullanılabilir:</p> + + <ul> + <li>Mastodon'un ana işlevselliğini sağlamak için. Yalnızca oturum açtığınızda diğer kişilerin içeriğiyle etkileşime girebilir ve kendi içeriğinizi gönderebilirsiniz. Örneğin, başkalarının kombine gönderilerini kendi kişiselleştirilmiş ana sayfanızdaki zaman çizelgenizde görüntülemek için onları takip edebilirsiniz.</li> + <li>Topluluğun denetlenmesine yardımcı olmak için, örneğin, yasaktan kaçınma veya diğer ihlalleri belirlemek için IP adresinizin diğer bilinen adreslerle karşılaştırılması.</li> + <li>Verdiğiniz e-posta adresi, size bilgi, içeriğinizle etkileşimde bulunan diğer kişilerle ilgili bildirimler veya mesaj göndermek, sorgulara ve/veya diğer istek ve sorulara cevap vermek için kullanılabilir.</li> + </ul> + + <hr class="spacer" /> + + <h3 id="protect">Bilgilerinizi nasıl koruyoruz?</h3> + + <p>Kişisel bilgilerinizi girerken, gönderirken veya onlara erişirken kişisel bilgilerinizin güvenliğini sağlamak için çeşitli güvenlik önlemleri uyguluyoruz. Diğer şeylerin yanı sıra, tarayıcı oturumunuz ve uygulamalarınız ile API arasındaki trafik SSL ile güvence altına alınır ve şifreniz sağlam bir tek yönlü bir algoritma kullanılarak şifrelenir. Hesabınıza daha güvenli bir şekilde erişebilmek için iki adımlı kimlik doğrulamasını etkinleştirebilirsiniz.</p> + + <hr class="spacer" /> + + <h3 id="data-retention">Veri saklama politikamız nedir?</h3> + + <p>Şunları yapmak için iyi niyetli bir şekilde çalışacağız:</p> + + <ul> + <li>Bu sunucuya yapılan tüm isteklerin IP adresini içeren sunucu loglarını, bu tür logların şimdiye kadar saklandığı gibi, 90 günden fazla saklamayacağız.</li> + <li>Kayıtlı kullanıcılarla ilişkili IP adreslerini en fazla 12 ay boyunca saklayacağız.</li> + </ul> + + <p>Gönderileriniz, medya ekleriniz, profil fotoğrafınız ve başlık resminiz dahil, içeriğimizin arşivini talep edebilir ve indirebilirsiniz.</p> + + <p>Hesabınızı istediğiniz zaman geri alınamaz şekilde silebilirsiniz.</p> + + <hr class="spacer"/> + + <h3 id="cookies">Çerez kullanıyor muyuz?</h3> + + <p>Evet. Çerezler, bir sitenin veya servis sağlayıcısının Web tarayıcınız üzerinden bilgisayarınızın sabit diskine aktardığı küçük dosyalardır (eğer izin verirseniz). Bu çerezler sitenin tarayıcınızı tanımasını ve kayıtlı bir hesabınız varsa, kayıtlı hesabınızla ilişkilendirmesini sağlar.</p> + + <p>Sonraki ziyaretlerde tercihlerinizi anlamak ve kaydetmek için çerezleri kullanıyoruz.</p> + + <hr class="spacer" /> + + <h3 id="disclose">Herhangi bir bilgiyi dış taraflara açıklıyor muyuz?</h3> + + <p>Kişisel olarak tanımlanabilir bilgilerinizi dış taraflara satmıyor, takas etmiyor veya devretmiyoruz. Bu, taraflarımız bu bilgileri gizli tutmayı kabul ettiği sürece sitemizi işletmemize, işimizi yürütmemize veya size hizmet etmemize yardımcı olan güvenilir üçüncü tarafları içermemektedir. Ayrıca, yayınlanmanın yasalara uymayı, site politikalarımızı yürürlüğe koymayı ya da kendimizin ya da diğerlerinin haklarını, mülklerini ya da güvenliğini korumamızı sağladığına inandığımızda bilgilerinizi açıklayabiliriz.</p> + + <p>Herkese açık içeriğiniz ağdaki diğer sunucular tarafından indirilebilir. Bu takipçiler veya alıcılar bundan farklı bir sunucuda bulundukları sürece, herkese açık ve takipçilere özel gönderileriniz, takipçilerinizin bulunduğu sunuculara, ve doğrudan mesajlar, alıcıların sunucularına iletilir.</p> + + <p>Hesabınızı kullanması için bir uygulamayı yetkilendirdiğinizde, onayladığınız izinlerin kapsamına bağlı olarak, herkese açık profil bilgilerinize, takip ettiklerinizin listesine, takipçilerinize, listelerinize, tüm gönderilerinize ve favorilerinize erişebilir. Uygulamalar e-posta adresinize veya parolanıza asla erişemez.</p> + + <hr class="spacer" /> + + <h3 id="children">Sitenin çocuklar tarafından kullanımı</h3> + + <p>Bu sunucu AB’de veya AEA’da ise: Site, ürün ve hizmetlerimizin tamamı en az 16 yaşında olan kişilere yöneliktir. Eğer 16 yaşın altındaysanız, GDPR yükümlülükleri gereği (<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) bu siteyi kullanmayın.</p> + + <p>Bu sunucu ABD’de ise: Site, ürün ve hizmetlerimizin tamamı en az 13 yaşında olan kişilere yöneliktir. Eğer 13 yaşın altındaysanız, COPPA yükümlülükleri gereği (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) bu siteyi kullanmayın.</p> + + <p>Bu sunucu başka bir ülkede ise yasal gereklilikler farklı olabilir.</p> + + <hr class="spacer" /> + + <h3 id="changes">Gizlilik Politikamızdaki Değişiklikler</h3> + + <p>Gizlilik politikamızı değiştirmeye karar verirsek, bu değişiklikleri bu sayfada yayınlayacağız.</p> + + <p>Bu belge CC-BY-SA altında lisanslanmıştır. En son 7 Mart 2018 tarihinde güncellenmiştir.</p> + + <p><a href="https://github.com/discourse/discourse">Discourse gizlilik politikasından uyarlanmıştır</a>.</p> + title: "%{instance} Hizmet Şartları ve Gizlilik Politikası" + themes: + contrast: Mastodon (Yüksek karşıtlık) + default: Mastodon (Karanlık) + mastodon-light: Mastodon (Açık) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: Onaylamak için kimlik doğrulama uygulamanızın oluşturduğu kodu giriniz description_html: Eğer <strong>iki-faktörlü kimlik doğrulamayı</strong> aktif ederseniz, giriş yaparken sizin için giriş kodu üreten telefonunuza ihtiyaç duyacaksınız. disable: Devre dışı bırak enable: Aktifleştir + enabled: İki adımlı kimlik doğrulama etkin enabled_success: İki-faktörlü kimlik doğrulama başarıyla aktif edildi generate_recovery_codes: Kurtarma Kodlarını Oluştur instructions_html: <strong>Bu QR kodunu, telefonunuzdaki <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> veya benzer bir TOTP uygulamasıyla taratınız</strong>. Bundan sonra giriş yaparken uygulamanın ürettiği kodu kullanarak giriş yapacaksınız. lost_recovery_codes: Kurtarma kodları telefonunuzu kaybettiğiniz durumlarda hesabınıza erişim yapabilmenize olanak tanır. Eğer kurtarma kodlarınızı kaybettiyseniz burada tekrar oluşturabilirsiniz. Eski kurtarma kodlarınız geçersiz hale gelecektir. manual_instructions: 'Eğer QR kodunu taratamıyorsanız ve elle giriş yapmanız gerekiyorsa buradaki gizli düz metni girebilirsiniz:' + recovery_codes: Kurtarma kodlarını yedekle recovery_codes_regenerated: Kurtarma kodları başarıyla oluşturuldu recovery_instructions_html: 'Eğer telefonunuza erişiminizi kaybederseniz, aşağıdaki kurtarma kodlarından birini kullanarak hesabınıza giriş yapabilirsiniz. Kurtarma kodlarınızı güvenli halde tutunuz. Örneğin: kodların çıktısını alıp diğer önemli belgeleriniz ile birlikte saklayabilirsiniz.' setup: Kuruluma başla wrong_code: Girdiğiniz kod geçersiz! Telefonunuzun saati geri/ileri kalmış olabilir. + user_mailer: + backup_ready: + explanation: Mastodon hesabınızın tam bir yedeğini istediniz. Şimdi indirmeye hazır! + subject: Arşiviniz indirilmeye hazır + title: Arşiv paketlemesi + warning: + explanation: + disable: Hesabınız donmuşken, hesap verileriniz bozulmadan kalır, ancak kilidi açılıncaya kadar herhangi bir işlem gerçekleştiremezsiniz. + silence: Hesabınız sınırlı iken, yalnızca sizi takip eden kişiler bu sunucuda tootlarınızı görecek ve çeşitli halka açık listelerin dışında tutulabilirsiniz. Ancak, diğerleri hala sizi manuel olarak takip edebilir. + suspend: Hesabınız askıya alındı ve tüm tootlarınız ve yüklediğiniz medya dosyalarınız bu sunucudan ve takipçilerinizin bulunduğu sunuculardan geri alınamaz şekilde kaldırıldı. + get_in_touch: "%{instance} çalışanlarıyla iletişim kurmak için bu e-postayı yanıtlayabilirsiniz." + review_server_policies: Sunucu politikalarını inceleyin + statuses: 'Özellikle, şunun için:' + subject: + disable: "%{acct} hesabınız donduruldu" + none: "%{acct} için uyarı" + silence: "%{acct} hesabınız sınırlandırıldı" + suspend: "%{acct} hesabınız askıya alındı" + title: + disable: Hesap donduruldu + none: Uyarı + silence: Hesap sınırlandırıldı + suspend: Hesap askıya alındı + welcome: + edit_profile_action: Profil ayarla + edit_profile_step: Bir avatar veya başlık yükleyerek, ekran adınızı değiştirerek ve daha fazlasını yaparak profilinizi kişiselleştirebilirsiniz. Yeni takipçileri sizi takip etmelerine izin verilmeden önce incelemek isterseniz, hesabınızı kilitleyebilirsiniz. + explanation: İşte sana başlangıç için birkaç ipucu + final_action: Gönderi yazmaya başlayın + final_step: 'Gönderi yazmaya başlayın! Takipçiler olmadan bile, herkese açık mesajlarınız başkaları tarafından görülebilir, örneğin yerel zaman çizelgesinde ve etiketlerde. Kendinizi #introductions etiketinde tanıtmak isteyebilirsiniz.' + full_handle: Tanıtıcınız + full_handle_hint: Arkadaşlarınıza, size başka bir sunucudan mesaj atabilmeleri veya sizi takip edebilmeleri için söyleyeceğiniz şey budur. + review_preferences_action: Tercihleri değiştirin + review_preferences_step: Hangi e-postaları almak veya gönderilerinizin varsayılan olarak hangi gizlilik seviyesinde olmasını istediğiniz gibi tercihlerinizi ayarladığınızdan emin olun. Hareket hastalığınız yoksa, GIF otomatik oynatmayı etkinleştirmeyi seçebilirsiniz. + subject: Mastodon'a hoşgeldiniz + tip_federated_timeline: Federe zaman tüneli, Mastodon ağının genel bir görüntüsüdür. Ancak yalnızca komşularınızın abone olduğu kişileri içerir, bu yüzden tamamı değildir. + tip_following: Sunucu yönetici(ler)ini varsayılan olarak takip edersiniz. Daha ilginç insanlar bulmak için yerel ve federe zaman çizelgelerini kontrol edin. + tip_local_timeline: Yerel zaman çizelgesi, %{instance} üzerindeki kişilerin genel bir görüntüsüdür. Bunlar senin en yakın komşularındır! + tip_mobile_webapp: Mobil tarayıcınız size ana ekranınıza Mastodon eklemenizi önerirse, push bildirimleri alabilirsiniz. Birçok yönden yerli bir uygulama gibi davranır! + tips: İpuçları + title: Gemiye hoşgeldin, %{name}! users: + follow_limit_reached: "%{limit} kişiden daha fazlasını takip edemezsiniz" invalid_email: E-posta adresiniz geçersiz invalid_otp_token: İki-faktörlü kodunuz geçersiz + otp_lost_help_html: Her ikisine de erişiminizi kaybettiyseniz, %{email} ile irtibata geçebilirsiniz + seamless_external_login: Harici bir servis aracılığıyla oturum açtınız, bu nedenle parola ve e-posta ayarları mevcut değildir. + signed_in_as: 'Giriş yapan:' + verification: + explanation_html: '<strong>Profil meta verisindeki bağlantıların sahibi olarak kendinizi doğrulayabilirsiniz</strong>. Bunun için, link verilen web sitesi Mastodon profilinize geri bir link içermelidir. Geri link bir <code>rel="me"</code> özelliğine sahip <strong>olmalıdır</strong>. Bağlantının metin içeriği önemli değildir. İşte bir örnek:' + verification: Doğrulama diff --git a/config/locales/uk.yml b/config/locales/uk.yml index e027b6bae..7d8d83e2d 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1,63 +1,114 @@ --- uk: about: - about_hashtag_html: Немає публічних постів з хештегом<strong>#%{hashtag}</strong>. Ви можете You can interact with them if you have an account anywhere in the fediverse. - about_mastodon_html: Mastodon - це <em>вільна</em> соціальна мережа з <em>відкритим вихідним кодом</em>. Вона є <em>децентралізованою</em> альтернативою комерційним платформам, що дозволяє уникнути ризиків монополізації вашого спілкування однією компанією. Виберіть сервер, якому ви довіряєте — що б ви не вибрали, Ви зможете спілкуватись з усіма іншими. Будь-який користувач може запустити власну інстанцію Mastodon та без проблем брати участь в <em>соціальній мережі</em>. + about_hashtag_html: Це публічні дмухи, позначені символом <strong>#%{hashtag}</strong>. Ви можете взаємодіяти з ними, якщо маєте обліковий запис будь-де у федіверсі. + about_mastodon_html: Mastodon — це соціальна мережа, заснована на відкритих веб-протоколах та вільному програмному забезпеченні з відкритим кодом. Вона є децентралізованою на кшталт електронної пошти. about_this: Про цю інстанцію + active_count_after: активних + active_footnote: Активні користувачі місяця (MAU) administered_by: 'Адміністратор:' + api: API + apps: Мобільні додатки + apps_platforms: Користуйтесь Mastodon на iOS, Android та інших платформах + browse_directory: Переглядайте каталог профілів та фільтруйте за інтересами + browse_local_posts: Переглядайте потік публічних постів з цього сервера + browse_public_posts: Переглядайте потік публічних постів на Mastodon contact: Зв'язатися contact_missing: Не зазначено contact_unavailable: Недоступно + discover_users: Знайдіть цікавих користувачів documentation: Документація - extended_description_html: | - <h3>Гарне місце для правил</h3> - <p>Детальний опис ще не налаштований.</p> - generic_description: "%{domain} є одним сервером у мережі" + federation_hint_html: З обліковим записом на %{instance} ви зможете слідкувати за людьми на будь-якому сервері Mastodon та поза ним. + get_apps: Спробуйте мобільний додаток hosted_on: Mastodon розміщено на %{domain} + instance_actor_flash: 'Цей обліковий запис є віртуальною особою, яка використовується для представлення самого сервера, а не певного користувача. Він використовується для потреб федерації і не повинен бути заблокований, якщо тільки ви не хочете заблокувати весь сервер, у цьому випадку ви повинні скористатися блокуванням домену. + +' learn_more: Дізнатися більше privacy_policy: Політика приватності + see_whats_happening: Погляньте, що відбувається + server_stats: 'Статистика серверу:' source_code: Вихідний код + status_count_after: + few: статуса + many: статусів + one: статус + other: статуси status_count_before: Опубліковано + tagline: Слідкуйте за друзями та знаходьте нових terms: Правила використання + unavailable_content: Недоступний вміст + unavailable_content_description: + domain: Сервер + reason: Причина + user_count_after: + few: користувача + many: користувачів + one: користувач + other: користувачі user_count_before: Тут живе what_is_mastodon: Що таке Mastodon? accounts: + choices_html: 'Вподобання %{name}:' follow: Підписатися + followers: + few: Підписника + many: Підписників + one: Підписник + other: Підписників following: Підписаний(-а) joined: Приєднався %{date} + last_active: остання активність + link_verified_on: Права власності на це посилання були перевірені %{date} media: Медіа - moved_html: "%{name} переїхав на %{new_profile_link}:" + moved_html: "%{name} переїхав до %{new_profile_link}:" network_hidden: Ця інформація недоступна + never_active: Ніколи nothing_here: Тут нічого немає! people_followed_by: Люди, на яких підписаний(-а) %{name} people_who_follow: Підписники %{name} - posts_with_replies: Пости і відповіді + pin_errors: + following: Ви повинні бути підписаним на людину, яку бажаєте схвалити + posts: + few: Дмуха + many: Дмухів + one: Дмух + other: Дмухів + posts_tab_heading: Дмухи + posts_with_replies: Дмухи та відповіді reserved_username: Це ім'я користувача зарезервоване roles: admin: Адміністратор bot: Бот moderator: Мод + unavailable: Профіль недоступний unfollow: Відписатися admin: + account_actions: + action: Виконати дію + title: Здійснити модераційну дію над %{acct} account_moderation_notes: - create: Залишити примітки - created_msg: Примітку модератора успішно створено! + create: Залишити нотатку + created_msg: Нотатку модератора успішно створено! delete: Видалити - destroyed_msg: Примітку модератора успішно видалено! + destroyed_msg: Нотатку модератора успішно видалено! accounts: + approve: Схвалити + approve_all: Схвалити всіх are_you_sure: Ви впевнені? avatar: Аватар by_domain: Домен change_email: - changed_msg: Поштова адреса аккаунту успішно змінена! - current_email: Поточна поштова адреса - label: Змінити поштову адресу - new_email: Новий e-mail - submit: Змінити поштову адресу - title: Змінити поштову адресу для %{username} + changed_msg: Адресу електронної пошти облікового запису успішно змінено! + current_email: Поточна адреса електронної пошти + label: Змінити адресу електронної пошти + new_email: Нова адреса електронної пошти + submit: Змінити адресу електронної пошти + title: Змінити адресу електронної пошти для %{username} confirm: Зберегти confirmed: Збережено confirming: Зберігається + deleted: Видалено demote: Усунути disable: Вимкнути disable_two_factor_authentication: Вимкнути двофакторну авторизацію @@ -65,14 +116,19 @@ uk: display_name: Відображуване ім'я domain: Домен edit: Змінити - email_status: Статус e-mail + email: Електронна пошта + email_status: Статус електронної пошти enable: Увімкнути enabled: Увімкнено - feed_url: URL фіду + feed_url: URL-адреса каналу followers: Підписники followers_url: URL підписників follows: Підписки - inbox_url: Вхідний URL + header: Заголовок + inbox_url: URL вхідних повідомлень + invited_by: 'Запросив:' + ip: IP + joined: Приєднався location: all: Усі local: Локальні @@ -82,29 +138,37 @@ uk: media_attachments: Мультимедійні вкладення memorialize: Зробити пам'ятником moderation: + active: Активний all: Усі + pending: Очікують silenced: Заглушені - suspended: Заблоковані + suspended: Призупинені title: Модерація - moderation_notes: Примітки модераторів + moderation_notes: Нотатки модераторів most_recent_activity: Остання активність most_recent_ip: Останній IP + no_account_selected: Жоден обліковий запис не було змінено, оскільки жоден не було вибрано + no_limits_imposed: Жодних обмежень не накладено not_subscribed: Не підписані - outbox_url: Вихідний URL - perform_full_suspension: Повне блокування + outbox_url: URL вихідних повідомлень + pending: Відгук в очікуванні + perform_full_suspension: Призупинити profile_url: URL профілю promote: Просунути protocol: Протокол public: Публічний push_subscription_expires: Підписка PuSH спливає redownload: Оновити аватар + reject: Відхилити + reject_all: Відхилити усе remove_avatar: Видалити аватар + remove_header: Видалити заголовок resend_confirmation: already_confirmed: Цей користувач уже підтверджений - send: Надіслати підтвердження ще раз - success: Повідомлення з підтвердженням успішно надіслано! + send: Надіслати електронний лист-підтвердження ще раз + success: Електронний лист-підтвердження успішно надіслано! reset: Скинути - reset_password: Зкинути пароль + reset_password: Скинути пароль resubscribe: Перепідписатися role: Дозволи roles: @@ -112,30 +176,38 @@ uk: moderator: Модератор staff: Персонал user: Користувач + salmon_url: Salmon URL search: Пошук shared_inbox_url: URL спільного вхідного кошика show: - created_reports: Скарги створені цим аккаунтом + created_reports: Скарги, створені цим аккаунтом targeted_reports: Скарги щодо цього аккаунту silence: Глушення + silenced: Заглушені statuses: Статуси subscribe: Підписатися - title: Акаунти - unconfirmed_email: Непідтверджений e-mail + suspended: Призупинені + time_in_queue: Очікує в черзі %{time} + title: Облікові записи + unconfirmed_email: Непідтверджена адреса електронної пошти undo_silenced: Зняти глушення - undo_suspension: Зняти блокування + undo_suspension: Зняти призупинення unsubscribe: Відписатися username: Ім'я користувача - web: WWW + warn: Попередження + web: Веб + whitelisted: У білому списку action_logs: actions: assigned_to_self_report: "%{name} призначив(-ла) скаргу %{target} на себе" change_email_user: "%{name} змінив(-ла) поштову адресу користувача %{target}" confirm_user: "%{name} підтвердив(-ла) статус поштової адреси користувача %{target}" + create_account_warning: "%{name} надіслав попередження до %{target}" create_custom_emoji: "%{name} вивантажив(-ла) нове емодзі %{target}" create_domain_block: "%{name} заблокував(-ла) домен %{target}" create_email_domain_block: "%{name} додав(-ла) поштовий домен %{target} до чорного списку" demote_user: "%{name} понизив(-ла) %{target}" + destroy_custom_emoji: "%{name} знищив(-ла) емодзі %{target}" destroy_domain_block: "%{name} розблокував(-ла) домен %{target}" destroy_email_domain_block: "%{name} додав(-ла) поштовий домен %{target} до білого списку" destroy_status: "%{name} видалив(-ла) статус користувача %{target}" @@ -144,92 +216,127 @@ uk: disable_user: "%{name} заборонив(-ла) авторизацію користувачу %{target}" enable_custom_emoji: "%{name} увімкнув(-ла) емодзі %{target}" enable_user: "%{name} увімкнув(-ла) авторизацію користувачу %{target}" - memorialize_account: "%{name} перетворив(-ла) сторінку %{target} у пам'ятник" + memorialize_account: "%{name} перетворив(-ла) обліковий запис %{target} на сторінку пам'яті" promote_user: "%{name} підвищив(-ла) користувача %{target}" remove_avatar_user: "%{name} прибрав(-ла) аватар користувача %{target}" reopen_report: "%{name} перевідкрив(-ла) скаргу %{target}" reset_password_user: "%{name} скинув(-ла) пароль користувача %{target}" resolve_report: "%{name} розв'язав(-ла) скаргу %{target}" - silence_account: "%{name} заглушив(-ла) аккаунт %{target}" - suspend_account: "%{name} заблокував аккаунт користувача %{target}" + silence_account: "%{name} заглушив(-ла) обліковий запис %{target}" + suspend_account: "%{name} заморозив обліковий запис користувача %{target}" unassigned_report: "%{name} зняв(-ла) призначення скарги %{target}" - unsilence_account: "%{name} розглушив(-ла) аккаунт %{target}" - unsuspend_account: "%{name} розблокував аккаунт користувача %{target}" + unsilence_account: "%{name} розглушив(-ла) обліковий запис %{target}" + unsuspend_account: "%{name} розморозив обліковий запис користувача %{target}" update_custom_emoji: "%{name} оновив(-ла) емодзі %{target}" update_status: "%{name} змінив(-ла) статус користуача %{target}" + deleted_status: "(видалений статус)" title: Журнал подій custom_emojis: + assign_category: Призначити категорію by_domain: Домен copied_msg: Локальна копія емодзі успішно створена copy: Копіювати copy_failed_msg: Не вийшло створити локальну копію емодзі + create_new_category: Створити нову категорію created_msg: Емодзі успішно створене! delete: Видалити destroyed_msg: Емодзі усіпішно видалене! disable: Вимкнути + disabled: Вимкнено disabled_msg: Емодзі успішно вимкнено emoji: Емодзі enable: Увімкнути + enabled: Увімкнено enabled_msg: Емодзі успішно увімкнене image_hint: PNG розміром до 50 КБ + list: Список listed: У списку new: title: Додати новий емодзі overwrite: Переписати shortcode: Шорткод - shortcode_hint: Мінімум два символи, тільки цифрові й латинські символи або нижні підкреслення + shortcode_hint: Мінімум два символи, тільки цифрові й латинські символи або підкреслення title: Особливі емодзі + uncategorized: Без категорії unlisted: Не у списку update_failed_msg: Не вийшло оновити емозді updated_msg: Емодзі успішно оновлене! upload: Вивантажити dashboard: + authorized_fetch_mode: Безпечний режим + backlog: відкладені завдання config: Налаштування - feature_deletions: Видалення аккаунтів + feature_deletions: Видалення облікових записів feature_invites: Посилання-запрошення + feature_profile_directory: Каталог профілів feature_registrations: Реєстрації + feature_relay: Ретранслятор дмухів між серверами + feature_spam_check: Анти-спам + feature_timeline_preview: Передпоказ стрічки features: Можливості hidden_service: Федерація з прихованими сервісами open_reports: відкриті скарги + pending_tags: хештеги, що очікують на перегляд + pending_users: користувачі, що очікують на перегляд recent_users: Останні користувачі search: Повнотекстовий пошук single_user_mode: Режим одного користувача software: Програмне забезпечення space: Використання дискового простору - title: Дашборд + title: Приборна панель total_users: користувачів загалом trends: Тренди week_interactions: дій за цей тиждень week_users_active: активно протягом тижня week_users_new: користувачів цього тижня + whitelist_mode: Режим білого списку + domain_allows: + add_new: Додати домен до білого списку + created_msg: Домен було успішно додано до білого списку + destroyed_msg: Домен було видалено з білого списку + undo: Видалити з білого списку domain_blocks: add_new: Додати нове - created_msg: Блокування домену оброблюється + created_msg: Блокування домену обробляється destroyed_msg: Блокування домену знято domain: Домен + edit: Редагувати блокування доменів + existing_domain_block_html: Ви вже наклали більш суворі обмеження на %{name}, вам треба спочатку <a href="%{unblock_url}">розблокувати його</a>. new: create: Створити блокування - hint: Блокування домену не завадить створенню нових акаунтів у базі даних, але ретроактивно та автоматично застосує вказані методи модерації для цих акаунтів. + hint: Блокування домену не завадить створенню нових облікових записів у базі даних, але ретроактивно та автоматично застосує до них конкретні методи модерації. severity: - desc_html: "<strong>Глушення</strong> зробить статуси акаунту невидимими для всіх, окрім їхніх підписників. <strong>Блокування</strong> видалить увесь контент акаунту, включаючи мультимедійні вкладення та дані профілю." + desc_html: "<strong>Глушення</strong> зробить пости облікового запису невидимими для всіх, окрім його підписників. <strong>Заморожування</strong> видалить увесь контент, медіа та дані профілю облікового запису. Якщо ви хочете лише заборонити медіафайли, оберіть <strong>Нічого</strong>." noop: Нічого silence: Глушення suspend: Блокування title: Нове блокування домену + private_comment: Приватний коментар + private_comment_hint: Прокоментуйте обмеження для цього домену, а модератори прочитають. + public_comment: Публічний коментар + public_comment_hint: Прокоментуйте обмеження для цього домену, це зможуть прочитати всі, якщо така опція ввімкнена. reject_media: Заборонити медіаконтент reject_media_hint: Видаляє медіаконтент, збережений локально, і забороняє його завантаження у майбутньому. Не має значення у випадку блокування + reject_reports: Відхилити скарги + reject_reports_hint: Ігнорувати всі скарги з цього домену. Не має значення у випадку блокування + rejecting_media: відхилення медіафайлів + rejecting_reports: відхилення скарг + severity: + silence: заглушені + suspend: призупинені show: affected_accounts: - few: Впливає на %{count} акаунти у базі даних - many: Впливає на %{count} акаунтів у базі даних - one: Впливає на один акаунт у базі даних - other: Впливає на %{count} акаунтів у базі даних + few: Впливає на %{count} облікових записи у базі даних + many: Впливає на %{count} облікових записів у базі даних + one: Впливає на один обліковий запис у базі даних + other: Впливає на %{count} облікових записів у базі даних retroactive: - silence: Зняти глушення з усіх існуючих акаунтів цього домену - suspend: Зняти блокування з усіх існуючих акаунтів цього домену + silence: Зняти глушення з усіх існуючих заглушених облікових записів цього домену + suspend: Розморозити існуючі заморожені облікові записи з цього домену title: Зняти блокування з домена %{domain} undo: Відмінити undo: Відмінити + view: Переглянути заблоковані домени email_domain_blocks: add_new: Додати created_msg: Успішно додано поштовий домен до чорного списку @@ -238,25 +345,63 @@ uk: domain: Домен new: create: Додати домен - title: Нове доменне блокування домену email + title: Нове блокування поштового домену title: Чорний список поштових доменів + followers: + back_to_account: Повернутися до Облікового запису + title: Підписники %{acct} instances: + by_domain: Домен + delivery_available: Доставлення доступне + known_accounts: + few: "%{count} відомих облікових записів" + many: "%{count} відомих облікових записів" + one: "%{count} відомий обліковий запис" + other: "%{count} відомих облікових записів" + moderation: + all: Усі + limited: Обмежені + title: Модерація + private_comment: Приватний коментар + public_comment: Публічний коментар title: Відомі інстанції + total_blocked_by_us: Заблокованих нами + total_followed_by_them: Вони стежать за + total_followed_by_us: Ми стежимо за + total_reported: Звітів про них + total_storage: Мультимедійні вкладення invites: + deactivate_all: Деактивувати всі filter: all: Все available: Доступно expired: Просрочено title: Фільтр title: Запрошення + pending_accounts: + title: Облікові записи у черзі (%{count}) relays: + add_new: Додати новий ретранслятор + delete: Видалити + description_html: "<strong>Ретлянслятор дмухів</strong> (federation relay) — це проміжний сервер, що обмінюється великими обсягами публічних дмухів між серверами, які цього хочуть. Він може допомогти маленьким та середнім серверам отримувати вміст з усього <strong>федесвіту</strong> (fediverse). Без нього локальним користувачам довелося б вручну підписуватися на людей з віддалених серверів." + disable: Вимкнути + disabled: Вимкнено + enable: Увімкнути + enable_hint: Коли ретрансляцію увімкнено, ваш сервер буде підписаний на усі публічні дмухи з цього ретранслятора, та почне посилати до нього свої публічні дмухи. + enabled: Увімкнено + inbox_url: URL ретранслятора + pending: Очікуємо на підтвердження ретранслятором + save_and_enable: Зберегти та увімкнути + setup: Налаштування з'єднання з ретранслятором + signatures_not_enabled: Ретранслятори не будуть добре працювати поки ввімкнений безопасний режим або режим білого списка status: Статус + title: Ретранслятори report_notes: created_msg: Скарга успішно створена! destroyed_msg: Скарга успішно видалена! reports: account: - note: примітка + note: нотатка report: скарга action_taken_by: Дія виконана are_you_sure: Ви впевнені? @@ -275,7 +420,7 @@ uk: placeholder: Опишіть, які дії були виконані, або інші зміни, що стосуються справи... reopen: Перевідкрити скаргу report: 'Скарга #%{id}' - reported_account: Акаунт порушника + reported_account: Обліковий запис порушника reported_by: Відправник скарги resolved: Вирішено resolved_msg: Скаргу успішно вирішено! @@ -289,32 +434,55 @@ uk: desc_html: Кількість локальних постів, активних та нових користувачів у тижневих розрізах title: Публікація агрегованої статистики про активність користувачів bootstrap_timeline_accounts: - title: Підписки за замовчуванням для нових користувачів + desc_html: Розділяйте імена користувачів комами. Працюватимуть тільки локальні і розблоковані облікові записи. Якщо порожньо, то типово це всі локальні адміністратори. + title: Типові підписки для нових користувачів contact_information: email: Введіть публічний email username: Введіть ім'я користувача + custom_css: + desc_html: Відобразити вигляд, коли CSS завантажено для кожної сторінки + title: Користувацький CSS + default_noindex: + desc_html: Впливає на усіх користувачів, які не змінили це настроювання самостійно + domain_blocks: + all: Всi + disabled: Нікого + title: Показати, які домени заблоковані + domain_blocks_rationale: + title: Обґрунтування hero: - desc_html: Відображається на головній сторінці. Рекомендована як мінімум 600x100 пікселів. Якщо не вказано, буде використано передпоказ інстанції + desc_html: Відображається на головній сторінці. Рекомендовано як мінімум 600x100 пікселів. Якщо не вказано, буде використано передпоказ інстанції title: Банер інстанції + mascot: + desc_html: Відображається на багатьох сторінках. Щонайменше 293×205 пікселів рекомендовано. Якщо не вказано, буде використано талісман інстанції + title: Талісман peers_api_enabled: desc_html: Доменні ім'я, помічені цією інстанцією федисвіту title: Опублікувати список знайдених інстанцій preview_sensitive_media: - desc_html: Передпоказ посилання на інших сайтах буде відображати мініатюру навіть якщо медіа відмічене як вразливе - title: Показувати вразливе медія у перепоказі OpenGraph + desc_html: Передпоказ посилання на інших сайтах буде відображати мініатюру навіть якщо медіа відмічене як дражливе + title: Показувати дражливе медіа у передпоказах OpenGraph + profile_directory: + desc_html: Дозволити користувачам бути видимими + title: Увімкнути каталог профілів registrations: closed_message: desc_html: Відображається на титульній сторінці, коли реєстрація закрита <br>Можна використовувати HTML-теги title: Повідомлення про закриту реєстрацію deletion: - desc_html: Дозволити будь-кому видаляти свій аккаунт - title: Дозволити видалення аккаунтів + desc_html: Дозволити будь-кому видаляти свій обліковий запис + title: Видалення відкритого облікового запису min_invite_role: disabled: Ніхто title: Дозволити запрошення від + registrations_mode: + modes: + approved: Для входу потрібне схвалення + none: Ніхто не може увійти + open: Будь-хто може увійти show_known_fediverse_at_about_page: - desc_html: Коли увімкнено, будуть показані пости з усього відомого федисвіту у передпоказі. Інакше будуть показані локальні пости. - title: Показувати доступний федисвіт у передпоказі фіду + desc_html: Коли увімкнено, будуть показані пости з усього відомого федисвіту у передпоказі. Інакше будуть показані лише локальні дмухи. + title: Показувати доступний федисвіт у передпоказі стрічки show_staff_badge: desc_html: Відмічати персонал на сторінці користувачів title: Показувати персонал @@ -324,44 +492,90 @@ uk: site_description_extended: desc_html: Відображається на сторінці додаткової информації<br>Можна використовувати HTML-теги title: Розширений опис сайту + site_short_description: + title: Короткий опис сервера site_terms: desc_html: |- Ви можене написати власну політику приватності, умови використанні та інші законні штуки<br> Можете використовувати HTML теги title: Особливі умови використання site_title: Назва сайту + spam_check_enabled: + desc_html: Mastodon може автоматично глушити та автоматично звітувати про облікові записи, які надсилають повторні небажані повідомлення. Можливі хибно-позитивні спрацьовування. + title: Автоматизація антиспаму thumbnail: desc_html: Використовується для передпоказів через OpenGraph та API. Бажано розміром 1200х640 пікселів title: Мініатюра інстанції timeline_preview: - desc_html: Показувати публічний фід на головній сторінці + desc_html: Показувати публічну стрічку на головній сторінці title: Передпоказ фіду title: Налаштування сайту + trends: + desc_html: Відображати розглянуті хештеґи, які популярні зараз + title: Популярні хештеги statuses: - back_to_account: Назад на сторінку профілю + back_to_account: Назад до сторінки облікового запису batch: delete: Видалити - nsfw_off: Відмітити сприйнятливим - nsfw_on: Відмітити несприйнятливим + nsfw_off: Відмітити прийнятним + nsfw_on: Відмітити неприйнятним + deleted: Видалено failed_to_execute: Не вийшло media: title: Медіа no_media: Немає медіа - title: Статуси аккаунтів + no_status_selected: Жодного статуса не було змінено, оскільки жодного не було вибрано + title: Статуси облікових записів with_media: З медіа - subscriptions: - confirmed: Підтверджено - expires_in: Спливає через - last_delivery: Остання доставка - topic: Тема + tags: + accounts_today: Унікальних використань за сьогодні + accounts_week: Унікальних використань за тиждень + breakdown: Аналіз використання за сьогодні за джерелом + context: Контекст + directory: У каталозі + in_directory: "%{count} у каталозі" + last_active: За активністю + most_popular: За популярністю + most_recent: За часом створення + name: Хештеґ + review: Переглянути статус + reviewed: Переглянуто + title: Хештеґи + trending_right_now: Популярні саме зараз + unique_uses_today: "%{count} постять сьогодні" + unreviewed: Не переглянуто + updated_msg: Параметри хештеґів успішно оновлені title: Адміністрування + warning_presets: + add_new: Додати новий + delete: Видалити + edit: Редагувати + edit_preset: Редагувати шаблон попередження + title: Управління шаблонами попереджень admin_mailer: + new_pending_account: + body: Деталі нового облікового запису наведено нижче. Ви можете схвалити або відхилити цю заяву. + subject: Новий обліковий запис надіслано на розгляд на %{instance} (%{username}) new_report: - body: "%{reporter} поскаржився(-лася) %{target}" - body_remote: Хтось з домену %{domain} поскаржився(-лася) %{target} + body: "%{reporter} поскаржився(-лася) на %{target}" + body_remote: Хтось з домену %{domain} поскаржився(-лася) на %{target} subject: Нова скарга до %{instance} (#%{id}) + new_trending_tag: + subject: Новий хештеґ надіслано на розгляд до %{instance} (#%{name}) + aliases: + add_new: Створити псевдонім + created_msg: Новий псевдонім успішно створено. Тепер ви можете починати переміщення зі старого облікового запису. + deleted_msg: Псевдонім успішно видалено. Переміщення з того облікового запису до цього більше не можливе. + appearance: + advanced_web_interface: Розширений web-інтерфейс + advanced_web_interface_hint: 'Розширений веб-інтерфейс дає змогу бачити багато стовпчиків одночасно: основна сторінка, сповіщення, глобальна стрічка, будь-які списки та хештеґи. Потребує широкого екрана.' + animations_and_accessibility: Анімація та доступність + confirmation_dialogs: Діалоги підтвердження + discovery: Виявлення + sensitive_content: Дражливий вміст application_mailer: notification_preferences: Змінити налаштування e-mail + salutation: "%{name}," settings: 'Змінити налаштування e-mail: %{link}' view: 'Перегляд:' view_profile: Показати профіль @@ -375,26 +589,47 @@ uk: warning: Будьте дуже обережні з цими даними. Ніколи не діліться ними ні з ким! your_token: Ваш токен доступу auth: + apply_for_account: Запитати запрошення change_password: Пароль - confirm_email: Підтвердьте e-mail адресу - delete_account: Видалити аккаунт - delete_account_html: Якщо ви хочете видалити аккаунт, ви можете <a href="%{path}">перейти сюди</a>. Вас попросять підтвердити дію. + checkbox_agreement_html: Я погоджуюсь з <a href="%{rules_path}" target="_blank">правилами сервера</a> та <a href="%{terms_path}" target="_blank">умовами використання</a> + checkbox_agreement_without_rules_html: Я погоджуюся з <a href="%{terms_path}" target="_blank">умовами використання</a> + delete_account: Видалити обліковий запис + delete_account_html: Якщо ви хочете видалити свій обліковий запис, ви можете <a href="%{path}">перейти сюди</a>. Вас попросять підтвердити дію. + description: + prefix_invited_by_user: "@%{name} запрошує вас приєднатися до цього сервера Mastodon!" + prefix_sign_up: Зареєструйтеся на Mastodon сьогодні! + suffix: Маючи обліковий запис, ви зможете підписуватися на людей, публікувати пости та листуватися з користувачами будь-якого сервера Mastodon! didnt_get_confirmation: Ви не отримали інструкції з підтвердження? - forgot_password: Забули свій пароль? + forgot_password: Забули пароль? invalid_reset_password_token: Токен скидання паролю неправильний або просрочений. Спробуйте попросити новий. login: Увійти logout: Вийти - migrate_account: Переїхати до іншого аккаунту - migrate_account_html: Якщо ви бажаєте, щоб відвідувачі цього акканту були перенаправлені до іншого, ви можете <a href="%{path}">налаштувати це тут</a>. + migrate_account: Переїхати на інший обліковий запис + migrate_account_html: Якщо ви бажаєте перенаправити цей обліковий запис на інший, ви можете <a href="%{path}">налаштувати це тут</a>. or_log_in_with: Або увійдіть з + providers: + cas: CAS + saml: SAML register: Зареєструватися + registration_closed: "%{instance} не приймає нових членів" resend_confirmation: Повторно відправити інструкції з підтвердження reset_password: Скинути пароль security: Зміна паролю set_new_password: Встановити новий пароль + setup: + email_below_hint_html: Якщо ця електронна адреса не є вірною, ви можете змінити її тут та отримати новий лист для підтвердження. + email_settings_hint_html: Електронний лист-підтвердження було вислано до %{email}. Якщо ця адреса електронної пошти не є вірною, ви можете змінити її в налаштуваннях облікового запису. + title: Налаштування + status: + account_status: Статус облікового запису + confirming: Очікуємо на завершення підтвердження за допомогою електронної пошти. + functional: Ваш обліковий запис повністю робочій. + pending: Ваша заява очікує на розгляд нашим персоналом. Це може зайняти деякий час. Ви отримаєте електронний лист, якщо ваша заява буде схвалена. + redirecting_to: Ваш обліковий запис наразі неактивний, тому що він перенаправлений до %{acct}. + trouble_logging_in: Проблема під час входу? authorize_follow: - already_following: Ви вже підписані на цей аккаунт - error: На жаль, при пошуку віддаленого аккаунту виникла помилка + already_following: Ви вже слідкуєте за цим обліковим записом + error: На жаль, під час пошуку віддаленого облікового запису сталася помилка follow: Підписатися follow_request: 'Вам надіслали запит на підписку:' following: 'Ура! Ви тепер підписані на:' @@ -403,6 +638,11 @@ uk: return: Перейти до профілю користувача web: Перейти до вебу title: Підписатися на %{acct} + challenge: + confirm: Далі + hint_html: "<strong>Підказка:</strong> ми не будемо запитувати ваш пароль впродовж наступної години." + invalid_password: Невірний пароль + prompt: Підтвердіть пароль для продовження datetime: distance_in_words: about_x_hours: "%{count}г" @@ -418,17 +658,34 @@ uk: x_months: "%{count}міс" x_seconds: "%{count}сек" deletes: - bad_password_msg: Гарна спроба, гакери! Неправильний пароль - confirm_password: Введіть актуальний пароль щоб перевірити що ви це ви - description_html: Це <strong>безвідворотно і назавжди</strong> видалить контент з вашого аккаунту та деактивує його. Ваше ім'я користувача буде залишатися зарезервованим для уникнення вашої деперсоналізації. - proceed: Видалити аккаунт - success_msg: Ваш аккаунт було успішно видалено - warning_html: Ми можемо гарантувати видалення контенти <b>лише з цього сайту</b>. Контент, що був поширений залишає сліди. Сервери, що є офлайн та ті, що відписалися від наших оновлень не запишуть змін до своїх баз даних. - warning_title: Про доступність поширеного контенту + challenge_not_passed: Невірна інформація + confirm_password: Введіть актуальний пароль, щоб перевірити що ви це ви + confirm_username: Введіть ваше ім'я користувача, щоб підтвердити процедуру + proceed: Видалити обліковий запис + success_msg: Ваш обліковий запис було успішно видалено + warning: + before: 'До того як продовжити, будь ласка уважно прочитайте це:' + caches: Інформація, кешована іншими серверами, може залишитися + data_removal: Ваші пости та інші дані будуть видалені назавжди + email_change_html: Ви можете <a href="%{path}">змінити вашу електронну адресу</a>, не видаляючи ваш обліковий запис + email_contact_html: Якщо його все ще немає, ви можете написали до <a href="mailto:%{email}">%{email}</a> для допомоги + email_reconfirmation_html: Якщо ви не отримали електронного листа з підтвердженням, ви можете <a href="%{path}">запросити його знову</a> + irreversible: Буде неможливо відновити ваш обліковий запис + more_details_html: Подробиці за посиланням <a href="%{terms_path}">політика конфіденційності</a>. + username_available: Ваше ім'я користувача стане доступним для використання + username_unavailable: Ваше ім'я користувача залишиться недоступним для використання + directories: + directory: Каталог профілів + explanation: Шукайте користувачів за їх інтересами + explore_mastodon: Досліджуйте %{title} + domain_validator: + invalid_domain: не є допустимим ім'ям домену errors: + '400': Ваш запит був недійсним або неправильним. '403': У Вас немає доступу до перегляду даної сторінки. - '404': Сторінка, яку Ви шукали, не існує. - '410': Сторінка, яку Ви шукали, більше не існує. + '404': Сторінки, яку Ви шукали, не існує. + '406': Ця сторінка недоступна у запрошеному форматі. + '410': Сторінки, яку Ви шукали, більше не існує. '422': content: Перевірка безпеки не вдалася. Можливо, Ви блокуєте cookies? title: Перевірка безпеки не вдалася @@ -436,7 +693,11 @@ uk: '500': content: Пробачте, та щось пішло не так з нашого боку. title: Ця сторінка неправильна + '503': Ця сторінка не може бути оброблена через тимчасову відмову сервера. noscript_html: Для використання веб-застосунку Mastodon, будь-ласка увімкніть JavaScript. Якщо у вас немає такої можливості, скористайтесь одним із <a href="%{apps_path}">нативних застосунків</a> для Mastodon для вашої платформи. + existing_username_validator: + not_found: не вдалося знайти локального користувача з таким ім'ям + not_found_multiple: не вдалося знайти %{usernames} exports: archive_takeout: date: Дата @@ -446,14 +707,22 @@ uk: request: Зробити запит на архів size: Розмір blocks: Список блокувань + csv: CSV + domain_blocks: Блокування доменів follows: Підписки + lists: Списки mutes: Список глушення storage: Ваш медіаконтент + featured_tags: + add_new: Додати новий + errors: + limit: Ви досягли максимальної кількості хештеґів + hint_html: "<strong>Що таке виділені хештеґи?</strong> Це ті, що відображаються ни видному місці у вашому публічному профілі. Вони дають змогу людям фільтрувати ваші публічні пости за цими хештеґами. Це дуже корисно для відстеження мистецьких творів та довготривалих проектів." filters: contexts: - home: Ваш фід + home: Ваша стрічка notifications: Сповіщення - public: Публічний фід + public: Глобальні стрічки thread: Повідомлення edit: title: Редагувати фільтр @@ -465,14 +734,48 @@ uk: title: Фільтри new: title: Додати фільтр + footer: + developers: Розробникам + more: Більше… + resources: Ресурси + trending_now: Актуальні generic: + all: Усі changes_saved_msg: Зміни успішно збережені! + copy: Копіювати + order_by: Сортувати за save_changes: Зберегти зміни + validation_errors: + few: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки + many: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки + one: Щось досі не гаразд! Перегляньте повідомлення про помилку + other: Щось досі не гаразд! Перегляньте %{count} повідомлень про помилки + html_validator: + invalid_markup: 'містить неприпустиму HTML розмітку: %{error}' + identity_proofs: + active: Активне + authorize: Так, авторизувати + authorize_connection_prompt: Авторизувати це зашифроване з'єднання? + errors: + failed: Не вдалося встановити це зашифроване з'єднання. Спробуйте ще раз за допомогою %{provider}. + i_am_html: Я %{username} з %{service}. + identity: Ідентичність + inactive: Неактивний + publicize_checkbox: 'Та дмухнути це:' + publicize_toot: 'Це доведено! Я таки %{username} з %{service}: %{url}' + status: Стан перевірки + view_proof: Переглянути доказ imports: + modes: + merge: Злиття + merge_long: Зберегти існуючі записи та додати нові + overwrite: Перезаписувати + overwrite_long: Замінити поточні записи новими preface: Вы можете завантажити деякі дані, наприклад, списки людей, на яких Ви підписані чи яких блокуєте, в Ваш акаунт на цій інстанції з файлів, експортованих з іншої інстанції. success: Ваші дані були успішно загружені та будуть оброблені в найближчий момент types: blocking: Список блокувань + domain_blocking: Список заблокованих сайтів following: Підписки muting: Список глушення upload: Завантажити @@ -490,6 +793,11 @@ uk: expires_in_prompt: Ніколи generate: Згенерувати invited_by: 'Вас запросив(-ла):' + max_uses: + few: "%{count} використання" + many: "%{count} використань" + one: 1 використання + other: "%{count} використань" max_uses_prompt: Без обмеження prompt: Генеруйте та діліться посиланням з іншими для надання доступу до сайту table: @@ -498,16 +806,27 @@ uk: title: Запросити людей lists: errors: - limit: Ви досягнули максимальної кількості списків + limit: Ви досягли максимальної кількості списків media_attachments: validations: images_and_video: Не можна додати відео до статусу з зображеннями too_many: Не можна додати більше 4 файлів migrations: - acct: username@domain нового аккаунту - currently_redirecting: 'Ваш профіль налаштований перенаправляти на:' - proceed: Зберегти - updated_msg: Переїзд вашого аккаунту успішно оновлений! + acct: username@domain нового облікового запису + cancel: Скасувати перенаправлення + errors: + not_found: не знайдено + followers_count: Підписників на час міграції + incoming_migrations: Переїзд з іншого облікового запису + incoming_migrations_html: Щоб переїхати з іншого облікового запису на цей, ви маєте <a href="%{path}">створити псевдонім облікового запису</a>. + not_redirecting: Наразі ваш обліковий запис не перенаправлений до іншого облікового запису. + proceed_with_move: Перемістити підписників + redirecting_to: Ваш обліковий запис перенаправляється до %{acct}. + set_redirect: Встановити перенаправлення + warning: + backreference_required: Спочатку має бути налаштовано зворотне посилання поточного облікового запису на новий обліковий запис + before: 'Перш ніж продовжити, уважно прочитайте ці нотатки:' + cooldown: Після переїзду ви деякий час не можете переїжджати знову moderation: title: Модерація notification_mailer: @@ -531,12 +850,12 @@ uk: subject: Користувачу %{name} сподобався ваш статус title: Нове вподобання follow: - body: "%{name} тепер підписаний на вас!" + body: "%{name} тепер підписаний(-а) на вас!" subject: "%{name} тепер підписаний(-а) на вас" - title: Новий підписник + title: Новий підписник(-ця) follow_request: action: Керувати запитами на підписку - body: "%{name} запитав Вас про підписку" + body: "%{name} запитав(-ла) Вас про підписку" subject: "%{name} хоче підписатися на Вас" title: Новий запит на підписку mention: @@ -546,11 +865,12 @@ uk: title: Нова згадка reblog: body: 'Ваш статус було передмухнуто %{name}:' - subject: "%{name} передмухнув ваш статус" + subject: "%{name} передмухнув(-ла) ваш статус" title: Нове передмухування number: human: decimal_units: + format: "%n%u" units: billion: млрд million: млн @@ -560,49 +880,141 @@ uk: pagination: newer: Новіше next: Далі + older: Старіші prev: Назад + truncate: "…" + polls: + errors: + already_voted: Ви вже голосували в цьому опитуванні + duplicate_options: містить повторювані варіанти + duration_too_long: надто далеко у майбутньому + duration_too_short: надто мала тривалість + expired: Це опитування вже завершено + over_character_limit: не може бути довше ніж %{max} символів кожен + too_few_options: має містити більше ніж один варіант + too_many_options: не може мати більше ніж %{max} варіантів preferences: other: Інше + posting_defaults: Промовчання для постів + public_timelines: Глобальні стрічки + relationships: + activity: Діяльність облікового запису + dormant: Неактивні + last_active: Крайня активність + most_recent: За часом створення + moved: Переміщено + mutual: Взаємні уподобання + primary: Первинні + relationship: Зв’язок + remove_selected_domains: Видалити усіх підписників з обраних доменів + remove_selected_followers: Видалити обраних підписників + remove_selected_follows: Не стежити за обраними користувачами + status: Статус облікового запису remote_follow: acct: Введіть username@domain, яким ви хочете підписатися - missing_resource: Пошук потрібного перенаправлення URL для Вашого аккаунта закінчився невдачею - no_account_html: Не маєте аккаунту? Не біда, ви можете <a href='%{sign_up_path}' target='_blank'>зареєструватися</a> + missing_resource: Не вдалося знайти необхідний URL переадресації для вашого облікового запису + no_account_html: Не маєте облікового запису? Ви можете <a href='%{sign_up_path}' target='_blank'>зареєструватися тут</a> proceed: Перейти до підписки prompt: 'Ви хочете підписатися на:' - remote_unfollow: - error: Помилка - title: Заголовок - unfollowed: Відписані + reason_html: "<strong>Чому це необхідно?</strong> <code>%{instance}</code> можливо, не є сервером, на якому ви зареєстровані, тому ми маємо спрямувати вас до вашого домашнього сервера." + remote_interaction: + favourite: + proceed: Перейти до додавання в улюблені + prompt: 'Ви хочете зробити улюбленим цей дмух:' + reblog: + proceed: Перейти до передмухування + prompt: 'Ви хочете передмухнути цей дмух:' + reply: + proceed: Перейти до відповіді + prompt: 'Ви хочете відповісти на цей дмух:' + scheduled_statuses: + over_daily_limit: Ви перевищили ліміт в %{limit} запланованих дмухів на сьогодні + over_total_limit: Ви перевищили ліміт в %{limit} запланованих дмухів + too_soon: Запланована дата має бути в майбутньому sessions: activity: Остання активність browser: Браузер browsers: + alipay: Alipay + blackberry: Blackberry + chrome: Хром + edge: Microsoft Edge + electron: Electron + firefox: Firefox generic: Невідомий браузер + ie: Internet Explorer + micro_messenger: MicroMessenger + nokia: Nokia S40 Ovi Browser + opera: Опера + otter: Otter + phantom_js: PhantomJS + qq: QQ Browser + safari: Сафарі + uc_browser: UCBrowser + weibo: Weibo current_session: Активна сесія description: "%{browser} на %{platform}" - explanation: Це веб-браузери, нині авторизовані до вашого аккаунту Mastodon. + explanation: Це веб-браузери, авторизовані у вашому обліковому записі Mastodon. + ip: IP platforms: + adobe_air: Adobe Air + android: Android + blackberry: Blackberry + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac other: невідома платформа + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: Закінчити revoke_success: Сесія успішно закінчена title: Сесії settings: + account: Обліковий запис + account_settings: Налаштування облікового запису + aliases: Псевдоніми облікового запису + appearance: Вигляд authorized_apps: Авторизовані застосунки - back: Назад у Mastodon - delete: Видалення аккаунту + back: Назад до Mastodon + delete: Видалення облікового запису development: Розробка edit_profile: Редагувати профіль export: Експорт даних + featured_tags: Рекомендовані хештеґи + identity_proofs: Докази ідентичності import: Імпорт - migrate: Міграція акаунту + import_and_export: Імпорт та експорт + migrate: Міграція облікового запису notifications: Сповіщення preferences: Налаштування + profile: Профіль + relationships: Підписки та підписники two_factor_authentication: Двофакторна авторизація + spam_check: + spam_detected: Це автоматична скарга. Було виявлено спам. statuses: attached: description: 'Прикріплено: %{attached}' + image: + few: "%{count} зображень" + many: "%{count} зображень" + one: "%{count} зображення" + other: "%{count} зображення" + video: + few: "%{count} відео" + many: "%{count} відео" + one: "%{count} відео" + other: "%{count} відео" boosted_from_html: Просунуто від %{acct_link} content_warning: 'Попередження про контент: %{warning}' + disallowed_hashtags: + few: 'заборонених хештеґа: %{tags}' + many: 'заборонених хештеґів: %{tags}' + one: 'заборонений хештеґ: %{tags}' + other: 'заборонених хештеґів: %{tags}' language_detection: Автоматично визначати мову open_in_web: Відкрити у вебі over_character_limit: перевищено ліміт символів (%{max}) @@ -611,7 +1023,21 @@ uk: ownership: Не можна закріпити чужий пост private: Не можна закріпити непублічний пост reblog: Не можна закріпити просунутий пост + poll: + total_people: + few: "%{count} людей" + many: "%{count} людей" + one: "%{count} людина" + other: "%{count} людей" + total_votes: + few: "%{count} голоса" + many: "%{count} голосів" + one: "%{count} голос" + other: "%{count} голоси" + vote: Проголосувати show_more: Детальніше + sign_in_to_participate: Увійдіть, щоб брати участь у бесіді + title: '%{name}: "%{quote}"' visibilities: private: Для підписників private_long: Показувати тільки підписникам @@ -622,13 +1048,20 @@ uk: stream_entries: pinned: Закріплений пост reblogged: передмухнув(-ла) - sensitive_content: Несприйнятливий контент + sensitive_content: Дражливий контент + tags: + does_not_match_previous_name: не збігається з попереднім ім'ям terms: + body_html: "<h2>Політика конфіденційності</h2>\n<h3 id=\"collect\">Яку інформацію ми збираємо?</h3>\n\n<ul>\n<li><em>Основна інформація про обліковий запис</em>: Якщо ви реєструєтесь на цьому сервері, вас можуть попросити ввести ім’я користувача, електронну адресу та пароль. Ви також можете ввести додаткову інформацію профілю, наприклад, ім'я для відображення та біографію, завантажити зображення профілю та зображення заголовка. Ім'я користувача, відображуване ім’я, біографія, зображення профілю та зображення заголовка завжди є загальнодоступними.</li>\n<li><em>Повідомлення, підписки та інша публічна інформація</em>: Список людей, на яких ви підписані, є публічним, це ж стосується і списка ваших підписників. Коли ви надсилаєте повідомлення, дата та час зберігаються, а також програма, за допомогою якої ви надіслали повідомлення. Повідомлення можуть містити мультимедійні вкладення, такі як зображення та відео. Загальнодоступні публікації, навіть приховані зі стрічок, доступні для всіх. Коли ви розміщуєте публікацію у своєму профілі, це також загальнодоступна інформація. Ваші публікації доставляються вашим підписникам, у деяких випадках це означає, що вони доставляються на інші сервери і копії зберігаються там. Коли ви видаляєте публікації, ця інформація також доставляється вашим \nпідписникам. Перепости та вподобання завжди публічні.</li>\n<li><em>Прямі публікації та пости лише для підписників</em>: Усі повідомлення зберігаються та обробляються на сервері. Публікації лише для підписників доставляються вашим підписникам та користувачам, які згадуються в них, а прямі повідомлення надсилаються лише тим користувачам, які в них згадуються. У \nдеяких випадках це означає, що вони доставляються на інші сервери і копії зберігаються там. Ми докладаємо сумлінних зусиль, щоб обмежити доступ до цих постів лише уповноваженим особам, але інші сервери можуть цього не зробити. Тому важливо переглянути сервери, до яких належать ваші підписники. Ви можете переключити параметр для схвалення та відхилення нових підписників вручну в налаштуваннях. <em>Будь ласка, майте на увазі, що оператори нашого сервера та будь-якого приймаючого сервера, можуть переглядати такі повідомлення</em>, і що одержувачі можуть робити скріншот, копіювати або повторно ділитися ними. <em>Не діліться будь-якою небезпечною інформацією на Mastodon.</em></li>\n<li><em>IP-адреси та інші метадані</em>: Коли ви входите в систему, ми записуємо IP-адресу, з якої ви входите, а також назву веб-переглядача. Усі сеанси, якими ви ввійшли в систему, доступні вам для перегляду та скасування в налаштуваннях. Остання використана IP-адреса зберігається до 12 місяців. Ми також можемо зберігати журнали серверів, які включають IP-адресу кожного запиту на наш сервер.</li>\n</ul>\n\n<hr class=\"spacer\"/>\n\n<h3 id=\"use\">Для чого ми використовуємо вашу інформацію?</h3>\n\n<p>Будь-яка інформація, яку ми збираємо від вас, може використовуватися такими способами:</p>\n\n<ul>\n<li>Для забезпечення основної функціональності Mastodon. Ви можете взаємодіяти з вмістом інших людей та розміщувати власний вміст лише тоді, коли ви ввійшли в систему. Наприклад, ви можете підписатись на інших людей, щоб переглядати їх публікації об’єднаними на вашій власній персоналізованій локальній стрічці. </li>\n<li>Щоб сприяти модерації спільноти, наприклад, порівнюючи вашу IP-адресу з іншими відомими адресами для визначення ухилення від бану чи інших порушень.</li>\n<li>Електронна адреса, яку ви вводите, може використовуватися для надсилання вам інформації, сповіщень про інших людей, які взаємодіють з вашим вмістом або надсилають вам повідомлення, а також для відповіді на запити та/або інші запитання./li>\n</ul>\n\n<hr class=\"spacer\"/>\n\n<h3 id=\"protect\">Як ми захищаємо вашу інформацію?</h3>\n\n<p>Ми застосовуємо різноманітні заходи безпеки для підтримки безпеки вашої особистої інформації під час введення, подання чи доступу до вашої особистої інформації. Крім усього іншого, сеанс вашого веб-переглядача, а також трафік між вашими програмами та API захищені SSL, а ваш пароль хеширується за допомогою сильного одностороннього алгоритму. Ви можете дозволити двофакторну автентифікацію для подальшого захисту доступу до свого облікового запису.</p>\n\n<hr class=\"spacer\"/>\n\n<h3 id=\"data-retention\">Яка наша політика збереження даних?</h3>\n\n<p>Ми докладемо зусиль для того, щоб:</p>\n\n<ul>\n<li>Зберігати журнали сервера, що містять IP-адресу всіх запитів на цьому сервері, але більше 90 днів.</li>\n<li>Зберігати IP-адреси, пов’язані з зареєстрованими користувачами, не більше 12 місяців.</li>\n</ul>\n\n<p>Ви можете запитати та завантажити архів свого вмісту, включаючи ваші публікації, медіа-додатки, зображення профілю та зображення заголовка.</p>\n\n<p>Ви можете в будь-який час безповоротно видалити свій обліковий запис.</p>\n\n<hr class=\"spacer\"/>\n\n<h3 id=\"cookies\">Чи використовуємо ми файли cookie?</h3>\n\n<p>Так. Файли cookie — це невеликі файли, які сайт або його постачальник послуг передає на жорсткий диск вашого комп'ютера через веб-браузер (якщо ви це дозволите). Ці файли cookie дозволяють сайту розпізнавати ваш веб-переглядач і, якщо у вас зареєстрований обліковий запис, пов’язувати його зі своїм зареєстрованим обліковим записом.</p>\n\n<p>Ми використовуємо файли cookie, щоб зрозуміти і зберегти ваші налаштування для майбутніх відвідувань. </p>\n\n<hr class=\"spacer\"/>\n\n<h3 id=\"disclose\">Чи розкриваємо ми будь-яку інформацію іншим сторонам?</h3>\n\n<p>Ми не продаємо, не торгуємо та іншим чином не передаємо назовні вашої особистої інформації. Це не стосується довірених третіх осіб, які допомагають нам керувати нашим сайтом, вести наш бізнес або обслуговувати вас, якщо ці сторони погоджуються зберігати цю інформацію конфіденційною. Ми також можемо оприлюднити вашу інформацію, коли вважаємо, що випуск доцільний для дотримання законодавства, \nзастосування політики нашого веб-сайта чи захисту наших або інших прав, власності чи безпеки.</p>\n\n<p>Ваш загальнодоступний вміст може завантажуватися іншими серверами в мережі. Ваші загальнодоступні публікації та публікації лише для підписників, доставляються на сервери, де \"проживають\" ваші підписники, а прямі повідомлення надходять на сервери одержувачів, якщо ці підписники або одержувачі проживають на іншому сервері, ніж цей./p>\n\n<p>Коли ви дозволяєте додатку використовувати ваш обліковий запис, залежно від обсягу дозволів, які ви затверджуєте, він може отримати доступ до вашої інформації про загальнодоступний профіль, список ваших підписок, ваші підписники, ваші списки, всі ваші публікації та вибране. Програми ніколи не можуть отримати доступ до вашої електронної адреси чи пароля.</p>\n\n<hr class=\"spacer\"/>\n\n<h3 id=\"children\">Використання сайту дітьми</h3>\n\n<p>Якщо цей сервер знаходиться в ЄС або ЄЕП: наш сайт, продукти та послуги спрямовані на людей, яким не менше 16 років. Якщо вам не виповнилося 16 років, відповідно до вимог GDPR (<a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">Загальне положення про захист даних</a>) не використовуйте цей веб-сайт.</p>\n\n<p>Якщо цей сервер знаходиться в США: наш сайт, продукти та послуги спрямовані на людей, яким не менше 13 років. Якщо вам не виповнилося 13 років, відповідно до вимог COPPA (<a href=\"https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Закон про захист конфіденційності дітей в Інтернеті</a>) не використовуйте цей сайт.</p>\n\n<p>Законодавчі вимоги можуть бути різними, якщо цей сервер знаходиться в іншій юрисдикції.</p>\n\n<hr class=\"spacer\"/>\n\n<h3 id=\"changes\">Зміни в нашій Політиці конфіденційності</h3>\n\n<p>Якщо ми вирішимо змінити нашу політику конфіденційності, ми опублікуємо ці зміни на цій сторінці. </p>\n\n<p>Цей документ є CC-BY-SA. Востаннє оновлено 7 березня 2018 року.</p>\n\n<p>Первісно адаптовано з <a href=\"https://github.com/discourse/discourse\">політики конфіденційності дискурсу</a>.</p>\n" title: Умови використання та Політика приватності %{instance} themes: contrast: Висока контрасність default: Mastodon mastodon-light: Mastodon (світла) + time: + formats: + default: "%b %d, %Y, %H:%M" + month: "%b %Y" two_factor_authentication: code_hint: Для підтверждення введіть код, згенерований застосунком аутентифікатора description_html: При увімкненні <strong>двофакторної аутентифікації</strong>, вхід буде вимагати від Вас використовування Вашого телефона, який згенерує вхідний код. @@ -638,36 +1071,58 @@ uk: enabled_success: Двофакторна аутентифікація успішно увімкнена generate_recovery_codes: Згенерувати коди відновлення instructions_html: "<strong>Відскануйте цей QR-код за допомогою Google Authenticator чи іншого TOTP-застосунку на Вашому телефоні</strong>. З цього моменту він буде генерувати коди, які буде необхідно ввести для входу." - lost_recovery_codes: Коди відновлення дозволяють повернути доступ до акаунту у випадку втрати телефону. Якщо Ви втратили Ваші коди відновлення, Ви можете знову згенерувати їх тут. Тоді ваші старі коди відновлення будуть анульовані. + lost_recovery_codes: Коди відновлення дозволяють повернути доступ до вашого облікового запису у випадку втрати телефону. Якщо ви втратили ваші коди відновлення, ви можете знову згенерувати їх тут. Ваші старі коди відновлення будуть анульовані. manual_instructions: 'Якщо Ви не можете відсканувати QR-код та хочете ввести його вручну, секрет представлений тут відкритим текстом:' recovery_codes: Запасні коди відновлення recovery_codes_regenerated: Коди відновлення успішно згенеровані - recovery_instructions_html: У випадку втрати доступу до вашого телефону ви можете використати один з кодів відновлення, вказаних нижче, щоб повернути доступ до акаунту. Тримайте коди відновлення у безпеці, наприклад, роздруйте їх та зберігайте їх з іншими важливими документами. + recovery_instructions_html: У випадку втрати доступу до вашого телефону ви можете використати один з нижчевказаних кодів відновлення, щоб повернути доступ до вашого облікового запису. <strong>Тримайте коди відновлення у безпеці</strong>, наприклад, роздрукуйте їх та зберігайте разом з іншими важливими документами. setup: Налаштувати wrong_code: Введений код неправильний! Чи правильно встановлений час на сервері та пристрої? user_mailer: backup_ready: - explanation: Ви зробили запит на повний архів вашого аккаунту Mastodon. Він вже готовий для завантаження! + explanation: Ви робили запит повної резервної копії вашого облікового запису Mastodon. Вона вже готова для завантаження! subject: Ваш архів готовий до завантаження title: Винесення архіву + warning: + explanation: + disable: Поки ваш обліковий запис заморожений, його дані залишаються незмінними. Проте ви не зможете виконувати будь-які дії над обліковим записом, доки його не буде розблоковано. + silence: Поки ваш обліковий запис обмежено, ваші дмухи на цьому сервері бачитимуть лише ті люди, які вже слідкують за вами, а вас може бути виключено з різних публічних списків. Тим не менш, інші можуть слідкувати за вами вручну. + suspend: Ваш обліковий запис було призупинено, а всі ваші дмухи і вивантажені медіафайли - безповоротно видалено з цього сервера та серверів, де ви мали послідовників. + get_in_touch: Ви можете відповісти на цей електронний лист, щоб зконтактувати з працівниками %{instance}. + review_server_policies: Переглянути політики сервера + subject: + disable: Ваш обліковий запис %{acct} було заморожено + none: Попередження для %{acct} + silence: Ваш обліковий запис %{acct} було обмежено + suspend: Ваш обліковий запис %{acct} було призупинено + title: + disable: Обліковий запис заморожено + none: Попередження + silence: Ообліковий запис обмежено + suspend: Обліковий запис призупинено welcome: edit_profile_action: Налаштувати профіль - edit_profile_step: Ви можете налаштувати профіль під себе завантаживши аватар, шпалери, змінивши відображуване ім'я тощо. Якщо ви захочете переглядати нових підписників до того, як вони зможуть підписатися на вас, ви можете заблокувати свій аккаунт. + edit_profile_step: Ви можете налаштувати ваш профіль, завантаживши аватар, шпалери, змінивши відображуване ім'я тощо. Якщо ви захочете переглядати нових підписників до того, як вони зможуть підписатися на вас, ви можете заблокувати свій обліковий запис. explanation: Ось декілька порад для початку final_action: Почати постити - final_step: 'Почність постити! Навіть не підписавшись на вас, інші зможуть побачити ваші пости, наприкоал, у локальному фіді та у хештеґах. Якщо ви хочете представитися, можете скористатися хештеґом #introductions.' + final_step: 'Почність постити! Навіть не підписавшись на вас, інші зможуть побачити ваші пости, наприклад, у локальній стрічці та у хештеґах. Якщо ви хочете представитися, можете скористатися хештеґом #introductions.' full_handle: Ваше звернення full_handle_hint: Те, що ви хочете сказати друзям, щоб вони могли написати вам або підписатися з інших сайтів. review_preferences_action: Змінити налаштування review_preferences_step: Переконайтеся у тому, що ви налаштували все необхідне, як от які e-mail повідомлення ви хочете отримувати, або який рівень приватності ви хочете встановити вашим постам за замовчуванням. Якщо хочете, ви можете увімкнути автоматичне програвання GIF анімацій. subject: Ласкаво просимо до Mastodon tip_federated_timeline: Федерований фід є широким поглядом на мережу Mastodon. Але він включає лише людей, на яких підписані ваші сусіди по сайту, тому він не є повним. - tip_following: Ви автоматично підписані на адміністратора(-ів) сервера. Для того, щоб знайти ще цікавих людей, дослідіть локальний та федерований фіди. + tip_following: Ви автоматично підписані на адміністратора(-ів) сервера. Для того, щоб знайти ще цікавих людей, дослідіть локальну та глобальну стрічки. tip_local_timeline: Локальний фід - це погляд згори на людей на %{instance}. Це ваші прямі сусіди! tip_mobile_webapp: Якщо ваш мобільний браузер пропонує вам додати Mastodon на робочий стіл, ви можете отримувати push-сповіщення. Все може виглядати як нативний застосунок у багатьох речах. tips: Поради title: Ласкаво просимо, %{name}! users: + follow_limit_reached: Не можна слідкувати більш ніж за %{limit} людей invalid_email: Введена адреса e-mail неправильна invalid_otp_token: Введено неправильний код otp_lost_help_html: Якщо ви втратили доступ до обох, ви можете отримати доступ з %{email} + seamless_external_login: Ви увійшли за допомогою зовнішнього сервісу, тому налаштування паролю та електронної пошти недоступні. + signed_in_as: 'Ви увійшли як:' + verification: + verification: Підтвердження diff --git a/config/locales/ur.yml b/config/locales/ur.yml new file mode 100644 index 000000000..114261859 --- /dev/null +++ b/config/locales/ur.yml @@ -0,0 +1,20 @@ +--- +ur: + errors: + '400': The request you submitted was invalid or malformed. + '403': You don't have permission to view this page. + '404': The page you are looking for isn't here. + '406': This page is not available in the requested format. + '410': The page you were looking for doesn't exist here anymore. + '422': + '429': Throttled + '500': + '503': The page could not be served due to a temporary server failure. + invites: + expires_in: + '1800': 30 minutes + '21600': 6 hours + '3600': 1 hour + '43200': 12 hours + '604800': 1 week + '86400': 1 day diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 538a035d2..3af145c66 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1,45 +1,64 @@ --- zh-CN: about: - about_hashtag_html: 这里展示的是带有话题标签 <strong>#%{hashtag}</strong> 的公开嘟文。如果你想与他们互动,你需要在任意一个 Mastodon 实例或与其兼容的网站上拥有一个帐户。 - about_mastodon_html: Mastodon(长毛象)是一个建立在开放式网络协议和自由、开源软件之上的社交网络,有着类似于电子邮件的分布式设计。 - about_this: 关于本实例 + about_hashtag_html: 这里展示的是带有话题标签 <strong>#%{hashtag}</strong> 的公开嘟文。如果你想与他们互动,你需要在任意一个 Mastodon 站点或与其兼容的网站上拥有一个帐户。 + about_mastodon_html: Mastodon 是一个建立在开放式网络协议和自由、开源软件之上的社交网络,有着类似于电子邮件的分布式设计。 + about_this: 关于本站 active_count_after: 活跃 active_footnote: 每月活跃用户 - administered_by: 本实例的管理员: + administered_by: 本站管理员: + api: API apps: 移动应用 + apps_platforms: 在 iOS、Android 和其他平台上使用 Mastodon + browse_directory: 浏览用户目录并按兴趣筛选 + browse_local_posts: 浏览此服务器上实时公开嘟文 + browse_public_posts: 浏览 Mastodon 上公共嘟文的实时信息流 contact: 联系方式 contact_missing: 未设定 contact_unavailable: 未公开 + discover_users: 发现用户 documentation: 文档 - extended_description_html: | - <h3>这里可以写一些规定</h3> - <p>本站尚未设置详细介绍。</p> - generic_description: "%{domain} 是这个庞大网络中的一台服务器" + federation_hint_html: 在%{instance} 上拥有账户后,你可以关注任何 Mastodon 服务器或其他服务器上的人。 + get_apps: 尝试移动应用 hosted_on: 一个在 %{domain} 上运行的 Mastodon 实例 learn_more: 了解详情 privacy_policy: 隐私政策 + see_whats_happening: 看一看现在在发生什么 + server_stats: 服务器统计数据: source_code: 源代码 status_count_after: other: 条嘟文 status_count_before: 他们共嘟出了 + tagline: 关注并发现新朋友 terms: 使用条款 + unavailable_content: 不可用的内容 + unavailable_content_description: + domain: 服务器 + reason: 原因 + rejecting_media: 来自这些服务器的媒体文件将不会被处理或存储,缩略图也不会显示,需要手动点击打开原始文件。 user_count_after: other: 位用户 user_count_before: 这里共注册有 what_is_mastodon: Mastodon 是什么? accounts: + choices_html: "%{name} 的推荐:" + featured_tags_hint: 您可以精选一些话题标签展示在这里。 follow: 关注 followers: other: 关注者 following: 正在关注 joined: 加入于 %{date} + last_active: 最近活动 + link_verified_on: 此链接的所有权已在 %{date} 检查 media: 媒体 moved_html: "%{name} 已经迁移到 %{new_profile_link}:" network_hidden: 此信息不可用 + never_active: 从未活跃 nothing_here: 这里神马都没有! people_followed_by: "%{name} 关注的人" people_who_follow: 关注 %{name} 的人 + pin_errors: + following: 您必须关注您要推荐的人 posts: other: 嘟文 posts_tab_heading: 嘟文 @@ -49,14 +68,20 @@ zh-CN: admin: 管理员 bot: 机器人 moderator: 监察员 + unavailable: 个人资料不可用 unfollow: 取消关注 admin: + account_actions: + action: 执行操作 + title: 在 %{acct} 上执行管理操作 account_moderation_notes: create: 新建 created_msg: 管理备忘建立成功! delete: 删除 destroyed_msg: 管理备忘删除成功! accounts: + approve: 批准 + approve_all: 批准全部 are_you_sure: 你确定吗? avatar: 头像 by_domain: 域名 @@ -69,7 +94,8 @@ zh-CN: title: 为 %{username} 更改电子邮件地址 confirm: 确认 confirmed: 已确认 - confirming: 确认 + confirming: 确认中 + deleted: 已删除 demote: 降任 disable: 停用 disable_two_factor_authentication: 停用双重认证 @@ -85,8 +111,11 @@ zh-CN: followers: 关注者 followers_url: 关注者(Followers)URL follows: 正在关注 + header: 个人资料页横幅图片 inbox_url: 收件箱(Inbox)URL + invited_by: 邀请者为 ip: IP 地址 + joined: 加入于 location: all: 全部 local: 本地 @@ -96,15 +125,20 @@ zh-CN: media_attachments: 媒体文件 memorialize: 设置为追悼帐户 moderation: + active: 活跃 all: 全部 + pending: 待审核 silenced: 已隐藏 suspended: 已封禁 title: 帐户状态 moderation_notes: 管理备忘 most_recent_activity: 最后一次活跃的时间 most_recent_ip: 最后一次活跃的 IP 地址 + no_account_selected: 因为没有账户被选择,所以没有更改 + no_limits_imposed: 无限制 not_subscribed: 未订阅 outbox_url: 发件箱(Outbox)URL + pending: 待审核 perform_full_suspension: 封禁 profile_url: 个人资料页面 URL promote: 升任 @@ -112,7 +146,10 @@ zh-CN: public: 公开页面 push_subscription_expires: PuSH 订阅过期时间 redownload: 刷新个人资料 + reject: 拒绝 + reject_all: 拒绝全部 remove_avatar: 删除头像 + remove_header: 删除横幅图片 resend_confirmation: already_confirmed: 该用户已被确认 send: 重发确认邮件 @@ -128,29 +165,39 @@ zh-CN: user: 普通用户 salmon_url: 三文鱼协议网址(Salmon URL) search: 搜索 + search_same_ip: 具有相同IP的其他用户 shared_inbox_url: 公用收件箱(Shared Inbox)URL show: created_reports: 这个帐户提交的举报 targeted_reports: 针对这个帐户的举报 silence: 隐藏 + silenced: 已隐藏 statuses: 嘟文 subscribe: 订阅 + suspended: 已封禁 + time_in_queue: 已经等待了 %{time} title: 用户 unconfirmed_email: 待验证的电子邮件地址 undo_silenced: 解除隐藏 undo_suspension: 解除封禁 unsubscribe: 取消订阅 username: 用户名 + warn: 警告 web: 站内页面 + whitelisted: 已加入白名单 action_logs: actions: assigned_to_self_report: "%{name} 接管了举报 %{target}" change_email_user: "%{name} 更改了用户 %{target} 的电子邮件地址" confirm_user: "%{name} 确认了用户 %{target} 的电子邮件地址" + create_account_warning: "%{name} 向 %{target} 发送了警告" create_custom_emoji: "%{name} 添加了新的自定义表情 %{target}" + create_domain_allow: "%{name} 添加了对域名 %{target} 的白名单。" create_domain_block: "%{name} 屏蔽了域名 %{target}" create_email_domain_block: "%{name} 屏蔽了电子邮件域名 %{target}" demote_user: "%{name} 对用户 %{target} 进行了降任操作" + destroy_custom_emoji: "%{name} 销毁了自定义表情 %{target}" + destroy_domain_allow: "%{name} 从白名单中移除了域名 %{target}" destroy_domain_block: "%{name} 解除了对域名 %{target} 的屏蔽" destroy_email_domain_block: "%{name} 解除了对电子邮件域名 %{target} 的屏蔽" destroy_status: "%{name} 删除了 %{target} 的嘟文" @@ -175,19 +222,24 @@ zh-CN: deleted_status: "(嘟文已删除)" title: 运营日志 custom_emojis: + assign_category: 指定分类 by_domain: 域名 copied_msg: 成功将表情复制到本地 copy: 复制 copy_failed_msg: 无法将表情复制到本地 + create_new_category: 新建分类 created_msg: 表情添加成功! delete: 删除 destroyed_msg: 表情删除成功! disable: 停用 + disabled: 已停用 disabled_msg: 表情停用成功 emoji: 表情 enable: 启用 + enabled: 已启用 enabled_msg: 表情启用成功 image_hint: PNG 格式,最大 50KB + list: 列表 listed: 已显示 new: title: 添加新的自定义表情 @@ -195,20 +247,28 @@ zh-CN: shortcode: 短代码 shortcode_hint: 至少 2 个字符,只能使用字母、数字和下划线 title: 自定义表情 + uncategorized: 未分类 + unlist: 不公开 unlisted: 已隐藏 update_failed_msg: 表情更新失败 updated_msg: 表情更新成功! upload: 上传新表情 dashboard: + authorized_fetch_mode: 安全模式 backlog: 未处理任务数 config: 服务器配置 feature_deletions: 帐户删除 feature_invites: 邀请链接 + feature_profile_directory: 用户目录 feature_registrations: 公开注册 - feature_relay: 同步中继 + feature_relay: 中继服务器 + feature_spam_check: 反垃圾 + feature_timeline_preview: 时间轴预览 features: 功能 hidden_service: 匿名服务连通性 open_reports: 待处理举报数 + pending_tags: 等待审核的标签 + pending_users: 等待审核的用户 recent_users: 新用户 search: 全文搜索 single_user_mode: 单用户模式 @@ -220,11 +280,19 @@ zh-CN: week_interactions: 本周互动数 week_users_active: 本周活跃用户数 week_users_new: 本周新用户数 + whitelist_mode: 白名单模式 + domain_allows: + add_new: 白名单域名 + created_msg: 域名已被列入白名单 + destroyed_msg: 域名已从白名单中移除 + undo: 从白名单中移除 domain_blocks: add_new: 添加新屏蔽域名 created_msg: 正在进行域名屏蔽 destroyed_msg: 域名屏蔽已撤销 domain: 域名 + edit: 编辑域名屏蔽 + existing_domain_block_html: 您已经对 %{name} 施加了更严格的限制,您需要先 <a href="%{unblock_url}">解封</a>。 new: create: 添加屏蔽 hint: 域名屏蔽不会阻止该域名下的帐户进入本站的数据库,但是会对来自这个域名的帐户自动进行预先设置的管理操作。 @@ -234,8 +302,18 @@ zh-CN: silence: 自动隐藏 suspend: 自动封禁 title: 添加域名屏蔽 + private_comment: 私密评论 + private_comment_hint: 版主只允许内部用户评论此域名 + public_comment: 公开评论 reject_media: 拒绝接收媒体文件 reject_media_hint: 删除本地已缓存的媒体文件,并且不再接收来自该域名的任何媒体文件。此选项不影响封禁 + reject_reports: 拒绝接收举报 + reject_reports_hint: 忽略来自此域名的所有举报。这和封禁无关。 + rejecting_media: 拒绝接收媒体文件 + rejecting_reports: 拒绝接收举报 + severity: + silence: 已隐藏 + suspend: 已封禁 show: affected_accounts: other: 将会影响到数据库中的 %{count} 个帐户 @@ -245,6 +323,7 @@ zh-CN: title: 撤销对 %{domain} 的域名屏蔽 undo: 撤销 undo: 撤销屏蔽域名 + view: 查看域名屏蔽 email_domain_blocks: add_new: 添加新条目 created_msg: 电子邮件域名屏蔽添加成功 @@ -255,8 +334,26 @@ zh-CN: create: 添加域名 title: 添加电子邮件域名屏蔽 title: 电子邮件域名屏蔽 + followers: + back_to_account: 返回帐户 + title: "%{acct} 的关注者" instances: + by_domain: 域名 + delivery_available: 无法投递 + known_accounts: + other: "%{count} 个已知帐户" + moderation: + all: 全部 + limited: 受限的 + title: 运营 + private_comment: 私密评论 + public_comment: 公开评论 title: 已知实例 + total_blocked_by_us: 被我方屏蔽的 + total_followed_by_them: 被对方关注的 + total_followed_by_us: 被我方关注的 + total_reported: 关于对方的举报 + total_storage: 媒体文件 invites: deactivate_all: 撤销所有邀请链接 filter: @@ -265,14 +362,22 @@ zh-CN: expired: 已失效 title: 筛选 title: 邀请用户 + pending_accounts: + title: 待处理的帐户 (%{count}) relays: - add_new: 添加新的中继 - description_html: "<strong>同步中继</strong>是一种中间服务器,各实例可以通过订阅中继和向中继推送信息的方式来大量交换公开嘟文。<strong>它可以帮助中小型实例发现网络中的内容</strong>,而无需本地用户手动关注其他远程实例上的用户。" + add_new: 订阅新的中继 + delete: 删除 + description_html: "<strong>中继服务器</strong>是一个信息统合服务器,各服务器可以通过订阅中继服务器和向中继服务器推送信息来交换大量公开嘟文。<strong>它可以帮助中小型服务器发现联邦宇宙中的其他服务器的内容</strong>,而无需本站用户手动关注其他远程服务器上的用户。" + disable: 禁用 + disabled: 已禁用 + enable: 启用 enable_hint: 启用此功能后,你的实例会订阅此中继的所有公开嘟文,并同时向其推送本服务器的公开嘟文。 + enabled: 已启用 inbox_url: 中继 URL pending: 等待中继确认 save_and_enable: 保存并启用 setup: 设置中继连接 + signatures_not_enabled: 安全模式或白名单模式启用时中继将不会正常工作 status: 状态 title: 中继 report_notes: @@ -321,15 +426,31 @@ zh-CN: custom_css: desc_html: 通过 CSS 代码调整所有页面的显示效果 title: 自定义 CSS + default_noindex: + desc_html: 影响所有尚未更改此设置的用户 + title: 默认将不会对用户建立索引 + domain_blocks: + all: 对所有人 + disabled: 不对任何人 + title: 查看域名屏蔽 + users: 本地已登录用户 + domain_blocks_rationale: + title: 显示原理 hero: desc_html: 用于在首页展示。推荐分辨率 600×100px 以上。未指定的情况下将默认使用本站缩略图 title: 主题图片 + mascot: + desc_html: 用于在首页展示。推荐分辨率 293×205px 以上。未指定的情况下将使用默认吉祥物。 + title: 吉祥物图像 peers_api_enabled: - desc_html: 截至目前本实例在网络中已发现的域名 + desc_html: 截至目前本服务器在联邦宇宙中已发现的域名 title: 公开已知实例的列表 preview_sensitive_media: desc_html: 始终在站外链接预览中展示缩略图,无论媒体内容是否标记为敏感 title: 在 OpenGraph 预览中显示敏感媒体内容 + profile_directory: + desc_html: 允许用户被发现 + title: 启用用户目录 registrations: closed_message: desc_html: 本站关闭注册期间的提示信息。可以使用 HTML 标签 @@ -340,6 +461,12 @@ zh-CN: min_invite_role: disabled: 没有人 title: 允许发送邀请的用户组 + registrations_mode: + modes: + approved: 注册时需要批准 + none: 关闭注册 + open: 开放注册 + title: 注册模式 show_known_fediverse_at_about_page: desc_html: 启用此选项将会在预览中显示来自已知实例的嘟文,否则只会显示本站时间轴的内容. title: 在时间轴预览中显示已知实例 @@ -352,10 +479,16 @@ zh-CN: site_description_extended: desc_html: 可以填写行为守则、规定、指南或其他本站特有的内容。可以使用 HTML 标签 title: 本站详细介绍 + site_short_description: + desc_html: 会在在侧栏和元数据标签中显示。可以用一小段话描述 Mastodon 是什么,以及本服务器的特点。 + title: 服务器一句话介绍 site_terms: desc_html: 可以填写自己的隐私权政策、使用条款或其他法律文本。可以使用 HTML 标签 title: 自定义使用条款 site_title: 本站名称 + spam_check_enabled: + desc_html: Mastodon可以自动隐藏和举报重复发送垃圾消息的账户。但是本功能有可能误伤无辜。 + title: 自动反垃圾 thumbnail: desc_html: 用于在 OpenGraph 和 API 中显示预览图。推荐分辨率 1200×630px title: 本站缩略图 @@ -363,31 +496,75 @@ zh-CN: desc_html: 在主页显示公共时间轴 title: 时间轴预览 title: 网站设置 + trendable_by_default: + desc_html: 影响以前未禁止的话题标签 + title: 允许在未审查的情况下将话题置为热门 + trends: + desc_html: 公开显示先前已审查的但当前热门的话题 + title: 热门标签 statuses: back_to_account: 返回帐户信息页 batch: delete: 删除 nsfw_off: 标记为非敏感内容 nsfw_on: 标记为敏感内容 + deleted: 已删除 failed_to_execute: 执行失败 media: title: 媒体文件 no_media: 不含媒体文件 + no_status_selected: 因为没有嘟文被选中,所以没有更改 title: 帐户嘟文 with_media: 含有媒体文件 - subscriptions: - callback_url: 回调 URL - confirmed: 已确认 - expires_in: 失效时间 - last_delivery: 最后一次接收数据的时间 + tags: + accounts_today: 今日活跃用户 + accounts_week: 本周活跃用户 + breakdown: 按来源分类今天的使用情况 + directory: 在目录中 + in_directory: 目录中 %{count} 条 + last_active: 最近活动 + most_popular: 最热门的 + most_recent: 最近的 + name: 话题标签 + review: 审核状态 + reviewed: 已审核 + title: 话题标签 + trending_right_now: 当前热门 + unique_uses_today: 今天发布 %{count} 条 + unreviewed: 未审核 + updated_msg: 话题设置更新成功 title: 管理 + warning_presets: + add_new: 添加新条目 + delete: 删除 + edit: 编辑 + edit_preset: 编辑预置警告 + title: 管理预设警告 admin_mailer: + new_pending_account: + body: 新帐户的详细信息如下。您可以批准或拒绝此申请。 + subject: 在 %{instance} 上有新账户 ( %{username}) 需要审核 new_report: body: "%{reporter} 举报了用户 %{target}" body_remote: 来自 %{domain} 的用户举报了用户 %{target} subject: 来自 %{instance} 的用户举报(#%{id}) + new_trending_tag: + body: '今日的热门话题 #%{name} 之前未审核。直到你允许之前这个话题将不会公开显示,或保持原样让它石沉大海。' + subject: 在 %{instance} 有话题 (#%{name}) 待审核 + aliases: + add_new: 创建别名 + remove: 取消关联别名 + appearance: + advanced_web_interface: 高级 web 界面 + advanced_web_interface_hint: 如果你想使用整个屏幕宽度,高级 web 界面允许您配置多个不同的栏目,可以同时看到更多的信息:主页、通知、跨站时间轴、任意数量的列表和话题标签。 + animations_and_accessibility: 动画和访问选项 + confirmation_dialogs: 确认对话框 + discovery: 发现 + sensitive_content: 敏感内容 + toot_layout: 嘟文布局 application_mailer: notification_preferences: 更改电子邮件首选项 + salutation: "%{name}:" settings: 使用此链接更改你的电子邮件首选项:%{link} view: 点此链接查看详情: view_profile: 查看个人资料页 @@ -401,10 +578,15 @@ zh-CN: warning: 一定小心,千万不要把它分享给任何人! your_token: 你的访问令牌 auth: + apply_for_account: 请求邀请 change_password: 密码 - confirm_email: 确认电子邮件地址 + checkbox_agreement_html: 我同意 <a href="%{rules_path}" target="_blank">服务器规则</a> 和 <a href="%{terms_path}" target="_blank">服务条款</a> + checkbox_agreement_without_rules_html: 我同意 <a href="%{terms_path}" target="_blank">服务条款</a> delete_account: 删除帐户 delete_account_html: 如果你想删除你的帐户,请<a href="%{path}">点击这里继续</a>。你需要确认你的操作。 + description: + prefix_invited_by_user: "@%{name} 邀请您加入这个Mastodon服务器!" + prefix_sign_up: 现在就注册 Mastodon! didnt_get_confirmation: 没有收到确认邮件? forgot_password: 忘记密码? invalid_reset_password_token: 密码重置令牌无效或已过期。请重新发起重置密码请求。 @@ -413,11 +595,21 @@ zh-CN: migrate_account: 迁移到另一个帐户 migrate_account_html: 如果你希望引导他人关注另一个帐户,请<a href="%{path}">点击这里进行设置</a>。 or_log_in_with: 或通过其他方式登录 + providers: + cas: CAS + saml: SAML register: 注册 + registration_closed: "%{instance} 目前不接收新成员" resend_confirmation: 重新发送确认邮件 reset_password: 重置密码 security: 帐户安全 set_new_password: 设置新密码 + setup: + title: 初始设置 + status: + account_status: 帐户状态 + confirming: 等待电子邮件确认完成。 + trouble_logging_in: 登录有问题? authorize_follow: already_following: 你已经在关注此用户了 error: 对不起,寻找这个跨站用户时出错 @@ -429,6 +621,9 @@ zh-CN: return: 查看用户个人资料 web: 返回本站 title: 关注 %{acct} + challenge: + invalid_password: 无效密码 + prompt: 确认密码以继续 datetime: distance_in_words: about_x_hours: "%{count}时" @@ -444,16 +639,24 @@ zh-CN: x_months: "%{count}个月" x_seconds: "%{count}秒" deletes: - bad_password_msg: 想得美,黑客!密码输入错误 confirm_password: 输入你当前的密码来验证身份 - description_html: 继续操作将会<strong>永久地、不可撤销地</strong>删除帐户中的所有内容,然后冻结帐户。你的用户名将会被保留,以防有人冒用你的身份。 proceed: 删除帐户 success_msg: 你的帐户已经成功删除 - warning_html: 我们只能保证本实例上的内容将会被彻底删除。对于已经被广泛传播的内容,它们在本实例以外的某些地方可能仍然可见。此外,失去连接的服务器以及停止接收订阅的服务器所存储的数据亦无法删除。 - warning_title: 关于已传播的内容的警告 + warning: + irreversible: 您将无法恢复或重新激活您的帐户 + username_available: 您的用户名现在又可以使用了 + username_unavailable: 您的用户名仍将无法使用 + directories: + directory: 用户目录 + explanation: 根据兴趣发现用户 + explore_mastodon: 探索 %{title} + domain_validator: + invalid_domain: 不是一个有效的域名 errors: + '400': 您提交的请求无效或格式不正确。 '403': 你没有访问这个页面的权限。 '404': 无法找到你所要访问的页面。 + '406': This page is not available in the requested format. '410': 你所要访问的页面此处已不存在。 '422': content: 无法确认登录信息。你是不是屏蔽了 Cookie? @@ -462,7 +665,11 @@ zh-CN: '500': content: 抱歉,我们的后台出错了。 title: 这个页面有问题 + '503': The page could not be served due to a temporary server failure. noscript_html: 使用 Mastodon 网页版应用需要启用 JavaScript。你也可以选择适用于你的平台的 <a href="%{apps_path}">Mastodon 应用</a>。 + existing_username_validator: + not_found: 在本站找不到此用户 + not_found_multiple: 找不到 %{usernames} exports: archive_takeout: date: 日期 @@ -472,9 +679,17 @@ zh-CN: request: 请求你的存档 size: 大小 blocks: 屏蔽的用户 + csv: CSV + domain_blocks: 域名屏蔽 follows: 关注的用户 + lists: 列表 mutes: 隐藏的用户 storage: 媒体文件存储 + featured_tags: + add_new: 添加新条目 + errors: + limit: 你所推荐的话题标签数已达上限 + hint_html: "<strong>什么是精选话题标签?</strong> 它们被显示在您的公开个人资料中的突出位置,人们可以在这些标签下浏览您的公共嘟文。 它们是跟踪创作或长期项目的进度的重要工具。" filters: contexts: home: 主页时间轴 @@ -484,22 +699,57 @@ zh-CN: edit: title: 编辑过滤器 errors: + invalid_context: 过滤器场景没有或无效 invalid_irreversible: 此功能只适用于主页时间轴或通知 index: delete: 删除 title: 过滤器 new: title: 添加新的过滤器 + footer: + developers: 开发者 + more: 更多… + resources: 资源 + trending_now: 现在流行 generic: + all: 全部 changes_saved_msg: 更改保存成功! + copy: 复制 + order_by: 排序方式 save_changes: 保存更改 validation_errors: other: 出错啦!检查一下下面 %{count} 处出错的地方吧 + html_validator: + invalid_markup: '包含无效的 HTML 标记: %{error}' + identity_proofs: + active: 有效 + authorize: 是,授权 + authorize_connection_prompt: 授权这一密码学连接? + errors: + failed: 密码关联失败。请在 %{provider} 上重新尝试。 + keybase: + invalid_token: Keybase 令牌是签名的哈希并且必须是 66 个十六进制字符 + verification_failed: Keybase 无法将此令牌识别为 Keybase 用户 %{kb_username} 的签名。请在 Keybase 再试一次。 + wrong_user: 无法以 %{current} 的身份创建 %{proving} 的证明。请以 %{proving} 的身份登录并再次尝试。 + explanation_html: 在这里,你可以和你的其他身份建立密码学关联,例如 Keybase 个人资料。这可以让别人向你发送加密信息,并信任你发给他们的内容。 + i_am_html: 我是 %{service} 上的 %{username} 。 + identity: 身份 + inactive: 失效 + publicize_checkbox: 并发一条这样的嘟文: + publicize_toot: '证明完毕!我是 %{service} 上的 %{username}: %{url}' + status: 验证状态 + view_proof: 查看证明 imports: + modes: + merge: 合并 + merge_long: 保留现有记录并添加新的记录 + overwrite: 覆盖 + overwrite_long: 将当前记录替换为新记录 preface: 你可以在此导入你在其他实例导出的数据,比如你所关注或屏蔽的用户列表。 success: 数据上传成功,正在处理中 types: blocking: 屏蔽列表 + domain_blocking: 域名屏蔽列表 following: 关注列表 muting: 隐藏列表 upload: 上传 @@ -520,7 +770,7 @@ zh-CN: max_uses: other: "%{count} 次" max_uses_prompt: 无限制 - prompt: 生成分享链接,邀请他人在本实例注册 + prompt: 生成分享链接,邀请他人在本服务器注册 table: expires_at: 失效时间 uses: 已使用次数 @@ -534,9 +784,22 @@ zh-CN: too_many: 最多只能添加 4 张图片 migrations: acct: 新帐户的 用户名@域名 - currently_redirecting: 目前你的个人资料页显示的新帐户是: - proceed: 保存 - updated_msg: 帐户迁移设置更新成功! + cancel: 取消跳转 + cancelled_msg: 成功取消跳转 + errors: + move_to_self: 不能是当前帐户 + not_found: 找不到 + on_cooldown: 您正处于冷却状态 + past_migrations: 迁移记录 + proceed_with_move: 移动关注者 + redirecting_to: 您的帐户被跳转到了 %{acct}。 + set_redirect: 设置跳转 + warning: + backreference_required: 新账号必须先引用现在这个账号 + before: 在继续前,请仔细阅读下列说明: + cooldown: 移动后会有一个冷却期,在此期间您将无法再次移动 + disabled_account: 此后,您的当前帐户将无法使用。但是,您仍然有权导出数据或者重新激活。 + followers: 这步操作将把所有关注者从当前账户移动到新账户 moderation: title: 运营 notification_mailer: @@ -546,11 +809,13 @@ zh-CN: mention: "%{name} 在嘟文中提到了你:" new_followers_summary: other: 而且,你不在的时候,有 %{count} 个人关注了你!好棒! + subject: + other: "自从上次访问后,有 %{count} 条新通知 \U0001F418" title: 在你不在的这段时间…… favourite: - body: 你的嘟文被 %{name} 收藏了: - subject: "%{name} 收藏了你的嘟文" - title: 新的收藏 + body: 你的嘟文被 %{name} 喜欢了: + subject: "%{name} 喜欢了你的嘟文" + title: 新的喜欢 follow: body: "%{name} 关注了你!" subject: "%{name} 关注了你" @@ -569,51 +834,134 @@ zh-CN: body: 你的嘟文被 %{name} 转嘟了: subject: "%{name} 转嘟了你的嘟文" title: 新的转嘟 + number: + human: + decimal_units: + format: "%n%u" + units: + billion: B + million: M + quadrillion: Q + thousand: K + trillion: T pagination: newer: 更新 next: 下一页 older: 更早 prev: 上一页 + truncate: "…" + polls: + errors: + already_voted: 你已经在这里投过票了 + duplicate_options: 包含重复的项目 + duration_too_long: 持续时间过长 + duration_too_short: 持续时间过短 + expired: 投票已经结束 + over_character_limit: 每条不能超过 %{max} 个字符 + too_few_options: 至少需要两个选项 + too_many_options: 不能超过 %{max} 项 + preferences: + other: 其他 + posting_defaults: 发布默认值 + public_timelines: 公共时间轴 + relationships: + activity: 账户活动 + dormant: 休眠 + last_active: 最近活动 + most_recent: 最近的 + moved: 已迁移 + mutual: 互相关注 + primary: 主要 + relationship: 关系 + remove_selected_domains: 从选定的域名中删除所有关注者 + remove_selected_followers: 移除选中的关注者 + remove_selected_follows: 取消关注所选用户 + status: 帐户状态 remote_follow: acct: 请输入你的“用户名@实例域名” missing_resource: 无法确定你的帐户的跳转 URL no_account_html: 还没有帐号?你可以<a href='%{sign_up_path}' target='_blank'>注册一个</a> proceed: 确认关注 prompt: 你正准备关注: - remote_unfollow: - error: 错误 - title: 标题 - unfollowed: 已取消关注 + reason_html: "<strong>为什么需要这个步骤?</strong> <code>%{instance}</code> 可能不是您所注册的服务器,所以我们需要先重定向到您所在的服务器。" + remote_interaction: + favourite: + proceed: 确认标记为喜欢 + prompt: 您想要标记此嘟文为喜欢: + reblog: + proceed: 确认转嘟 + prompt: 您想要转嘟此条: + reply: + proceed: 确认回复 + prompt: 您想要回复此嘟文: + scheduled_statuses: + over_daily_limit: 您已超出每日定时嘟文的上限(%{limit} 条) + over_total_limit: 您已超出定时嘟文的上限(%{limit} 条) + too_soon: 所定的时间必须在未来 sessions: activity: 最后一次活跃的时间 browser: 浏览器 browsers: alipay: 支付宝 + blackberry: 黑莓 + chrome: Chrome + edge: 微软 Edge + electron: Electron + firefox: 火狐 generic: 未知浏览器 + ie: IE 浏览器 micro_messenger: 微信 nokia: Nokia S40 Ovi 浏览器 + opera: 欧朋浏览器 + otter: Otter + phantom_js: PhantomJS qq: QQ浏览器 + safari: Safari uc_browser: UC浏览器 weibo: 新浪微博 current_session: 当前会话 description: "%{platform} 上的 %{browser}" explanation: 你的 Mastodon 帐户目前已在这些浏览器上登录。 ip: IP 地址 + platforms: + adobe_air: Adobe Air + android: Android + blackberry: 黑莓 + chrome_os: ChromeOS + firefox_os: Firefox OS + ios: iOS + linux: Linux + mac: Mac + other: 未知平台 + windows: Windows + windows_mobile: Windows Mobile + windows_phone: Windows Phone revoke: 注销 revoke_success: 会话注销成功 title: 会话 settings: + account: 账户 + account_settings: 帐户设置 + aliases: 账户别名 + appearance: 外观 authorized_apps: 已授权的应用 back: 返回 Mastodon delete: 删除帐户 development: 开发 edit_profile: 更改个人资料 export: 导出 + featured_tags: 精选的话题标签 + identity_proofs: 身份证明 import: 导入 + import_and_export: 导入和导出 migrate: 帐户迁移 notifications: 通知 preferences: 首选项 + profile: 个人资料 + relationships: 关注管理 two_factor_authentication: 双重认证 + spam_check: + spam_detected: 这是一个自动报告。已检测到垃圾信息。 statuses: attached: description: 附加媒体:%{attached} @@ -633,7 +981,12 @@ zh-CN: ownership: 不能置顶他人的嘟文 private: 不能置顶非公开的嘟文 reblog: 不能置顶转嘟 + poll: + total_votes: + other: "%{count} 票" + vote: 投票 show_more: 显示更多 + sign_in_to_participate: 登录以加入对话 title: "%{name}:“%{quote}”" visibilities: private: 仅关注者 @@ -646,7 +999,90 @@ zh-CN: pinned: 置顶嘟文 reblogged: 转嘟 sensitive_content: 敏感内容 + tags: + does_not_match_previous_name: 和之前的名称不匹配 terms: + body_html: | + <h2>隐私政策</h2> + <h3 id="collect">我们收集什么信息?</h3> + + <ul> + <li><em>基本帐户信息</em>:如果您在此服务器上注册,可能会要求您输入用户名,电子邮件地址和密码。 您还可以输入其他个人资料信息,例如显示名称和传记,并上传个人资料照片和标题图像。 用户名,显示名称,传记,个人资料图片和标题图片始终公开列出。</li> + <li><em>帖子,关注和其他公共信息</em>: 您关注的人员列表会公开列出,您的粉丝也是如此。 提交邮件时,会存储日期和时间以及您提交邮件的应用程序。 消息可能包含媒体附件,例如图片和视频。 公开和非上市帖子可公开获取。 当您在个人资料中添加帖子时,这也是公开信息。 您的帖子会发送给您的关注者,在某些情况下,这意味着他们会将其发送到不同的服务器,并将副本存储在那里。 当您删除帖子时,同样会将其发送给您的关注者。 重新记录或赞成其他职位的行为始终是公开的。</li> + <li><em>直接和关注者的帖子</em>: 所有帖子都在服务器上存储和处理。 仅限关注者的帖子会发送给您的关注者和用户,并且直接帖子仅会发送给他们中提到的用户。 在某些情况下,这意味着它们被传送到不同的服务器并且副本存储在那里。 我们善意努力限制只有授权人员访问这些帖子,但其他服务器可能无法这样做。 因此,查看您的关注者所属的服务器非常重要。 您可以在设置中切换选项以手动批准和拒绝新关注者。 <em>请记住,服务器和任何接收服务器的操作员可能会查看此类消息</em>, 并且收件人可以截图,复制或以其他方式重新共享它们。 <em> 不要在 Mastodon 上分享任何危险信息。</em></li> + <li><em>IP和其他元数据</em>: 登录时,我们会记录您登录的IP地址以及浏览器应用程序的名称。 所有登录的会话都可供您在设置中查看和撤销。 使用的最新IP地址最长可存储12个月。 我们还可以保留服务器日志,其中包括我们服务器的每个请求的IP地址。</li> + </ul> + + <hr class="spacer" /> + + <h3 id="use">我们将您的信息用于什么?</h3> + + <p>我们向您收集的任何信息均可通过以下方式使用:</p> + + <ul> + <li>提供Mastodon的核心功能。 您只能在登录时与其他人的内容进行互动并发布您自己的内容。例如,您可以关注其他人在您自己的个性化家庭时间轴中查看他们的组合帖子。</li> + <li>为了帮助社区适度,例如将您的IP地址与其他已知的IP地址进行比较,以确定禁止逃税或其他违规行为。</li> + <li>您提供的电子邮件地址可能用于向您发送信息,有关其他人与您的内容交互或向您发送消息的通知,以及回复查询和/或其他请求或问题。</li> + </ul> + + <hr class="spacer" /> + + <h3 id="protect">我们如何保护您的信息?</h3> + + <p>当您输入,提交或访问您的个人信息时,我们会实施各种安全措施以维护您的个人信息的安全。 除此之外,您的浏览器会话以及应用程序和API之间的流量都使用SSL进行保护,您的密码使用强大的单向算法进行哈希处理。 您可以启用双因素身份验证,以进一步保护对您帐户的访问。</p> + + <hr class="spacer" /> + + <h3 id="data-retention">我们的数据保留政策是什么?</h3> + + <p>我们真诚的努力:</p> + + <ul> + <li>保留包含此服务器的所有请求的IP地址的服务器日志,只要保留此类日志,不超过90天。</li> + <li>保留与注册用户关联的IP地址不超过12个月。</li> + </ul> + + <p>您可以请求并下载我们内容的存档,包括您的帖子,媒体附件,个人资料图片和标题图片。</p> + + <p>您可以随时不可逆转地删除您的帐户。</p> + + <hr class="spacer"/> + + <h3 id="cookies">我们使用 cookies 吗?</h3> + + <p>是。 Cookie是网站或其服务提供商通过Web浏览器传输到计算机硬盘的小文件(如果允许)。 这些cookie使网站能够识别您的浏览器,如果您有注册帐户,则将其与您的注册帐户相关联。</p> + + <p>我们使用Cookie来了解并保存您对未来访问的偏好。</p> + + <hr class="spacer" /> + + <h3 id="disclose">我们是否透露任何信息给其他方?</h3> + + <p>我们不会将您的个人身份信息出售,交易或以其他方式转让给外方。 这不包括协助我们操作我们的网站,开展业务或为您服务的受信任的第三方,只要这些方同意保密这些信息。 当我们认为发布适合遵守法律,执行我们的网站政策或保护我们或他人的权利,财产或安全时,我们也可能会发布您的信息。</p> + + <p>您的公共内容可能会被网络中的其他服务器下载。 您的公开帖子和关注者帖子会发送到关注者所在的服务器,并且直接邮件会传递到收件人的服务器,只要这些关注者或收件人位于与此不同的服务器上。</p> + + <p>当您授权应用程序使用您的帐户时,根据您批准的权限范围,它可能会访问您的公开个人资料信息,以下列表,您的关注者,您的列表,所有帖子和您的收藏夹。 应用程序永远不能访问您的电子邮件地址或密码。</p> + + <hr class="spacer" /> + + <h3 id="children">儿童使用网站</h3> + + <p>如果此服务器位于欧盟或欧洲经济区:我们的网站,产品和服务都是针对至少16岁的人。 如果您未满16岁,则符合GDPR的要求(<a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">General Data Protection Regulation</a>) 不要使用这个网站。</p> + + <p>如果此服务器位于美国:我们的网站,产品和服务均面向至少13岁的人。 如果您未满13岁,则符合COPPA的要求 (<a href="https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act">Children's Online Privacy Protection Act</a>) 不要使用这个网站。</p> + + <p>如果此服务器位于另一个辖区,则法律要求可能不同。</p> + + <hr class="spacer" /> + + <h3 id="changes">我们隐私政策的变更</h3> + + <p>如果我们决定更改我们的隐私政策,我们会在此页面上发布这些更改。</p> + + <p>本文件为CC-BY-SA。 它最后更新于2018年3月7日。</p> + + <p>最初改编自 <a href="https://github.com/discourse/discourse">Discourse 隐私政策</a>.</p> title: "%{instance} 使用条款和隐私权政策" themes: contrast: Mastodon(高对比度) @@ -655,6 +1091,7 @@ zh-CN: time: formats: default: "%Y年%-m月%d日 %H:%M" + month: "%Y 年 %B" two_factor_authentication: code_hint: 输入认证器生成的代码以确认操作 description_html: 启用<strong>双重认证</strong>后,你需要输入手机认证器生成的代码才能登录. @@ -676,6 +1113,22 @@ zh-CN: explanation: 你请求了一份 Mastodon 帐户的完整备份。现在你可以下载了! subject: 你的存档已经准备完毕 title: 存档导出 + warning: + explanation: + disable: 虽然您的帐户被冻结,您的帐户数据仍然完整;但是您无法在解锁前执行任何操作。 + silence: 当您的帐户受限时,只有已经关注过你的人才会这台服务器上看到你的嘟文,并且您会被排除在各种公共列表之外。但是,其他人仍然可以手动关注你。 + suspend: 您的帐户已被封禁,所有的嘟文和您上传的媒体文件都已经从该服务器和您的关注者的服务器上删除并且不可恢复。 + review_server_policies: 查看服务器政策 + subject: + disable: 您的帐户 %{acct} 已被冻结 + none: 对 %{acct} 的警告 + silence: 您的帐户 %{acct} 已经受限 + suspend: 您的帐户 %{acct} 已被封禁。 + title: + disable: 账户已冻结 + none: 警示 + silence: 帐户受限 + suspend: 账户被封禁 welcome: edit_profile_action: 设置个人资料 edit_profile_step: 你可以自定义你的个人资料,包括上传头像、横幅图片、更改昵称等等。如果你想在新的关注者关注你之前对他们进行审核,你也可以选择为你的帐户开启保护。 @@ -683,19 +1136,23 @@ zh-CN: final_action: 开始嘟嘟 final_step: '开始嘟嘟吧!即便你现在没有关注者,其他人仍然能在本站时间轴或者话题标签等地方看到你的公开嘟文。试着用 #introductions 这个话题标签介绍一下自己吧。' full_handle: 你的完整用户地址 - full_handle_hint: 你需要把这个告诉你的朋友们,这样他们就能从另一个实例向你发送信息或者关注你。 + full_handle_hint: 你需要把这个告诉你的朋友们,这样他们就能从另一台服务器向你发送信息或者关注你。 review_preferences_action: 更改首选项 review_preferences_step: 记得调整你的偏好设置,比如你想接收什么类型的邮件,或者你想把你的嘟文可见范围默认设置为什么级别。如果你没有晕动病的话,考虑一下启用“自动播放 GIF 动画”这个选项吧。 subject: 欢迎来到 Mastodon tip_federated_timeline: 跨站公共时间轴可以让你一窥更广阔的 Mastodon 网络。不过,由于它只显示你的邻居们所订阅的内容,所以并不是全部。 - tip_following: 默认情况下,你会自动关注你所在实例的管理员。想结交更多有趣的人的话,记得多逛逛本站时间轴和跨站公共时间轴哦。 + tip_following: 默认情况下,你会自动关注你所在服务器的管理员。想结交更多有趣的人的话,记得多逛逛本站时间轴和跨站公共时间轴哦。 tip_local_timeline: 本站时间轴可以让你一窥 %{instance} 上的用户。他们就是离你最近的邻居! tip_mobile_webapp: 如果你的移动设备浏览器允许你将 Mastodon 添加到主屏幕,你就能够接收推送消息。它就像本地应用一样好使! tips: 小贴士 title: "%{name},欢迎你的加入!" users: + follow_limit_reached: 您不能关注超过 %{limit} 个人 invalid_email: 输入的电子邮件地址无效 invalid_otp_token: 输入的双重认证代码无效 otp_lost_help_html: 如果你不慎丢失了所有的代码,请联系 %{email} 寻求帮助 seamless_external_login: 因为你是通过外部服务登录的,所以密码和电子邮件地址设置都不可用。 signed_in_as: 当前登录的帐户: + verification: + explanation_html: 您可以 <strong>验证自己是个人资料元数据中的某个链接的所有者</strong>。 为此,被链接网站必须包含一个到您的 Mastodon 主页的链接。链接中 <strong>必须</strong> 包括 <code>rel="me"</code> 属性。链接的文本内容可以随意填写。例如: + verification: 验证 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 25e7475a8..338cf810e 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -8,10 +8,6 @@ zh-HK: contact: 聯絡 contact_missing: 未設定 contact_unavailable: 未公開 - extended_description_html: | - <h3>這裡可以寫一些網站規則</h3> - <p>本站未有詳細介紹</p> - generic_description: "%{domain} 是 Mastodon 網絡中其中一個服務站" hosted_on: 在 %{domain} 運作的 Mastodon 服務站 learn_more: 了解更多 source_code: 源代碼 @@ -327,13 +323,6 @@ zh-HK: no_media: 不含媒體檔案 title: 帳戶文章 with_media: 含有媒體檔案 - subscriptions: - callback_url: 回傳 URL - confirmed: 確定 - expires_in: 期限 - last_delivery: 資料最後送抵時間 - title: PuSH 訂閱 - topic: 所訂閱資源 title: 管理 admin_mailer: new_report: @@ -357,7 +346,6 @@ zh-HK: your_token: token auth: change_password: 密碼 - confirm_email: 確認電郵 delete_account: 刪除帳戶 delete_account_html: 如果你想刪除你的帳戶,請<a href="%{path}">點擊這裡繼續</a>。你需要確認你的操作。 didnt_get_confirmation: 沒有收到確認指示電郵? @@ -399,16 +387,14 @@ zh-HK: x_months: "%{count}個月" x_seconds: "%{count}秒" deletes: - bad_password_msg: 想得美,黑客!密碼輸入錯誤 confirm_password: 輸入你現在的密碼來驗證身份 - description_html: 繼續操作將會<strong>永久地、不可還原地</strong>刪除帳戶中的所有內容,然後凍結帳戶。你的用戶名將會被保留,以防有人冒用你的身份。 proceed: 刪除帳戶 success_msg: 你的帳戶已經成功刪除 - warning_html: 我們只能保證本服務站上的內容將會被徹底刪除。對於已經被廣泛傳播的內容,它們在本服務站以外的某些地方可能仍然可見。此外,失去連接的服務站以及停止接收訂閱的服務站所存儲的數據亦無法刪除。 - warning_title: 關於已傳播的內容的警告 errors: + '400': The request you submitted was invalid or malformed. '403': 你沒有觀看本頁的權限。 '404': 找不到內容。 + '406': This page is not available in the requested format. '410': 內容已被刪除。 '422': content: 無法確認登入資訊。會不會你阻擋了本站使用 Cookies 的權限? @@ -417,6 +403,7 @@ zh-HK: '500': content: 抱歉,我們的後台出錯了。 title: 這個頁面有問題 + '503': The page could not be served due to a temporary server failure. noscript_html: 使用 Mastodon 網頁版應用需要啟用 JavaScript。你也可以選擇適用於你的平台的 <a href="%{apps_path}">Mastodon 應用</a>。 exports: archive_takeout: @@ -474,9 +461,6 @@ zh-HK: too_many: 不可以加入超過 4 個檔案 migrations: acct: 新帳戶的 用戶名@域名 - currently_redirecting: 目前你的個人資料頁顯示的新帳戶是: - proceed: 保存 - updated_msg: 帳戶遷移設置更新成功! moderation: title: 營運 notification_mailer: @@ -524,10 +508,6 @@ zh-HK: missing_resource: 無法找到你用戶的轉接網址 proceed: 下一步 prompt: 你希望關注︰ - remote_unfollow: - error: 錯誤 - title: 標題 - unfollowed: 取消關注 sessions: activity: 最近活動 browser: 瀏覽器 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index d3dcf5133..b7116e02e 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -7,6 +7,7 @@ zh-TW: active_count_after: 活躍 active_footnote: 每月活躍使用者 (MAU) administered_by: 管理者: + api: API apps: 行動應用程式 apps_platforms: 在 iOS、Android 和其他平台使用 Mastodon browse_directory: 依興趣瀏覽個人資料目錄和過濾器 @@ -16,10 +17,6 @@ zh-TW: contact_unavailable: 未公開 discover_users: 探索使用者 documentation: 文件 - extended_description_html: | - <h3>這裡可以寫一些網站規則</h3> - <p>本站點未有詳細介紹</p> - generic_description: "%{domain} 是 Mastodon 網路中其中一個站點" get_apps: 嘗試行動應用程式 hosted_on: 在 %{domain} 運作的 Mastodon 站點 learn_more: 了解詳細 @@ -32,6 +29,9 @@ zh-TW: status_count_before: 他們共嘟出了 tagline: 關注朋友並探索新朋友 terms: 使用條款 + unavailable_content_description: + domain: 伺服器 + reason: 原因 user_count_after: other: 位使用者 user_count_before: 註冊使用者數 @@ -48,6 +48,7 @@ zh-TW: media: 媒體 moved_html: "%{name} 已經搬遷到 %{new_profile_link}:" network_hidden: 此訊息不可用 + never_active: 永不 nothing_here: 暫時沒有內容可供顯示! people_followed_by: "%{name} 關注的人" people_who_follow: 關注 %{name} 的人 @@ -72,6 +73,7 @@ zh-TW: destroyed_msg: 成功刪除管理備忘! accounts: approve: 核准 + approve_all: 全部批准 are_you_sure: 您確定嗎? avatar: 頭像 by_domain: 站點 @@ -136,6 +138,7 @@ zh-TW: push_subscription_expires: PuSH 訂閱過期 redownload: 重新整理個人資料 reject: 拒絕 + reject_all: 全部拒絕 remove_avatar: 取消頭像 remove_header: 移除開頭 resend_confirmation: @@ -213,11 +216,14 @@ zh-TW: delete: 刪除 destroyed_msg: 已刪除表情符號! disable: 停用 + disabled: 已停用 disabled_msg: 已停用表情符號 emoji: 表情符號 enable: 啟用 + enabled: 已啟用 enabled_msg: 已啟用表情符號 image_hint: PNG 格式, 最大 50KB + list: 列表 listed: 已顯示 new: title: 加入新的自訂表情符號 @@ -297,6 +303,10 @@ zh-TW: back_to_account: 返回帳戶 title: "%{acct} 的關注者" instances: + moderation: + all: 全部 + limited: 限制 + title: 版主 title: 聯邦 invites: filter: @@ -307,6 +317,8 @@ zh-TW: title: 邀請使用者 relays: description_html: "<strong>聯邦中繼站</strong> 是種中繼伺服器,會在訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。<strong>中繼站也能協助小型或中型伺服器從聯邦中探索內容</strong>,而無須本地使用者手動關注遠端伺服器的其他使用者。" + disabled: 停用 + enable: 啟用 report_notes: created_msg: 檢舉記錄建立成功! destroyed_msg: 檢舉記錄刪除成功! @@ -401,14 +413,13 @@ zh-TW: no_media: 不含媒體檔案 title: 帳戶嘟文 with_media: 含有媒體檔案 - subscriptions: - callback_url: 回傳網址 - confirmed: 已確認 - expires_in: 期限 - last_delivery: 最後遞送 - title: WebSub 訂閱 - topic: 主題 + tags: + name: Hashtag title: 管理介面 + warning_presets: + add_new: 新增 + delete: 刪除 + edit: 編輯 admin_mailer: new_report: body: "%{reporter} 檢舉了使用者 %{target}" @@ -431,7 +442,6 @@ zh-TW: your_token: 你的 token auth: change_password: 密碼 - confirm_email: 確認電子信箱位址 delete_account: 刪除帳戶 delete_account_html: 如果你想刪除你的帳戶,請<a href="%{path}">點擊這裡繼續</a>。你需要確認你的操作。 didnt_get_confirmation: 沒有收到驗證信? @@ -473,16 +483,14 @@ zh-TW: x_months: "%{count}個月" x_seconds: "%{count}秒" deletes: - bad_password_msg: 想得美,駭客! 密碼輸入錯誤 confirm_password: 輸入你現在的密碼來驗證身份 - description_html: 繼續操作將會<strong>永久地、不可還原地</strong>刪除帳戶中的所有內容,然後凍結帳戶。你的使用者名稱將會被保留,以防有人冒用你的身份。 proceed: 刪除帳戶 success_msg: 你的帳戶已經成功刪除 - warning_html: 我們只能保證本伺服器上的內容將會被徹底刪除。對於已經被廣泛傳播的內容,它們在本伺服器以外的某些地方可能仍然可見。此外,離線伺服器以及停止接收訂閱的伺服器所儲存的資料亦無法刪除。 - warning_title: 關於已傳播的內容警告 errors: + '400': The request you submitted was invalid or malformed. '403': 你沒有觀看這個頁面的權限。 '404': 您所尋找的網頁不存在。 + '406': This page is not available in the requested format. '410': 您所尋找的網頁此處已不存在。 '422': content: 安全驗證失敗。請確定有開啟瀏覽器 Cookies 功能? @@ -491,6 +499,7 @@ zh-TW: '500': content: 抱歉,我們的後台出現問題了。 title: 這個頁面有問題 + '503': The page could not be served due to a temporary server failure. noscript_html: 使用 Mastodon 網頁版應用需要啟用 JavaScript。你也可以選擇適用於你的平台的 <a href="%{apps_path}">Mastodon 應用</a>。 exports: archive_takeout: @@ -544,9 +553,6 @@ zh-TW: too_many: 無法加入超過 4 個檔案 migrations: acct: 新帳戶的 使用者名稱@站點網域 - currently_redirecting: 目前你的個人資料頁顯示的新帳戶是: - proceed: 儲存 - updated_msg: 帳戶搬遷設定更新成功! moderation: title: 營運 notification_mailer: @@ -587,10 +593,6 @@ zh-TW: missing_resource: 無法找到資源 proceed: 下一步 prompt: '您希望關注:' - remote_unfollow: - error: 錯誤 - title: 標題 - unfollowed: 取消關注 sessions: activity: 最近活動 browser: 瀏覽器 diff --git a/config/navigation.rb b/config/navigation.rb index e8494ddc2..ab4262182 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -4,13 +4,13 @@ SimpleNavigation::Configuration.run do |navigation| navigation.items do |n| n.item :web, safe_join([fa_icon('chevron-left fw'), t('settings.back')]), root_url - n.item :profile, safe_join([fa_icon('user fw'), t('settings.profile')]), settings_profile_url do |s| - s.item :profile, safe_join([fa_icon('pencil fw'), t('settings.appearance')]), settings_profile_url, highlights_on: %r{/settings/profile|/settings/migration} + n.item :profile, safe_join([fa_icon('user fw'), t('settings.profile')]), settings_profile_url, if: -> { current_user.functional? } do |s| + s.item :profile, safe_join([fa_icon('pencil fw'), t('settings.appearance')]), settings_profile_url s.item :featured_tags, safe_join([fa_icon('hashtag fw'), t('settings.featured_tags')]), settings_featured_tags_url s.item :identity_proofs, safe_join([fa_icon('key fw'), t('settings.identity_proofs')]), settings_identity_proofs_path, highlights_on: %r{/settings/identity_proofs*}, if: proc { current_account.identity_proofs.exists? } end - n.item :preferences, safe_join([fa_icon('cog fw'), t('settings.preferences')]), settings_preferences_url do |s| + n.item :preferences, safe_join([fa_icon('cog fw'), t('settings.preferences')]), settings_preferences_url, if: -> { current_user.functional? } do |s| s.item :appearance, safe_join([fa_icon('desktop fw'), t('settings.appearance')]), settings_preferences_appearance_url s.item :notifications, safe_join([fa_icon('bell fw'), t('settings.notifications')]), settings_preferences_notifications_url s.item :other, safe_join([fa_icon('cog fw'), t('preferences.other')]), settings_preferences_other_url @@ -22,30 +22,30 @@ SimpleNavigation::Configuration.run do |navigation| end end - n.item :relationships, safe_join([fa_icon('users fw'), t('settings.relationships')]), relationships_url - n.item :filters, safe_join([fa_icon('filter fw'), t('filters.index.title')]), filters_path, highlights_on: %r{/filters} + n.item :relationships, safe_join([fa_icon('users fw'), t('settings.relationships')]), relationships_url, if: -> { current_user.functional? } + n.item :filters, safe_join([fa_icon('filter fw'), t('filters.index.title')]), filters_path, highlights_on: %r{/filters}, if: -> { current_user.functional? } n.item :security, safe_join([fa_icon('lock fw'), t('settings.account')]), edit_user_registration_url do |s| - s.item :password, safe_join([fa_icon('lock fw'), t('settings.account_settings')]), edit_user_registration_url, highlights_on: %r{/auth/edit|/settings/delete} + s.item :password, safe_join([fa_icon('lock fw'), t('settings.account_settings')]), edit_user_registration_url, highlights_on: %r{/auth/edit|/settings/delete|/settings/migration|/settings/aliases} s.item :two_factor_authentication, safe_join([fa_icon('mobile fw'), t('settings.two_factor_authentication')]), settings_two_factor_authentication_url, highlights_on: %r{/settings/two_factor_authentication} s.item :authorized_apps, safe_join([fa_icon('list fw'), t('settings.authorized_apps')]), oauth_authorized_applications_url end n.item :data, safe_join([fa_icon('cloud-download fw'), t('settings.import_and_export')]), settings_export_url do |s| - s.item :import, safe_join([fa_icon('cloud-upload fw'), t('settings.import')]), settings_import_url + s.item :import, safe_join([fa_icon('cloud-upload fw'), t('settings.import')]), settings_import_url, if: -> { current_user.functional? } s.item :export, safe_join([fa_icon('cloud-download fw'), t('settings.export')]), settings_export_url end - n.item :invites, safe_join([fa_icon('user-plus fw'), t('invites.title')]), invites_path, if: proc { Setting.min_invite_role == 'user' } - n.item :development, safe_join([fa_icon('code fw'), t('settings.development')]), settings_applications_url + n.item :invites, safe_join([fa_icon('user-plus fw'), t('invites.title')]), invites_path, if: proc { Setting.min_invite_role == 'user' && current_user.functional? } + n.item :development, safe_join([fa_icon('code fw'), t('settings.development')]), settings_applications_url, if: -> { current_user.functional? } n.item :moderation, safe_join([fa_icon('gavel fw'), t('moderation.title')]), admin_reports_url, if: proc { current_user.staff? } do |s| s.item :action_logs, safe_join([fa_icon('bars fw'), t('admin.action_logs.title')]), admin_action_logs_url s.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_url, highlights_on: %r{/admin/reports} s.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_url, highlights_on: %r{/admin/accounts|/admin/pending_accounts} s.item :invites, safe_join([fa_icon('user-plus fw'), t('admin.invites.title')]), admin_invites_path - s.item :tags, safe_join([fa_icon('tag fw'), t('admin.tags.title')]), admin_tags_path - s.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url(limited: '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks}, if: -> { current_user.admin? } + s.item :tags, safe_join([fa_icon('hashtag fw'), t('admin.tags.title')]), admin_tags_path, highlights_on: %r{/admin/tags} + s.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_url(limited: whitelist_mode? ? nil : '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows}, if: -> { current_user.admin? } s.item :email_domain_blocks, safe_join([fa_icon('envelope fw'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_url, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.admin? } end @@ -53,8 +53,7 @@ SimpleNavigation::Configuration.run do |navigation| s.item :dashboard, safe_join([fa_icon('tachometer fw'), t('admin.dashboard.title')]), admin_dashboard_url s.item :settings, safe_join([fa_icon('cogs fw'), t('admin.settings.title')]), edit_admin_settings_url, if: -> { current_user.admin? }, highlights_on: %r{/admin/settings} s.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), admin_custom_emojis_url, highlights_on: %r{/admin/custom_emojis} - s.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? }, highlights_on: %r{/admin/relays} - s.item :subscriptions, safe_join([fa_icon('paper-plane-o fw'), t('admin.subscriptions.title')]), admin_subscriptions_url, if: -> { current_user.admin? } + s.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? && !whitelist_mode? }, highlights_on: %r{/admin/relays} s.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? } s.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? } end diff --git a/config/pghero.yml b/config/pghero.yml new file mode 100644 index 000000000..244245d0d --- /dev/null +++ b/config/pghero.yml @@ -0,0 +1,41 @@ +databases: + primary: + # Database URL (defaults to app database) + # url: <%= ENV["DATABASE_URL"] %> + + # Add more databases + # other: + # url: <%= ENV["OTHER_DATABASE_URL"] %> + +# Minimum time for long running queries +# long_running_query_sec: 60 + +# Minimum average time for slow queries +# slow_query_ms: 20 + +# Minimum calls for slow queries +# slow_query_calls: 100 + +# Minimum connections for high connections warning +# total_connections_threshold: 500 + +# Statement timeout for explain +# explain_timeout_sec: 10 + +# Time zone (defaults to app time zone) +# time_zone: "Pacific Time (US & Canada)" + +# Basic authentication +# username: admin +# password: secret + +# Stats database URL (defaults to app database) +# stats_database_url: <%= ENV["PGHERO_STATS_DATABASE_URL"] %> + +# AWS configuration (defaults to app AWS config) +# also need aws_db_instance_identifier with each database +# aws_access_key_id: ... +# aws_secret_access_key: ... +# aws_region: us-east-1 + +override_csp: true diff --git a/config/puma.rb b/config/puma.rb index 1afdb1c6d..224be7903 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -1,10 +1,12 @@ +persistent_timeout ENV.fetch('PERSISTENT_TIMEOUT') { 20 }.to_i + threads_count = ENV.fetch('MAX_THREADS') { 5 }.to_i threads threads_count, threads_count if ENV['SOCKET'] - bind 'unix://' + ENV['SOCKET'] + bind "unix://#{ENV['SOCKET']}" else - port ENV.fetch('PORT') { 3000 } + bind "tcp://#{ENV.fetch('BIND', '127.0.0.1')}:#{ENV.fetch('PORT', 3000)}" end environment ENV.fetch('RAILS_ENV') { 'development' } diff --git a/config/routes.rb b/config/routes.rb index 0d49a07d6..49edb4602 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -6,8 +6,12 @@ require 'sidekiq-scheduler/web' Sidekiq::Web.set :session_secret, Rails.application.secrets[:secret_key_base] Rails.application.routes.draw do + root 'home#index' + mount LetterOpenerWeb::Engine, at: 'letter_opener' if Rails.env.development? + health_check_routes + authenticate :user, lambda { |u| u.admin? } do mount Sidekiq::Web, at: 'sidekiq', as: :sidekiq mount PgHero::Engine, at: 'pghero', as: :pghero @@ -20,17 +24,28 @@ Rails.application.routes.draw do end get '.well-known/host-meta', to: 'well_known/host_meta#show', as: :host_meta, defaults: { format: 'xml' } + get '.well-known/nodeinfo', to: 'well_known/nodeinfo#index', as: :nodeinfo, defaults: { format: 'json' } get '.well-known/webfinger', to: 'well_known/webfinger#show', as: :webfinger get '.well-known/change-password', to: redirect('/auth/edit') get '.well-known/keybase-proof-config', to: 'well_known/keybase_proof_config#show' + get '/nodeinfo/2.0', to: 'well_known/nodeinfo#show', as: :nodeinfo_schema + get 'manifest', to: 'manifests#show', defaults: { format: 'json' } get 'intent', to: 'intents#show' get 'custom.css', to: 'custom_css#show', as: :custom_css + resource :instance_actor, path: 'actor', only: [:show] do + resource :inbox, only: [:create], module: :activitypub + end + devise_scope :user do get '/invite/:invite_code', to: 'auth/registrations#new', as: :public_invite - match '/auth/finish_signup' => 'auth/confirmations#finish_signup', via: [:get, :patch], as: :finish_signup + + namespace :auth do + resource :setup, only: [:show, :update], controller: :setup + resource :challenge, only: [:create], controller: :challenges + end end devise_for :users, path: 'auth', controllers: { @@ -45,12 +60,6 @@ Rails.application.routes.draw do get '/authorize_follow', to: redirect { |_, request| "/authorize_interaction?#{request.params.to_query}" } resources :accounts, path: 'users', only: [:show], param: :username do - resources :stream_entries, path: 'updates', only: [:show] do - member do - get :embed - end - end - get :remote_follow, to: 'remote_follow#new' post :remote_follow, to: 'remote_follow#create' @@ -58,8 +67,9 @@ Rails.application.routes.draw do member do get :activity get :embed - get :replies end + + resources :replies, only: [:index], module: :activitypub end resources :followers, only: [:index], controller: :follower_accounts @@ -129,8 +139,13 @@ Rails.application.routes.draw do resources :flavours, only: [:index, :show, :update], param: :flavour resource :delete, only: [:show, :destroy] - resource :migration, only: [:show, :update] + resource :migration, only: [:show, :create] + namespace :migration do + resource :redirect, only: [:new, :create, :destroy] + end + + resources :aliases, only: [:index, :create, :destroy] resources :sessions, only: [:destroy] resources :featured_tags, only: [:index, :create, :destroy] end @@ -148,16 +163,18 @@ Rails.application.routes.draw do get '/public', to: 'public_timelines#show', as: :public_timeline get '/media_proxy/:id/(*any)', to: 'media_proxy#show', as: :media_proxy - # Remote follow - resource :remote_unfollow, only: [:create] resource :authorize_interaction, only: [:show, :create] resource :share, only: [:show, :create] namespace :admin do get '/dashboard', to: 'dashboard#index' - resources :subscriptions, only: [:index] - resources :domain_blocks, only: [:new, :create, :show, :destroy] + resources :domain_allows, only: [:new, :create, :show, :destroy] + resources :domain_blocks, only: [:new, :create, :show, :destroy, :update] do + member do + get :edit + end + end resources :email_domain_blocks, only: [:index, :new, :create, :destroy] resources :action_logs, only: [:index] resources :warning_presets, except: [:new] @@ -193,8 +210,6 @@ Rails.application.routes.draw do resources :accounts, only: [:index, :show] do member do - post :subscribe - post :unsubscribe post :enable post :unsilence post :unsuspend @@ -238,20 +253,19 @@ Rails.application.routes.draw do resource :two_factor_authentication, only: [:destroy] end - resources :custom_emojis, only: [:index, :new, :create, :update, :destroy] do - member do - post :copy - post :enable - post :disable + resources :custom_emojis, only: [:index, :new, :create] do + collection do + post :batch end end resources :account_moderation_notes, only: [:create, :destroy] - resources :tags, only: [:index] do - member do - post :hide - post :unhide + resources :tags, only: [:index, :show, :update] do + collection do + post :approve_all + post :reject_all + post :batch end end end @@ -259,16 +273,6 @@ Rails.application.routes.draw do get '/admin', to: redirect('/admin/dashboard', status: 302) namespace :api do - # PubSubHubbub outgoing subscriptions - resources :subscriptions, only: [:show] - post '/subscriptions/:id', to: 'subscriptions#update' - - # PubSubHubbub incoming subscriptions - post '/push', to: 'push#update', as: :push - - # Salmon - post '/salmon/:id', to: 'salmon#update', as: :salmon - # OEmbed get '/oembed', to: 'oembed#show', as: :oembed @@ -299,7 +303,6 @@ Rails.application.routes.draw do member do get :context - get :card end end @@ -323,9 +326,6 @@ Rails.application.routes.draw do end end - get '/search', to: 'search#index', as: :search - - resources :follows, only: [:create] resources :media, only: [:create, :update] resources :blocks, only: [:index] resources :mutes, only: [:index] do @@ -336,8 +336,10 @@ Rails.application.routes.draw do resources :favourites, only: [:index] resources :bookmarks, only: [:index] resources :reports, only: [:create] + resources :trends, only: [:index] resources :filters, only: [:index, :create, :show, :update, :destroy] resources :endorsements, only: [:index] + resources :markers, only: [:index, :create] namespace :apps do get :verify_credentials, to: 'credentials#show' @@ -351,6 +353,7 @@ Rails.application.routes.draw do end resource :domain_blocks, only: [:show, :create, :destroy] + resource :directory, only: [:show] resources :follow_requests, only: [:index] do member do @@ -362,7 +365,6 @@ Rails.application.routes.draw do resources :notifications, only: [:index, :show, :destroy] do collection do post :clear - post :dismiss # Deprecated delete :destroy_multiple end @@ -402,6 +404,12 @@ Rails.application.routes.draw do resource :accounts, only: [:show, :create, :destroy], controller: 'lists/accounts' end + namespace :featured_tags do + get :suggestions, to: 'suggestions#index' + end + + resources :featured_tags, only: [:index, :create, :destroy] + resources :polls, only: [:create, :show] do resources :votes, only: :create, controller: 'polls/votes' end @@ -409,6 +417,29 @@ Rails.application.routes.draw do namespace :push do resource :subscription, only: [:create, :show, :update, :destroy] end + + namespace :admin do + resources :accounts, only: [:index, :show] do + member do + post :enable + post :unsilence + post :unsuspend + post :approve + post :reject + end + + resource :action, only: [:create], controller: 'account_actions' + end + + resources :reports, only: [:index, :show] do + member do + post :assign_to_self + post :unassign + post :reopen + post :resolve + end + end + end end namespace :v2 do @@ -428,14 +459,10 @@ Rails.application.routes.draw do get '/web/(*any)', to: 'home#index', as: :web - get '/about', to: 'about#show' - get '/about/more', to: 'about#more' - get '/terms', to: 'about#terms' - - root 'home#index' + get '/about', to: 'about#show' + get '/about/more', to: 'about#more' + get '/terms', to: 'about#terms' - match '*unmatched_route', - via: :all, - to: 'application#raise_not_found', - format: false + match '/', via: [:post, :put, :patch, :delete], to: 'application#raise_not_found', format: false + match '*unmatched_route', via: :all, to: 'application#raise_not_found', format: false end diff --git a/config/settings.yml b/config/settings.yml index 97da9883e..3cca40cbd 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -29,6 +29,7 @@ defaults: &defaults reduce_motion: false show_application: false system_font_ui: false + system_emoji_font: false noindex: false hide_followers_count: false enable_keybase: true @@ -36,6 +37,11 @@ defaults: &defaults skin: 'default' aggregate_reblogs: true advanced_layout: false + use_blurhash: true + use_pending_items: false + trends: true + trendable_by_default: false + crop_images: true notification_emails: follow: false reblog: false @@ -45,6 +51,7 @@ defaults: &defaults digest: true report: true pending_account: true + trending_tag: true interactions: must_be_follower: false must_be_following: false @@ -66,6 +73,9 @@ defaults: &defaults show_reblogs_in_public_timelines: false show_replies_in_public_timelines: false default_content_type: 'text/plain' + spam_check_enabled: true + show_domain_blocks: 'disabled' + show_domain_blocks_rationale: 'disabled' development: <<: *defaults diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 0ec1742ab..5de25de23 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -9,9 +9,9 @@ scheduled_statuses_scheduler: every: '5m' class: Scheduler::ScheduledStatusesScheduler - subscriptions_scheduler: - cron: '<%= Random.rand(0..59) %> <%= Random.rand(4..6) %> * * *' - class: Scheduler::SubscriptionsScheduler + trending_tags_scheduler: + every: '5m' + class: Scheduler::TrendingTagsScheduler media_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' class: Scheduler::MediaCleanupScheduler @@ -24,9 +24,6 @@ user_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(4..6) %> * * *' class: Scheduler::UserCleanupScheduler - subscriptions_cleanup_scheduler: - cron: '<%= Random.rand(0..59) %> <%= Random.rand(1..3) %> * * 0' - class: Scheduler::SubscriptionsCleanupScheduler ip_cleanup_scheduler: cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *' class: Scheduler::IpCleanupScheduler diff --git a/config/webpack/development.js b/config/webpack/development.js index 1e50a4f46..56f6e43f0 100644 --- a/config/webpack/development.js +++ b/config/webpack/development.js @@ -56,5 +56,6 @@ module.exports = merge(sharedConfig, { settings.dev_server.watch_options, watchOptions ), + writeToDisk: filePath => /ocr/.test(filePath), }, }); diff --git a/config/webpack/rules/css.js b/config/webpack/rules/css.js index f9b87de9b..6ecfb3164 100644 --- a/config/webpack/rules/css.js +++ b/config/webpack/rules/css.js @@ -9,7 +9,6 @@ module.exports = { options: { sourceMap: true, importLoaders: 2, - localIdentName: '[name]__[local]___[hash:base64:5]', }, }, { @@ -21,7 +20,9 @@ module.exports = { { loader: 'sass-loader', options: { - includePaths: ['app/javascript'], + sassOptions: { + includePaths: ['app/javascript'], + }, implementation: require('sass'), sourceMap: true, }, diff --git a/config/webpack/shared.js b/config/webpack/shared.js index b6e2537b1..1741ffdb9 100644 --- a/config/webpack/shared.js +++ b/config/webpack/shared.js @@ -5,6 +5,7 @@ const { basename, dirname, join, relative, resolve } = require('path'); const { sync } = require('glob'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const AssetsManifestPlugin = require('webpack-assets-manifest'); +const CopyPlugin = require('copy-webpack-plugin'); const { env, settings, core, flavours, output } = require('./configuration.js'); const rules = require('./rules'); const localePacks = require('./generateLocalePacks'); @@ -109,6 +110,10 @@ module.exports = { writeToDisk: true, publicPath: true, }), + new CopyPlugin([ + { from: 'node_modules/tesseract.js/dist/worker.min.js', to: 'ocr' }, + { from: 'node_modules/tesseract.js-core/tesseract-core.wasm.js', to: 'ocr' }, + ]), ], resolve: { diff --git a/config/webpack/test.js b/config/webpack/tests.js index 8b56eb92f..8b56eb92f 100644 --- a/config/webpack/test.js +++ b/config/webpack/tests.js diff --git a/crowdin.yml b/crowdin.yml index f94417f2e..88a24d621 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,4 +1,4 @@ -commit_message: "[ci skip]" +commit_message: '[ci skip]' files: - source: /app/javascript/mastodon/locales/en.json translation: /app/javascript/mastodon/locales/%two_letters_code%.json diff --git a/db/migrate/20161202132159_add_in_reply_to_account_id_to_statuses.rb b/db/migrate/20161202132159_add_in_reply_to_account_id_to_statuses.rb index 2c24b53d0..3a559ccd6 100644 --- a/db/migrate/20161202132159_add_in_reply_to_account_id_to_statuses.rb +++ b/db/migrate/20161202132159_add_in_reply_to_account_id_to_statuses.rb @@ -3,7 +3,7 @@ class AddInReplyToAccountIdToStatuses < ActiveRecord::Migration[5.0] add_column :statuses, :in_reply_to_account_id, :integer, null: true, default: nil ActiveRecord::Base.transaction do - Status.where.not(in_reply_to_id: nil).includes(:thread).find_each do |status| + Status.unscoped.where.not(in_reply_to_id: nil).includes(:thread).find_each do |status| next if status.thread.nil? status.in_reply_to_account_id = status.thread.account_id diff --git a/db/migrate/20170209184350_add_reply_to_statuses.rb b/db/migrate/20170209184350_add_reply_to_statuses.rb index c5074728b..b8b5c1306 100644 --- a/db/migrate/20170209184350_add_reply_to_statuses.rb +++ b/db/migrate/20170209184350_add_reply_to_statuses.rb @@ -1,7 +1,7 @@ class AddReplyToStatuses < ActiveRecord::Migration[5.0] def up add_column :statuses, :reply, :boolean, nil: false, default: false - Status.update_all('reply = (in_reply_to_id IS NOT NULL)') + Status.unscoped.update_all('reply = (in_reply_to_id IS NOT NULL)') end def down diff --git a/db/migrate/20170918125918_ids_to_bigints.rb b/db/migrate/20170918125918_ids_to_bigints.rb index c6feed8f9..8e19468db 100644 --- a/db/migrate/20170918125918_ids_to_bigints.rb +++ b/db/migrate/20170918125918_ids_to_bigints.rb @@ -5,70 +5,70 @@ class IdsToBigints < ActiveRecord::Migration[5.1] disable_ddl_transaction! - INCLUDED_COLUMNS = [ - [:account_domain_blocks, :account_id], - [:account_domain_blocks, :id], - [:accounts, :id], - [:blocks, :account_id], - [:blocks, :id], - [:blocks, :target_account_id], - [:conversation_mutes, :account_id], - [:conversation_mutes, :id], - [:domain_blocks, :id], - [:favourites, :account_id], - [:favourites, :id], - [:favourites, :status_id], - [:follow_requests, :account_id], - [:follow_requests, :id], - [:follow_requests, :target_account_id], - [:follows, :account_id], - [:follows, :id], - [:follows, :target_account_id], - [:imports, :account_id], - [:imports, :id], - [:media_attachments, :account_id], - [:media_attachments, :id], - [:mentions, :account_id], - [:mentions, :id], - [:mutes, :account_id], - [:mutes, :id], - [:mutes, :target_account_id], - [:notifications, :account_id], - [:notifications, :from_account_id], - [:notifications, :id], - [:oauth_access_grants, :application_id], - [:oauth_access_grants, :id], - [:oauth_access_grants, :resource_owner_id], - [:oauth_access_tokens, :application_id], - [:oauth_access_tokens, :id], - [:oauth_access_tokens, :resource_owner_id], - [:oauth_applications, :id], - [:oauth_applications, :owner_id], - [:reports, :account_id], - [:reports, :action_taken_by_account_id], - [:reports, :id], - [:reports, :target_account_id], - [:session_activations, :access_token_id], - [:session_activations, :user_id], - [:session_activations, :web_push_subscription_id], - [:settings, :id], - [:settings, :thing_id], - [:statuses, :account_id], - [:statuses, :application_id], - [:statuses, :in_reply_to_account_id], - [:stream_entries, :account_id], - [:stream_entries, :id], - [:subscriptions, :account_id], - [:subscriptions, :id], - [:tags, :id], - [:users, :account_id], - [:users, :id], - [:web_settings, :id], - [:web_settings, :user_id], - ] - INCLUDED_COLUMNS << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards) - def migrate_columns(to_type) + included_columns = [ + [:account_domain_blocks, :account_id], + [:account_domain_blocks, :id], + [:accounts, :id], + [:blocks, :account_id], + [:blocks, :id], + [:blocks, :target_account_id], + [:conversation_mutes, :account_id], + [:conversation_mutes, :id], + [:domain_blocks, :id], + [:favourites, :account_id], + [:favourites, :id], + [:favourites, :status_id], + [:follow_requests, :account_id], + [:follow_requests, :id], + [:follow_requests, :target_account_id], + [:follows, :account_id], + [:follows, :id], + [:follows, :target_account_id], + [:imports, :account_id], + [:imports, :id], + [:media_attachments, :account_id], + [:media_attachments, :id], + [:mentions, :account_id], + [:mentions, :id], + [:mutes, :account_id], + [:mutes, :id], + [:mutes, :target_account_id], + [:notifications, :account_id], + [:notifications, :from_account_id], + [:notifications, :id], + [:oauth_access_grants, :application_id], + [:oauth_access_grants, :id], + [:oauth_access_grants, :resource_owner_id], + [:oauth_access_tokens, :application_id], + [:oauth_access_tokens, :id], + [:oauth_access_tokens, :resource_owner_id], + [:oauth_applications, :id], + [:oauth_applications, :owner_id], + [:reports, :account_id], + [:reports, :action_taken_by_account_id], + [:reports, :id], + [:reports, :target_account_id], + [:session_activations, :access_token_id], + [:session_activations, :user_id], + [:session_activations, :web_push_subscription_id], + [:settings, :id], + [:settings, :thing_id], + [:statuses, :account_id], + [:statuses, :application_id], + [:statuses, :in_reply_to_account_id], + [:stream_entries, :account_id], + [:stream_entries, :id], + [:subscriptions, :account_id], + [:subscriptions, :id], + [:tags, :id], + [:users, :account_id], + [:users, :id], + [:web_settings, :id], + [:web_settings, :user_id], + ] + included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards) + # Print out a warning that this will probably take a while. say '' say 'WARNING: This migration may take a *long* time for large instances' @@ -86,7 +86,7 @@ class IdsToBigints < ActiveRecord::Migration[5.1] sleep 1 end - tables = INCLUDED_COLUMNS.map(&:first).uniq + tables = included_columns.map(&:first).uniq table_sizes = {} # Sort tables by their size @@ -94,7 +94,7 @@ class IdsToBigints < ActiveRecord::Migration[5.1] table_sizes[table] = estimate_rows_in_table(table) end - ordered_columns = INCLUDED_COLUMNS.sort_by do |col_parts| + ordered_columns = included_columns.sort_by do |col_parts| [-table_sizes[col_parts.first], col_parts.last] end diff --git a/db/migrate/20180410220657_create_bookmarks.rb b/db/migrate/20180410220657_create_bookmarks.rb index 08d22c10d..bc79022e4 100644 --- a/db/migrate/20180410220657_create_bookmarks.rb +++ b/db/migrate/20180410220657_create_bookmarks.rb @@ -1,3 +1,6 @@ +# This migration is a duplicate of 20180831171112 and may get ignored, see +# config/initializers/0_duplicate_migrations.rb + class CreateBookmarks < ActiveRecord::Migration[5.1] def change create_table :bookmarks do |t| @@ -7,8 +10,11 @@ class CreateBookmarks < ActiveRecord::Migration[5.1] t.timestamps end - safety_assured { add_foreign_key :bookmarks, :accounts, column: :account_id, on_delete: :cascade } - safety_assured { add_foreign_key :bookmarks, :statuses, column: :status_id, on_delete: :cascade } + safety_assured do + add_foreign_key :bookmarks, :accounts, column: :account_id, on_delete: :cascade + add_foreign_key :bookmarks, :statuses, column: :status_id, on_delete: :cascade + end + add_index :bookmarks, [:account_id, :status_id], unique: true end end diff --git a/db/migrate/20180528141303_fix_accounts_unique_index.rb b/db/migrate/20180528141303_fix_accounts_unique_index.rb index bd4e158b7..bbbf28d81 100644 --- a/db/migrate/20180528141303_fix_accounts_unique_index.rb +++ b/db/migrate/20180528141303_fix_accounts_unique_index.rb @@ -12,6 +12,11 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2] end end + class StreamEntry < ApplicationRecord + # Dummy class, to make migration possible across version changes + belongs_to :account, inverse_of: :stream_entries + end + disable_ddl_transaction! def up diff --git a/db/migrate/20180831171112_create_bookmarks.rb b/db/migrate/20180831171112_create_bookmarks.rb new file mode 100644 index 000000000..5d587b7e9 --- /dev/null +++ b/db/migrate/20180831171112_create_bookmarks.rb @@ -0,0 +1,20 @@ +# This migration is a duplicate of 20180410220657 and may get ignored, see +# config/initializers/0_duplicate_migrations.rb + +class CreateBookmarks < ActiveRecord::Migration[5.1] + def change + create_table :bookmarks do |t| + t.references :account, null: false + t.references :status, null: false + + t.timestamps + end + + safety_assured do + add_foreign_key :bookmarks, :accounts, column: :account_id, on_delete: :cascade + add_foreign_key :bookmarks, :statuses, column: :status_id, on_delete: :cascade + end + + add_index :bookmarks, [:account_id, :status_id], unique: true + end +end diff --git a/db/migrate/20181024224956_migrate_account_conversations.rb b/db/migrate/20181024224956_migrate_account_conversations.rb index b718f9e1d..9f6c94fd1 100644 --- a/db/migrate/20181024224956_migrate_account_conversations.rb +++ b/db/migrate/20181024224956_migrate_account_conversations.rb @@ -1,6 +1,66 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] disable_ddl_transaction! + class Mention < ApplicationRecord + belongs_to :account, inverse_of: :mentions + belongs_to :status, -> { unscope(where: :deleted_at) } + + delegate( + :username, + :acct, + to: :account, + prefix: true + ) + end + + class Notification < ApplicationRecord + belongs_to :account, optional: true + belongs_to :activity, polymorphic: true, optional: true + + belongs_to :status, foreign_type: 'Status', foreign_key: 'activity_id', optional: true + belongs_to :mention, foreign_type: 'Mention', foreign_key: 'activity_id', optional: true + + def target_status + mention&.status + end + end + + class AccountConversation < ApplicationRecord + belongs_to :account + belongs_to :conversation + belongs_to :last_status, -> { unscope(where: :deleted_at) }, class_name: 'Status' + + before_validation :set_last_status + + class << self + def add_status(recipient, status) + conversation = find_or_initialize_by(account: recipient, conversation_id: status.conversation_id, participant_account_ids: participants_from_status(recipient, status)) + + return conversation if conversation.status_ids.include?(status.id) + + conversation.status_ids << status.id + conversation.unread = status.account_id != recipient.id + conversation.save + conversation + rescue ActiveRecord::StaleObjectError + retry + end + + private + + def participants_from_status(recipient, status) + ((status.active_mentions.pluck(:account_id) + [status.account_id]).uniq - [recipient.id]).sort + end + end + + private + + def set_last_status + self.status_ids = status_ids.sort + self.last_status_id = status_ids.last + end + end + def up say '' say 'WARNING: This migration may take a *long* time for large instances' @@ -52,6 +112,6 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2] end def notifications_about_direct_statuses - Notification.joins(mention: :status).where(activity_type: 'Mention', statuses: { visibility: :direct }) + Notification.joins('INNER JOIN mentions ON mentions.id = notifications.activity_id INNER JOIN statuses ON statuses.id = mentions.status_id').where(activity_type: 'Mention', statuses: { visibility: :direct }) end end diff --git a/db/migrate/20190403141604_add_comment_to_invites.rb b/db/migrate/20190403141604_add_comment_to_invites.rb new file mode 100644 index 000000000..f0d7b1dcd --- /dev/null +++ b/db/migrate/20190403141604_add_comment_to_invites.rb @@ -0,0 +1,5 @@ +class AddCommentToInvites < ActiveRecord::Migration[5.2] + def change + add_column :invites, :comment, :text + end +end diff --git a/db/migrate/20190627222225_create_custom_emoji_categories.rb b/db/migrate/20190627222225_create_custom_emoji_categories.rb new file mode 100644 index 000000000..4713793e6 --- /dev/null +++ b/db/migrate/20190627222225_create_custom_emoji_categories.rb @@ -0,0 +1,9 @@ +class CreateCustomEmojiCategories < ActiveRecord::Migration[5.2] + def change + create_table :custom_emoji_categories do |t| + t.string :name, index: { unique: true } + + t.timestamps + end + end +end diff --git a/db/migrate/20190627222826_add_category_id_to_custom_emojis.rb b/db/migrate/20190627222826_add_category_id_to_custom_emojis.rb new file mode 100644 index 000000000..873b4d05f --- /dev/null +++ b/db/migrate/20190627222826_add_category_id_to_custom_emojis.rb @@ -0,0 +1,5 @@ +class AddCategoryIdToCustomEmojis < ActiveRecord::Migration[5.2] + def change + add_column :custom_emojis, :category_id, :bigint + end +end diff --git a/db/migrate/20190701022101_add_trust_level_to_accounts.rb b/db/migrate/20190701022101_add_trust_level_to_accounts.rb new file mode 100644 index 000000000..917486d2e --- /dev/null +++ b/db/migrate/20190701022101_add_trust_level_to_accounts.rb @@ -0,0 +1,5 @@ +class AddTrustLevelToAccounts < ActiveRecord::Migration[5.2] + def change + add_column :accounts, :trust_level, :integer + end +end diff --git a/db/migrate/20190705002136_create_domain_allows.rb b/db/migrate/20190705002136_create_domain_allows.rb new file mode 100644 index 000000000..83b0728d9 --- /dev/null +++ b/db/migrate/20190705002136_create_domain_allows.rb @@ -0,0 +1,9 @@ +class CreateDomainAllows < ActiveRecord::Migration[5.2] + def change + create_table :domain_allows do |t| + t.string :domain, default: '', null: false, index: { unique: true } + + t.timestamps + end + end +end diff --git a/db/migrate/20190715164535_add_instance_actor.rb b/db/migrate/20190715164535_add_instance_actor.rb new file mode 100644 index 000000000..a26d54949 --- /dev/null +++ b/db/migrate/20190715164535_add_instance_actor.rb @@ -0,0 +1,9 @@ +class AddInstanceActor < ActiveRecord::Migration[5.2] + def up + Account.create!(id: -99, actor_type: 'Application', locked: true, username: Rails.configuration.x.local_domain) + end + + def down + Account.find_by(id: -99, actor_type: 'Application').destroy! + end +end diff --git a/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb b/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb new file mode 100644 index 000000000..057fc86ba --- /dev/null +++ b/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb @@ -0,0 +1,28 @@ +class AddCaseInsensitiveIndexToTags < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + Tag.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM tags GROUP BY lower(name) HAVING count(*) > 1').to_hash.each do |row| + canonical_tag_id = row['ids'].split(',').first + redundant_tag_ids = row['ids'].split(',')[1..-1] + + safety_assured do + execute "UPDATE accounts_tags AS t0 SET tag_id = #{canonical_tag_id} WHERE tag_id IN (#{redundant_tag_ids.join(', ')}) AND NOT EXISTS (SELECT t1.tag_id FROM accounts_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id)" + execute "UPDATE statuses_tags AS t0 SET tag_id = #{canonical_tag_id} WHERE tag_id IN (#{redundant_tag_ids.join(', ')}) AND NOT EXISTS (SELECT t1.tag_id FROM statuses_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.status_id = t0.status_id)" + execute "UPDATE featured_tags AS t0 SET tag_id = #{canonical_tag_id} WHERE tag_id IN (#{redundant_tag_ids.join(', ')}) AND NOT EXISTS (SELECT t1.tag_id FROM featured_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id)" + end + + Tag.where(id: redundant_tag_ids).in_batches.delete_all + end + + safety_assured { execute 'CREATE UNIQUE INDEX CONCURRENTLY index_tags_on_name_lower ON tags (lower(name))' } + remove_index :tags, name: 'index_tags_on_name' + remove_index :tags, name: 'hashtag_search_index' + end + + def down + add_index :tags, :name, unique: true, algorithm: :concurrently + safety_assured { execute 'CREATE INDEX CONCURRENTLY hashtag_search_index ON tags (name text_pattern_ops)' } + remove_index :tags, name: 'index_tags_on_name_lower' + end +end diff --git a/db/migrate/20190729185330_add_score_to_tags.rb b/db/migrate/20190729185330_add_score_to_tags.rb new file mode 100644 index 000000000..75fee4b57 --- /dev/null +++ b/db/migrate/20190729185330_add_score_to_tags.rb @@ -0,0 +1,5 @@ +class AddScoreToTags < ActiveRecord::Migration[5.2] + def change + add_column :tags, :score, :int + end +end diff --git a/db/migrate/20190805123746_add_capabilities_to_tags.rb b/db/migrate/20190805123746_add_capabilities_to_tags.rb new file mode 100644 index 000000000..43c7763b1 --- /dev/null +++ b/db/migrate/20190805123746_add_capabilities_to_tags.rb @@ -0,0 +1,9 @@ +class AddCapabilitiesToTags < ActiveRecord::Migration[5.2] + def change + add_column :tags, :usable, :boolean + add_column :tags, :trendable, :boolean + add_column :tags, :listable, :boolean + add_column :tags, :reviewed_at, :datetime + add_column :tags, :requested_review_at, :datetime + end +end diff --git a/db/migrate/20190807135426_add_comments_to_domain_blocks.rb b/db/migrate/20190807135426_add_comments_to_domain_blocks.rb new file mode 100644 index 000000000..b660a71ad --- /dev/null +++ b/db/migrate/20190807135426_add_comments_to_domain_blocks.rb @@ -0,0 +1,7 @@ +class AddCommentsToDomainBlocks < ActiveRecord::Migration[5.2] + def change + add_column :domain_blocks, :private_comment, :text + add_column :domain_blocks, :public_comment, :text + end +end + diff --git a/db/migrate/20190815225426_add_last_status_at_to_tags.rb b/db/migrate/20190815225426_add_last_status_at_to_tags.rb new file mode 100644 index 000000000..d83537c47 --- /dev/null +++ b/db/migrate/20190815225426_add_last_status_at_to_tags.rb @@ -0,0 +1,6 @@ +class AddLastStatusAtToTags < ActiveRecord::Migration[5.2] + def change + add_column :tags, :last_status_at, :datetime + add_column :tags, :last_trend_at, :datetime + end +end diff --git a/db/migrate/20190819134503_add_deleted_at_to_statuses.rb b/db/migrate/20190819134503_add_deleted_at_to_statuses.rb new file mode 100644 index 000000000..5af109097 --- /dev/null +++ b/db/migrate/20190819134503_add_deleted_at_to_statuses.rb @@ -0,0 +1,5 @@ +class AddDeletedAtToStatuses < ActiveRecord::Migration[5.2] + def change + add_column :statuses, :deleted_at, :datetime + end +end diff --git a/db/migrate/20190820003045_update_statuses_index.rb b/db/migrate/20190820003045_update_statuses_index.rb new file mode 100644 index 000000000..5c2ea1f6a --- /dev/null +++ b/db/migrate/20190820003045_update_statuses_index.rb @@ -0,0 +1,13 @@ +class UpdateStatusesIndex < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], where: 'deleted_at IS NULL', order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20190820 } + remove_index :statuses, name: :index_statuses_20180106 + end + + def down + safety_assured { add_index :statuses, [:account_id, :id, :visibility, :updated_at], order: { id: :desc }, algorithm: :concurrently, name: :index_statuses_20180106 } + remove_index :statuses, name: :index_statuses_20190820 + end +end diff --git a/db/migrate/20190823221802_add_local_index_to_statuses.rb b/db/migrate/20190823221802_add_local_index_to_statuses.rb new file mode 100644 index 000000000..deca25c35 --- /dev/null +++ b/db/migrate/20190823221802_add_local_index_to_statuses.rb @@ -0,0 +1,11 @@ +class AddLocalIndexToStatuses < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + add_index :statuses, [:id, :account_id], name: :index_statuses_local_20190824, algorithm: :concurrently, order: { id: :desc }, where: '(local OR (uri IS NULL)) AND deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' + end + + def down + remove_index :statuses, name: :index_statuses_local_20190824 + end +end diff --git a/db/migrate/20190901035623_add_max_score_to_tags.rb b/db/migrate/20190901035623_add_max_score_to_tags.rb new file mode 100644 index 000000000..f936e9871 --- /dev/null +++ b/db/migrate/20190901035623_add_max_score_to_tags.rb @@ -0,0 +1,6 @@ +class AddMaxScoreToTags < ActiveRecord::Migration[5.2] + def change + add_column :tags, :max_score, :float + add_column :tags, :max_score_at, :datetime + end +end diff --git a/db/migrate/20190904222339_create_markers.rb b/db/migrate/20190904222339_create_markers.rb new file mode 100644 index 000000000..71ca70ac3 --- /dev/null +++ b/db/migrate/20190904222339_create_markers.rb @@ -0,0 +1,14 @@ +class CreateMarkers < ActiveRecord::Migration[5.2] + def change + create_table :markers do |t| + t.references :user, foreign_key: { on_delete: :cascade, index: false } + t.string :timeline, default: '', null: false + t.bigint :last_read_id, default: 0, null: false + t.integer :lock_version, default: 0, null: false + + t.timestamps + end + + add_index :markers, [:user_id, :timeline], unique: true + end +end diff --git a/db/migrate/20190914202517_create_account_migrations.rb b/db/migrate/20190914202517_create_account_migrations.rb new file mode 100644 index 000000000..cb9d71c09 --- /dev/null +++ b/db/migrate/20190914202517_create_account_migrations.rb @@ -0,0 +1,12 @@ +class CreateAccountMigrations < ActiveRecord::Migration[5.2] + def change + create_table :account_migrations do |t| + t.belongs_to :account, foreign_key: { on_delete: :cascade } + t.string :acct, null: false, default: '' + t.bigint :followers_count, null: false, default: 0 + t.belongs_to :target_account, foreign_key: { to_table: :accounts, on_delete: :nullify } + + t.timestamps + end + end +end diff --git a/db/migrate/20190915194355_create_account_aliases.rb b/db/migrate/20190915194355_create_account_aliases.rb new file mode 100644 index 000000000..32ce031d9 --- /dev/null +++ b/db/migrate/20190915194355_create_account_aliases.rb @@ -0,0 +1,11 @@ +class CreateAccountAliases < ActiveRecord::Migration[5.2] + def change + create_table :account_aliases do |t| + t.belongs_to :account, foreign_key: { on_delete: :cascade } + t.string :acct, null: false, default: '' + t.string :uri, null: false, default: '' + + t.timestamps + end + end +end diff --git a/db/migrate/20190917213523_add_remember_token_index.rb b/db/migrate/20190917213523_add_remember_token_index.rb new file mode 100644 index 000000000..c5b41ce64 --- /dev/null +++ b/db/migrate/20190917213523_add_remember_token_index.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddRememberTokenIndex < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def change + add_index :users, :remember_token, algorithm: :concurrently, unique: true + end +end diff --git a/db/migrate/20190927232842_add_voters_count_to_polls.rb b/db/migrate/20190927232842_add_voters_count_to_polls.rb new file mode 100644 index 000000000..846385700 --- /dev/null +++ b/db/migrate/20190927232842_add_voters_count_to_polls.rb @@ -0,0 +1,5 @@ +class AddVotersCountToPolls < ActiveRecord::Migration[5.2] + def change + add_column :polls, :voters_count, :bigint + end +end diff --git a/db/migrate/20191001213028_add_lock_version_to_account_stats.rb b/db/migrate/20191001213028_add_lock_version_to_account_stats.rb new file mode 100644 index 000000000..47f37cca2 --- /dev/null +++ b/db/migrate/20191001213028_add_lock_version_to_account_stats.rb @@ -0,0 +1,15 @@ +require Rails.root.join('lib', 'mastodon', 'migration_helpers') + +class AddLockVersionToAccountStats < ActiveRecord::Migration[5.2] + include Mastodon::MigrationHelpers + + disable_ddl_transaction! + + def up + safety_assured { add_column_with_default :account_stats, :lock_version, :integer, allow_null: false, default: 0 } + end + + def down + remove_column :account_stats, :lock_version + end +end diff --git a/db/migrate/20191007013357_update_pt_locales.rb b/db/migrate/20191007013357_update_pt_locales.rb new file mode 100644 index 000000000..b7288d38a --- /dev/null +++ b/db/migrate/20191007013357_update_pt_locales.rb @@ -0,0 +1,11 @@ +class UpdatePtLocales < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + User.where(locale: 'pt').in_batches.update_all(locale: 'pt-PT') + end + + def down + User.where(locale: 'pt-PT').in_batches.update_all(locale: 'pt') + end +end diff --git a/db/migrate/20191031163205_change_list_account_follow_nullable.rb b/db/migrate/20191031163205_change_list_account_follow_nullable.rb new file mode 100644 index 000000000..ff8911546 --- /dev/null +++ b/db/migrate/20191031163205_change_list_account_follow_nullable.rb @@ -0,0 +1,5 @@ +class ChangeListAccountFollowNullable < ActiveRecord::Migration[5.1] + def change + change_column_null :list_accounts, :follow_id, true + end +end diff --git a/db/post_migrate/20190706233204_drop_stream_entries.rb b/db/post_migrate/20190706233204_drop_stream_entries.rb new file mode 100644 index 000000000..1fecece05 --- /dev/null +++ b/db/post_migrate/20190706233204_drop_stream_entries.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class DropStreamEntries < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + drop_table :stream_entries + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/post_migrate/20190715031050_drop_subscriptions.rb b/db/post_migrate/20190715031050_drop_subscriptions.rb new file mode 100644 index 000000000..3719afe4a --- /dev/null +++ b/db/post_migrate/20190715031050_drop_subscriptions.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class DropSubscriptions < ActiveRecord::Migration[5.2] + def up + drop_table :subscriptions + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/post_migrate/20190901040524_remove_score_from_tags.rb b/db/post_migrate/20190901040524_remove_score_from_tags.rb new file mode 100644 index 000000000..a1112700b --- /dev/null +++ b/db/post_migrate/20190901040524_remove_score_from_tags.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class RemoveScoreFromTags < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def change + safety_assured do + remove_column :tags, :score, :int + remove_column :tags, :last_trend_at, :datetime + end + end +end diff --git a/db/post_migrate/20190927124642_remove_invalid_web_push_subscription.rb b/db/post_migrate/20190927124642_remove_invalid_web_push_subscription.rb new file mode 100644 index 000000000..c2397476a --- /dev/null +++ b/db/post_migrate/20190927124642_remove_invalid_web_push_subscription.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class RemoveInvalidWebPushSubscription < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + invalid_web_push_subscriptions = Web::PushSubscription.where(endpoint: '') + .or(Web::PushSubscription.where(key_p256dh: '')) + .or(Web::PushSubscription.where(key_auth: '')) + .preload(:session_activation) + invalid_web_push_subscriptions.find_each do |web_push_subscription| + web_push_subscription.session_activation&.update!(web_push_subscription_id: nil) + web_push_subscription.destroy! + end + end + + def down; end +end diff --git a/db/schema.rb b/db/schema.rb index aa02be55f..946f2c5e6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,20 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2019_05_29_143559) do +ActiveRecord::Schema.define(version: 2019_10_31_163205) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "account_aliases", force: :cascade do |t| + t.bigint "account_id" + t.string "acct", default: "", null: false + t.string "uri", default: "", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["account_id"], name: "index_account_aliases_on_account_id" + end + create_table "account_conversations", force: :cascade do |t| t.bigint "account_id" t.bigint "conversation_id" @@ -49,6 +58,17 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.index ["account_id"], name: "index_account_identity_proofs_on_account_id" end + create_table "account_migrations", force: :cascade do |t| + t.bigint "account_id" + t.string "acct", default: "", null: false + t.bigint "followers_count", default: 0, null: false + t.bigint "target_account_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["account_id"], name: "index_account_migrations_on_account_id" + t.index ["target_account_id"], name: "index_account_migrations_on_target_account_id" + end + create_table "account_moderation_notes", force: :cascade do |t| t.text "content", null: false t.bigint "account_id", null: false @@ -77,6 +97,7 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.datetime "last_status_at" + t.integer "lock_version", default: 0, null: false t.index ["account_id"], name: "index_account_stats_on_account_id", unique: true end @@ -148,6 +169,7 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.string "also_known_as", array: true t.datetime "silenced_at" t.datetime "suspended_at" + t.integer "trust_level" t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin t.index "lower((username)::text), lower((domain)::text)", name: "index_accounts_on_username_and_domain_lower", unique: true t.index ["moved_to_account_id"], name: "index_accounts_on_moved_to_account_id" @@ -218,6 +240,13 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.index ["uri"], name: "index_conversations_on_uri", unique: true end + create_table "custom_emoji_categories", force: :cascade do |t| + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["name"], name: "index_custom_emoji_categories_on_name", unique: true + end + create_table "custom_emojis", force: :cascade do |t| t.string "shortcode", default: "", null: false t.string "domain" @@ -231,6 +260,7 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.string "uri" t.string "image_remote_url" t.boolean "visible_in_picker", default: true, null: false + t.bigint "category_id" t.index ["shortcode", "domain"], name: "index_custom_emojis_on_shortcode_and_domain", unique: true end @@ -246,6 +276,13 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.index ["account_id"], name: "index_custom_filters_on_account_id" end + create_table "domain_allows", force: :cascade do |t| + t.string "domain", default: "", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["domain"], name: "index_domain_allows_on_domain", unique: true + end + create_table "domain_blocks", force: :cascade do |t| t.string "domain", default: "", null: false t.datetime "created_at", null: false @@ -253,6 +290,8 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.integer "severity", default: 0 t.boolean "reject_media", default: false, null: false t.boolean "reject_reports", default: false, null: false + t.text "private_comment" + t.text "public_comment" t.index ["domain"], name: "index_domain_blocks_on_domain", unique: true end @@ -336,6 +375,7 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.boolean "autofollow", default: false, null: false + t.text "comment" t.index ["code"], name: "index_invites_on_code", unique: true t.index ["user_id"], name: "index_invites_on_user_id" end @@ -343,7 +383,7 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do create_table "list_accounts", force: :cascade do |t| t.bigint "list_id", null: false t.bigint "account_id", null: false - t.bigint "follow_id", null: false + t.bigint "follow_id" t.index ["account_id", "list_id"], name: "index_list_accounts_on_account_id_and_list_id", unique: true t.index ["follow_id"], name: "index_list_accounts_on_follow_id" t.index ["list_id", "account_id"], name: "index_list_accounts_on_list_id_and_account_id" @@ -358,6 +398,17 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.index ["account_id"], name: "index_lists_on_account_id" end + create_table "markers", force: :cascade do |t| + t.bigint "user_id" + t.string "timeline", default: "", null: false + t.bigint "last_read_id", default: 0, null: false + t.integer "lock_version", default: 0, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id", "timeline"], name: "index_markers_on_user_id_and_timeline", unique: true + t.index ["user_id"], name: "index_markers_on_user_id" + end + create_table "media_attachments", force: :cascade do |t| t.bigint "status_id" t.string "file_file_name" @@ -490,6 +541,7 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "lock_version", default: 0, null: false + t.bigint "voters_count" t.index ["account_id"], name: "index_polls_on_account_id" t.index ["status_id"], name: "index_polls_on_status_id" end @@ -638,7 +690,9 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.boolean "local_only" t.bigint "poll_id" t.string "content_type" - t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20180106", order: { id: :desc } + t.datetime "deleted_at" + t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)" + t.index ["id", "account_id"], name: "index_statuses_local_20190824", order: { id: :desc }, where: "((local OR (uri IS NULL)) AND (deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))" t.index ["in_reply_to_account_id"], name: "index_statuses_on_in_reply_to_account_id" t.index ["in_reply_to_id"], name: "index_statuses_on_in_reply_to_id" t.index ["reblog_of_id", "account_id"], name: "index_statuses_on_reblog_of_id_and_account_id" @@ -680,8 +734,15 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.string "name", default: "", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index "lower((name)::text) text_pattern_ops", name: "hashtag_search_index" - t.index ["name"], name: "index_tags_on_name", unique: true + t.boolean "usable" + t.boolean "trendable" + t.boolean "listable" + t.datetime "reviewed_at" + t.datetime "requested_review_at" + t.datetime "last_status_at" + t.float "max_score" + t.datetime "max_score_at" + t.index "lower((name)::text)", name: "index_tags_on_name_lower", unique: true end create_table "tombstones", force: :cascade do |t| @@ -741,6 +802,7 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true t.index ["created_by_application_id"], name: "index_users_on_created_by_application_id" t.index ["email"], name: "index_users_on_email", unique: true + t.index ["remember_token"], name: "index_users_on_remember_token", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end @@ -765,10 +827,13 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do t.index ["user_id"], name: "index_web_settings_on_user_id", unique: true end + add_foreign_key "account_aliases", "accounts", on_delete: :cascade add_foreign_key "account_conversations", "accounts", on_delete: :cascade add_foreign_key "account_conversations", "conversations", on_delete: :cascade add_foreign_key "account_domain_blocks", "accounts", name: "fk_206c6029bd", on_delete: :cascade add_foreign_key "account_identity_proofs", "accounts", on_delete: :cascade + add_foreign_key "account_migrations", "accounts", column: "target_account_id", on_delete: :nullify + add_foreign_key "account_migrations", "accounts", on_delete: :cascade add_foreign_key "account_moderation_notes", "accounts" add_foreign_key "account_moderation_notes", "accounts", column: "target_account_id" add_foreign_key "account_pins", "accounts", column: "target_account_id", on_delete: :cascade @@ -802,6 +867,7 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do add_foreign_key "list_accounts", "follows", on_delete: :cascade add_foreign_key "list_accounts", "lists", on_delete: :cascade add_foreign_key "lists", "accounts", on_delete: :cascade + add_foreign_key "markers", "users", on_delete: :cascade add_foreign_key "media_attachments", "accounts", name: "fk_96dd81e81b", on_delete: :nullify add_foreign_key "media_attachments", "scheduled_statuses", on_delete: :nullify add_foreign_key "media_attachments", "statuses", on_delete: :nullify @@ -838,8 +904,6 @@ ActiveRecord::Schema.define(version: 2019_05_29_143559) do add_foreign_key "statuses", "statuses", column: "reblog_of_id", on_delete: :cascade add_foreign_key "statuses_tags", "statuses", on_delete: :cascade add_foreign_key "statuses_tags", "tags", name: "fk_3081861e21", on_delete: :cascade - add_foreign_key "stream_entries", "accounts", name: "fk_5659b17554", on_delete: :cascade - add_foreign_key "subscriptions", "accounts", name: "fk_9847d1cbb5", on_delete: :cascade add_foreign_key "tombstones", "accounts", on_delete: :cascade add_foreign_key "user_invite_requests", "users", on_delete: :cascade add_foreign_key "users", "accounts", name: "fk_50500f500d", on_delete: :cascade diff --git a/db/seeds.rb b/db/seeds.rb index 9a6e9dd78..0bfb5d0db 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,7 +1,10 @@ -Doorkeeper::Application.create!(name: 'Web', superapp: true, redirect_uri: Doorkeeper.configuration.native_redirect_uri, scopes: 'read write follow') +Doorkeeper::Application.create!(name: 'Web', superapp: true, redirect_uri: Doorkeeper.configuration.native_redirect_uri, scopes: 'read write follow push') + +domain = ENV['LOCAL_DOMAIN'] || Rails.configuration.x.local_domain +account = Account.find_or_initialize_by(id: -99, actor_type: 'Application', locked: true, username: domain) +account.save! if Rails.env.development? - domain = ENV['LOCAL_DOMAIN'] || Rails.configuration.x.local_domain admin = Account.where(username: 'admin').first_or_initialize(username: 'admin') admin.save(validate: false) User.where(email: "admin@#{domain}").first_or_initialize(email: "admin@#{domain}", password: 'mastodonadmin', password_confirmation: 'mastodonadmin', confirmed_at: Time.now.utc, admin: true, account: admin, agreement: true, approved: true).save! diff --git a/dist/nginx.conf b/dist/nginx.conf index 7c429bad4..b6591e897 100644 --- a/dist/nginx.conf +++ b/dist/nginx.conf @@ -19,7 +19,7 @@ server { listen [::]:443 ssl http2; server_name example.com; - ssl_protocols TLSv1.2; + ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; diff --git a/docker-compose.yml b/docker-compose.yml index 93d47f1a0..20649e424 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,12 +38,12 @@ services: image: tootsuite/mastodon restart: always env_file: .env.production - command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000 -b '0.0.0.0'" + command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" networks: - external_network - internal_network healthcheck: - test: ["CMD-SHELL", "wget -q --spider --header 'x-forwarded-proto: https' --proxy=off localhost:3000/api/v1/instance || exit 1"] + test: ["CMD-SHELL", "wget -q --spider --proxy=off localhost:3000/health || exit 1"] ports: - "127.0.0.1:3000:3000" depends_on: @@ -58,12 +58,12 @@ services: image: tootsuite/mastodon restart: always env_file: .env.production - command: yarn start + command: node ./streaming networks: - external_network - internal_network healthcheck: - test: ["CMD-SHELL", "wget -q --spider --header 'x-forwarded-proto: https' --proxy=off localhost:4000/api/v1/streaming/health || exit 1"] + test: ["CMD-SHELL", "wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1"] ports: - "127.0.0.1:4000:4000" depends_on: diff --git a/lib/chewy/strategy/custom_sidekiq.rb b/lib/chewy/strategy/custom_sidekiq.rb new file mode 100644 index 000000000..3e54326ba --- /dev/null +++ b/lib/chewy/strategy/custom_sidekiq.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module Chewy + class Strategy + class CustomSidekiq < Base + class Worker + include ::Sidekiq::Worker + + sidekiq_options queue: 'pull' + + def perform(type, ids, options = {}) + options[:refresh] = !Chewy.disable_refresh_async if Chewy.disable_refresh_async + type.constantize.import!(ids, options) + end + end + + def update(type, objects, _options = {}) + return unless Chewy.enabled? + + ids = type.root.id ? Array.wrap(objects) : type.adapter.identify(objects) + + return if ids.empty? + + Worker.perform_async(type.name, ids) + end + + def leave; end + end + end +end diff --git a/lib/cli.rb b/lib/cli.rb index be276583d..fbdf49fc3 100644 --- a/lib/cli.rb +++ b/lib/cli.rb @@ -9,6 +9,7 @@ require_relative 'mastodon/search_cli' require_relative 'mastodon/settings_cli' require_relative 'mastodon/statuses_cli' require_relative 'mastodon/domains_cli' +require_relative 'mastodon/preview_cards_cli' require_relative 'mastodon/cache_cli' require_relative 'mastodon/version' @@ -42,6 +43,9 @@ module Mastodon desc 'domains SUBCOMMAND ...ARGS', 'Manage account domains' subcommand 'domains', Mastodon::DomainsCLI + desc 'preview_cards SUBCOMMAND ...ARGS', 'Manage preview cards' + subcommand 'preview_cards', Mastodon::PreviewCardsCLI + desc 'cache SUBCOMMAND ...ARGS', 'Manage cache' subcommand 'cache', Mastodon::CacheCLI diff --git a/lib/devise/ldap_authenticatable.rb b/lib/devise/ldap_authenticatable.rb deleted file mode 100644 index 6903d468d..000000000 --- a/lib/devise/ldap_authenticatable.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -require 'net/ldap' -require 'devise/strategies/authenticatable' - -module Devise - module Strategies - class LdapAuthenticatable < Authenticatable - def authenticate! - if params[:user] - ldap = Net::LDAP.new( - host: Devise.ldap_host, - port: Devise.ldap_port, - base: Devise.ldap_base, - encryption: { - method: Devise.ldap_method, - tls_options: tls_options, - }, - auth: { - method: :simple, - username: Devise.ldap_bind_dn, - password: Devise.ldap_password, - }, - connect_timeout: 10 - ) - - filter = format(Devise.ldap_search_filter, uid: Devise.ldap_uid, email: email) - - if (user_info = ldap.bind_as(base: Devise.ldap_base, filter: filter, password: password)) - user = User.ldap_get_user(user_info.first) - success!(user) - else - return fail(:invalid) - end - end - end - - def email - params[:user][:email] - end - - def password - params[:user][:password] - end - - def tls_options - OpenSSL::SSL::SSLContext::DEFAULT_PARAMS.tap do |options| - options[:verify_mode] = OpenSSL::SSL::VERIFY_NONE if Devise.ldap_tls_no_verify - end - end - end - end -end - -Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable) diff --git a/lib/devise/two_factor_ldap_authenticatable.rb b/lib/devise/two_factor_ldap_authenticatable.rb new file mode 100644 index 000000000..065aa2de8 --- /dev/null +++ b/lib/devise/two_factor_ldap_authenticatable.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require 'net/ldap' +require 'devise/strategies/base' + +module Devise + module Strategies + class TwoFactorLdapAuthenticatable < Base + def valid? + valid_params? && mapping.to.respond_to?(:authenticate_with_ldap) + end + + def authenticate! + resource = mapping.to.authenticate_with_ldap(params[scope]) + + if resource && !resource.otp_required_for_login? + success!(resource) + else + fail(:invalid) + end + end + + protected + + def valid_params? + params[scope] && params[scope][:password].present? + end + end + end +end + +Warden::Strategies.add(:two_factor_ldap_authenticatable, Devise::Strategies::TwoFactorLdapAuthenticatable) diff --git a/lib/devise/two_factor_pam_authenticatable.rb b/lib/devise/two_factor_pam_authenticatable.rb new file mode 100644 index 000000000..5ce723b33 --- /dev/null +++ b/lib/devise/two_factor_pam_authenticatable.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'devise/strategies/base' + +module Devise + module Strategies + class TwoFactorPamAuthenticatable < Base + def valid? + valid_params? && mapping.to.respond_to?(:authenticate_with_pam) + end + + def authenticate! + resource = mapping.to.authenticate_with_pam(params[scope]) + + if resource && !resource.otp_required_for_login? + success!(resource) + else + fail(:invalid) + end + end + + protected + + def valid_params? + params[scope] && params[scope][:password].present? + end + end + end +end + +Warden::Strategies.add(:two_factor_pam_authenticatable, Devise::Strategies::TwoFactorPamAuthenticatable) diff --git a/lib/json_ld/identity.rb b/lib/json_ld/identity.rb new file mode 100644 index 000000000..4fb3f8e9d --- /dev/null +++ b/lib/json_ld/identity.rb @@ -0,0 +1,87 @@ +# -*- encoding: utf-8 -*- +# frozen_string_literal: true +# This file generated automatically from http://w3id.org/identity/v1 +require 'json/ld' +class JSON::LD::Context + add_preloaded("http://w3id.org/identity/v1") do + new(term_definitions: { + "Credential" => TermDefinition.new("Credential", id: "https://w3id.org/credentials#Credential", simple: true), + "CryptographicKey" => TermDefinition.new("CryptographicKey", id: "https://w3id.org/security#Key", simple: true), + "CryptographicKeyCredential" => TermDefinition.new("CryptographicKeyCredential", id: "https://w3id.org/credentials#CryptographicKeyCredential", simple: true), + "EncryptedMessage" => TermDefinition.new("EncryptedMessage", id: "https://w3id.org/security#EncryptedMessage", simple: true), + "GraphSignature2012" => TermDefinition.new("GraphSignature2012", id: "https://w3id.org/security#GraphSignature2012", simple: true), + "Group" => TermDefinition.new("Group", id: "https://www.w3.org/ns/activitystreams#Group", simple: true), + "Identity" => TermDefinition.new("Identity", id: "https://w3id.org/identity#Identity", simple: true), + "LinkedDataSignature2015" => TermDefinition.new("LinkedDataSignature2015", id: "https://w3id.org/security#LinkedDataSignature2015", simple: true), + "Organization" => TermDefinition.new("Organization", id: "http://schema.org/Organization", simple: true), + "Person" => TermDefinition.new("Person", id: "http://schema.org/Person", simple: true), + "PostalAddress" => TermDefinition.new("PostalAddress", id: "http://schema.org/PostalAddress", simple: true), + "about" => TermDefinition.new("about", id: "http://schema.org/about", type_mapping: "@id"), + "accessControl" => TermDefinition.new("accessControl", id: "https://w3id.org/permissions#accessControl", type_mapping: "@id"), + "address" => TermDefinition.new("address", id: "http://schema.org/address", type_mapping: "@id"), + "addressCountry" => TermDefinition.new("addressCountry", id: "http://schema.org/addressCountry", simple: true), + "addressLocality" => TermDefinition.new("addressLocality", id: "http://schema.org/addressLocality", simple: true), + "addressRegion" => TermDefinition.new("addressRegion", id: "http://schema.org/addressRegion", simple: true), + "cipherAlgorithm" => TermDefinition.new("cipherAlgorithm", id: "https://w3id.org/security#cipherAlgorithm", simple: true), + "cipherData" => TermDefinition.new("cipherData", id: "https://w3id.org/security#cipherData", simple: true), + "cipherKey" => TermDefinition.new("cipherKey", id: "https://w3id.org/security#cipherKey", simple: true), + "claim" => TermDefinition.new("claim", id: "https://w3id.org/credentials#claim", type_mapping: "@id"), + "comment" => TermDefinition.new("comment", id: "http://www.w3.org/2000/01/rdf-schema#comment", simple: true), + "created" => TermDefinition.new("created", id: "http://purl.org/dc/terms/created", type_mapping: "http://www.w3.org/2001/XMLSchema#dateTime"), + "creator" => TermDefinition.new("creator", id: "http://purl.org/dc/terms/creator", type_mapping: "@id"), + "cred" => TermDefinition.new("cred", id: "https://w3id.org/credentials#", simple: true, prefix: true), + "credential" => TermDefinition.new("credential", id: "https://w3id.org/credentials#credential", type_mapping: "@id"), + "dc" => TermDefinition.new("dc", id: "http://purl.org/dc/terms/", simple: true, prefix: true), + "description" => TermDefinition.new("description", id: "http://schema.org/description", simple: true), + "digestAlgorithm" => TermDefinition.new("digestAlgorithm", id: "https://w3id.org/security#digestAlgorithm", simple: true), + "digestValue" => TermDefinition.new("digestValue", id: "https://w3id.org/security#digestValue", simple: true), + "domain" => TermDefinition.new("domain", id: "https://w3id.org/security#domain", simple: true), + "email" => TermDefinition.new("email", id: "http://schema.org/email", simple: true), + "expires" => TermDefinition.new("expires", id: "https://w3id.org/security#expiration", type_mapping: "http://www.w3.org/2001/XMLSchema#dateTime"), + "familyName" => TermDefinition.new("familyName", id: "http://schema.org/familyName", simple: true), + "givenName" => TermDefinition.new("givenName", id: "http://schema.org/givenName", simple: true), + "id" => TermDefinition.new("id", id: "@id", simple: true), + "identity" => TermDefinition.new("identity", id: "https://w3id.org/identity#", simple: true, prefix: true), + "identityService" => TermDefinition.new("identityService", id: "https://w3id.org/identity#identityService", type_mapping: "@id"), + "idp" => TermDefinition.new("idp", id: "https://w3id.org/identity#idp", type_mapping: "@id"), + "image" => TermDefinition.new("image", id: "http://schema.org/image", type_mapping: "@id"), + "initializationVector" => TermDefinition.new("initializationVector", id: "https://w3id.org/security#initializationVector", simple: true), + "issued" => TermDefinition.new("issued", id: "https://w3id.org/credentials#issued", type_mapping: "http://www.w3.org/2001/XMLSchema#dateTime"), + "issuer" => TermDefinition.new("issuer", id: "https://w3id.org/credentials#issuer", type_mapping: "@id"), + "label" => TermDefinition.new("label", id: "http://www.w3.org/2000/01/rdf-schema#label", simple: true), + "member" => TermDefinition.new("member", id: "http://schema.org/member", type_mapping: "@id"), + "memberOf" => TermDefinition.new("memberOf", id: "http://schema.org/memberOf", type_mapping: "@id"), + "name" => TermDefinition.new("name", id: "http://schema.org/name", simple: true), + "nonce" => TermDefinition.new("nonce", id: "https://w3id.org/security#nonce", simple: true), + "normalizationAlgorithm" => TermDefinition.new("normalizationAlgorithm", id: "https://w3id.org/security#normalizationAlgorithm", simple: true), + "owner" => TermDefinition.new("owner", id: "https://w3id.org/security#owner", type_mapping: "@id"), + "password" => TermDefinition.new("password", id: "https://w3id.org/security#password", simple: true), + "paymentProcessor" => TermDefinition.new("paymentProcessor", id: "https://w3id.org/payswarm#processor", simple: true), + "perm" => TermDefinition.new("perm", id: "https://w3id.org/permissions#", simple: true, prefix: true), + "postalCode" => TermDefinition.new("postalCode", id: "http://schema.org/postalCode", simple: true), + "preferences" => TermDefinition.new("preferences", id: "https://w3id.org/payswarm#preferences", type_mapping: "@vocab"), + "privateKey" => TermDefinition.new("privateKey", id: "https://w3id.org/security#privateKey", type_mapping: "@id"), + "privateKeyPem" => TermDefinition.new("privateKeyPem", id: "https://w3id.org/security#privateKeyPem", simple: true), + "ps" => TermDefinition.new("ps", id: "https://w3id.org/payswarm#", simple: true, prefix: true), + "publicKey" => TermDefinition.new("publicKey", id: "https://w3id.org/security#publicKey", type_mapping: "@id"), + "publicKeyPem" => TermDefinition.new("publicKeyPem", id: "https://w3id.org/security#publicKeyPem", simple: true), + "publicKeyService" => TermDefinition.new("publicKeyService", id: "https://w3id.org/security#publicKeyService", type_mapping: "@id"), + "rdf" => TermDefinition.new("rdf", id: "http://www.w3.org/1999/02/22-rdf-syntax-ns#", simple: true, prefix: true), + "rdfs" => TermDefinition.new("rdfs", id: "http://www.w3.org/2000/01/rdf-schema#", simple: true, prefix: true), + "recipient" => TermDefinition.new("recipient", id: "https://w3id.org/credentials#recipient", type_mapping: "@id"), + "revoked" => TermDefinition.new("revoked", id: "https://w3id.org/security#revoked", type_mapping: "http://www.w3.org/2001/XMLSchema#dateTime"), + "schema" => TermDefinition.new("schema", id: "http://schema.org/", simple: true, prefix: true), + "sec" => TermDefinition.new("sec", id: "https://w3id.org/security#", simple: true, prefix: true), + "signature" => TermDefinition.new("signature", id: "https://w3id.org/security#signature", simple: true), + "signatureAlgorithm" => TermDefinition.new("signatureAlgorithm", id: "https://w3id.org/security#signatureAlgorithm", simple: true), + "signatureValue" => TermDefinition.new("signatureValue", id: "https://w3id.org/security#signatureValue", simple: true), + "streetAddress" => TermDefinition.new("streetAddress", id: "http://schema.org/streetAddress", simple: true), + "title" => TermDefinition.new("title", id: "http://purl.org/dc/terms/title", simple: true), + "type" => TermDefinition.new("type", id: "@type", simple: true), + "url" => TermDefinition.new("url", id: "http://schema.org/url", type_mapping: "@id"), + "writePermission" => TermDefinition.new("writePermission", id: "https://w3id.org/permissions#writePermission", type_mapping: "@id"), + "xsd" => TermDefinition.new("xsd", id: "http://www.w3.org/2001/XMLSchema#", simple: true, prefix: true) + }) + end + alias_preloaded("https://w3id.org/identity/v1", "http://w3id.org/identity/v1") +end diff --git a/lib/json_ld/security.rb b/lib/json_ld/security.rb index 1230206f0..a6fbce95f 100644 --- a/lib/json_ld/security.rb +++ b/lib/json_ld/security.rb @@ -1,9 +1,9 @@ # -*- encoding: utf-8 -*- # frozen_string_literal: true -# This file generated automatically from https://w3id.org/security/v1 +# This file generated automatically from http://w3id.org/security/v1 require 'json/ld' class JSON::LD::Context - add_preloaded("https://w3id.org/security/v1") do + add_preloaded("http://w3id.org/security/v1") do new(processingMode: "json-ld-1.0", term_definitions: { "CryptographicKey" => TermDefinition.new("CryptographicKey", id: "https://w3id.org/security#Key", simple: true), "EcdsaKoblitzSignature2016" => TermDefinition.new("EcdsaKoblitzSignature2016", id: "https://w3id.org/security#EcdsaKoblitzSignature2016", simple: true), @@ -47,4 +47,5 @@ class JSON::LD::Context "xsd" => TermDefinition.new("xsd", id: "http://www.w3.org/2001/XMLSchema#", simple: true, prefix: true) }) end + alias_preloaded("https://w3id.org/security/v1", "http://w3id.org/security/v1") end diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index 7d0215313..6dbb75689 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -7,6 +7,8 @@ require_relative 'cli_helper' module Mastodon class AccountsCLI < Thor + include CLIHelper + def self.exit_on_failure? true end @@ -26,18 +28,20 @@ module Mastodon if options[:all] processed = 0 delay = 0 + scope = Account.local.without_suspended + progress = create_progress_bar(scope.count) - Account.local.without_suspended.find_in_batches do |accounts| + scope.find_in_batches do |accounts| accounts.each do |account| rotate_keys_for_account(account, delay) + progress.increment processed += 1 - say('.', :green, false) end delay += 5.minutes end - say + progress.finish say("OK, rotated keys for #{processed} accounts", :green) elsif username.present? rotate_keys_for_account(Account.find_local(username)) @@ -181,7 +185,7 @@ module Mastodon end say("Deleting user with #{account.statuses_count} statuses, this might take a while...") - SuspendAccountService.new.call(account, including_user: true) + SuspendAccountService.new.call(account, reserve_email: false) say('OK', :green) end @@ -206,6 +210,7 @@ module Mastodon say('OK', :green) end + option :concurrency, type: :numeric, default: 5, aliases: [:c] option :dry_run, type: :boolean desc 'cull', 'Remove remote accounts that no longer exist' long_desc <<-LONG_DESC @@ -215,63 +220,45 @@ module Mastodon Accounts that have had confirmed activity within the last week are excluded from the checks. - - Domains that are unreachable are not checked. - - With the --dry-run option, no deletes will actually be carried - out. LONG_DESC def cull skip_threshold = 7.days.ago - culled = 0 - dry_run_culled = [] - skip_domains = Set.new dry_run = options[:dry_run] ? ' (DRY RUN)' : '' + skip_domains = Concurrent::Set.new - Account.remote.where(protocol: :activitypub).partitioned.find_each do |account| - next if account.updated_at >= skip_threshold || (account.last_webfingered_at.present? && account.last_webfingered_at >= skip_threshold) + processed, culled = parallelize_with_progress(Account.remote.where(protocol: :activitypub).partitioned) do |account| + next if account.updated_at >= skip_threshold || (account.last_webfingered_at.present? && account.last_webfingered_at >= skip_threshold) || skip_domains.include?(account.domain) code = 0 - unless skip_domains.include?(account.domain) - begin - code = Request.new(:head, account.uri).perform(&:code) - rescue HTTP::ConnectionError - skip_domains << account.domain - rescue StandardError - next - end + + begin + code = Request.new(:head, account.uri).perform(&:code) + rescue HTTP::ConnectionError + skip_domains << account.domain end if [404, 410].include?(code) - if options[:dry_run] - dry_run_culled << account.acct - else - SuspendAccountService.new.call(account, destroy: true) - end - culled += 1 - say('+', :green, false) + SuspendAccountService.new.call(account, reserve_username: false) unless options[:dry_run] + 1 else - account.touch # Touch account even during dry run to avoid getting the account into the window again - say('.', nil, false) + # Touch account even during dry run to avoid getting the account into the window again + account.touch end end - say - say("Removed #{culled} accounts. #{skip_domains.size} servers skipped#{dry_run}", skip_domains.empty? ? :green : :yellow) + say("Visited #{processed} accounts, removed #{culled}#{dry_run}", :green) unless skip_domains.empty? - say('The following servers were not available during the check:', :yellow) + say('The following domains were not available during the check:', :yellow) skip_domains.each { |domain| say(' ' + domain) } end - - unless dry_run_culled.empty? - say('The following accounts would have been deleted:', :green) - dry_run_culled.each { |account| say(' ' + account) } - end end option :all, type: :boolean option :domain + option :concurrency, type: :numeric, default: 5, aliases: [:c] + option :verbose, type: :boolean, aliases: [:v] + option :dry_run, type: :boolean desc 'refresh [USERNAME]', 'Fetch remote user data and files' long_desc <<-LONG_DESC Fetch remote user data and files for one or multiple accounts. @@ -280,21 +267,23 @@ module Mastodon Through the --domain option, this can be narrowed down to a specific domain only. Otherwise, a single remote account must be specified with USERNAME. - - All processing is done in the background through Sidekiq. LONG_DESC def refresh(username = nil) + dry_run = options[:dry_run] ? ' (DRY RUN)' : '' + if options[:domain] || options[:all] - queued = 0 scope = Account.remote scope = scope.where(domain: options[:domain]) if options[:domain] - scope.select(:id).reorder(nil).find_in_batches do |accounts| - Maintenance::RedownloadAccountMediaWorker.push_bulk(accounts.map(&:id)) - queued += accounts.size + processed, = parallelize_with_progress(scope) do |account| + next if options[:dry_run] + + account.reset_avatar! + account.reset_header! + account.save end - say("Scheduled refreshment of #{queued} accounts", :green, true) + say("Refreshed #{processed} accounts#{dry_run}", :green, true) elsif username.present? username, domain = username.split('@') account = Account.find_remote(username, domain) @@ -304,72 +293,53 @@ module Mastodon exit(1) end - Maintenance::RedownloadAccountMediaWorker.perform_async(account.id) - say('OK', :green) + unless options[:dry_run] + account.reset_avatar! + account.reset_header! + account.save + end + + say("OK#{dry_run}", :green) else say('No account(s) given', :red) exit(1) end end - desc 'follow ACCT', 'Make all local accounts follow account specified by ACCT' - long_desc <<-LONG_DESC - Make all local accounts follow an account specified by ACCT. ACCT can be - a simple username, in case of a local user. It can also be in the format - username@domain, in case of a remote user. - LONG_DESC - def follow(acct) - target_account = ResolveAccountService.new.call(acct) - processed = 0 - failed = 0 + option :concurrency, type: :numeric, default: 5, aliases: [:c] + option :verbose, type: :boolean, aliases: [:v] + desc 'follow USERNAME', 'Make all local accounts follow account specified by USERNAME' + def follow(username) + target_account = Account.find_local(username) if target_account.nil? - say("Target account (#{acct}) could not be resolved", :red) + say('No such account', :red) exit(1) end - Account.local.without_suspended.find_each do |account| - begin - FollowService.new.call(account, target_account) - processed += 1 - say('.', :green, false) - rescue StandardError - failed += 1 - say('.', :red, false) - end + processed, = parallelize_with_progress(Account.local.without_suspended) do |account| + FollowService.new.call(account, target_account) end - say("OK, followed target from #{processed} accounts, skipped #{failed}", :green) + say("OK, followed target from #{processed} accounts", :green) end + option :concurrency, type: :numeric, default: 5, aliases: [:c] + option :verbose, type: :boolean, aliases: [:v] desc 'unfollow ACCT', 'Make all local accounts unfollow account specified by ACCT' - long_desc <<-LONG_DESC - Make all local accounts unfollow an account specified by ACCT. ACCT can be - a simple username, in case of a local user. It can also be in the format - username@domain, in case of a remote user. - LONG_DESC def unfollow(acct) target_account = Account.find_remote(*acct.split('@')) - processed = 0 - failed = 0 if target_account.nil? - say("Target account (#{acct}) was not found", :red) + say('No such account', :red) exit(1) end - target_account.followers.local.find_each do |account| - begin - UnfollowService.new.call(account, target_account) - processed += 1 - say('.', :green, false) - rescue StandardError - failed += 1 - say('.', :red, false) - end + parallelize_with_progress(target_account.followers.local) do |account| + UnfollowService.new.call(account, target_account) end - say("OK, unfollowed target from #{processed} accounts, skipped #{failed}", :green) + say("OK, unfollowed target from #{processed} accounts", :green) end option :follows, type: :boolean, default: false @@ -392,51 +362,50 @@ module Mastodon account = Account.find_local(username) if account.nil? - say('No user with such username', :red) + say('No such account', :red) exit(1) end - if options[:follows] - processed = 0 - failed = 0 + total = 0 + total += Account.where(id: ::Follow.where(account: account).select(:target_account_id)).count if options[:follows] + total += Account.where(id: ::Follow.where(target_account: account).select(:account_id)).count if options[:followers] + progress = create_progress_bar(total) + processed = 0 - say("Unfollowing #{account.username}'s followees, this might take a while...") + if options[:follows] + scope = Account.where(id: ::Follow.where(account: account).select(:target_account_id)) - Account.where(id: ::Follow.where(account: account).select(:target_account_id)).find_each do |target_account| + scope.find_each do |target_account| begin UnfollowService.new.call(account, target_account) + rescue => e + progress.log pastel.red("Error processing #{target_account.id}: #{e}") + ensure + progress.increment processed += 1 - say('.', :green, false) - rescue StandardError - failed += 1 - say('.', :red, false) end end BootstrapTimelineWorker.perform_async(account.id) - - say("OK, unfollowed #{processed} followees, skipped #{failed}", :green) end if options[:followers] - processed = 0 - failed = 0 - - say("Removing #{account.username}'s followers, this might take a while...") + scope = Account.where(id: ::Follow.where(target_account: account).select(:account_id)) - Account.where(id: ::Follow.where(target_account: account).select(:account_id)).find_each do |target_account| + scope.find_each do |target_account| begin UnfollowService.new.call(target_account, account) + rescue => e + progress.log pastel.red("Error processing #{target_account.id}: #{e}") + ensure + progress.increment processed += 1 - say('.', :green, false) - rescue StandardError - failed += 1 - say('.', :red, false) end end - - say("OK, removed #{processed} followers, skipped #{failed}", :green) end + + progress.finish + say("Processed #{processed} relationships", :green, true) end option :number, type: :numeric, aliases: [:n] diff --git a/lib/mastodon/cache_cli.rb b/lib/mastodon/cache_cli.rb index e9b6667b3..803404c34 100644 --- a/lib/mastodon/cache_cli.rb +++ b/lib/mastodon/cache_cli.rb @@ -6,6 +6,8 @@ require_relative 'cli_helper' module Mastodon class CacheCLI < Thor + include CLIHelper + def self.exit_on_failure? true end @@ -15,5 +17,44 @@ module Mastodon Rails.cache.clear say('OK', :green) end + + option :concurrency, type: :numeric, default: 5, aliases: [:c] + option :verbose, type: :boolean, aliases: [:v] + desc 'recount TYPE', 'Update hard-cached counters' + long_desc <<~LONG_DESC + Update hard-cached counters of TYPE by counting referenced + records from scratch. TYPE can be "accounts" or "statuses". + + It may take a very long time to finish, depending on the + size of the database. + LONG_DESC + def recount(type) + case type + when 'accounts' + processed, = parallelize_with_progress(Account.local.includes(:account_stat)) do |account| + account_stat = account.account_stat + account_stat.following_count = account.active_relationships.count + account_stat.followers_count = account.passive_relationships.count + account_stat.statuses_count = account.statuses.where.not(visibility: :direct).count + + account_stat.save if account_stat.changed? + end + when 'statuses' + processed, = parallelize_with_progress(Status.includes(:status_stat)) do |status| + status_stat = status.status_stat + status_stat.replies_count = status.replies.where.not(visibility: :direct).count + status_stat.reblogs_count = status.reblogs.count + status_stat.favourites_count = status.favourites.count + + status_stat.save if status_stat.changed? + end + else + say("Unknown type: #{type}", :red) + exit(1) + end + + say + say("OK, recounted #{processed} records", :green) + end end end diff --git a/lib/mastodon/cli_helper.rb b/lib/mastodon/cli_helper.rb index 2f807d08c..ec4d9a81e 100644 --- a/lib/mastodon/cli_helper.rb +++ b/lib/mastodon/cli_helper.rb @@ -7,3 +7,66 @@ ActiveRecord::Base.logger = dev_null ActiveJob::Base.logger = dev_null HttpLog.configuration.logger = dev_null Paperclip.options[:log] = false + +module Mastodon + module CLIHelper + def create_progress_bar(total = nil) + ProgressBar.create(total: total, format: '%c/%u |%b%i| %e') + end + + def parallelize_with_progress(scope) + if options[:concurrency] < 1 + say('Cannot run with this concurrency setting, must be at least 1', :red) + exit(1) + end + + ActiveRecord::Base.configurations[Rails.env]['pool'] = options[:concurrency] + 1 + + progress = create_progress_bar(scope.count) + pool = Concurrent::FixedThreadPool.new(options[:concurrency]) + total = Concurrent::AtomicFixnum.new(0) + aggregate = Concurrent::AtomicFixnum.new(0) + + scope.reorder(nil).find_in_batches do |items| + futures = [] + + items.each do |item| + futures << Concurrent::Future.execute(executor: pool) do + begin + if !progress.total.nil? && progress.progress + 1 > progress.total + # The number of items has changed between start and now, + # since there is no good way to predict the final count from + # here, just change the progress bar to an indeterminate one + + progress.total = nil + end + + progress.log("Processing #{item.id}") if options[:verbose] + + result = ActiveRecord::Base.connection_pool.with_connection do + yield(item) + end + + aggregate.increment(result) if result.is_a?(Integer) + rescue => e + progress.log pastel.red("Error processing #{item.id}: #{e}") + ensure + progress.increment + end + end + end + + total.increment(items.size) + futures.map(&:value) + end + + progress.stop + + [total.value, aggregate.value] + end + + def pastel + @pastel ||= Pastel.new + end + end +end diff --git a/lib/mastodon/domains_cli.rb b/lib/mastodon/domains_cli.rb index b081581fe..b5435bb5e 100644 --- a/lib/mastodon/domains_cli.rb +++ b/lib/mastodon/domains_cli.rb @@ -7,41 +7,58 @@ require_relative 'cli_helper' module Mastodon class DomainsCLI < Thor + include CLIHelper + def self.exit_on_failure? true end + option :concurrency, type: :numeric, default: 5, aliases: [:c] + option :verbose, type: :boolean, aliases: [:v] option :dry_run, type: :boolean - desc 'purge DOMAIN', 'Remove accounts from a DOMAIN without a trace' + option :whitelist_mode, type: :boolean + desc 'purge [DOMAIN...]', 'Remove accounts from a DOMAIN without a trace' long_desc <<-LONG_DESC Remove all accounts from a given DOMAIN without leaving behind any records. Unlike a suspension, if the DOMAIN still exists in the wild, it means the accounts could return if they are resolved again. + + When the --whitelist-mode option is given, instead of purging accounts + from a single domain, all accounts from domains that are not whitelisted + are removed from the database. LONG_DESC - def purge(domain) - removed = 0 + def purge(*domains) dry_run = options[:dry_run] ? ' (DRY RUN)' : '' - Account.where(domain: domain).find_each do |account| - SuspendAccountService.new.call(account, destroy: true) unless options[:dry_run] - removed += 1 - say('.', :green, false) + scope = begin + if options[:whitelist_mode] + Account.remote.where.not(domain: DomainAllow.pluck(:domain)) + elsif !domains.empty? + Account.remote.where(domain: domains) + else + say('No domain(s) given', :red) + exit(1) + end + end + + processed, = parallelize_with_progress(scope) do |account| + SuspendAccountService.new.call(account, reserve_username: false, skip_side_effects: true) unless options[:dry_run] end - DomainBlock.where(domain: domain).destroy_all unless options[:dry_run] + DomainBlock.where(domain: domains).destroy_all unless options[:dry_run] - say - say("Removed #{removed} accounts#{dry_run}", :green) + say("Removed #{processed} accounts#{dry_run}", :green) - custom_emojis = CustomEmoji.where(domain: domain) + custom_emojis = CustomEmoji.where(domain: domains) custom_emojis_count = custom_emojis.count custom_emojis.destroy_all unless options[:dry_run] + say("Removed #{custom_emojis_count} custom emojis", :green) end option :concurrency, type: :numeric, default: 50, aliases: [:c] - option :silent, type: :boolean, default: false, aliases: [:s] option :format, type: :string, default: 'summary', aliases: [:f] + option :exclude_suspended, type: :boolean, default: false, aliases: [:x] desc 'crawl [START]', 'Crawl all known peers, optionally beginning at START' long_desc <<-LONG_DESC Crawl the fediverse by using the Mastodon REST API endpoints that expose @@ -52,26 +69,31 @@ module Mastodon The --concurrency (-c) option controls the number of threads performing HTTP requests at the same time. More threads means the crawl may complete faster. - The --silent (-s) option controls progress output. - The --format (-f) option controls how the data is displayed at the end. By default (`summary`), a summary of the statistics is returned. The other options are `domains`, which returns a newline-delimited list of all discovered peers, and `json`, which dumps all the aggregated data raw. + + The --exclude-suspended (-x) option means that domains that are suspended + instance-wide do not appear in the output and are not included in summaries. + This also excludes subdomains of any of those domains. LONG_DESC def crawl(start = nil) - stats = Concurrent::Hash.new - processed = Concurrent::AtomicFixnum.new(0) - failed = Concurrent::AtomicFixnum.new(0) - start_at = Time.now.to_f - seed = start ? [start] : Account.remote.domains + stats = Concurrent::Hash.new + processed = Concurrent::AtomicFixnum.new(0) + failed = Concurrent::AtomicFixnum.new(0) + start_at = Time.now.to_f + seed = start ? [start] : Account.remote.domains + blocked_domains = Regexp.new('\\.?' + DomainBlock.where(severity: 1).pluck(:domain).join('|') + '$') + progress = create_progress_bar pool = Concurrent::ThreadPoolExecutor.new(min_threads: 0, max_threads: options[:concurrency], idletime: 10, auto_terminate: true, max_queue: 0) work_unit = ->(domain) do next if stats.key?(domain) + next if options[:exclude_suspended] && domain.match(blocked_domains) + stats[domain] = nil - processed.increment begin Request.new(:get, "https://#{domain}/api/v1/instance").perform do |res| @@ -91,11 +113,11 @@ module Mastodon next unless res.code == 200 stats[domain]['activity'] = Oj.load(res.to_s) end - - say('.', :green, false) unless options[:silent] rescue StandardError failed.increment - say('.', :red, false) unless options[:silent] + ensure + processed.increment + progress.increment unless progress.finished? end end @@ -109,10 +131,9 @@ module Mastodon pool.shutdown pool.wait_for_termination(20) ensure + progress.finish pool.shutdown - say unless options[:silent] - case options[:format] when 'summary' stats_to_summary(stats, processed, failed, start_at) diff --git a/lib/mastodon/emoji_cli.rb b/lib/mastodon/emoji_cli.rb index 97a822e45..beac1b1fd 100644 --- a/lib/mastodon/emoji_cli.rb +++ b/lib/mastodon/emoji_cli.rb @@ -15,6 +15,7 @@ module Mastodon option :suffix option :overwrite, type: :boolean option :unlisted, type: :boolean + option :category desc 'import PATH', 'Import emoji from a TAR GZIP archive at PATH' long_desc <<-LONG_DESC Imports custom emoji from a TAR GZIP archive specified by PATH. @@ -22,6 +23,9 @@ module Mastodon Existing emoji will be skipped unless the --overwrite option is provided, in which case they will be overwritten. + You can specifiy a --category under which the emojis will be + grouped together. + With the --prefix option, a prefix can be added to all generated shortcodes. Likewise, the --suffix option controls the suffix of all shortcodes. @@ -33,6 +37,7 @@ module Mastodon imported = 0 skipped = 0 failed = 0 + category = options[:category] ? CustomEmojiCategory.find_or_create_by(name: options[:category]) : nil Gem::Package::TarReader.new(Zlib::GzipReader.open(path)) do |tar| tar.each do |entry| @@ -50,6 +55,7 @@ module Mastodon custom_emoji.image = StringIO.new(entry.read) custom_emoji.image_file_name = File.basename(entry.full_name) custom_emoji.visible_in_picker = !options[:unlisted] + custom_emoji.category = category if custom_emoji.save imported += 1 diff --git a/lib/mastodon/feeds_cli.rb b/lib/mastodon/feeds_cli.rb index fe11c3df4..578ea15c5 100644 --- a/lib/mastodon/feeds_cli.rb +++ b/lib/mastodon/feeds_cli.rb @@ -6,55 +6,32 @@ require_relative 'cli_helper' module Mastodon class FeedsCLI < Thor + include CLIHelper + def self.exit_on_failure? true end option :all, type: :boolean, default: false - option :background, type: :boolean, default: false + option :concurrency, type: :numeric, default: 5, aliases: [:c] + option :verbose, type: :boolean, aliases: [:v] option :dry_run, type: :boolean, default: false - option :verbose, type: :boolean, default: false desc 'build [USERNAME]', 'Build home and list feeds for one or all users' long_desc <<-LONG_DESC Build home and list feeds that are stored in Redis from the database. With the --all option, all active users will be processed. Otherwise, a single user specified by USERNAME. - - With the --background option, regeneration will be queued into Sidekiq, - and the command will exit as soon as possible. - - With the --dry-run option, no work will be done. - - With the --verbose option, when accounts are processed sequentially in the - foreground, the IDs of the accounts will be printed. LONG_DESC def build(username = nil) dry_run = options[:dry_run] ? '(DRY RUN)' : '' if options[:all] || username.nil? - processed = 0 - queued = 0 - - User.active.select(:id, :account_id).reorder(nil).find_in_batches do |users| - if options[:background] - RegenerationWorker.push_bulk(users.map(&:account_id)) unless options[:dry_run] - queued += users.size - else - users.each do |user| - RegenerationWorker.new.perform(user.account_id) unless options[:dry_run] - options[:verbose] ? say(user.account_id) : say('.', :green, false) - processed += 1 - end - end + processed, = parallelize_with_progress(Account.joins(:user).merge(User.active)) do |account| + PrecomputeFeedService.new.call(account) unless options[:dry_run] end - if options[:background] - say("Scheduled feed regeneration for #{queued} accounts #{dry_run}", :green, true) - else - say - say("Regenerated feeds for #{processed} accounts #{dry_run}", :green, true) - end + say("Regenerated feeds for #{processed} accounts #{dry_run}", :green, true) elsif username.present? account = Account.find_local(username) @@ -63,11 +40,7 @@ module Mastodon exit(1) end - if options[:background] - RegenerationWorker.perform_async(account.id) unless options[:dry_run] - else - RegenerationWorker.new.perform(account.id) unless options[:dry_run] - end + PrecomputeFeedService.new.call(account) unless options[:dry_run] say("OK #{dry_run}", :green, true) else diff --git a/lib/mastodon/media_cli.rb b/lib/mastodon/media_cli.rb index 6152d5a09..3b702f155 100644 --- a/lib/mastodon/media_cli.rb +++ b/lib/mastodon/media_cli.rb @@ -7,14 +7,15 @@ require_relative 'cli_helper' module Mastodon class MediaCLI < Thor include ActionView::Helpers::NumberHelper + include CLIHelper def self.exit_on_failure? true end - option :days, type: :numeric, default: 7 - option :background, type: :boolean, default: false - option :verbose, type: :boolean, default: false + option :days, type: :numeric, default: 7, aliases: [:d] + option :concurrency, type: :numeric, default: 5, aliases: [:c] + option :verbose, type: :boolean, default: false, aliases: [:v] option :dry_run, type: :boolean, default: false desc 'remove', 'Remove remote media files' long_desc <<-DESC @@ -22,48 +23,116 @@ module Mastodon The --days option specifies how old media attachments have to be before they are removed. It defaults to 7 days. + DESC + def remove + time_ago = options[:days].days.ago + dry_run = options[:dry_run] ? '(DRY RUN)' : '' + + processed, aggregate = parallelize_with_progress(MediaAttachment.cached.where.not(remote_url: '').where('created_at < ?', time_ago)) do |media_attachment| + next if media_attachment.file.blank? + + size = media_attachment.file_file_size + + unless options[:dry_run] + media_attachment.file.destroy + media_attachment.save + end + + size + end + + say("Removed #{processed} media attachments (approx. #{number_to_human_size(aggregate)}) #{dry_run}", :green, true) + end + + option :account, type: :string + option :domain, type: :string + option :status, type: :numeric + option :concurrency, type: :numeric, default: 5, aliases: [:c] + option :verbose, type: :boolean, default: false, aliases: [:v] + option :dry_run, type: :boolean, default: false + option :force, type: :boolean, default: false + desc 'refresh', 'Fetch remote media files' + long_desc <<-DESC + Re-downloads media attachments from other servers. You must specify the + source of media attachments with one of the following options: + + Use the --status option to download attachments from a specific status, + using the status local numeric ID. - With the --background option, instead of deleting the files sequentially, - they will be queued into Sidekiq and the command will exit as soon as - possible. In Sidekiq they will be processed with higher concurrency, but - it may impact other operations of the Mastodon server, and it may overload - the underlying file storage. + Use the --account option to download attachments from a specific account, + using username@domain handle of the account. - With the --dry-run option, no work will be done. + Use the --domain option to download attachments from a specific domain. - With the --verbose option, when media attachments are processed sequentially in the - foreground, the IDs of the media attachments will be printed. + By default, attachments that are believed to be already downloaded will + not be re-downloaded. To force re-download of every URL, use --force. DESC - def remove - time_ago = options[:days].days.ago - queued = 0 - processed = 0 - size = 0 - dry_run = options[:dry_run] ? '(DRY RUN)' : '' - - if options[:background] - MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).select(:id, :file_file_size).reorder(nil).find_in_batches do |media_attachments| - queued += media_attachments.size - size += media_attachments.reduce(0) { |sum, m| sum + (m.file_file_size || 0) } - Maintenance::UncacheMediaWorker.push_bulk(media_attachments.map(&:id)) unless options[:dry_run] + def refresh + dry_run = options[:dry_run] ? ' (DRY RUN)' : '' + + if options[:status] + scope = MediaAttachment.where(status_id: options[:status]) + elsif options[:account] + username, domain = username.split('@') + account = Account.find_remote(username, domain) + + if account.nil? + say('No such account', :red) + exit(1) end + + scope = MediaAttachment.where(account_id: account.id) + elsif options[:domain] + scope = MediaAttachment.joins(:account).merge(Account.by_domain_and_subdomains(options[:domain])) else - MediaAttachment.where.not(remote_url: '').where.not(file_file_name: nil).where('created_at < ?', time_ago).reorder(nil).find_in_batches do |media_attachments| - media_attachments.each do |m| - size += m.file_file_size || 0 - Maintenance::UncacheMediaWorker.new.perform(m) unless options[:dry_run] - options[:verbose] ? say(m.id) : say('.', :green, false) - processed += 1 - end + exit(1) + end + + processed, aggregate = parallelize_with_progress(scope) do |media_attachment| + next if media_attachment.remote_url.blank? || (!options[:force] && media_attachment.file_file_name.present?) + + unless options[:dry_run] + media_attachment.reset_file! + media_attachment.save end + + media_attachment.file_file_size end - say + say("Downloaded #{processed} media attachments (approx. #{number_to_human_size(aggregate)})#{dry_run}", :green, true) + end + + desc 'usage', 'Calculate disk space consumed by Mastodon' + def usage + say("Attachments:\t#{number_to_human_size(MediaAttachment.sum(:file_file_size))} (#{number_to_human_size(MediaAttachment.where(account: Account.local).sum(:file_file_size))} local)") + say("Custom emoji:\t#{number_to_human_size(CustomEmoji.sum(:image_file_size))} (#{number_to_human_size(CustomEmoji.local.sum(:image_file_size))} local)") + say("Preview cards:\t#{number_to_human_size(PreviewCard.sum(:image_file_size))}") + say("Avatars:\t#{number_to_human_size(Account.sum(:avatar_file_size))} (#{number_to_human_size(Account.local.sum(:avatar_file_size))} local)") + say("Headers:\t#{number_to_human_size(Account.sum(:header_file_size))} (#{number_to_human_size(Account.local.sum(:header_file_size))} local)") + say("Backups:\t#{number_to_human_size(Backup.sum(:dump_file_size))}") + say("Imports:\t#{number_to_human_size(Import.sum(:data_file_size))}") + say("Settings:\t#{number_to_human_size(SiteUpload.sum(:file_file_size))}") + end + + desc 'lookup', 'Lookup where media is displayed by passing a media URL' + def lookup + prompt = TTY::Prompt.new + + url = prompt.ask('Please enter a URL to the media to lookup:', required: true) + + attachment_id = url + .split('/')[0..-2] + .grep(/\A\d+\z/) + .join('') - if options[:background] - say("Scheduled the deletion of #{queued} media attachments (approx. #{number_to_human_size(size)}) #{dry_run}", :green, true) + if url.split('/')[0..-2].include? 'media_attachments' + model = MediaAttachment.find(attachment_id).status + prompt.say(ActivityPub::TagManager.instance.url_for(model)) + elsif url.split('/')[0..-2].include? 'accounts' + model = Account.find(attachment_id) + prompt.say(ActivityPub::TagManager.instance.url_for(model)) else - say("Removed #{processed} media attachments (approx. #{number_to_human_size(size)}) #{dry_run}", :green, true) + prompt.say('Not found') end end end diff --git a/lib/mastodon/preview_cards_cli.rb b/lib/mastodon/preview_cards_cli.rb new file mode 100644 index 000000000..cf4407250 --- /dev/null +++ b/lib/mastodon/preview_cards_cli.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +require 'tty-prompt' +require_relative '../../config/boot' +require_relative '../../config/environment' +require_relative 'cli_helper' + +module Mastodon + class PreviewCardsCLI < Thor + include ActionView::Helpers::NumberHelper + include CLIHelper + + def self.exit_on_failure? + true + end + + option :days, type: :numeric, default: 180 + option :concurrency, type: :numeric, default: 5, aliases: [:c] + option :verbose, type: :boolean, aliases: [:v] + option :dry_run, type: :boolean, default: false + option :link, type: :boolean, default: false + desc 'remove', 'Remove preview cards' + long_desc <<-DESC + Removes local thumbnails for preview cards. + + The --days option specifies how old preview cards have to be before + they are removed. It defaults to 180 days. Since preview cards will + not be re-fetched unless the link is re-posted after 2 weeks from + last time, it is not recommended to delete preview cards within the + last 14 days. + + With the --link option, only link-type preview cards will be deleted, + leaving video and photo cards untouched. + DESC + def remove + time_ago = options[:days].days.ago + dry_run = options[:dry_run] ? ' (DRY RUN)' : '' + link = options[:link] ? 'link-type ' : '' + scope = PreviewCard.cached + scope = scope.where(type: :link) if options[:link] + scope = scope.where('updated_at < ?', time_ago) + + processed, aggregate = parallelize_with_progress(scope) do |preview_card| + next if preview_card.image.blank? + + size = preview_card.image_file_size + + unless options[:dry_run] + preview_card.image.destroy + preview_card.save + end + + size + end + + say("Removed #{processed} #{link}preview cards (approx. #{number_to_human_size(aggregate)})#{dry_run}", :green, true) + end + end +end diff --git a/lib/mastodon/search_cli.rb b/lib/mastodon/search_cli.rb index 42ad93f1e..8bd5f9543 100644 --- a/lib/mastodon/search_cli.rb +++ b/lib/mastodon/search_cli.rb @@ -6,6 +6,7 @@ require_relative 'cli_helper' module Mastodon class SearchCLI < Thor + option :processes, default: 2, aliases: [:p] desc 'deploy', 'Create or update an ElasticSearch index and populate it' long_desc <<~LONG_DESC If ElasticSearch is empty, this command will create the necessary indices @@ -13,10 +14,28 @@ module Mastodon This command will also upgrade indices if the underlying schema has been changed since the last run. + + With the --processes option, parallelize execution of the command. The + default is 2. If "auto" is specified, the number is automatically + derived from available CPUs. LONG_DESC def deploy - processed = Chewy::RakeHelper.upgrade - Chewy::RakeHelper.sync(except: processed) + processed = Chewy::RakeHelper.upgrade(parallel: processes) + Chewy::RakeHelper.sync(except: processed, parallel: processes) + end + + private + + def processes + return true if options[:processes] == 'auto' + + num = options[:processes].to_i + + if num < 2 + nil + else + num + end end end end diff --git a/lib/mastodon/statuses_cli.rb b/lib/mastodon/statuses_cli.rb index 7f2fbfa85..eeedc026c 100644 --- a/lib/mastodon/statuses_cli.rb +++ b/lib/mastodon/statuses_cli.rb @@ -41,6 +41,7 @@ module Mastodon .where('id NOT IN (SELECT status_pins.status_id FROM status_pins WHERE statuses.id = status_id)') # Skip statuses that are pinned on profiles .where('id NOT IN (SELECT mentions.status_id FROM mentions WHERE statuses.id = mentions.status_id AND mentions.account_id IN (SELECT accounts.id FROM accounts WHERE domain IS NULL))') # Skip statuses that mention local accounts .where('id NOT IN (SELECT statuses1.in_reply_to_id FROM statuses AS statuses1 WHERE statuses.id = statuses1.in_reply_to_id)') # Skip statuses favourited by local accounts + .where('id NOT IN (SELECT bookmarks.status_id FROM bookmarks WHERE statuses.id = bookmarks.status_id)') # Skip statuses bookmarked by local users .where('id NOT IN (SELECT statuses1.reblog_of_id FROM statuses AS statuses1 WHERE statuses.id = statuses1.reblog_of_id AND statuses1.account_id IN (SELECT accounts.id FROM accounts WHERE accounts.domain IS NULL))') # Skip statuses reblogged by local accounts .where('account_id NOT IN (SELECT follows.target_account_id FROM follows WHERE statuses.account_id = follows.target_account_id)') # Skip accounts followed by local accounts .in_batches diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 56b846a36..a8e5f0b79 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -5,33 +5,29 @@ module Mastodon module_function def major - 2 + 3 end def minor - 9 - end - - def patch 0 end - def pre - nil + def patch + 1 end def flags '' end - def to_a - [major, minor, patch, pre].compact - end - def suffix '+glitch' end + def to_a + [major, minor, patch].compact + end + def to_s [to_a.join('.'), flags, suffix].join end diff --git a/lib/paperclip/audio_transcoder.rb b/lib/paperclip/audio_transcoder.rb deleted file mode 100644 index 323ec7bfe..000000000 --- a/lib/paperclip/audio_transcoder.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -module Paperclip - class AudioTranscoder < Paperclip::Processor - def make - max_aud_len = (ENV['MAX_AUDIO_LENGTH'] || 60.0).to_f - - meta = ::Av.cli.identify(@file.path) - # {:length=>"0:00:02.14", :duration=>2.14, :audio_encode=>"mp3", :audio_bitrate=>"44100 Hz", :audio_channels=>"mono"} - if meta[:duration] > max_aud_len - raise Mastodon::ValidationError, "Audio uploads must be less than #{max_aud_len} seconds in length." - end - - final_file = Paperclip::Transcoder.make(file, options, attachment) - - attachment.instance.file_file_name = 'media.mp4' - attachment.instance.file_content_type = 'video/mp4' - attachment.instance.type = MediaAttachment.types[:video] - - final_file - end - end -end diff --git a/lib/paperclip/gif_transcoder.rb b/lib/paperclip/gif_transcoder.rb index cbab6fd99..64f12f963 100644 --- a/lib/paperclip/gif_transcoder.rb +++ b/lib/paperclip/gif_transcoder.rb @@ -1,5 +1,103 @@ # frozen_string_literal: true +class GifReader + attr_reader :animated + + EXTENSION_LABELS = [0xf9, 0x01, 0xff].freeze + GIF_HEADERS = %w(GIF87a GIF89a).freeze + + class GifReaderException; end + + class UnknownImageType < GifReaderException; end + + class CannotParseImage < GifReaderException; end + + def self.animated?(path) + new(path).animated + rescue GifReaderException + false + end + + def initialize(path, max_frames = 2) + @path = path + @nb_frames = 0 + + File.open(path, 'rb') do |s| + raise UnknownImageType unless GIF_HEADERS.include?(s.read(6)) + + # Skip to "packed byte" + s.seek(4, IO::SEEK_CUR) + + # "Packed byte" gives us the size of the GIF color table + packed_byte, = s.read(1).unpack('C') + + # Skip background color and aspect ratio + s.seek(2, IO::SEEK_CUR) + + if packed_byte & 0x80 != 0 + # GIF uses a global color table, skip it + s.seek(3 * (1 << ((packed_byte & 0x07) + 1)), IO::SEEK_CUR) + end + + # Now read data + while @nb_frames < max_frames + separator = s.read(1) + + case separator + when ',' # Image block + @nb_frames += 1 + + # Skip to "packed byte" + s.seek(8, IO::SEEK_CUR) + packed_byte, = s.read(1).unpack('C') + + if packed_byte & 0x80 != 0 + # Image uses a local color table, skip it + s.seek(3 * (1 << ((packed_byte & 0x07) + 1)), IO::SEEK_CUR) + end + + # Skip lzw min code size + raise InvalidValue unless s.read(1).unpack('C')[0] >= 2 + + # Skip image data sub-blocks + skip_sub_blocks!(s) + when '!' # Extension block + skip_extension_block!(s) + when ';' # Trailer + break + else + raise CannotParseImage + end + end + end + + @animated = @nb_frames > 1 + end + + private + + def skip_extension_block!(file) + if EXTENSION_LABELS.include?(file.read(1).unpack('C')[0]) + block_size, = file.read(1).unpack('C') + file.seek(block_size, IO::SEEK_CUR) + end + + # Read until extension block end marker + skip_sub_blocks!(file) + end + + # Skip sub-blocks up until block end marker + def skip_sub_blocks!(file) + loop do + size, = file.read(1).unpack('C') + + break if size.zero? + + file.seek(size, IO::SEEK_CUR) + end + end +end + module Paperclip # This transcoder is only to be used for the MediaAttachment model # to convert animated gifs to webm @@ -19,8 +117,7 @@ module Paperclip private def needs_convert? - num_frames = identify('-format %n :file', file: file.path).to_i - options[:style] == :original && num_frames > 1 + options[:style] == :original && GifReader.animated?(file.path) end end end diff --git a/lib/paperclip/lazy_thumbnail.rb b/lib/paperclip/lazy_thumbnail.rb index 542c17fb2..10b14860c 100644 --- a/lib/paperclip/lazy_thumbnail.rb +++ b/lib/paperclip/lazy_thumbnail.rb @@ -9,8 +9,8 @@ module Paperclip min_side = [@current_geometry.width, @current_geometry.height].min.to_i options[:geometry] = "#{min_side}x#{min_side}#" if @target_geometry.square? && min_side < @target_geometry.width elsif options[:pixels] - width = Math.sqrt(options[:pixels] * (@current_geometry.width.to_f / @current_geometry.height.to_f)).round.to_i - height = Math.sqrt(options[:pixels] * (@current_geometry.height.to_f / @current_geometry.width.to_f)).round.to_i + width = Math.sqrt(options[:pixels] * (@current_geometry.width.to_f / @current_geometry.height)).round.to_i + height = Math.sqrt(options[:pixels] * (@current_geometry.height.to_f / @current_geometry.width)).round.to_i options[:geometry] = "#{width}x#{height}>" end diff --git a/lib/paperclip/type_corrector.rb b/lib/paperclip/type_corrector.rb new file mode 100644 index 000000000..0b0c10a56 --- /dev/null +++ b/lib/paperclip/type_corrector.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'mime/types/columnar' + +module Paperclip + class TypeCorrector < Paperclip::Processor + def make + target_extension = options[:format] + extension = File.extname(attachment.instance.file_file_name) + + return @file unless options[:style] == :original && target_extension && extension != target_extension + + attachment.instance.file_content_type = options[:content_type] || attachment.instance.file_content_type + attachment.instance.file_file_name = File.basename(attachment.instance.file_file_name, '.*') + '.' + target_extension + + @file + end + end +end diff --git a/lib/paperclip/video_transcoder.rb b/lib/paperclip/video_transcoder.rb index c3504c17c..66f7feda5 100644 --- a/lib/paperclip/video_transcoder.rb +++ b/lib/paperclip/video_transcoder.rb @@ -6,7 +6,9 @@ module Paperclip class VideoTranscoder < Paperclip::Processor def make meta = ::Av.cli.identify(@file.path) + attachment.instance.type = MediaAttachment.types[:gifv] unless meta[:audio_encode] + options[:format] = File.extname(attachment.instance.file_file_name)[1..-1] if options[:keep_same_format] Paperclip::Transcoder.make(file, options, attachment) end diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake index ee9657b0e..2e92e8ded 100644 --- a/lib/tasks/mastodon.rake +++ b/lib/tasks/mastodon.rake @@ -135,7 +135,7 @@ namespace :mastodon do prompt.say "\n" if prompt.yes?('Do you want to store uploaded files on the cloud?', default: false) - case prompt.select('Provider', ['Amazon S3', 'Wasabi', 'Minio']) + case prompt.select('Provider', ['Amazon S3', 'Wasabi', 'Minio', 'Google Cloud Storage']) when 'Amazon S3' env['S3_ENABLED'] = 'true' env['S3_PROTOCOL'] = 'https' @@ -217,6 +217,34 @@ namespace :mastodon do q.required true q.modify :strip end + when 'Google Cloud Storage' + env['S3_ENABLED'] = 'true' + env['S3_PROTOCOL'] = 'https' + env['S3_HOSTNAME'] = 'storage.googleapis.com' + env['S3_ENDPOINT'] = 'https://storage.googleapis.com' + env['S3_MULTIPART_THRESHOLD'] = 50.megabytes + + env['S3_BUCKET'] = prompt.ask('GCS bucket name:') do |q| + q.required true + q.default "files.#{env['LOCAL_DOMAIN']}" + q.modify :strip + end + + env['S3_REGION'] = prompt.ask('GCS region:') do |q| + q.required true + q.default 'us-west1' + q.modify :strip + end + + env['AWS_ACCESS_KEY_ID'] = prompt.ask('GCS access key:') do |q| + q.required true + q.modify :strip + end + + env['AWS_SECRET_ACCESS_KEY'] = prompt.ask('GCS secret key:') do |q| + q.required true + q.modify :strip + end end if prompt.yes?('Do you want to access the uploaded files from your own domain?') diff --git a/lib/tasks/repo.rake b/lib/tasks/repo.rake index 8ceec3085..d1de17b7c 100644 --- a/lib/tasks/repo.rake +++ b/lib/tasks/repo.rake @@ -76,4 +76,19 @@ namespace :repo do tmp.unlink end end + + task check_locales_files: :environment do + pastel = Pastel.new + + missing_yaml_files = I18n.available_locales.reject { |locale| File.exist?(Rails.root.join('config', 'locales', "#{locale}.yml")) } + missing_json_files = I18n.available_locales.reject { |locale| File.exist?(Rails.root.join('app', 'javascript', 'mastodon', 'locales', "#{locale}.json")) } + + if missing_json_files.empty? && missing_yaml_files.empty? + puts pastel.green('OK') + else + puts pastel.red("Missing YAML files: #{pastel.bold(missing_yaml_files.join(', '))}") unless missing_yaml_files.empty? + puts pastel.red("Missing JSON files: #{pastel.bold(missing_json_files.join(', '))}") unless missing_json_files.empty? + exit(1) + end + end end diff --git a/package.json b/package.json index 078ad82f7..c00dea8b3 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "mastodon", + "name": "@tootsuite/mastodon", "license": "AGPL-3.0-or-later", "engines": { - "node": ">=8.12 <12" + "node": ">=8.12 <13" }, "scripts": { "postversion": "git push --tags", @@ -60,59 +60,59 @@ }, "private": true, "dependencies": { - "@babel/core": "^7.4.5", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/plugin-proposal-decorators": "^7.4.4", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-transform-react-inline-elements": "^7.2.0", - "@babel/plugin-transform-react-jsx-self": "^7.2.0", - "@babel/plugin-transform-react-jsx-source": "^7.2.0", - "@babel/plugin-transform-runtime": "^7.4.4", - "@babel/preset-env": "^7.4.5", - "@babel/preset-react": "^7.0.0", - "@babel/runtime": "^7.4.5", - "@clusterws/cws": "^0.14.0", + "@babel/core": "^7.7.4", + "@babel/plugin-proposal-class-properties": "^7.7.4", + "@babel/plugin-proposal-decorators": "^7.7.4", + "@babel/plugin-transform-react-inline-elements": "^7.7.4", + "@babel/plugin-transform-runtime": "^7.7.4", + "@babel/preset-env": "^7.7.4", + "@babel/preset-react": "^7.7.4", + "@babel/runtime": "^7.7.4", + "@gamestdio/websocket": "^0.3.2", + "@clusterws/cws": "^0.16.0", "array-includes": "^3.0.3", "atrament": "^0.2.3", - "autoprefixer": "^9.5.1", + "arrow-key-navigation": "^1.1.0", + "autoprefixer": "^9.7.3", "axios": "^0.19.0", - "babel-loader": "^8.0.5", + "babel-loader": "^8.0.6", "babel-plugin-lodash": "^3.3.4", - "babel-plugin-preval": "^3.0.1", - "babel-plugin-react-intl": "^3.1.3", + "babel-plugin-preval": "^4.0.0", + "babel-plugin-react-intl": "^3.4.1", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "babel-runtime": "^6.26.0", - "blurhash": "^1.0.0", + "blurhash": "^1.1.3", "classnames": "^2.2.5", - "compression-webpack-plugin": "^2.0.0", - "cross-env": "^5.1.4", - "css-loader": "^2.1.1", + "compression-webpack-plugin": "^3.0.0", + "copy-webpack-plugin": "^5.0.5", + "cross-env": "^6.0.3", + "css-loader": "^3.2.0", "cssnano": "^4.1.10", "detect-passive-events": "^1.0.2", - "dotenv": "^8.0.0", + "dotenv": "^8.2.0", "emoji-mart": "Gargron/emoji-mart#build", - "es6-symbol": "^3.1.1", + "es6-symbol": "^3.1.2", "escape-html": "^1.0.3", "exif-js": "^2.3.0", "express": "^4.17.1", + "file-loader": "^4.2.0", "favico.js": "^0.3.10", - "file-loader": "^3.0.1", "font-awesome": "^4.7.0", - "glob": "^7.1.1", + "glob": "^7.1.6", + "history": "^4.10.1", "http-link-header": "^1.0.2", "immutable": "^3.8.2", "imports-loader": "^0.8.0", "intersection-observer": "^0.7.0", "intl": "^1.2.5", "intl-messageformat": "^2.2.0", - "intl-relativeformat": "^2.2.0", + "intl-relativeformat": "^6.4.3", "is-nan": "^1.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.7.11", + "lodash": "^4.17.14", "mark-loader": "^0.1.6", "marky": "^1.2.1", - "mini-css-extract-plugin": "^0.5.0", + "mini-css-extract-plugin": "^0.8.0", "mkdirp": "^0.5.1", "npmlog": "^4.1.2", "object-assign": "^4.1.1", @@ -125,65 +125,67 @@ "postcss-object-fit-images": "^1.1.2", "prop-types": "^15.5.10", "punycode": "^2.1.0", - "rails-ujs": "^5.2.3", - "react": "^16.8.6", - "react-dom": "^16.8.6", + "rails-ujs": "^5.2.4", + "react": "^16.10.2", + "react-dom": "^16.12.0", "react-hotkeys": "^1.1.4", "react-immutable-proptypes": "^2.1.0", "react-immutable-pure-component": "^1.1.1", "react-intl": "^2.9.0", "react-masonry-infinite": "^1.2.2", "react-motion": "^0.5.2", - "react-notification": "^6.8.4", - "react-overlays": "^0.8.3", - "react-redux": "^6.0.1", + "react-notification": "^6.8.5", + "react-overlays": "^0.9.1", + "react-redux": "^7.1.1", "react-redux-loading-bar": "^4.0.8", "react-router-dom": "^4.1.1", "react-router-scroll-4": "^1.0.0-beta.1", - "react-select": "^2.4.4", + "react-select": "^3.0.8", "react-sparklines": "^1.7.0", "react-swipeable-views": "^0.13.3", - "react-textarea-autosize": "^7.1.0", - "react-toggle": "^4.0.1", + "react-textarea-autosize": "^7.1.2", + "react-toggle": "^4.1.1", "redis": "^2.7.1", - "redux": "^4.0.1", + "redux": "^4.0.4", "redux-immutable": "^4.0.0", "redux-thunk": "^2.2.0", - "rellax": "^1.7.1", + "rellax": "^1.10.0", "requestidlecallback": "^0.3.0", "reselect": "^4.0.0", - "rimraf": "^2.6.3", - "sass": "^1.20.3", - "sass-loader": "^7.0.3", - "stringz": "^1.0.0", + "rimraf": "^3.0.0", + "sass": "^1.23.3", + "sass-loader": "^8.0.0", + "stringz": "^2.0.0", "substring-trie": "^1.0.2", - "terser-webpack-plugin": "^1.3.0", + "terser-webpack-plugin": "^2.2.1", + "tesseract.js": "^2.0.0-alpha.16", "throng": "^4.0.0", "tiny-queue": "^0.2.1", - "uuid": "^3.1.0", - "webpack": "^4.29.6", + "uuid": "^3.3.3", + "wavesurfer.js": "^3.2.0", + "webpack": "^4.41.2", "webpack-assets-manifest": "^3.1.1", - "webpack-bundle-analyzer": "^3.1.0", - "webpack-cli": "^3.3.2", + "webpack-bundle-analyzer": "^3.6.0", + "webpack-cli": "^3.3.10", "webpack-merge": "^4.2.1", - "websocket.js": "^0.1.12" + "wicg-inert": "^3.0.0" }, "devDependencies": { - "babel-eslint": "^10.0.1", - "babel-jest": "^24.8.0", - "enzyme": "^3.8.0", - "enzyme-adapter-react-16": "^1.7.1", - "eslint": "^5.11.1", - "eslint-plugin-import": "~2.14.0", - "eslint-plugin-jsx-a11y": "~6.2.1", - "eslint-plugin-promise": "~4.1.1", - "eslint-plugin-react": "~7.12.1", - "jest": "^24.8.0", + "babel-eslint": "^10.0.3", + "babel-jest": "^24.9.0", + "enzyme": "^3.10.0", + "enzyme-adapter-react-16": "^1.15.1", + "eslint": "^6.7.2", + "eslint-plugin-import": "~2.18.2", + "eslint-plugin-jsx-a11y": "~6.2.3", + "eslint-plugin-promise": "~4.2.1", + "eslint-plugin-react": "~7.17.0", + "jest": "^24.9.0", "raf": "^3.4.1", "react-intl-translations-manager": "^5.0.3", - "react-test-renderer": "^16.8.6", + "react-test-renderer": "^16.11.0", "sass-lint": "^1.13.1", - "webpack-dev-server": "^3.5.1", - "yargs": "^12.0.5" + "webpack-dev-server": "^3.9.0", + "yargs": "^13.3.0" } } diff --git a/public/emoji/1f1e8-1f1f3.svg b/public/emoji/1f1e8-1f1f3.svg index c6fe22390..c10116d0a 100644 --- a/public/emoji/1f1e8-1f1f3.svg +++ b/public/emoji/1f1e8-1f1f3.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DE2910" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#FFDE02" d="M7 10.951l.929 2.671 2.826.058-2.253 1.708.819 2.706L7 16.479l-2.321 1.615.819-2.706-2.253-1.708 2.826-.058zm6-3.423l.34.688.759.11-.549.536.129.756L13 9.261l-.679.357.13-.756-.55-.536.76-.11zm2 4l.34.688.759.11-.549.536.129.756-.679-.357-.679.357.13-.756-.55-.536.76-.11zm0 4l.34.688.759.11-.549.536.129.756-.679-.357-.679.357.13-.756-.55-.536.76-.11zm-2 3.999l.34.689.759.11-.549.535.129.757-.679-.356-.679.356.13-.757-.55-.535.76-.11z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DE2910" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#FFDE02" d="M11.136 8.977l.736.356.589-.566-.111.81.72.386-.804.144-.144.804-.386-.72-.81.111.566-.589zm4.665 2.941l-.356.735.566.59-.809-.112-.386.721-.144-.805-.805-.144.721-.386-.112-.809.59.566zm-.957 3.779l.268.772.817.017-.651.493.237.783-.671-.467-.671.467.236-.783-.651-.493.817-.017zm-3.708 3.28l.736.356.589-.566-.111.81.72.386-.804.144-.144.804-.386-.72-.81.111.566-.589zM7 10.951l.929 2.671 2.826.058-2.253 1.708.819 2.706L7 16.479l-2.321 1.615.819-2.706-2.253-1.708 2.826-.058z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f1ed-1f1f7.svg b/public/emoji/1f1ed-1f1f7.svg index 707976330..7b8740c95 100644 --- a/public/emoji/1f1ed-1f1f7.svg +++ b/public/emoji/1f1ed-1f1f7.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#171796" d="M0 27c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-4H0v4z"/><path fill="#EEE" d="M0 13h36v10H0z"/><path fill="#D52B1E" d="M32 5H4C1.791 5 0 6.791 0 9v4h14v7c0 2.209 1.791 4 4 4s4-1.791 4-4v-7h14V9c0-2.209-1.791-4-4-4z"/><path fill="#EEE" d="M15 13h2v2h-2zm2 2h2v2h-2zm2-2h2v2h-2zm0 4h2v2h-2zm-4 0h2v2h-2zm2 2h2v2h-2zm0 3.816V21h-1.816c.301.849.968 1.515 1.816 1.816zm2 0c.849-.302 1.515-.968 1.816-1.816H19v1.816z"/><path fill="#0193DD" d="M18 11.902c.287 0 .57.018.852.043l.159-1.843-1.011-.9-1.011.9.159 1.843c.282-.025.564-.043.852-.043zm4.17.931l.781-1.68-.641-1.191-1.26.499-.481 1.79c.556.148 1.089.343 1.601.582zm-6.742-.582l-.481-1.79-1.257-.5-.642 1.191.781 1.68c.511-.238 1.045-.432 1.599-.581z"/><path fill="#171796" d="M22.368 9.805l-1.292.511-.859-1.087-1.182.728L18 9.034l-1.037.923-1.181-.729-.861 1.089-1.289-.513-.725 1.345.86 1.85.113-.053c.504-.235 1.036-.428 1.579-.574l.026-.007c.552-.147 1.101-.244 1.632-.292l.041-.003c.456-.039 1.226-.039 1.682 0l.037.003c.533.047 1.085.146 1.64.293l.021.006c.541.145 1.072.339 1.579.575l.113.053.86-1.85-.722-1.345zm-8.478 2.862l-.703-1.51.56-1.038 1.095.436.433 1.61c-.475.132-.94.301-1.385.502zm3.372-.857l-.143-1.657.881-.784.881.784-.143 1.657c-.213-.017-.471-.033-.738-.033s-.524.016-.738.033zm4.847.857c-.448-.201-.913-.371-1.386-.504l.432-1.609 1.098-.435.559 1.038-.703 1.51z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EEE" d="M0 12.9h36v10.2H0z"/><path fill="#171796" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4v-4h36v4z"/><path fill="#D52B1E" d="M32 5H4C1.791 5 0 6.791 0 9v4h36V9c0-2.209-1.791-4-4-4z"/><path fill="#D52B1E" d="M11.409 7.436V18.97c0 3.64 2.951 6.591 6.591 6.591s6.591-2.951 6.591-6.591V7.436H11.409z"/><path d="M14.25 18h2.5v2.5h-2.5zm2.5 2.5h2.5V23h-2.5zm0-5h2.5V18h-2.5zm2.5 2.5h2.5v2.5h-2.5zm0-5h2.5v2.5h-2.5zm2.5 2.5h2.341V18H21.75zm-7.5-2.5h2.5v2.5h-2.5zm7.5 10h.805c.626-.707 1.089-1.559 1.334-2.5H21.75V23zm-2.5 0v1.931c.929-.195 1.778-.605 2.5-1.171V23h-2.5zm-5 0v-2.5h-2.139c.245.941.707 1.793 1.334 2.5h.805zm-2.341-7.5h2.341V18h-2.341zM14.25 23v.76c.722.566 1.571.976 2.5 1.171V23h-2.5z" fill="#FFF"/><path fill="#171796" d="M24.757 8.141l-1.998.791-1.328-1.682-1.829 1.126L18 6.949l-1.603 1.428-1.826-1.128-1.331 1.684-1.995-.793-1.122 2.08 1.331 2.862.176-.082c.78-.363 1.603-.662 2.443-.888l.04-.011c.854-.227 1.702-.378 2.523-.451l.064-.006c.705-.06 1.896-.06 2.601 0l.058.005c.824.074 1.678.226 2.536.453l.033.009c.836.225 1.658.524 2.441.889l.175.082 1.331-2.861-1.118-2.08z"/><path fill="#0193DD" d="M16.638 8.681l.221 2.563c.33-.026.729-.051 1.141-.051.412 0 .811.025 1.141.051l.221-2.563L18 7.468l-1.362 1.213zm7.941-.053l-1.698.673-.668 2.489c.731.206 1.45.468 2.144.779l1.086-2.336-.864-1.605zm-13.157-.002l-.866 1.606 1.087 2.336c.69-.31 1.409-.572 2.144-.779l-.67-2.49-1.695-.673z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f301.svg b/public/emoji/1f301.svg index 0f6781098..d6298de42 100644 --- a/public/emoji/1f301.svg +++ b/public/emoji/1f301.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#88C9F9" d="M32 0H4C1.791 0 0 1.791 0 4v22h36V4c0-2.209-1.791-4-4-4z"/><path fill="#66757F" d="M10 26V7l4-4h2l4 4v19zm23-15c0-1-1-1-1-1h-7s-1 0-1 1v15h9V11z"/><path fill="#292F33" d="M28 17c0-1-1-1-1-1h-8c-1 0-1 1-1 1v9h10v-9zm-17 2H6v-5s0-1-1-1H0v13h12v-6s0-1-1-1z"/><path d="M8 21h2v2H8zm8-12h2v2h-2zm0 4h2v2h-2zm-2 4h2v2h-2zm10 1h2v2h-2zm5-6h2v2h-2zm0 4h2v2h-2z" fill="#FFCC4D"/><path fill="#E1E8ED" d="M34 20c-.344 0-.676.047-1 .113-1.677.344-3.045 1.52-3.652 3.085-.34-.567-.804-1.047-1.348-1.418-.714-.487-1.569-.78-2.5-.78-.763 0-1.47.207-2.099.542C22.773 20.611 21.707 20 20.5 20c-.986 0-1.868.415-2.5 1.073-.345.359-.619.788-.788 1.268-.528-.217-1.105-.341-1.712-.341-1.427 0-2.68.677-3.5 1.715-.19.241-.365.495-.504.771C10.892 24.185 10.221 24 9.5 24c-1.058 0-2.013.387-2.78 1-.09.072-.189.134-.274.213-.059-.074-.125-.143-.189-.213-.589-.646-1.369-1.109-2.257-1.288-.263-.053-.533-.087-.812-.087-1.284 0-2.419.591-3.188 1.501V32h36V20.422c-.613-.268-1.288-.422-2-.422z"/><path fill="#CCD6DD" d="M36 27.117c-1.223-2.039-3.449-3.408-6-3.408-2.926 0-5.429 1.796-6.475 4.344C23.35 28.034 23.18 28 23 28c-.702 0-1.369.148-1.976.409C20.291 27.554 19.215 27 18 27c-2.209 0-4 1.791-4 4 0 .05.013.097.015.146C13.689 31.06 13.353 31 13 31c-.876 0-1.679.289-2.338.767C10.065 31.294 9.32 31 8.5 31c-.198 0-.388.026-.577.059C7.286 29.279 5.602 28 3.604 28 2.136 28 .843 28.7 0 29.771V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-4.883z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#88C9F9" d="M32 0H4C1.791 0 0 1.791 0 4v6h36V4c0-2.209-1.791-4-4-4z"/><path fill="#E1E8ED" d="M36 16.368V9.257c-.638-.394-1.383-.632-2.188-.632-1.325 0-2.491.627-3.259 1.588C29.75 9.466 28.683 9 27.5 9c-.721 0-1.392.185-1.996.486C24.763 8.018 23.257 7 21.5 7c-.607 0-1.184.124-1.712.342C19.308 5.981 18.024 5 16.5 5c-1.207 0-2.273.611-2.901 1.542C12.97 6.207 12.263 6 11.5 6c-1.641 0-3.062.887-3.848 2.198C6.928 6.33 5.125 5 3 5c-1.131 0-2.162.389-3 1.022v7.955C.838 14.611 24.5 18 24.5 18s10.862-1.238 11.5-1.632z"/><path fill="#CCD6DD" d="M36 14.771C35.157 13.7 33.864 13 32.396 13c-1.997 0-3.681 1.279-4.318 3.059-.19-.033-.38-.059-.578-.059-.82 0-1.565.294-2.162.767C24.679 16.289 23.876 16 23 16c-.353 0-.689.06-1.015.146.002-.049.015-.096.015-.146 0-2.209-1.791-4-4-4-1.215 0-2.291.554-3.024 1.409C14.369 13.148 13.702 13 13 13c-.18 0-.35.034-.525.053C11.429 10.505 8.926 8.709 6 8.709c-2.551 0-4.777 1.369-6 3.408v13.544l32.396-1.452s2.761-1.343 3.604-2.966v-6.472z"/><path fill="#E1E8ED" d="M36 30.499V20.422c-.613-.268-1.288-.422-2-.422-2.125 0-3.928 1.33-4.652 3.198C28.562 21.887 27.141 21 25.5 21c-.763 0-1.47.207-2.099.542C22.773 20.611 21.707 20 20.5 20c-1.524 0-2.808.981-3.288 2.342-.528-.218-1.105-.342-1.712-.342-1.757 0-3.263 1.018-4.004 2.486C10.892 24.185 10.221 24 9.5 24c-1.183 0-2.25.466-3.054 1.213-.768-.961-1.934-1.588-3.259-1.588-1.284 0-2.419.591-3.188 1.501v5.373H36z"/><path fill="#FE5011" d="M36 24.059C32.465 22.229 25.013 17.594 20 9c0 0 0-2-2-2s-2 2-2 2C10.987 17.594 3.535 22.229 0 24.059v2.068c1.044-.495 2.422-1.204 4-2.169V24h2v-1.341c1.284-.88 2.637-1.908 4-3.094V27h2v-9.292c1.384-1.375 2.74-2.923 4-4.655V24h4V13.054c1.26 1.731 2.616 3.28 4 4.655V26h2v-6.435c1.362 1.186 2.716 2.214 4 3.095V25h2v-1.042c1.578.965 2.956 1.674 4 2.169v-2.068z"/><path fill="#F5F8FA" d="M25 25c-.821 0-1.582.249-2.217.673-.664-1.839-2.5-3.07-4.534-2.863-1.883.192-3.348 1.56-3.777 3.298-.181-.012-.363-.019-.55 0-.773.079-1.448.427-1.965.93-.667-.387-1.452-.582-2.278-.498-.333.034-.644.123-.942.236-.003-.047.004-.093 0-.139-.212-2.083-2.073-3.599-4.155-3.387-1.145.117-2.107.742-2.716 1.619-.586-.186-1.217-.258-1.866-.197V32c0 .773.23 1.489.61 2.101C.715 34.098 29 31.209 29 29s-1.791-4-4-4z"/><path fill="#CCD6DD" d="M32 36c2.209 0 4-1.791 4-4v-7.608c-.91-.433-1.925-.683-3-.683-2.926 0-5.429 1.796-6.475 4.344C26.35 28.034 26.18 28 26 28c-.702 0-1.369.147-1.976.409C23.291 27.554 22.215 27 21 27c-2.209 0-4 1.791-4 4 0 .05.013.097.015.146C16.689 31.06 16.353 31 16 31c-.876 0-1.679.289-2.338.767C13.065 31.294 12.32 31 11.5 31c-.198 0-.388.026-.577.059C10.286 29.279 8.602 28 6.604 28c-1.987 0-3.665 1.266-4.31 3.03C2.195 31.022 2.101 31 2 31c-.732 0-1.41.211-2 .555V32c0 2.209 1.791 4 4 4h28z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f312.svg b/public/emoji/1f312.svg index 03f0ad3a9..d3bb1a754 100644 --- a/public/emoji/1f312.svg +++ b/public/emoji/1f312.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#CCD6DD" cx="18" cy="18" r="18"/><path fill="#66757F" d="M0 18c0 9.941 8.059 18 18 18 .295 0 .58-.029.87-.043C24.761 33.393 29 26.332 29 18 29 9.669 24.761 2.607 18.87.044 18.58.03 18.295 0 18 0 8.059 0 0 8.059 0 18z"/><circle fill="#5B6876" cx="10.5" cy="8.5" r="3.5"/><circle fill="#5B6876" cx="20" cy="16" r="3"/><circle fill="#5B6876" cx="21.5" cy="27.5" r="3.5"/><circle fill="#5B6876" cx="21" cy="6" r="2"/><circle fill="#5B6876" cx="3" cy="18" r="1"/><circle fill="#B8C5CD" cx="30" cy="9" r="1"/><circle fill="#5B6876" cx="15" cy="31" r="1"/><circle fill="#B8C5CD" cx="32" cy="19" r="2"/><circle fill="#5B6876" cx="10" cy="23" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFD983" cx="18" cy="18" r="18"/><path fill="#66757F" d="M0 18c0 9.941 8.059 18 18 18 .295 0 .58-.029.87-.043C24.761 33.393 29 26.332 29 18 29 9.669 24.761 2.607 18.87.044 18.58.03 18.295 0 18 0 8.059 0 0 8.059 0 18z"/><circle fill="#5B6876" cx="10.5" cy="8.5" r="3.5"/><circle fill="#5B6876" cx="20" cy="16" r="3"/><circle fill="#5B6876" cx="21.5" cy="27.5" r="3.5"/><circle fill="#5B6876" cx="21" cy="6" r="2"/><circle fill="#5B6876" cx="3" cy="18" r="1"/><circle fill="#FFCC4D" cx="30" cy="9" r="1"/><circle fill="#5B6876" cx="15" cy="31" r="1"/><circle fill="#FFCC4D" cx="32" cy="19" r="2"/><circle fill="#5B6876" cx="10" cy="23" r="2"/></svg> \ No newline at end of file diff --git a/public/emoji/1f313.svg b/public/emoji/1f313.svg index 117a34650..f668b7585 100644 --- a/public/emoji/1f313.svg +++ b/public/emoji/1f313.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M18 0v36c9.941 0 18-8.059 18-18S27.941 0 18 0z"/><path fill="#66757F" d="M0 18c0 9.941 8.059 18 18 18V0C8.059 0 0 8.059 0 18z"/><circle fill="#B8C5CD" cx="25.5" cy="8.5" r="3.5"/><circle fill="#5B6876" cx="12" cy="16" r="3"/><circle fill="#5B6876" cx="13.5" cy="27.5" r="3.5"/><circle fill="#5B6876" cx="15" cy="6" r="2"/><circle fill="#B8C5CD" cx="33" cy="18" r="1"/><circle fill="#5B6876" cx="6" cy="9" r="1"/><circle fill="#B8C5CD" cx="21" cy="31" r="1"/><circle fill="#5B6876" cx="4" cy="19" r="2"/><circle fill="#B8C5CD" cx="26" cy="23" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M18 0v36c9.941 0 18-8.059 18-18S27.941 0 18 0z"/><path fill="#66757F" d="M0 18c0 9.941 8.059 18 18 18V0C8.059 0 0 8.059 0 18z"/><circle fill="#FFCC4D" cx="25.5" cy="8.5" r="3.5"/><circle fill="#5B6876" cx="12" cy="16" r="3"/><circle fill="#5B6876" cx="13.5" cy="27.5" r="3.5"/><circle fill="#5B6876" cx="15" cy="6" r="2"/><circle fill="#FFCC4D" cx="33" cy="18" r="1"/><circle fill="#5B6876" cx="6" cy="9" r="1"/><circle fill="#FFCC4D" cx="21" cy="31" r="1"/><circle fill="#5B6876" cx="4" cy="19" r="2"/><circle fill="#FFCC4D" cx="26" cy="23" r="2"/></svg> \ No newline at end of file diff --git a/public/emoji/1f314.svg b/public/emoji/1f314.svg index c26fc3517..90488ede9 100644 --- a/public/emoji/1f314.svg +++ b/public/emoji/1f314.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M36 18c0 9.941-8.059 18-18 18-.294 0-.58-.029-.87-.043C11.239 33.393 7 26.332 7 18 7 9.669 11.239 2.607 17.13.044 17.42.03 17.706 0 18 0c9.941 0 18 8.059 18 18z"/><path fill="#66757F" d="M7 18C7 9.669 11.239 2.607 17.13.044 7.596.501 0 8.353 0 18c0 9.646 7.594 17.498 17.128 17.956C11.238 33.391 7 26.331 7 18z"/><circle fill="#B8C5CD" cx="25.5" cy="8.5" r="3.5"/><circle fill="#B8C5CD" cx="16" cy="16" r="3"/><circle fill="#B8C5CD" cx="14.5" cy="27.5" r="3.5"/><circle fill="#B8C5CD" cx="15" cy="6" r="2"/><circle fill="#B8C5CD" cx="33" cy="18" r="1"/><circle fill="#5B6876" cx="6" cy="9" r="1"/><circle fill="#B8C5CD" cx="21" cy="31" r="1"/><circle fill="#5B6876" cx="4" cy="19" r="2"/><circle fill="#B8C5CD" cx="26" cy="23" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M36 18c0 9.941-8.059 18-18 18-.294 0-.58-.029-.87-.043C11.239 33.393 7 26.332 7 18 7 9.669 11.239 2.607 17.13.044 17.42.03 17.706 0 18 0c9.941 0 18 8.059 18 18z"/><path fill="#66757F" d="M7 18C7 9.669 11.239 2.607 17.13.044 7.596.501 0 8.353 0 18c0 9.646 7.594 17.498 17.128 17.956C11.238 33.391 7 26.331 7 18z"/><circle fill="#FFCC4D" cx="25.5" cy="8.5" r="3.5"/><circle fill="#FFCC4D" cx="16" cy="16" r="3"/><circle fill="#FFCC4D" cx="14.5" cy="27.5" r="3.5"/><circle fill="#FFCC4D" cx="15" cy="6" r="2"/><circle fill="#FFCC4D" cx="33" cy="18" r="1"/><circle fill="#5B6876" cx="6" cy="9" r="1"/><circle fill="#FFCC4D" cx="21" cy="31" r="1"/><circle fill="#5B6876" cx="4" cy="19" r="2"/><circle fill="#FFCC4D" cx="26" cy="23" r="2"/></svg> \ No newline at end of file diff --git a/public/emoji/1f315.svg b/public/emoji/1f315.svg index 34dfe03ea..9a7042715 100644 --- a/public/emoji/1f315.svg +++ b/public/emoji/1f315.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#CCD6DD" cx="18" cy="18" r="18"/><g fill="#B8C5CD"><circle cx="10.5" cy="8.5" r="3.5"/><circle cx="20" cy="17" r="3"/><circle cx="24.5" cy="28.5" r="3.5"/><circle cx="22" cy="5" r="2"/><circle cx="3" cy="18" r="1"/><circle cx="30" cy="9" r="1"/><circle cx="15" cy="31" r="1"/><circle cx="32" cy="19" r="2"/><circle cx="10" cy="23" r="2"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFD983" cx="18" cy="18" r="18"/><g fill="#FFCC4D"><circle cx="10.5" cy="8.5" r="3.5"/><circle cx="20" cy="17" r="3"/><circle cx="24.5" cy="28.5" r="3.5"/><circle cx="22" cy="5" r="2"/><circle cx="3" cy="18" r="1"/><circle cx="30" cy="9" r="1"/><circle cx="15" cy="31" r="1"/><circle cx="32" cy="19" r="2"/><circle cx="10" cy="23" r="2"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f316.svg b/public/emoji/1f316.svg index 4a782a33e..9cbc981ea 100644 --- a/public/emoji/1f316.svg +++ b/public/emoji/1f316.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M0 18c0 9.941 8.059 18 18 18 .295 0 .58-.029.87-.043C24.761 33.393 29 26.332 29 18 29 9.669 24.761 2.607 18.87.044 18.58.03 18.295 0 18 0 8.059 0 0 8.059 0 18z"/><path fill="#66757F" d="M29 18C29 9.669 24.761 2.607 18.87.044 28.404.501 36 8.353 36 18c0 9.646-7.594 17.498-17.128 17.956C24.762 33.391 29 26.331 29 18z"/><circle fill="#B8C5CD" cx="10.5" cy="8.5" r="3.5"/><circle fill="#B8C5CD" cx="20" cy="16" r="3"/><circle fill="#B8C5CD" cx="21.5" cy="27.5" r="3.5"/><circle fill="#B8C5CD" cx="21" cy="6" r="2"/><circle fill="#B8C5CD" cx="3" cy="18" r="1"/><circle fill="#5B6876" cx="30" cy="9" r="1"/><circle fill="#B8C5CD" cx="15" cy="31" r="1"/><circle fill="#5B6876" cx="32" cy="19" r="2"/><circle fill="#B8C5CD" cx="10" cy="23" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M0 18c0 9.941 8.059 18 18 18 .295 0 .58-.029.87-.043C24.761 33.393 29 26.332 29 18 29 9.669 24.761 2.607 18.87.044 18.58.03 18.295 0 18 0 8.059 0 0 8.059 0 18z"/><path fill="#66757F" d="M29 18C29 9.669 24.761 2.607 18.87.044 28.404.501 36 8.353 36 18c0 9.646-7.594 17.498-17.128 17.956C24.762 33.391 29 26.331 29 18z"/><circle fill="#FFCC4D" cx="10.5" cy="8.5" r="3.5"/><circle fill="#FFCC4D" cx="20" cy="16" r="3"/><circle fill="#FFCC4D" cx="21.5" cy="27.5" r="3.5"/><circle fill="#FFCC4D" cx="21" cy="6" r="2"/><circle fill="#FFCC4D" cx="3" cy="18" r="1"/><circle fill="#5B6876" cx="30" cy="9" r="1"/><circle fill="#FFCC4D" cx="15" cy="31" r="1"/><circle fill="#5B6876" cx="32" cy="19" r="2"/><circle fill="#FFCC4D" cx="10" cy="23" r="2"/></svg> \ No newline at end of file diff --git a/public/emoji/1f317.svg b/public/emoji/1f317.svg index 403d02e25..a5813f0f1 100644 --- a/public/emoji/1f317.svg +++ b/public/emoji/1f317.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M18 0v36C8.059 36 0 27.941 0 18S8.059 0 18 0z"/><path fill="#66757F" d="M36 18c0 9.941-8.059 18-18 18V0c9.941 0 18 8.059 18 18z"/><circle fill="#B8C5CD" cx="10.5" cy="8.5" r="3.5"/><circle fill="#5B6876" cx="24" cy="16" r="3"/><circle fill="#5B6876" cx="22.5" cy="27.5" r="3.5"/><circle fill="#5B6876" cx="21" cy="6" r="2"/><circle fill="#B8C5CD" cx="3" cy="18" r="1"/><circle fill="#5B6876" cx="30" cy="9" r="1"/><circle fill="#B8C5CD" cx="15" cy="31" r="1"/><circle fill="#5B6876" cx="32" cy="19" r="2"/><circle fill="#B8C5CD" cx="10" cy="23" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M18 0v36C8.059 36 0 27.941 0 18S8.059 0 18 0z"/><path fill="#66757F" d="M36 18c0 9.941-8.059 18-18 18V0c9.941 0 18 8.059 18 18z"/><circle fill="#FFCC4D" cx="10.5" cy="8.5" r="3.5"/><circle fill="#5B6876" cx="24" cy="16" r="3"/><circle fill="#5B6876" cx="22.5" cy="27.5" r="3.5"/><circle fill="#5B6876" cx="21" cy="6" r="2"/><circle fill="#FFCC4D" cx="3" cy="18" r="1"/><circle fill="#5B6876" cx="30" cy="9" r="1"/><circle fill="#FFCC4D" cx="15" cy="31" r="1"/><circle fill="#5B6876" cx="32" cy="19" r="2"/><circle fill="#FFCC4D" cx="10" cy="23" r="2"/></svg> \ No newline at end of file diff --git a/public/emoji/1f318.svg b/public/emoji/1f318.svg index 490baa9ed..bad95d5ec 100644 --- a/public/emoji/1f318.svg +++ b/public/emoji/1f318.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#CCD6DD" cx="18" cy="18" r="18"/><path fill="#66757F" d="M36 18c0 9.941-8.059 18-18 18-.294 0-.58-.029-.87-.043C11.239 33.393 7 26.332 7 18 7 9.669 11.239 2.607 17.13.044 17.42.03 17.706 0 18 0c9.941 0 18 8.059 18 18z"/><circle fill="#5B6876" cx="25.5" cy="8.5" r="3.5"/><circle fill="#5B6876" cx="16" cy="16" r="3"/><circle fill="#5B6876" cx="14.5" cy="27.5" r="3.5"/><circle fill="#5B6876" cx="15" cy="6" r="2"/><circle fill="#5B6876" cx="33" cy="18" r="1"/><circle fill="#B8C5CD" cx="6" cy="9" r="1"/><circle fill="#5B6876" cx="21" cy="31" r="1"/><circle fill="#B8C5CD" cx="4" cy="19" r="2"/><circle fill="#5B6876" cx="26" cy="23" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFD983" cx="18" cy="18" r="18"/><path fill="#66757F" d="M36 18c0 9.941-8.059 18-18 18-.294 0-.58-.029-.87-.043C11.239 33.393 7 26.332 7 18 7 9.669 11.239 2.607 17.13.044 17.42.03 17.706 0 18 0c9.941 0 18 8.059 18 18z"/><circle fill="#5B6876" cx="25.5" cy="8.5" r="3.5"/><circle fill="#5B6876" cx="16" cy="16" r="3"/><circle fill="#5B6876" cx="14.5" cy="27.5" r="3.5"/><circle fill="#5B6876" cx="15" cy="6" r="2"/><circle fill="#5B6876" cx="33" cy="18" r="1"/><circle fill="#FFCC4D" cx="6" cy="9" r="1"/><circle fill="#5B6876" cx="21" cy="31" r="1"/><circle fill="#FFCC4D" cx="4" cy="19" r="2"/><circle fill="#5B6876" cx="26" cy="23" r="2"/></svg> \ No newline at end of file diff --git a/public/emoji/1f319.svg b/public/emoji/1f319.svg index aba4295ff..d98dc2f9f 100644 --- a/public/emoji/1f319.svg +++ b/public/emoji/1f319.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M30.312.776C32 19 20 32 .776 30.312c8.199 7.717 21.091 7.588 29.107-.429C37.9 21.867 38.03 8.975 30.312.776z"/><path d="M30.705 15.915c-.453.454-.453 1.189 0 1.644.454.453 1.189.453 1.643 0 .454-.455.455-1.19 0-1.644-.453-.454-1.189-.454-1.643 0zm-16.022 14.38c-.682.681-.682 1.783 0 2.465.68.682 1.784.682 2.464 0 .681-.682.681-1.784 0-2.465-.68-.682-1.784-.682-2.464 0zm13.968-2.147c-1.135 1.135-2.974 1.135-4.108 0-1.135-1.135-1.135-2.975 0-4.107 1.135-1.136 2.974-1.136 4.108 0 1.135 1.133 1.135 2.973 0 4.107z" fill="#B8C5CD"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M30.312.776C32 19 20 32 .776 30.312c8.199 7.717 21.091 7.588 29.107-.429C37.9 21.867 38.03 8.975 30.312.776z"/><path d="M30.705 15.915c-.453.454-.453 1.189 0 1.644.454.453 1.189.453 1.643 0 .454-.455.455-1.19 0-1.644-.453-.454-1.189-.454-1.643 0zm-16.022 14.38c-.682.681-.682 1.783 0 2.465.68.682 1.784.682 2.464 0 .681-.682.681-1.784 0-2.465-.68-.682-1.784-.682-2.464 0zm13.968-2.147c-1.135 1.135-2.974 1.135-4.108 0-1.135-1.135-1.135-2.975 0-4.107 1.135-1.136 2.974-1.136 4.108 0 1.135 1.133 1.135 2.973 0 4.107z" fill="#FFCC4D"/></svg> \ No newline at end of file diff --git a/public/emoji/1f31b.svg b/public/emoji/1f31b.svg index 8cf1eed2a..3fffcdd50 100644 --- a/public/emoji/1f31b.svg +++ b/public/emoji/1f31b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M25 13c0-4.984-1.934-9.505-5.073-12.894C28.961 1.068 36 8.71 36 18c0 9.941-8.06 18-18 18-4.303 0-8.25-1.515-11.347-4.033 7.163-.245 13.305-4.451 16.35-10.484.622-1.232-2.795-1.201-2.962-3.482C19.887 15.87 25 15.26 25 13"/><g fill="#B8C5CD"><circle cx="25.5" cy="28.5" r="3.5"/><circle cx="27" cy="7" r="1"/><circle cx="18" cy="32" r="1"/><circle cx="33" cy="20" r="2"/></g><path d="M19.797 26.023c.775-.819 1.48-1.705 2.104-2.651 5.449 1.226 7.637-.273 7.316.807-.34 1.147-4.797 3.008-9.42 1.844M26 14.5c0 1.381 1.12 2.5 2.5 2.5s2.5-1.119 2.5-2.5-1.12-2.5-2.5-2.5-2.5 1.119-2.5 2.5" fill="#4F585D"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M25 13c0-4.984-1.934-9.505-5.073-12.894C28.961 1.068 36 8.71 36 18c0 9.941-8.06 18-18 18-4.303 0-8.25-1.515-11.347-4.033 7.163-.245 13.305-4.451 16.35-10.484.622-1.232-2.795-1.201-2.962-3.482C19.887 15.87 25 15.26 25 13"/><g fill="#FFCC4D"><circle cx="25.5" cy="28.5" r="3.5"/><circle cx="27" cy="7" r="1"/><circle cx="18" cy="32" r="1"/><circle cx="33" cy="20" r="2"/></g><path d="M19.797 26.023c.775-.819 1.48-1.705 2.104-2.651 5.449 1.226 7.637-.273 7.316.807-.34 1.147-4.797 3.008-9.42 1.844M26 14.5c0 1.381 1.12 2.5 2.5 2.5s2.5-1.119 2.5-2.5-1.12-2.5-2.5-2.5-2.5 1.119-2.5 2.5" fill="#292F33"/></svg> \ No newline at end of file diff --git a/public/emoji/1f31c.svg b/public/emoji/1f31c.svg index b41a17c2d..07501e928 100644 --- a/public/emoji/1f31c.svg +++ b/public/emoji/1f31c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M11 13c0-4.984 1.934-9.505 5.073-12.894C7.039 1.068 0 8.71 0 18c0 9.941 8.06 18 18 18 4.303 0 8.25-1.515 11.348-4.033-7.164-.245-13.306-4.451-16.351-10.484-.622-1.232 2.795-1.201 2.962-3.482C16.113 15.87 11 15.26 11 13"/><g fill="#B8C5CD"><circle cx="10.5" cy="28.5" r="3.5"/><circle cx="9" cy="7" r="1"/><circle cx="18" cy="32" r="1"/><circle cx="3" cy="20" r="2"/></g><path d="M16.203 26.023c-.775-.819-1.48-1.705-2.104-2.651-5.449 1.226-7.637-.273-7.316.807.341 1.147 4.797 3.008 9.42 1.844M10 14.5c0 1.381-1.12 2.5-2.5 2.5S5 15.881 5 14.5 6.12 12 7.5 12s2.5 1.119 2.5 2.5" fill="#4F585D"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M11 13c0-4.984 1.934-9.505 5.073-12.894C7.039 1.068 0 8.71 0 18c0 9.941 8.06 18 18 18 4.303 0 8.25-1.515 11.348-4.033-7.164-.245-13.306-4.451-16.351-10.484-.622-1.232 2.795-1.201 2.962-3.482C16.113 15.87 11 15.26 11 13"/><g fill="#FFCC4D"><circle cx="10.5" cy="28.5" r="3.5"/><circle cx="9" cy="7" r="1"/><circle cx="18" cy="32" r="1"/><circle cx="3" cy="20" r="2"/></g><path d="M16.203 26.023c-.775-.819-1.48-1.705-2.104-2.651-5.449 1.226-7.637-.273-7.316.807.341 1.147 4.797 3.008 9.42 1.844M10 14.5c0 1.381-1.12 2.5-2.5 2.5S5 15.881 5 14.5 6.12 12 7.5 12s2.5 1.119 2.5 2.5" fill="#292F33"/></svg> \ No newline at end of file diff --git a/public/emoji/1f31d.svg b/public/emoji/1f31d.svg index 7204904b5..4c9896919 100644 --- a/public/emoji/1f31d.svg +++ b/public/emoji/1f31d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M36 18c0 9.941-8.059 18-18 18S0 27.941 0 18 8.059 0 18 0s18 8.059 18 18"/><g fill="#B8C5CD"><circle cx="9.5" cy="7.5" r="3.5"/><circle cx="24.5" cy="28.5" r="3.5"/><circle cx="22" cy="5" r="2"/><circle cx="3" cy="18" r="1"/><circle cx="30" cy="9" r="1"/><circle cx="16" cy="31" r="1"/><circle cx="32" cy="19" r="2"/><circle cx="6" cy="26" r="2"/></g><path d="M18 24.904c-7 0-9-2.618-9-1.381C9 24.762 13 28 18 28s9-3.238 9-4.477c0-1.237-2 1.381-9 1.381M27 15c0 1.657-1.344 3-3 3s-3-1.343-3-3 1.344-3 3-3 3 1.343 3 3m-12 0c0 1.657-1.344 3-3 3s-3-1.343-3-3 1.344-3 3-3 3 1.343 3 3" fill="#4F585D"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M36 18c0 9.941-8.059 18-18 18S0 27.941 0 18 8.059 0 18 0s18 8.059 18 18"/><g fill="#FFCC4D"><circle cx="9.5" cy="7.5" r="3.5"/><circle cx="24.5" cy="28.5" r="3.5"/><circle cx="22" cy="5" r="2"/><circle cx="3" cy="18" r="1"/><circle cx="30" cy="9" r="1"/><circle cx="16" cy="31" r="1"/><circle cx="32" cy="19" r="2"/><circle cx="6" cy="26" r="2"/></g><path d="M18 24.904c-7 0-9-2.618-9-1.381C9 24.762 13 28 18 28s9-3.238 9-4.477c0-1.237-2 1.381-9 1.381M27 15c0 1.657-1.344 3-3 3s-3-1.343-3-3 1.344-3 3-3 3 1.343 3 3m-12 0c0 1.657-1.344 3-3 3s-3-1.343-3-3 1.344-3 3-3 3 1.343 3 3" fill="#292F33"/></svg> \ No newline at end of file diff --git a/public/emoji/1f32b.svg b/public/emoji/1f32b.svg index 08281c9ae..fe6e480b6 100644 --- a/public/emoji/1f32b.svg +++ b/public/emoji/1f32b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F5F8FA" d="M32 0H4C1.791 0 0 1.791 0 4v28c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V4c0-2.209-1.791-4-4-4z"/><path fill="#E1E8ED" d="M36 16.368V9.257c-.638-.394-1.383-.632-2.188-.632-1.325 0-2.491.627-3.259 1.588C29.75 9.466 28.683 9 27.5 9c-.721 0-1.392.185-1.996.486C24.763 8.018 23.257 7 21.5 7c-.607 0-1.184.124-1.712.342C19.308 5.981 18.024 5 16.5 5c-1.207 0-2.273.611-2.901 1.542C12.97 6.207 12.263 6 11.5 6c-1.641 0-3.062.887-3.848 2.198C6.928 6.33 5.125 5 3 5c-1.131 0-2.162.389-3 1.022v7.955C.838 14.611 1.869 15 3 15c1.914 0 3.558-1.088 4.398-2.668C8.101 13.902 9.669 15 11.5 15c.698 0 1.351-.172 1.94-.456C13.965 15.413 14.91 16 16 16c.996 0 1.871-.49 2.417-1.236.769.727 1.792 1.18 2.924 1.221C21.901 17.172 23.1 18 24.5 18c.504 0 .981-.111 1.413-.303.495.188 1.027.303 1.587.303 1.534 0 2.884-.771 3.696-1.942.719.581 1.621.942 2.616.942.805 0 1.55-.238 2.188-.632z"/><path fill="#CCD6DD" d="M36 14.771C35.157 13.7 33.864 13 32.396 13c-1.997 0-3.681 1.279-4.318 3.059-.19-.033-.38-.059-.578-.059-.82 0-1.565.294-2.162.767C24.679 16.289 23.876 16 23 16c-.353 0-.689.06-1.015.146.002-.049.015-.096.015-.146 0-2.209-1.791-4-4-4-1.215 0-2.291.554-3.024 1.409C14.369 13.148 13.702 13 13 13c-.18 0-.35.034-.525.053C11.429 10.505 8.926 8.709 6 8.709c-2.551 0-4.777 1.369-6 3.408v13.544c.458.647 1.096 1.048 2 1.048 1.335 0 29.613-2.5 30.396-2.5 1.461 0 2.761-1.343 3.604-2.966v-6.472z"/><path fill="#E1E8ED" d="M36 29.578v-9.156c-.613-.268-1.288-.422-2-.422-2.125 0-3.928 1.33-4.652 3.198C28.562 21.887 27.141 21 25.5 21c-.763 0-1.47.207-2.099.542C22.773 20.611 21.707 20 20.5 20c-1.524 0-2.808.981-3.288 2.342-.528-.218-1.105-.342-1.712-.342-1.757 0-3.263 1.018-4.004 2.486C10.892 24.185 10.221 24 9.5 24c-1.183 0-2.25.466-3.054 1.213-.768-.961-1.934-1.588-3.259-1.588-1.284 0-2.419.591-3.188 1.501v5.373C.768 31.409 1.903 32 3.188 32c.995 0 1.897-.361 2.616-.942C6.616 32.229 7.966 33 9.5 33c.56 0 1.092-.115 1.587-.303.432.192.909.303 1.413.303 1.4 0 2.599-.828 3.159-2.016 1.132-.041 2.155-.494 2.924-1.221C19.129 30.51 20.004 31 21 31c1.09 0 2.035-.587 2.56-1.456.589.284 1.242.456 1.94.456 1.831 0 3.399-1.098 4.102-2.668C30.442 28.912 32.086 30 34 30c.712 0 1.387-.154 2-.422z"/><path fill="#FE5011" d="M36 24.059C32.465 22.229 25.013 17.594 20 9c0 0 0-2-2-2s-2 2-2 2C10.987 17.594 3.535 22.229 0 24.059v2.068c1.044-.495 2.422-1.204 4-2.169V24h2v-1.341c1.284-.88 2.637-1.908 4-3.094V27h2v-9.292c1.384-1.375 2.74-2.923 4-4.655V24h4V13.054c1.26 1.731 2.616 3.28 4 4.655V26h2v-6.435c1.362 1.186 2.716 2.214 4 3.095V25h2v-1.042c1.578.965 2.956 1.674 4 2.169v-2.068z"/><path fill="#F5F8FA" d="M25 25c-.821 0-1.582.249-2.217.673-.664-1.839-2.5-3.07-4.534-2.863-1.883.192-3.348 1.56-3.777 3.298-.181-.012-.363-.019-.55 0-.773.079-1.448.427-1.965.93-.667-.387-1.452-.582-2.278-.498-.333.034-.644.123-.942.236-.003-.047.004-.093 0-.139-.212-2.083-2.073-3.599-4.155-3.387-1.145.117-2.107.742-2.716 1.619-.586-.186-1.217-.258-1.866-.197V32c0 .773.23 1.489.61 2.101.106-.004.208.009.315-.001 1.161-.118 2.166-.661 2.916-1.44.337.081.689.121 1.053.083.686-.07 1.292-.361 1.768-.789.674 1.394 2.156 2.294 3.786 2.128 1.124-.115 2.07-.718 2.682-1.568.456.167.95.246 1.465.193 1.054-.107 1.93-.705 2.456-1.535.641.262 1.346.394 2.084.319.836-.085 1.584-.412 2.205-.889C21.957 32.013 23.362 33 25 33c2.209 0 4-1.791 4-4s-1.791-4-4-4z"/><path fill="#CCD6DD" d="M32 36c2.209 0 4-1.791 4-4v-7.608c-.91-.433-1.925-.683-3-.683-2.926 0-5.429 1.796-6.475 4.344C26.35 28.034 26.18 28 26 28c-.702 0-1.369.147-1.976.409C23.291 27.554 22.215 27 21 27c-2.209 0-4 1.791-4 4 0 .05.013.097.015.146C16.689 31.06 16.353 31 16 31c-.876 0-1.679.289-2.338.767C13.065 31.294 12.32 31 11.5 31c-.198 0-.388.026-.577.059C10.286 29.279 8.602 28 6.604 28c-1.987 0-3.665 1.266-4.31 3.03C2.195 31.022 2.101 31 2 31c-.732 0-1.41.211-2 .555V32c0 2.209 1.791 4 4 4h28z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F5F8FA" d="M32 0H4C1.791 0 0 1.791 0 4v6h36V4c0-2.209-1.791-4-4-4z"/><path fill="#E1E8ED" d="M36 16.368V9.257c-.638-.394-1.383-.632-2.188-.632-1.325 0-2.491.627-3.259 1.588C29.75 9.466 28.683 9 27.5 9c-.721 0-1.392.185-1.996.486C24.763 8.018 23.257 7 21.5 7c-.607 0-1.184.124-1.712.342C19.308 5.981 18.024 5 16.5 5c-1.207 0-2.273.611-2.901 1.542C12.97 6.207 12.263 6 11.5 6c-1.641 0-3.062.887-3.848 2.198C6.928 6.33 5.125 5 3 5c-1.131 0-2.162.389-3 1.022v7.955C.838 14.611 24.5 18 24.5 18s10.862-1.238 11.5-1.632z"/><path fill="#CCD6DD" d="M36 14.771C35.157 13.7 33.864 13 32.396 13c-1.997 0-3.681 1.279-4.318 3.059-.19-.033-.38-.059-.578-.059-.82 0-1.565.294-2.162.767C24.679 16.289 23.876 16 23 16c-.353 0-.689.06-1.015.146.002-.049.015-.096.015-.146 0-2.209-1.791-4-4-4-1.215 0-2.291.554-3.024 1.409C14.369 13.148 13.702 13 13 13c-.18 0-.35.034-.525.053C11.429 10.505 8.926 8.709 6 8.709c-2.551 0-4.777 1.369-6 3.408v13.544l32.396-1.452s2.761-1.343 3.604-2.966v-6.472z"/><path fill="#E1E8ED" d="M36 30.499V20.422c-.613-.268-1.288-.422-2-.422-2.125 0-3.928 1.33-4.652 3.198C28.562 21.887 27.141 21 25.5 21c-.763 0-1.47.207-2.099.542C22.773 20.611 21.707 20 20.5 20c-1.524 0-2.808.981-3.288 2.342-.528-.218-1.105-.342-1.712-.342-1.757 0-3.263 1.018-4.004 2.486C10.892 24.185 10.221 24 9.5 24c-1.183 0-2.25.466-3.054 1.213-.768-.961-1.934-1.588-3.259-1.588-1.284 0-2.419.591-3.188 1.501v5.373H36z"/><path fill="#F5F8FA" d="M25 25c-.821 0-1.582.249-2.217.673-.664-1.839-2.5-3.07-4.534-2.863-1.883.192-3.348 1.56-3.777 3.298-.181-.012-.363-.019-.55 0-.773.079-1.448.427-1.965.93-.667-.387-1.452-.582-2.278-.498-.333.034-.644.123-.942.236-.003-.047.004-.093 0-.139-.212-2.083-2.073-3.599-4.155-3.387-1.145.117-2.107.742-2.716 1.619-.586-.186-1.217-.258-1.866-.197V32c0 .773.23 1.489.61 2.101C.715 34.098 29 31.209 29 29s-1.791-4-4-4z"/><path fill="#CCD6DD" d="M32 36c2.209 0 4-1.791 4-4v-7.608c-.91-.433-1.925-.683-3-.683-2.926 0-5.429 1.796-6.475 4.344C26.35 28.034 26.18 28 26 28c-.702 0-1.369.147-1.976.409C23.291 27.554 22.215 27 21 27c-2.209 0-4 1.791-4 4 0 .05.013.097.015.146C16.689 31.06 16.353 31 16 31c-.876 0-1.679.289-2.338.767C13.065 31.294 12.32 31 11.5 31c-.198 0-.388.026-.577.059C10.286 29.279 8.602 28 6.604 28c-1.987 0-3.665 1.266-4.31 3.03C2.195 31.022 2.101 31 2 31c-.732 0-1.41.211-2 .555V32c0 2.209 1.791 4 4 4h28z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f391.svg b/public/emoji/1f391.svg index 2d2a4cfa1..37c3a7e1a 100644 --- a/public/emoji/1f391.svg +++ b/public/emoji/1f391.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#269" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFCC4D" d="M14.388 2.62c-1.852 0-4.235 1.849-6.22 4.826-2.322 3.483-1.069 5.989-.062 8.002.023.045.054.083.083.123C11 13 15 8 16.591 4.023c-.494-.996-1.364-1.403-2.203-1.403zm4.574 12.2c-.109-1.382-.535-3.206-2.195-3.206-1.21 0-2.576 1.132-4.566 3.785-2.059 2.745-2.424 5.164-1.2 7.8C15 21 18 17 18.962 14.82z"/><path fill="#77B255" d="M22.874 13.517c-.268-.482-.877-.654-1.359-.385-.861.479-1.714 1.051-2.553 1.689C16.053 17.032 13.32 20.085 11 23.2c-2.584 3.469-4.654 7.011-5.852 9.541.838-10.195 5.569-20.044 13.559-28.034.391-.391.391-1.023 0-1.414s-1.023-.391-1.414 0c-.24.24-.468.487-.702.73-3.421 3.55-6.238 7.438-8.402 11.548-2.607 4.95-4.276 10.217-4.9 15.603-.674-5.697-.978-13.91 1.626-19.767.225-.505-.003-1.096-.507-1.32-.508-.227-1.097.002-1.322.507C1.76 13.577 1.141 17.095.924 20.603.638 19.991.331 19.405 0 18.881v4.343c.035.073.073.158.105.223.148.296.425.478.728.53.023 4.55.59 8.758 1.043 11.401C2.493 35.767 3.218 36 4 36h2.003c.08-1.071 2.509-6.019 6.14-11.024.103-.015.206-.033.304-.082.244-.122.516-.272.807-.433.934-.517 2.498-1.383 3.107-1.02.15.089.639.536.639 2.559 0 .553.448 1 1 1s1-.447 1-1c0-2.236-.531-3.636-1.623-4.28-.781-.46-1.666-.423-2.54-.172 2.321-2.715 4.939-5.166 7.648-6.672.484-.269.658-.876.389-1.359z"/><circle fill="#E1E8ED" cx="28.5" cy="7.5" r="5.5"/><path fill="#E1E8ED" d="M29.5 28l-.012.001c.317-.419.512-.935.512-1.501 0-1.381-1.119-2.5-2.5-2.5l-.012.001c.317-.419.512-.935.512-1.501 0-1.381-1.119-2.5-2.5-2.5S23 21.119 23 22.5c0 .566.195 1.082.512 1.501L23.5 24c-1.381 0-2.5 1.119-2.5 2.5 0 .566.195 1.082.512 1.501L21.5 28c-1.381 0-2.5 1.119-2.5 2.5 0 .565.195 1.081.511 1.5h3.976l.013-.013.013.013h3.975l.013-.013.013.013h3.976c.315-.419.51-.935.51-1.5 0-1.381-1.119-2.5-2.5-2.5zm-6 1.013l-.012-.015.012.001.012-.001-.012.015zm2-1.013l-.012.001.012-.015.012.015L25.5 28zm0-2.987l-.012-.015.012.001.012-.001-.012.015zm2 4l-.012-.015.012.001.012-.001-.012.015z"/><path fill="#C1694F" d="M18 32v4h14c.347 0 .679-.058 1-.141V32H18z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#269" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFCC4D" d="M14.388 2.62c-1.852 0-4.235 1.849-6.22 4.826-2.322 3.483-1.069 5.989-.062 8.002.023.045.054.083.083.123C11 13 15 8 16.591 4.023c-.494-.996-1.364-1.403-2.203-1.403zm4.574 12.2c-.109-1.382-.535-3.206-2.195-3.206-1.21 0-2.576 1.132-4.566 3.785-2.059 2.745-2.424 5.164-1.2 7.8C15 21 18 17 18.962 14.82z"/><path fill="#77B255" d="M22.874 13.517c-.268-.482-.877-.654-1.359-.385-.861.479-1.714 1.051-2.553 1.689C16.053 17.032 13.32 20.085 11 23.2c-2.584 3.469-4.654 7.011-5.852 9.541.838-10.195 5.569-20.044 13.559-28.034.391-.391.391-1.023 0-1.414s-1.023-.391-1.414 0c-.24.24-.468.487-.702.73-3.421 3.55-6.238 7.438-8.402 11.548-2.607 4.95-4.276 10.217-4.9 15.603-.674-5.697-.978-13.91 1.626-19.767.225-.505-.003-1.096-.507-1.32-.508-.227-1.097.002-1.322.507C1.76 13.577 1.141 17.095.924 20.603.638 19.991.331 19.405 0 18.881v4.343c.035.073.073.158.105.223.148.296.425.478.728.53.023 4.55.59 8.758 1.043 11.401C2.493 35.767 3.218 36 4 36h2.003c.08-1.071 2.509-6.019 6.14-11.024.103-.015.206-.033.304-.082.244-.122.516-.272.807-.433.934-.517 2.498-1.383 3.107-1.02.15.089.639.536.639 2.559 0 .553.448 1 1 1s1-.447 1-1c0-2.236-.531-3.636-1.623-4.28-.781-.46-1.666-.423-2.54-.172 2.321-2.715 4.939-5.166 7.648-6.672.484-.269.658-.876.389-1.359z"/><circle fill="#FFD983" cx="28.5" cy="7.5" r="5.5"/><path fill="#E1E8ED" d="M29.5 28l-.012.001c.317-.419.512-.935.512-1.501 0-1.381-1.119-2.5-2.5-2.5l-.012.001c.317-.419.512-.935.512-1.501 0-1.381-1.119-2.5-2.5-2.5S23 21.119 23 22.5c0 .566.195 1.082.512 1.501L23.5 24c-1.381 0-2.5 1.119-2.5 2.5 0 .566.195 1.082.512 1.501L21.5 28c-1.381 0-2.5 1.119-2.5 2.5 0 .565.195 1.081.511 1.5h3.976l.013-.013.013.013h3.975l.013-.013.013.013h3.976c.315-.419.51-.935.51-1.5 0-1.381-1.119-2.5-2.5-2.5zm-6 1.013l-.012-.015.012.001.012-.001-.012.015zm2-1.013l-.012.001.012-.015.012.015L25.5 28zm0-2.987l-.012-.015.012.001.012-.001-.012.015zm2 4l-.012-.015.012.001.012-.001-.012.015z"/><path fill="#C1694F" d="M18 32v4h14c.347 0 .679-.058 1-.141V32H18z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f393.svg b/public/emoji/1f393.svg index 6994aad09..dcf38931c 100644 --- a/public/emoji/1f393.svg +++ b/public/emoji/1f393.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M24 14H12s-5 6-5 10 11 11 11 11 11-7 11-11-5-10-5-10z"/><path fill="#292F33" d="M19.64 1.28c-.901-.704-2.377-.704-3.278 0L1.639 12.776c-.901.704-.901 1.856 0 2.56l14.722 11.495c.902.704 2.377.704 3.278 0l14.722-11.495c.902-.704.902-1.856 0-2.56L19.64 1.28z"/><path fill="#394146" d="M19.64 1.28c-.901-.704-2.377-.704-3.278 0L1.639 12.776c-.901.704-.901 1.856 0 2.56l14.722 11.495c.901.704 2.377.704 3.278 0l14.723-11.495c.901-.704.901-1.856 0-2.56L19.64 1.28z"/><path fill="#FCAB40" d="M8 25s-2 2-2 3v6s0 2 2 2 2-2 2-2v-6c0-1-2-3-2-3z"/><circle fill="#FDD888" cx="8" cy="26" r="3"/><path fill="#FCAB40" d="M8.001 27c-.552 0-1-.447-1-1v-3.958c-.042-.634.187-2.036 1.317-2.884l9.022-7.91c.416-.365 1.048-.323 1.411.093.364.415.322 1.047-.093 1.411l-9.08 7.958C8.974 21.166 9 21.982 9 21.99L9.002 26c0 .553-.448 1-1.001 1z"/><circle fill="#292F33" cx="18" cy="13" r="3"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M24 14H12s-5 6-5 10 11 11 11 11 11-7 11-11-5-10-5-10z"/><path fill="#292F33" d="M19.64 1.28c-.901-.704-2.377-.704-3.278 0L1.639 12.776c-.901.704-.901 1.856 0 2.56l14.722 11.495c.902.704 2.377.704 3.278 0l14.722-11.495c.902-.704.902-1.856 0-2.56L19.64 1.28z"/><path fill="#394146" d="M19.64 1.28c-.901-.704-2.377-.704-3.278 0L1.639 12.776c-.901.704-.901 1.856 0 2.56l14.722 11.495c.901.704 2.377.704 3.278 0l14.723-11.495c.901-.704.901-1.856 0-2.56L19.64 1.28z"/><path fill="#FCAB40" d="M8 25s-2 2-2 3v6s0 2 2 2 2-2 2-2v-6c0-1-2-3-2-3z"/><circle fill="#FDD888" cx="8" cy="26" r="3"/><path fill="#FCAB40" d="M8.001 27c-.552 0-1-.447-1-1v-3.958c-.042-.634.187-2.036 1.317-2.884l9.022-7.91c.416-.365 1.048-.323 1.411.093.364.415.322 1.047-.093 1.411l-9.08 7.958C8.974 21.166 9 21.982 9 21.99L9.002 26c0 .553-.448 1-1.001 1z"/><circle fill="#31373D" cx="18" cy="13" r="3"/></svg> \ No newline at end of file diff --git a/public/emoji/1f396.svg b/public/emoji/1f396.svg index 2357b36c0..b5c22696e 100644 --- a/public/emoji/1f396.svg +++ b/public/emoji/1f396.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M25 0H11C9.896 0 9 .896 9 2v11s0 1 1 2l6.429 5h3.142L26 15c1-1 1-2 1-2V2c0-1.104-.896-2-2-2z"/><path fill="#E1E8ED" d="M12 0v16.555L16.429 20h3.142L24 16.555V0z"/><path fill="#DD2E44" d="M14 0v18.111L16.429 20h3.142L22 18.111V0z"/><path fill="#FFAC33" d="M21.902 21.02c.06-.163.098-.337.098-.52 0-.828-.672-1.5-1.5-1.5h-5c-.829 0-1.5.672-1.5 1.5 0 .183.038.357.098.52C11.654 22.389 10 25 10 28c0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8 0-3-1.654-5.611-4.098-6.98z"/><circle fill="#FFD983" cx="18" cy="28" r="6"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M25 0H11C9.896 0 9 .896 9 2v11s0 1 1 2l6.429 5h3.142L26 15c1-1 1-2 1-2V2c0-1.104-.896-2-2-2z"/><path fill="#E1E8ED" d="M12 0v16.555L16.429 20h3.142L24 16.555V0z"/><path fill="#DD2E44" d="M14 0v18.111L16.429 20h3.142L22 18.111V0z"/><path fill="#FFAC33" d="M21.902 21.02c.06-.163.098-.337.098-.52 0-.828-.672-1.5-1.5-1.5h-5c-.829 0-1.5.672-1.5 1.5 0 .183.038.357.098.52C11.654 22.389 10 25 10 28c0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8 0-3-1.654-5.611-4.098-6.98z"/><circle fill="#FFD983" cx="18" cy="28" r="6"/><path fill="#FFAC33" d="M20.731 32.36c-.119 0-.237-.036-.339-.109L18 30.535l-2.393 1.716c-.204.146-.477.146-.68-.002-.203-.147-.288-.407-.212-.645l.892-2.88-2.371-1.671c-.202-.149-.285-.41-.208-.648.078-.238.299-.399.549-.401L16.514 26l.935-2.809c.079-.238.301-.398.551-.398.25 0 .472.16.551.398L19.47 26l2.952.004c.251.002.472.163.549.401.077.238-.006.499-.208.648l-2.371 1.671.892 2.88c.076.238-.01.498-.212.645-.101.074-.221.111-.341.111z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f397.svg b/public/emoji/1f397.svg index 3f4a798bd..1f419d451 100644 --- a/public/emoji/1f397.svg +++ b/public/emoji/1f397.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M13.193 8.624S14.75 7 18 7s4.955 1.692 4.955 1.692l.186.136s1.906-3.594.517-6.659C22.593 1.464 20.661.5 18 .5c-2.554 0-4.451.893-5.54 1.589-1.507 3.068.509 6.661.509 6.661l.224-.126zm-1.749-5.771l-.042.038.038-.033.004-.005z"/><path fill="#50A5E6" d="M28.382 27.677c-.06-.071-3.026-3.58-6.27-7.491l-4.01 5.771 6.488 9.33c.095.135.248.213.41.213.018 0 .034-.001.052-.003.181-.019.336-.134.408-.3l3-7c.074-.174.044-.376-.078-.52zM14.04 10.096c-.343-.509-.611-.996-.846-1.472-1.027-2.078-1.125-3.849-.945-5.333.059-.487.152-.905.211-1.202-.593.378-.925.679-1.016.765l-.004.005-.038.033C9.28 4.591 8.156 6.788 8.156 9.25c0 2.469 1.719 4.781 3.237 7.042.105.156 1.195 1.727 2.707 3.904 1.357-1.636 2.755-3.334 4.009-4.88-1.882-2.316-3.451-4.302-4.069-5.22z"/><path fill="#2B7BB9" d="M24.685 2.975l-.086-.083c-.035-.034-.368-.343-.941-.722.058.298.157.729.218 1.237.178 1.473.084 3.228-.921 5.285-.24.491-.516.994-.87 1.52-.608.902-2.135 2.838-3.975 5.105-1.255 1.546-2.653 3.244-4.009 4.88-3.278 3.953-6.297 7.525-6.357 7.596-.124.145-.154.347-.08.52l3 7c.072.166.228.281.408.3.018.002.034.003.052.003.162 0 .315-.078.409-.213.052-.074 3.305-4.751 6.569-9.447l4.01-5.771c1.465-2.11 2.516-3.624 2.619-3.778 1.518-2.261 3.237-4.574 3.237-7.042 0-2.477-1.135-4.687-3.283-6.39z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M13.193 8.624S14.75 7 18 7s4.955 1.692 4.955 1.692l.186.136s1.906-3.594.517-6.659C22.593 1.464 20.661.5 18 .5c-2.554 0-4.451.893-5.54 1.589-1.507 3.068.509 6.661.509 6.661l.224-.126z"/><path fill="#FFCC4D" d="M24.685 2.975l-.086-.083c-.035-.034-.368-.343-.941-.722.058.298.157.729.218 1.237.178 1.473.084 3.228-.921 5.285-.24.491-.516.994-.87 1.52-.608.902-2.135 2.838-3.975 5.105-1.255 1.546-2.653 3.244-4.009 4.88-3.278 3.953-6.297 7.525-6.357 7.596-.124.145-.154.347-.08.52l3 7c.072.166.228.281.408.3.018.002.034.003.052.003.162 0 .315-.078.409-.213.052-.074 3.305-4.751 6.569-9.447l4.01-5.771c1.465-2.11 2.516-3.624 2.619-3.778 1.518-2.261 3.237-4.574 3.237-7.042 0-2.477-1.135-4.687-3.283-6.39z"/><path fill="#FFAC33" d="M13.254 21.215l3.965 6.012 5.448-7.84-3.979-4.786c-.19.235-5.155 6.278-5.434 6.614z"/><path fill="#FFCC4D" d="M11.449 2.891l.086-.083c.035-.034.368-.343.941-.722-.058.298-.157.729-.218 1.237-.178 1.473-.084 3.228.921 5.285.24.491.516.994.87 1.52.608.902 2.135 2.838 3.975 5.105 1.255 1.546 2.653 3.244 4.009 4.88 3.278 3.953 6.297 7.525 6.357 7.596.122.145.152.347.078.521l-3 7c-.072.166-.228.281-.408.3-.018.002-.034.003-.052.003-.162 0-.315-.078-.409-.213-.052-.074-3.305-4.751-6.569-9.447l-4.01-5.771c-1.465-2.11-2.516-3.624-2.619-3.778-1.518-2.261-3.237-4.574-3.237-7.042.002-2.477 1.137-4.688 3.285-6.391z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f39b.svg b/public/emoji/1f39b.svg index f239d02c5..9d355c4a9 100644 --- a/public/emoji/1f39b.svg +++ b/public/emoji/1f39b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#9AAAB4" cx="18" cy="18" r="17"/><path fill="#CCD6DD" d="M18 18l14.64 8.612C34.13 24.084 35 21.147 35 18c0-9.389-7.61-17-17-17C8.611 1 1 8.611 1 18c0 3.167.881 6.12 2.389 8.658L18 18z"/><circle fill="#DA2F47" cx="18" cy="4.4" r="1.457"/><circle fill="#DA2F47" cx="24.8" cy="6.344" r="1.457"/><circle fill="#DA2F47" cx="11.201" cy="6.344" r="1.457"/><circle fill="#DA2F47" cx="6.343" cy="11.2" r="1.457"/><circle fill="#DA2F47" cx="4.4" cy="18" r="1.457"/><circle fill="#67757F" cx="29.657" cy="11.2" r="1.457"/><circle fill="#67757F" cx="31.602" cy="18" r="1.457"/><circle cx="18" cy="18" r="10.372"/><circle fill="#292F33" cx="18" cy="18" r="8.486"/><path fill="#E1E8ED" d="M22.243 12.343l-4.95 4.95c-.391.391-.391 1.023 0 1.414s1.023.391 1.414 0l4.95-4.95c.391-.391.391-1.023 0-1.415-.39-.389-1.024-.389-1.414.001z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><circle fill="#67757F" cx="27" cy="20.6" r=".686"/><circle fill="#67757F" cx="30.2" cy="21.515" r=".686"/><circle fill="#67757F" cx="23.8" cy="21.515" r=".686"/><circle fill="#67757F" cx="21.514" cy="23.8" r=".686"/><circle fill="#67757F" cx="20.6" cy="27" r=".686"/><circle fill="#67757F" cx="32.486" cy="23.8" r=".686"/><circle fill="#DA2F47" cx="33.401" cy="27" r=".686"/><circle cx="27" cy="27" r="4.881"/><circle fill="#292F33" cx="27" cy="27" r="3.994"/><path fill="#E1E8ED" d="M28.182 24.118l-1.697 2.824c-.134.223-.062.512.161.646s.512.062.646-.161l1.697-2.824c.134-.223.062-.512-.161-.646-.223-.133-.512-.061-.646.161z"/><circle fill="#67757F" cx="9" cy="20.6" r=".686"/><circle fill="#67757F" cx="12.2" cy="21.515" r=".686"/><circle fill="#67757F" cx="5.8" cy="21.515" r=".686"/><circle fill="#67757F" cx="3.514" cy="23.8" r=".686"/><circle fill="#67757F" cx="2.6" cy="27" r=".686"/><circle fill="#67757F" cx="14.486" cy="23.8" r=".686"/><circle fill="#DA2F47" cx="15.401" cy="27" r=".686"/><circle cx="9" cy="27" r="4.881"/><circle fill="#292F33" cx="9.001" cy="26.999" r="3.994"/><path fill="#E1E8ED" d="M6.099 25.868l2.853 1.647c.225.13.513.053.643-.172.13-.225.053-.513-.172-.643L6.57 25.053c-.226-.13-.513-.053-.643.172-.13.225-.053.513.172.643z"/><circle fill="#67757F" cx="27" cy="3.6" r=".686"/><circle fill="#67757F" cx="30.2" cy="4.515" r=".686"/><circle fill="#67757F" cx="23.8" cy="4.515" r=".686"/><circle fill="#67757F" cx="21.514" cy="6.8" r=".686"/><circle fill="#67757F" cx="20.6" cy="10" r=".686"/><circle fill="#67757F" cx="32.486" cy="6.8" r=".686"/><circle fill="#DA2F47" cx="33.401" cy="10" r=".686"/><circle cx="27" cy="10" r="4.881"/><circle fill="#292F33" cx="27.001" cy="10" r="3.994"/><path fill="#E1E8ED" d="M25.011 7.603l1.697 2.824c.134.223.423.295.646.161.223-.134.295-.423.161-.646l-1.696-2.824c-.134-.223-.423-.295-.646-.161-.224.134-.296.424-.162.646z"/><circle fill="#67757F" cx="9" cy="3.6" r=".686"/><circle fill="#67757F" cx="12.2" cy="4.515" r=".686"/><circle fill="#67757F" cx="5.8" cy="4.515" r=".686"/><circle fill="#67757F" cx="3.514" cy="6.8" r=".686"/><circle fill="#67757F" cx="2.6" cy="10" r=".686"/><circle fill="#67757F" cx="14.486" cy="6.8" r=".686"/><circle fill="#DA2F47" cx="15.401" cy="10" r=".686"/><circle cx="9" cy="9.999" r="4.881"/><circle fill="#292F33" cx="8.999" cy="10" r="3.994"/><path fill="#E1E8ED" d="M11.431 8.053L8.578 9.7c-.225.13-.302.418-.172.643.13.225.418.302.643.172l2.853-1.647c.225-.13.302-.418.172-.643-.131-.225-.419-.302-.643-.172z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3a4.svg b/public/emoji/1f3a4.svg index d3c6697c9..e26133475 100644 --- a/public/emoji/1f3a4.svg +++ b/public/emoji/1f3a4.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M35.999 11.917c0 3.803-3.082 6.885-6.885 6.885-3.802 0-6.884-3.082-6.884-6.885 0-3.802 3.082-6.884 6.884-6.884 3.803 0 6.885 3.082 6.885 6.884z"/><path fill="#292F33" d="M32.81 18.568c-.336.336-.881.336-1.217 0L22.466 9.44c-.336-.336-.336-.881 0-1.217l1.217-1.217c.336-.336.881-.336 1.217 0l9.127 9.128c.336.336.336.881 0 1.217l-1.217 1.217zm-6.071.136l-4.325-4.327c-.778-.779-1.995-.733-2.719.101l-9.158 10.574c-1.219 1.408-1.461 3.354-.711 4.73l-4.911 4.912 1.409 1.409 4.877-4.877c1.381.84 3.411.609 4.862-.648l10.575-9.157c.834-.723.881-1.94.101-2.717z"/><path fill="#55ACEE" d="M4 6v8.122C3.686 14.047 3.352 14 3 14c-1.657 0-3 .896-3 2s1.343 2 3 2 3-.896 3-2V9.889l5 2.222v5.011c-.314-.075-.648-.122-1-.122-1.657 0-3 .896-3 2s1.343 2 3 2 2.999-.896 3-2v-9L4 6zm14-5v8.123C17.685 9.048 17.353 9 17 9c-1.657 0-3 .895-3 2 0 1.104 1.343 2 3 2 1.656 0 3-.896 3-2V1h-2z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M35.999 11.917c0 3.803-3.082 6.885-6.885 6.885-3.802 0-6.884-3.082-6.884-6.885 0-3.802 3.082-6.884 6.884-6.884 3.803 0 6.885 3.082 6.885 6.884z"/><path fill="#31373D" d="M32.81 18.568c-.336.336-.881.336-1.217 0L22.466 9.44c-.336-.336-.336-.881 0-1.217l1.217-1.217c.336-.336.881-.336 1.217 0l9.127 9.128c.336.336.336.881 0 1.217l-1.217 1.217zm-6.071.136l-4.325-4.327c-.778-.779-1.995-.733-2.719.101l-9.158 10.574c-1.219 1.408-1.461 3.354-.711 4.73l-4.911 4.912 1.409 1.409 4.877-4.877c1.381.84 3.411.609 4.862-.648l10.575-9.157c.834-.723.881-1.94.101-2.717z"/><path fill="#55ACEE" d="M4 6v8.122C3.686 14.047 3.352 14 3 14c-1.657 0-3 .896-3 2s1.343 2 3 2 3-.896 3-2V9.889l5 2.222v5.011c-.314-.075-.648-.122-1-.122-1.657 0-3 .896-3 2s1.343 2 3 2 2.999-.896 3-2v-9L4 6zm14-5v8.123C17.685 9.048 17.353 9 17 9c-1.657 0-3 .895-3 2 0 1.104 1.343 2 3 2 1.656 0 3-.896 3-2V1h-2z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3a5.svg b/public/emoji/1f3a5.svg index cc3458749..d6c68e0d7 100644 --- a/public/emoji/1f3a5.svg +++ b/public/emoji/1f3a5.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 21v1h-2v-1c0-.446-.09-.867-.225-1.268 2.446-.757 4.224-3.038 4.224-5.733 0-3.314-2.687-6-6-6-1.603 0-3.055.632-4.131 1.656C23.241 6.433 20.405 4 17 4c-3.866 0-7 3.134-7 7 0 2.551 1.369 4.777 3.409 6H13c-2.209 0-4 1.791-4 4H8l-6-4H1v14h1l6-4h1v2c0 2.209 1.791 4 4 4h13c2.209 0 4-1.791 4-4v-3h2v1h3v-6h-3z"/><path fill="#66757F" d="M22 11c0 2.761-2.239 5-5 5s-5-2.239-5-5 2.239-5 5-5 5 2.238 5 5z"/><circle fill="#CCD6DD" cx="17" cy="11" r="2"/><circle fill="#66757F" cx="27.999" cy="14" r="4"/><circle fill="#CCD6DD" cx="27.999" cy="14" r="2"/><path fill="#8899A6" d="M17 20h10v10H17z"/><path fill="#292F33" d="M19 22h6v6h-6z"/><circle fill="#8899A6" cx="12.999" cy="28" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M32 21v1h-2v-1c0-.446-.09-.867-.225-1.268 2.446-.757 4.224-3.038 4.224-5.733 0-3.314-2.687-6-6-6-1.603 0-3.055.632-4.131 1.656C23.241 6.433 20.405 4 17 4c-3.866 0-7 3.134-7 7 0 2.551 1.369 4.777 3.409 6H13c-2.209 0-4 1.791-4 4H8l-6-4H1v14h1l6-4h1v2c0 2.209 1.791 4 4 4h13c2.209 0 4-1.791 4-4v-3h2v1h3v-6h-3z"/><path fill="#66757F" d="M22 11c0 2.761-2.239 5-5 5s-5-2.239-5-5 2.239-5 5-5 5 2.238 5 5z"/><circle fill="#CCD6DD" cx="17" cy="11" r="2"/><circle fill="#66757F" cx="27.999" cy="14" r="4"/><circle fill="#CCD6DD" cx="27.999" cy="14" r="2"/><path fill="#8899A6" d="M17 20h10v10H17z"/><path fill="#31373D" d="M19 22h6v6h-6z"/><circle fill="#8899A6" cx="12.999" cy="28" r="2"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3a7.svg b/public/emoji/1f3a7.svg index a99203a60..3a9df15ae 100644 --- a/public/emoji/1f3a7.svg +++ b/public/emoji/1f3a7.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M18 0C9.716 0 3 6.716 3 15v9h3v-9C6 8 11.269 2.812 18 2.812 24.73 2.812 30 8 30 15v10l3-1v-9c0-8.284-6.716-15-15-15z"/><path fill="#292F33" d="M6 27c0 1.104-.896 2-2 2H2c-1.104 0-2-.896-2-2v-9c0-1.104.896-2 2-2h2c1.104 0 2 .896 2 2v9zm30 0c0 1.104-.896 2-2 2h-2c-1.104 0-2-.896-2-2v-9c0-1.104.896-2 2-2h2c1.104 0 2 .896 2 2v9z"/><path fill="#55ACEE" d="M19.182 10.016l-6.364 1.313c-.45.093-.818.544-.818 1.004v16.185c-.638-.227-1.341-.36-2.087-.36-2.785 0-5.042 1.755-5.042 3.922 0 2.165 2.258 3.827 5.042 3.827C12.649 35.905 14.922 34 15 32V16.39l4.204-.872c.449-.093.796-.545.796-1.004v-3.832c0-.458-.368-.759-.818-.666zm8 3.151l-4.297.865c-.45.093-.885.544-.885 1.003V26.44c0-.152-.878-.24-1.4-.24-2.024 0-3.633 1.276-3.633 2.852 0 1.574 1.658 2.851 3.683 2.851s3.677-1.277 3.677-2.851l-.014-11.286 2.869-.598c.45-.093.818-.544.818-1.003v-2.33c0-.459-.368-.76-.818-.668z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M18 0C9.716 0 3 6.716 3 15v9h3v-9C6 8 11.269 2.812 18 2.812 24.73 2.812 30 8 30 15v10l3-1v-9c0-8.284-6.716-15-15-15z"/><path fill="#31373D" d="M6 27c0 1.104-.896 2-2 2H2c-1.104 0-2-.896-2-2v-9c0-1.104.896-2 2-2h2c1.104 0 2 .896 2 2v9zm30 0c0 1.104-.896 2-2 2h-2c-1.104 0-2-.896-2-2v-9c0-1.104.896-2 2-2h2c1.104 0 2 .896 2 2v9z"/><path fill="#55ACEE" d="M19.182 10.016l-6.364 1.313c-.45.093-.818.544-.818 1.004v16.185c-.638-.227-1.341-.36-2.087-.36-2.785 0-5.042 1.755-5.042 3.922 0 2.165 2.258 3.827 5.042 3.827C12.649 35.905 14.922 34 15 32V16.39l4.204-.872c.449-.093.796-.545.796-1.004v-3.832c0-.458-.368-.759-.818-.666zm8 3.151l-4.297.865c-.45.093-.885.544-.885 1.003V26.44c0-.152-.878-.24-1.4-.24-2.024 0-3.633 1.276-3.633 2.852 0 1.574 1.658 2.851 3.683 2.851s3.677-1.277 3.677-2.851l-.014-11.286 2.869-.598c.45-.093.818-.544.818-1.003v-2.33c0-.459-.368-.76-.818-.668z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3a9.svg b/public/emoji/1f3a9.svg index 503078ad3..1017cef3a 100644 --- a/public/emoji/1f3a9.svg +++ b/public/emoji/1f3a9.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M30.198 27.385L32 3.816c0-.135-.008-.263-.021-.373.003-.033.021-.075.021-.11C32 1.529 25.731.066 18 .066c-7.732 0-14 1.462-14 3.267 0 .035.017.068.022.102-.014.11-.022.23-.022.365l1.802 23.585C2.298 28.295 0 29.576 0 31c0 2.762 8.611 5 18 5s18-2.238 18-5c0-1.424-2.298-2.705-5.802-3.615z"/><path fill="#66757F" d="M17.536 6.595c-4.89 0-8.602-.896-10.852-1.646-.524-.175-.808-.741-.633-1.265.175-.524.739-.808 1.265-.633 2.889.963 10.762 2.891 21.421-.016.529-.142 1.082.168 1.227.702.146.533-.169 1.083-.702 1.228-4.406 1.202-8.347 1.63-11.726 1.63z"/><path fill="#744EAA" d="M30.198 27.385l.446-5.829c-7.705 2.157-17.585 2.207-25.316-.377l.393 5.142c.069.304.113.65.113 1.076 0 1.75 1.289 2.828 2.771 3.396 4.458 1.708 13.958 1.646 18.807.149 1.467-.453 2.776-1.733 2.776-3.191 0-.119.015-.241.024-.361l-.014-.005z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M30.198 27.385L32 3.816c0-.135-.008-.263-.021-.373.003-.033.021-.075.021-.11C32 1.529 25.731.066 18 .066c-7.732 0-14 1.462-14 3.267 0 .035.017.068.022.102-.014.11-.022.23-.022.365l1.802 23.585C2.298 28.295 0 29.576 0 31c0 2.762 8.611 5 18 5s18-2.238 18-5c0-1.424-2.298-2.705-5.802-3.615z"/><path fill="#66757F" d="M17.536 6.595c-4.89 0-8.602-.896-10.852-1.646-.524-.175-.808-.741-.633-1.265.175-.524.739-.808 1.265-.633 2.889.963 10.762 2.891 21.421-.016.529-.142 1.082.168 1.227.702.146.533-.169 1.083-.702 1.228-4.406 1.202-8.347 1.63-11.726 1.63z"/><path fill="#744EAA" d="M30.198 27.385l.446-5.829c-7.705 2.157-17.585 2.207-25.316-.377l.393 5.142c.069.304.113.65.113 1.076 0 1.75 1.289 2.828 2.771 3.396 4.458 1.708 13.958 1.646 18.807.149 1.467-.453 2.776-1.733 2.776-3.191 0-.119.015-.241.024-.361l-.014-.005z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3ae.svg b/public/emoji/1f3ae.svg index 774d68177..4ec08ae49 100644 --- a/public/emoji/1f3ae.svg +++ b/public/emoji/1f3ae.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M2.13 14.856l-.004-.002S.075 27.271.075 29.061c0 1.824 1.343 3.302 3 3.302.68 0 1.3-.258 1.803-.678l10.166-8.938L2.13 14.856zm31.69 0l.004-.002s2.051 12.417 2.051 14.207c0 1.824-1.343 3.302-3 3.302-.68 0-1.3-.258-1.803-.678l-10.166-8.938 12.914-7.891z"/><g fill="#14171A"><circle cx="25.975" cy="15.551" r="8.5"/><circle cx="9.975" cy="15.551" r="8.5"/><path d="M9.975 7.051h16v16.87h-16z"/></g><circle fill="#14171A" cx="13.075" cy="23.301" r="5"/><circle fill="#14171A" cx="22.875" cy="23.301" r="5"/><circle fill="#67757F" cx="22.875" cy="23.301" r="3"/><circle fill="#67757F" cx="13.075" cy="23.301" r="3"/><circle fill="#FFCC4D" cx="25.735" cy="11.133" r="1.603"/><circle fill="#77B255" cx="25.735" cy="17.607" r="1.603"/><circle fill="#50A5E6" cx="22.498" cy="14.37" r="1.603"/><circle fill="#DD2E44" cx="28.972" cy="14.37" r="1.603"/><path d="M11.148 12.514v-2.168c0-.279-.226-.505-.505-.505H9.085c-.279 0-.505.226-.505.505v2.168l1.284 1.285 1.284-1.285zm-2.569 3.63v2.168c0 .279.226.505.505.505h1.558c.279 0 .505-.226.505-.505v-2.168l-1.284-1.285-1.284 1.285zm5.269-3.1H11.68l-1.285 1.285 1.285 1.285h2.168c.279 0 .505-.227.505-.505V13.55c0-.279-.226-.506-.505-.506zm-5.799 0H5.88c-.279 0-.505.227-.505.505v1.558c0 .279.226.505.505.505h2.168l1.285-1.285-1.284-1.283z" fill="#8899A6"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M2.13 14.856l-.004-.002S.075 27.271.075 29.061c0 1.824 1.343 3.302 3 3.302.68 0 1.3-.258 1.803-.678l10.166-8.938L2.13 14.856zm31.69 0l.004-.002s2.051 12.417 2.051 14.207c0 1.824-1.343 3.302-3 3.302-.68 0-1.3-.258-1.803-.678l-10.166-8.938 12.914-7.891z"/><g fill="#14171A"><circle cx="25.975" cy="15.551" r="8.5"/><circle cx="9.975" cy="15.551" r="8.5"/><path d="M9.975 7.051h16v16.87h-16z"/></g><circle fill="#14171A" cx="13.075" cy="23.301" r="5"/><circle fill="#14171A" cx="22.875" cy="23.301" r="5"/><circle fill="#67757F" cx="22.875" cy="23.301" r="3"/><circle fill="#67757F" cx="13.075" cy="23.301" r="3"/><circle fill="#FFCC4D" cx="25.735" cy="11.133" r="1.603"/><circle fill="#77B255" cx="25.735" cy="17.607" r="1.603"/><circle fill="#50A5E6" cx="22.498" cy="14.37" r="1.603"/><circle fill="#DD2E44" cx="28.972" cy="14.37" r="1.603"/><path d="M11.148 12.514v-2.168c0-.279-.226-.505-.505-.505H9.085c-.279 0-.505.226-.505.505v2.168l1.284 1.285 1.284-1.285zm-2.569 3.63v2.168c0 .279.226.505.505.505h1.558c.279 0 .505-.226.505-.505v-2.168l-1.284-1.285-1.284 1.285zm5.269-3.1H11.68l-1.285 1.285 1.285 1.285h2.168c.279 0 .505-.227.505-.505V13.55c0-.279-.226-.506-.505-.506zm-5.799 0H5.88c-.279 0-.505.227-.505.505v1.558c0 .279.226.505.505.505h2.168l1.285-1.285-1.284-1.283z" fill="#8899A6"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3b0.svg b/public/emoji/1f3b0.svg index af46ef62e..789fd08d1 100644 --- a/public/emoji/1f3b0.svg +++ b/public/emoji/1f3b0.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#CCD6DD" d="M11 24c0 2.209-.791 3-3 3H4c-2.209 0-3-.791-3-3V12c0-2.209.791-3 3-3h4c2.209 0 3 .791 3 3v12zm12 0c0 2.209-.791 3-3 3h-4c-2.209 0-3-.791-3-3V12c0-2.209.791-3 3-3h4c2.209 0 3 .791 3 3v12zm12 0c0 2.209-.791 3-3 3h-4c-2.209 0-3-.791-3-3V12c0-2.209.791-3 3-3h4c2.209 0 3 .791 3 3v12z"/><path fill="#E1E8ED" d="M1 13h10v10H1zm12 0h10v10H13zm12 0h10v10H25z"/><path fill="#BE1931" d="M30.795 15.685h-2.816c-.594 0-.813-.385-.813-.759 0-.385.209-.759.813-.759h3.983c.561 0 .792.506.792.792 0 .22-.121.451-.253.726l-2.729 5.545c-.308.615-.429.836-.925.836-.604 0-.912-.463-.912-.781 0-.133.033-.232.109-.385l2.751-5.215zm-12 0h-2.816c-.594 0-.814-.385-.814-.759 0-.385.209-.759.814-.759h3.983c.561 0 .792.506.792.792 0 .22-.121.451-.253.726l-2.729 5.545c-.308.615-.429.836-.924.836-.605 0-.913-.463-.913-.781 0-.133.033-.232.11-.385l2.75-5.215zm-12 0H3.979c-.594 0-.814-.385-.814-.759 0-.385.209-.759.814-.759h3.983c.561 0 .792.506.792.792 0 .22-.121.451-.253.726L5.772 21.23c-.308.615-.429.836-.924.836-.605 0-.913-.463-.913-.781 0-.133.033-.232.11-.385l2.75-5.215z"/><path fill="#9266CC" d="M3.061 9c-.04.162-.061.329-.061.5C3 10.881 4.343 12 6 12s3-1.119 3-2.5c0-.171-.021-.338-.061-.5H3.061zm12 0c-.04.162-.061.329-.061.5 0 1.381 1.343 2.5 3 2.5 1.656 0 3-1.119 3-2.5 0-.171-.021-.338-.06-.5h-5.879zM27.06 9c-.039.162-.06.329-.06.5 0 1.381 1.344 2.5 3 2.5s3-1.119 3-2.5c0-.171-.021-.338-.061-.5H27.06z"/><path fill="#F4900C" d="M8.816 27c.112-.157.184-.324.184-.5 0-.828-1.343-1.5-3-1.5s-3 .672-3 1.5c0 .176.072.343.184.5h5.632zm12 0c.112-.157.184-.324.184-.5 0-.828-1.344-1.5-3-1.5-1.657 0-3 .672-3 1.5 0 .176.072.343.184.5h5.632zm12 0c.112-.157.184-.324.184-.5 0-.828-1.344-1.5-3-1.5s-3 .672-3 1.5c0 .176.072.343.184.5h5.632z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#CCD6DD" d="M11 24c0 2.209-.791 3-3 3H4c-2.209 0-3-.791-3-3V12c0-2.209.791-3 3-3h4c2.209 0 3 .791 3 3v12zm12 0c0 2.209-.791 3-3 3h-4c-2.209 0-3-.791-3-3V12c0-2.209.791-3 3-3h4c2.209 0 3 .791 3 3v12zm12 0c0 2.209-.791 3-3 3h-4c-2.209 0-3-.791-3-3V12c0-2.209.791-3 3-3h4c2.209 0 3 .791 3 3v12z"/><path fill="#E1E8ED" d="M1 13h10v10H1zm12 0h10v10H13zm12 0h10v10H25z"/><path fill="#BE1931" d="M30.795 15.685h-2.816c-.594 0-.813-.385-.813-.759 0-.385.209-.759.813-.759h3.983c.561 0 .792.506.792.792 0 .22-.121.451-.253.726l-2.729 5.545c-.308.615-.429.836-.925.836-.604 0-.912-.463-.912-.781 0-.133.033-.232.109-.385l2.751-5.215zm-12 0h-2.816c-.594 0-.814-.385-.814-.759 0-.385.209-.759.814-.759h3.983c.561 0 .792.506.792.792 0 .22-.121.451-.253.726l-2.729 5.545c-.308.615-.429.836-.924.836-.605 0-.913-.463-.913-.781 0-.133.033-.232.11-.385l2.75-5.215zm-12 0H3.979c-.594 0-.814-.385-.814-.759 0-.385.209-.759.814-.759h3.983c.561 0 .792.506.792.792 0 .22-.121.451-.253.726L5.772 21.23c-.308.615-.429.836-.924.836-.605 0-.913-.463-.913-.781 0-.133.033-.232.11-.385l2.75-5.215z"/><path fill="#9266CC" d="M3.061 9c-.04.162-.061.329-.061.5C3 10.881 4.343 12 6 12s3-1.119 3-2.5c0-.171-.021-.338-.061-.5H3.061zm12 0c-.04.162-.061.329-.061.5 0 1.381 1.343 2.5 3 2.5 1.656 0 3-1.119 3-2.5 0-.171-.021-.338-.06-.5h-5.879zM27.06 9c-.039.162-.06.329-.06.5 0 1.381 1.344 2.5 3 2.5s3-1.119 3-2.5c0-.171-.021-.338-.061-.5H27.06z"/><path fill="#F4900C" d="M8.816 27c.112-.157.184-.324.184-.5 0-.828-1.343-1.5-3-1.5s-3 .672-3 1.5c0 .176.072.343.184.5h5.632zm12 0c.112-.157.184-.324.184-.5 0-.828-1.344-1.5-3-1.5-1.657 0-3 .672-3 1.5 0 .176.072.343.184.5h5.632zm12 0c.112-.157.184-.324.184-.5 0-.828-1.344-1.5-3-1.5s-3 .672-3 1.5c0 .176.072.343.184.5h5.632z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3b1.svg b/public/emoji/1f3b1.svg index 029f1fdcc..28abf33e1 100644 --- a/public/emoji/1f3b1.svg +++ b/public/emoji/1f3b1.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#292F33" cx="18" cy="18" r="18"/><circle fill="#E1E8ED" cx="18" cy="18" r="9"/><path fill="#292F33" d="M13.703 20.203c0-1.406.773-2.443 1.881-3.041-.826-.598-1.336-1.406-1.336-2.514 0-2.057 1.705-3.375 3.797-3.375 2.039 0 3.814 1.301 3.814 3.375 0 .984-.492 1.969-1.354 2.514 1.195.598 1.881 1.688 1.881 3.041 0 2.443-1.986 4.008-4.342 4.008-2.425 0-4.341-1.652-4.341-4.008zm2.742-.176c0 .896.527 1.758 1.6 1.758 1.002 0 1.6-.861 1.6-1.758 0-1.107-.633-1.758-1.6-1.758-1.02.001-1.6.774-1.6 1.758zm.334-5.097c0 .791.457 1.336 1.266 1.336.809 0 1.283-.545 1.283-1.336 0-.756-.457-1.336-1.283-1.336-.826 0-1.266.58-1.266 1.336z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#31373D" cx="18" cy="18" r="18"/><circle fill="#E1E8ED" cx="18" cy="18" r="9"/><path fill="#31373D" d="M13.703 20.203c0-1.406.773-2.443 1.881-3.041-.826-.598-1.336-1.406-1.336-2.514 0-2.057 1.705-3.375 3.797-3.375 2.039 0 3.814 1.301 3.814 3.375 0 .984-.492 1.969-1.354 2.514 1.195.598 1.881 1.688 1.881 3.041 0 2.443-1.986 4.008-4.342 4.008-2.425 0-4.341-1.652-4.341-4.008zm2.742-.176c0 .896.527 1.758 1.6 1.758 1.002 0 1.6-.861 1.6-1.758 0-1.107-.633-1.758-1.6-1.758-1.02.001-1.6.774-1.6 1.758zm.334-5.097c0 .791.457 1.336 1.266 1.336.809 0 1.283-.545 1.283-1.336 0-.756-.457-1.336-1.283-1.336-.826 0-1.266.58-1.266 1.336z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3b3.svg b/public/emoji/1f3b3.svg index 1e8ef3d27..9227f288c 100644 --- a/public/emoji/1f3b3.svg +++ b/public/emoji/1f3b3.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M22 10c0-1 1-3 1-5s0-3-1-4-2-1-2-1-1 0-2 1-1 2-1 4 1 4 1 5c0 3-4 5-4 9.084C14 22.417 16 29 17 31h6c1-2 3-8.583 3-11.916C26 15 22 13 22 10z"/><path fill="#BE1931" d="M18 10h4c0-.475.227-1.18.464-2h-4.927c.236.82.463 1.525.463 2zm5.902 4c-.494-.681-.976-1.333-1.332-2h-5.139c-.357.667-.839 1.319-1.332 2h7.803z"/><path fill="#CCD6DD" d="M32 13c0-1 1-3 1-5s0-3-1-4-2-1-2-1-1 0-2 1-1 2-1 4 1 4 1 5c0 3-4 5-4 9.084C24 25.417 26 32 27 34h6c1-2 3-8.583 3-11.916C36 18 32 16 32 13z"/><path fill="#BE1931" d="M28 13h4c0-.475.227-1.18.464-2h-4.927c.236.82.463 1.525.463 2zm5.902 4c-.494-.681-.976-1.333-1.332-2h-5.139c-.357.667-.839 1.319-1.332 2h7.803z"/><circle fill="#3A4449" cx="12.562" cy="23.438" r="12.562"/><circle cx="12.915" cy="18.79" r="2.316"/><circle cx="6.505" cy="20.938" r="2.316"/><circle cx="11.431" cy="28.053" r="2.316"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M22 10c0-1 1-3 1-5s0-3-1-4-2-1-2-1-1 0-2 1-1 2-1 4 1 4 1 5c0 3-4 5-4 9.084C14 22.417 16 29 17 31h6c1-2 3-8.583 3-11.916C26 15 22 13 22 10z"/><path fill="#BE1931" d="M18 10h4c0-.475.227-1.18.464-2h-4.927c.236.82.463 1.525.463 2zm5.902 4c-.494-.681-.976-1.333-1.332-2h-5.139c-.357.667-.839 1.319-1.332 2h7.803z"/><path fill="#CCD6DD" d="M32 13c0-1 1-3 1-5s0-3-1-4-2-1-2-1-1 0-2 1-1 2-1 4 1 4 1 5c0 3-4 5-4 9.084C24 25.417 26 32 27 34h6c1-2 3-8.583 3-11.916C36 18 32 16 32 13z"/><path fill="#BE1931" d="M28 13h4c0-.475.227-1.18.464-2h-4.927c.236.82.463 1.525.463 2zm5.902 4c-.494-.681-.976-1.333-1.332-2h-5.139c-.357.667-.839 1.319-1.332 2h7.803z"/><circle fill="#31373D" cx="12.562" cy="23.438" r="12.562"/><circle cx="12.915" cy="18.79" r="2.316"/><circle cx="6.505" cy="20.938" r="2.316"/><circle cx="11.431" cy="28.053" r="2.316"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3b8.svg b/public/emoji/1f3b8.svg index abd8f3afb..22074a11f 100644 --- a/public/emoji/1f3b8.svg +++ b/public/emoji/1f3b8.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F18F26" d="M24.925 18.251c-2.392.797-3.189-3.189-3.189-3.189S22.824 13.971 22 13c1.283-1.282.533-1.924.533-1.924-2.203-2.202-5.772-2.202-7.974 0-.278.278-.466.526-.624.764-.068.097-.13.196-.191.296-.005.01-.01.021-.016.03-.322.535-.554 1.107-.682 1.701-.176.359-.427.744-.879 1.195-1.595 1.594-5.581-.797-8.771 2.392-.033.033-.051.078-.078.117-.106.095-.218.178-.321.282-3.743 3.743-3.386 10.169.798 14.353 3.974 3.975 9.968 4.487 13.767 1.319.066-.035.132-.069.185-.123.081-.081.142-.158.218-.237.06-.056.123-.104.181-.161 1.909-1.91 2.641-4.206 2.352-6.553-.076-1.116-.187-1.991.439-2.617.797-.797 3.189 0 4.783-1.595 2.393-2.392.718-4.491-.795-3.988z"/><path fill="#642116" d="M17.786 16.093L29.928 3.95l2.12 2.121-12.14 12.142z"/><path fill="#F18F26" d="M35.204 3.185c.438.438.438 1.155-.001 1.593l-3.186 3.185c-.439.438-1.155.438-1.593 0l-2.39-2.389c-.438-.438-.438-1.155.001-1.593L31.222.796c.438-.438 1.155-.438 1.593 0l2.389 2.389z"/><path fill="#CCD6DD" d="M15.05 17.416L16.463 16 20 19.536l-1.414 1.414zm-3.536 3.534l1.414-1.415 3.535 3.536-1.414 1.414z"/><path fill="#642116" d="M12.928 25.192c.389.389.389 1.025 0 1.414s-1.025.389-1.414 0l-2.122-2.121c-.389-.389-.389-1.025 0-1.414s1.025-.389 1.414 0l2.122 2.121z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BB1A34" d="M21.828 20.559C19.707 21.266 19 17.731 19 17.731s.965-.968.235-1.829c1.138-1.137.473-1.707.473-1.707-1.954-1.953-5.119-1.953-7.071 0-.246.246-.414.467-.553.678-.061.086-.115.174-.17.262l-.014.027c-.285.475-.491.982-.605 1.509-.156.319-.379.659-.779 1.06-1.414 1.414-4.949-.707-7.778 2.121-.029.029-.045.069-.069.104-.094.084-.193.158-.284.25-3.319 3.319-3.003 9.018.708 12.728 3.524 3.525 8.84 3.979 12.209 1.17.058-.031.117-.061.165-.109.071-.072.126-.14.193-.21.053-.049.109-.093.161-.143 1.693-1.694 2.342-3.73 2.086-5.811-.068-.99-.165-1.766.39-2.321.707-.707 2.828 0 4.242-1.414 2.117-2.122.631-3.983-.711-3.537z"/><path fill="#292F33" d="M14.987 18.91L30.326 3.572l2.121 2.122-15.339 15.339z"/><path fill="#F5F8FA" d="M10.001 29.134c1.782 1.277 1.959 3.473 1.859 4.751-.042.528.519.898.979.637 2.563-1.456 4.602-3.789 4.038-7.853-.111-.735.111-2.117 2.272-2.406 2.161-.29 2.941-1.099 3.208-1.485.153-.221.29-.832-.312-.854-.601-.022-2.094.446-3.431-1.136-1.337-1.582-1.559-2.228-1.604-2.473-.045-.245-1.409-3.694-2.525-1.864-.927 1.521-1.958 4.509-5.287 5.287-1.355.316-3.069 1.005-3.564 1.96-.832 1.604.46 2.725 1.574 3.483 1.115.757 2.793 1.953 2.793 1.953z"/><path fill="#292F33" d="M13.072 19.412l1.414-1.415 3.536 3.535-1.414 1.414zm-4.475 4.474l1.415-1.414 3.535 3.535-1.414 1.414z"/><path fill="#CCD6DD" d="M7.396 27.189L29.198 5.427l.53.531L7.927 27.72zm.869.868L30.067 6.296l.53.531L8.796 28.59z"/><path fill="#292F33" d="M9.815 28.325c.389.389.389 1.025 0 1.414s-1.025.389-1.414 0l-2.122-2.121c-.389-.389-.389-1.025 0-1.414h.001c.389-.389 1.025-.389 1.414 0l2.121 2.121z"/><circle fill="#292F33" cx="13.028" cy="29.556" r="1"/><path fill="#292F33" d="M14.445 31.881c0 .379-.307.686-.686.686-.379 0-.686-.307-.686-.686 0-.379.307-.686.686-.686.379 0 .686.307.686.686z"/><path fill="#BB1A34" d="M35.088 4.54c.415.415.415 1.095-.001 1.51l-4.362 3.02c-.416.415-1.095.415-1.51 0L26.95 6.804c-.415-.415-.415-1.095.001-1.51l3.02-4.361c.416-.415 1.095-.415 1.51 0l3.607 3.607z"/><circle fill="#66757F" cx="32.123" cy="9.402" r=".625"/><circle fill="#66757F" cx="33.381" cy="8.557" r=".625"/><circle fill="#66757F" cx="34.64" cy="7.712" r=".625"/><circle fill="#66757F" cx="26.712" cy="3.811" r=".625"/><circle fill="#66757F" cx="27.555" cy="2.571" r=".625"/><circle fill="#66757F" cx="28.398" cy="1.332" r=".625"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3b9.svg b/public/emoji/1f3b9.svg index 1901adbbd..6ce8afd98 100644 --- a/public/emoji/1f3b9.svg +++ b/public/emoji/1f3b9.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M2 36s-2 0-2-2V2s0-2 2-2h32.031C36 0 36 2 36 2v32s0 2-2 2H2z"/><path d="M19 33s0 1 1 1h5c1 0 1-1 1-1V5h-7v28zm9-28v28s0 1 1 1h4c1 0 1-1 1-1V5h-6zM10 33s0 1 1 1h5c1 0 1-1 1-1V5h-7v28zm-8 0s0 1 1 1h4c1 0 1-1 1-1V5H2v28z" fill="#E1E8ED"/><path fill="#292F33" d="M30 23s0 1-1 1h-4c-1 0-1-1-1-1V3h6v20zm-9 0s0 1-1 1h-4c-1 0-1-1-1-1V3h6v20zm-9 0s0 1-1 1H7c-1 0-1-1-1-1V3h6v20z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M2 36s-2 0-2-2V2s0-2 2-2h32.031C36 0 36 2 36 2v32s0 2-2 2H2z"/><path d="M19 33s0 1 1 1h5c1 0 1-1 1-1V5h-7v28zm9-28v28s0 1 1 1h4c1 0 1-1 1-1V5h-6zM10 33s0 1 1 1h5c1 0 1-1 1-1V5h-7v28zm-8 0s0 1 1 1h4c1 0 1-1 1-1V5H2v28z" fill="#E1E8ED"/><path fill="#31373D" d="M30 23s0 1-1 1h-4c-1 0-1-1-1-1V3h6v20zm-9 0s0 1-1 1h-4c-1 0-1-1-1-1V3h6v20zm-9 0s0 1-1 1H7c-1 0-1-1-1-1V3h6v20z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3bb.svg b/public/emoji/1f3bb.svg index 4555b5e97..efb7d5da7 100644 --- a/public/emoji/1f3bb.svg +++ b/public/emoji/1f3bb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F18F26" d="M23.912 12.087C22.219 10.394 20.318 9.5 18.415 9.5c-1.626 0-3.189.667-4.402 1.88-1.519 1.519-1.727 2.39-1.865 2.966-.071.295-.106.421-.255.57-.106.106-.155.256-.14.406.015.149.1.286.225.369.013.009.324.22.368.651.039.394-.13 1.08-1.16 2.11-.629.629-1.252.948-1.85.948-.981 0-1.649-.87-1.654-.877-.11-.15-.295-.226-.48-.197-.185.029-.337.159-.396.335-.221.663-.251.668-.535.709-.59.086-1.578.229-3.624 2.275C.972 23.32.381 25.412.939 27.693c.395 1.617 1.408 3.358 2.708 4.659 1.408 1.408 3.802 2.912 6.301 2.912 1.654 0 3.137-.643 4.406-1.912 2.045-2.046 2.189-3.033 2.274-3.624.042-.284.046-.313.71-.534.177-.06.307-.212.336-.396.029-.184-.046-.369-.196-.48-.008-.006-.805-.619-.873-1.527-.047-.638.27-1.302.944-1.976.963-.963 1.622-1.165 2.005-1.165.504 0 .746.357.752.366.08.13.216.216.368.234.142.016.303-.035.411-.144.149-.149.275-.185.57-.255.576-.139 1.446-.348 2.965-1.866 2.286-2.286 2.955-6.234-.708-9.898z"/><path fill="#292F33" d="M32 4.999L18.122 20 16 17.879 31 4z"/><path fill="#F18F26" d="M34.704 2.685c.438.438.438 1.155-.001 1.592l-3.186 3.186c-.438.438-1.155.438-1.593-.001l-1.39-1.389c-.438-.438-.438-1.155.001-1.592l3.187-3.186c.438-.438 1.155-.438 1.593 0l1.389 1.39z"/><circle fill="#642116" cx="33" cy="8" r="1"/><circle fill="#642116" cx="35" cy="6" r="1"/><circle fill="#642116" cx="28" cy="3" r="1"/><circle fill="#642116" cx="30" cy="1" r="1"/><path fill="#292F33" d="M2 32l4-5s1 0 2 1 1 2 1 2l-5 4-2-2z"/><path fill="#FEE7B8" d="M13 27c-.256 0-.512-.098-.707-.293l-3-3c-.391-.391-.391-1.023 0-1.414s1.023-.391 1.414 0l3 3c.391.391.391 1.023 0 1.414-.196.195-.452.293-.707.293z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F18F26" d="M23.912 12.087C22.219 10.394 20.318 9.5 18.415 9.5c-1.626 0-3.189.667-4.402 1.88-1.519 1.519-1.727 2.39-1.865 2.966-.071.295-.106.421-.255.57-.106.106-.155.256-.14.406.015.149.1.286.225.369.013.009.324.22.368.651.039.394-.13 1.08-1.16 2.11-.629.629-1.252.948-1.85.948-.981 0-1.649-.87-1.654-.877-.11-.15-.295-.226-.48-.197-.185.029-.337.159-.396.335-.221.663-.251.668-.535.709-.59.086-1.578.229-3.624 2.275C.972 23.32.381 25.412.939 27.693c.395 1.617 1.408 3.358 2.708 4.659 1.408 1.408 3.802 2.912 6.301 2.912 1.654 0 3.137-.643 4.406-1.912 2.045-2.046 2.189-3.033 2.274-3.624.042-.284.046-.313.71-.534.177-.06.307-.212.336-.396.029-.184-.046-.369-.196-.48-.008-.006-.805-.619-.873-1.527-.047-.638.27-1.302.944-1.976.963-.963 1.622-1.165 2.005-1.165.504 0 .746.357.752.366.08.13.216.216.368.234.142.016.303-.035.411-.144.149-.149.275-.185.57-.255.576-.139 1.446-.348 2.965-1.866 2.286-2.286 2.955-6.234-.708-9.898z"/><path fill="#292F33" d="M34 3L19 20l-3-3L33 2z"/><path fill="#642116" d="M13 27c-.256 0-.512-.098-.707-.293l-3-3c-.391-.391-.391-1.023 0-1.414s1.023-.391 1.414 0l3 3c.391.391.391 1.023 0 1.414-.196.195-.452.293-.707.293z"/><path fill="#CCD6DD" d="M4.628 29.935L28.8 5.807l.53.531L5.16 30.466zm.869.869L29.67 6.676l.531.532L6.028 31.335z"/><path fill="#F18F26" d="M34.704 2.685c.438.438.438 1.155-.001 1.592l-3.186 3.186c-.438.438-1.155.438-1.593-.001l-1.39-1.389c-.438-.438-.438-1.155.001-1.592l3.187-3.186c.438-.438 1.155-.438 1.593 0l1.389 1.39z"/><path fill="#292F33" d="M2 32l4-5s1 0 2 1 1 2 1 2l-5 4-2-2z"/><circle fill="#642116" cx="33" cy="8" r="1"/><circle fill="#642116" cx="35" cy="6" r="1"/><circle fill="#642116" cx="28" cy="3" r="1"/><circle fill="#642116" cx="30" cy="1" r="1"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3bc.svg b/public/emoji/1f3bc.svg index 4b187e0a4..5628fcacf 100644 --- a/public/emoji/1f3bc.svg +++ b/public/emoji/1f3bc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M36 5V3H0v30h36v-2H6v-5h30v-2H6v-5h30v-2H6v-5h30v-2H6V5z"/><path fill="#292F33" d="M27.827 20.562c-.223-.646-.543-1.227-.947-1.723-.411-.513-.926-.928-1.529-1.232-.61-.31-1.259-.46-1.981-.46-.086 0-.208.009-.366.026l-.533-2.593c.613-.603 1.156-1.299 1.616-2.077.499-.847.885-1.77 1.145-2.741.269-.978.399-1.942.399-2.945 0-2.106-.542-3.94-1.627-5.475-.158-.196-.288-.343-.387-.431-.394-.355-.788-.412-1.704.266-.47.352-.883.86-1.224 1.506-.352.644-.608 1.366-.786 2.2-.185.826-.283 1.723-.292 2.684.041 1.352.234 2.701.576 4.013-.77.779-1.392 1.43-1.881 1.951-.521.569-1.038 1.222-1.539 1.943-.495.711-.91 1.493-1.233 2.324-.317.807-.497 1.693-.533 2.655.008.982.195 1.944.561 2.864.365.902.884 1.726 1.546 2.45.665.718 1.448 1.287 2.325 1.694 1.23.569 2.644.749 4.02.51.063.288.146.629.244 1.022.157.647.274 1.172.35 1.56.073.391.109.766.109 1.122 0 .541-.059.955-.197 1.301-.05.202-.185.412-.401.62-.233.227-.508.401-.839.533-.468.184-.922.231-1.289.181.195-.105.375-.241.537-.405.433-.443.652-.988.652-1.622 0-.447-.109-.875-.328-1.282-.215-.375-.508-.684-.886-.929-.378-.225-.778-.341-1.226-.341h-.006c-.512.034-.954.195-1.301.471-.36.266-.646.619-.852 1.051-.193.406-.307.847-.338 1.362.04 1.04.477 1.885 1.306 2.508.784.581 1.707.877 2.739.877.743 0 1.434-.164 2.053-.487.634-.326 1.148-.796 1.529-1.402.37-.602.559-1.291.559-2.046 0-.495-.043-.96-.129-1.419-.085-.458-.211-1.08-.384-1.869-.124-.535-.219-.987-.288-1.35.965-.428 1.712-1.049 2.226-1.85.576-.898.867-1.908.867-3-.001-.665-.112-1.342-.333-2.015zm-3.122 5.178l-1.047-5.149c.261.056.502.147.727.276.396.224.703.529.945.938.241.39.392.838.456 1.303 0 1.246-.354 2.115-1.081 2.632zM23.547 7.101c-.181.526-.43 1.057-.743 1.577-.307.517-.629.973-.959 1.359-.105.125-.202.231-.288.322-.078-.354-.128-.746-.149-1.165.016-.685.116-1.364.305-2.081.17-.661.408-1.259.695-1.756.305-.468.621-.705.944-.705.115 0 .196.028.259.087.07.071.119.208.15.454.03.133.047.303.047.494 0 .443-.088.918-.261 1.414zM18.602 18.58c.653-.943 1.452-1.837 2.431-2.718l.339 1.739c-.717.362-1.321.9-1.801 1.61-.552.82-.846 1.727-.872 2.717.017.913.309 1.736.871 2.451.566.708 1.294 1.181 2.169 1.4l.12.03.122-.029c.537-.127.594-.471.594-.613 0-.345-.224-.621-.579-.72-.367-.17-.637-.417-.82-.758-.202-.368-.309-.713-.309-.994 0-.476.17-.903.516-1.303.214-.242.432-.432.654-.572l1.093 5.508c-.382.081-.733.132-1.046.152-1.384-.045-2.518-.5-3.369-1.35-.434-.442-.747-.907-.958-1.423-.213-.516-.327-1.059-.342-1.584.029-1.27.429-2.463 1.187-3.543z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M36 5V3H0v30h36v-2H6v-5h30v-2H6v-5h30v-2H6v-5h30v-2H6V5z"/><path fill="#31373D" d="M27.827 20.562c-.223-.646-.543-1.227-.947-1.723-.411-.513-.926-.928-1.529-1.232-.61-.31-1.259-.46-1.981-.46-.086 0-.208.009-.366.026l-.533-2.593c.613-.603 1.156-1.299 1.616-2.077.499-.847.885-1.77 1.145-2.741.269-.978.399-1.942.399-2.945 0-2.106-.542-3.94-1.627-5.475-.158-.196-.288-.343-.387-.431-.394-.355-.788-.412-1.704.266-.47.352-.883.86-1.224 1.506-.352.644-.608 1.366-.786 2.2-.185.826-.283 1.723-.292 2.684.041 1.352.234 2.701.576 4.013-.77.779-1.392 1.43-1.881 1.951-.521.569-1.038 1.222-1.539 1.943-.495.711-.91 1.493-1.233 2.324-.317.807-.497 1.693-.533 2.655.008.982.195 1.944.561 2.864.365.902.884 1.726 1.546 2.45.665.718 1.448 1.287 2.325 1.694 1.23.569 2.644.749 4.02.51.063.288.146.629.244 1.022.157.647.274 1.172.35 1.56.073.391.109.766.109 1.122 0 .541-.059.955-.197 1.301-.05.202-.185.412-.401.62-.233.227-.508.401-.839.533-.468.184-.922.231-1.289.181.195-.105.375-.241.537-.405.433-.443.652-.988.652-1.622 0-.447-.109-.875-.328-1.282-.215-.375-.508-.684-.886-.929-.378-.225-.778-.341-1.226-.341h-.006c-.512.034-.954.195-1.301.471-.36.266-.646.619-.852 1.051-.193.406-.307.847-.338 1.362.04 1.04.477 1.885 1.306 2.508.784.581 1.707.877 2.739.877.743 0 1.434-.164 2.053-.487.634-.326 1.148-.796 1.529-1.402.37-.602.559-1.291.559-2.046 0-.495-.043-.96-.129-1.419-.085-.458-.211-1.08-.384-1.869-.124-.535-.219-.987-.288-1.35.965-.428 1.712-1.049 2.226-1.85.576-.898.867-1.908.867-3-.001-.665-.112-1.342-.333-2.015zm-3.122 5.178l-1.047-5.149c.261.056.502.147.727.276.396.224.703.529.945.938.241.39.392.838.456 1.303 0 1.246-.354 2.115-1.081 2.632zM23.547 7.101c-.181.526-.43 1.057-.743 1.577-.307.517-.629.973-.959 1.359-.105.125-.202.231-.288.322-.078-.354-.128-.746-.149-1.165.016-.685.116-1.364.305-2.081.17-.661.408-1.259.695-1.756.305-.468.621-.705.944-.705.115 0 .196.028.259.087.07.071.119.208.15.454.03.133.047.303.047.494 0 .443-.088.918-.261 1.414zM18.602 18.58c.653-.943 1.452-1.837 2.431-2.718l.339 1.739c-.717.362-1.321.9-1.801 1.61-.552.82-.846 1.727-.872 2.717.017.913.309 1.736.871 2.451.566.708 1.294 1.181 2.169 1.4l.12.03.122-.029c.537-.127.594-.471.594-.613 0-.345-.224-.621-.579-.72-.367-.17-.637-.417-.82-.758-.202-.368-.309-.713-.309-.994 0-.476.17-.903.516-1.303.214-.242.432-.432.654-.572l1.093 5.508c-.382.081-.733.132-1.046.152-1.384-.045-2.518-.5-3.369-1.35-.434-.442-.747-.907-.958-1.423-.213-.516-.327-1.059-.342-1.584.029-1.27.429-2.463 1.187-3.543z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c1.svg b/public/emoji/1f3c1.svg index 4a299f7b8..695f0ef33 100644 --- a/public/emoji/1f3c1.svg +++ b/public/emoji/1f3c1.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M5 36c-1.104 0-2-.896-2-2V3c0-1.104.896-2 2-2s2 .896 2 2v31c0 1.104-.896 2-2 2z"/><path fill="#AAB8C2" d="M5 1c-1.105 0-2 .895-2 2v31c0 .276.224.5.5.5s.5-.224.5-.5V4.414C4 3.633 4.633 3 5.414 3H7c0-1.105-.895-2-2-2z"/><path fill="#8899A6" d="M5 36c-1.104 0-2-.896-2-2V3c0-1.104.896-2 2-2s2 .896 2 2v31c0 1.104-.896 2-2 2z"/><path fill="#AAB8C2" d="M5 1c-1.105 0-2 .895-2 2v31c0 .276.224.5.5.5s.5-.224.5-.5V4.414C4 3.633 4.633 3 5.414 3H7c0-1.105-.895-2-2-2z"/><path fill="#292F33" d="M32.396 3.082C30.732 2.363 28.959 2.006 27 1.974l-1.375.38L21 3l-1-.128c-.237.051-.476.099-.711.15-2.169.469-4.23.894-6.289.982L12 5 6 4v19h6l1 2h.077c2.244-.096 4.472-.556 6.633-1.022l.29-.061.646-.645 5.438-.708.916.41c1.68.032 3.193.335 4.604.944.309.133.665.103.945-.082.282-.186.451-.499.451-.836V4c0-.399-.237-.76-.604-.918z"/><path fill="#E1E8ED" d="M13 4.004c-.239.01-.478.035-.717.035-1.797 0-3.396-.313-4.887-.957-.308-.135-.665-.103-.945.083C6.169 3.349 6 3.664 6 4v6s3.292 1 7 1V4.004zM20 10s-3.75 1-7 1v7c3 0 7-1 7-1v-7zm7-1V1.974c-.096-.002-.186-.013-.283-.013-2.267 0-4.521.442-6.717.911V10s2.167-1 7-1zM6.604 23.918c1.5.648 3.09.993 4.82 1.082H13v-7c-4.167 0-7-1-7-1v6c0 .399.237.76.604.918zM20 17v6.916c2.313-.499 4.511-.955 6.717-.955.097 0 .187.011.283.013V16c-4.5 0-7 1-7 1zm7-1c2.676 0 4.82.56 6 .954V9.908C31.853 9.527 29.769 9 27 9v7z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M5 36c-1.104 0-2-.896-2-2V3c0-1.104.896-2 2-2s2 .896 2 2v31c0 1.104-.896 2-2 2z"/><path fill="#AAB8C2" d="M5 1c-1.105 0-2 .895-2 2v31c0 .276.224.5.5.5s.5-.224.5-.5V4.414C4 3.633 4.633 3 5.414 3H7c0-1.105-.895-2-2-2z"/><path fill="#8899A6" d="M5 36c-1.104 0-2-.896-2-2V3c0-1.104.896-2 2-2s2 .896 2 2v31c0 1.104-.896 2-2 2z"/><path fill="#AAB8C2" d="M5 1c-1.105 0-2 .895-2 2v31c0 .276.224.5.5.5s.5-.224.5-.5V4.414C4 3.633 4.633 3 5.414 3H7c0-1.105-.895-2-2-2z"/><path fill="#31373D" d="M32.396 3.082C30.732 2.363 28.959 2.006 27 1.974l-1.375.38L21 3l-1-.128c-.237.051-.476.099-.711.15-2.169.469-4.23.894-6.289.982L12 5 6 4v19h6l1 2h.077c2.244-.096 4.472-.556 6.633-1.022l.29-.061.646-.645 5.438-.708.916.41c1.68.032 3.193.335 4.604.944.309.133.665.103.945-.082.282-.186.451-.499.451-.836V4c0-.399-.237-.76-.604-.918z"/><path fill="#E1E8ED" d="M13 4.004c-.239.01-.478.035-.717.035-1.797 0-3.396-.313-4.887-.957-.308-.135-.665-.103-.945.083C6.169 3.349 6 3.664 6 4v6s3.292 1 7 1V4.004zM20 10s-3.75 1-7 1v7c3 0 7-1 7-1v-7zm7-1V1.974c-.096-.002-.186-.013-.283-.013-2.267 0-4.521.442-6.717.911V10s2.167-1 7-1zM6.604 23.918c1.5.648 3.09.993 4.82 1.082H13v-7c-4.167 0-7-1-7-1v6c0 .399.237.76.604.918zM20 17v6.916c2.313-.499 4.511-.955 6.717-.955.097 0 .187.011.283.013V16c-4.5 0-7 1-7 1zm7-1c2.676 0 4.82.56 6 .954V9.908C31.853 9.527 29.769 9 27 9v7z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c2-1f3fb.svg b/public/emoji/1f3c2-1f3fb.svg index 82483f70a..627fa068d 100644 --- a/public/emoji/1f3c2-1f3fb.svg +++ b/public/emoji/1f3c2-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#BBDDF5" d="M24.408 16c-3.888 0-7.231-4.309-7.6-4.8-.663-.884-.483-2.138.4-2.8.883-.662 2.135-.484 2.798.397C21.012 10.127 23.043 12 24.408 12c1.104 0 2 .896 2 2s-.895 2-2 2zm-17 4.001c-.837 0-1.618-.53-1.897-1.368-1.058-3.175-.442-6.121 1.733-8.297 1.539-1.54 3.332-2.167 3.532-2.233 1.046-.348 2.181.216 2.53 1.265.348 1.044-.213 2.172-1.254 2.526-.963.337-3.996 1.726-2.746 5.474.349 1.048-.217 2.18-1.265 2.53-.21.07-.423.103-.633.103z"/><path fill="#67757F" d="M18.408 15.5c0 1.933-1.567 3.5-3.5 3.5s-3.5-1.567-3.5-3.5v-4c0-1.933 1.567-3.5 3.5-3.5s3.5 1.567 3.5 3.5v4z"/><path fill="#BBDDF5" d="M20.408 10c0 1.104-.896 2-2 2h-7c-1.104 0-2-.896-2-2s.896-2 2-2h7c1.105 0 2 .896 2 2z"/><path fill="#BBDDF5" d="M11 18.5c-.101 0-.2-.03-.285-.089-.134-.094-.215-.247-.215-.411v-7c0-2.5 2.708-2.5 4.5-2.5s4.5 0 4.5 2.5v4c0 .208-.129.395-.324.468l-8 3c-.057.022-.117.032-.176.032z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#F7DECE" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M11.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M14.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M24.434 12.633c.525-.149 1.422-.237 2.121-.201.662.034 1.486.591 1.629 1.038.143.448.09 1.074-.269 1.182s-.901-.251-1.588-.125c-.686.125-.624.445-.615.734.031.962-.508.864-.6.734-.203-.286-.563-.676-.975-1.054s-.033-2.214.297-2.308z"/><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#1C6399" d="M13.5 25.438c-.802.902-.594 1.625-.562 1.969s2.311 2.38 2.688 2.5c1.207.386 2.805-.531 2.805-1.188 0-.474-.211-.938-.743-1.625s-.875-1.719-1.094-2.062-2.594-.157-3.094.406zm8.286-3.533c-.648 1-.349 1.688-.272 2.025.077.336 2.546 2.052 2.924 2.121 1.213.223 2.624-.897 2.535-1.547-.065-.47-.001-.663-.606-1.274-.604-.611-1.825-1.424-2.082-1.736s-2.095-.213-2.499.411z"/><path fill="#67757F" d="M24.729 21.688c-.23-1.023-1.108-3.478-1.464-4.43-.145-.389-.606-.911-1.114-1.114l-5.001-2c-.807-.324-6.026 1.939-5.458 2.886 0 0 .015 1.909 2.602 4.337-.524 1.467-.848 4.241-.848 4.241-.134 1.08 3.923 1 4.057.112s.315-2.529.934-4.032c.113-.276.167-.958 0-1.479-.167-.521-1.208-1.725-1.208-1.725s1.508.908 2.639 1.056c.131 1.023 1.223 2.302 1.454 3.444.221 1.09 3.777.345 3.407-1.296z"/><path fill="#BBDDF5" d="M24.408 12c-.429-.073-1.908-.588-2.304-.917-.396-.328-1.595-1.621-2.098-2.286-.366-.486-.99-.797-1.598-.797 0 0-5.408.011-6.408.011-2.406 0-5.125 2.489-5.585 3.294-.562.985-1.353 4.216-.509 7.195.094.333 3.53-.504 3.399-1.132-.284-1.368-.326-3.08-.125-3.536.201-.455.664-.801 1.32-1.098V18c0 .164.081.317.215.411.085.059.184.089.285.089.059 0 .119-.01.176-.032l8-3c.195-.073.324-.26.324-.468v-1.048c.594.476 1.594 1.096 1.83 1.21s1.679.812 2.707.812c.55 0 1.46-3.79.371-3.974z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#F7DECE" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#67757F" cx="11.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1"/><circle fill="#67757F" cx="14.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1"/><path fill="#1C6399" d="M6.47 17.805c-.917.79-.829 1.616-.501 2.195s.575.733 1.192.662c.589-.068 1.311-.745 1.727-1.204.569-.628.16-1.533.16-1.533s.351-.091.639-.278c.354-.229.402-1.139.062-.992-1.04.449-2.249.262-3.279 1.15z"/><path fill="#55ACEE" d="M15.018 27.982c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.242-1.113.183s-.917 1.129-1.223.882zm.553.716c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.243-1.113.183s-.918 1.129-1.223.882zm7.982-4.388c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291-.642.491-.802 1.214-1.131.998zm.621.659c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291s-.803 1.214-1.131.998z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c2-1f3fc.svg b/public/emoji/1f3c2-1f3fc.svg index 18e751d4c..c0090e160 100644 --- a/public/emoji/1f3c2-1f3fc.svg +++ b/public/emoji/1f3c2-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#BBDDF5" d="M24.408 16c-3.888 0-7.231-4.309-7.6-4.8-.663-.884-.483-2.138.4-2.8.883-.662 2.135-.484 2.798.397C21.012 10.127 23.043 12 24.408 12c1.104 0 2 .896 2 2s-.895 2-2 2zm-17 4.001c-.837 0-1.618-.53-1.897-1.368-1.058-3.175-.442-6.121 1.733-8.297 1.539-1.54 3.332-2.167 3.532-2.233 1.046-.348 2.181.216 2.53 1.265.348 1.044-.213 2.172-1.254 2.526-.963.337-3.996 1.726-2.746 5.474.349 1.048-.217 2.18-1.265 2.53-.21.07-.423.103-.633.103z"/><path fill="#67757F" d="M18.408 15.5c0 1.933-1.567 3.5-3.5 3.5s-3.5-1.567-3.5-3.5v-4c0-1.933 1.567-3.5 3.5-3.5s3.5 1.567 3.5 3.5v4z"/><path fill="#BBDDF5" d="M20.408 10c0 1.104-.896 2-2 2h-7c-1.104 0-2-.896-2-2s.896-2 2-2h7c1.105 0 2 .896 2 2z"/><path fill="#BBDDF5" d="M11 18.5c-.101 0-.2-.03-.285-.089-.134-.094-.215-.247-.215-.411v-7c0-2.5 2.708-2.5 4.5-2.5s4.5 0 4.5 2.5v4c0 .208-.129.395-.324.468l-8 3c-.057.022-.117.032-.176.032z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#F3D2A2" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M11.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M14.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M24.434 12.633c.525-.149 1.422-.237 2.121-.201.662.034 1.486.591 1.629 1.038.143.448.09 1.074-.269 1.182s-.901-.251-1.588-.125c-.686.125-.624.445-.615.734.031.962-.508.864-.6.734-.203-.286-.563-.676-.975-1.054s-.033-2.214.297-2.308z"/><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#1C6399" d="M13.5 25.438c-.802.902-.594 1.625-.562 1.969s2.311 2.38 2.688 2.5c1.207.386 2.805-.531 2.805-1.188 0-.474-.211-.938-.743-1.625s-.875-1.719-1.094-2.062-2.594-.157-3.094.406zm8.286-3.533c-.648 1-.349 1.688-.272 2.025.077.336 2.546 2.052 2.924 2.121 1.213.223 2.624-.897 2.535-1.547-.065-.47-.001-.663-.606-1.274-.604-.611-1.825-1.424-2.082-1.736s-2.095-.213-2.499.411z"/><path fill="#67757F" d="M24.729 21.688c-.23-1.023-1.108-3.478-1.464-4.43-.145-.389-.606-.911-1.114-1.114l-5.001-2c-.807-.324-6.026 1.939-5.458 2.886 0 0 .015 1.909 2.602 4.337-.524 1.467-.848 4.241-.848 4.241-.134 1.08 3.923 1 4.057.112s.315-2.529.934-4.032c.113-.276.167-.958 0-1.479-.167-.521-1.208-1.725-1.208-1.725s1.508.908 2.639 1.056c.131 1.023 1.223 2.302 1.454 3.444.221 1.09 3.777.345 3.407-1.296z"/><path fill="#BBDDF5" d="M24.408 12c-.429-.073-1.908-.588-2.304-.917-.396-.328-1.595-1.621-2.098-2.286-.366-.486-.99-.797-1.598-.797 0 0-5.408.011-6.408.011-2.406 0-5.125 2.489-5.585 3.294-.562.985-1.353 4.216-.509 7.195.094.333 3.53-.504 3.399-1.132-.284-1.368-.326-3.08-.125-3.536.201-.455.664-.801 1.32-1.098V18c0 .164.081.317.215.411.085.059.184.089.285.089.059 0 .119-.01.176-.032l8-3c.195-.073.324-.26.324-.468v-1.048c.594.476 1.594 1.096 1.83 1.21s1.679.812 2.707.812c.55 0 1.46-3.79.371-3.974z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#F3D2A2" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#67757F" cx="11.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1"/><circle fill="#67757F" cx="14.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1"/><path fill="#1C6399" d="M6.47 17.805c-.917.79-.829 1.616-.501 2.195s.575.733 1.192.662c.589-.068 1.311-.745 1.727-1.204.569-.628.16-1.533.16-1.533s.351-.091.639-.278c.354-.229.402-1.139.062-.992-1.04.449-2.249.262-3.279 1.15z"/><path fill="#55ACEE" d="M15.018 27.982c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.242-1.113.183s-.917 1.129-1.223.882zm.553.716c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.243-1.113.183s-.918 1.129-1.223.882zm7.982-4.388c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291-.642.491-.802 1.214-1.131.998zm.621.659c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291s-.803 1.214-1.131.998z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c2-1f3fd.svg b/public/emoji/1f3c2-1f3fd.svg index f2ae88241..e71263c97 100644 --- a/public/emoji/1f3c2-1f3fd.svg +++ b/public/emoji/1f3c2-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#BBDDF5" d="M24.408 16c-3.888 0-7.231-4.309-7.6-4.8-.663-.884-.483-2.138.4-2.8.883-.662 2.135-.484 2.798.397C21.012 10.127 23.043 12 24.408 12c1.104 0 2 .896 2 2s-.895 2-2 2zm-17 4.001c-.837 0-1.618-.53-1.897-1.368-1.058-3.175-.442-6.121 1.733-8.297 1.539-1.54 3.332-2.167 3.532-2.233 1.046-.348 2.181.216 2.53 1.265.348 1.044-.213 2.172-1.254 2.526-.963.337-3.996 1.726-2.746 5.474.349 1.048-.217 2.18-1.265 2.53-.21.07-.423.103-.633.103z"/><path fill="#67757F" d="M18.408 15.5c0 1.933-1.567 3.5-3.5 3.5s-3.5-1.567-3.5-3.5v-4c0-1.933 1.567-3.5 3.5-3.5s3.5 1.567 3.5 3.5v4z"/><path fill="#BBDDF5" d="M20.408 10c0 1.104-.896 2-2 2h-7c-1.104 0-2-.896-2-2s.896-2 2-2h7c1.105 0 2 .896 2 2z"/><path fill="#BBDDF5" d="M11 18.5c-.101 0-.2-.03-.285-.089-.134-.094-.215-.247-.215-.411v-7c0-2.5 2.708-2.5 4.5-2.5s4.5 0 4.5 2.5v4c0 .208-.129.395-.324.468l-8 3c-.057.022-.117.032-.176.032z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#D5AB88" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M11.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M14.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M24.434 12.633c.525-.149 1.422-.237 2.121-.201.662.034 1.486.591 1.629 1.038.143.448.09 1.074-.269 1.182s-.901-.251-1.588-.125c-.686.125-.624.445-.615.734.031.962-.508.864-.6.734-.203-.286-.563-.676-.975-1.054s-.033-2.214.297-2.308z"/><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#1C6399" d="M13.5 25.438c-.802.902-.594 1.625-.562 1.969s2.311 2.38 2.688 2.5c1.207.386 2.805-.531 2.805-1.188 0-.474-.211-.938-.743-1.625s-.875-1.719-1.094-2.062-2.594-.157-3.094.406zm8.286-3.533c-.648 1-.349 1.688-.272 2.025.077.336 2.546 2.052 2.924 2.121 1.213.223 2.624-.897 2.535-1.547-.065-.47-.001-.663-.606-1.274-.604-.611-1.825-1.424-2.082-1.736s-2.095-.213-2.499.411z"/><path fill="#67757F" d="M24.729 21.688c-.23-1.023-1.108-3.478-1.464-4.43-.145-.389-.606-.911-1.114-1.114l-5.001-2c-.807-.324-6.026 1.939-5.458 2.886 0 0 .015 1.909 2.602 4.337-.524 1.467-.848 4.241-.848 4.241-.134 1.08 3.923 1 4.057.112s.315-2.529.934-4.032c.113-.276.167-.958 0-1.479-.167-.521-1.208-1.725-1.208-1.725s1.508.908 2.639 1.056c.131 1.023 1.223 2.302 1.454 3.444.221 1.09 3.777.345 3.407-1.296z"/><path fill="#BBDDF5" d="M24.408 12c-.429-.073-1.908-.588-2.304-.917-.396-.328-1.595-1.621-2.098-2.286-.366-.486-.99-.797-1.598-.797 0 0-5.408.011-6.408.011-2.406 0-5.125 2.489-5.585 3.294-.562.985-1.353 4.216-.509 7.195.094.333 3.53-.504 3.399-1.132-.284-1.368-.326-3.08-.125-3.536.201-.455.664-.801 1.32-1.098V18c0 .164.081.317.215.411.085.059.184.089.285.089.059 0 .119-.01.176-.032l8-3c.195-.073.324-.26.324-.468v-1.048c.594.476 1.594 1.096 1.83 1.21s1.679.812 2.707.812c.55 0 1.46-3.79.371-3.974z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#D4AB88" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#67757F" cx="11.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1"/><circle fill="#67757F" cx="14.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1"/><path fill="#1C6399" d="M6.47 17.805c-.917.79-.829 1.616-.501 2.195s.575.733 1.192.662c.589-.068 1.311-.745 1.727-1.204.569-.628.16-1.533.16-1.533s.351-.091.639-.278c.354-.229.402-1.139.062-.992-1.04.449-2.249.262-3.279 1.15z"/><path fill="#55ACEE" d="M15.018 27.982c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.242-1.113.183s-.917 1.129-1.223.882zm.553.716c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.243-1.113.183s-.918 1.129-1.223.882zm7.982-4.388c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291-.642.491-.802 1.214-1.131.998zm.621.659c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291s-.803 1.214-1.131.998z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c2-1f3fe.svg b/public/emoji/1f3c2-1f3fe.svg index 972c7348b..aa7ab8fab 100644 --- a/public/emoji/1f3c2-1f3fe.svg +++ b/public/emoji/1f3c2-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#BBDDF5" d="M24.408 16c-3.888 0-7.231-4.309-7.6-4.8-.663-.884-.483-2.138.4-2.8.883-.662 2.135-.484 2.798.397C21.012 10.127 23.043 12 24.408 12c1.104 0 2 .896 2 2s-.895 2-2 2zm-17 4.001c-.837 0-1.618-.53-1.897-1.368-1.058-3.175-.442-6.121 1.733-8.297 1.539-1.54 3.332-2.167 3.532-2.233 1.046-.348 2.181.216 2.53 1.265.348 1.044-.213 2.172-1.254 2.526-.963.337-3.996 1.726-2.746 5.474.349 1.048-.217 2.18-1.265 2.53-.21.07-.423.103-.633.103z"/><path fill="#67757F" d="M18.408 15.5c0 1.933-1.567 3.5-3.5 3.5s-3.5-1.567-3.5-3.5v-4c0-1.933 1.567-3.5 3.5-3.5s3.5 1.567 3.5 3.5v4z"/><path fill="#BBDDF5" d="M20.408 10c0 1.104-.896 2-2 2h-7c-1.104 0-2-.896-2-2s.896-2 2-2h7c1.105 0 2 .896 2 2z"/><path fill="#BBDDF5" d="M11 18.5c-.101 0-.2-.03-.285-.089-.134-.094-.215-.247-.215-.411v-7c0-2.5 2.708-2.5 4.5-2.5s4.5 0 4.5 2.5v4c0 .208-.129.395-.324.468l-8 3c-.057.022-.117.032-.176.032z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#AF7E57" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M11.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M14.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M24.434 12.633c.525-.149 1.422-.237 2.121-.201.662.034 1.486.591 1.629 1.038.143.448.09 1.074-.269 1.182s-.901-.251-1.588-.125c-.686.125-.624.445-.615.734.031.962-.508.864-.6.734-.203-.286-.563-.676-.975-1.054s-.033-2.214.297-2.308z"/><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#1C6399" d="M13.5 25.438c-.802.902-.594 1.625-.562 1.969s2.311 2.38 2.688 2.5c1.207.386 2.805-.531 2.805-1.188 0-.474-.211-.938-.743-1.625s-.875-1.719-1.094-2.062-2.594-.157-3.094.406zm8.286-3.533c-.648 1-.349 1.688-.272 2.025.077.336 2.546 2.052 2.924 2.121 1.213.223 2.624-.897 2.535-1.547-.065-.47-.001-.663-.606-1.274-.604-.611-1.825-1.424-2.082-1.736s-2.095-.213-2.499.411z"/><path fill="#67757F" d="M24.729 21.688c-.23-1.023-1.108-3.478-1.464-4.43-.145-.389-.606-.911-1.114-1.114l-5.001-2c-.807-.324-6.026 1.939-5.458 2.886 0 0 .015 1.909 2.602 4.337-.524 1.467-.848 4.241-.848 4.241-.134 1.08 3.923 1 4.057.112s.315-2.529.934-4.032c.113-.276.167-.958 0-1.479-.167-.521-1.208-1.725-1.208-1.725s1.508.908 2.639 1.056c.131 1.023 1.223 2.302 1.454 3.444.221 1.09 3.777.345 3.407-1.296z"/><path fill="#BBDDF5" d="M24.408 12c-.429-.073-1.908-.588-2.304-.917-.396-.328-1.595-1.621-2.098-2.286-.366-.486-.99-.797-1.598-.797 0 0-5.408.011-6.408.011-2.406 0-5.125 2.489-5.585 3.294-.562.985-1.353 4.216-.509 7.195.094.333 3.53-.504 3.399-1.132-.284-1.368-.326-3.08-.125-3.536.201-.455.664-.801 1.32-1.098V18c0 .164.081.317.215.411.085.059.184.089.285.089.059 0 .119-.01.176-.032l8-3c.195-.073.324-.26.324-.468v-1.048c.594.476 1.594 1.096 1.83 1.21s1.679.812 2.707.812c.55 0 1.46-3.79.371-3.974z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#AF7E57" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#67757F" cx="11.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1"/><circle fill="#67757F" cx="14.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1"/><path fill="#1C6399" d="M6.47 17.805c-.917.79-.829 1.616-.501 2.195s.575.733 1.192.662c.589-.068 1.311-.745 1.727-1.204.569-.628.16-1.533.16-1.533s.351-.091.639-.278c.354-.229.402-1.139.062-.992-1.04.449-2.249.262-3.279 1.15z"/><path fill="#55ACEE" d="M15.018 27.982c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.242-1.113.183s-.917 1.129-1.223.882zm.553.716c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.243-1.113.183s-.918 1.129-1.223.882zm7.982-4.388c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291-.642.491-.802 1.214-1.131.998zm.621.659c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291s-.803 1.214-1.131.998z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c2-1f3ff.svg b/public/emoji/1f3c2-1f3ff.svg index e17d87f83..9f66b45fe 100644 --- a/public/emoji/1f3c2-1f3ff.svg +++ b/public/emoji/1f3c2-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#BBDDF5" d="M24.408 16c-3.888 0-7.231-4.309-7.6-4.8-.663-.884-.483-2.138.4-2.8.883-.662 2.135-.484 2.798.397C21.012 10.127 23.043 12 24.408 12c1.104 0 2 .896 2 2s-.895 2-2 2zm-17 4.001c-.837 0-1.618-.53-1.897-1.368-1.058-3.175-.442-6.121 1.733-8.297 1.539-1.54 3.332-2.167 3.532-2.233 1.046-.348 2.181.216 2.53 1.265.348 1.044-.213 2.172-1.254 2.526-.963.337-3.996 1.726-2.746 5.474.349 1.048-.217 2.18-1.265 2.53-.21.07-.423.103-.633.103z"/><path fill="#67757F" d="M18.408 15.5c0 1.933-1.567 3.5-3.5 3.5s-3.5-1.567-3.5-3.5v-4c0-1.933 1.567-3.5 3.5-3.5s3.5 1.567 3.5 3.5v4z"/><path fill="#BBDDF5" d="M20.408 10c0 1.104-.896 2-2 2h-7c-1.104 0-2-.896-2-2s.896-2 2-2h7c1.105 0 2 .896 2 2z"/><path fill="#BBDDF5" d="M11 18.5c-.101 0-.2-.03-.285-.089-.134-.094-.215-.247-.215-.411v-7c0-2.5 2.708-2.5 4.5-2.5s4.5 0 4.5 2.5v4c0 .208-.129.395-.324.468l-8 3c-.057.022-.117.032-.176.032z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#7C533E" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M11.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M14.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M24.434 12.633c.525-.149 1.422-.237 2.121-.201.662.034 1.486.591 1.629 1.038.143.448.09 1.074-.269 1.182s-.901-.251-1.588-.125c-.686.125-.624.445-.615.734.031.962-.508.864-.6.734-.203-.286-.563-.676-.975-1.054s-.033-2.214.297-2.308z"/><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#1C6399" d="M13.5 25.438c-.802.902-.594 1.625-.562 1.969s2.311 2.38 2.688 2.5c1.207.386 2.805-.531 2.805-1.188 0-.474-.211-.938-.743-1.625s-.875-1.719-1.094-2.062-2.594-.157-3.094.406zm8.286-3.533c-.648 1-.349 1.688-.272 2.025.077.336 2.546 2.052 2.924 2.121 1.213.223 2.624-.897 2.535-1.547-.065-.47-.001-.663-.606-1.274-.604-.611-1.825-1.424-2.082-1.736s-2.095-.213-2.499.411z"/><path fill="#67757F" d="M24.729 21.688c-.23-1.023-1.108-3.478-1.464-4.43-.145-.389-.606-.911-1.114-1.114l-5.001-2c-.807-.324-6.026 1.939-5.458 2.886 0 0 .015 1.909 2.602 4.337-.524 1.467-.848 4.241-.848 4.241-.134 1.08 3.923 1 4.057.112s.315-2.529.934-4.032c.113-.276.167-.958 0-1.479-.167-.521-1.208-1.725-1.208-1.725s1.508.908 2.639 1.056c.131 1.023 1.223 2.302 1.454 3.444.221 1.09 3.777.345 3.407-1.296z"/><path fill="#BBDDF5" d="M24.408 12c-.429-.073-1.908-.588-2.304-.917-.396-.328-1.595-1.621-2.098-2.286-.366-.486-.99-.797-1.598-.797 0 0-5.408.011-6.408.011-2.406 0-5.125 2.489-5.585 3.294-.562.985-1.353 4.216-.509 7.195.094.333 3.53-.504 3.399-1.132-.284-1.368-.326-3.08-.125-3.536.201-.455.664-.801 1.32-1.098V18c0 .164.081.317.215.411.085.059.184.089.285.089.059 0 .119-.01.176-.032l8-3c.195-.073.324-.26.324-.468v-1.048c.594.476 1.594 1.096 1.83 1.21s1.679.812 2.707.812c.55 0 1.46-3.79.371-3.974z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#7C533E" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#67757F" cx="11.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1"/><circle fill="#67757F" cx="14.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1"/><path fill="#1C6399" d="M6.47 17.805c-.917.79-.829 1.616-.501 2.195s.575.733 1.192.662c.589-.068 1.311-.745 1.727-1.204.569-.628.16-1.533.16-1.533s.351-.091.639-.278c.354-.229.402-1.139.062-.992-1.04.449-2.249.262-3.279 1.15z"/><path fill="#55ACEE" d="M15.018 27.982c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.242-1.113.183s-.917 1.129-1.223.882zm.553.716c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.243-1.113.183s-.918 1.129-1.223.882zm7.982-4.388c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291-.642.491-.802 1.214-1.131.998zm.621.659c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291s-.803 1.214-1.131.998z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c2.svg b/public/emoji/1f3c2.svg index b5aab7537..bff2c0841 100644 --- a/public/emoji/1f3c2.svg +++ b/public/emoji/1f3c2.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#BBDDF5" d="M24.408 16c-3.888 0-7.231-4.309-7.6-4.8-.663-.884-.483-2.138.4-2.8.883-.662 2.135-.484 2.798.397C21.012 10.127 23.043 12 24.408 12c1.104 0 2 .896 2 2s-.895 2-2 2zm-17 4.001c-.837 0-1.618-.53-1.897-1.368-1.058-3.175-.442-6.121 1.733-8.297 1.539-1.54 3.332-2.167 3.532-2.233 1.046-.348 2.181.216 2.53 1.265.348 1.044-.213 2.172-1.254 2.526-.963.337-3.996 1.726-2.746 5.474.349 1.048-.217 2.18-1.265 2.53-.21.07-.423.103-.633.103z"/><path fill="#67757F" d="M18.408 15.5c0 1.933-1.567 3.5-3.5 3.5s-3.5-1.567-3.5-3.5v-4c0-1.933 1.567-3.5 3.5-3.5s3.5 1.567 3.5 3.5v4z"/><path fill="#BBDDF5" d="M20.408 10c0 1.104-.896 2-2 2h-7c-1.104 0-2-.896-2-2s.896-2 2-2h7c1.105 0 2 .896 2 2z"/><path fill="#BBDDF5" d="M11 18.5c-.101 0-.2-.03-.285-.089-.134-.094-.215-.247-.215-.411v-7c0-2.5 2.708-2.5 4.5-2.5s4.5 0 4.5 2.5v4c0 .208-.129.395-.324.468l-8 3c-.057.022-.117.032-.176.032z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#FFDC5D" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M11.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1.5"/><path fill="#67757F" d="M14.5 6.5c-1.103 0-2-.897-2-2s.897-2 2-2 2 .897 2 2-.897 2-2 2zm0-3c-.551 0-1 .449-1 1s.449 1 1 1 1-.449 1-1-.449-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M24.434 12.633c.525-.149 1.422-.237 2.121-.201.662.034 1.486.591 1.629 1.038.143.448.09 1.074-.269 1.182s-.901-.251-1.588-.125c-.686.125-.624.445-.615.734.031.962-.508.864-.6.734-.203-.286-.563-.676-.975-1.054s-.033-2.214.297-2.308z"/><path fill="#E1E8ED" d="M36 16v16s0 4-4 4H4c-4 0-4-4-4-4v-2s17-10 36-14z"/><path fill="#EA596E" d="M32.816 20.98c.462 1.003.023 2.19-.98 2.653L8.221 34.511c-1.003.462-2.19.023-2.652-.979l-.837-1.817c-.462-1.003-.023-2.191.979-2.653l23.615-10.877c1.004-.462 2.191-.022 2.654.979l.836 1.816z"/><path fill="#1C6399" d="M13.5 25.438c-.802.902-.594 1.625-.562 1.969s2.311 2.38 2.688 2.5c1.207.386 2.805-.531 2.805-1.188 0-.474-.211-.938-.743-1.625s-.875-1.719-1.094-2.062-2.594-.157-3.094.406zm8.286-3.533c-.648 1-.349 1.688-.272 2.025.077.336 2.546 2.052 2.924 2.121 1.213.223 2.624-.897 2.535-1.547-.065-.47-.001-.663-.606-1.274-.604-.611-1.825-1.424-2.082-1.736s-2.095-.213-2.499.411z"/><path fill="#67757F" d="M24.729 21.688c-.23-1.023-1.108-3.478-1.464-4.43-.145-.389-.606-.911-1.114-1.114l-5.001-2c-.807-.324-6.026 1.939-5.458 2.886 0 0 .015 1.909 2.602 4.337-.524 1.467-.848 4.241-.848 4.241-.134 1.08 3.923 1 4.057.112s.315-2.529.934-4.032c.113-.276.167-.958 0-1.479-.167-.521-1.208-1.725-1.208-1.725s1.508.908 2.639 1.056c.131 1.023 1.223 2.302 1.454 3.444.221 1.09 3.777.345 3.407-1.296z"/><path fill="#BBDDF5" d="M24.408 12c-.429-.073-1.908-.588-2.304-.917-.396-.328-1.595-1.621-2.098-2.286-.366-.486-.99-.797-1.598-.797 0 0-5.408.011-6.408.011-2.406 0-5.125 2.489-5.585 3.294-.562.985-1.353 4.216-.509 7.195.094.333 3.53-.504 3.399-1.132-.284-1.368-.326-3.08-.125-3.536.201-.455.664-.801 1.32-1.098V18c0 .164.081.317.215.411.085.059.184.089.285.089.059 0 .119-.01.176-.032l8-3c.195-.073.324-.26.324-.468v-1.048c.594.476 1.594 1.096 1.83 1.21s1.679.812 2.707.812c.55 0 1.46-3.79.371-3.974z"/><path fill="#1C6399" d="M31.475 3.842l-1-3C30.406.638 30.215.5 30 .5c-.129 0-3.214.035-7.3 3.1-3.867 2.9-4.755 2.9-6.7 2.9h-3c-.133 0-.26.053-.354.147-.527.527-.666 1.268-.371 1.982.376.904 1.551 1.871 3.725 1.871 1.438 0 3.532-1.156 5.957-2.494C24.935 6.363 28.312 4.5 31 4.5c.161 0 .312-.077.405-.207.095-.131.12-.299.07-.451z"/><path fill="#FFDC5D" d="M18.408 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-3 4-3 4 .791 4 3z"/><path fill="#9AAAB4" d="M12 4c2 0 4-1 4 0s0 3 2 3 3-7-3-7-6 4-3 4z"/><circle fill="#67757F" cx="11.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="11.5" cy="4.5" r="1"/><circle fill="#67757F" cx="14.5" cy="4.5" r="2"/><circle fill="#BDDDF4" cx="14.5" cy="4.5" r="1"/><path fill="#1C6399" d="M6.47 17.805c-.917.79-.829 1.616-.501 2.195s.575.733 1.192.662c.589-.068 1.311-.745 1.727-1.204.569-.628.16-1.533.16-1.533s.351-.091.639-.278c.354-.229.402-1.139.062-.992-1.04.449-2.249.262-3.279 1.15z"/><path fill="#55ACEE" d="M15.018 27.982c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.242-1.113.183s-.917 1.129-1.223.882zm.553.716c-.276-.223.119-.841 1.078-1.235.887-.365 1.267.059 1.258.17-.008.104-.425-.243-1.113.183s-.918 1.129-1.223.882zm7.982-4.388c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291-.642.491-.802 1.214-1.131.998zm.621.659c-.296-.195.037-.848.952-1.335.848-.45 1.267-.065 1.269.046.002.104-.447-.2-1.09.291s-.803 1.214-1.131.998z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f3c3-1f3fb-200d-2640-fe0f.svg index 33261c1fc..9c559abd5 100644 --- a/public/emoji/1f3c3-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f3c3-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#F7DECE" d="M19.822 5.072c-.059-2.302-1.974-4.12-4.275-4.06-2.302.059-4.119 1.973-4.06 4.275.059 2.302 1.973 4.119 4.275 4.06.211-.005.412-.042.613-.078.061.238.091.539.047.958-.207 1.94 2.472 2.616 2.677.672.116-1.101-.345-1.915-.606-2.688.839-.786 1.361-1.901 1.329-3.139z"/><path fill="#292F33" d="M24.144 5.997c-1.085-.054-2.134-.177-3.928-2.487-1.192-1.536-2.305-2.522-5.061-2.496-2.925.027-5.375 2.516-3.498 3.761.819.543 1.505.285 2.821.654 2.065.578 2.378 2.775 4.244 3.268 3.651.965 6.507-2.647 5.422-2.7z"/><path fill="#F7DECE" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#9268CA" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#F7DECE" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M13.483 21.579c-.58.32-2.256 1.279-3.282 2.204-.596.537-.518.928-.329 1.871l.017.085c.186.932 2.106 7.039 2.483 8.232l1.168-.291c.014-.621.043-2.801-.18-4.205-.074-.47-.149-1.036-.217-1.549-.07-.532-.138-1.035-.184-1.273-.077-.396.05-.65.411-.825.772-.374 1.437-.671 1.764-.814l-1.651-3.435zm10.673 5.408c-.533-.065-1.037-.128-1.278-.143-.403-.025-.618-.212-.695-.606-.168-.842-.288-1.56-.345-1.912l-3.74.733c.164.643.671 2.505 1.308 3.732.369.711.767.734 1.726.789l.088.005c.95.057 7.342-.266 8.593-.33l.013-1.205c-.597-.169-2.699-.746-4.114-.885-.476-.044-1.042-.114-1.556-.178z"/><path fill="#8899A6" d="M28.11 29.77l-.166-.306c-.021-.049.003-.106.054-.123.16-.055.483-.203.596-.262-.098.224-.21.582-.335.69-.048.041-.124.059-.149.001z"/><path fill="#BE1931" d="M30.53 27.396c-.13-.104-.427-.155-.613-.173-.129-.013-.464-.023-.746-.007-.127.007-.272.023-.331.04-.185.054-.266.131-.31.185-.053.065-.058.134-.046.169.049.143.284.39.386.625.034.078.054.155.047.226-.025.258-.354.633-.6.911-.148.167-.266.299-.271.35-.005.055.01.102.035.148v.002c.067.123.214.251.314.587.065.217.369 1.205.369 1.205.073.252.17.313.211.449.085.277.235 1.021.309 1.256.074.235.253.336.39.355.138.019.217-.013.217-.013s.322-.145.535-1.352c.154-.872.018-1.007-.098-2.317-.114-1.312.202-2.646.202-2.646z"/><path fill="#DD2E44" d="M30.261 29.344c-.219-.09-.72-.42-.86-.775-.127-.321-.213-1.188-.229-1.353.269-.024.682-.006.815.006.175.017.377.031.498.134l.046.04c-.001 0-.215 1.376-.27 1.948z"/><path fill="#CCD6DD" d="M28.337 30.337c-.075 0-.146-.042-.181-.115-.048-.1-.005-.219.095-.266l.319-.151c.104-.048.22-.004.267.095.047.1.005.219-.095.266l-.319.151c-.028.014-.058.02-.086.02zm.204.584c-.085 0-.163-.054-.19-.139-.034-.105.024-.218.13-.251l.354-.113c.1-.035.217.024.251.13.034.105-.024.218-.13.251l-.354.113c-.02.006-.04.009-.061.009zm.172.595c-.094 0-.177-.065-.196-.16-.021-.108.048-.214.156-.236l.332-.068c.114-.023.214.048.236.156.021.108-.048.214-.156.236l-.332.068c-.014.002-.027.004-.04.004zm2.59-3.873c-.006-.027-.025-.128-.095-.252-.023-.042-.077-.055-.131-.061-.067-.009-.56-.08-.569.02 0 0-.002.148-.072.25-.07.102-.118.352-.136.539-.018.186-.098.887-.08 1.379.018.492.17 1.383.178 1.68.007.297 0 .759-.063 1.101-.063.342-.131.646-.183.834-.067.242-.157.439-.26.578 0 0 .389-.026.687-.602.235-.454.367-.891.416-1.317.004-.032.105-1.168.154-1.736.035-.415.095-1.078.095-1.078.075-.786.093-1.185.059-1.335z"/><path fill="#8899A6" d="M11.438 32.516l.246-.246c.041-.034.102-.027.134.017.098.138.332.406.421.497-.243-.03-.618-.036-.757-.125-.054-.035-.093-.103-.044-.143z"/><path fill="#BE1931" d="M14.401 34.162c.063-.154.027-.453-.008-.637-.025-.127-.11-.452-.205-.717-.043-.119-.099-.254-.132-.306-.104-.162-.201-.217-.266-.244-.077-.033-.145-.018-.175.004-.123.088-.294.383-.489.548-.065.055-.133.095-.204.109-.254.049-.707-.159-1.044-.317-.202-.094-.362-.17-.412-.16-.054.011-.095.038-.132.075l-.002.001h.001c-.099.099-.18.277-.474.468-.189.123-1.051.696-1.051.696-.221.141-.252.252-.37.33-.242.16-.912.515-1.117.653-.204.138-.251.338-.23.475s.074.204.074.204.23.268 1.448.129c.88-.1.97-.269 2.194-.752s2.594-.559 2.594-.559z"/><path fill="#DD2E44" d="M12.457 34.457c.024-.236.198-.809.499-1.045.271-.212 1.079-.542 1.232-.604.1.251.2.652.225.783.033.173.078.37.013.516l-.025.056c0-.001-1.38.184-1.944.294z"/><path fill="#CCD6DD" d="M11.385 33.301c-.055 0-.109-.022-.149-.067L11 32.971c-.073-.082-.066-.209.016-.282.083-.073.207-.067.283.016l.235.263c.073.082.066.209-.016.282-.039.034-.085.051-.133.051zm-.529.406c-.063 0-.127-.031-.165-.088l-.209-.308c-.062-.092-.039-.216.053-.278.089-.061.216-.039.277.053l.209.308c.062.092.039.216-.053.278-.033.024-.072.035-.112.035zm-.57.325c-.071 0-.141-.038-.177-.106l-.159-.299c-.052-.098-.015-.219.083-.271.094-.052.218-.016.271.083l.159.299c.052.098.015.219-.083.271-.029.016-.062.023-.094.023zm4.098.941c.024-.013.116-.06.215-.162.033-.034.031-.089.022-.143-.011-.067-.083-.559-.181-.54 0 0-.143.04-.26.002-.117-.038-.371-.013-.555.022-.184.036-.878.158-1.345.315-.467.157-1.277.556-1.56.648-.283.091-.728.215-1.074.252-.346.037-.657.058-.851.062-.251.004-.466-.025-.628-.085 0 0 .136.366.772.488.502.097.959.099 1.381.025.032-.006 1.15-.231 1.708-.346.408-.084 1.06-.215 1.06-.215.774-.151 1.162-.247 1.296-.323z"/><path fill="#A0041E" d="M13.084 21.466c.738-.382 3.176-1.588 4.842-1.76.152-.016 1.526 3.904 1.341 3.963-.763.246-2.681.897-4.134 1.668-.154.082-.338.044-.433-.09-.431-.605-1.549-2.257-1.798-3.436-.029-.138.048-.276.182-.345z"/><path fill="#BE1931" d="M17.882 25.364c-.196-.795-.794-3.411-.586-5.049.019-.15 3.69-.685 3.69-.685.175-.021.6 3.084 1.005 4.655.043.166-.033.334-.181.395-.667.275-2.474.969-3.643.937-.136-.004-.249-.11-.285-.253z"/><path fill="#F7DECE" d="M14.801 11.245c-.114.64.259 1.431 1.738 1.741 1.479.31 2.554.273 3.324.218.653-.047.563.952.711 1.998.148 1.05.241 2.419.182 2.633-.1.361-.722.479-.439 1.123.283.643.329.995.942.79.613-.205 1.222-.427 1.396-.759.174-.332-.43-1.065-.439-1.463-.007-.294.293-3.972.275-4.405-.022-.528-.035-1.251-.884-1.582-.849-.331-4.108-1.174-4.972-1.342-.912-.177-1.683.199-1.834 1.048z"/><path fill="#F7DECE" d="M16.495 6.612c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.482-.768-2.424-.742-3.475z"/><path fill="#292F33" d="M21.903 2.733c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.798C15.507.515 14.712.2 13.961.285 9.384.801 9.632 4.111 9.98 4.421c.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.222.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.738-1.283 1.187-2.272 1.176z"/><path fill="#DD2E44" d="M19.624 10.939c-.728-1.703-1.783-2.597-3.229-2.114-1.285.43-1.922 1.151-2.301 1.96-.184.393-.901 1.933-.466 2.933.851 1.956 2.243 5.863 2.488 7.059 0 0 .322.326 2.403.064 1.823-.23 2.732-.404 2.732-.404-.277-2.594-.452-6.747-1.627-9.498z"/><path fill="#F7DECE" d="M17.202 11.067c-.577-.372-1.499-.331-2.404.983-.905 1.314-1.308 2.376-1.568 3.148-.221.655-1.157.16-2.236-.122-1.083-.284-2.455-.752-2.639-.897-.311-.245-.172-.898-.914-.886-.742.013-1.103-.086-1.153.595-.05.681-.083 1.364.17 1.669.253.305 1.212.016 1.604.169.289.113 3.749 1.905 4.178 2.064.524.194 1.233.476 1.901-.216.668-.692 2.819-3.522 3.335-4.296.543-.814.491-1.718-.274-2.211z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f3c3-1f3fb-200d-2642-fe0f.svg index b7160fb8c..604a0024c 100644 --- a/public/emoji/1f3c3-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f3c3-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#F7DECE" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#292F33" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#F7DECE" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#F7DECE" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#F7DECE" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#F7DECE" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#292F33" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#F7DECE" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fb.svg b/public/emoji/1f3c3-1f3fb.svg index b7160fb8c..604a0024c 100644 --- a/public/emoji/1f3c3-1f3fb.svg +++ b/public/emoji/1f3c3-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#F7DECE" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#292F33" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#F7DECE" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#F7DECE" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#F7DECE" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#F7DECE" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#292F33" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#F7DECE" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f3c3-1f3fc-200d-2640-fe0f.svg index be91355ad..2639daf5c 100644 --- a/public/emoji/1f3c3-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f3c3-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#F3D2A2" d="M19.822 5.072c-.059-2.302-1.974-4.12-4.275-4.06-2.302.059-4.119 1.973-4.06 4.275.059 2.302 1.973 4.119 4.275 4.06.211-.005.412-.042.613-.078.061.238.091.539.047.958-.207 1.94 2.472 2.616 2.677.672.116-1.101-.345-1.915-.606-2.688.839-.786 1.361-1.901 1.329-3.139z"/><path fill="#FFE51E" d="M24.144 5.997c-1.085-.054-2.134-.177-3.928-2.487-1.192-1.536-2.305-2.522-5.061-2.496-2.925.027-5.375 2.516-3.498 3.761.819.543 1.505.285 2.821.654 2.065.578 2.378 2.775 4.244 3.268 3.651.965 6.507-2.647 5.422-2.7z"/><path fill="#F3D2A2" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#9268CA" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#F3D2A2" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M13.483 21.579c-.58.32-2.256 1.279-3.282 2.204-.596.537-.518.928-.329 1.871l.017.085c.186.932 2.106 7.039 2.483 8.232l1.168-.291c.014-.621.043-2.801-.18-4.205-.074-.47-.149-1.036-.217-1.549-.07-.532-.138-1.035-.184-1.273-.077-.396.05-.65.411-.825.772-.374 1.437-.671 1.764-.814l-1.651-3.435zm10.673 5.408c-.533-.065-1.037-.128-1.278-.143-.403-.025-.618-.212-.695-.606-.168-.842-.288-1.56-.345-1.912l-3.74.733c.164.643.671 2.505 1.308 3.732.369.711.767.734 1.726.789l.088.005c.95.057 7.342-.266 8.593-.33l.013-1.205c-.597-.169-2.699-.746-4.114-.885-.476-.044-1.042-.114-1.556-.178z"/><path fill="#8899A6" d="M28.11 29.77l-.166-.306c-.021-.049.003-.106.054-.123.16-.055.483-.203.596-.262-.098.224-.21.582-.335.69-.048.041-.124.059-.149.001z"/><path fill="#BE1931" d="M30.53 27.396c-.13-.104-.427-.155-.613-.173-.129-.013-.464-.023-.746-.007-.127.007-.272.023-.331.04-.185.054-.266.131-.31.185-.053.065-.058.134-.046.169.049.143.284.39.386.625.034.078.054.155.047.226-.025.258-.354.633-.6.911-.148.167-.266.299-.271.35-.005.055.01.102.035.148v.002c.067.123.214.251.314.587.065.217.369 1.205.369 1.205.073.252.17.313.211.449.085.277.235 1.021.309 1.256.074.235.253.336.39.355.138.019.217-.013.217-.013s.322-.145.535-1.352c.154-.872.018-1.007-.098-2.317-.114-1.312.202-2.646.202-2.646z"/><path fill="#DD2E44" d="M30.261 29.344c-.219-.09-.72-.42-.86-.775-.127-.321-.213-1.188-.229-1.353.269-.024.682-.006.815.006.175.017.377.031.498.134l.046.04c-.001 0-.215 1.376-.27 1.948z"/><path fill="#CCD6DD" d="M28.337 30.337c-.075 0-.146-.042-.181-.115-.048-.1-.005-.219.095-.266l.319-.151c.104-.048.22-.004.267.095.047.1.005.219-.095.266l-.319.151c-.028.014-.058.02-.086.02zm.204.584c-.085 0-.163-.054-.19-.139-.034-.105.024-.218.13-.251l.354-.113c.1-.035.217.024.251.13.034.105-.024.218-.13.251l-.354.113c-.02.006-.04.009-.061.009zm.172.595c-.094 0-.177-.065-.196-.16-.021-.108.048-.214.156-.236l.332-.068c.114-.023.214.048.236.156.021.108-.048.214-.156.236l-.332.068c-.014.002-.027.004-.04.004zm2.59-3.873c-.006-.027-.025-.128-.095-.252-.023-.042-.077-.055-.131-.061-.067-.009-.56-.08-.569.02 0 0-.002.148-.072.25-.07.102-.118.352-.136.539-.018.186-.098.887-.08 1.379.018.492.17 1.383.178 1.68.007.297 0 .759-.063 1.101-.063.342-.131.646-.183.834-.067.242-.157.439-.26.578 0 0 .389-.026.687-.602.235-.454.367-.891.416-1.317.004-.032.105-1.168.154-1.736.035-.415.095-1.078.095-1.078.075-.786.093-1.185.059-1.335z"/><path fill="#8899A6" d="M11.438 32.516l.246-.246c.041-.034.102-.027.134.017.098.138.332.406.421.497-.243-.03-.618-.036-.757-.125-.054-.035-.093-.103-.044-.143z"/><path fill="#BE1931" d="M14.401 34.162c.063-.154.027-.453-.008-.637-.025-.127-.11-.452-.205-.717-.043-.119-.099-.254-.132-.306-.104-.162-.201-.217-.266-.244-.077-.033-.145-.018-.175.004-.123.088-.294.383-.489.548-.065.055-.133.095-.204.109-.254.049-.707-.159-1.044-.317-.202-.094-.362-.17-.412-.16-.054.011-.095.038-.132.075l-.002.001h.001c-.099.099-.18.277-.474.468-.189.123-1.051.696-1.051.696-.221.141-.252.252-.37.33-.242.16-.912.515-1.117.653-.204.138-.251.338-.23.475s.074.204.074.204.23.268 1.448.129c.88-.1.97-.269 2.194-.752s2.594-.559 2.594-.559z"/><path fill="#DD2E44" d="M12.457 34.457c.024-.236.198-.809.499-1.045.271-.212 1.079-.542 1.232-.604.1.251.2.652.225.783.033.173.078.37.013.516l-.025.056c0-.001-1.38.184-1.944.294z"/><path fill="#CCD6DD" d="M11.385 33.301c-.055 0-.109-.022-.149-.067L11 32.971c-.073-.082-.066-.209.016-.282.083-.073.207-.067.283.016l.235.263c.073.082.066.209-.016.282-.039.034-.085.051-.133.051zm-.529.406c-.063 0-.127-.031-.165-.088l-.209-.308c-.062-.092-.039-.216.053-.278.089-.061.216-.039.277.053l.209.308c.062.092.039.216-.053.278-.033.024-.072.035-.112.035zm-.57.325c-.071 0-.141-.038-.177-.106l-.159-.299c-.052-.098-.015-.219.083-.271.094-.052.218-.016.271.083l.159.299c.052.098.015.219-.083.271-.029.016-.062.023-.094.023zm4.098.941c.024-.013.116-.06.215-.162.033-.034.031-.089.022-.143-.011-.067-.083-.559-.181-.54 0 0-.143.04-.26.002-.117-.038-.371-.013-.555.022-.184.036-.878.158-1.345.315-.467.157-1.277.556-1.56.648-.283.091-.728.215-1.074.252-.346.037-.657.058-.851.062-.251.004-.466-.025-.628-.085 0 0 .136.366.772.488.502.097.959.099 1.381.025.032-.006 1.15-.231 1.708-.346.408-.084 1.06-.215 1.06-.215.774-.151 1.162-.247 1.296-.323z"/><path fill="#A0041E" d="M13.084 21.466c.738-.382 3.176-1.588 4.842-1.76.152-.016 1.526 3.904 1.341 3.963-.763.246-2.681.897-4.134 1.668-.154.082-.338.044-.433-.09-.431-.605-1.549-2.257-1.798-3.436-.029-.138.048-.276.182-.345z"/><path fill="#BE1931" d="M17.882 25.364c-.196-.795-.794-3.411-.586-5.049.019-.15 3.69-.685 3.69-.685.175-.021.6 3.084 1.005 4.655.043.166-.033.334-.181.395-.667.275-2.474.969-3.643.937-.136-.004-.249-.11-.285-.253z"/><path fill="#F3D2A2" d="M14.801 11.245c-.114.64.259 1.431 1.738 1.741 1.479.31 2.554.273 3.324.218.653-.047.563.952.711 1.998.148 1.05.241 2.419.182 2.633-.1.361-.722.479-.439 1.123.283.643.329.995.942.79.613-.205 1.222-.427 1.396-.759.174-.332-.43-1.065-.439-1.463-.007-.294.293-3.972.275-4.405-.022-.528-.035-1.251-.884-1.582-.849-.331-4.108-1.174-4.972-1.342-.912-.177-1.683.199-1.834 1.048z"/><path fill="#F3D2A2" d="M16.495 6.612c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.482-.768-2.424-.742-3.475z"/><path fill="#FFE51E" d="M21.903 2.733c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.798C15.507.515 14.712.2 13.961.285 9.384.801 9.632 4.111 9.98 4.421c.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.222.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.738-1.283 1.187-2.272 1.176z"/><path fill="#DD2E44" d="M19.624 10.939c-.728-1.703-1.783-2.597-3.229-2.114-1.285.43-1.922 1.151-2.301 1.96-.184.393-.901 1.933-.466 2.933.851 1.956 2.243 5.863 2.488 7.059 0 0 .322.326 2.403.064 1.823-.23 2.732-.404 2.732-.404-.277-2.594-.452-6.747-1.627-9.498z"/><path fill="#F3D2A2" d="M17.202 11.067c-.577-.372-1.499-.331-2.404.983-.905 1.314-1.308 2.376-1.568 3.148-.221.655-1.157.16-2.236-.122-1.083-.284-2.455-.752-2.639-.897-.311-.245-.172-.898-.914-.886-.742.013-1.103-.086-1.153.595-.05.681-.083 1.364.17 1.669.253.305 1.212.016 1.604.169.289.113 3.749 1.905 4.178 2.064.524.194 1.233.476 1.901-.216.668-.692 2.819-3.522 3.335-4.296.543-.814.491-1.718-.274-2.211z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f3c3-1f3fc-200d-2642-fe0f.svg index 95c90c3d9..f93e9dbfc 100644 --- a/public/emoji/1f3c3-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f3c3-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#F3D2A2" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#FFE51E" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#F3D2A2" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#F3D2A2" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#F3D2A2" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#F3D2A2" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#FFE51E" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#F3D2A2" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fc.svg b/public/emoji/1f3c3-1f3fc.svg index 95c90c3d9..f93e9dbfc 100644 --- a/public/emoji/1f3c3-1f3fc.svg +++ b/public/emoji/1f3c3-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#F3D2A2" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#FFE51E" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#F3D2A2" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#F3D2A2" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#F3D2A2" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#F3D2A2" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#FFE51E" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#F3D2A2" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f3c3-1f3fd-200d-2640-fe0f.svg index 3c9898305..f2677ee96 100644 --- a/public/emoji/1f3c3-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f3c3-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#D5AB88" d="M19.822 5.072c-.059-2.302-1.974-4.12-4.275-4.06-2.302.059-4.119 1.973-4.06 4.275.059 2.302 1.973 4.119 4.275 4.06.211-.005.412-.042.613-.078.061.238.091.539.047.958-.207 1.94 2.472 2.616 2.677.672.116-1.101-.345-1.915-.606-2.688.839-.786 1.361-1.901 1.329-3.139z"/><path fill="#963B22" d="M24.144 5.997c-1.085-.054-2.134-.177-3.928-2.487-1.192-1.536-2.305-2.522-5.061-2.496-2.925.027-5.375 2.516-3.498 3.761.819.543 1.505.285 2.821.654 2.065.578 2.378 2.775 4.244 3.268 3.651.965 6.507-2.647 5.422-2.7z"/><path fill="#D5AB88" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#9268CA" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#D5AB88" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M13.483 21.579c-.58.32-2.256 1.279-3.282 2.204-.596.537-.518.928-.329 1.871l.017.085c.186.932 2.106 7.039 2.483 8.232l1.168-.291c.014-.621.043-2.801-.18-4.205-.074-.47-.149-1.036-.217-1.549-.07-.532-.138-1.035-.184-1.273-.077-.396.05-.65.411-.825.772-.374 1.437-.671 1.764-.814l-1.651-3.435zm10.673 5.408c-.533-.065-1.037-.128-1.278-.143-.403-.025-.618-.212-.695-.606-.168-.842-.288-1.56-.345-1.912l-3.74.733c.164.643.671 2.505 1.308 3.732.369.711.767.734 1.726.789l.088.005c.95.057 7.342-.266 8.593-.33l.013-1.205c-.597-.169-2.699-.746-4.114-.885-.476-.044-1.042-.114-1.556-.178z"/><path fill="#8899A6" d="M28.11 29.77l-.166-.306c-.021-.049.003-.106.054-.123.16-.055.483-.203.596-.262-.098.224-.21.582-.335.69-.048.041-.124.059-.149.001z"/><path fill="#BE1931" d="M30.53 27.396c-.13-.104-.427-.155-.613-.173-.129-.013-.464-.023-.746-.007-.127.007-.272.023-.331.04-.185.054-.266.131-.31.185-.053.065-.058.134-.046.169.049.143.284.39.386.625.034.078.054.155.047.226-.025.258-.354.633-.6.911-.148.167-.266.299-.271.35-.005.055.01.102.035.148v.002c.067.123.214.251.314.587.065.217.369 1.205.369 1.205.073.252.17.313.211.449.085.277.235 1.021.309 1.256.074.235.253.336.39.355.138.019.217-.013.217-.013s.322-.145.535-1.352c.154-.872.018-1.007-.098-2.317-.114-1.312.202-2.646.202-2.646z"/><path fill="#DD2E44" d="M30.261 29.344c-.219-.09-.72-.42-.86-.775-.127-.321-.213-1.188-.229-1.353.269-.024.682-.006.815.006.175.017.377.031.498.134l.046.04c-.001 0-.215 1.376-.27 1.948z"/><path fill="#CCD6DD" d="M28.337 30.337c-.075 0-.146-.042-.181-.115-.048-.1-.005-.219.095-.266l.319-.151c.104-.048.22-.004.267.095.047.1.005.219-.095.266l-.319.151c-.028.014-.058.02-.086.02zm.204.584c-.085 0-.163-.054-.19-.139-.034-.105.024-.218.13-.251l.354-.113c.1-.035.217.024.251.13.034.105-.024.218-.13.251l-.354.113c-.02.006-.04.009-.061.009zm.172.595c-.094 0-.177-.065-.196-.16-.021-.108.048-.214.156-.236l.332-.068c.114-.023.214.048.236.156.021.108-.048.214-.156.236l-.332.068c-.014.002-.027.004-.04.004zm2.59-3.873c-.006-.027-.025-.128-.095-.252-.023-.042-.077-.055-.131-.061-.067-.009-.56-.08-.569.02 0 0-.002.148-.072.25-.07.102-.118.352-.136.539-.018.186-.098.887-.08 1.379.018.492.17 1.383.178 1.68.007.297 0 .759-.063 1.101-.063.342-.131.646-.183.834-.067.242-.157.439-.26.578 0 0 .389-.026.687-.602.235-.454.367-.891.416-1.317.004-.032.105-1.168.154-1.736.035-.415.095-1.078.095-1.078.075-.786.093-1.185.059-1.335z"/><path fill="#8899A6" d="M11.438 32.516l.246-.246c.041-.034.102-.027.134.017.098.138.332.406.421.497-.243-.03-.618-.036-.757-.125-.054-.035-.093-.103-.044-.143z"/><path fill="#BE1931" d="M14.401 34.162c.063-.154.027-.453-.008-.637-.025-.127-.11-.452-.205-.717-.043-.119-.099-.254-.132-.306-.104-.162-.201-.217-.266-.244-.077-.033-.145-.018-.175.004-.123.088-.294.383-.489.548-.065.055-.133.095-.204.109-.254.049-.707-.159-1.044-.317-.202-.094-.362-.17-.412-.16-.054.011-.095.038-.132.075l-.002.001h.001c-.099.099-.18.277-.474.468-.189.123-1.051.696-1.051.696-.221.141-.252.252-.37.33-.242.16-.912.515-1.117.653-.204.138-.251.338-.23.475s.074.204.074.204.23.268 1.448.129c.88-.1.97-.269 2.194-.752s2.594-.559 2.594-.559z"/><path fill="#DD2E44" d="M12.457 34.457c.024-.236.198-.809.499-1.045.271-.212 1.079-.542 1.232-.604.1.251.2.652.225.783.033.173.078.37.013.516l-.025.056c0-.001-1.38.184-1.944.294z"/><path fill="#CCD6DD" d="M11.385 33.301c-.055 0-.109-.022-.149-.067L11 32.971c-.073-.082-.066-.209.016-.282.083-.073.207-.067.283.016l.235.263c.073.082.066.209-.016.282-.039.034-.085.051-.133.051zm-.529.406c-.063 0-.127-.031-.165-.088l-.209-.308c-.062-.092-.039-.216.053-.278.089-.061.216-.039.277.053l.209.308c.062.092.039.216-.053.278-.033.024-.072.035-.112.035zm-.57.325c-.071 0-.141-.038-.177-.106l-.159-.299c-.052-.098-.015-.219.083-.271.094-.052.218-.016.271.083l.159.299c.052.098.015.219-.083.271-.029.016-.062.023-.094.023zm4.098.941c.024-.013.116-.06.215-.162.033-.034.031-.089.022-.143-.011-.067-.083-.559-.181-.54 0 0-.143.04-.26.002-.117-.038-.371-.013-.555.022-.184.036-.878.158-1.345.315-.467.157-1.277.556-1.56.648-.283.091-.728.215-1.074.252-.346.037-.657.058-.851.062-.251.004-.466-.025-.628-.085 0 0 .136.366.772.488.502.097.959.099 1.381.025.032-.006 1.15-.231 1.708-.346.408-.084 1.06-.215 1.06-.215.774-.151 1.162-.247 1.296-.323z"/><path fill="#A0041E" d="M13.084 21.466c.738-.382 3.176-1.588 4.842-1.76.152-.016 1.526 3.904 1.341 3.963-.763.246-2.681.897-4.134 1.668-.154.082-.338.044-.433-.09-.431-.605-1.549-2.257-1.798-3.436-.029-.138.048-.276.182-.345z"/><path fill="#BE1931" d="M17.882 25.364c-.196-.795-.794-3.411-.586-5.049.019-.15 3.69-.685 3.69-.685.175-.021.6 3.084 1.005 4.655.043.166-.033.334-.181.395-.667.275-2.474.969-3.643.937-.136-.004-.249-.11-.285-.253z"/><path fill="#D4AB88" d="M14.801 11.245c-.114.64.259 1.431 1.738 1.741 1.479.31 2.554.273 3.324.218.653-.047.563.952.711 1.998.148 1.05.241 2.419.182 2.633-.1.361-.722.479-.439 1.123.283.643.329.995.942.79.613-.205 1.222-.427 1.396-.759.174-.332-.43-1.065-.439-1.463-.007-.294.293-3.972.275-4.405-.022-.528-.035-1.251-.884-1.582-.849-.331-4.108-1.174-4.972-1.342-.912-.177-1.683.199-1.834 1.048z"/><path fill="#D4AB88" d="M16.495 6.612c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.482-.768-2.424-.742-3.475z"/><path fill="#963B22" d="M21.903 2.733c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.798C15.507.515 14.712.2 13.961.285 9.384.801 9.632 4.111 9.98 4.421c.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.222.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.738-1.283 1.187-2.272 1.176z"/><path fill="#DD2E44" d="M19.624 10.939c-.728-1.703-1.783-2.597-3.229-2.114-1.285.43-1.922 1.151-2.301 1.96-.184.393-.901 1.933-.466 2.933.851 1.956 2.243 5.863 2.488 7.059 0 0 .322.326 2.403.064 1.823-.23 2.732-.404 2.732-.404-.277-2.594-.452-6.747-1.627-9.498z"/><path fill="#D4AB88" d="M17.202 11.067c-.577-.372-1.499-.331-2.404.983-.905 1.314-1.308 2.376-1.568 3.148-.221.655-1.157.16-2.236-.122-1.083-.284-2.455-.752-2.639-.897-.311-.245-.172-.898-.914-.886-.742.013-1.103-.086-1.153.595-.05.681-.083 1.364.17 1.669.253.305 1.212.016 1.604.169.289.113 3.749 1.905 4.178 2.064.524.194 1.233.476 1.901-.216.668-.692 2.819-3.522 3.335-4.296.543-.814.491-1.718-.274-2.211z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f3c3-1f3fd-200d-2642-fe0f.svg index 20799e947..847b7f6e0 100644 --- a/public/emoji/1f3c3-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f3c3-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#D5AB88" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#963B22" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#D5AB88" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#D5AB88" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#D4AB88" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#D4AB88" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#963B22" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#D4AB88" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fd.svg b/public/emoji/1f3c3-1f3fd.svg index 20799e947..847b7f6e0 100644 --- a/public/emoji/1f3c3-1f3fd.svg +++ b/public/emoji/1f3c3-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#D5AB88" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#963B22" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#D5AB88" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#D5AB88" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#D4AB88" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#D4AB88" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#963B22" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#D4AB88" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f3c3-1f3fe-200d-2640-fe0f.svg index 2ec1034b2..175349d18 100644 --- a/public/emoji/1f3c3-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f3c3-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#AF7E57" d="M19.822 5.072c-.059-2.302-1.974-4.12-4.275-4.06-2.302.059-4.119 1.973-4.06 4.275.059 2.302 1.973 4.119 4.275 4.06.211-.005.412-.042.613-.078.061.238.091.539.047.958-.207 1.94 2.472 2.616 2.677.672.116-1.101-.345-1.915-.606-2.688.839-.786 1.361-1.901 1.329-3.139z"/><path fill="#60352A" d="M24.144 5.997c-1.085-.054-2.134-.177-3.928-2.487-1.192-1.536-2.305-2.522-5.061-2.496-2.925.027-5.375 2.516-3.498 3.761.819.543 1.505.285 2.821.654 2.065.578 2.378 2.775 4.244 3.268 3.651.965 6.507-2.647 5.422-2.7z"/><path fill="#AF7E57" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#9268CA" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#AF7E57" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M13.483 21.579c-.58.32-2.256 1.279-3.282 2.204-.596.537-.518.928-.329 1.871l.017.085c.186.932 2.106 7.039 2.483 8.232l1.168-.291c.014-.621.043-2.801-.18-4.205-.074-.47-.149-1.036-.217-1.549-.07-.532-.138-1.035-.184-1.273-.077-.396.05-.65.411-.825.772-.374 1.437-.671 1.764-.814l-1.651-3.435zm10.673 5.408c-.533-.065-1.037-.128-1.278-.143-.403-.025-.618-.212-.695-.606-.168-.842-.288-1.56-.345-1.912l-3.74.733c.164.643.671 2.505 1.308 3.732.369.711.767.734 1.726.789l.088.005c.95.057 7.342-.266 8.593-.33l.013-1.205c-.597-.169-2.699-.746-4.114-.885-.476-.044-1.042-.114-1.556-.178z"/><path fill="#8899A6" d="M28.11 29.77l-.166-.306c-.021-.049.003-.106.054-.123.16-.055.483-.203.596-.262-.098.224-.21.582-.335.69-.048.041-.124.059-.149.001z"/><path fill="#BE1931" d="M30.53 27.396c-.13-.104-.427-.155-.613-.173-.129-.013-.464-.023-.746-.007-.127.007-.272.023-.331.04-.185.054-.266.131-.31.185-.053.065-.058.134-.046.169.049.143.284.39.386.625.034.078.054.155.047.226-.025.258-.354.633-.6.911-.148.167-.266.299-.271.35-.005.055.01.102.035.148v.002c.067.123.214.251.314.587.065.217.369 1.205.369 1.205.073.252.17.313.211.449.085.277.235 1.021.309 1.256.074.235.253.336.39.355.138.019.217-.013.217-.013s.322-.145.535-1.352c.154-.872.018-1.007-.098-2.317-.114-1.312.202-2.646.202-2.646z"/><path fill="#DD2E44" d="M30.261 29.344c-.219-.09-.72-.42-.86-.775-.127-.321-.213-1.188-.229-1.353.269-.024.682-.006.815.006.175.017.377.031.498.134l.046.04c-.001 0-.215 1.376-.27 1.948z"/><path fill="#CCD6DD" d="M28.337 30.337c-.075 0-.146-.042-.181-.115-.048-.1-.005-.219.095-.266l.319-.151c.104-.048.22-.004.267.095.047.1.005.219-.095.266l-.319.151c-.028.014-.058.02-.086.02zm.204.584c-.085 0-.163-.054-.19-.139-.034-.105.024-.218.13-.251l.354-.113c.1-.035.217.024.251.13.034.105-.024.218-.13.251l-.354.113c-.02.006-.04.009-.061.009zm.172.595c-.094 0-.177-.065-.196-.16-.021-.108.048-.214.156-.236l.332-.068c.114-.023.214.048.236.156.021.108-.048.214-.156.236l-.332.068c-.014.002-.027.004-.04.004zm2.59-3.873c-.006-.027-.025-.128-.095-.252-.023-.042-.077-.055-.131-.061-.067-.009-.56-.08-.569.02 0 0-.002.148-.072.25-.07.102-.118.352-.136.539-.018.186-.098.887-.08 1.379.018.492.17 1.383.178 1.68.007.297 0 .759-.063 1.101-.063.342-.131.646-.183.834-.067.242-.157.439-.26.578 0 0 .389-.026.687-.602.235-.454.367-.891.416-1.317.004-.032.105-1.168.154-1.736.035-.415.095-1.078.095-1.078.075-.786.093-1.185.059-1.335z"/><path fill="#8899A6" d="M11.438 32.516l.246-.246c.041-.034.102-.027.134.017.098.138.332.406.421.497-.243-.03-.618-.036-.757-.125-.054-.035-.093-.103-.044-.143z"/><path fill="#BE1931" d="M14.401 34.162c.063-.154.027-.453-.008-.637-.025-.127-.11-.452-.205-.717-.043-.119-.099-.254-.132-.306-.104-.162-.201-.217-.266-.244-.077-.033-.145-.018-.175.004-.123.088-.294.383-.489.548-.065.055-.133.095-.204.109-.254.049-.707-.159-1.044-.317-.202-.094-.362-.17-.412-.16-.054.011-.095.038-.132.075l-.002.001h.001c-.099.099-.18.277-.474.468-.189.123-1.051.696-1.051.696-.221.141-.252.252-.37.33-.242.16-.912.515-1.117.653-.204.138-.251.338-.23.475s.074.204.074.204.23.268 1.448.129c.88-.1.97-.269 2.194-.752s2.594-.559 2.594-.559z"/><path fill="#DD2E44" d="M12.457 34.457c.024-.236.198-.809.499-1.045.271-.212 1.079-.542 1.232-.604.1.251.2.652.225.783.033.173.078.37.013.516l-.025.056c0-.001-1.38.184-1.944.294z"/><path fill="#CCD6DD" d="M11.385 33.301c-.055 0-.109-.022-.149-.067L11 32.971c-.073-.082-.066-.209.016-.282.083-.073.207-.067.283.016l.235.263c.073.082.066.209-.016.282-.039.034-.085.051-.133.051zm-.529.406c-.063 0-.127-.031-.165-.088l-.209-.308c-.062-.092-.039-.216.053-.278.089-.061.216-.039.277.053l.209.308c.062.092.039.216-.053.278-.033.024-.072.035-.112.035zm-.57.325c-.071 0-.141-.038-.177-.106l-.159-.299c-.052-.098-.015-.219.083-.271.094-.052.218-.016.271.083l.159.299c.052.098.015.219-.083.271-.029.016-.062.023-.094.023zm4.098.941c.024-.013.116-.06.215-.162.033-.034.031-.089.022-.143-.011-.067-.083-.559-.181-.54 0 0-.143.04-.26.002-.117-.038-.371-.013-.555.022-.184.036-.878.158-1.345.315-.467.157-1.277.556-1.56.648-.283.091-.728.215-1.074.252-.346.037-.657.058-.851.062-.251.004-.466-.025-.628-.085 0 0 .136.366.772.488.502.097.959.099 1.381.025.032-.006 1.15-.231 1.708-.346.408-.084 1.06-.215 1.06-.215.774-.151 1.162-.247 1.296-.323z"/><path fill="#A0041E" d="M13.084 21.466c.738-.382 3.176-1.588 4.842-1.76.152-.016 1.526 3.904 1.341 3.963-.763.246-2.681.897-4.134 1.668-.154.082-.338.044-.433-.09-.431-.605-1.549-2.257-1.798-3.436-.029-.138.048-.276.182-.345z"/><path fill="#BE1931" d="M17.882 25.364c-.196-.795-.794-3.411-.586-5.049.019-.15 3.69-.685 3.69-.685.175-.021.6 3.084 1.005 4.655.043.166-.033.334-.181.395-.667.275-2.474.969-3.643.937-.136-.004-.249-.11-.285-.253z"/><path fill="#AF7E57" d="M14.801 11.245c-.114.64.259 1.431 1.738 1.741 1.479.31 2.554.273 3.324.218.653-.047.563.952.711 1.998.148 1.05.241 2.419.182 2.633-.1.361-.722.479-.439 1.123.283.643.329.995.942.79.613-.205 1.222-.427 1.396-.759.174-.332-.43-1.065-.439-1.463-.007-.294.293-3.972.275-4.405-.022-.528-.035-1.251-.884-1.582-.849-.331-4.108-1.174-4.972-1.342-.912-.177-1.683.199-1.834 1.048z"/><path fill="#AF7E57" d="M16.495 6.612c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.482-.768-2.424-.742-3.475z"/><path fill="#60352A" d="M21.903 2.733c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.798C15.507.515 14.712.2 13.961.285 9.384.801 9.632 4.111 9.98 4.421c.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.222.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.738-1.283 1.187-2.272 1.176z"/><path fill="#DD2E44" d="M19.624 10.939c-.728-1.703-1.783-2.597-3.229-2.114-1.285.43-1.922 1.151-2.301 1.96-.184.393-.901 1.933-.466 2.933.851 1.956 2.243 5.863 2.488 7.059 0 0 .322.326 2.403.064 1.823-.23 2.732-.404 2.732-.404-.277-2.594-.452-6.747-1.627-9.498z"/><path fill="#AF7E57" d="M17.202 11.067c-.577-.372-1.499-.331-2.404.983-.905 1.314-1.308 2.376-1.568 3.148-.221.655-1.157.16-2.236-.122-1.083-.284-2.455-.752-2.639-.897-.311-.245-.172-.898-.914-.886-.742.013-1.103-.086-1.153.595-.05.681-.083 1.364.17 1.669.253.305 1.212.016 1.604.169.289.113 3.749 1.905 4.178 2.064.524.194 1.233.476 1.901-.216.668-.692 2.819-3.522 3.335-4.296.543-.814.491-1.718-.274-2.211z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f3c3-1f3fe-200d-2642-fe0f.svg index 92b76eca5..51db6d67a 100644 --- a/public/emoji/1f3c3-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f3c3-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#AF7E57" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#60352A" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#AF7E57" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#AF7E57" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#AF7E57" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#AF7E57" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#60352A" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#AF7E57" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3fe.svg b/public/emoji/1f3c3-1f3fe.svg index 92b76eca5..51db6d67a 100644 --- a/public/emoji/1f3c3-1f3fe.svg +++ b/public/emoji/1f3c3-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#AF7E57" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#60352A" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#AF7E57" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#AF7E57" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#AF7E57" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#AF7E57" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#60352A" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#AF7E57" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f3c3-1f3ff-200d-2640-fe0f.svg index 9326a89be..b19ab8811 100644 --- a/public/emoji/1f3c3-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f3c3-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#7C533E" d="M19.822 5.072c-.059-2.302-1.974-4.12-4.275-4.06-2.302.059-4.119 1.973-4.06 4.275.059 2.302 1.973 4.119 4.275 4.06.211-.005.412-.042.613-.078.061.238.091.539.047.958-.207 1.94 2.472 2.616 2.677.672.116-1.101-.345-1.915-.606-2.688.839-.786 1.361-1.901 1.329-3.139z"/><path fill="#0B0200" d="M24.144 5.997c-1.085-.054-2.134-.177-3.928-2.487-1.192-1.536-2.305-2.522-5.061-2.496-2.925.027-5.375 2.516-3.498 3.761.819.543 1.505.285 2.821.654 2.065.578 2.378 2.775 4.244 3.268 3.651.965 6.507-2.647 5.422-2.7z"/><path fill="#7C533E" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#9268CA" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#7C533E" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M13.483 21.579c-.58.32-2.256 1.279-3.282 2.204-.596.537-.518.928-.329 1.871l.017.085c.186.932 2.106 7.039 2.483 8.232l1.168-.291c.014-.621.043-2.801-.18-4.205-.074-.47-.149-1.036-.217-1.549-.07-.532-.138-1.035-.184-1.273-.077-.396.05-.65.411-.825.772-.374 1.437-.671 1.764-.814l-1.651-3.435zm10.673 5.408c-.533-.065-1.037-.128-1.278-.143-.403-.025-.618-.212-.695-.606-.168-.842-.288-1.56-.345-1.912l-3.74.733c.164.643.671 2.505 1.308 3.732.369.711.767.734 1.726.789l.088.005c.95.057 7.342-.266 8.593-.33l.013-1.205c-.597-.169-2.699-.746-4.114-.885-.476-.044-1.042-.114-1.556-.178z"/><path fill="#8899A6" d="M28.11 29.77l-.166-.306c-.021-.049.003-.106.054-.123.16-.055.483-.203.596-.262-.098.224-.21.582-.335.69-.048.041-.124.059-.149.001z"/><path fill="#BE1931" d="M30.53 27.396c-.13-.104-.427-.155-.613-.173-.129-.013-.464-.023-.746-.007-.127.007-.272.023-.331.04-.185.054-.266.131-.31.185-.053.065-.058.134-.046.169.049.143.284.39.386.625.034.078.054.155.047.226-.025.258-.354.633-.6.911-.148.167-.266.299-.271.35-.005.055.01.102.035.148v.002c.067.123.214.251.314.587.065.217.369 1.205.369 1.205.073.252.17.313.211.449.085.277.235 1.021.309 1.256.074.235.253.336.39.355.138.019.217-.013.217-.013s.322-.145.535-1.352c.154-.872.018-1.007-.098-2.317-.114-1.312.202-2.646.202-2.646z"/><path fill="#DD2E44" d="M30.261 29.344c-.219-.09-.72-.42-.86-.775-.127-.321-.213-1.188-.229-1.353.269-.024.682-.006.815.006.175.017.377.031.498.134l.046.04c-.001 0-.215 1.376-.27 1.948z"/><path fill="#CCD6DD" d="M28.337 30.337c-.075 0-.146-.042-.181-.115-.048-.1-.005-.219.095-.266l.319-.151c.104-.048.22-.004.267.095.047.1.005.219-.095.266l-.319.151c-.028.014-.058.02-.086.02zm.204.584c-.085 0-.163-.054-.19-.139-.034-.105.024-.218.13-.251l.354-.113c.1-.035.217.024.251.13.034.105-.024.218-.13.251l-.354.113c-.02.006-.04.009-.061.009zm.172.595c-.094 0-.177-.065-.196-.16-.021-.108.048-.214.156-.236l.332-.068c.114-.023.214.048.236.156.021.108-.048.214-.156.236l-.332.068c-.014.002-.027.004-.04.004zm2.59-3.873c-.006-.027-.025-.128-.095-.252-.023-.042-.077-.055-.131-.061-.067-.009-.56-.08-.569.02 0 0-.002.148-.072.25-.07.102-.118.352-.136.539-.018.186-.098.887-.08 1.379.018.492.17 1.383.178 1.68.007.297 0 .759-.063 1.101-.063.342-.131.646-.183.834-.067.242-.157.439-.26.578 0 0 .389-.026.687-.602.235-.454.367-.891.416-1.317.004-.032.105-1.168.154-1.736.035-.415.095-1.078.095-1.078.075-.786.093-1.185.059-1.335z"/><path fill="#8899A6" d="M11.438 32.516l.246-.246c.041-.034.102-.027.134.017.098.138.332.406.421.497-.243-.03-.618-.036-.757-.125-.054-.035-.093-.103-.044-.143z"/><path fill="#BE1931" d="M14.401 34.162c.063-.154.027-.453-.008-.637-.025-.127-.11-.452-.205-.717-.043-.119-.099-.254-.132-.306-.104-.162-.201-.217-.266-.244-.077-.033-.145-.018-.175.004-.123.088-.294.383-.489.548-.065.055-.133.095-.204.109-.254.049-.707-.159-1.044-.317-.202-.094-.362-.17-.412-.16-.054.011-.095.038-.132.075l-.002.001h.001c-.099.099-.18.277-.474.468-.189.123-1.051.696-1.051.696-.221.141-.252.252-.37.33-.242.16-.912.515-1.117.653-.204.138-.251.338-.23.475s.074.204.074.204.23.268 1.448.129c.88-.1.97-.269 2.194-.752s2.594-.559 2.594-.559z"/><path fill="#DD2E44" d="M12.457 34.457c.024-.236.198-.809.499-1.045.271-.212 1.079-.542 1.232-.604.1.251.2.652.225.783.033.173.078.37.013.516l-.025.056c0-.001-1.38.184-1.944.294z"/><path fill="#CCD6DD" d="M11.385 33.301c-.055 0-.109-.022-.149-.067L11 32.971c-.073-.082-.066-.209.016-.282.083-.073.207-.067.283.016l.235.263c.073.082.066.209-.016.282-.039.034-.085.051-.133.051zm-.529.406c-.063 0-.127-.031-.165-.088l-.209-.308c-.062-.092-.039-.216.053-.278.089-.061.216-.039.277.053l.209.308c.062.092.039.216-.053.278-.033.024-.072.035-.112.035zm-.57.325c-.071 0-.141-.038-.177-.106l-.159-.299c-.052-.098-.015-.219.083-.271.094-.052.218-.016.271.083l.159.299c.052.098.015.219-.083.271-.029.016-.062.023-.094.023zm4.098.941c.024-.013.116-.06.215-.162.033-.034.031-.089.022-.143-.011-.067-.083-.559-.181-.54 0 0-.143.04-.26.002-.117-.038-.371-.013-.555.022-.184.036-.878.158-1.345.315-.467.157-1.277.556-1.56.648-.283.091-.728.215-1.074.252-.346.037-.657.058-.851.062-.251.004-.466-.025-.628-.085 0 0 .136.366.772.488.502.097.959.099 1.381.025.032-.006 1.15-.231 1.708-.346.408-.084 1.06-.215 1.06-.215.774-.151 1.162-.247 1.296-.323z"/><path fill="#A0041E" d="M13.084 21.466c.738-.382 3.176-1.588 4.842-1.76.152-.016 1.526 3.904 1.341 3.963-.763.246-2.681.897-4.134 1.668-.154.082-.338.044-.433-.09-.431-.605-1.549-2.257-1.798-3.436-.029-.138.048-.276.182-.345z"/><path fill="#BE1931" d="M17.882 25.364c-.196-.795-.794-3.411-.586-5.049.019-.15 3.69-.685 3.69-.685.175-.021.6 3.084 1.005 4.655.043.166-.033.334-.181.395-.667.275-2.474.969-3.643.937-.136-.004-.249-.11-.285-.253z"/><path fill="#7C533E" d="M14.801 11.245c-.114.64.259 1.431 1.738 1.741 1.479.31 2.554.273 3.324.218.653-.047.563.952.711 1.998.148 1.05.241 2.419.182 2.633-.1.361-.722.479-.439 1.123.283.643.329.995.942.79.613-.205 1.222-.427 1.396-.759.174-.332-.43-1.065-.439-1.463-.007-.294.293-3.972.275-4.405-.022-.528-.035-1.251-.884-1.582-.849-.331-4.108-1.174-4.972-1.342-.912-.177-1.683.199-1.834 1.048z"/><path fill="#7C533E" d="M16.495 6.612c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.482-.768-2.424-.742-3.475z"/><path fill="#0B0200" d="M21.903 2.733c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.798C15.507.515 14.712.2 13.961.285 9.384.801 9.632 4.111 9.98 4.421c.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.222.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.738-1.283 1.187-2.272 1.176z"/><path fill="#DD2E44" d="M19.624 10.939c-.728-1.703-1.783-2.597-3.229-2.114-1.285.43-1.922 1.151-2.301 1.96-.184.393-.901 1.933-.466 2.933.851 1.956 2.243 5.863 2.488 7.059 0 0 .322.326 2.403.064 1.823-.23 2.732-.404 2.732-.404-.277-2.594-.452-6.747-1.627-9.498z"/><path fill="#7C533E" d="M17.202 11.067c-.577-.372-1.499-.331-2.404.983-.905 1.314-1.308 2.376-1.568 3.148-.221.655-1.157.16-2.236-.122-1.083-.284-2.455-.752-2.639-.897-.311-.245-.172-.898-.914-.886-.742.013-1.103-.086-1.153.595-.05.681-.083 1.364.17 1.669.253.305 1.212.016 1.604.169.289.113 3.749 1.905 4.178 2.064.524.194 1.233.476 1.901-.216.668-.692 2.819-3.522 3.335-4.296.543-.814.491-1.718-.274-2.211z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f3c3-1f3ff-200d-2642-fe0f.svg index 8eb95e256..818897772 100644 --- a/public/emoji/1f3c3-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f3c3-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#7C533E" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#0B0200" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#7C533E" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#7C533E" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#7C533E" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#7C533E" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#0B0200" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#7C533E" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-1f3ff.svg b/public/emoji/1f3c3-1f3ff.svg index 8eb95e256..818897772 100644 --- a/public/emoji/1f3c3-1f3ff.svg +++ b/public/emoji/1f3c3-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#7C533E" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#0B0200" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#7C533E" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#7C533E" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#7C533E" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#7C533E" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#0B0200" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#7C533E" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-200d-2640-fe0f.svg b/public/emoji/1f3c3-200d-2640-fe0f.svg index 07fcfb931..9acdb7a73 100644 --- a/public/emoji/1f3c3-200d-2640-fe0f.svg +++ b/public/emoji/1f3c3-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#FFDC5D" d="M19.822 5.072c-.059-2.302-1.974-4.12-4.275-4.06-2.302.059-4.119 1.973-4.06 4.275.059 2.302 1.973 4.119 4.275 4.06.211-.005.412-.042.613-.078.061.238.091.539.047.958-.207 1.94 2.472 2.616 2.677.672.116-1.101-.345-1.915-.606-2.688.839-.786 1.361-1.901 1.329-3.139z"/><path fill="#FFAC33" d="M24.144 5.997c-1.085-.054-2.134-.177-3.928-2.487-1.192-1.536-2.305-2.522-5.061-2.496-2.925.027-5.375 2.516-3.498 3.761.819.543 1.505.285 2.821.654 2.065.578 2.378 2.775 4.244 3.268 3.651.965 6.507-2.647 5.422-2.7z"/><path fill="#FFDC5D" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#9268CA" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#FFDC5D" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M13.483 21.579c-.58.32-2.256 1.279-3.282 2.204-.596.537-.518.928-.329 1.871l.017.085c.186.932 2.106 7.039 2.483 8.232l1.168-.291c.014-.621.043-2.801-.18-4.205-.074-.47-.149-1.036-.217-1.549-.07-.532-.138-1.035-.184-1.273-.077-.396.05-.65.411-.825.772-.374 1.437-.671 1.764-.814l-1.651-3.435zm10.673 5.408c-.533-.065-1.037-.128-1.278-.143-.403-.025-.618-.212-.695-.606-.168-.842-.288-1.56-.345-1.912l-3.74.733c.164.643.671 2.505 1.308 3.732.369.711.767.734 1.726.789l.088.005c.95.057 7.342-.266 8.593-.33l.013-1.205c-.597-.169-2.699-.746-4.114-.885-.476-.044-1.042-.114-1.556-.178z"/><path fill="#8899A6" d="M28.11 29.77l-.166-.306c-.021-.049.003-.106.054-.123.16-.055.483-.203.596-.262-.098.224-.21.582-.335.69-.048.041-.124.059-.149.001z"/><path fill="#BE1931" d="M30.53 27.396c-.13-.104-.427-.155-.613-.173-.129-.013-.464-.023-.746-.007-.127.007-.272.023-.331.04-.185.054-.266.131-.31.185-.053.065-.058.134-.046.169.049.143.284.39.386.625.034.078.054.155.047.226-.025.258-.354.633-.6.911-.148.167-.266.299-.271.35-.005.055.01.102.035.148v.002c.067.123.214.251.314.587.065.217.369 1.205.369 1.205.073.252.17.313.211.449.085.277.235 1.021.309 1.256.074.235.253.336.39.355.138.019.217-.013.217-.013s.322-.145.535-1.352c.154-.872.018-1.007-.098-2.317-.114-1.312.202-2.646.202-2.646z"/><path fill="#DD2E44" d="M30.261 29.344c-.219-.09-.72-.42-.86-.775-.127-.321-.213-1.188-.229-1.353.269-.024.682-.006.815.006.175.017.377.031.498.134l.046.04c-.001 0-.215 1.376-.27 1.948z"/><path fill="#CCD6DD" d="M28.337 30.337c-.075 0-.146-.042-.181-.115-.048-.1-.005-.219.095-.266l.319-.151c.104-.048.22-.004.267.095.047.1.005.219-.095.266l-.319.151c-.028.014-.058.02-.086.02zm.204.584c-.085 0-.163-.054-.19-.139-.034-.105.024-.218.13-.251l.354-.113c.1-.035.217.024.251.13.034.105-.024.218-.13.251l-.354.113c-.02.006-.04.009-.061.009zm.172.595c-.094 0-.177-.065-.196-.16-.021-.108.048-.214.156-.236l.332-.068c.114-.023.214.048.236.156.021.108-.048.214-.156.236l-.332.068c-.014.002-.027.004-.04.004zm2.59-3.873c-.006-.027-.025-.128-.095-.252-.023-.042-.077-.055-.131-.061-.067-.009-.56-.08-.569.02 0 0-.002.148-.072.25-.07.102-.118.352-.136.539-.018.186-.098.887-.08 1.379.018.492.17 1.383.178 1.68.007.297 0 .759-.063 1.101-.063.342-.131.646-.183.834-.067.242-.157.439-.26.578 0 0 .389-.026.687-.602.235-.454.367-.891.416-1.317.004-.032.105-1.168.154-1.736.035-.415.095-1.078.095-1.078.075-.786.093-1.185.059-1.335z"/><path fill="#8899A6" d="M11.438 32.516l.246-.246c.041-.034.102-.027.134.017.098.138.332.406.421.497-.243-.03-.618-.036-.757-.125-.054-.035-.093-.103-.044-.143z"/><path fill="#BE1931" d="M14.401 34.162c.063-.154.027-.453-.008-.637-.025-.127-.11-.452-.205-.717-.043-.119-.099-.254-.132-.306-.104-.162-.201-.217-.266-.244-.077-.033-.145-.018-.175.004-.123.088-.294.383-.489.548-.065.055-.133.095-.204.109-.254.049-.707-.159-1.044-.317-.202-.094-.362-.17-.412-.16-.054.011-.095.038-.132.075l-.002.001h.001c-.099.099-.18.277-.474.468-.189.123-1.051.696-1.051.696-.221.141-.252.252-.37.33-.242.16-.912.515-1.117.653-.204.138-.251.338-.23.475s.074.204.074.204.23.268 1.448.129c.88-.1.97-.269 2.194-.752s2.594-.559 2.594-.559z"/><path fill="#DD2E44" d="M12.457 34.457c.024-.236.198-.809.499-1.045.271-.212 1.079-.542 1.232-.604.1.251.2.652.225.783.033.173.078.37.013.516l-.025.056c0-.001-1.38.184-1.944.294z"/><path fill="#CCD6DD" d="M11.385 33.301c-.055 0-.109-.022-.149-.067L11 32.971c-.073-.082-.066-.209.016-.282.083-.073.207-.067.283.016l.235.263c.073.082.066.209-.016.282-.039.034-.085.051-.133.051zm-.529.406c-.063 0-.127-.031-.165-.088l-.209-.308c-.062-.092-.039-.216.053-.278.089-.061.216-.039.277.053l.209.308c.062.092.039.216-.053.278-.033.024-.072.035-.112.035zm-.57.325c-.071 0-.141-.038-.177-.106l-.159-.299c-.052-.098-.015-.219.083-.271.094-.052.218-.016.271.083l.159.299c.052.098.015.219-.083.271-.029.016-.062.023-.094.023zm4.098.941c.024-.013.116-.06.215-.162.033-.034.031-.089.022-.143-.011-.067-.083-.559-.181-.54 0 0-.143.04-.26.002-.117-.038-.371-.013-.555.022-.184.036-.878.158-1.345.315-.467.157-1.277.556-1.56.648-.283.091-.728.215-1.074.252-.346.037-.657.058-.851.062-.251.004-.466-.025-.628-.085 0 0 .136.366.772.488.502.097.959.099 1.381.025.032-.006 1.15-.231 1.708-.346.408-.084 1.06-.215 1.06-.215.774-.151 1.162-.247 1.296-.323z"/><path fill="#A0041E" d="M13.084 21.466c.738-.382 3.176-1.588 4.842-1.76.152-.016 1.526 3.904 1.341 3.963-.763.246-2.681.897-4.134 1.668-.154.082-.338.044-.433-.09-.431-.605-1.549-2.257-1.798-3.436-.029-.138.048-.276.182-.345z"/><path fill="#BE1931" d="M17.882 25.364c-.196-.795-.794-3.411-.586-5.049.019-.15 3.69-.685 3.69-.685.175-.021.6 3.084 1.005 4.655.043.166-.033.334-.181.395-.667.275-2.474.969-3.643.937-.136-.004-.249-.11-.285-.253z"/><path fill="#FFDC5D" d="M14.801 11.245c-.114.64.259 1.431 1.738 1.741 1.479.31 2.554.273 3.324.218.653-.047.563.952.711 1.998.148 1.05.241 2.419.182 2.633-.1.361-.722.479-.439 1.123.283.643.329.995.942.79.613-.205 1.222-.427 1.396-.759.174-.332-.43-1.065-.439-1.463-.007-.294.293-3.972.275-4.405-.022-.528-.035-1.251-.884-1.582-.849-.331-4.108-1.174-4.972-1.342-.912-.177-1.683.199-1.834 1.048z"/><path fill="#FFDC5D" d="M16.495 6.612c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.482-.768-2.424-.742-3.475z"/><path fill="#FFAC33" d="M21.903 2.733c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.798C15.507.515 14.712.2 13.961.285 9.384.801 9.632 4.111 9.98 4.421c.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.222.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.738-1.283 1.187-2.272 1.176z"/><path fill="#DD2E44" d="M19.624 10.939c-.728-1.703-1.783-2.597-3.229-2.114-1.285.43-1.922 1.151-2.301 1.96-.184.393-.901 1.933-.466 2.933.851 1.956 2.243 5.863 2.488 7.059 0 0 .322.326 2.403.064 1.823-.23 2.732-.404 2.732-.404-.277-2.594-.452-6.747-1.627-9.498z"/><path fill="#FFDC5D" d="M17.202 11.067c-.577-.372-1.499-.331-2.404.983-.905 1.314-1.308 2.376-1.568 3.148-.221.655-1.157.16-2.236-.122-1.083-.284-2.455-.752-2.639-.897-.311-.245-.172-.898-.914-.886-.742.013-1.103-.086-1.153.595-.05.681-.083 1.364.17 1.669.253.305 1.212.016 1.604.169.289.113 3.749 1.905 4.178 2.064.524.194 1.233.476 1.901-.216.668-.692 2.819-3.522 3.335-4.296.543-.814.491-1.718-.274-2.211z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3-200d-2642-fe0f.svg b/public/emoji/1f3c3-200d-2642-fe0f.svg index 3c090f378..42bc60109 100644 --- a/public/emoji/1f3c3-200d-2642-fe0f.svg +++ b/public/emoji/1f3c3-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#FFDC5D" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#FFAC33" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#FFDC5D" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#FFDC5D" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#FFDC5D" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#FFDC5D" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#FFAC33" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#FFDC5D" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c3.svg b/public/emoji/1f3c3.svg index 3c090f378..42bc60109 100644 --- a/public/emoji/1f3c3.svg +++ b/public/emoji/1f3c3.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2A6797" d="M12.002 34.001c-.182 0-.367-.025-.55-.078-1.062-.304-1.677-1.41-1.374-2.473l2-7c.124-.435.392-.814.76-1.077l7-5c.896-.642 2.147-.435 2.789.465.642.898.434 2.147-.465 2.789l-6.431 4.595-1.808 6.328c-.251.878-1.051 1.45-1.921 1.451z"/><path fill="#4289C1" d="M26.998 31c-.3 0-.605-.067-.892-.211l-6-3C19.428 27.45 19 26.758 19 26v-5c0-1.104.896-2 2-2s2 .896 2 2v3.764l4.895 2.447c.988.494 1.389 1.695.895 2.684-.352.701-1.058 1.105-1.792 1.105z"/><path fill="#292F33" d="M29.395 28.257c.103-.369-.192-.668-.574-.756-.611-.141-.867-.17-.867-.17-.305-.022-.965.064-1.064.414-.717 2.543-.657 5.569-.246 6.404.242.493.981.429 1.128-.095l1.623-5.797zm-16.697 6.819c.362.125.678-.152.789-.528.177-.601.221-.856.221-.856.04-.303-.007-.967-.35-1.087-2.496-.867-5.52-.986-6.378-.626-.506.213-.486.954.027 1.131l5.691 1.966z"/><path fill="#FFDC5D" d="M18.329 7.294c.321-.415.567-.904.685-1.509.424-2.16-.824-4.224-2.788-4.609-1.964-.386-4.649 1.068-4.589 3.268.06 2.185 1.274 5.408 3.104 4.864.483-.143.966-.301 1.426-.491.196.232.335.648.255 1.409-.207 1.94 2.472 2.616 2.677.672.162-1.537-.797-2.513-.77-3.604z"/><path fill="#FFAC33" d="M12.517 1.678c2.67-1.637 4.456-1.352 5.937-.147 1.471 1.196 1.524 3.438 1.101 4.863-.423 1.425-.838 1.343-.838 1.343s-1.977.433-2.109-1.399c-.042-.579.605-.886-.089-1.741-.446-.55-1.452-.285-1.463.503-.011.788-.412.637-.412.637l-1.168-2.096s-1.021-.067-1.596.866c-.362.586-1.695-1.399.637-2.829z"/><path fill="#FFDC5D" d="M27.001 18c-.367 0-.72-.202-.896-.553-1.788-3.576-7.366-5.481-7.423-5.5-.523-.175-.806-.742-.63-1.265.174-.523.735-.809 1.264-.632.261.087 6.418 2.181 8.578 6.502.247.494.047 1.095-.447 1.342-.143.072-.296.106-.446.106z"/><path fill="#77B255" d="M21.149 10.657c-.89-1.522-2.123-2.212-3.398-1.564-3.992 2.029-1.881 5.138.259 11.373 0 0 1 .927 3.358.296 1.659-.444 2.691.706 2.976.398.285-.309-1.053-6.839-3.195-10.503z"/><path fill="#FFDC5D" d="M16.143 12.485c-.028.046-2.825 4.631-7.339 5.534l.004.02C8.351 18.131 8 18.516 8 19c0 .553.448 1 1 1 .068 0 .128-.025.192-.039l.004.02c5.372-1.074 8.529-6.246 8.661-6.466l-1.714-1.03z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M15.087 24.856l-1.728-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944l.017.085c.189.952 2.205 7.351 2.47 8.187l1.345-.334c.011-.446.057-2.767-.176-4.233-.073-.463-.147-1.025-.214-1.522-.071-.543-.134-1.012-.18-1.248-.064-.334.033-.53.337-.677.862-.416 1.586-.735 1.839-.846zm8.721 1.817c-.546-.067-1.019-.126-1.258-.141-.339-.021-.504-.165-.57-.496-.188-.939-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838l.087.005c.975.057 7.669-.284 8.545-.329l.015-1.385c-.43-.124-2.663-.752-4.142-.896-.465-.045-1.026-.115-1.521-.176z"/><path fill="#8899A6" d="M27.805 29.682l-.178-.328c-.022-.053.004-.113.058-.132.171-.059.518-.217.639-.281-.105.24-.225.624-.359.74-.052.043-.134.063-.16.001z"/><path fill="#1C6399" d="M30.398 27.138c-.139-.111-.457-.166-.657-.185-.138-.013-.498-.024-.799-.008-.136.008-.291.024-.355.043-.198.057-.285.141-.332.198-.057.069-.062.144-.049.181.052.153.304.418.414.67.037.084.058.166.05.243-.027.276-.379.678-.643.976-.158.179-.285.32-.29.375-.006.059.011.109.037.158v.002c.072.132.229.269.337.629.069.232.395 1.291.395 1.291.078.27.182.336.226.481.091.297.251 1.094.331 1.346.08.252.271.36.418.381s.232-.014.232-.014.345-.155.574-1.449c.165-.935.019-1.079-.105-2.483s.216-2.835.216-2.835z"/><path fill="#3B94D9" d="M30.109 29.226c-.235-.096-.771-.45-.922-.831-.136-.344-.229-1.273-.246-1.449.288-.026.731-.007.873.007.188.018.404.033.534.143l.05.043c0-.001-.229 1.473-.289 2.087z"/><path fill="#CCD6DD" d="M28.048 30.27c-.073 0-.142-.041-.175-.111-.046-.097-.005-.213.092-.258l.342-.162c.097-.046.212-.005.259.092.046.097.005.213-.092.258l-.342.162c-.028.013-.056.019-.084.019zm.218.625c-.082 0-.158-.053-.185-.135-.032-.102.024-.211.126-.244l.38-.121c.097-.033.21.023.243.126.032.102-.024.211-.126.244l-.38.121c-.018.007-.038.009-.058.009zm.184.637c-.091 0-.171-.063-.19-.155-.021-.105.046-.207.152-.229l.356-.072c.111-.023.207.047.229.152.021.105-.046.207-.152.229l-.356.072-.039.003zm2.776-4.13c-.006-.028-.027-.137-.101-.27-.025-.045-.082-.059-.14-.066-.072-.009-.6-.085-.61.022 0 0-.003.159-.077.268-.075.109-.127.377-.146.577-.019.199-.105.951-.085 1.478.02.528.183 1.482.19 1.8.008.318 0 .814-.068 1.18s-.14.692-.196.893c-.072.259-.168.471-.279.619 0 0 .417-.028.736-.645.252-.487.393-.955.446-1.411.004-.035.113-1.252.165-1.86.038-.445.102-1.155.102-1.155.081-.841.1-1.269.063-1.43z"/><path fill="#8899A6" d="M11.211 32.283l.269-.259c.045-.036.11-.027.143.021.102.149.348.441.441.541-.26-.037-.661-.051-.809-.149-.056-.038-.096-.112-.044-.154z"/><path fill="#1C6399" d="M14.355 34.104c.07-.163.038-.485.003-.683-.024-.136-.109-.486-.206-.772-.043-.129-.101-.274-.136-.33-.108-.176-.212-.237-.28-.267-.082-.036-.155-.022-.188.001-.134.091-.322.405-.535.578-.071.058-.144.1-.22.113-.273.048-.755-.184-1.112-.359-.214-.105-.385-.189-.438-.18-.059.01-.102.039-.143.078l-.002.001h.001c-.108.104-.199.293-.516.492-.206.128-1.14.724-1.14.724-.24.147-.275.265-.403.346-.262.167-.987.534-1.209.678-.222.144-.275.357-.255.505.02.148.076.22.076.22s.242.291 1.549.166c.945-.09 1.045-.269 2.365-.763 1.32-.493 2.789-.548 2.789-.548z"/><path fill="#3B94D9" d="M12.266 34.382c.03-.252.228-.863.555-1.11.295-.222 1.166-.56 1.331-.624.102.271.202.703.226.843.033.186.076.398.004.553l-.028.059c.001.001-1.481.173-2.088.279z"/><path fill="#CCD6DD" d="M11.144 33.103c-.054 0-.109-.023-.147-.067l-.247-.287c-.07-.081-.061-.204.02-.274.081-.07.205-.061.274.02l.247.287c.07.081.061.204-.02.274-.038.032-.083.047-.127.047zm-.575.425c-.063 0-.125-.031-.163-.088l-.218-.334c-.058-.09-.033-.21.057-.269.09-.058.209-.034.269.056l.218.334c.058.09.033.21-.057.269-.033.022-.069.032-.106.032zm-.617.337c-.07 0-.138-.039-.173-.106l-.165-.324c-.048-.095-.01-.212.085-.261.095-.049.211-.011.261.085l.165.324c.048.096.01.212-.085.261-.028.015-.059.021-.088.021zm4.369 1.108c.026-.014.125-.062.234-.17.036-.036.035-.095.026-.153-.01-.072-.078-.601-.184-.582 0 0-.154.04-.279-.003-.125-.043-.398-.021-.595.013-.197.035-.944.152-1.447.312-.503.16-1.379.571-1.684.664-.305.092-.784.217-1.156.249-.371.032-.705.05-.913.049-.269 0-.498-.036-.671-.103 0 0 .138.394.818.537.537.113 1.025.124 1.479.053.034-.005 1.237-.225 1.836-.337.439-.082 1.14-.21 1.14-.21.833-.146 1.25-.241 1.396-.319z"/><path fill="#1C6399" d="M12.654 21.244c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M17.514 25.488c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.125.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.007-.276-.118-.312-.268z"/><path fill="#FFDC5D" d="M15.015 10.618c-.085.612.05 1.546 1.466 1.787 1.416.241 2.812.059 3.411-.108.599-.167.569.884.747 1.872.179.992.301 1.768.252 1.973-.082.347-.809 1.011-.517 1.612s.757 1.179 1.332.962c.575-.217 1.05-.475 1.203-.797s-.525-1.295-.552-1.574c-.027-.278.227-3.888.194-4.298-.04-.501-.078-1.187-.896-1.47-.818-.284-4.094-.92-4.915-1.079-.942-.185-1.612.309-1.725 1.12z"/><path fill="#FFDC5D" d="M16.217 6.241c.285-.396.498-.858.589-1.424.326-2.021-.9-3.9-2.738-4.196-1.838-.296-4.287 1.14-4.162 3.184.125 2.029 1.356 4.986 3.04 4.423.444-.149.889-.311 1.31-.502.19.209.349 1.031.298 1.742-.131 1.81 2.363 1.913 2.492.1.104-1.435-.819-2.312-.829-3.327z"/><path fill="#FFAC33" d="M10.637 1.206C13.067-.4 14.736-.192 16.151.88c1.405 1.065 1.526 3.148 1.178 4.485-.348 1.338-.736 1.275-.736 1.275s-1.824.465-2.005-1.233c-.057-.537.534-.843-.138-1.615-.432-.497-1.358-.219-1.344.514.015.732-.363.605-.363.605l-1.153-1.91s-.951-.03-1.456.856c-.317.555-1.62-1.248.503-2.651z"/><path fill="#4289C1" d="M19.459 10.057c-.77-1.644-1.984-2.479-3.384-1.957-4.381 1.635-2.36 5.68-.781 12.252 0 0 3.109.449 6.316.36 0 .001-.298-6.698-2.151-10.655z"/><path fill="#FFDC5D" d="M16.94 10.268c-.577-.345-1.571-.605-2.413.712s-1.251 2.794-1.338 3.466c-.087.672-1.127.196-2.194-.045-1.07-.242-2.429-.654-2.614-.79-.313-.229-.199-.874-.925-.837s-1.083-.047-1.11.622c-.026.669-.035 1.339.222 1.629.258.29 1.127.04 1.516.177.287.101 3.803 1.876 4.228 2.017.519.172 1.223.425 1.854-.275s2.658-3.714 3.167-4.47c.584-.867.373-1.748-.393-2.206z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f3c4-1f3fb-200d-2640-fe0f.svg index 755e4ab57..c5f308193 100644 --- a/public/emoji/1f3c4-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f3c4-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#E0245E" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#F7DECE" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#F7DECE" d="M14.656.74c-1.684-.634-4.281.255-4.555 2.215-.272 1.947.326 4.985 2.029 4.775 1.786-.22 3.615-.636 4.312-2.489.697-1.851-.102-3.867-1.786-4.501z"/><path fill="#F7DECE" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#292F33" d="M16.578 1.387C16.087.83 15.513.43 14.816.225c-.914-.268-2.022-.133-3.525.409-1.381.499-1.63 2.049-1.29 2.396.039.019.065.057.108.07.027.008.052.005.079.011.588.13 1.129-.284 1.804-.194.315.042.657.186 1.052.571.061.059.101.149.134.248.162.489.038 1.336.038 1.336s.272-.934.39-1.256c.11-.3.513-.569.799.001.248.495-.151 1.222-.422 1.235-.209.01-.029.565.352 1.057.5.645 1.086.786 1.374.815.112.011.534.139 1.122-1.061.588-1.2.874-3.197-.253-4.476z"/><path fill="#292F33" d="M21.434 4.53c-1.209-.351-1.959-1.902-3.429-1.454-1.783.543-1.261 1.789-1.261 1.789s.443 1.264 1.783 1.648c.858.246 2.544.243 3.736-.577.917-.631 1.578-1.909 1.578-1.909-.557.58-1.494.767-2.407.503z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F7DECE" d="M27.755 12.233c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111zm-4.883 2.645c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.481 2.579-.972 2.282 1.869-1.09 2.899.514 3.697 2.269.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#F7DECE" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.365-1.001-.365-1.001H13.27c.043.214-.037.696-.134 1.197-.062.322-.114.892-.013 1.093.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.255-.428-.726-.807-.826zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-1.609.22c.05.183-.027.417-.008.793.017.335-.058.748.042.917.099.169.601.571 1.027.629 1.088.148 2.141-.443 2.264-.604.176-.235-.416-.605-.75-.67z"/><path fill="#292F33" d="M16.188 2.219c.875-1.312 2.774-1.438 3.637-.469S21.01 4 22.163 4c.368 0 .552.344-.212.688S18.062 5.719 16.875 3.5c-.531-.656-.687-1.281-.687-1.281zm6.589 20.022c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438-.302-1.896.242-2.896.235-3.716-.006-.684-.433-2.648-1.006-3.315h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.376.639.23 2.285 0 2.841.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423 1.412 0 1.981-.39 1.981-.39s-.278-.638-.165-1.577c.069-.572.351-1.455.351-2.304 0-.849-.022-1.461.104-1.812s.52-1.576.812-2.704c.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.893-.133 1.739-.528 1.739-.528s-.096-1.267-.077-1.847z"/><path fill="#67757F" d="M12.375 8.594l.904-.086s1.202 1.373 2.096 1.274c.894-.099.841-1.354.841-1.354h1.269c-.085-.168-.173-.319-.266-.428h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.077.131.128.311.165.509.346-.118.973-.282 1.211-.318zm8.667 13.854c-.06-.958.01-1.583.01-1.583s-.151-.141-.376-.335c-.068-.059-.186-.136-.326-.218l.139.126s-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.158-.024.313-.057.464-.093-.175-.763-.492-1.357-.537-2.076zm-8.061 1.701c-.303-1.149.2-2.898.2-2.898 0-.435-.798-2.791-.452-4.793 4-.021 5.26-1.427 5.26-1.427s-2.719 1.26-5.201.533c-.074-1.788-.788-3.661-1.707-4.579-.025.1-.053.188-.082.258.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423.178 0 .342-.006.494-.017-.129-.672-.421-1.766-.741-2.978z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f3c4-1f3fb-200d-2642-fe0f.svg index 75d69eec7..e396618ff 100644 --- a/public/emoji/1f3c4-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f3c4-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#F7DECE" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#F7DECE" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#F7DECE" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#292F33" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F7DECE" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#292F33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#F7DECE" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fb.svg b/public/emoji/1f3c4-1f3fb.svg index 75d69eec7..e396618ff 100644 --- a/public/emoji/1f3c4-1f3fb.svg +++ b/public/emoji/1f3c4-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#F7DECE" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#F7DECE" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#F7DECE" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#292F33" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F7DECE" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#292F33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#F7DECE" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f3c4-1f3fc-200d-2640-fe0f.svg index dccab63e6..2fcf3c603 100644 --- a/public/emoji/1f3c4-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f3c4-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#E0245E" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#F3D2A2" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#F3D2A2" d="M14.656.74c-1.684-.634-4.281.255-4.555 2.215-.272 1.947.326 4.985 2.029 4.775 1.786-.22 3.615-.636 4.312-2.489.697-1.851-.102-3.867-1.786-4.501z"/><path fill="#F3D2A2" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#FFE51E" d="M16.578 1.387C16.087.83 15.513.43 14.816.225c-.914-.268-2.022-.133-3.525.409-1.381.499-1.63 2.049-1.29 2.396.039.019.065.057.108.07.027.008.052.005.079.011.588.13 1.129-.284 1.804-.194.315.042.657.186 1.052.571.061.059.101.149.134.248.162.489.038 1.336.038 1.336s.272-.934.39-1.256c.11-.3.513-.569.799.001.248.495-.151 1.222-.422 1.235-.209.01-.029.565.352 1.057.5.645 1.086.786 1.374.815.112.011.534.139 1.122-1.061.588-1.2.874-3.197-.253-4.476z"/><path fill="#FFE51E" d="M21.434 4.53c-1.209-.351-1.959-1.902-3.429-1.454-1.783.543-1.261 1.789-1.261 1.789s.443 1.264 1.783 1.648c.858.246 2.544.243 3.736-.577.917-.631 1.578-1.909 1.578-1.909-.557.58-1.494.767-2.407.503z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F3D2A2" d="M27.755 12.233c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111zm-4.883 2.645c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#FFE51E" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.481 2.579-.972 2.282 1.869-1.09 2.899.514 3.697 2.269.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#F3D2A2" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.365-1.001-.365-1.001H13.27c.043.214-.037.696-.134 1.197-.062.322-.114.892-.013 1.093.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.255-.428-.726-.807-.826zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-1.609.22c.05.183-.027.417-.008.793.017.335-.058.748.042.917.099.169.601.571 1.027.629 1.088.148 2.141-.443 2.264-.604.176-.235-.416-.605-.75-.67z"/><path fill="#FFE51E" d="M16.188 2.219c.875-1.312 2.774-1.438 3.637-.469S21.01 4 22.163 4c.368 0 .552.344-.212.688S18.062 5.719 16.875 3.5c-.531-.656-.687-1.281-.687-1.281z"/><path fill="#292F33" d="M22.777 22.241c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438-.302-1.896.242-2.896.235-3.716-.006-.684-.433-2.648-1.006-3.315h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.376.639.23 2.285 0 2.841.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423 1.412 0 1.981-.39 1.981-.39s-.278-.638-.165-1.577c.069-.572.351-1.455.351-2.304 0-.849-.022-1.461.104-1.812s.52-1.576.812-2.704c.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.893-.133 1.739-.528 1.739-.528s-.096-1.267-.077-1.847z"/><path fill="#67757F" d="M12.375 8.594l.904-.086s1.202 1.373 2.096 1.274c.894-.099.841-1.354.841-1.354h1.269c-.085-.168-.173-.319-.266-.428h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.077.131.128.311.165.509.346-.118.973-.282 1.211-.318zm8.667 13.854c-.06-.958.01-1.583.01-1.583s-.151-.141-.376-.335c-.068-.059-.186-.136-.326-.218l.139.126s-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.158-.024.313-.057.464-.093-.175-.763-.492-1.357-.537-2.076zm-8.061 1.701c-.303-1.149.2-2.898.2-2.898 0-.435-.798-2.791-.452-4.793 4-.021 5.26-1.427 5.26-1.427s-2.719 1.26-5.201.533c-.074-1.788-.788-3.661-1.707-4.579-.025.1-.053.188-.082.258.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423.178 0 .342-.006.494-.017-.129-.672-.421-1.766-.741-2.978z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f3c4-1f3fc-200d-2642-fe0f.svg index 2545d2cc6..228af26f8 100644 --- a/public/emoji/1f3c4-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f3c4-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#F3D2A2" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#F3D2A2" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#F3D2A2" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#FFE51E" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F3D2A2" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#FFE51E" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#F3D2A2" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fc.svg b/public/emoji/1f3c4-1f3fc.svg index 2545d2cc6..228af26f8 100644 --- a/public/emoji/1f3c4-1f3fc.svg +++ b/public/emoji/1f3c4-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#F3D2A2" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#F3D2A2" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#F3D2A2" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#FFE51E" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F3D2A2" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#FFE51E" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#F3D2A2" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f3c4-1f3fd-200d-2640-fe0f.svg index c975aab73..0d5755549 100644 --- a/public/emoji/1f3c4-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f3c4-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#E0245E" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#D5AB88" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#D5AB88" d="M14.656.74c-1.684-.634-4.281.255-4.555 2.215-.272 1.947.326 4.985 2.029 4.775 1.786-.22 3.615-.636 4.312-2.489.697-1.851-.102-3.867-1.786-4.501z"/><path fill="#D5AB88" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#963B22" d="M16.578 1.387C16.087.83 15.513.43 14.816.225c-.914-.268-2.022-.133-3.525.409-1.381.499-1.63 2.049-1.29 2.396.039.019.065.057.108.07.027.008.052.005.079.011.588.13 1.129-.284 1.804-.194.315.042.657.186 1.052.571.061.059.101.149.134.248.162.489.038 1.336.038 1.336s.272-.934.39-1.256c.11-.3.513-.569.799.001.248.495-.151 1.222-.422 1.235-.209.01-.029.565.352 1.057.5.645 1.086.786 1.374.815.112.011.534.139 1.122-1.061.588-1.2.874-3.197-.253-4.476z"/><path fill="#963B22" d="M21.434 4.53c-1.209-.351-1.959-1.902-3.429-1.454-1.783.543-1.261 1.789-1.261 1.789s.443 1.264 1.783 1.648c.858.246 2.544.243 3.736-.577.917-.631 1.578-1.909 1.578-1.909-.557.58-1.494.767-2.407.503z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#D4AB88" d="M27.755 12.233c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111zm-4.883 2.645c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#963B22" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.481 2.579-.972 2.282 1.869-1.09 2.899.514 3.697 2.269.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#D4AB88" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.365-1.001-.365-1.001H13.27c.043.214-.037.696-.134 1.197-.062.322-.114.892-.013 1.093.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.255-.428-.726-.807-.826zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-1.609.22c.05.183-.027.417-.008.793.017.335-.058.748.042.917.099.169.601.571 1.027.629 1.088.148 2.141-.443 2.264-.604.176-.235-.416-.605-.75-.67z"/><path fill="#963B22" d="M16.188 2.219c.875-1.312 2.774-1.438 3.637-.469S21.01 4 22.163 4c.368 0 .552.344-.212.688S18.062 5.719 16.875 3.5c-.531-.656-.687-1.281-.687-1.281z"/><path fill="#292F33" d="M22.777 22.241c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438-.302-1.896.242-2.896.235-3.716-.006-.684-.433-2.648-1.006-3.315h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.376.639.23 2.285 0 2.841.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423 1.412 0 1.981-.39 1.981-.39s-.278-.638-.165-1.577c.069-.572.351-1.455.351-2.304 0-.849-.022-1.461.104-1.812s.52-1.576.812-2.704c.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.893-.133 1.739-.528 1.739-.528s-.096-1.267-.077-1.847z"/><path fill="#67757F" d="M12.375 8.594l.904-.086s1.202 1.373 2.096 1.274c.894-.099.841-1.354.841-1.354h1.269c-.085-.168-.173-.319-.266-.428h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.077.131.128.311.165.509.346-.118.973-.282 1.211-.318zm8.667 13.854c-.06-.958.01-1.583.01-1.583s-.151-.141-.376-.335c-.068-.059-.186-.136-.326-.218l.139.126s-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.158-.024.313-.057.464-.093-.175-.763-.492-1.357-.537-2.076zm-8.061 1.701c-.303-1.149.2-2.898.2-2.898 0-.435-.798-2.791-.452-4.793 4-.021 5.26-1.427 5.26-1.427s-2.719 1.26-5.201.533c-.074-1.788-.788-3.661-1.707-4.579-.025.1-.053.188-.082.258.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423.178 0 .342-.006.494-.017-.129-.672-.421-1.766-.741-2.978z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f3c4-1f3fd-200d-2642-fe0f.svg index 4beaea0fa..521b554b6 100644 --- a/public/emoji/1f3c4-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f3c4-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#D5AB88" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#D5AB88" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#D5AB88" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#963B22" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#D4AB88" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#963B22" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#D4AB88" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fd.svg b/public/emoji/1f3c4-1f3fd.svg index 4beaea0fa..521b554b6 100644 --- a/public/emoji/1f3c4-1f3fd.svg +++ b/public/emoji/1f3c4-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#D5AB88" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#D5AB88" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#D5AB88" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#963B22" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#D4AB88" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#963B22" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#D4AB88" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f3c4-1f3fe-200d-2640-fe0f.svg index c05e212cf..6372f70a1 100644 --- a/public/emoji/1f3c4-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f3c4-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#E0245E" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#AF7E57" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#AF7E57" d="M14.656.74c-1.684-.634-4.281.255-4.555 2.215-.272 1.947.326 4.985 2.029 4.775 1.786-.22 3.615-.636 4.312-2.489.697-1.851-.102-3.867-1.786-4.501z"/><path fill="#AF7E57" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#60352A" d="M16.578 1.387C16.087.83 15.513.43 14.816.225c-.914-.268-2.022-.133-3.525.409-1.381.499-1.63 2.049-1.29 2.396.039.019.065.057.108.07.027.008.052.005.079.011.588.13 1.129-.284 1.804-.194.315.042.657.186 1.052.571.061.059.101.149.134.248.162.489.038 1.336.038 1.336s.272-.934.39-1.256c.11-.3.513-.569.799.001.248.495-.151 1.222-.422 1.235-.209.01-.029.565.352 1.057.5.645 1.086.786 1.374.815.112.011.534.139 1.122-1.061.588-1.2.874-3.197-.253-4.476z"/><path fill="#60352A" d="M21.434 4.53c-1.209-.351-1.959-1.902-3.429-1.454-1.783.543-1.261 1.789-1.261 1.789s.443 1.264 1.783 1.648c.858.246 2.544.243 3.736-.577.917-.631 1.578-1.909 1.578-1.909-.557.58-1.494.767-2.407.503z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#AF7E57" d="M27.755 12.233c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111zm-4.883 2.645c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#60352A" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.481 2.579-.972 2.282 1.869-1.09 2.899.514 3.697 2.269.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#AF7E57" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.365-1.001-.365-1.001H13.27c.043.214-.037.696-.134 1.197-.062.322-.114.892-.013 1.093.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.255-.428-.726-.807-.826zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-1.609.22c.05.183-.027.417-.008.793.017.335-.058.748.042.917.099.169.601.571 1.027.629 1.088.148 2.141-.443 2.264-.604.176-.235-.416-.605-.75-.67z"/><path fill="#60352A" d="M16.188 2.219c.875-1.312 2.774-1.438 3.637-.469S21.01 4 22.163 4c.368 0 .552.344-.212.688S18.062 5.719 16.875 3.5c-.531-.656-.687-1.281-.687-1.281z"/><path fill="#292F33" d="M22.777 22.241c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438-.302-1.896.242-2.896.235-3.716-.006-.684-.433-2.648-1.006-3.315h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.376.639.23 2.285 0 2.841.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423 1.412 0 1.981-.39 1.981-.39s-.278-.638-.165-1.577c.069-.572.351-1.455.351-2.304 0-.849-.022-1.461.104-1.812s.52-1.576.812-2.704c.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.893-.133 1.739-.528 1.739-.528s-.096-1.267-.077-1.847z"/><path fill="#67757F" d="M12.375 8.594l.904-.086s1.202 1.373 2.096 1.274c.894-.099.841-1.354.841-1.354h1.269c-.085-.168-.173-.319-.266-.428h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.077.131.128.311.165.509.346-.118.973-.282 1.211-.318zm8.667 13.854c-.06-.958.01-1.583.01-1.583s-.151-.141-.376-.335c-.068-.059-.186-.136-.326-.218l.139.126s-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.158-.024.313-.057.464-.093-.175-.763-.492-1.357-.537-2.076zm-8.061 1.701c-.303-1.149.2-2.898.2-2.898 0-.435-.798-2.791-.452-4.793 4-.021 5.26-1.427 5.26-1.427s-2.719 1.26-5.201.533c-.074-1.788-.788-3.661-1.707-4.579-.025.1-.053.188-.082.258.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423.178 0 .342-.006.494-.017-.129-.672-.421-1.766-.741-2.978z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f3c4-1f3fe-200d-2642-fe0f.svg index dda836ca5..147c45aea 100644 --- a/public/emoji/1f3c4-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f3c4-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#AF7E57" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#AF7E57" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#AF7E57" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#60352A" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#AF7E57" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#60352A" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#AF7E57" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3fe.svg b/public/emoji/1f3c4-1f3fe.svg index dda836ca5..147c45aea 100644 --- a/public/emoji/1f3c4-1f3fe.svg +++ b/public/emoji/1f3c4-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#AF7E57" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#AF7E57" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#AF7E57" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#60352A" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#AF7E57" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#60352A" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#AF7E57" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f3c4-1f3ff-200d-2640-fe0f.svg index 4bf28b003..8cb8ad8f9 100644 --- a/public/emoji/1f3c4-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f3c4-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#E0245E" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#7C533E" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#7C533E" d="M14.656.74c-1.684-.634-4.281.255-4.555 2.215-.272 1.947.326 4.985 2.029 4.775 1.786-.22 3.615-.636 4.312-2.489.697-1.851-.102-3.867-1.786-4.501z"/><path fill="#7C533E" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#0B0200" d="M16.578 1.387C16.087.83 15.513.43 14.816.225c-.914-.268-2.022-.133-3.525.409-1.381.499-1.63 2.049-1.29 2.396.039.019.065.057.108.07.027.008.052.005.079.011.588.13 1.129-.284 1.804-.194.315.042.657.186 1.052.571.061.059.101.149.134.248.162.489.038 1.336.038 1.336s.272-.934.39-1.256c.11-.3.513-.569.799.001.248.495-.151 1.222-.422 1.235-.209.01-.029.565.352 1.057.5.645 1.086.786 1.374.815.112.011.534.139 1.122-1.061.588-1.2.874-3.197-.253-4.476z"/><path fill="#0B0200" d="M21.434 4.53c-1.209-.351-1.959-1.902-3.429-1.454-1.783.543-1.261 1.789-1.261 1.789s.443 1.264 1.783 1.648c.858.246 2.544.243 3.736-.577.917-.631 1.578-1.909 1.578-1.909-.557.58-1.494.767-2.407.503z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#7C533E" d="M27.755 12.233c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#7C533E" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111zm-4.883 2.645c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#0B0200" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.481 2.579-.972 2.282 1.869-1.09 2.899.514 3.697 2.269.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#7C533E" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.365-1.001-.365-1.001H13.27c.043.214-.037.696-.134 1.197-.062.322-.114.892-.013 1.093.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.255-.428-.726-.807-.826zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-1.609.22c.05.183-.027.417-.008.793.017.335-.058.748.042.917.099.169.601.571 1.027.629 1.088.148 2.141-.443 2.264-.604.176-.235-.416-.605-.75-.67z"/><path fill="#0B0200" d="M16.188 2.219c.875-1.312 2.774-1.438 3.637-.469S21.01 4 22.163 4c.368 0 .552.344-.212.688S18.062 5.719 16.875 3.5c-.531-.656-.687-1.281-.687-1.281z"/><path fill="#292F33" d="M22.777 22.241c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438-.302-1.896.242-2.896.235-3.716-.006-.684-.433-2.648-1.006-3.315h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.376.639.23 2.285 0 2.841.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423 1.412 0 1.981-.39 1.981-.39s-.278-.638-.165-1.577c.069-.572.351-1.455.351-2.304 0-.849-.022-1.461.104-1.812s.52-1.576.812-2.704c.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.893-.133 1.739-.528 1.739-.528s-.096-1.267-.077-1.847z"/><path fill="#67757F" d="M12.375 8.594l.904-.086s1.202 1.373 2.096 1.274c.894-.099.841-1.354.841-1.354h1.269c-.085-.168-.173-.319-.266-.428h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.077.131.128.311.165.509.346-.118.973-.282 1.211-.318zm8.667 13.854c-.06-.958.01-1.583.01-1.583s-.151-.141-.376-.335c-.068-.059-.186-.136-.326-.218l.139.126s-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.158-.024.313-.057.464-.093-.175-.763-.492-1.357-.537-2.076zm-8.061 1.701c-.303-1.149.2-2.898.2-2.898 0-.435-.798-2.791-.452-4.793 4-.021 5.26-1.427 5.26-1.427s-2.719 1.26-5.201.533c-.074-1.788-.788-3.661-1.707-4.579-.025.1-.053.188-.082.258.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423.178 0 .342-.006.494-.017-.129-.672-.421-1.766-.741-2.978z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f3c4-1f3ff-200d-2642-fe0f.svg index 292c60956..0e0ef2e9a 100644 --- a/public/emoji/1f3c4-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f3c4-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#7C533E" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#7C533E" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#7C533E" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#0B0200" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#7C533E" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#7C533E" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#0B0200" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#7C533E" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-1f3ff.svg b/public/emoji/1f3c4-1f3ff.svg index 292c60956..0e0ef2e9a 100644 --- a/public/emoji/1f3c4-1f3ff.svg +++ b/public/emoji/1f3c4-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#7C533E" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#7C533E" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#7C533E" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#0B0200" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#7C533E" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#7C533E" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#0B0200" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#7C533E" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-200d-2640-fe0f.svg b/public/emoji/1f3c4-200d-2640-fe0f.svg index cfa17057a..c33ecc72f 100644 --- a/public/emoji/1f3c4-200d-2640-fe0f.svg +++ b/public/emoji/1f3c4-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#E0245E" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#FFDC5D" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#FFDC5D" d="M14.656.74c-1.684-.634-4.281.255-4.555 2.215-.272 1.947.326 4.985 2.029 4.775 1.786-.22 3.615-.636 4.312-2.489.697-1.851-.102-3.867-1.786-4.501z"/><path fill="#FFDC5D" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#FFAC33" d="M16.578 1.387C16.087.83 15.513.43 14.816.225c-.914-.268-2.022-.133-3.525.409-1.381.499-1.63 2.049-1.29 2.396.039.019.065.057.108.07.027.008.052.005.079.011.588.13 1.129-.284 1.804-.194.315.042.657.186 1.052.571.061.059.101.149.134.248.162.489.038 1.336.038 1.336s.272-.934.39-1.256c.11-.3.513-.569.799.001.248.495-.151 1.222-.422 1.235-.209.01-.029.565.352 1.057.5.645 1.086.786 1.374.815.112.011.534.139 1.122-1.061.588-1.2.874-3.197-.253-4.476z"/><path fill="#FFAC33" d="M21.434 4.53c-1.209-.351-1.959-1.902-3.429-1.454-1.783.543-1.261 1.789-1.261 1.789s.443 1.264 1.783 1.648c.858.246 2.544.243 3.736-.577.917-.631 1.578-1.909 1.578-1.909-.557.58-1.494.767-2.407.503z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#FFDC5D" d="M27.755 12.233c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111zm-4.883 2.645c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#FFAC33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.481 2.579-.972 2.282 1.869-1.09 2.899.514 3.697 2.269.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#FFDC5D" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.365-1.001-.365-1.001H13.27c.043.214-.037.696-.134 1.197-.062.322-.114.892-.013 1.093.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.255-.428-.726-.807-.826zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-1.609.22c.05.183-.027.417-.008.793.017.335-.058.748.042.917.099.169.601.571 1.027.629 1.088.148 2.141-.443 2.264-.604.176-.235-.416-.605-.75-.67z"/><path fill="#FFAC33" d="M16.188 2.219c.875-1.312 2.774-1.438 3.637-.469S21.01 4 22.163 4c.368 0 .552.344-.212.688S18.062 5.719 16.875 3.5c-.531-.656-.687-1.281-.687-1.281z"/><path fill="#292F33" d="M22.777 22.241c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438-.302-1.896.242-2.896.235-3.716-.006-.684-.433-2.648-1.006-3.315h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.376.639.23 2.285 0 2.841.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423 1.412 0 1.981-.39 1.981-.39s-.278-.638-.165-1.577c.069-.572.351-1.455.351-2.304 0-.849-.022-1.461.104-1.812s.52-1.576.812-2.704c.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.893-.133 1.739-.528 1.739-.528s-.096-1.267-.077-1.847z"/><path fill="#67757F" d="M12.375 8.594l.904-.086s1.202 1.373 2.096 1.274c.894-.099.841-1.354.841-1.354h1.269c-.085-.168-.173-.319-.266-.428h-1.565s.246 1.013-.647 1.112C14.112 9.211 13.56 8 13.56 8l-1.748.167c-.278.043-.549.125-.813.236.077.131.128.311.165.509.346-.118.973-.282 1.211-.318zm8.667 13.854c-.06-.958.01-1.583.01-1.583s-.151-.141-.376-.335c-.068-.059-.186-.136-.326-.218l.139.126s-.07.625-.01 1.583c.055.877.53 1.551.636 2.596.158-.024.313-.057.464-.093-.175-.763-.492-1.357-.537-2.076zm-8.061 1.701c-.303-1.149.2-2.898.2-2.898 0-.435-.798-2.791-.452-4.793 4-.021 5.26-1.427 5.26-1.427s-2.719 1.26-5.201.533c-.074-1.788-.788-3.661-1.707-4.579-.025.1-.053.188-.082.258.823 1.188 1.536 3.003 1.146 5.256-.346 2.002.473 3.889.473 4.324 0 0-.503 1.749-.2 2.898.403 1.529.768 2.884.81 3.423.178 0 .342-.006.494-.017-.129-.672-.421-1.766-.741-2.978z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4-200d-2642-fe0f.svg b/public/emoji/1f3c4-200d-2642-fe0f.svg index a69ddc50e..6da42a5c0 100644 --- a/public/emoji/1f3c4-200d-2642-fe0f.svg +++ b/public/emoji/1f3c4-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#FFDC5D" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#FFDC5D" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#FFDC5D" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#FFAC33" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#FFDC5D" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#FFAC33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#FFDC5D" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c4.svg b/public/emoji/1f3c4.svg index a69ddc50e..6da42a5c0 100644 --- a/public/emoji/1f3c4.svg +++ b/public/emoji/1f3c4.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#A7D28B" d="M30.59 20.432s2.33-2.136 1.924-3.049c-.408-.914-11.676.831-17.154 3.276-8.22 3.669-12.068 9.767-11.253 11.593.815 1.826 7.925 3.033 16.143-.635 5.48-2.445 14.301-9.669 13.895-10.582-.409-.913-3.555-.603-3.555-.603z"/><path fill="#F5F8FA" d="M34.145 21.035c-.408-.913-3.555-.604-3.555-.604s2.204-2.024 1.942-2.973L4.612 29.674c-.569 1.116-.747 2.037-.505 2.578.211.473.849.9 1.812 1.217l28.215-12.345c0-.027.02-.068.011-.089z"/><path fill="#FFDC5D" d="M24.408 15c-3.401 0-6.462-3.95-6.8-4.4-.332-.441-.242-1.067.199-1.399.441-.331 1.066-.244 1.4.198.754 1.002 3.158 3.601 5.2 3.601.553 0 1 .448 1 1s-.446 1-.999 1zm-17 4c-.419 0-.809-.265-.949-.684-1.195-3.584.152-5.934 1.492-7.273 1.401-1.401 3.07-1.968 3.141-1.992.525-.176 1.091.109 1.265.632.174.523-.107 1.088-.629 1.264-.516.176-4.996 1.861-3.371 6.736.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.317.052z"/><path fill="#67757F" d="M25.406 26c-.3 0-.605-.067-.893-.211l-2-1c-.439-.22-.78-.592-.963-1.046l-1.682-4.204-4.204-1.682c-1.025-.41-1.524-1.574-1.114-2.6.41-1.026 1.576-1.525 2.6-1.114l5.001 2c.508.203.91.606 1.114 1.114l1.717 4.294 1.32.66c.988.494 1.389 1.695.895 2.684-.35.701-1.056 1.105-1.791 1.105z"/><path fill="#67757F" d="M16.409 30c-.733.001-1.44-.404-1.791-1.105l-1-2c-.199-.397-.259-.851-.172-1.287l.848-4.241-2.602-4.337c-.568-.947-.261-2.175.686-2.744.946-.569 2.175-.261 2.744.686l3 4.999c.256.427.344.934.246 1.422l-.865 4.327.693 1.386c.494.988.093 2.189-.895 2.684-.286.143-.591.21-.892.21z"/><path fill="#FFDC5D" d="M14.755.763c-1.678-.66-4.294.192-4.598 2.152-.302 1.947.252 5 1.962 4.816 1.793-.194 3.632-.584 4.359-2.43.727-1.846-.045-3.878-1.723-4.538z"/><path fill="#FFDC5D" d="M16.002 5.776c2.442-2.869-3.441-2.589-3.441-2.589-1.113.04-.347 1.895-.871 2.908-.359.701 1.153 1.073 1.153 1.073s.694-.01.732.832v.008c.008.214-.014.469-.114.81-.498 1.686 1.766 2.72 2.264 1.03.197-.669.12-1.257.021-1.799L15.736 8c-.151-.807-.338-1.514.266-2.224z"/><path fill="#67757F" d="M18.408 8h-2.672l-.751.766L13.56 8h-2.152c-1.104 0-2 .896-2 2s.896 2 2 2v3.5c0 1.933 1.567 3.5 3.5 3.5s3.5-1.567 3.5-3.5V12c1.104 0 2-.896 2-2s-.895-2-2-2z"/><path fill="#FFAC33" d="M16.673 1.439C15.556.131 14.019-.412 11.386.606c-2.299.889-1.439 2.865-1.024 2.404.661-.734 1.555-.509 1.555-.509l.695 2.048s.331.199.469-.498c.138-.696 1.072-.768 1.378-.208.476.87-.147 1.037-.204 1.557-.179 1.645 1.643 1.582 1.643 1.582s.355.14.961-1.055c.606-1.192.923-3.189-.186-4.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#FFDC5D" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#FFAC33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#FFDC5D" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3c5.svg b/public/emoji/1f3c5.svg index 1cb697433..a576ba8b9 100644 --- a/public/emoji/1f3c5.svg +++ b/public/emoji/1f3c5.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M28 0H8C5.042 0 2 5 3 7c1.612 3.225 12 13 12 13h6S31 10 33 7c1-2-2.333-7-5-7zm-4 8l-6 6-6-6c-.532-.532-.843-.919-.894-1.206C10.965 6.003 12.862 6 18 6c6.916 0 7.476.375 6.532 1.446-.147.168-.329.351-.532.554z"/><path fill="#3B88C3" d="M11.106 6.794C10.965 6.003 12.862 6 18 6c6.916 0 7.476.375 6.532 1.446C29.866 1.885 28.195 0 26 0H10c-3.579 0-1.01 4.097 1.106 6.794z"/><path fill="#FFAC33" d="M21.902 21.02c.06-.163.098-.337.098-.52 0-.828-.672-1.5-1.5-1.5h-5c-.829 0-1.5.672-1.5 1.5 0 .183.038.357.098.52C11.654 22.389 10 25 10 28c0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8 0-3-1.654-5.611-4.098-6.98z"/><circle fill="#FFD983" cx="18" cy="28" r="6"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M18 8l-7-8H0l14 17 11.521-4.75z"/><path fill="#3B88C3" d="M25 0l-7 8 5.39 7.312 1.227-1.489L36 0z"/><path fill="#FFAC33" d="M23.26 16.026c.08-.217.131-.448.131-.693 0-1.104-.896-2-2-2h-6.667c-1.105 0-2 .896-2 2 0 .245.05.476.131.693-3.258 1.826-5.464 5.307-5.464 9.307C7.391 31.224 12.166 36 18.058 36c5.891 0 10.667-4.776 10.667-10.667-.001-4-2.206-7.481-5.465-9.307z"/><circle fill="#FFD983" cx="18.058" cy="25.333" r="8"/><path fill="#FFAC33" d="M21.278 30.634c-.142 0-.284-.044-.406-.131L18 28.444l-2.871 2.059c-.245.175-.573.175-.816-.003-.243-.176-.345-.489-.255-.774l1.071-3.456-2.845-2.005c-.242-.178-.342-.492-.25-.778.093-.285.358-.479.659-.481l3.524-.005 1.122-3.37c.095-.285.361-.477.662-.477.3 0 .567.192.662.477l1.103 3.37 3.542.005c.301.002.567.196.659.481.093.286-.008.599-.25.778l-2.846 2.005 1.071 3.456c.092.286-.012.598-.254.774-.123.09-.267.134-.41.134z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f3cb-1f3fb-200d-2640-fe0f.svg index 3c1bb3b5b..de38be185 100644 --- a/public/emoji/1f3cb-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f3cb-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.497 3.508c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.183c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#F7DECE" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#292F33" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#DD2E44" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#DD2E44" d="M22 14h-8v10h8V14z"/><path fill="#F7DECE" d="M16.471 12.412v2.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-2.059h-3.058z"/><path fill="#F7DECE" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#292F33" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#DF1F32" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.528 3.81c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.485c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#F7DECE" d="M15.447 34.875h-1.02s-1.384-3.348-1.18-5.736l2.531.549c.56 1.564-.331 5.187-.331 5.187zm4.885 0h1.02s1.384-3.348 1.18-5.736L20 29.688c-.559 1.564.332 5.187.332 5.187z"/><path fill="#DD2E44" d="M13.452 35.149c.102-.243.316-.694.339-.955.023-.261.034-.354.238-.426.345-.121 1.427-.087 1.613-.016.185.071.188.263.214.424.026.161.113.424.226.64s.406.697.26 1.034c-.061.14-.402.138-1.497.138s-1.408-.026-1.483-.118-.011-.477.09-.721zm8.875 0c-.102-.243-.316-.694-.339-.955-.023-.261-.034-.354-.238-.426-.345-.121-1.427-.087-1.613-.016-.185.071-.188.263-.214.424-.026.161-.113.424-.226.64s-.406.697-.26 1.034c.061.14.402.138 1.497.138s1.408-.026 1.483-.118c.074-.092.011-.477-.09-.721z"/><path fill="#F7DECE" d="M8.31 4.156c.011.127.814 1.525 1.266 2.625.452 1.1.747 2.25.984 2.5.476.499 1.926 1.474 2.911 2.937.985 1.464-1.977 2.58-2.611 1.588-.451-.706-1.309-2.368-2.097-3.759-.304-.54-.897-1.454-1.328-2.516-.406-1-.642-2.168-.702-2.312-.179-.425-.879-.977-.913-1.407 0 0 2.454-.084 2.49.344zm19.159 0c-.011.127-.814 1.525-1.266 2.625-.452 1.1-.747 2.25-.984 2.5-.476.499-1.926 1.474-2.911 2.937-.985 1.464 1.977 2.58 2.611 1.588.451-.706 1.309-2.368 2.097-3.759.304-.54.897-1.454 1.328-2.516.406-1 .642-2.168.702-2.312.178-.425.878-.977.912-1.406 0-.001-2.453-.085-2.489.343z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#DD2E44" d="M24.918 13.806c-.625-.583-2.611-1.588-2.611-1.588-.709.401-1.237 1.188-1.465 1.571l-1.398.394h-2.89l-1.627-.406c-.231-.387-.755-1.162-1.458-1.559 0 0-1.986 1.004-2.611 1.588.406 1.039 1.543 2.428 1.543 2.428l.008-.001c.4.821.854 1.362.945 1.547.386.781.646 4.72.646 4.72l4 1.5 3.779-1.5s.26-3.939.643-4.719c.091-.185.545-.727.945-1.547l.008.001c0-.001 1.138-1.39 1.543-2.429z"/><path fill="#F7DECE" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#292F33" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#F7DECE" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#292F33" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#F7DECE"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#F7DECE"><path d="M8.683 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.1-.29-.292-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.1.29 1.614.137 2.351-.214z"/><path d="M7.936 3.47c.137-.033.221-.173.188-.31l-.088-.357c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.033-.342.197-.398z"/><path d="M7.395 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.082.334c.034.137.173.221.31.188z"/><path d="M6.879 3.424c.137-.034.221-.173.188-.31l-.068-.277c-.033-.137-.173-.221-.309-.188-.137.033-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.36 3.447c.137-.033.221-.173.188-.31l-.04-.162c-.033-.137-.173-.221-.31-.188-.136.034-.22.173-.187.31l.04.162c.033.137.172.222.309.188z"/></g><path fill="#DD2E44" d="M21.779 24.5L18 23l-4 1.5s-.94 1.766-.94 5.188h2.719c.917-.979 1.25-3.604 1.25-3.604h1.721s.333 2.625 1.25 3.604h2.719c0-3.422-.94-5.188-.94-5.188z"/><path fill="#C1694F" d="M14 22.5h7.779v2H14z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.318" cy="23.458" r=".148"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.698h.758v.35h-.408v1.998h.408z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f3cb-1f3fb-200d-2642-fe0f.svg index edfb41c93..1caeeb8f2 100644 --- a/public/emoji/1f3cb-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f3cb-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#292F33" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#F7DECE" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#F7DECE" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#292F33" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#C1694F" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#F7DECE" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#F7DECE" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#292F33" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#F7DECE" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#292F33" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#F7DECE"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#F7DECE"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fb.svg b/public/emoji/1f3cb-1f3fb.svg index edfb41c93..1caeeb8f2 100644 --- a/public/emoji/1f3cb-1f3fb.svg +++ b/public/emoji/1f3cb-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#292F33" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#F7DECE" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#F7DECE" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#292F33" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#C1694F" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#F7DECE" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#F7DECE" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#292F33" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#F7DECE" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#292F33" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#F7DECE"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#F7DECE"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f3cb-1f3fc-200d-2640-fe0f.svg index a6c248961..03f293579 100644 --- a/public/emoji/1f3cb-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f3cb-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M18.497 3.508c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.183c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#F3D2A2" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#FFE51E" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#DD2E44" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#DD2E44" d="M22 14h-8v10h8V14z"/><path fill="#F3D2A2" d="M16.471 12.412v2.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-2.059h-3.058z"/><path fill="#F3D2A2" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#FFE51E" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#DF1F32" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M18.528 3.81c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.485c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#F3D2A2" d="M15.447 34.875h-1.02s-1.384-3.348-1.18-5.736l2.531.549c.56 1.564-.331 5.187-.331 5.187zm4.885 0h1.02s1.384-3.348 1.18-5.736L20 29.688c-.559 1.564.332 5.187.332 5.187z"/><path fill="#DD2E44" d="M13.452 35.149c.102-.243.316-.694.339-.955.023-.261.034-.354.238-.426.345-.121 1.427-.087 1.613-.016.185.071.188.263.214.424.026.161.113.424.226.64s.406.697.26 1.034c-.061.14-.402.138-1.497.138s-1.408-.026-1.483-.118-.011-.477.09-.721zm8.875 0c-.102-.243-.316-.694-.339-.955-.023-.261-.034-.354-.238-.426-.345-.121-1.427-.087-1.613-.016-.185.071-.188.263-.214.424-.026.161-.113.424-.226.64s-.406.697-.26 1.034c.061.14.402.138 1.497.138s1.408-.026 1.483-.118c.074-.092.011-.477-.09-.721z"/><path fill="#F3D2A2" d="M8.31 4.156c.011.127.814 1.525 1.266 2.625.452 1.1.747 2.25.984 2.5.476.499 1.926 1.474 2.911 2.937.985 1.464-1.977 2.58-2.611 1.588-.451-.706-1.309-2.368-2.097-3.759-.304-.54-.897-1.454-1.328-2.516-.406-1-.642-2.168-.702-2.312-.179-.425-.879-.977-.913-1.407 0 0 2.454-.084 2.49.344zm19.159 0c-.011.127-.814 1.525-1.266 2.625-.452 1.1-.747 2.25-.984 2.5-.476.499-1.926 1.474-2.911 2.937-.985 1.464 1.977 2.58 2.611 1.588.451-.706 1.309-2.368 2.097-3.759.304-.54.897-1.454 1.328-2.516.406-1 .642-2.168.702-2.312.178-.425.878-.977.912-1.406 0-.001-2.453-.085-2.489.343z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#DD2E44" d="M24.918 13.806c-.625-.583-2.611-1.588-2.611-1.588-.709.401-1.237 1.188-1.465 1.571l-1.398.394h-2.89l-1.627-.406c-.231-.387-.755-1.162-1.458-1.559 0 0-1.986 1.004-2.611 1.588.406 1.039 1.543 2.428 1.543 2.428l.008-.001c.4.821.854 1.362.945 1.547.386.781.646 4.72.646 4.72l4 1.5 3.779-1.5s.26-3.939.643-4.719c.091-.185.545-.727.945-1.547l.008.001c0-.001 1.138-1.39 1.543-2.429z"/><path fill="#F3D2A2" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#FFE51E" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#F3D2A2" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#FFE51E" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#F3D2A2"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#F3D2A2"><path d="M8.683 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.1-.29-.292-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.1.29 1.614.137 2.351-.214z"/><path d="M7.936 3.47c.137-.033.221-.173.188-.31l-.088-.357c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.033-.342.197-.398z"/><path d="M7.395 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.082.334c.034.137.173.221.31.188z"/><path d="M6.879 3.424c.137-.034.221-.173.188-.31l-.068-.277c-.033-.137-.173-.221-.309-.188-.137.033-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.36 3.447c.137-.033.221-.173.188-.31l-.04-.162c-.033-.137-.173-.221-.31-.188-.136.034-.22.173-.187.31l.04.162c.033.137.172.222.309.188z"/></g><path fill="#DD2E44" d="M21.779 24.5L18 23l-4 1.5s-.94 1.766-.94 5.188h2.719c.917-.979 1.25-3.604 1.25-3.604h1.721s.333 2.625 1.25 3.604h2.719c0-3.422-.94-5.188-.94-5.188z"/><path fill="#C1694F" d="M14 22.5h7.779v2H14z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.318" cy="23.458" r=".148"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.698h.758v.35h-.408v1.998h.408z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f3cb-1f3fc-200d-2642-fe0f.svg index dd8a66390..44953ab18 100644 --- a/public/emoji/1f3cb-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f3cb-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#FFE51E" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#F3D2A2" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#F3D2A2" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#FFE51E" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#C1694F" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#F3D2A2" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#F3D2A2" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#FFE51E" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#F3D2A2" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#FFE51E" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#F3D2A2"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#F3D2A2"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fc.svg b/public/emoji/1f3cb-1f3fc.svg index dd8a66390..44953ab18 100644 --- a/public/emoji/1f3cb-1f3fc.svg +++ b/public/emoji/1f3cb-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#FFE51E" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#F3D2A2" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#F3D2A2" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#FFE51E" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#C1694F" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#F3D2A2" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#F3D2A2" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#FFE51E" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#F3D2A2" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#FFE51E" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#F3D2A2"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#F3D2A2"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f3cb-1f3fd-200d-2640-fe0f.svg index 598c89bb0..00f68eeda 100644 --- a/public/emoji/1f3cb-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f3cb-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M18.497 3.508c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.183c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#D5AB88" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#963B22" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#DD2E44" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#DD2E44" d="M22 14h-8v10h8V14z"/><path fill="#D5AB88" d="M16.471 12.412v2.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-2.059h-3.058z"/><path fill="#D5AB88" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#963B22" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#DF1F32" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M18.528 3.81c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.485c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#D4AB88" d="M15.447 34.875h-1.02s-1.384-3.348-1.18-5.736l2.531.549c.56 1.564-.331 5.187-.331 5.187zm4.885 0h1.02s1.384-3.348 1.18-5.736L20 29.688c-.559 1.564.332 5.187.332 5.187z"/><path fill="#DD2E44" d="M13.452 35.149c.102-.243.316-.694.339-.955.023-.261.034-.354.238-.426.345-.121 1.427-.087 1.613-.016.185.071.188.263.214.424.026.161.113.424.226.64s.406.697.26 1.034c-.061.14-.402.138-1.497.138s-1.408-.026-1.483-.118-.011-.477.09-.721zm8.875 0c-.102-.243-.316-.694-.339-.955-.023-.261-.034-.354-.238-.426-.345-.121-1.427-.087-1.613-.016-.185.071-.188.263-.214.424-.026.161-.113.424-.226.64s-.406.697-.26 1.034c.061.14.402.138 1.497.138s1.408-.026 1.483-.118c.074-.092.011-.477-.09-.721z"/><path fill="#D4AB88" d="M8.31 4.156c.011.127.814 1.525 1.266 2.625.452 1.1.747 2.25.984 2.5.476.499 1.926 1.474 2.911 2.937.985 1.464-1.977 2.58-2.611 1.588-.451-.706-1.309-2.368-2.097-3.759-.304-.54-.897-1.454-1.328-2.516-.406-1-.642-2.168-.702-2.312-.179-.425-.879-.977-.913-1.407 0 0 2.454-.084 2.49.344zm19.159 0c-.011.127-.814 1.525-1.266 2.625-.452 1.1-.747 2.25-.984 2.5-.476.499-1.926 1.474-2.911 2.937-.985 1.464 1.977 2.58 2.611 1.588.451-.706 1.309-2.368 2.097-3.759.304-.54.897-1.454 1.328-2.516.406-1 .642-2.168.702-2.312.178-.425.878-.977.912-1.406 0-.001-2.453-.085-2.489.343z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#DD2E44" d="M24.918 13.806c-.625-.583-2.611-1.588-2.611-1.588-.709.401-1.237 1.188-1.465 1.571l-1.398.394h-2.89l-1.627-.406c-.231-.387-.755-1.162-1.458-1.559 0 0-1.986 1.004-2.611 1.588.406 1.039 1.543 2.428 1.543 2.428l.008-.001c.4.821.854 1.362.945 1.547.386.781.646 4.72.646 4.72l4 1.5 3.779-1.5s.26-3.939.643-4.719c.091-.185.545-.727.945-1.547l.008.001c0-.001 1.138-1.39 1.543-2.429z"/><path fill="#D4AB88" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#963B22" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#D4AB88" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#963B22" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#D4AB88"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#D4AB88"><path d="M8.683 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.1-.29-.292-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.1.29 1.614.137 2.351-.214z"/><path d="M7.936 3.47c.137-.033.221-.173.188-.31l-.088-.357c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.033-.342.197-.398z"/><path d="M7.395 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.082.334c.034.137.173.221.31.188z"/><path d="M6.879 3.424c.137-.034.221-.173.188-.31l-.068-.277c-.033-.137-.173-.221-.309-.188-.137.033-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.36 3.447c.137-.033.221-.173.188-.31l-.04-.162c-.033-.137-.173-.221-.31-.188-.136.034-.22.173-.187.31l.04.162c.033.137.172.222.309.188z"/></g><path fill="#DD2E44" d="M21.779 24.5L18 23l-4 1.5s-.94 1.766-.94 5.188h2.719c.917-.979 1.25-3.604 1.25-3.604h1.721s.333 2.625 1.25 3.604h2.719c0-3.422-.94-5.188-.94-5.188z"/><path fill="#C1694F" d="M14 22.5h7.779v2H14z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.318" cy="23.458" r=".148"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.698h.758v.35h-.408v1.998h.408z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f3cb-1f3fd-200d-2642-fe0f.svg index 74a18a754..5401c2f65 100644 --- a/public/emoji/1f3cb-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f3cb-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#963B22" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#D5AB88" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#D5AB88" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#963B22" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#C1694F" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#D4AB88" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#D4AB88" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#963B22" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#D4AB88" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#963B22" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#D4AB88"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#D4AB88"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fd.svg b/public/emoji/1f3cb-1f3fd.svg index 74a18a754..5401c2f65 100644 --- a/public/emoji/1f3cb-1f3fd.svg +++ b/public/emoji/1f3cb-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#963B22" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#D5AB88" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#D5AB88" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#963B22" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#C1694F" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#D4AB88" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#D4AB88" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#963B22" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#D4AB88" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#963B22" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#D4AB88"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#D4AB88"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f3cb-1f3fe-200d-2640-fe0f.svg index a82a2e501..34e859a13 100644 --- a/public/emoji/1f3cb-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f3cb-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M18.497 3.508c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.183c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#AF7E57" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#60352A" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#DD2E44" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#DD2E44" d="M22 14h-8v10h8V14z"/><path fill="#AF7E57" d="M16.471 12.412v2.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-2.059h-3.058z"/><path fill="#AF7E57" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#60352A" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#DF1F32" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#60352A" cx="16.088" cy="9.5" r=".382"/><path fill="#60352A" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#845636" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M18.528 3.81c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.485c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#AF7E57" d="M15.447 34.875h-1.02s-1.384-3.348-1.18-5.736l2.531.549c.56 1.564-.331 5.187-.331 5.187zm4.885 0h1.02s1.384-3.348 1.18-5.736L20 29.688c-.559 1.564.332 5.187.332 5.187z"/><path fill="#DD2E44" d="M13.452 35.149c.102-.243.316-.694.339-.955.023-.261.034-.354.238-.426.345-.121 1.427-.087 1.613-.016.185.071.188.263.214.424.026.161.113.424.226.64s.406.697.26 1.034c-.061.14-.402.138-1.497.138s-1.408-.026-1.483-.118-.011-.477.09-.721zm8.875 0c-.102-.243-.316-.694-.339-.955-.023-.261-.034-.354-.238-.426-.345-.121-1.427-.087-1.613-.016-.185.071-.188.263-.214.424-.026.161-.113.424-.226.64s-.406.697-.26 1.034c.061.14.402.138 1.497.138s1.408-.026 1.483-.118c.074-.092.011-.477-.09-.721z"/><path fill="#AF7E57" d="M8.31 4.156c.011.127.814 1.525 1.266 2.625.452 1.1.747 2.25.984 2.5.476.499 1.926 1.474 2.911 2.937.985 1.464-1.977 2.58-2.611 1.588-.451-.706-1.309-2.368-2.097-3.759-.304-.54-.897-1.454-1.328-2.516-.406-1-.642-2.168-.702-2.312-.179-.425-.879-.977-.913-1.407 0 0 2.454-.084 2.49.344zm19.159 0c-.011.127-.814 1.525-1.266 2.625-.452 1.1-.747 2.25-.984 2.5-.476.499-1.926 1.474-2.911 2.937-.985 1.464 1.977 2.58 2.611 1.588.451-.706 1.309-2.368 2.097-3.759.304-.54.897-1.454 1.328-2.516.406-1 .642-2.168.702-2.312.178-.425.878-.977.912-1.406 0-.001-2.453-.085-2.489.343z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#DD2E44" d="M24.918 13.806c-.625-.583-2.611-1.588-2.611-1.588-.709.401-1.237 1.188-1.465 1.571l-1.398.394h-2.89l-1.627-.406c-.231-.387-.755-1.162-1.458-1.559 0 0-1.986 1.004-2.611 1.588.406 1.039 1.543 2.428 1.543 2.428l.008-.001c.4.821.854 1.362.945 1.547.386.781.646 4.72.646 4.72l4 1.5 3.779-1.5s.26-3.939.643-4.719c.091-.185.545-.727.945-1.547l.008.001c0-.001 1.138-1.39 1.543-2.429z"/><path fill="#AF7E57" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#60352A" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#AF7E57" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#60352A" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#915A34" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#915A34" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#AF7E57"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#AF7E57"><path d="M8.683 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.1-.29-.292-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.1.29 1.614.137 2.351-.214z"/><path d="M7.936 3.47c.137-.033.221-.173.188-.31l-.088-.357c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.033-.342.197-.398z"/><path d="M7.395 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.082.334c.034.137.173.221.31.188z"/><path d="M6.879 3.424c.137-.034.221-.173.188-.31l-.068-.277c-.033-.137-.173-.221-.309-.188-.137.033-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.36 3.447c.137-.033.221-.173.188-.31l-.04-.162c-.033-.137-.173-.221-.31-.188-.136.034-.22.173-.187.31l.04.162c.033.137.172.222.309.188z"/></g><path fill="#DD2E44" d="M21.779 24.5L18 23l-4 1.5s-.94 1.766-.94 5.188h2.719c.917-.979 1.25-3.604 1.25-3.604h1.721s.333 2.625 1.25 3.604h2.719c0-3.422-.94-5.188-.94-5.188z"/><path fill="#C1694F" d="M14 22.5h7.779v2H14z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.318" cy="23.458" r=".148"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.698h.758v.35h-.408v1.998h.408z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f3cb-1f3fe-200d-2642-fe0f.svg index b80c958d9..b5f19bf25 100644 --- a/public/emoji/1f3cb-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f3cb-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#60352A" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#AF7E57" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#AF7E57" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#60352A" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#915A34" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#60352A" cx="16.088" cy="9.5" r=".382"/><path fill="#60352A" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#915A34" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#AF7E57" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#AF7E57" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#60352A" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#AF7E57" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#60352A" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#915A34" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#915A34" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#AF7E57"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#AF7E57"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3fe.svg b/public/emoji/1f3cb-1f3fe.svg index b80c958d9..b5f19bf25 100644 --- a/public/emoji/1f3cb-1f3fe.svg +++ b/public/emoji/1f3cb-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#60352A" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#AF7E57" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#AF7E57" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#60352A" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#915A34" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#60352A" cx="16.088" cy="9.5" r=".382"/><path fill="#60352A" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#915A34" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#AF7E57" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#AF7E57" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#60352A" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#AF7E57" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#60352A" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#915A34" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#915A34" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#AF7E57"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#AF7E57"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f3cb-1f3ff-200d-2640-fe0f.svg index bced90f1e..117b92a7f 100644 --- a/public/emoji/1f3cb-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f3cb-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M18.497 3.508c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.183c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#7C533E" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#0B0200" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#DD2E44" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#DD2E44" d="M22 14h-8v10h8V14z"/><path fill="#7C533E" d="M16.471 12.412v2.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-2.059h-3.058z"/><path fill="#7C533E" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#0B0200" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#DF1F32" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle cx="16.088" cy="9.5" r=".382"/><path d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#3D2E24" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M18.528 3.81c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.485c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#7C533E" d="M15.447 34.875h-1.02s-1.384-3.348-1.18-5.736l2.531.549c.56 1.564-.331 5.187-.331 5.187zm4.885 0h1.02s1.384-3.348 1.18-5.736L20 29.688c-.559 1.564.332 5.187.332 5.187z"/><path fill="#DD2E44" d="M13.452 35.149c.102-.243.316-.694.339-.955.023-.261.034-.354.238-.426.345-.121 1.427-.087 1.613-.016.185.071.188.263.214.424.026.161.113.424.226.64s.406.697.26 1.034c-.061.14-.402.138-1.497.138s-1.408-.026-1.483-.118-.011-.477.09-.721zm8.875 0c-.102-.243-.316-.694-.339-.955-.023-.261-.034-.354-.238-.426-.345-.121-1.427-.087-1.613-.016-.185.071-.188.263-.214.424-.026.161-.113.424-.226.64s-.406.697-.26 1.034c.061.14.402.138 1.497.138s1.408-.026 1.483-.118c.074-.092.011-.477-.09-.721z"/><path fill="#7C533E" d="M8.31 4.156c.011.127.814 1.525 1.266 2.625.452 1.1.747 2.25.984 2.5.476.499 1.926 1.474 2.911 2.937.985 1.464-1.977 2.58-2.611 1.588-.451-.706-1.309-2.368-2.097-3.759-.304-.54-.897-1.454-1.328-2.516-.406-1-.642-2.168-.702-2.312-.179-.425-.879-.977-.913-1.407 0 0 2.454-.084 2.49.344zm19.159 0c-.011.127-.814 1.525-1.266 2.625-.452 1.1-.747 2.25-.984 2.5-.476.499-1.926 1.474-2.911 2.937-.985 1.464 1.977 2.58 2.611 1.588.451-.706 1.309-2.368 2.097-3.759.304-.54.897-1.454 1.328-2.516.406-1 .642-2.168.702-2.312.178-.425.878-.977.912-1.406 0-.001-2.453-.085-2.489.343z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#DD2E44" d="M24.918 13.806c-.625-.583-2.611-1.588-2.611-1.588-.709.401-1.237 1.188-1.465 1.571l-1.398.394h-2.89l-1.627-.406c-.231-.387-.755-1.162-1.458-1.559 0 0-1.986 1.004-2.611 1.588.406 1.039 1.543 2.428 1.543 2.428l.008-.001c.4.821.854 1.362.945 1.547.386.781.646 4.72.646 4.72l4 1.5 3.779-1.5s.26-3.939.643-4.719c.091-.185.545-.727.945-1.547l.008.001c0-.001 1.138-1.39 1.543-2.429z"/><path fill="#7C533E" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#0B0200" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#7C533E" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#0B0200" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#3D2E24" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle cx="16.125" cy="9.728" r=".375"/><path d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#3D2E24" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#7C533E"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#7C533E"><path d="M8.683 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.1-.29-.292-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.1.29 1.614.137 2.351-.214z"/><path d="M7.936 3.47c.137-.033.221-.173.188-.31l-.088-.357c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.033-.342.197-.398z"/><path d="M7.395 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.082.334c.034.137.173.221.31.188z"/><path d="M6.879 3.424c.137-.034.221-.173.188-.31l-.068-.277c-.033-.137-.173-.221-.309-.188-.137.033-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.36 3.447c.137-.033.221-.173.188-.31l-.04-.162c-.033-.137-.173-.221-.31-.188-.136.034-.22.173-.187.31l.04.162c.033.137.172.222.309.188z"/></g><path fill="#DD2E44" d="M21.779 24.5L18 23l-4 1.5s-.94 1.766-.94 5.188h2.719c.917-.979 1.25-3.604 1.25-3.604h1.721s.333 2.625 1.25 3.604h2.719c0-3.422-.94-5.188-.94-5.188z"/><path fill="#C1694F" d="M14 22.5h7.779v2H14z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.318" cy="23.458" r=".148"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.698h.758v.35h-.408v1.998h.408z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f3cb-1f3ff-200d-2642-fe0f.svg index be0f83b9e..2cf83c479 100644 --- a/public/emoji/1f3cb-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f3cb-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#0B0200" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#7C533E" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#7C533E" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#0B0200" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#3D2E24" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle cx="16.088" cy="9.5" r=".382"/><path d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#3D2E24" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#7C533E" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#7C533E" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#0B0200" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#7C533E" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#0B0200" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#3D2E24" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle cx="16.125" cy="9.728" r=".375"/><path d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#3D2E24" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#7C533E"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#7C533E"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-1f3ff.svg b/public/emoji/1f3cb-1f3ff.svg index be0f83b9e..2cf83c479 100644 --- a/public/emoji/1f3cb-1f3ff.svg +++ b/public/emoji/1f3cb-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#0B0200" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#7C533E" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#7C533E" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#0B0200" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#3D2E24" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle cx="16.088" cy="9.5" r=".382"/><path d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#3D2E24" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#7C533E" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#7C533E" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#0B0200" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#7C533E" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#0B0200" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#3D2E24" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle cx="16.125" cy="9.728" r=".375"/><path d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#3D2E24" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#7C533E"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#7C533E"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-fe0f-200d-2640-fe0f.svg b/public/emoji/1f3cb-fe0f-200d-2640-fe0f.svg index 33614a1dd..1e2ac7f89 100644 --- a/public/emoji/1f3cb-fe0f-200d-2640-fe0f.svg +++ b/public/emoji/1f3cb-fe0f-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M18.497 3.508c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.183c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#FFDC5D" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#FFAC33" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#DD2E44" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#DD2E44" d="M22 14h-8v10h8V14z"/><path fill="#FFDC5D" d="M16.471 12.412v2.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-2.059h-3.058z"/><path fill="#FFDC5D" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#FFAC33" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#DF1F32" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M18.528 3.81c-.731 0-1.421.173-2.037.472-.167-.029-.338-.047-.513-.047-1.643 0-2.975 1.332-2.975 2.975v5.1h.007c.078 2.748 2.326 4.954 5.093 4.954s5.015-2.206 5.093-4.954h.007V8.485c0-2.582-2.093-4.675-4.675-4.675z"/><path fill="#FFDC5D" d="M15.447 34.875h-1.02s-1.384-3.348-1.18-5.736l2.531.549c.56 1.564-.331 5.187-.331 5.187zm4.885 0h1.02s1.384-3.348 1.18-5.736L20 29.688c-.559 1.564.332 5.187.332 5.187z"/><path fill="#DD2E44" d="M13.452 35.149c.102-.243.316-.694.339-.955.023-.261.034-.354.238-.426.345-.121 1.427-.087 1.613-.016.185.071.188.263.214.424.026.161.113.424.226.64s.406.697.26 1.034c-.061.14-.402.138-1.497.138s-1.408-.026-1.483-.118-.011-.477.09-.721zm8.875 0c-.102-.243-.316-.694-.339-.955-.023-.261-.034-.354-.238-.426-.345-.121-1.427-.087-1.613-.016-.185.071-.188.263-.214.424-.026.161-.113.424-.226.64s-.406.697-.26 1.034c.061.14.402.138 1.497.138s1.408-.026 1.483-.118c.074-.092.011-.477-.09-.721z"/><path fill="#FFDC5D" d="M8.31 4.156c.011.127.814 1.525 1.266 2.625.452 1.1.747 2.25.984 2.5.476.499 1.926 1.474 2.911 2.937.985 1.464-1.977 2.58-2.611 1.588-.451-.706-1.309-2.368-2.097-3.759-.304-.54-.897-1.454-1.328-2.516-.406-1-.642-2.168-.702-2.312-.179-.425-.879-.977-.913-1.407 0 0 2.454-.084 2.49.344zm19.159 0c-.011.127-.814 1.525-1.266 2.625-.452 1.1-.747 2.25-.984 2.5-.476.499-1.926 1.474-2.911 2.937-.985 1.464 1.977 2.58 2.611 1.588.451-.706 1.309-2.368 2.097-3.759.304-.54.897-1.454 1.328-2.516.406-1 .642-2.168.702-2.312.178-.425.878-.977.912-1.406 0-.001-2.453-.085-2.489.343z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#DD2E44" d="M24.918 13.806c-.625-.583-2.611-1.588-2.611-1.588-.709.401-1.237 1.188-1.465 1.571l-1.398.394h-2.89l-1.627-.406c-.231-.387-.755-1.162-1.458-1.559 0 0-1.986 1.004-2.611 1.588.406 1.039 1.543 2.428 1.543 2.428l.008-.001c.4.821.854 1.362.945 1.547.386.781.646 4.72.646 4.72l4 1.5 3.779-1.5s.26-3.939.643-4.719c.091-.185.545-.727.945-1.547l.008.001c0-.001 1.138-1.39 1.543-2.429z"/><path fill="#FFDC5D" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#FFAC33" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#FFDC5D" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#FFAC33" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#FFDC5D"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#FFDC5D"><path d="M8.683 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.1-.29-.292-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.1.29 1.614.137 2.351-.214z"/><path d="M7.936 3.47c.137-.033.221-.173.188-.31l-.088-.357c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.033-.342.197-.398z"/><path d="M7.395 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.082.334c.034.137.173.221.31.188z"/><path d="M6.879 3.424c.137-.034.221-.173.188-.31l-.068-.277c-.033-.137-.173-.221-.309-.188-.137.033-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.36 3.447c.137-.033.221-.173.188-.31l-.04-.162c-.033-.137-.173-.221-.31-.188-.136.034-.22.173-.187.31l.04.162c.033.137.172.222.309.188z"/></g><path fill="#DD2E44" d="M21.779 24.5L18 23l-4 1.5s-.94 1.766-.94 5.188h2.719c.917-.979 1.25-3.604 1.25-3.604h1.721s.333 2.625 1.25 3.604h2.719c0-3.422-.94-5.188-.94-5.188z"/><path fill="#C1694F" d="M14 22.5h7.779v2H14z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.318" cy="23.458" r=".148"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.698h.758v.35h-.408v1.998h.408z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb-fe0f-200d-2642-fe0f.svg b/public/emoji/1f3cb-fe0f-200d-2642-fe0f.svg index 9940b781b..f9bbcc92c 100644 --- a/public/emoji/1f3cb-fe0f-200d-2642-fe0f.svg +++ b/public/emoji/1f3cb-fe0f-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#FFAC33" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#FFDC5D" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#FFDC5D" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#FFAC33" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#C1694F" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#FFDC5D" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#FFDC5D" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#FFAC33" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#FFDC5D" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#FFAC33" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#FFDC5D"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#FFDC5D"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3cb.svg b/public/emoji/1f3cb.svg index 9940b781b..f9bbcc92c 100644 --- a/public/emoji/1f3cb.svg +++ b/public/emoji/1f3cb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M14.778 35.254c.141.534.688.854 1.222.713.534-.141.854-.687.714-1.222l-1.525-5.803c-.14-.534-.687-.854-1.221-.713-.534.14-.854.687-.713 1.221l1.523 5.804zm4.509-.508c-.141.534.178 1.08.713 1.221.535.141 1.081-.178 1.222-.713l1.524-5.803c.141-.535-.179-1.082-.713-1.222-.535-.141-1.081.179-1.222.713l-1.524 5.804zm-5.082-20.042C14.368 15.232 14 17 14 17c-1 0-1.542-1.177-1.706-1.705L9.045 4.786c-.163-.528.132-1.088.66-1.251.527-.163 1.087.132 1.25.66l3.25 10.509zm7.59 0C21.632 15.232 22 17 22 17c1 0 1.543-1.177 1.705-1.705l3.25-10.509c.163-.528-.133-1.088-.66-1.251-.527-.163-1.088.132-1.25.66l-3.25 10.509z"/><path fill="#FFAC33" d="M18.382 3c-.907 0-1.745.29-2.432.778-1.412.074-2.539 1.232-2.539 2.663 0 1.179.005 2.664 1.559 3.217.763 1.061 2.005 1.753 3.412 1.753 2.323 0 4.206-1.882 4.206-4.205C22.588 4.883 20.705 3 18.382 3z"/><path fill="#4289C1" d="M19 23h-2l-3 2-1 5h3l1-3h2l1 3h3l-1-5zm-6 13v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#4289C1" d="M22 14h-8v10h8V14z"/><path fill="#FFDC5D" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529s1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#FFDC5D" d="M21.823 5.294h-7.647v4.588c0 2.112 1.712 3.823 3.824 3.823s3.823-1.711 3.823-3.823V5.294z"/><path fill="#FFAC33" d="M16.4 5.223H14v3.201c1.867 0 2.28-1.93 2.373-2.791.031.86.651 2.791 5.628 2.791V5.223H16.4z"/><path fill="#C1694F" d="M19.529 12.176h-3.058s0 .765 1.529.765 1.529-.765 1.529-.765z"/><circle fill="#662113" cx="16.088" cy="9.5" r=".382"/><path fill="#662113" d="M20.294 9.5c0 .211-.171.382-.382.382-.212 0-.383-.171-.383-.382s.171-.382.383-.382c.211 0 .382.171.382.382z"/><path fill="#C1694F" d="M17.235 10.647h1.53s0 .765-.765.765-.765-.765-.765-.765z"/><path fill="#662113" d="M14 23h8v2h-8z"/><path fill="#99AAB5" d="M33.5 3.5c0 .276-.224.5-.5.5H3c-.276 0-.5-.224-.5-.5S2.724 3 3 3h30c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M32 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1s-1 .448-1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1zM6 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S3 .448 3 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M15.81 34.875h-1.422s-1.323-3.348-1.119-5.736l2.918.549c.548 1.571-.377 5.187-.377 5.187zm4.317 0h1.422s1.323-3.348 1.119-5.736l-2.918.549c-.548 1.571.377 5.187.377 5.187z"/><path fill="#4289C1" d="M13.617 35.149c.106-.243.331-.694.355-.955.024-.261.036-.354.25-.426.362-.121 1.496-.087 1.691-.016.194.071.197.263.225.424.028.161.118.424.237.64s.426.697.272 1.034c-.064.14-.422.138-1.569.138s-1.476-.026-1.554-.118c-.08-.092-.014-.477.093-.721zm8.704 0c-.106-.243-.331-.694-.355-.955-.024-.261-.036-.354-.25-.426-.362-.121-1.496-.087-1.691-.016-.194.071-.197.263-.225.424s-.118.424-.237.64c-.118.216-.426.697-.272 1.034.064.14.422.138 1.569.138s1.476-.026 1.554-.118.013-.477-.093-.721z"/><path fill="#FFDC5D" d="M8.646 4.146c.011.127.871 1.535 1.323 2.635.452 1.1.71 2.198.948 2.448.476.499 2.285 1.879 3.271 3.343.985 1.464.57 2.503-.094 2.922-.88.555-1.803.204-2.437-.788-.451-.706-1.951-3.209-2.739-4.601-.306-.541-1.018-1.512-1.449-2.574-.406-1-.454-2.168-.515-2.312-.179-.425-.878-.977-.912-1.407 0 0 2.567-.095 2.604.334zm18.708 0c-.011.127-.871 1.535-1.323 2.635-.452 1.1-.71 2.198-.948 2.448-.476.499-2.285 1.879-3.271 3.343-.985 1.464-.57 2.503.094 2.922.88.555 1.803.204 2.437-.788.451-.706 1.951-3.209 2.739-4.601.304-.54 1.017-1.511 1.448-2.573.406-1 .454-2.168.515-2.312.178-.425.878-.977.912-1.406.001-.002-2.566-.097-2.603.332z"/><path fill="#99AAB5" d="M36 3.5c0 .276-.224.5-.5.5H.5C.224 4 0 3.776 0 3.5S.224 3 .5 3h35c.276 0 .5.224.5.5z"/><path fill="#292F33" d="M34 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1-.553 0-1 .448-1 1v5c0 .552.447 1 1 1 .553 0 1-.448 1-1 0 .552.447 1 1 1 .553 0 1-.448 1-1V1c0-.552-.447-1-1-1zM4 0c-.553 0-1 .448-1 1 0-.552-.447-1-1-1S1 .448 1 1v5c0 .552.447 1 1 1s1-.448 1-1c0 .552.447 1 1 1s1-.448 1-1V1c0-.552-.447-1-1-1z"/><path fill="#4289C1" d="M24.918 13.806c-.625-.583-2.746-1.723-2.746-1.723-.742.419-1.283 1.257-1.492 1.617-.665.117-1.151.3-1.151.3H16.47s-.486-.183-1.151-.3c-.209-.36-.75-1.197-1.492-1.617 0 0-2.121 1.14-2.746 1.723.21.537.492 1.047.716 1.417.255 1.29 1.146 2.763 1.281 3.013.418.78.922 4.264.922 4.264l4 1.5 4-1.5s.504-3.484.922-4.264c.134-.25 1.025-1.724 1.281-3.013.224-.37.506-.879.715-1.417z"/><path fill="#FFDC5D" d="M16.471 11.412v3.059c0 .844.684 1.529 1.529 1.529.845 0 1.529-.685 1.529-1.529v-3.059h-3.058z"/><path fill="#FFAC33" d="M18.375 3.353c-.89 0-1.712.284-2.386.763-1.385.072-2.49 1.209-2.49 2.612 0 1.156.005 2.613 1.529 3.156.749 1.04 1.967 1.719 3.347 1.719 2.278 0 4.125-1.846 4.125-4.125 0-2.278-1.847-4.125-4.125-4.125z"/><path fill="#FFDC5D" d="M21.75 5.602h-7.5v4.5c0 2.072 1.679 3.75 3.75 3.75 2.072 0 3.75-1.678 3.75-3.75v-4.5z"/><path fill="#FFAC33" d="M18 4l-3.924 1.533v3.139c1.831 0 2.236-1.893 2.327-2.737.031.844.639 2.737 5.52 2.737V5.533L18 4z"/><path fill="#C1694F" d="M19.5 12.353h-3s0 .75 1.5.75 1.5-.75 1.5-.75z"/><circle fill="#662113" cx="16.125" cy="9.728" r=".375"/><path fill="#662113" d="M20.25 9.728c0 .207-.168.375-.374.375-.208 0-.375-.168-.375-.375s.168-.375.375-.375c.206 0 .374.168.374.375z"/><path fill="#C1694F" d="M17.25 10.853h1.5s0 .75-.75.75-.75-.75-.75-.75z"/><g fill="#FFDC5D"><path d="M27.096 4.363c-.33-.157-.476-.428-.377-.719l.003-.01c.099-.291.291-.346.738-.339 0 0 1.521.076 2.437.712 0 0-.199.304-.447.56l-.003.01c-.101.29-1.614.137-2.351-.214z"/><path d="M27.843 3.47c-.137-.033-.221-.173-.188-.31l.087-.357c.033-.137.173-.221.31-.188s.221.173.188.31l-.087.357c-.034.137-.173.221-.31.188zm-.445-.87c-.163-.055-.342.034-.397.197l-.279.837c-.055.164.168-.068.332-.013.163.055.342-.033.397-.196l.144-.427c.055-.164-.034-.342-.197-.398z"/><path d="M28.384 3.399c-.137-.033-.221-.173-.188-.31l.082-.334c.033-.137.173-.221.31-.188s.221.173.188.31l-.082.334c-.034.137-.173.221-.31.188z"/><path d="M28.9 3.424c-.137-.033-.221-.173-.188-.31l.068-.277c.033-.137.173-.221.31-.188s.221.173.188.31l-.068.277c-.034.137-.173.221-.31.188z"/><path d="M29.419 3.447c-.137-.033-.221-.173-.188-.31l.04-.162c.033-.137.173-.221.31-.188s.221.173.188.31l-.04.162c-.034.137-.174.222-.31.188z"/></g><g fill="#FFDC5D"><path d="M8.904 4.363c.33-.157.476-.428.377-.719l-.003-.01c-.099-.29-.291-.346-.738-.339 0 0-1.521.076-2.437.712 0 0 .199.304.447.56l.003.01c.101.29 1.614.137 2.351-.214z"/><path d="M8.157 3.47c.137-.033.221-.173.188-.31l-.087-.357c-.033-.137-.173-.221-.31-.188-.137.034-.221.173-.188.31l.087.357c.034.137.173.221.31.188zm.445-.87c.163-.055.342.034.397.197l.279.837c.055.164-.168-.068-.332-.013-.163.055-.342-.033-.397-.196l-.144-.427c-.055-.164.034-.342.197-.398z"/><path d="M7.616 3.399c.137-.033.221-.173.188-.31l-.082-.334c-.033-.137-.173-.221-.31-.188-.136.034-.221.173-.187.31l.082.334c.033.137.172.221.309.188z"/><path d="M7.1 3.424c.137-.033.221-.173.188-.31l-.068-.277c-.033-.137-.172-.221-.309-.188s-.221.173-.188.31l.068.277c.033.137.172.221.309.188z"/><path d="M6.581 3.447c.137-.033.221-.173.188-.31l-.039-.162c-.034-.136-.173-.221-.31-.188-.137.034-.221.173-.188.31l.04.162c.033.137.173.222.309.188z"/></g><path fill="#3A6693" d="M22 24.5L18 23l-4 1.5s-.854 1.917-1 5.188h3.187c.917-.979 1.25-3.604 1.25-3.604h1.125s.333 2.625 1.25 3.604H23c-.146-3.271-1-5.188-1-5.188z"/><path fill="#C1694F" d="M14 22.5h8v2h-8z"/><path fill="#14171A" d="M19 22.399h.65v2.209H19z"/><circle fill="#14171A" cx="18.5" cy="23.458" r=".167"/><path fill="#14171A" d="M18.021 23.458c0 .092-.075.167-.167.167-.092 0-.167-.075-.167-.167 0-.092.075-.167.167-.167.092.001.167.075.167.167z"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#14171A" cx="16.562" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.917" cy="23.458" r=".167"/><circle fill="#14171A" cx="15.271" cy="23.458" r=".167"/><circle fill="#14171A" cx="14.625" cy="23.458" r=".167"/><circle fill="#14171A" cx="17.208" cy="23.458" r=".167"/><circle fill="#657786" cx="16.553" cy="23.458" r=".148"/><path fill="#657786" d="M16.318 23.31h.235v.297h-.235z"/><path fill="#657786" d="M16.729 24.846h-.758v-2.697h.758v.35h-.409v1.997h.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3d2.svg b/public/emoji/1f3d2.svg index 9b0cd11e1..382c62915 100644 --- a/public/emoji/1f3d2.svg +++ b/public/emoji/1f3d2.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M36 3c-1 1.295-3.027 3.803-4.391 5.671-3.816 5.225-7.156 6.454-10.328 7.632-3.172 1.178-10.407 1.029-13.88.854-3.473-.175-5.735-.579-6.42.415-2.102 3.053-.612 6.481 2.426 6.949 2.378.366 9.544-.32 12.899-.616 3.356-.297 7.024-1.301 8.283-1.785 1.259-.483 2.279-.88 2.597-1.644.318-.765 1.876-2.817 3.783-5.917C32.045 12.811 35 9.55 36 8V3z"/><path fill="#292F33" d="M7 24.591c3-.114 7.055-.487 9.309-.686 2.289-.202 4.704-.732 6.419-1.203l-.424-6.784c-.344.132-.686.259-1.024.385-3.172 1.178-10.405 1.029-13.877.854-.141-.008-.403-.017-.403-.025v7.459z"/><path fill="#231F20" d="M17 28v4c0 1.104 3.135 2 7 2 3.866 0 7-.896 7-2v-4H17z"/><ellipse fill="#58595B" cx="23.996" cy="28" rx="7" ry="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M36 3c-1 1.295-3.027 3.803-4.391 5.671-3.816 5.225-7.156 6.454-10.328 7.632-3.172 1.178-10.407 1.029-13.88.854-3.473-.175-5.735-.579-6.42.415-2.102 3.053-.612 6.481 2.426 6.949 2.378.366 9.544-.32 12.899-.616 3.356-.297 7.024-1.301 8.283-1.785 1.259-.483 2.279-.88 2.597-1.644.318-.765 1.876-2.817 3.783-5.917C32.045 12.811 35 9.55 36 8V3z"/><path fill="#31373D" d="M7 24.591c3-.114 7.055-.487 9.309-.686 2.289-.202 4.704-.732 6.419-1.203l-.424-6.784c-.344.132-.686.259-1.024.385-3.172 1.178-10.405 1.029-13.877.854-.141-.008-.403-.017-.403-.025v7.459zM17 28v4c0 1.104 3.135 2 7 2 3.866 0 7-.896 7-2v-4H17z"/><ellipse fill="#66757F" cx="23.996" cy="28" rx="7" ry="2"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3f3-fe0f-200d-26a7-fe0f.svg b/public/emoji/1f3f3-fe0f-200d-26a7-fe0f.svg new file mode 100644 index 000000000..f9fc064c0 --- /dev/null +++ b/public/emoji/1f3f3-fe0f-200d-26a7-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5BCEFA" d="M0 27c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-1.3H0V27z"/><path fill="#F5A9B8" d="M.026 20.5L0 25.8h36v-5.3z"/><path fill="#EEE" d="M0 15.3h36v5.3H0z"/><path fill="#F5A9B8" d="M.026 10.1L0 15.4h36v-5.3z"/><path fill="#5BCEFA" d="M36 9c0-2.209-1.791-4-4-4H4C1.791 5 0 6.791 0 9v1.2h36V9z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3f4-200d-2620-fe0f.svg b/public/emoji/1f3f4-200d-2620-fe0f.svg index fb892e27d..ae0d531a1 100644 --- a/public/emoji/1f3f4-200d-2620-fe0f.svg +++ b/public/emoji/1f3f4-200d-2620-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#292F33"><path d="M32 5H4C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><circle cx="15.5" cy="12.5" r="1.5"/><circle cx="20.5" cy="12.5" r="1.5"/><ellipse cx="18" cy="15.5" rx="1" ry=".5"/></g><path fill="#E6E7E8" d="M29.021 24.883c-.52-.189-1.093.078-1.282.598L20.923 23l6.816-2.48c.189.52.762.786 1.281.598.52-.19.787-.762.598-1.281-.188-.519-.762-.787-1.281-.599.519-.189.787-.762.598-1.281-.19-.52-.762-.787-1.281-.598-.519.188-.787.763-.598 1.282L18 21.937l-9.056-3.296c.189-.52-.078-1.094-.598-1.282-.52-.19-1.092.078-1.281.598-.189.519.078 1.093.598 1.281-.52-.189-1.093.079-1.281.599-.189.52.078 1.092.598 1.281.52.188 1.092-.078 1.281-.598L15.077 23l-6.815 2.48c-.189-.52-.763-.787-1.282-.598-.519.189-.786.762-.598 1.281.189.519.763.787 1.282.598-.52.19-.787.763-.598 1.282.188.52.763.786 1.281.598.519-.189.787-.763.598-1.282L18 24.065l9.055 3.295c-.19.52.079 1.093.598 1.282.519.188 1.093-.078 1.281-.598.189-.519-.078-1.093-.598-1.282.52.19 1.093-.078 1.282-.598.189-.519-.079-1.093-.597-1.281z"/><path fill="#E6E7E8" d="M18 7c-4 0-6 3.239-6 6 0 1.394.827 2.399 2 3.054V18c0 .553.448 1 1 1s1-.447 1-1v-1.216c.33.072.665.127 1 .162V18c0 .553.448 1 1 1s1-.447 1-1v-1.054c.335-.036.67-.09 1-.162V18c0 .553.447 1 1 1s1-.447 1-1v-1.946c1.173-.654 2-1.659 2-3.054 0-2.761-2-6-6-6zm-2.5 7c-.829 0-1.5 0-1.5-1.5 0-.829.671-1.5 1.5-1.5 1.5 0 1.5.671 1.5 1.5s-.671 1.5-1.5 1.5zm2.5 2c-.552 0-1-.224-1-.5s.448-.5 1-.5 1 .224 1 .5-.448.5-1 .5zm2.5-2c-.828 0-1.5-.671-1.5-1.5s0-1.5 1.5-1.5c.828 0 1.5.671 1.5 1.5 0 1.5-.672 1.5-1.5 1.5z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M32 5H4C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9c0-2.209-1.791-4-4-4z"/><circle fill="#31373D" cx="15.5" cy="12.5" r="1.5"/><circle fill="#31373D" cx="20.5" cy="12.5" r="1.5"/><ellipse fill="#292F33" cx="18" cy="15.5" rx="1" ry=".5"/><path fill="#E6E7E8" d="M29.021 24.883c-.52-.189-1.093.078-1.282.598L20.923 23l6.816-2.48c.189.52.762.786 1.281.598.52-.19.787-.762.598-1.281-.188-.519-.762-.787-1.281-.599.519-.189.787-.762.598-1.281-.19-.52-.762-.787-1.281-.598-.519.188-.787.763-.598 1.282L18 21.937l-9.056-3.296c.189-.52-.078-1.094-.598-1.282-.52-.19-1.092.078-1.281.598-.189.519.078 1.093.598 1.281-.52-.189-1.093.079-1.281.599-.189.52.078 1.092.598 1.281.52.188 1.092-.078 1.281-.598L15.077 23l-6.815 2.48c-.189-.52-.763-.787-1.282-.598-.519.189-.786.762-.598 1.281.189.519.763.787 1.282.598-.52.19-.787.763-.598 1.282.188.52.763.786 1.281.598.519-.189.787-.763.598-1.282L18 24.065l9.055 3.295c-.19.52.079 1.093.598 1.282.519.188 1.093-.078 1.281-.598.189-.519-.078-1.093-.598-1.282.52.19 1.093-.078 1.282-.598.189-.519-.079-1.093-.597-1.281z"/><path fill="#E6E7E8" d="M18 7c-4 0-6 3.239-6 6 0 1.394.827 2.399 2 3.054V18c0 .553.448 1 1 1s1-.447 1-1v-1.216c.33.072.665.127 1 .162V18c0 .553.448 1 1 1s1-.447 1-1v-1.054c.335-.036.67-.09 1-.162V18c0 .553.447 1 1 1s1-.447 1-1v-1.946c1.173-.654 2-1.659 2-3.054 0-2.761-2-6-6-6zm-2.5 7c-.829 0-1.5 0-1.5-1.5 0-.829.671-1.5 1.5-1.5 1.5 0 1.5.671 1.5 1.5s-.671 1.5-1.5 1.5zm2.5 2c-.552 0-1-.224-1-.5s.448-.5 1-.5 1 .224 1 .5-.448.5-1 .5zm2.5-2c-.828 0-1.5-.671-1.5-1.5s0-1.5 1.5-1.5c.828 0 1.5.671 1.5 1.5 0 1.5-.672 1.5-1.5 1.5z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3f4.svg b/public/emoji/1f3f4.svg index a5cc70d4a..819ff64af 100644 --- a/public/emoji/1f3f4.svg +++ b/public/emoji/1f3f4.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M5 36c-1.104 0-2-.896-2-2V3c0-1.104.896-2 2-2s2 .896 2 2v31c0 1.104-.896 2-2 2z"/><path fill="#AAB8C2" d="M5 1c-1.105 0-2 .895-2 2v31c0 .276.224.5.5.5s.5-.224.5-.5V4.414C4 3.633 4.633 3 5.414 3H7c0-1.105-.895-2-2-2z"/><path fill="#8899A6" d="M5 36c-1.104 0-2-.896-2-2V3c0-1.104.896-2 2-2s2 .896 2 2v31c0 1.104-.896 2-2 2z"/><path fill="#AAB8C2" d="M5 1c-1.105 0-2 .895-2 2v31c0 .276.224.5.5.5s.5-.224.5-.5V4.414C4 3.633 4.633 3 5.414 3H7c0-1.105-.895-2-2-2z"/><path fill="#292F33" d="M32.415 3.09c-1.752-.799-3.615-1.187-5.698-1.187-2.518 0-5.02.57-7.438 1.122-2.418.551-4.702 1.072-6.995 1.072-1.79 0-3.382-.329-4.868-1.006-.309-.142-.67-.115-.956.068C6.173 3.343 6 3.66 6 4v19c0 .392.229.747.585.91 1.752.799 3.616 1.187 5.698 1.187 2.518 0 5.02-.57 7.438-1.122 2.418-.551 4.702-1.071 6.995-1.071 1.79 0 3.383.329 4.868 1.007.311.14.67.115.956-.069.287-.185.46-.502.46-.842V4c0-.392-.229-.748-.585-.91z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M5 36c-1.104 0-2-.896-2-2V3c0-1.104.896-2 2-2s2 .896 2 2v31c0 1.104-.896 2-2 2z"/><path fill="#AAB8C2" d="M5 1c-1.105 0-2 .895-2 2v31c0 .276.224.5.5.5s.5-.224.5-.5V4.414C4 3.633 4.633 3 5.414 3H7c0-1.105-.895-2-2-2z"/><path fill="#8899A6" d="M5 36c-1.104 0-2-.896-2-2V3c0-1.104.896-2 2-2s2 .896 2 2v31c0 1.104-.896 2-2 2z"/><path fill="#AAB8C2" d="M5 1c-1.105 0-2 .895-2 2v31c0 .276.224.5.5.5s.5-.224.5-.5V4.414C4 3.633 4.633 3 5.414 3H7c0-1.105-.895-2-2-2z"/><path fill="#31373D" d="M32.415 3.09c-1.752-.799-3.615-1.187-5.698-1.187-2.518 0-5.02.57-7.438 1.122-2.418.551-4.702 1.072-6.995 1.072-1.79 0-3.382-.329-4.868-1.006-.309-.142-.67-.115-.956.068C6.173 3.343 6 3.66 6 4v19c0 .392.229.747.585.91 1.752.799 3.616 1.187 5.698 1.187 2.518 0 5.02-.57 7.438-1.122 2.418-.551 4.702-1.071 6.995-1.071 1.79 0 3.383.329 4.868 1.007.311.14.67.115.956-.069.287-.185.46-.502.46-.842V4c0-.392-.229-.748-.585-.91z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f3f5.svg b/public/emoji/1f3f5.svg index 6e7f443f8..dfaa71867 100644 --- a/public/emoji/1f3f5.svg +++ b/public/emoji/1f3f5.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#553788" d="M30.119 16.486c-3.347 3.346-7.677 2.927-10.604 0-2.927-2.93-3.347-7.257 0-10.604 3.347-3.347 9.847-3.788 12.119-1.516 2.272 2.273 1.831 8.773-1.515 12.12zM16.485 30.119c-3.347 3.346-9.847 3.786-12.12 1.515-2.272-2.272-1.831-8.772 1.516-12.119 3.346-3.346 7.675-2.928 10.604 0 2.928 2.927 3.347 7.257 0 10.604z"/><path fill="#553788" d="M19.515 30.119c-3.346-3.346-2.927-7.676.001-10.604 2.928-2.928 7.257-3.347 10.604-.001 3.347 3.348 3.787 9.847 1.516 12.119-2.275 2.273-8.774 1.833-12.121-1.514zM5.881 16.485c-3.347-3.347-3.788-9.847-1.515-12.12 2.272-2.272 8.773-1.831 12.12 1.516 3.347 3.346 2.928 7.675 0 10.604-2.929 2.928-7.259 3.347-10.605 0z"/><path fill="#55ACEE" d="M26.999 25C22.581 25 20 21.865 20 18c.001-3.866 2.581-7 7-7 4.418 0 9 3.999 9 7s-4.582 7-9.001 7zM9 25c-4.418 0-9-4.001-9-7s4.582-7 9-7 7 3.134 7 7c0 3.865-2.582 7-7 7z"/><path fill="#55ACEE" d="M11 27c0-4.418 3.134-6.999 7-6.999s7 2.581 7 6.999c0 4.419-4 9-7 9s-7-4.581-7-9zm0-18c0-4.418 4-9 7-9s7 4.582 7 9-3.134 7-7 7-7-2.582-7-7z"/><path fill="#88C9F9" d="M23.656 23.657c-3.124 3.124-8.19 3.124-11.313 0-3.125-3.125-3.125-8.19 0-11.314 3.125-3.124 8.189-3.124 11.313 0 3.124 3.124 3.124 8.189 0 11.314z"/><path fill="#BBDDF5" d="M21.656 21.657c-2.02 2.02-5.294 2.02-7.313 0-2.02-2.021-2.02-5.295 0-7.314 2.02-2.02 5.294-2.02 7.313 0 2.02 2.019 2.02 5.294 0 7.314z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E95F28" d="M6.373 3.355c.162-.608.808-1.105 1.437-1.105h20.38c.629 0 1.275.497 1.436 1.105l5.08 19.113c.161.608-.119 1.412-.623 1.788L18.916 35.567c-.504.376-1.328.376-1.832 0L1.916 24.255c-.504-.376-.784-1.18-.623-1.788l5.08-19.112z"/><path fill="#FFAC33" d="M32.929 19.916c4.712-1.567.548-14.683-4.164-13.118-1.804.6-3.636 1.715-5.226 3.028.728-1.954 1.197-4.082 1.197-6.023 0-5.071-13.472-5.071-13.472 0 0 1.941.469 4.07 1.197 6.023C10.87 8.514 9.037 7.399 7.234 6.8 2.522 5.233-1.639 18.349 3.07 19.916c1.803.599 3.926.801 5.966.696-1.711 1.142-3.312 2.582-4.427 4.153-2.912 4.103 7.988 12.209 10.9 8.108 1.114-1.57 1.957-3.576 2.49-5.594.533 2.019 1.376 4.024 2.49 5.594 2.912 4.103 13.811-4.004 10.901-8.108-1.115-1.57-2.717-3.01-4.427-4.153 2.04.105 4.162-.097 5.966-.696z"/><path fill="#F4900C" d="M26.26 25.769c3.608 1.184 6.752-8.854 3.145-10.038-1.381-.453-3.005-.599-4.565-.513 1.305-.879 2.526-1.984 3.373-3.188 2.214-3.144-6.144-9.306-8.359-6.162-.848 1.204-1.486 2.738-1.888 4.282-.413-1.541-1.064-3.07-1.921-4.267-2.239-3.127-10.549 3.103-8.311 6.229.857 1.196 2.086 2.293 3.398 3.16-1.56-.074-3.183.087-4.56.55-3.599 1.213-.375 11.224 3.222 10.013 1.377-.464 2.776-1.322 3.988-2.33-.551 1.496-.903 3.124-.898 4.607.015 3.876 10.317 3.833 10.304-.042-.006-1.484-.371-3.109-.933-4.6 1.219 1.001 2.624 1.846 4.005 2.299z"/><path fill="#FFCC4D" d="M24.586 18.537c2.079-.691.242-6.478-1.837-5.787-.796.265-1.604.757-2.306 1.336.321-.862.528-1.801.528-2.657 0-2.237-5.944-2.237-5.944 0 0 .856.207 1.795.528 2.657-.701-.579-1.51-1.071-2.305-1.335-2.079-.691-3.915 5.095-1.837 5.787.796.264 1.732.354 2.632.307-.755.504-1.461 1.139-1.953 1.832-1.285 1.81 3.524 5.386 4.809 3.577.492-.693.863-1.578 1.098-2.468.235.891.607 1.775 1.098 2.468 1.285 1.81 6.093-1.767 4.809-3.577-.492-.693-1.199-1.328-1.953-1.832.901.045 1.837-.044 2.633-.308z"/><path fill="#EEE" d="M19.767 19.018c-.976.976-2.559.976-3.535 0-.976-.977-.976-2.56 0-3.536s2.559-.976 3.535 0 .976 2.559 0 3.536z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f403.svg b/public/emoji/1f403.svg index 2ffc9005c..33d0009fe 100644 --- a/public/emoji/1f403.svg +++ b/public/emoji/1f403.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M33.912 14.37C33.588 12.602 31.976 11 30 11H11c-.239 0-.521.135-.83.365C9.664 11.139 9.129 11 8.565 11c-1 0-4.731.375-5.565 2L.691 17.305C.016 19.27 1 22.087 3.027 22.087c.57 0 1.536-.007 2.665-.017 1.65.286 3.603 1.504 5.436 2.848C13.248 29.325 14.048 36 15 36c.964 0 2.529-4.409 2.913-7h9.124c.147 2.479.771 7 1.964 7 1.016 0 3.24-4.883 4.347-12.238.315-1.625.532-3.697.615-6.319.022.17.037.352.037.557v12c0 .553.447 1 1 1s1-.447 1-1V18c0-1.807-.749-3.053-2.088-3.63z"/><circle fill="#FFF" cx="6" cy="16" r="1"/><path fill="#99AAB5" d="M10 15c3 0 6.708-1.625 6.708-5.625 0-2-1.552-4.101-4.458-4.167C8.128 5.116 6.375 8 7 8.375 7.528 8.692 9 6.5 11.5 7c1.861.372 2.054 1.567 1.667 2.333C12.716 10.226 11 11 9 11s-1 4 1 4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M33.912 14.37C33.588 12.602 31.976 11 30 11H11c-.239 0-.521.135-.83.365C9.664 11.139 9.129 11 8.565 11c-1 0-4.731.375-5.565 2L.691 17.305C.016 19.27 1 22.087 3.027 22.087c.57 0 1.536-.007 2.665-.017 1.65.286 3.603 1.504 5.436 2.848C13.248 29.325 14.048 36 15 36c.964 0 2.529-4.409 2.913-7h9.124c.147 2.479.771 7 1.964 7 1.016 0 3.24-4.883 4.347-12.238.315-1.625.532-3.697.615-6.319.022.17.037.352.037.557v12c0 .553.447 1 1 1s1-.447 1-1V18c0-1.807-.749-3.053-2.088-3.63z"/><circle fill="#FFF" cx="6" cy="16" r="1"/><path fill="#99AAB5" d="M10 15c3 0 6.708-1.625 6.708-5.625 0-2-1.552-4.101-4.458-4.167C8.128 5.116 6.375 8 7 8.375 7.528 8.692 9 6.5 11.5 7c1.861.372 2.054 1.567 1.667 2.333C12.716 10.226 11 11 9 11s-1 4 1 4z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f404.svg b/public/emoji/1f404.svg index 283184c14..4c791dcc6 100644 --- a/public/emoji/1f404.svg +++ b/public/emoji/1f404.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M34 15c0-2-2.127-4.702-4-4-8 3-19-2-19-2-2.209 0-6.857 9.257-5 10 .277.111.541.227.799.343C4.648 20.087 4.283 21.809 6 22c9 1 6.896 14 8 14 1.344 0 2.685-2.614 3.422-5h9.8c.288 2.354.866 5 1.778 5 .866 0 2.611-3.542 3.794-9.142C33.528 24.232 34 20.326 34 15z"/><path fill="#292F33" d="M10 22c-2 0-4.946.087-6.973.087S-.617 18.609.692 17.305C2 16 6 15 5 11c-.542-2.169 4-3 6-2 4.816 2.408 5 10-2 10 0 0 3 3 1 3zm20-11c-2.586.97-5.485 1.101-8.226.838C20.669 13.231 20 15.031 20 17c0 4.418 3.357 8 7.5 8 2.587 0 4.866-1.396 6.215-3.521.181-1.872.285-4.017.285-6.479 0-2-2.127-4.702-4-4z"/><circle fill="#292F33" cx="17.5" cy="24.5" r="3.5"/><circle fill="#292F33" cx="30" cy="28" r="2"/><path fill="#CCD6DD" d="M11 9c0 .552-.671 1-1.5 1S5 7.552 5 7s2.23-.308 3 0c2.5 1 3 1.448 3 2z"/><circle fill="#CCD6DD" cx="8" cy="13" r="1"/><path fill="#292F33" d="M35 24c-.553 0-1-.447-1-1v-5c0-1.44-.561-2-2-2-.553 0-1-.448-1-1s.447-1 1-1c2.542 0 4 1.458 4 4v5c0 .553-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M34 15c0-2-2.127-4.702-4-4-8 3-19-2-19-2-2.209 0-6.857 9.257-5 10 .277.111.541.227.799.343C4.648 20.087 4.283 21.809 6 22c9 1 6.896 14 8 14 1.344 0 2.685-2.614 3.422-5h9.8c.288 2.354.866 5 1.778 5 .866 0 2.611-3.542 3.794-9.142C33.528 24.232 34 20.326 34 15z"/><path fill="#31373D" d="M10 22c-2 0-4.946.087-6.973.087S-.617 18.609.692 17.305C2 16 6 15 5 11c-.542-2.169 4-3 6-2 4.816 2.408 5 10-2 10 0 0 3 3 1 3zm20-11c-2.586.97-5.485 1.101-8.226.838C20.669 13.231 20 15.031 20 17c0 4.418 3.357 8 7.5 8 2.587 0 4.866-1.396 6.215-3.521.181-1.872.285-4.017.285-6.479 0-2-2.127-4.702-4-4z"/><circle fill="#31373D" cx="17.5" cy="24.5" r="3.5"/><circle fill="#31373D" cx="30" cy="28" r="2"/><path fill="#CCD6DD" d="M11 9c0 .552-.671 1-1.5 1S5 7.552 5 7s2.23-.308 3 0c2.5 1 3 1.448 3 2z"/><circle fill="#CCD6DD" cx="8" cy="13" r="1"/><path fill="#31373D" d="M35 24c-.553 0-1-.447-1-1v-5c0-1.44-.561-2-2-2-.553 0-1-.448-1-1s.447-1 1-1c2.542 0 4 1.458 4 4v5c0 .553-.447 1-1 1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f408.svg b/public/emoji/1f408.svg index 7997e6ee2..edb55b1f6 100644 --- a/public/emoji/1f408.svg +++ b/public/emoji/1f408.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 12c0-4.252-3.141-7-8-7-.553 0-1 .448-1 1s.447 1 1 1c1.804 0 6 .487 6 5 0 2.881-1.851 4.172-4.054 4.692-.164-.073-.328-.147-.509-.192C25.938 15.625 25 17 19 17c-4.165 0-5.439-4.407-6.832-7.106C11.802 7.848 10.801 4 10 4c-.61 0-1.405 2.027-1.933 4.062C7.41 6.527 6.553 5 6 5c-.711 0-1.42 2.525-1.771 4.706C2.362 10.981 1 12.827 1 15c0 3 7 5 7 5 2.118 1.104 2.743 2.767 3.305 4.276C13.367 30.66 13.119 36 14.5 36s2.5-3.357 2.5-7.5c0-.212-.005-.42-.011-.627 3.154-.101 6.755-1.075 9.79-.293C28.139 32.073 28.466 36 29.5 36c.958 0 1.79-3.784 2.209-7.484.031-.141.054-.297.054-.492l.01-.108c.032-.319.062-.636.088-.948l.515-5.592c0-1.112-.254-2.217-.754-3.103C34.449 17.221 36 15.059 36 12z"/><circle fill="#292F33" cx="7" cy="13" r="1"/><path fill="#292F33" d="M3 13.375C2 14 2 16 1.5 16S0 14.824 0 13.375c0-1.45 4.229-.769 3 0z"/><path fill="#662113" d="M3 16.5c-.184 0-.36-.101-.448-.276-.124-.247-.023-.547.224-.671 2.141-1.07 6.174-.08 6.345-.038.268.067.431.338.364.606-.067.267-.339.427-.606.364-.039-.01-3.847-.942-5.655-.038-.072.036-.148.053-.224.053z"/><path fill="#662113" d="M8 18.5c-.095 0-.191-.027-.277-.084C7.694 18.396 4.824 16.5 3 16.5c-.276 0-.5-.224-.5-.5s.224-.5.5-.5c2.127 0 5.15 1.999 5.277 2.084.229.153.292.463.139.693-.096.145-.255.223-.416.223z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F18F26" d="M10.478 22.439s.702 2.281-.337 7.993c-.186 1.025-.46 2.072-.599 2.93-1.757 0-1.851 2.002-1.478 2.002h2.094c1.337 0 2.971-3.334 3.854-7.961s-3.534-4.964-3.534-4.964zm13.042 3.702s2.272 1.22 2.188 4.081c-.033 1.131-.249 2.091-.355 3.024-1.832 0-1.839 1.985-1.305 1.985h1.856c.923 0 3.001-3.158 3.379-7.281.379-4.122-5.763-1.809-5.763-1.809z"/><path fill="#FFCC4E" d="M36 8.447C36 3.525 31.859 1 27 1c-.553 0-1 .448-1 1s.447 1 1 1c1.804 0 6.717.934 6.717 5.447 0 2.881-1.567 5.462-3.77 5.982-.164-.073-.345-.104-.509-.192-7.239-3.917-13.457.902-15.226-.29-1.752-1.182-.539-3.255-2.824-5.243-.33-1.841-1.073-4.477-1.794-4.477-.549 0-1.265 1.825-1.74 3.656-.591-1.381-1.363-2.756-1.86-2.756-.64 0-1.278 2.273-1.594 4.235-1.68 1.147-2.906 2.809-2.906 4.765 0 2.7 4.05 3.357 5.4 3.411 1.35.054 3.023 3.562 3.585 5.072 1.242 4.367 2.051 8.699 2.698 11.183-1.649 0-1.804 2.111-1.348 2.111.713 0 1.953-.003 2.225 0 1.381.014 2.026-4.706 2.026-8.849 0-.212-.011-.627-.011-.627s1.93.505 6.038-.208c2.444-.424 5.03.849 5.746 3.163.527 1.704 1.399 3.305 1.868 4.484-1.589 0-1.545 2.037-1.084 2.037.787 0 1.801.014 2.183 0 1.468-.055.643-7.574 1.03-10.097s1.267-5.578-.229-8.797C34.857 15.236 36 11.505 36 8.447z"/><circle fill="#292F33" cx="5.994" cy="11.768" r=".9"/><path fill="#E75A70" d="M2.984 12.86c-.677.423-.677 1.777-1.015 1.777S.954 13.841.954 12.86c-.001-.981 2.862-.52 2.03 0z"/><path fill="#FEE7B8" d="M6.578 14.343c-.041.026-.09.036-.142.026-.018-.004-1.548-.241-2.545.146-.129.05-.341-.023-.413-.191s.023-.365.152-.415c1.44-.569 2.857-.234 2.934-.218.139.029.195.19.188.372-.004.114-.104.235-.174.28zm-.472 2.339c-.048.009-.097-.001-.141-.031-.015-.01-1.331-.83-2.402-.853-.138-.003-.305-.154-.305-.341 0-.186.165-.335.304-.333 1.552.024 2.724.891 2.789.937.117.082.104.255.027.424-.049.107-.189.182-.272.197z"/><path fill="#F18F26" d="M7.854 7.881s.372-.039.859.033c.217-.46.585-.887.585-.887s.281.668.386 1.179c.025.12.218.117.322.189 0 0 .038-3.463-.863-3.836.001-.002-.755 1.124-1.289 3.322zM4.399 9.36s.384-.267.883-.574c.217-.624.568-1.333.568-1.333s.307.602.345.81c.21-.114.21-.106.403-.19 0 0-.114-2.286-1.099-2.527 0 0-.732 1.372-1.1 3.814z"/><path fill="#FD9" d="M18.45 23.644c-2.649.57-2.38 2.782-2.38 2.782s1.93.505 6.038-.208c1.067-.185 2.153-.03 3.107.377-1.607-3.047-4.315-3.479-6.765-2.951z"/><path fill="#F18F26" d="M14.686 14.109c.476.676 2.397 2.368 2.745 2.159.338-.203.59-2.055.342-2.706-1.329.359-2.385.658-3.087.547zm7.024 2.689c.623.138 1.507-2.979 1.41-4.123-1.449.017-2.78.256-3.965.537.335 1.08 1.953 3.452 2.555 3.586zm2.627-4.082c.042.723.982 2.603 1.285 2.737.307.137 1.685-1.319 1.866-2.061-1.086-.378-2.142-.597-3.151-.676z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f415-200d-1f9ba.svg b/public/emoji/1f415-200d-1f9ba.svg new file mode 100644 index 000000000..0ba7fb30e --- /dev/null +++ b/public/emoji/1f415-200d-1f9ba.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M28.048 33.061c3.843 1.9 6.261-2.333 4.773-4.752-1.204-1.957-3.696-1.547-3.256-2.047.698-.791 2.665-1.138 4.558.093 1.86 1.209 2.372 5.116.512 7.07-1.59 1.67-6.038 2.588-8.512-.326-4.719-5.558-1.273-1.619 1.925-.038z"/><path fill="#C1694F" d="M12.203 21.604s1.263 3.215 4.339 6.1c-3.174 2.721-1.395 4.884.261 5.508-1.656.527-1.282 2.047-.731 2.047h2.646c.951 0 1.092-3.442.206-7.694-.885-4.251-6.721-5.961-6.721-5.961z"/><path fill="#C1694F" d="M9.635 21.739s.393 3.057.279 6.593c-.07 2.163-.384 3.93-.612 4.866-1.812 0-1.652 2.064-1.268 2.064h2.902c.683 0 1.893-3.438 2.212-8.209.317-4.771-3.513-5.314-3.513-5.314z"/><path fill="#D99E82" d="M25.448 21.797c-2.407-3.139-4.928-5.403-8.368-8.165-2.401-1.928-2.514-5.196-2.514-6.029 0-3.626-3.244-5.455-6.496-4.229-.779.293-1.402 1.33-1.754 1.872-1.978 3.037-4.659.015-4.918 2.822-.313 3.395 1.721 4.534 5.051 4.821 1.892.163 2.425 1.069 2.838 5.018.154 1.472-.433 3.802 1.411 5.822.78 2.959.507 7.08-.091 9.756-2.252.476-1.341 2.179-1.341 2.179s2.858-.043 3.543-.043c.814 0 2.146-5.639 1.849-9.067.942 1.151 1.517 1.762 2.581 2.267-1.116 1-1.081 2.512-.523 3.419.467.759 1.326.872 2.147 1.22-1.602.52-1.091 1.732-.909 2.122 1.083-.043 7.918-.043 8.197-.043 1.11 0 2.985-2.503 2.897-5.488-.078-2.64-1.581-5.62-3.6-8.254z"/><path fill="#F4C7B5" d="M18.114 28.212c-.145-.109-.374-.234-.7-.385-.985-.456-2.076-1.517-2.791-2.18.019.346.026.707.035.907.942 1.151 1.517 1.762 2.581 2.267.143-.192.461-.405.875-.609z"/><path fill="#C1694F" d="M16.425 29.076c.93-1.419 3.988-1.93 6.081-1.686 0 0-5.452.086-6.058 2.663-.371 1.582-.857.295-.023-.977z"/><path fill="#C1694F" d="M16.52 32.572c.488.556 1.208 1.341 2.13.959 1.08-.449 2.235-.228 3.718-.245 0 0-.04-.248-.89-.227-2.093.052-4.587.105-5.093-1.587-.466-1.557-.868-.043.135 1.1z"/><path fill="#F4C7B5" d="M10.665 23.689c-1.065-4.822.12-9.98-3.638-10.713 1.428.317 1.893 1.42 2.259 4.931.154 1.463-.422 3.772 1.379 5.782z"/><path fill="#272B2B" d="M2.503 8.326c-.109.762-.494 1.192-.879 1.133C.864 9.342.232 8.372.232 7.603s.624-.963 1.392-.928c1.043.048 1.002.788.879 1.651z"/><path fill="#662113" d="M15.167 9.495c.348 2.515-1.157 2.898-2.383 2.898s-3.054-1.25-2.748-3.77c.134-1.107.555-2.193.809-3.175.336-1.303 1.199-1.732 1.894-1.367 1.665.873 2.203 3.796 2.428 5.414z"/><circle fill="#292F33" cx="8.069" cy="6.675" r=".928"/><circle fill="#C1694F" cx="3.053" cy="10.503" r=".488"/><circle fill="#C1694F" cx="3.695" cy="9.804" r=".269"/><circle fill="#C1694F" cx="4.1" cy="10.503" r=".269"/><path fill="#A0041E" d="M16.873 13.091c-.461 0-.746-.018-.797-.021-.275-.019-.483-.257-.465-.533.018-.274.237-.484.532-.465.056.002 5.985.36 10.488-2.668C31.069 6.42 31.472.979 31.476.925c.019-.275.257-.488.531-.467.275.018.484.254.467.53-.016.243-.43 5.981-5.284 9.246-3.833 2.576-8.477 2.857-10.317 2.857z"/><path fill="#292F33" d="M8.588 14.077c1.116-.14 4.486-.19 7.023-2.093.558-.419 1.326.913.93 1.163-3.209 2.023-6.965 2.279-7.814 2.279-.464-.001-.73-1.276-.139-1.349zm.628 3.602c.844.244 2.594.28 3.39.235.796-.045 6.165-.723 6.165-.723l.189 1.445s-5.659.826-6.554.943c-.896.117-3.1.802-3.1.802s-.255-.615-.32-1.289c-.065-.684.23-1.413.23-1.413zm10.929 4.999l1.377.958s-2.545 3.872-4.874 5.086l-1.249-1.237s1.303-.867 2.439-2.099c1.196-1.299 2.307-2.708 2.307-2.708z"/><path fill="#A0041E" d="M19.472 14.821c1.485 1.412 4.14 4.233 5.953 6.558.389.499-.791 1.488-1.349 2.14s-2.437 2.632-3.581 1.442c-1.163-1.209-3.256-3.163-4.791-4.698-1.079-1.079-1.007-2.648-.093-3.349.591-.453 1.302-1.349 1.256-2.465-.019-.458.151-.964.558-.977.453-.014 1.186.53 2.047 1.349z"/><path fill="#F4ABBA" d="M16.109 16.439c2.116 1.975 5.568 5.504 7.386 7.695.247-.239.451-.464.581-.615.149-.174.343-.373.539-.58-2.256-2.974-5.86-6.334-7.784-7.987-.095.591-.386 1.1-.722 1.487z"/><path fill="#F5F8FA" d="M16.684 15.494c-.073.188-.162.364-.265.526 2.371 2.083 5.793 5.612 7.545 7.627l.113-.129c.082-.096.179-.2.281-.307-2.134-2.582-6.124-6.373-7.674-7.717z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f415.svg b/public/emoji/1f415.svg index 903aabe0f..c959deb9d 100644 --- a/public/emoji/1f415.svg +++ b/public/emoji/1f415.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M29 15.889s6 0 4-6c-1-3 1-1 2 1s2 8-5 7-1-2-1-2z"/><path fill="#D99E82" d="M32.958 19.841c.027-.314.042-.597.042-.841 0-.658-.062-1-.171-1.123-.897-2.946-5.523-2.896-10.854-2.879C18.989 14.975 17 10.898 17 10c0-5-4.848-6.182-7.5-3C7 10 2 6.962 2 10c0 5 3.358 8 7.5 8 .648 0 1.736-.149 3.01-.381C13.451 19.266 13.9 21.5 14 22c.024.119.05.234.075.353C14.51 26.973 16.756 36 18 36c1.07 0 1.681-2.484 1.902-5.4.886.259 1.91.4 3.098.4 1.112 0 2.137-.247 3.078-.659C26.283 33.368 26.898 36 28 36c1.292 0 4.544-11.5 4.956-16.145l.002-.014z"/><path fill="#662113" d="M4 10.5c0 .829-1.171 1.5-2 1.5S.5 10.829.5 10 1.171 9 2 9c2 0 2 .671 2 1.5zM18 12c0 3.038-1.344 3.5-3 3.5-1.657 0-3-.462-3-3.5s.343-7 2-7 4 3.962 4 7z"/><circle fill="#292F33" cx="10" cy="9" r="1"/><ellipse fill="#C1694F" cx="28" cy="19.5" rx="3" ry="2.5"/><circle fill="#C1694F" cx="22.5" cy="18.5" r="1.5"/><circle fill="#C1694F" cx="24.5" cy="23.5" r="1.5"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M31.034 14.374c3.508-.65 3.587-6.297-.051-6.254-2.847.034-2.56 2.795-2.945 2.252-.748-1.055-.989-3.769 1.862-4.894 2.461-.971 5.846.996 6.063 4.591.139 2.302-1.297 6.554-6.453 5.846-7.222-.991-1.983-.892 1.524-1.541z"/><path fill="#C1694F" d="M10.321 21.935s1.016 2.352.676 8.242c-.061 1.057-.209 2.136-.242 3.022-1.812 0-1.652 2.064-1.268 2.064h2.902c.683 0 1.893-3.438 2.212-8.209.319-4.772-4.28-5.119-4.28-5.119zm11.89-.331s.575 3.528 3.651 6.413c.257 1.163.769 4.232.949 5.195-1.889 0-1.282 2.047-.731 2.047h2.646c.951 0 1.092-3.442.206-7.694-.885-4.251-6.721-5.961-6.721-5.961z"/><path fill="#D99E82" d="M32.202 15.654c-1.253-3.752-7.214-3.628-13.997-2.765-3.055.389-3.64-4.453-3.64-5.286 0-3.626-3.244-5.455-6.496-4.229-.779.293-1.402 1.33-1.754 1.872-1.977 3.037-4.658.015-4.917 2.822-.313 3.395 1.721 4.534 5.051 4.821 1.892.163 3.459 1.095 3.871 5.044.154 1.472-.295 5.644 2.388 7.076.78 2.959 1.836 6.615 2.25 8.475-2.252.476-1.341 2.179-1.341 2.179s3.151-.043 3.836-.043c.814 0 .191-5.976-.935-9.787 4.764.043 7.828-1.337 8.799-1.762 1.028 2.96 4.152 3.633 4.851 4.892.433.78 1.878 3.383 2.001 4.496-1.602.52-1.091 1.732-.909 2.122 1.083-.043 3.22-.043 3.498-.043 1.11 0-1.137-6.904-2.083-8.713-1.082-2.071.781-7.419-.473-11.171z"/><path fill="#F4C7B5" d="M16.266 24.464c.044.371.141.891.253 1.369 4.764.043 7.828-1.337 8.799-1.762-.215-.78-.23-1.27-.171-1.538-3.394.557-4.548 2.205-8.881 1.931zM6.449 12.889c1.892.163 2.425 1.069 2.838 5.018.154 1.472.739 5.67 3.421 7.102-.72-2.788-1.959-12.388-6.259-12.12z"/><path fill="#F4C7B5" d="M3.153 6.665c-2.793 0-1.909.526-2.002 1.692-.093 1.166-.074 2.976.776 3.929 1.127 1.262 3.858 1.266 5.215.277s-.424-5.898-3.989-5.898z"/><path fill="#272B2B" d="M2.503 8.326c-.109.762-.494 1.192-.879 1.133C.864 9.342.232 8.372.232 7.603s.624-.963 1.392-.928c1.043.048 1.002.788.879 1.651z"/><path fill="#662113" d="M15.167 9.026c.348 2.515-1.157 2.898-2.383 2.898s-3.054-1.25-2.748-3.77c.134-1.107.555-2.193.809-3.175.336-1.303 1.199-1.732 1.894-1.367 1.665.874 2.203 3.797 2.428 5.414z"/><circle fill="#292F33" cx="8.069" cy="6.675" r=".928"/><path fill="#C1694F" d="M19.035 12.789c.073 1.532.906 3.178 2.733 3.663 1.901.505 4.12.127 4.67-2.475.091-.43.13-1.224.073-1.514-2.151-.179-4.73 0-7.476.326z"/><circle fill="#D99E82" cx="3.053" cy="10.503" r=".488"/><circle fill="#D99E82" cx="3.695" cy="9.804" r=".269"/><circle fill="#D99E82" cx="4.1" cy="10.503" r=".269"/></svg> \ No newline at end of file diff --git a/public/emoji/1f41c.svg b/public/emoji/1f41c.svg index cd644d968..385b616e8 100644 --- a/public/emoji/1f41c.svg +++ b/public/emoji/1f41c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M7.5 24.516c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.024 0-1.414L22.81 6.793c.391-.391 1.023-.391 1.414 0s.391 1.024 0 1.414L8.207 24.223c-.196.195-.452.293-.707.293zm8.282-11.738c-.219 0-.438-.071-.623-.218-.431-.344-.502-.971-.161-1.403.113-.144 2.571-3.361.971-7.572-.196-.517.063-1.094.579-1.29.518-.196 1.094.064 1.29.579 2.017 5.307-1.139 9.357-1.274 9.527-.197.248-.488.377-.782.377zm3.89 3.888c-.221 0-.441-.072-.626-.221-.429-.345-.499-.97-.156-1.4.138-.172 3.435-4.197 9.323-2.726.536.134.862.677.727 1.213-.134.535-.679.861-1.212.728-4.623-1.157-7.172 1.905-7.278 2.036-.197.243-.487.37-.778.37zM6.454 18.511c-1.096 0-2.301-.186-3.58-.671-.517-.196-.776-.773-.58-1.29.195-.517.775-.775 1.29-.58 4.219 1.604 7.439-.866 7.574-.972.434-.338 1.062-.266 1.403.166.342.432.271 1.058-.159 1.4-.129.103-2.495 1.947-5.948 1.947zm1.564-8.066c-1.829 0-4.968-.482-7.542-3.332-.37-.41-.338-1.042.072-1.412.411-.371 1.043-.337 1.412.072C4.984 9.122 8.976 8.392 9.146 8.36c.538-.105 1.066.246 1.173.787.107.54-.241 1.064-.781 1.174-.069.014-.644.124-1.52.124z"/><path fill="#292F33" d="M9.341 10.341c-.066 0-.132-.006-.199-.02-.541-.109-.89-.635-.783-1.175.034-.173.76-4.163-2.587-7.185C5.362 1.591 5.33.959 5.7.549 6.069.14 6.702.106 7.113.477c4.214 3.806 3.251 8.849 3.207 9.062-.096.475-.513.802-.979.802zm3.948 18.63c-.448 0-.856-.303-.969-.758-1.473-5.895 2.554-9.186 2.726-9.323.431-.344 1.061-.273 1.405.159.343.431.273 1.058-.156 1.402-.14.114-3.187 2.667-2.035 7.277.134.535-.192 1.078-.728 1.212-.081.021-.163.031-.243.031z"/><path fill="#292F33" d="M29.844 19.167c-2.96-2.959-6.095-3.569-8.915-2.069-.157-1.874-1.166-4.007-2.521-5.363-1.488-1.488-3.008-1.653-4.405-1.044 1.058-2.465.6-5.43-.826-6.856-1.843-1.843-4.594-.411-7.174 2.168-2.58 2.58-4.012 5.331-2.168 7.174 1.425 1.426 4.391 1.883 6.856.826-.61 1.397-.444 2.918 1.044 4.405 1.354 1.354 3.489 2.363 5.363 2.521-1.5 2.82-.891 5.954 2.069 8.915 3.75 3.749 12.204 5.527 14.204 3.527s.223-10.455-3.527-14.204z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M7.5 24.516c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.024 0-1.414L22.81 6.793c.391-.391 1.023-.391 1.414 0s.391 1.024 0 1.414L8.207 24.223c-.196.195-.452.293-.707.293zm8.282-11.738c-.219 0-.438-.071-.623-.218-.431-.344-.502-.971-.161-1.403.113-.144 2.571-3.361.971-7.572-.196-.517.063-1.094.579-1.29.518-.196 1.094.064 1.29.579 2.017 5.307-1.139 9.357-1.274 9.527-.197.248-.488.377-.782.377zm3.89 3.888c-.221 0-.441-.072-.626-.221-.429-.345-.499-.97-.156-1.4.138-.172 3.435-4.197 9.323-2.726.536.134.862.677.727 1.213-.134.535-.679.861-1.212.728-4.623-1.157-7.172 1.905-7.278 2.036-.197.243-.487.37-.778.37zM6.454 18.511c-1.096 0-2.301-.186-3.58-.671-.517-.196-.776-.773-.58-1.29.195-.517.775-.775 1.29-.58 4.219 1.604 7.439-.866 7.574-.972.434-.338 1.062-.266 1.403.166.342.432.271 1.058-.159 1.4-.129.103-2.495 1.947-5.948 1.947zm1.564-8.066c-1.829 0-4.968-.482-7.542-3.332-.37-.41-.338-1.042.072-1.412.411-.371 1.043-.337 1.412.072C4.984 9.122 8.976 8.392 9.146 8.36c.538-.105 1.066.246 1.173.787.107.54-.241 1.064-.781 1.174-.069.014-.644.124-1.52.124z"/><path fill="#31373D" d="M9.341 10.341c-.066 0-.132-.006-.199-.02-.541-.109-.89-.635-.783-1.175.034-.173.76-4.163-2.587-7.185C5.362 1.591 5.33.959 5.7.549 6.069.14 6.702.106 7.113.477c4.214 3.806 3.251 8.849 3.207 9.062-.096.475-.513.802-.979.802zm3.948 18.63c-.448 0-.856-.303-.969-.758-1.473-5.895 2.554-9.186 2.726-9.323.431-.344 1.061-.273 1.405.159.343.431.273 1.058-.156 1.402-.14.114-3.187 2.667-2.035 7.277.134.535-.192 1.078-.728 1.212-.081.021-.163.031-.243.031z"/><path fill="#31373D" d="M29.844 19.167c-2.96-2.959-6.095-3.569-8.915-2.069-.157-1.874-1.166-4.007-2.521-5.363-1.488-1.488-3.008-1.653-4.405-1.044 1.058-2.465.6-5.43-.826-6.856-1.843-1.843-4.594-.411-7.174 2.168-2.58 2.58-4.012 5.331-2.168 7.174 1.425 1.426 4.391 1.883 6.856.826-.61 1.397-.444 2.918 1.044 4.405 1.354 1.354 3.489 2.363 5.363 2.521-1.5 2.82-.891 5.954 2.069 8.915 3.75 3.749 12.204 5.527 14.204 3.527s.223-10.455-3.527-14.204z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f41d.svg b/public/emoji/1f41d.svg index 3a7f3b5b9..31e788280 100644 --- a/public/emoji/1f41d.svg +++ b/public/emoji/1f41d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M27.816 23.464c.299-1.148.465-2.318.465-3.464 0-4.161-2.122-6.779-5.258-8.035.417-1.008.665-2.108.665-3.2 0-1.581-.495-2.498-1.315-3.032 1.091-.482 2.517-1.5 3.027-2.011.781-.781.94-1.889.354-2.475-.586-.586-1.693-.428-2.475.354-.611.611-1.948 2.53-2.223 3.619C20.172 5.025 19.126 5 18 5c-1.125 0-2.172.025-3.055.219-.275-1.089-1.612-3.007-2.223-3.619-.781-.781-1.889-.94-2.475-.354-.585.587-.427 1.694.354 2.476.511.511 1.937 1.529 3.027 2.011-.821.533-1.316 1.451-1.316 3.032 0 1.093.248 2.192.665 3.2C9.841 13.221 7.719 15.839 7.719 20c0 1.146.167 2.317.465 3.464v.023l.006-.003c1.209 4.621 4.643 8.847 8.812 9.44L17 33c0 1.657.448 3 1 3 .553 0 1-1.343 1-3 0-.026-.002-.049-.003-.075 4.169-.593 7.604-4.819 8.813-9.44l.006.003v-.024z"/><path d="M14.624 19h6.752c-1.462-1.424-2.615-2.881-3.106-4h-.54c-.491 1.119-1.644 2.576-3.106 4zm-5.378 4c-.361.187-.715.349-1.062.488.32 1.219.799 2.407 1.401 3.512h16.83c.602-1.105 1.082-2.293 1.401-3.512-.347-.139-.701-.301-1.063-.488H9.246zm3.593 8c1.518 1.234 3.278 2 5.161 2 1.884 0 3.643-.766 5.162-2H12.839z" fill="#FFCC4D"/><path fill="#CCD6DD" d="M18 13.505c0 2.647-7.858 8.584-12 8.584s-6-2.443-6-5.09c0-2.646 1.858-4.495 6-4.495 4.143.001 12-1.644 12 1.001zm0 0c0 2.647 7.857 8.584 12 8.584s6-2.443 6-5.09c0-2.646-1.857-4.495-6-4.495s-12-1.644-12 1.001z"/><path fill="#99AAB5" d="M2 19c-.552 0-1-.447-1-1 0-.551.446-.999.998-1 .048 0 4.949-.07 13.596-3.914.505-.227 1.096.002 1.32.507.225.505-.003 1.096-.507 1.32C7.317 18.953 2.213 19 2 19zm32 0c-.213 0-5.316-.047-14.406-4.086-.505-.224-.731-.815-.508-1.32.225-.504.817-.732 1.32-.507C29.054 16.93 33.954 17 34.003 17c.551.003.997.452.996 1.003-.002.551-.448.997-.999.997z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M27.816 23.464c.299-1.148.465-2.318.465-3.464 0-4.161-2.122-6.779-5.258-8.035.417-1.008.665-2.108.665-3.2 0-1.581-.495-2.498-1.315-3.032 1.091-.482 2.517-1.5 3.027-2.011.781-.781.94-1.889.354-2.475-.586-.586-1.693-.428-2.475.354-.611.611-1.948 2.53-2.223 3.619C20.172 5.025 19.126 5 18 5c-1.125 0-2.172.025-3.055.219-.275-1.089-1.612-3.007-2.223-3.619-.781-.781-1.889-.94-2.475-.354-.585.587-.427 1.694.354 2.476.511.511 1.937 1.529 3.027 2.011-.821.533-1.316 1.451-1.316 3.032 0 1.093.248 2.192.665 3.2C9.841 13.221 7.719 15.839 7.719 20c0 1.146.167 2.317.465 3.464v.023l.006-.003c1.209 4.621 4.643 8.847 8.812 9.44L17 33c0 1.657.448 3 1 3 .553 0 1-1.343 1-3 0-.026-.002-.049-.003-.075 4.169-.593 7.604-4.819 8.813-9.44l.006.003v-.024z"/><path d="M14.624 19h6.752c-1.462-1.424-2.615-2.881-3.106-4h-.54c-.491 1.119-1.644 2.576-3.106 4zm-5.378 4c-.361.187-.715.349-1.062.488.32 1.219.799 2.407 1.401 3.512h16.83c.602-1.105 1.082-2.293 1.401-3.512-.347-.139-.701-.301-1.063-.488H9.246zm3.593 8c1.518 1.234 3.278 2 5.161 2 1.884 0 3.643-.766 5.162-2H12.839z" fill="#FFCC4D"/><path fill="#CCD6DD" d="M18 13.505c0 2.647-7.858 8.584-12 8.584s-6-2.443-6-5.09c0-2.646 1.858-4.495 6-4.495 4.143.001 12-1.644 12 1.001zm0 0c0 2.647 7.857 8.584 12 8.584s6-2.443 6-5.09c0-2.646-1.857-4.495-6-4.495s-12-1.644-12 1.001z"/><path fill="#99AAB5" d="M2 19c-.552 0-1-.447-1-1 0-.551.446-.999.998-1 .048 0 4.949-.07 13.596-3.914.505-.227 1.096.002 1.32.507.225.505-.003 1.096-.507 1.32C7.317 18.953 2.213 19 2 19zm32 0c-.213 0-5.316-.047-14.406-4.086-.505-.224-.731-.815-.508-1.32.225-.504.817-.732 1.32-.507C29.054 16.93 33.954 17 34.003 17c.551.003.997.452.996 1.003-.002.551-.448.997-.999.997z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f41e.svg b/public/emoji/1f41e.svg index 20159b5b9..f314ca9a2 100644 --- a/public/emoji/1f41e.svg +++ b/public/emoji/1f41e.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M35 21H1c-.552 0-1-.447-1-1s.448-1 1-1h34c.553 0 1 .447 1 1s-.447 1-1 1zm-22.177-2l-.069-.002c-.092-.007-9.214-.714-10.734-8.235-.109-.542.241-1.069.782-1.178.543-.113 1.069.241 1.178.782 1.221 6.044 8.833 6.631 8.91 6.636.551.038.967.515.93 1.066-.036.527-.476.931-.997.931zM3 31c-.142 0-.286-.03-.423-.094-.5-.234-.716-.829-.482-1.33 3.166-6.77 11.038-7.721 11.372-7.758.548-.056 1.042.334 1.103.882.062.548-.332 1.043-.88 1.106-.071.008-7.099.876-9.783 6.617-.171.364-.532.577-.907.577zm19.753-12c-.522 0-.961-.405-.996-.934-.036-.551.381-1.027.931-1.064.081-.005 8.116-.617 9.332-6.636.108-.541.633-.895 1.179-.782.541.109.892.637.782 1.178-1.521 7.525-10.769 8.21-11.162 8.235l-.066.003zm10.248 12c-.377 0-.737-.213-.907-.576-2.694-5.763-10.124-6.609-10.198-6.617-.55-.058-.948-.55-.89-1.099.058-.55.555-.952 1.099-.89.352.037 8.634.983 11.802 7.758.233.501.018 1.096-.482 1.33-.139.064-.282.094-.424.094z" fill="#292F33"/><path fill="#292F33" d="M24.989 7.766c-.069-2.626-1.277-4.216-3.095-5.04C21.961 2.5 22 2.257 22 2c0-1.105-.672-2-1.5-2S19 .895 19 2c0 .015.003.028.003.043C18.675 2.017 18.342 2 18 2s-.675.017-1.003.043c0-.015.003-.028.003-.043 0-1.105-.671-2-1.5-2S14 .895 14 2c0 .257.04.5.106.726-1.817.824-3.025 2.414-3.095 5.04C7.98 9.551 6 12.662 6 17c0 7.159 5.373 16.923 12 16.923 6.628 0 12-9.764 12-16.923 0-4.338-1.98-7.45-5.011-9.234z"/><path fill="#DD2E44" d="M16.001 34.959C9.564 34.364 4.5 28.064 4.5 20.378 4.5 12.693 9.564 9.597 16 9c.33-.03 1-.046 1 2.294v22.541c0 1.171-.669 1.156-.999 1.124zm3.998 0c6.436-.595 11.501-6.895 11.501-14.581C31.5 12.693 26.435 9.597 20 9c-.33-.03-1-.046-1 2.294v22.541c0 1.171.67 1.156.999 1.124z"/><g fill="#292F33"><circle cx="13" cy="15" r="2"/><circle cx="10" cy="22" r="3"/><circle cx="13" cy="29" r="2"/><circle cx="24.5" cy="14.5" r="2.5"/><circle cx="22.5" cy="20.5" r="1.5"/><circle cx="28" cy="23" r="2"/><circle cx="24" cy="29" r="3"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M35 21H1c-.552 0-1-.447-1-1s.448-1 1-1h34c.553 0 1 .447 1 1s-.447 1-1 1zm-22.177-2l-.069-.002c-.092-.007-9.214-.714-10.734-8.235-.109-.542.241-1.069.782-1.178.543-.113 1.069.241 1.178.782 1.221 6.044 8.833 6.631 8.91 6.636.551.038.967.515.93 1.066-.036.527-.476.931-.997.931zM3 31c-.142 0-.286-.03-.423-.094-.5-.234-.716-.829-.482-1.33 3.166-6.77 11.038-7.721 11.372-7.758.548-.056 1.042.334 1.103.882.062.548-.332 1.043-.88 1.106-.071.008-7.099.876-9.783 6.617-.171.364-.532.577-.907.577zm19.753-12c-.522 0-.961-.405-.996-.934-.036-.551.381-1.027.931-1.064.081-.005 8.116-.617 9.332-6.636.108-.541.633-.895 1.179-.782.541.109.892.637.782 1.178-1.521 7.525-10.769 8.21-11.162 8.235l-.066.003zm10.248 12c-.377 0-.737-.213-.907-.576-2.694-5.763-10.124-6.609-10.198-6.617-.55-.058-.948-.55-.89-1.099.058-.55.555-.952 1.099-.89.352.037 8.634.983 11.802 7.758.233.501.018 1.096-.482 1.33-.139.064-.282.094-.424.094z" fill="#31373D"/><path fill="#31373D" d="M24.989 7.766c-.069-2.626-1.277-4.216-3.095-5.04C21.961 2.5 22 2.257 22 2c0-1.105-.672-2-1.5-2S19 .895 19 2c0 .015.003.028.003.043C18.675 2.017 18.342 2 18 2s-.675.017-1.003.043c0-.015.003-.028.003-.043 0-1.105-.671-2-1.5-2S14 .895 14 2c0 .257.04.5.106.726-1.817.824-3.025 2.414-3.095 5.04C7.98 9.551 6 12.662 6 17c0 7.159 5.373 16.923 12 16.923 6.628 0 12-9.764 12-16.923 0-4.338-1.98-7.45-5.011-9.234z"/><path fill="#DD2E44" d="M16.001 34.959C9.564 34.364 4.5 28.064 4.5 20.378 4.5 12.693 9.564 9.597 16 9c.33-.03 1-.046 1 2.294v22.541c0 1.171-.669 1.156-.999 1.124zm3.998 0c6.436-.595 11.501-6.895 11.501-14.581C31.5 12.693 26.435 9.597 20 9c-.33-.03-1-.046-1 2.294v22.541c0 1.171.67 1.156.999 1.124z"/><g fill="#31373D"><circle cx="13" cy="15" r="2"/><circle cx="10" cy="22" r="3"/><circle cx="13" cy="29" r="2"/><circle cx="24.5" cy="14.5" r="2.5"/><circle cx="22.5" cy="20.5" r="1.5"/><circle cx="28" cy="23" r="2"/><circle cx="24" cy="29" r="3"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f42c.svg b/public/emoji/1f42c.svg index 35a3aea22..ee782f2f2 100644 --- a/public/emoji/1f42c.svg +++ b/public/emoji/1f42c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M34.559 18c0-3.918-1.515-7.474-3.975-10.146.27-1.728 1.028-3.908 2.975-5.854.704-.704.25-2-1-2 0 0-6.061.007-9.893 3.327C21.663 3.115 20.625 3 19.559 3c-8 0-12 4-14 12-.444 1.778-.865 1.399-3 3-1.195.896-2.117 3 1 3 3 0 5 1 9 1 1.827 0 3.424-.352 4.849-.717.058 1.588.491 3.61 2.151 4.717 2.354 1.569 2.367 1.897 3 0 .814-2.443.288-3.574-1.01-5.525.71.004 1.377.146 2.01.525 2.697 1.618 2.191 4.108.685 6.374-2.904 3.396-5.938.541-8.685-.374-3-1-1 1 0 2s1.312 4 0 6 3 0 5-3l.032-.045C28.392 31.5 34.559 25.935 34.559 18z"/><circle fill="#292F33" cx="13.117" cy="14" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4292E0" d="M30.584 7.854c.27-1.729 1.028-3.908 2.975-5.854.704-.704.25-2-1-2 0 0-6.061.007-9.893 3.327C21.663 3.115 20.625 3 19.559 3c-8 0-12 4-14 12-.444 1.778-.865 1.399-3 3-1.195.896-2.117 3 1 3 3 0 5 .954 9 1 3.629.042 9.504-3.229 11.087-1.292 2.211 2.706 1.396 5.438.597 6.666-2.904 3.396-5.939.541-8.685-.374-3-1-1 1 0 2s1.312 4 0 6 3 0 5-3c.011-.017.022-.028.032-.045C28.392 31.5 34.559 25.936 34.559 18c0-3.918-1.515-7.474-3.975-10.146z"/><circle fill="#1F2326" cx="13.117" cy="14" r="2"/><path fill="#77BCF7" d="M10.396 21.896s4-.876 7.167-2.688c4.625-2.646 7.26-2.594 8.885-.823s1.99 6.594-2.885 9.677c2.604-2.75 1.146-8.349-2.014-7.588-8.153 1.964-8.903 1.547-11.153 1.422z"/><path fill="#4292E0" d="M19.383 17.744l-2.922 1.285c-.254.064-.433.3-.412.561.122 1.504.756 3.625 2.263 4.629 2.354 1.569 2.367 1.897 3 0 .768-2.303-.182-4.462-1.333-6.24-.127-.196-.37-.293-.596-.235z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f431.svg b/public/emoji/1f431.svg index 117343239..cc75dcc68 100644 --- a/public/emoji/1f431.svg +++ b/public/emoji/1f431.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCB4E" d="M33 17c1.072-6.084 1.262-15.048 0-15.864C31.738.322 22.928 3.353 21.086 7.4 20.081 7.132 18 7 18 7s-2.013.132-3.017.399C13.14 3.352 4.261.321 3 1.136 1.738 1.952 1.926 10.916 3 17c0 0-.967 1.979-.967 8.95l16-3.967 16 4C34.033 18.979 33 17 33 17z"/><path fill="#FFD882" d="M23.946 19.282c-2.085 0-4.273.477-5.913 1.281-1.639-.805-3.827-1.281-5.912-1.281-9.932 0-10.088 5.1-10.088 6.664C2.033 27.505 4 35.979 18 35.979s16.033-8.441 16.033-10c0-1.564-.156-6.697-10.087-6.697z"/><path fill="#F28F20" d="M23.406 8.054c2.17-2.383 6.681-4.172 7.607-3.945.752.182.635 6.387.031 9.938-2.562-4.251-7.638-5.993-7.638-5.993zm-10.746 0c-2.168-2.383-6.68-4.172-7.606-3.945-.754.182-.637 6.387-.031 9.938 2.563-4.251 7.637-5.993 7.637-5.993z"/><path fill="#FAAA35" d="M22.04 20c0-4.693-1.809-13-4.04-13s-4.04 8.307-4.04 13c0 4.695 1.809 2 4.04 2s4.04 2.695 4.04-2z"/><path fill="#2A2F33" d="M15.019 16.999c0 1.105-.904 2-2.019 2s-2.019-.895-2.019-2c0-1.104.904-1.998 2.019-1.998s2.019.895 2.019 1.998zm10.02.001c0 1.105-.904 2-2.02 2C21.904 19 21 18.105 21 17c0-1.104.904-1.998 2.02-1.998 1.115 0 2.019.894 2.019 1.998z"/><path fill="#F28F20" d="M23.804 28.895c-3.488.696-4.55-.785-4.784-1.229V25c0-.553-.447-1-1-1-.553 0-1 .447-1 1v2.659c-.246.452-1.338 1.931-4.823 1.236-.548-.113-1.069.243-1.177.784-.108.542.243 1.068.784 1.177.79.158 1.495.227 2.127.227 2.078 0 3.339-.741 4.081-1.473.735.733 1.986 1.473 4.058 1.473.631 0 1.337-.068 2.126-.227.541-.108.893-.635.784-1.177-.107-.541-.629-.897-1.176-.784z"/><path fill="#292F33" d="M22.02 21.592c0 1.758-3.216 3.978-4.02 3.978-.803 0-4.019-2.221-4.019-3.978C13.981 19.832 16.225 20 18 20s4.02-.168 4.02 1.592z"/><path fill="#F39120" d="M34.021 31.935c-.277 0-.553-.115-.751-.339-.03-.035-3.181-3.502-10.41-4.624-.546-.085-.92-.596-.835-1.142.085-.546.597-.915 1.142-.835.366.057.724.119 1.072.187 7.242 1.404 10.399 4.939 10.536 5.096.362.416.319 1.048-.097 1.411-.189.165-.423.246-.657.246z"/><path fill="#F39120" d="M23.014 26.983c-.406 0-.789-.25-.939-.653-.191-.519.074-1.094.592-1.285 5.477-2.023 12.161-.189 12.45-.108.532.148.843.699.695 1.23-.146.532-.697.843-1.229.697-.064-.018-6.358-1.739-11.223.058-.114.042-.231.061-.346.061zM1.988 31.935c.277 0 .553-.115.751-.339.03-.035 3.181-3.502 10.41-4.624.546-.085.92-.596.835-1.142-.085-.546-.597-.915-1.142-.835-.366.057-.724.119-1.072.187-7.242 1.404-10.399 4.939-10.536 5.096-.362.416-.319 1.048.097 1.411.19.165.424.246.657.246z"/><path fill="#F39120" d="M12.996 26.983c.406 0 .789-.25.938-.653.191-.519-.074-1.094-.592-1.285-5.477-2.023-12.161-.189-12.45-.108-.532.148-.843.699-.695 1.23.146.532.697.843 1.229.697.064-.018 6.358-1.739 11.223.058.115.042.232.061.347.061z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M32.348 13.999s3.445-8.812 1.651-11.998c-.604-1.073-8 1.998-10.723 5.442 0 0-2.586-.86-5.276-.86s-5.276.86-5.276.86C10.001 3.999 2.605.928 2.001 2.001.207 5.187 3.652 13.999 3.652 13.999c-.897 1.722-1.233 4.345-1.555 7.16-.354 3.086.35 5.546.658 6.089.35.617 2.123 2.605 4.484 4.306 3.587 2.583 8.967 3.445 10.761 3.445s7.174-.861 10.761-3.445c2.361-1.701 4.134-3.689 4.484-4.306.308-.543 1.012-3.003.659-6.089-.324-2.814-.659-5.438-1.556-7.16z"/><path fill="#F18F26" d="M2.359 2.971c.2-.599 5.348 2.173 6.518 5.404 0 0-3.808 2.624-4.528 4.624 0 0-2.99-7.028-1.99-10.028z"/><path fill="#FFCC4D" d="M5.98 7.261c0-1.414 5.457 2.733 4.457 3.733s-1.255.72-2.255 1.72S5.98 8.261 5.98 7.261z"/><path fill="#F18F26" d="M33.641 2.971c-.2-.599-5.348 2.173-6.518 5.404 0 0 3.808 2.624 4.528 4.624 0 0 2.99-7.028 1.99-10.028z"/><path fill="#FFCC4D" d="M30.02 7.261c0-1.414-5.457 2.733-4.457 3.733s1.255.72 2.255 1.72 2.202-4.453 2.202-5.453z"/><path fill="#292F33" d="M14.001 20.001c0 1.105-.896 1.999-2 1.999s-2-.894-2-1.999c0-1.104.896-1.999 2-1.999s2 .896 2 1.999zm11.998 0c0 1.105-.896 1.999-2 1.999-1.105 0-2-.894-2-1.999 0-1.104.895-1.999 2-1.999s2 .896 2 1.999z"/><path fill="#FEE7B8" d="M2.201 30.458c-.148 0-.294-.065-.393-.19-.171-.217-.134-.531.083-.702.162-.127 4.02-3.12 10.648-2.605.275.021.481.261.46.536-.021.275-.257.501-.537.46-6.233-.474-9.915 2.366-9.951 2.395-.093.07-.202.106-.31.106zm8.868-4.663c-.049 0-.1-.007-.149-.022-4.79-1.497-8.737-.347-8.777-.336-.265.081-.543-.07-.623-.335-.079-.265.071-.543.335-.622.173-.052 4.286-1.247 9.362.338.264.083.411.363.328.627-.066.213-.263.35-.476.35zm22.73 4.663c.148 0 .294-.065.393-.19.171-.217.134-.531-.083-.702-.162-.127-4.02-3.12-10.648-2.605-.275.021-.481.261-.46.536.022.275.257.501.537.46 6.233-.474 9.915 2.366 9.951 2.395.093.07.202.106.31.106zm-8.868-4.663c.049 0 .1-.007.149-.022 4.79-1.497 8.737-.347 8.777-.336.265.081.543-.07.623-.335.079-.265-.071-.543-.335-.622-.173-.052-4.286-1.247-9.362.338-.264.083-.411.363-.328.627.066.213.263.35.476.35z"/><path fill="#67757F" d="M24.736 30.898c-.097-.258-.384-.392-.643-.294-.552.206-1.076.311-1.559.311-1.152 0-1.561-.306-2.033-.659-.451-.338-.956-.715-1.99-.803v-2.339c0-.276-.224-.5-.5-.5s-.5.224-.5.5v2.373c-.81.115-1.346.439-1.816.743-.568.367-1.059.685-2.083.685-.482 0-1.006-.104-1.558-.311-.258-.095-.547.035-.643.294-.097.259.035.547.293.644.664.247 1.306.373 1.907.373 1.319 0 2.014-.449 2.627-.845.524-.339.98-.631 1.848-.635.992.008 1.358.278 1.815.621.538.403 1.147.859 2.633.859.601 0 1.244-.126 1.908-.373.259-.097.391-.385.294-.644z"/><path fill="#E75A70" d="M19.4 24.807h-2.8c-.64 0-1.163.523-1.163 1.163 0 .639.523 1.163 1.163 1.163h.237v.345c0 .639.523 1.163 1.163 1.163s1.163-.523 1.163-1.163v-.345h.237c.639 0 1.163-.523 1.163-1.163s-.524-1.163-1.163-1.163z"/><path fill="#F18F26" d="M18.022 17.154c-.276 0-.5-.224-.5-.5V8.37c0-.276.224-.5.5-.5s.5.224.5.5v8.284c0 .277-.223.5-.5.5zM21 15.572c-.276 0-.5-.224-.5-.5 0-2.882 1.232-5.21 1.285-5.308.13-.244.435-.334.677-.204.243.13.334.433.204.677-.012.021-1.166 2.213-1.166 4.835 0 .276-.224.5-.5.5zm-6 0c-.276 0-.5-.224-.5-.5 0-2.623-1.155-4.814-1.167-4.835-.13-.244-.038-.546.205-.677.242-.131.545-.039.676.204.053.098 1.285 2.426 1.285 5.308.001.276-.223.5-.499.5z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f433.svg b/public/emoji/1f433.svg index c3c6668b0..f00ea1033 100644 --- a/public/emoji/1f433.svg +++ b/public/emoji/1f433.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#744EAA" d="M32 12c2.122-2.122 5 14.312-3 21-2.757 2.305-6 2.969-8 2.969-2.371 0-10.029.031-13 .031-7.18 0-8-4.925-8-11s.82-11 8-11c6 0 10 2 13 3.996 4.977 3.312 5.992 3.861 8 2.004 3.213-2.97 1-6 3-8z"/><path fill="#AA8DD8" d="M34.003 23c-.465 3.727-2.041 7.523-5.003 10-2.757 2.305-6 2.969-8 2.969-2.371 0-10.029.031-13 .031-4.035 0-6.062-1.555-7.062-3.996C.157 30.102 4 33 15 33c14 0 17-5 19.003-10z"/><path fill="#744EAA" d="M32 14c4.123 0 4-5 4-7s-2 1-5 2-7-2-6 0 3 5 7 5z"/><path fill="#55ACEE" d="M10 7c0 2.209-.896 6-2 6S6 9.209 6 7s.896-2 2-2 2-.209 2 2z"/><path fill="#55ACEE" d="M8 5c0-3-6-2-6 0s3 1 4 3 2-3 2-3zm0 0c0-3 6-2 6 0s-3 1-4 3-2-3-2-3z"/><circle fill="#292F33" cx="6.5" cy="25.5" r="1.5"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M32 12c2.122-2.122 5 14.312-3 21-2.757 2.305-6 2.969-8 2.969-2.371 0-10.029.031-13 .031-7.18 0-8-4.925-8-11s.82-11 8-11c6 0 10 2 13 3.996 4.977 3.312 5.992 3.861 8 2.004 3.213-2.97 1-6 3-8z"/><path fill="#55ACEE" d="M34.003 23c-.465 3.727-2.041 7.523-5.003 10-2.757 2.305-6 2.969-8 2.969-2.371 0-10.029.031-13 .031-4.035 0-6.062-1.555-7.062-3.996C.157 30.102 4 33 15 33c14 0 17-5 19.003-10z"/><path fill="#3B88C3" d="M32 14c4.123 0 4-5 4-7s-2 1-5 2-7-2-6 0 3 5 7 5z"/><path fill="#55ACEE" d="M10 7c0 2.209-.896 6-2 6S6 9.209 6 7s.896-2 2-2 2-.209 2 2z"/><path fill="#55ACEE" d="M8 5c0-3-6-2-6 0s3 1 4 3 2-3 2-3zm0 0c0-3 6-2 6 0s-3 1-4 3-2-3-2-3z"/><circle fill="#292F33" cx="6.5" cy="25.5" r="1.5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f436.svg b/public/emoji/1f436.svg index 05edf0229..8b2e68580 100644 --- a/public/emoji/1f436.svg +++ b/public/emoji/1f436.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M15 30v3s0 3 3 3 3-3 3-3v-3h-6z"/><path fill="#272B2B" d="M14 2c.041-3-14-2-14 8 0 4 0 14 3 14C7 24 13.945 6 14 2zm8 0c-.041-3 14-2 14 8 0 4 0 14-3 14-4 0-10.945-18-11-22z"/><path fill="#CCD6DD" d="M31 22c0 7-4 7-4 7H9s-4 0-4-7C5 22 6 0 18 0s13 22 13 22z"/><path fill="#8899A6" d="M23 22.025V22H13v.025c-2.803.253-5 2.606-5 5.475 0 3.037 2.462 5.5 5.5 5.5 1.862 0 3.505-.928 4.5-2.344.995 1.416 2.638 2.344 4.5 2.344 3.038 0 5.5-2.463 5.5-5.5 0-2.868-2.196-5.222-5-5.475z"/><path fill="#272B2B" d="M11 16s0-2 2-2 2 2 2 2v2s0 2-2 2-2-2-2-2v-2zm10 0s0-2 2-2 2 2 2 2v2s0 2-2 2-2-2-2-2v-2zm-6 8c-1 1 2 4 3 4s4-3 3-4-5-1-6 0z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M15 27v6s0 3 3 3 3-3 3-3v-6h-6z"/><path fill="#BE1931" d="M15 33l.001.037c1.041-.035 2.016-.274 2.632-1.286.171-.281.563-.281.735 0 .616 1.011 1.591 1.251 2.632 1.286V27h-6v6z"/><path fill="#D99E82" d="M31.954 21.619c0 6.276-5 6.276-5 6.276h-18s-5 0-5-6.276c0-6.724 5-18.619 14-18.619s14 12.895 14 18.619z"/><path fill="#F4C7B5" d="M18 20c-7 0-10 3.527-10 6.395 0 3.037 2.462 5.5 5.5 5.5 1.605 0 3.042-.664 4.049-2.767.185-.386.716-.386.901 0 1.007 2.103 2.445 2.767 4.049 2.767 3.038 0 5.5-2.463 5.5-5.5C28 23.527 25 20 18 20z"/><path fill="#292F33" d="M15 22.895c-1 1 2 4 3 4s4-3 3-4-5-1-6 0zM13 19c-1.1 0-2-.9-2-2v-2c0-1.1.9-2 2-2s2 .9 2 2v2c0 1.1-.9 2-2 2zm10 0c-1.1 0-2-.9-2-2v-2c0-1.1.9-2 2-2s2 .9 2 2v2c0 1.1-.9 2-2 2z"/><path fill="#662113" d="M15 3.608C13.941 2.199 11.681.881 2.828 4.2-1.316 5.754.708 17.804 3.935 18.585c1.106 0 4.426 0 4.426-8.852 0-.22-.002-.423-.005-.625C10.35 6.298 12.5 4.857 15 3.608zm18.172.592C24.319.881 22.059 2.199 21 3.608c2.5 1.25 4.65 2.691 6.644 5.501-.003.201-.005.404-.005.625 0 8.852 3.319 8.852 4.426 8.852 3.227-.782 5.251-12.832 1.107-14.386z"/><circle fill="#D99E82" cx="23.5" cy="25.5" r=".5"/><circle fill="#D99E82" cx="11.5" cy="25.5" r=".5"/><circle fill="#D99E82" cx="25.5" cy="27.5" r=".5"/><circle fill="#D99E82" cx="10.5" cy="27.5" r=".5"/><circle fill="#D99E82" cx="23" cy="28" r="1"/><circle fill="#D99E82" cx="13" cy="28" r="1"/><path fill="#380F09" d="M9.883 7.232c-.259-.673-.634-1.397-1.176-1.939-.391-.391-1.023-.391-1.414 0s-.391 1.023 0 1.414c.57.57 1.066 1.934 1.068 2.346.145-.404.839-1.15 1.522-1.821zm16.217 0c.259-.672.634-1.397 1.176-1.939.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414c-.57.57-1.066 1.934-1.068 2.346-.145-.404-.839-1.15-1.522-1.821z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f43a.svg b/public/emoji/1f43a.svg index 55b43c70c..af402057e 100644 --- a/public/emoji/1f43a.svg +++ b/public/emoji/1f43a.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M6 23l-5-3 2 6-1 2 6 5 7 2 3-11zm24 0l5-3-2 6 1 2-6 5-7 2-3-11z"/><path fill="#66757F" d="M11 7c0 3.866-3.032 7-6.771 7S3.101 0 3.101 0 11 3.134 11 7z"/><circle fill="#66757F" cx="18" cy="30" r="6"/><circle fill="#DD2E44" cx="18" cy="30" r="4"/><path fill="#66757F" d="M31.771 14C28.031 14 25 10.866 25 7s7.899-7 7.899-7 2.611 14-1.128 14z"/><path fill="#E6AAAA" d="M9 8c0 2.209-1.791 4-4 4s0-8 0-8 4 1.791 4 4zm22 4c-2.209 0-4-1.791-4-4s4-4 4-4 2.209 8 0 8z"/><path fill="#66757F" d="M34 22c0 7-6.923 7-6.923 7H8.923S2 29 2 22C2 22 3.231 3 18 3c14.77 0 16 19 16 19z"/><path fill="#272B2B" d="M11 17s0-2 2-2 2 2 2 2v2s0 2-2 2-2-2-2-2v-2zm10 0s0-2 2-2 2 2 2 2v2s0 2-2 2-2-2-2-2v-2z"/><path fill="#CCD6DD" d="M32.715 24.162L33.944 21l-2.629 2.666c-.388-.1-.822-.19-1.315-.27V19l-2.519 4.121c-1.1-.076-2.35-.121-3.803-.121-3.482 0-1.003 4.451-5.762 4.949-4.759-.498-2.28-4.949-5.762-4.949-1.38 0-2.582.04-3.644.108L6 19v4.366c-.509.077-.947.169-1.349.267L2.056 21l1.203 3.093c-1.689.778-1.503 1.864-.427 2.907 5.999 5.818 9 6 9.322 6 2.46 0 4.602-.998 5.762-2.48 1.159 1.482 3.303 2.48 5.762 2.48.322 0 3.323-.182 9.322-6 1.044-1.013 1.247-2.065-.285-2.838z"/><path fill="#272B2B" d="M15 25c-1 1 0 4 3 4s4-3 3-4-5-1-6 0z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M14.858 9.497c.475 2.326-.182 4.236-2.921 4.638-2.741.403-6.7 3.898-8.848-1.798C1.844 9.038 1.092 2.234 2.628 2.009c1.537-.226 11.756 5.162 12.23 7.488z"/><path fill="#CCD6DD" d="M12.784 9.851c.865 1.392-2.205 3.833-3.844 4.568-1.639.736-2.915-.66-4.173-4.1-.55-1.503-1.234-5.532-.634-5.802.599-.268 7.785 3.942 8.651 5.334z"/><path fill="#66757F" d="M21.372 9.497c-.458 2.326.176 4.236 2.818 4.638 2.644.403 6.464 3.898 8.536-1.798 1.201-3.3 1.927-10.103.445-10.329-1.483-.225-11.342 5.163-11.799 7.489z"/><path fill="#CCD6DD" d="M23.373 9.851c-.835 1.392 2.127 3.833 3.708 4.568 1.581.736 2.812-.66 4.026-4.1.531-1.503 1.19-5.532.611-5.802-.577-.268-7.509 3.942-8.345 5.334z"/><path fill="#66757F" d="M32.347 26.912c0-.454-.188-1.091-.407-1.687.585.028 1.519.191 2.77.817-.008-.536-.118-.984-.273-1.393.041.02.075.034.116.055-1.104-3.31-3.309-5.517-3.309-5.517h2.206c-2.331-4.663-4.965-8.015-8.075-9.559-1.39-.873-3.688-1.338-7.373-1.339h-.003c-3.696 0-5.996.468-7.385 1.346-3.104 1.547-5.734 4.896-8.061 9.552H4.76s-2.207 2.206-3.311 5.517l.084-.039c-.201.392-.307.847-.282 1.377 1.263-.632 2.217-.792 2.813-.818-.189.513-.343 1.044-.386 1.475-.123.371-.191.812-.135 1.343 3.207-1.458 4.707-1.25 6.457-.375C11.213 31.29 14.206 34 18.001 34c3.793 0 6.746-2.794 7.958-6.416 1.458-1.25 3.708-.875 6.416.416.066-.413.036-.773-.036-1.093l.008.005z"/><path fill="#CCD6DD" d="M34.553 24.704c-.437-1.313-3.665-3.101-6.973-4.513.26-.664.42-1.401.42-2.191 0-2.761-1.791-5-4-5s-4 2.239-4 5c0 3 4 10-2.001 11.118-5.125-.955-2.954-6.201-2.212-9.58.072-.276.125-.559.158-.853.034-.245.055-.476.055-.685 0-2.761-1.791-5-4-5s-4 2.239-4 5c0 .79.16 1.527.421 2.191-3.308 1.412-6.535 3.2-6.973 4.513C3.655 23.6 4.759 23.6 4.759 23.6s-1.104 2.208-1.104 3.312c2.67-1.78 5.339-2.122 7.429-.452C12.297 30.083 14 33 18.001 30.124c3.999 2.876 5.7-.04 6.912-3.662 2.092-1.673 4.763-1.33 7.434.45 0-1.104-1.103-3.312-1.103-3.312s1.103.001 3.309 1.104z"/><path fill="#292F33" d="M11 17s0-1.5 1.5-1.5S14 17 14 17v1.5s0 1.5-1.5 1.5-1.5-1.5-1.5-1.5V17zm11 0s0-1.5 1.5-1.5S25 17 25 17v1.5s0 1.5-1.5 1.5-1.5-1.5-1.5-1.5V17zm-7.061 9.156c-1.021.208 2.041 3.968 3.062 3.968 1.02 0 4.082-3.76 3.062-3.968s-5.103-.208-6.124 0z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f441-200d-1f5e8.svg b/public/emoji/1f441-200d-1f5e8.svg index 02790ef94..ebe9061da 100644 --- a/public/emoji/1f441-200d-1f5e8.svg +++ b/public/emoji/1f441-200d-1f5e8.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32.769 33.359c-2.739-3.286-3.903-6.569-4.397-8.746-.064-.283-.249-.524-.506-.661s-.56-.154-.83-.05l-7.112 2.749c-.303.117-.53.374-.609.688-.079.315-.019.665.211.896C25.492 34.216 31.945 35 32 35c.354 0 .688-.188.867-.503.208-.362.169-.816-.098-1.138z"/><ellipse fill="#292F33" cx="18" cy="16" rx="18" ry="14"/><circle fill="#292F33" cx="18" cy="16" r="5"/><path fill="#FFF" d="M18 7c-4.963 0-9 4.037-9 9s4.037 9 9 9 9-4.037 9-9-4.037-9-9-9zm0 14c-2.761 0-5-2.239-5-5s2.239-5 5-5 5 2.239 5 5-2.239 5-5 5z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M32.769 33.359c-2.739-3.286-3.903-6.569-4.397-8.746-.064-.283-.249-.524-.506-.661s-.56-.154-.83-.05l-7.112 2.749c-.303.117-.53.374-.609.688-.079.315-.019.665.211.896C25.492 34.216 31.945 35 32 35c.354 0 .688-.188.867-.503.208-.362.169-.816-.098-1.138z"/><ellipse fill="#31373D" cx="18" cy="16" rx="18" ry="14"/><circle fill="#31373D" cx="18" cy="16" r="5"/><path fill="#FFF" d="M18 7c-4.963 0-9 4.037-9 9s4.037 9 9 9 9-4.037 9-9-4.037-9-9-9zm0 14c-2.761 0-5-2.239-5-5s2.239-5 5-5 5 2.239 5 5-2.239 5-5 5z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f44b-1f3fb.svg b/public/emoji/1f44b-1f3fb.svg index 8578b7f79..de8871dc2 100644 --- a/public/emoji/1f44b-1f3fb.svg +++ b/public/emoji/1f44b-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 2.646-.509 3.426.605L19.961 18l.07-.031-8.062-11.844c-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72c.787 1.123.401 2.661-.721 3.447-.191.134-.397.226-.607.299V31H15v-3.113c-.146-.129-.967-.763-1.083-.929L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#F7DECE" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454.629.917.565.825c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11-.198-.29-.364-.573-.522-.855l-.044.03-8.483-12.372z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 4.263 1.312 4.263 1.312-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72L25 31l-11.083-4.042L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#F7DECE" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454 1.194 1.742c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11L2.695 17.336z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f44b-1f3fc.svg b/public/emoji/1f44b-1f3fc.svg index 16d7bf504..beec31c99 100644 --- a/public/emoji/1f44b-1f3fc.svg +++ b/public/emoji/1f44b-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 2.646-.509 3.426.605L19.961 18l.07-.031-8.062-11.844c-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72c.787 1.123.401 2.661-.721 3.447-.191.134-.397.226-.607.299V31H15v-3.113c-.146-.129-.967-.763-1.083-.929L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#F3D2A2" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454.629.917.565.825c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11-.198-.29-.364-.573-.522-.855l-.044.03-8.483-12.372z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 4.263 1.312 4.263 1.312-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72L25 31l-11.083-4.042L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#F3D2A2" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454 1.194 1.742c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11L2.695 17.336z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f44b-1f3fd.svg b/public/emoji/1f44b-1f3fd.svg index 1e0252114..975f489fd 100644 --- a/public/emoji/1f44b-1f3fd.svg +++ b/public/emoji/1f44b-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 2.646-.509 3.426.605L19.961 18l.07-.031-8.062-11.844c-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72c.787 1.123.401 2.661-.721 3.447-.191.134-.397.226-.607.299V31H15v-3.113c-.146-.129-.967-.763-1.083-.929L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#D5AB88" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454.629.917.565.825c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11-.198-.29-.364-.573-.522-.855l-.044.03-8.483-12.372z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 4.263 1.312 4.263 1.312-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72L25 31l-11.083-4.042L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#D4AB88" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454 1.194 1.742c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11L2.695 17.336z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f44b-1f3fe.svg b/public/emoji/1f44b-1f3fe.svg index 1e4f886a7..13c59cf1b 100644 --- a/public/emoji/1f44b-1f3fe.svg +++ b/public/emoji/1f44b-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 2.646-.509 3.426.605L19.961 18l.07-.031-8.062-11.844c-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72c.787 1.123.401 2.661-.721 3.447-.191.134-.397.226-.607.299V31H15v-3.113c-.146-.129-.967-.763-1.083-.929L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#AF7E57" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454.629.917.565.825c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11-.198-.29-.364-.573-.522-.855l-.044.03-8.483-12.372z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 4.263 1.312 4.263 1.312-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72L25 31l-11.083-4.042L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#AF7E57" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454 1.194 1.742c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11L2.695 17.336z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f44b-1f3ff.svg b/public/emoji/1f44b-1f3ff.svg index 407acda59..1ce9ef377 100644 --- a/public/emoji/1f44b-1f3ff.svg +++ b/public/emoji/1f44b-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 2.646-.509 3.426.605L19.961 18l.07-.031-8.062-11.844c-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72c.787 1.123.401 2.661-.721 3.447-.191.134-.397.226-.607.299V31H15v-3.113c-.146-.129-.967-.763-1.083-.929L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#7C533E" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454.629.917.565.825c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11-.198-.29-.364-.573-.522-.855l-.044.03-8.483-12.372z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 4.263 1.312 4.263 1.312-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72L25 31l-11.083-4.042L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#7C533E" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454 1.194 1.742c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11L2.695 17.336z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f44b.svg b/public/emoji/1f44b.svg index 0d9ade5f8..8942c68b0 100644 --- a/public/emoji/1f44b.svg +++ b/public/emoji/1f44b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 2.646-.509 3.426.605L19.961 18l.07-.031-8.062-11.844c-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72c.787 1.123.401 2.661-.721 3.447-.191.134-.397.226-.607.299V31H15v-3.113c-.146-.129-.967-.763-1.083-.929L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#FFDC5D" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454.629.917.565.825c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11-.198-.29-.364-.573-.522-.855l-.044.03-8.483-12.372z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M4.861 9.147c.94-.657 2.357-.531 3.201.166l-.968-1.407c-.779-1.111-.5-2.313.612-3.093 1.112-.777 4.263 1.312 4.263 1.312-.786-1.122-.639-2.544.483-3.331 1.122-.784 2.67-.513 3.456.611l10.42 14.72L25 31l-11.083-4.042L4.25 12.625c-.793-1.129-.519-2.686.611-3.478z"/><path fill="#FFDC5D" d="M2.695 17.336s-1.132-1.65.519-2.781c1.649-1.131 2.78.518 2.78.518l5.251 7.658c.181-.302.379-.6.6-.894L4.557 11.21s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l6.855 9.997c.255-.208.516-.417.785-.622L7.549 6.732s-1.131-1.649.519-2.78c1.649-1.131 2.78.518 2.78.518l7.947 11.589c.292-.179.581-.334.871-.498L12.238 4.729s-1.131-1.649.518-2.78c1.649-1.131 2.78.518 2.78.518l7.854 11.454 1.194 1.742c-4.948 3.394-5.419 9.779-2.592 13.902.565.825 1.39.26 1.39.26-3.393-4.949-2.357-10.51 2.592-13.903L24.515 8.62s-.545-1.924 1.378-2.47c1.924-.545 2.47 1.379 2.47 1.379l1.685 5.004c.668 1.984 1.379 3.961 2.32 5.831 2.657 5.28 1.07 11.842-3.94 15.279-5.465 3.747-12.936 2.354-16.684-3.11L2.695 17.336z"/><g fill="#5DADEC"><path d="M12 32.042C8 32.042 3.958 28 3.958 24c0-.553-.405-1-.958-1s-1.042.447-1.042 1C1.958 30 6 34.042 12 34.042c.553 0 1-.489 1-1.042s-.447-.958-1-.958z"/><path d="M7 34c-3 0-5-2-5-5 0-.553-.447-1-1-1s-1 .447-1 1c0 4 3 7 7 7 .553 0 1-.447 1-1s-.447-1-1-1zM24 2c-.552 0-1 .448-1 1s.448 1 1 1c4 0 8 3.589 8 8 0 .552.448 1 1 1s1-.448 1-1c0-5.514-4-10-10-10z"/><path d="M29 .042c-.552 0-1 .406-1 .958s.448 1.042 1 1.042c3 0 4.958 2.225 4.958 4.958 0 .552.489 1 1.042 1s.958-.448.958-1C35.958 3.163 33 .042 29 .042z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f44c-1f3fb.svg b/public/emoji/1f44c-1f3fb.svg index e9e71aea8..e54788da9 100644 --- a/public/emoji/1f44c-1f3fb.svg +++ b/public/emoji/1f44c-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M24.997 28.5c-1.185 0-2.237-.846-2.457-2.053l-4-22c-.247-1.358.654-2.66 2.012-2.907 1.358-.251 2.66.654 2.907 2.012l4 22c.247 1.358-.654 2.66-2.013 2.907-.15.028-.3.041-.449.041z"/><path fill="#F7DECE" d="M28.375 24.765c.239-.745.13-1.591-.375-2.265-.059-.078-.44-.585-1.017-1.34.005-.052.017-.112.017-.16 0-.458-1.913-2.623-3.74-4.586-1.587-1.965-3.261-3.951-4.492-5.182l-1.274-1.274-1.612.806c-5.718 2.859-8.647 3.855-8.672 3.864-1.31.437-2.018 1.852-1.581 3.162.437 1.31 1.852 2.015 3.162 1.582.117-.039 2.666-.899 7.65-3.311 1.094 1.23 2.378 2.795 3.574 4.296l.704 1.174c.169.282.146.639-.061.896l-3.513 4.392c-.095.119-.222.207-.365.255l-2.531.844c-.161.054-.336.054-.497 0l-4.73-1.576c-.676-2.082-.533-4.102-.531-4.124.12-1.376-.899-2.588-2.274-2.707-1.372-.128-2.587.897-2.707 2.273-.022.261-.51 6.424 3.313 10.594 2.208 2.408 5.296 3.63 9.178 3.63.66 0 1.283.009 1.871.018.529.008 1.042.016 1.537.016 2.764 0 5.004-.231 6.738-1.941 1.649-1.626 2.354-4.195 2.354-8.592-.001-.263-.052-.508-.126-.744z"/><path fill="#E0AA94" d="M27.001 21c-.384 0-.749-.221-.915-.594l-4-9c-.224-.505.003-1.096.508-1.32.506-.226 1.096.003 1.32.507l4 9c.224.505-.003 1.096-.508 1.32-.132.06-.269.087-.405.087z"/><path fill="#F7DECE" d="M24.766 34.38l-1.531-4.76s-.066.011-.175.066c.017-.009 1.821-.995 2.461-6.003.775-6.075-.774-9.6-.79-9.634l-.093-.231-3.5-10.104c-.452-1.305.239-2.729 1.544-3.181 1.303-.451 2.729.24 3.181 1.544l3.469 10.013c.377.887 2.035 5.285 1.148 12.226-1.042 8.163-4.943 9.816-5.714 10.064z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M23.216 20.937l-1.721-6.86-3.947-8.816c-.502-1.297.143-2.756 1.44-3.257 1.296-.506 2.756.143 3.258 1.44l6.203 15.769-5.233 1.724z"/><path fill="#F7DECE" d="M31.565 18.449c-.488-2.581-1.988-6.523-1.988-6.523L23.79 1.437C23.164.195 21.648-.303 20.407.322c-1.242.626-1.742 2.141-1.115 3.383l5.33 9.547c.013.022 1.413 5.491 1.413 5.491-1.078-.995-2.607-2.359-4.015-3.618-3.098-2.772-4.936-3.811-4.936-3.811-.71-.443-1.179-.506-2.132-.059L9.08 13.823c-.157.078-.29.188-.395.329l-2.313 3.086c-.893 1.067-.752 2.655.315 3.547 1.066.893 2.653.75 3.548-.314.048-.058 1.78-2.56 1.936-2.64 1.037-.533 2.965-1.447 3.808-1.42.897.029 6.281 5.957 6.281 5.957.206.259.23.618.06.902l-2.915 5.228c-.079.131-.193.236-.33.303l-2.674 1.5c-.154.075-.328.099-.496.067l-5.27-2.272c-.262-.113-.48-.32-.592-.583-.787-1.85-.898-3.619-.899-3.639-.065-1.39-1.244-2.463-2.634-2.398-1.387.056-2.463 1.243-2.398 2.633.013.263.351 5.64 4.727 9.292 2.528 2.108 5.654 2.924 9.649 2.387 4.612-.619 7.469-1.233 11.506-9.558 1.117-2.305 1.903-6.024 1.571-7.781z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f44c-1f3fc.svg b/public/emoji/1f44c-1f3fc.svg index dddad5809..e96a25802 100644 --- a/public/emoji/1f44c-1f3fc.svg +++ b/public/emoji/1f44c-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M24.997 28.5c-1.185 0-2.237-.846-2.457-2.053l-4-22c-.247-1.358.654-2.66 2.012-2.907 1.358-.251 2.66.654 2.907 2.012l4 22c.247 1.358-.654 2.66-2.013 2.907-.15.028-.3.041-.449.041z"/><path fill="#F3D2A2" d="M28.375 24.765c.239-.745.13-1.591-.375-2.265-.059-.078-.44-.585-1.017-1.34.005-.052.017-.112.017-.16 0-.458-1.913-2.623-3.74-4.586-1.587-1.965-3.261-3.951-4.492-5.182l-1.274-1.274-1.612.806c-5.718 2.859-8.647 3.855-8.672 3.864-1.31.437-2.018 1.852-1.581 3.162.437 1.31 1.852 2.015 3.162 1.582.117-.039 2.666-.899 7.65-3.311 1.094 1.23 2.378 2.795 3.574 4.296l.704 1.174c.169.282.146.639-.061.896l-3.513 4.392c-.095.119-.222.207-.365.255l-2.531.844c-.161.054-.336.054-.497 0l-4.73-1.576c-.676-2.082-.533-4.102-.531-4.124.12-1.376-.899-2.588-2.274-2.707-1.372-.128-2.587.897-2.707 2.273-.022.261-.51 6.424 3.313 10.594 2.208 2.408 5.296 3.63 9.178 3.63.66 0 1.283.009 1.871.018.529.008 1.042.016 1.537.016 2.764 0 5.004-.231 6.738-1.941 1.649-1.626 2.354-4.195 2.354-8.592-.001-.263-.052-.508-.126-.744z"/><path fill="#D2A077" d="M27.001 21c-.384 0-.749-.221-.915-.594l-4-9c-.224-.505.003-1.096.508-1.32.506-.226 1.096.003 1.32.507l4 9c.224.505-.003 1.096-.508 1.32-.132.06-.269.087-.405.087z"/><path fill="#F3D2A2" d="M24.766 34.38l-1.531-4.76s-.066.011-.175.066c.017-.009 1.821-.995 2.461-6.003.775-6.075-.774-9.6-.79-9.634l-.093-.231-3.5-10.104c-.452-1.305.239-2.729 1.544-3.181 1.303-.451 2.729.24 3.181 1.544l3.469 10.013c.377.887 2.035 5.285 1.148 12.226-1.042 8.163-4.943 9.816-5.714 10.064z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M23.216 20.937l-1.721-6.86-3.947-8.816c-.502-1.297.143-2.756 1.44-3.257 1.296-.506 2.756.143 3.258 1.44l6.203 15.769-5.233 1.724z"/><path fill="#F3D2A2" d="M31.565 18.449c-.488-2.581-1.988-6.523-1.988-6.523L23.79 1.437C23.164.195 21.648-.303 20.407.322c-1.242.626-1.742 2.141-1.115 3.383l5.33 9.547c.013.022 1.413 5.491 1.413 5.491-1.078-.995-2.607-2.359-4.015-3.618-3.098-2.772-4.936-3.811-4.936-3.811-.71-.443-1.179-.506-2.132-.059L9.08 13.823c-.157.078-.29.188-.395.329l-2.313 3.086c-.893 1.067-.752 2.655.315 3.547 1.066.893 2.653.75 3.548-.314.048-.058 1.78-2.56 1.936-2.64 1.037-.533 2.965-1.447 3.808-1.42.897.029 6.281 5.957 6.281 5.957.206.259.23.618.06.902l-2.915 5.228c-.079.131-.193.236-.33.303l-2.674 1.5c-.154.075-.328.099-.496.067l-5.27-2.272c-.262-.113-.48-.32-.592-.583-.787-1.85-.898-3.619-.899-3.639-.065-1.39-1.244-2.463-2.634-2.398-1.387.056-2.463 1.243-2.398 2.633.013.263.351 5.64 4.727 9.292 2.528 2.108 5.654 2.924 9.649 2.387 4.612-.619 7.469-1.233 11.506-9.558 1.117-2.305 1.903-6.024 1.571-7.781z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f44c-1f3fd.svg b/public/emoji/1f44c-1f3fd.svg index c80dbb3bc..6e52b17f5 100644 --- a/public/emoji/1f44c-1f3fd.svg +++ b/public/emoji/1f44c-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M24.997 28.5c-1.185 0-2.237-.846-2.457-2.053l-4-22c-.247-1.358.654-2.66 2.012-2.907 1.358-.251 2.66.654 2.907 2.012l4 22c.247 1.358-.654 2.66-2.013 2.907-.15.028-.3.041-.449.041z"/><path fill="#D5AB88" d="M28.375 24.765c.239-.745.13-1.591-.375-2.265-.059-.078-.44-.585-1.017-1.34.005-.052.017-.112.017-.16 0-.458-1.913-2.623-3.74-4.586-1.587-1.965-3.261-3.951-4.492-5.182l-1.274-1.274-1.612.806c-5.718 2.859-8.647 3.855-8.672 3.864-1.31.437-2.018 1.852-1.581 3.162.437 1.31 1.852 2.015 3.162 1.582.117-.039 2.666-.899 7.65-3.311 1.094 1.23 2.378 2.795 3.574 4.296l.704 1.174c.169.282.146.639-.061.896l-3.513 4.392c-.095.119-.222.207-.365.255l-2.531.844c-.161.054-.336.054-.497 0l-4.73-1.576c-.676-2.082-.533-4.102-.531-4.124.12-1.376-.899-2.588-2.274-2.707-1.372-.128-2.587.897-2.707 2.273-.022.261-.51 6.424 3.313 10.594 2.208 2.408 5.296 3.63 9.178 3.63.66 0 1.283.009 1.871.018.529.008 1.042.016 1.537.016 2.764 0 5.004-.231 6.738-1.941 1.649-1.626 2.354-4.195 2.354-8.592-.001-.263-.052-.508-.126-.744z"/><path fill="#B78B60" d="M27.001 21c-.384 0-.749-.221-.915-.594l-4-9c-.224-.505.003-1.096.508-1.32.506-.226 1.096.003 1.32.507l4 9c.224.505-.003 1.096-.508 1.32-.132.06-.269.087-.405.087z"/><path fill="#D5AB88" d="M24.766 34.38l-1.531-4.76s-.066.011-.175.066c.017-.009 1.821-.995 2.461-6.003.775-6.075-.774-9.6-.79-9.634l-.093-.231-3.5-10.104c-.452-1.305.239-2.729 1.544-3.181 1.303-.451 2.729.24 3.181 1.544l3.469 10.013c.377.887 2.035 5.285 1.148 12.226-1.042 8.163-4.943 9.816-5.714 10.064z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M23.216 20.937l-1.721-6.86-3.947-8.816c-.502-1.297.143-2.756 1.44-3.257 1.296-.506 2.756.143 3.258 1.44l6.203 15.769-5.233 1.724z"/><path fill="#D4AB88" d="M31.565 18.449c-.488-2.581-1.988-6.523-1.988-6.523L23.79 1.437C23.164.195 21.648-.303 20.407.322c-1.242.626-1.742 2.141-1.115 3.383l5.33 9.547c.013.022 1.413 5.491 1.413 5.491-1.078-.995-2.607-2.359-4.015-3.618-3.098-2.772-4.936-3.811-4.936-3.811-.71-.443-1.179-.506-2.132-.059L9.08 13.823c-.157.078-.29.188-.395.329l-2.313 3.086c-.893 1.067-.752 2.655.315 3.547 1.066.893 2.653.75 3.548-.314.048-.058 1.78-2.56 1.936-2.64 1.037-.533 2.965-1.447 3.808-1.42.897.029 6.281 5.957 6.281 5.957.206.259.23.618.06.902l-2.915 5.228c-.079.131-.193.236-.33.303l-2.674 1.5c-.154.075-.328.099-.496.067l-5.27-2.272c-.262-.113-.48-.32-.592-.583-.787-1.85-.898-3.619-.899-3.639-.065-1.39-1.244-2.463-2.634-2.398-1.387.056-2.463 1.243-2.398 2.633.013.263.351 5.64 4.727 9.292 2.528 2.108 5.654 2.924 9.649 2.387 4.612-.619 7.469-1.233 11.506-9.558 1.117-2.305 1.903-6.024 1.571-7.781z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f44c-1f3fe.svg b/public/emoji/1f44c-1f3fe.svg index b3baf8e7b..91cb40e4a 100644 --- a/public/emoji/1f44c-1f3fe.svg +++ b/public/emoji/1f44c-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M24.997 28.5c-1.185 0-2.237-.846-2.457-2.053l-4-22c-.247-1.358.654-2.66 2.012-2.907 1.358-.251 2.66.654 2.907 2.012l4 22c.247 1.358-.654 2.66-2.013 2.907-.15.028-.3.041-.449.041z"/><path fill="#AF7E57" d="M28.375 24.765c.239-.745.13-1.591-.375-2.265-.059-.078-.44-.585-1.017-1.34.005-.052.017-.112.017-.16 0-.458-1.913-2.623-3.74-4.586-1.587-1.965-3.261-3.951-4.492-5.182l-1.274-1.274-1.612.806c-5.718 2.859-8.647 3.855-8.672 3.864-1.31.437-2.018 1.852-1.581 3.162.437 1.31 1.852 2.015 3.162 1.582.117-.039 2.666-.899 7.65-3.311 1.094 1.23 2.378 2.795 3.574 4.296l.704 1.174c.169.282.146.639-.061.896l-3.513 4.392c-.095.119-.222.207-.365.255l-2.531.844c-.161.054-.336.054-.497 0l-4.73-1.576c-.676-2.082-.533-4.102-.531-4.124.12-1.376-.899-2.588-2.274-2.707-1.372-.128-2.587.897-2.707 2.273-.022.261-.51 6.424 3.313 10.594 2.208 2.408 5.296 3.63 9.178 3.63.66 0 1.283.009 1.871.018.529.008 1.042.016 1.537.016 2.764 0 5.004-.231 6.738-1.941 1.649-1.626 2.354-4.195 2.354-8.592-.001-.263-.052-.508-.126-.744z"/><path fill="#90603E" d="M27.001 21c-.384 0-.749-.221-.915-.594l-4-9c-.224-.505.003-1.096.508-1.32.506-.226 1.096.003 1.32.507l4 9c.224.505-.003 1.096-.508 1.32-.132.06-.269.087-.405.087z"/><path fill="#AF7E57" d="M24.766 34.38l-1.531-4.76s-.066.011-.175.066c.017-.009 1.821-.995 2.461-6.003.775-6.075-.774-9.6-.79-9.634l-.093-.231-3.5-10.104c-.452-1.305.239-2.729 1.544-3.181 1.303-.451 2.729.24 3.181 1.544l3.469 10.013c.377.887 2.035 5.285 1.148 12.226-1.042 8.163-4.943 9.816-5.714 10.064z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M23.216 20.937l-1.721-6.86-3.947-8.816c-.502-1.297.143-2.756 1.44-3.257 1.296-.506 2.756.143 3.258 1.44l6.203 15.769-5.233 1.724z"/><path fill="#AF7E57" d="M31.565 18.449c-.488-2.581-1.988-6.523-1.988-6.523L23.79 1.437C23.164.195 21.648-.303 20.407.322c-1.242.626-1.742 2.141-1.115 3.383l5.33 9.547c.013.022 1.413 5.491 1.413 5.491-1.078-.995-2.607-2.359-4.015-3.618-3.098-2.772-4.936-3.811-4.936-3.811-.71-.443-1.179-.506-2.132-.059L9.08 13.823c-.157.078-.29.188-.395.329l-2.313 3.086c-.893 1.067-.752 2.655.315 3.547 1.066.893 2.653.75 3.548-.314.048-.058 1.78-2.56 1.936-2.64 1.037-.533 2.965-1.447 3.808-1.42.897.029 6.281 5.957 6.281 5.957.206.259.23.618.06.902l-2.915 5.228c-.079.131-.193.236-.33.303l-2.674 1.5c-.154.075-.328.099-.496.067l-5.27-2.272c-.262-.113-.48-.32-.592-.583-.787-1.85-.898-3.619-.899-3.639-.065-1.39-1.244-2.463-2.634-2.398-1.387.056-2.463 1.243-2.398 2.633.013.263.351 5.64 4.727 9.292 2.528 2.108 5.654 2.924 9.649 2.387 4.612-.619 7.469-1.233 11.506-9.558 1.117-2.305 1.903-6.024 1.571-7.781z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f44c-1f3ff.svg b/public/emoji/1f44c-1f3ff.svg index 95b011c69..ffa03f7a0 100644 --- a/public/emoji/1f44c-1f3ff.svg +++ b/public/emoji/1f44c-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M24.997 28.5c-1.185 0-2.237-.846-2.457-2.053l-4-22c-.247-1.358.654-2.66 2.012-2.907 1.358-.251 2.66.654 2.907 2.012l4 22c.247 1.358-.654 2.66-2.013 2.907-.15.028-.3.041-.449.041z"/><path fill="#7C533E" d="M28.375 24.765c.239-.745.13-1.591-.375-2.265-.059-.078-.44-.585-1.017-1.34.005-.052.017-.112.017-.16 0-.458-1.913-2.623-3.74-4.586-1.587-1.965-3.261-3.951-4.492-5.182l-1.274-1.274-1.612.806c-5.718 2.859-8.647 3.855-8.672 3.864-1.31.437-2.018 1.852-1.581 3.162.437 1.31 1.852 2.015 3.162 1.582.117-.039 2.666-.899 7.65-3.311 1.094 1.23 2.378 2.795 3.574 4.296l.704 1.174c.169.282.146.639-.061.896l-3.513 4.392c-.095.119-.222.207-.365.255l-2.531.844c-.161.054-.336.054-.497 0l-4.73-1.576c-.676-2.082-.533-4.102-.531-4.124.12-1.376-.899-2.588-2.274-2.707-1.372-.128-2.587.897-2.707 2.273-.022.261-.51 6.424 3.313 10.594 2.208 2.408 5.296 3.63 9.178 3.63.66 0 1.283.009 1.871.018.529.008 1.042.016 1.537.016 2.764 0 5.004-.231 6.738-1.941 1.649-1.626 2.354-4.195 2.354-8.592-.001-.263-.052-.508-.126-.744z"/><path fill="#583529" d="M27.001 21c-.384 0-.749-.221-.915-.594l-4-9c-.224-.505.003-1.096.508-1.32.506-.226 1.096.003 1.32.507l4 9c.224.505-.003 1.096-.508 1.32-.132.06-.269.087-.405.087z"/><path fill="#7C533E" d="M24.766 34.38l-1.531-4.76s-.066.011-.175.066c.017-.009 1.821-.995 2.461-6.003.775-6.075-.774-9.6-.79-9.634l-.093-.231-3.5-10.104c-.452-1.305.239-2.729 1.544-3.181 1.303-.451 2.729.24 3.181 1.544l3.469 10.013c.377.887 2.035 5.285 1.148 12.226-1.042 8.163-4.943 9.816-5.714 10.064z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M23.216 20.937l-1.721-6.86-3.947-8.816c-.502-1.297.143-2.756 1.44-3.257 1.296-.506 2.756.143 3.258 1.44l6.203 15.769-5.233 1.724z"/><path fill="#7C533E" d="M31.565 18.449c-.488-2.581-1.988-6.523-1.988-6.523L23.79 1.437C23.164.195 21.648-.303 20.407.322c-1.242.626-1.742 2.141-1.115 3.383l5.33 9.547c.013.022 1.413 5.491 1.413 5.491-1.078-.995-2.607-2.359-4.015-3.618-3.098-2.772-4.936-3.811-4.936-3.811-.71-.443-1.179-.506-2.132-.059L9.08 13.823c-.157.078-.29.188-.395.329l-2.313 3.086c-.893 1.067-.752 2.655.315 3.547 1.066.893 2.653.75 3.548-.314.048-.058 1.78-2.56 1.936-2.64 1.037-.533 2.965-1.447 3.808-1.42.897.029 6.281 5.957 6.281 5.957.206.259.23.618.06.902l-2.915 5.228c-.079.131-.193.236-.33.303l-2.674 1.5c-.154.075-.328.099-.496.067l-5.27-2.272c-.262-.113-.48-.32-.592-.583-.787-1.85-.898-3.619-.899-3.639-.065-1.39-1.244-2.463-2.634-2.398-1.387.056-2.463 1.243-2.398 2.633.013.263.351 5.64 4.727 9.292 2.528 2.108 5.654 2.924 9.649 2.387 4.612-.619 7.469-1.233 11.506-9.558 1.117-2.305 1.903-6.024 1.571-7.781z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f44c.svg b/public/emoji/1f44c.svg index bf82d1aaf..c36d77485 100644 --- a/public/emoji/1f44c.svg +++ b/public/emoji/1f44c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M24.997 28.5c-1.185 0-2.237-.846-2.457-2.053l-4-22c-.247-1.358.654-2.66 2.012-2.907 1.358-.251 2.66.654 2.907 2.012l4 22c.247 1.358-.654 2.66-2.013 2.907-.15.028-.3.041-.449.041z"/><path fill="#FFDC5D" d="M28.375 24.765c.239-.745.13-1.591-.375-2.265-.059-.078-.44-.585-1.017-1.34.005-.052.017-.112.017-.16 0-.458-1.913-2.623-3.74-4.586-1.587-1.965-3.261-3.951-4.492-5.182l-1.274-1.274-1.612.806c-5.718 2.859-8.647 3.855-8.672 3.864-1.31.437-2.018 1.852-1.581 3.162.437 1.31 1.852 2.015 3.162 1.582.117-.039 2.666-.899 7.65-3.311 1.094 1.23 2.378 2.795 3.574 4.296l.704 1.174c.169.282.146.639-.061.896l-3.513 4.392c-.095.119-.222.207-.365.255l-2.531.844c-.161.054-.336.054-.497 0l-4.73-1.576c-.676-2.082-.533-4.102-.531-4.124.12-1.376-.899-2.588-2.274-2.707-1.372-.128-2.587.897-2.707 2.273-.022.261-.51 6.424 3.313 10.594 2.208 2.408 5.296 3.63 9.178 3.63.66 0 1.283.009 1.871.018.529.008 1.042.016 1.537.016 2.764 0 5.004-.231 6.738-1.941 1.649-1.626 2.354-4.195 2.354-8.592-.001-.263-.052-.508-.126-.744z"/><path fill="#EF9645" d="M27.001 21c-.384 0-.749-.221-.915-.594l-4-9c-.224-.505.003-1.096.508-1.32.506-.226 1.096.003 1.32.507l4 9c.224.505-.003 1.096-.508 1.32-.132.06-.269.087-.405.087z"/><path fill="#FFDC5D" d="M24.766 34.38l-1.531-4.76s-.066.011-.175.066c.017-.009 1.821-.995 2.461-6.003.775-6.075-.774-9.6-.79-9.634l-.093-.231-3.5-10.104c-.452-1.305.239-2.729 1.544-3.181 1.303-.451 2.729.24 3.181 1.544l3.469 10.013c.377.887 2.035 5.285 1.148 12.226-1.042 8.163-4.943 9.816-5.714 10.064z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M23.216 20.937l-1.721-6.86-3.947-8.816c-.502-1.297.143-2.756 1.44-3.257 1.296-.506 2.756.143 3.258 1.44l6.203 15.769-5.233 1.724z"/><path fill="#FFDC5D" d="M31.565 18.449c-.488-2.581-1.988-6.523-1.988-6.523L23.79 1.437C23.164.195 21.648-.303 20.407.322c-1.242.626-1.742 2.141-1.115 3.383l5.33 9.547c.013.022 1.413 5.491 1.413 5.491-1.078-.995-2.607-2.359-4.015-3.618-3.098-2.772-4.936-3.811-4.936-3.811-.71-.443-1.179-.506-2.132-.059L9.08 13.823c-.157.078-.29.188-.395.329l-2.313 3.086c-.893 1.067-.752 2.655.315 3.547 1.066.893 2.653.75 3.548-.314.048-.058 1.78-2.56 1.936-2.64 1.037-.533 2.965-1.447 3.808-1.42.897.029 6.281 5.957 6.281 5.957.206.259.23.618.06.902l-2.915 5.228c-.079.131-.193.236-.33.303l-2.674 1.5c-.154.075-.328.099-.496.067l-5.27-2.272c-.262-.113-.48-.32-.592-.583-.787-1.85-.898-3.619-.899-3.639-.065-1.39-1.244-2.463-2.634-2.398-1.387.056-2.463 1.243-2.398 2.633.013.263.351 5.64 4.727 9.292 2.528 2.108 5.654 2.924 9.649 2.387 4.612-.619 7.469-1.233 11.506-9.558 1.117-2.305 1.903-6.024 1.571-7.781z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f453.svg b/public/emoji/1f453.svg index d6e8759b5..18d99981e 100644 --- a/public/emoji/1f453.svg +++ b/public/emoji/1f453.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M35.686 11.931c-.507-.522-6.83-1.094-13.263-.369-1.283.144-1.363.51-4.425.63-3.061-.119-3.141-.485-4.425-.63C7.14 10.837.817 11.41.31 11.931c-.252.261-.252 2.077 0 2.338.254.261 1.035.606 1.403 1.827.237.787.495 5.864 2.281 7.377 1.768 1.498 7.462 1.217 9.326.262 2.536-1.298 2.892-5.785 3.292-7.639.203-.939 1.162-1.016 1.385-1.016s1.182.077 1.385 1.016c.401 1.853.757 6.34 3.292 7.639 1.865.955 7.558 1.236 9.326-.262 1.786-1.513 2.044-6.59 2.281-7.377.368-1.22 1.149-1.566 1.403-1.827.254-.26.254-2.077.002-2.338z"/><path fill="#55ACEE" d="M14.644 15.699c-.098 1.255-.521 4.966-1.757 6.083-1.376 1.243-6.25 1.568-7.79.044-.808-.799-1.567-4.018-1.503-6.816.038-1.679 2.274-2.02 5.462-2.02 3.148 0 5.763.468 5.588 2.709zm6.707 0c.098 1.255.521 4.966 1.757 6.083 1.376 1.243 6.25 1.568 7.79.044.808-.799 1.567-4.018 1.503-6.816-.038-1.679-2.274-2.02-5.462-2.02-3.147 0-5.763.468-5.588 2.709z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M35.686 11.931c-.507-.522-6.83-1.094-13.263-.369-1.283.144-1.363.51-4.425.63-3.061-.119-3.141-.485-4.425-.63C7.14 10.837.817 11.41.31 11.931c-.252.261-.252 2.077 0 2.338.254.261 1.035.606 1.403 1.827.237.787.495 5.864 2.281 7.377 1.768 1.498 7.462 1.217 9.326.262 2.536-1.298 2.892-5.785 3.292-7.639.203-.939 1.162-1.016 1.385-1.016s1.182.077 1.385 1.016c.401 1.853.757 6.34 3.292 7.639 1.865.955 7.558 1.236 9.326-.262 1.786-1.513 2.044-6.59 2.281-7.377.368-1.22 1.149-1.566 1.403-1.827.254-.26.254-2.077.002-2.338z"/><path fill="#55ACEE" d="M14.644 15.699c-.098 1.255-.521 4.966-1.757 6.083-1.376 1.243-6.25 1.568-7.79.044-.808-.799-1.567-4.018-1.503-6.816.038-1.679 2.274-2.02 5.462-2.02 3.148 0 5.763.468 5.588 2.709zm6.707 0c.098 1.255.521 4.966 1.757 6.083 1.376 1.243 6.25 1.568 7.79.044.808-.799 1.567-4.018 1.503-6.816-.038-1.679-2.274-2.02-5.462-2.02-3.147 0-5.763.468-5.588 2.709z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f464.svg b/public/emoji/1f464.svg index 143f12ad5..51d02dd25 100644 --- a/public/emoji/1f464.svg +++ b/public/emoji/1f464.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M24 26.799v-2.566c2-1.348 4.08-3.779 4.703-6.896.186.103.206.17.413.17.991 0 1.709-1.287 1.709-2.873 0-1.562-.823-2.827-1.794-2.865.187-.674.293-1.577.293-2.735C29.324 5.168 26 .527 18.541.527c-6.629 0-10.777 4.641-10.777 8.507 0 1.123.069 2.043.188 2.755-.911.137-1.629 1.352-1.629 2.845 0 1.587.804 2.873 1.796 2.873.206 0 .025-.067.209-.17C8.952 20.453 11 22.885 13 24.232v2.414c-5 .645-12 3.437-12 6.23v1.061C1 35 2.076 35 3.137 35h29.725C33.924 35 35 35 35 33.938v-1.061c0-2.615-6-5.225-11-6.078z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#269" d="M24 26.799v-2.566c2-1.348 4.08-3.779 4.703-6.896.186.103.206.17.413.17.991 0 1.709-1.287 1.709-2.873 0-1.562-.823-2.827-1.794-2.865.187-.674.293-1.577.293-2.735C29.324 5.168 26 .527 18.541.527c-6.629 0-10.777 4.641-10.777 8.507 0 1.123.069 2.043.188 2.755-.911.137-1.629 1.352-1.629 2.845 0 1.587.804 2.873 1.796 2.873.206 0 .025-.067.209-.17C8.952 20.453 11 22.885 13 24.232v2.414c-5 .645-12 3.437-12 6.23v1.061C1 35 2.076 35 3.137 35h29.725C33.924 35 35 35 35 33.938v-1.061c0-2.615-6-5.225-11-6.078z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f465.svg b/public/emoji/1f465.svg index 571a3f344..076c6e7df 100644 --- a/public/emoji/1f465.svg +++ b/public/emoji/1f465.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M29 20.729v-1.963c1-1.03 2.914-2.89 3.391-5.273.142.079.055.13.213.13.758 0 1.256-.983 1.256-2.197 0-1.194-.656-2.161-1.399-2.191.143-.516.212-1.206.212-2.092 0-2.956-2.549-6.505-8.253-6.505-5.068 0-8.244 3.549-8.244 6.505 0 .858.051 1.562.142 2.107-.697.105-1.247 1.033-1.247 2.175 0 1.214.614 2.197 1.373 2.197.157 0-.069-.051.072-.13.477 2.384 2.484 4.243 3.484 5.274v1.847c-4 .492-7 2.628-7 4.765v.81c0 .812.823.812 1.634.812h18.73c.813 0 1.636 0 1.636-.812v-.81c0-2.001-3-3.997-6-4.649z"/><path fill="#292F33" d="M17 28.729v-1.963c1-1.03 2.914-2.89 3.391-5.273.142.079.055.13.213.13.758 0 1.256-.983 1.256-2.197 0-1.194-.656-2.161-1.399-2.191.143-.516.212-1.206.212-2.092 0-2.956-2.549-6.505-8.253-6.505-5.069 0-8.244 3.549-8.244 6.505 0 .858.051 1.562.142 2.107-.697.105-1.247 1.033-1.247 2.175 0 1.214.614 2.197 1.373 2.197.157 0-.069-.051.072-.13C4.993 23.876 7 25.735 8 26.766v1.847c-4 .492-7 2.628-7 4.765v.811C1 35 1.823 35 2.634 35h18.73c.813 0 1.636 0 1.636-.812v-.811c0-2-3-3.996-6-4.648z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M29 20.729v-1.963c1-1.03 2.914-2.89 3.391-5.273.142.079.055.13.213.13.758 0 1.256-.983 1.256-2.197 0-1.194-.656-2.161-1.399-2.191.143-.516.212-1.206.212-2.092 0-2.956-2.549-6.505-8.253-6.505-5.068 0-8.244 3.549-8.244 6.505 0 .858.051 1.562.142 2.107-.697.105-1.247 1.033-1.247 2.175 0 1.214.614 2.197 1.373 2.197.157 0-.069-.051.072-.13.477 2.384 2.484 4.243 3.484 5.274v1.847c-4 .492-7 2.628-7 4.765v.81c0 .812.823.812 1.634.812h18.73c.813 0 1.636 0 1.636-.812v-.81c0-2.001-3-3.997-6-4.649z"/><path fill="#269" d="M17 28.729v-1.963c1-1.03 2.914-2.89 3.391-5.273.142.079.055.13.213.13.758 0 1.256-.983 1.256-2.197 0-1.194-.656-2.161-1.399-2.191.143-.516.212-1.206.212-2.092 0-2.956-2.549-6.505-8.253-6.505-5.069 0-8.244 3.549-8.244 6.505 0 .858.051 1.562.142 2.107-.697.105-1.247 1.033-1.247 2.175 0 1.214.614 2.197 1.373 2.197.157 0-.069-.051.072-.13C4.993 23.876 7 25.735 8 26.766v1.847c-4 .492-7 2.628-7 4.765v.811C1 35 1.823 35 2.634 35h18.73c.813 0 1.636 0 1.636-.812v-.811c0-2-3-3.996-6-4.648z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fb-200d-1f9af.svg b/public/emoji/1f468-1f3fb-200d-1f9af.svg new file mode 100644 index 000000000..06f7b2cfc --- /dev/null +++ b/public/emoji/1f468-1f3fb-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.436 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95-.043-.081-.09-.139-.194-.11-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.004.16s.987.397 2.344.397 1.566-.399 2.444-.399c.877 0 1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.685 35.926c-.058-.052-.123-.22-.173-.243-.05-.023-.57.089-.813.146-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.222-5.012s-.072-.142-.307-.343-.777-.454-.868-.473c-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828-.096.838-.148 1.158c-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.101s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.58-.68.744-1.144.744-1.144z"/><path fill="#292F33" d="M30.425 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416s-.082-.003-.104-.028c-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107.484-.568.704-.997.876-1.36.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.978 1.394-1.056 1.404z"/><path fill="#F7DECE" d="M21.5 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.042-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M22.684 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#292F33" d="M23.32 2.026C22.259.784 20.74.125 18.301 1.235c-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.578.016.484-.551.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M18.558 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.805.876z"/><path fill="#4289C1" d="M29.292 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.064.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M25.495 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858.239 3.216.25 6.062.25 6.062z"/><path fill="#F7DECE" d="M20.029 11.693c-.781 1.172-2.291 3.808-2.518 3.909-1.205.534-2.549 1.22-3.445 1.314-.649.068-1.254.68-1.508.925-.316.304-.75 1.008-.63 1.37.075.226.571.488.742.253.332-.458.973-.535 1.49-.889 1.038-.712 3.284-.765 4.556-1.709.528-.391 1.677-1.309 3.2-3.9-.592-.426-1.887-1.273-1.887-1.273z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fb-200d-1f9bc.svg b/public/emoji/1f468-1f3fb-200d-1f9bc.svg new file mode 100644 index 000000000..012784566 --- /dev/null +++ b/public/emoji/1f468-1f3fb-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M26.007 1.015c-1.214-.871-3.488-.718-4.13.795-.638 1.502-.813 4.067.598 4.266 1.479.209 3.036.269 3.994-1.066.959-1.335.752-3.124-.462-3.995z"/><path fill="#F7DECE" d="M25.99 5.295c2.544-1.808-2.238-2.778-2.238-2.778-.902-.194-.664 1.452-1.29 2.159-.431.49.708 1.096.708 1.096s.56.133.419.817l-.002.006c-.037.174-.107.374-.256.627-.743 1.253.866 2.543 1.609 1.287.294-.497.352-.985.382-1.441l.003-.041c.043-.679.036-1.285.665-1.732z"/><path fill="#292F33" d="M27.409 1.948C26.777.671 25.632-.212 23.332.206c-.937.17-1.279-.066-1.441.071-.778.661-.222 1.753.13 1.652 1.114-.321 1.948.069 2.068.535.12.466-.272 1.15-.092 1.2.486.137.528-.363.791-.59.431-.371.85.006.829.535-.017.42-.272 1.075-.953 1.03.196 1.086.998 1.604.998 1.604s.256.184.986-.652c.729-.836 1.389-2.375.761-3.643zM8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.339-.347 5.539-.231 1.201.118 5.206-.287 5.266.958z"/><path fill="#4289C1" d="M7.002 27.225c-.646-.143-1.293-.6-1.419-1.224 1.346-1.871 3.671-7.538 3.671-7.538.695-1.744 1.517-3.426 3.133-3.182 2.081.315 5.629 1.028 5.629 1.028 2.276.329 1.144 1.007 1.778 1.912.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.826.244-.993.004-1.64-.139z"/><path fill="#77B255" d="M25.569 16.971c-.211.688-.149 1.604-.515 1.362-1.444-.957-5.521-2.045-5.521-2.045.049-1.673.979-3.969 1.559-6.148.762-2.86 3.067-3.951 4.171-3.289 1.443.865 1.75 2.668 1.308 5.266s-.791 4.166-1.002 4.854z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#F7DECE" d="M22.691 10.276c-.579 1.455-1.125 3.55-1.381 3.561-1.473.062-3.079.948-4.006.893-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 3.986.754 5.665-.345.566-.371 1.441-1.871 2.525-4.663-1.084-.477-2.51-.744-2.51-.744z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fb-200d-1f9bd.svg b/public/emoji/1f468-1f3fb-200d-1f9bd.svg new file mode 100644 index 000000000..7d0c06d0d --- /dev/null +++ b/public/emoji/1f468-1f3fb-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M21.96.974c-1.285-.762-3.537-.411-4.045 1.152-.504 1.552-.455 4.123.968 4.198 1.492.079 3.048.003 3.886-1.41.838-1.414.476-3.178-.809-3.94z"/><path fill="#F7DECE" d="M22.316 5.239c2.376-2.023-2.471-2.572-2.471-2.572-.916-.114-.535 1.504-1.097 2.263-.387.526.801 1.03.801 1.03s.569.083.488.777l-.001.006c-.021.177-.074.382-.2.647-.631 1.313 1.085 2.458 1.715 1.142.249-.521.265-1.012.255-1.469l-.001-.041c-.017-.68-.076-1.283.511-1.783z"/><path fill="#292F33" d="M23.439 1.781C22.698.564 21.481-.216 19.225.4c-.919.251-1.279.045-1.429.196-.718.726-.068 1.766.273 1.634 1.082-.417 1.946-.101 2.106.353.16.454-.171 1.169.013 1.204.496.094.494-.407.737-.657.397-.408.847-.068.872.461.02.419-.177 1.095-.86 1.109.29 1.065 1.134 1.511 1.134 1.511s.271.161.925-.735c.655-.896 1.178-2.486.443-3.695zM8.211 30.079s.097-.127.175-.426c.078-.299.069-.897.047-.988-.022-.091-.053-.16-.163-.158-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041-.279-.036-.496-.105-.563-.116s-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.262 30.488c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142s-1.074-.431-1.436-.629-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.004-1.679-.271-1.722-.338z"/><path fill="#4289C1" d="M24.032 17.279c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.115-2.108-.301-.994-.187-1.44-.16-2.522-.359-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.292-.724 5.498-.712 1.207.011 5.162-.741 5.33.494z"/><path fill="#4289C1" d="M6.879 28.832c-.656-.086-1.341-.485-1.521-1.095 1.178-1.982 3-7.829 3-7.829.541-1.798 1.213-3.546 2.843-3.443 2.1.133 5.697.533 5.697.533 2.296.13 1.228.904 1.938 1.75.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.799.315-.987.091-1.643.004z"/><path fill="#77B255" d="M24.698 16.173c.029.719.15 1.674-.276 1.567-1.679-.424-5.438-.168-5.438-.168-.508-1.594-.392-4.069-.566-6.317-.229-2.95 1.585-4.744 2.845-4.485.513.105 1.136.428 1.511.77.278.253.924.961 1.141 1.169 1.106 1.06.124 1.405.327 2.596.444 2.597.427 4.149.456 4.868z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#F7DECE" d="M22.118 10.597c1.142.988 3.458 2.697 3.436 2.951-.128 1.469.543 3.175.369 4.087-.126.661-.665 1.138-.594 1.495.667-.009.443 1.15.729 1.665.301.542 1.171-.093 1.282-.949.081-.629-.102-1.11-.167-1.752-.093-.915 1.094-3.661.22-5.467-.295-.609-1.531-2.277-3.635-4.122-.595.457-1.64 2.092-1.64 2.092z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg b/public/emoji/1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg new file mode 100644 index 000000000..447fd47bf --- /dev/null +++ b/public/emoji/1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#F3D2A2" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#F3D2A2" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#C1694F" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#C1694F" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fc-200d-1f9af.svg b/public/emoji/1f468-1f3fc-200d-1f9af.svg new file mode 100644 index 000000000..77eb17286 --- /dev/null +++ b/public/emoji/1f468-1f3fc-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.436 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95-.043-.081-.09-.139-.194-.11-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.004.16s.987.397 2.344.397 1.566-.399 2.444-.399c.877 0 1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.685 35.926c-.058-.052-.123-.22-.173-.243-.05-.023-.57.089-.813.146-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.222-5.012s-.072-.142-.307-.343-.777-.454-.868-.473c-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828-.096.838-.148 1.158c-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.101s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.58-.68.744-1.144.744-1.144z"/><path fill="#292F33" d="M30.425 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416s-.082-.003-.104-.028c-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107.484-.568.704-.997.876-1.36.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.978 1.394-1.056 1.404z"/><path fill="#F3D2A2" d="M21.5 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.042-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M22.684 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#FFE51E" d="M23.32 2.026C22.259.784 20.74.125 18.301 1.235c-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.578.016.484-.551.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M18.558 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.805.876z"/><path fill="#4289C1" d="M29.292 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.064.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M25.495 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858.239 3.216.25 6.062.25 6.062z"/><path fill="#F3D2A2" d="M20.029 11.693c-.781 1.172-2.291 3.808-2.518 3.909-1.205.534-2.549 1.22-3.445 1.314-.649.068-1.254.68-1.508.925-.316.304-.75 1.008-.63 1.37.075.226.571.488.742.253.332-.458.973-.535 1.49-.889 1.038-.712 3.284-.765 4.556-1.709.528-.391 1.677-1.309 3.2-3.9-.592-.426-1.887-1.273-1.887-1.273z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fc-200d-1f9bc.svg b/public/emoji/1f468-1f3fc-200d-1f9bc.svg new file mode 100644 index 000000000..08bc53e6d --- /dev/null +++ b/public/emoji/1f468-1f3fc-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M26.007 1.015c-1.214-.871-3.488-.718-4.13.795-.638 1.502-.813 4.067.598 4.266 1.479.209 3.036.269 3.994-1.066.959-1.335.752-3.124-.462-3.995z"/><path fill="#F3D2A2" d="M25.99 5.295c2.544-1.808-2.238-2.778-2.238-2.778-.902-.194-.664 1.452-1.29 2.159-.431.49.708 1.096.708 1.096s.56.133.419.817l-.002.006c-.037.174-.107.374-.256.627-.743 1.253.866 2.543 1.609 1.287.294-.497.352-.985.382-1.441l.003-.041c.043-.679.036-1.285.665-1.732z"/><path fill="#FFE51E" d="M27.409 1.948C26.777.671 25.632-.212 23.332.206c-.937.17-1.279-.066-1.441.071-.778.661-.222 1.753.13 1.652 1.114-.321 1.948.069 2.068.535.12.466-.272 1.15-.092 1.2.486.137.528-.363.791-.59.431-.371.85.006.829.535-.017.42-.272 1.075-.953 1.03.196 1.086.998 1.604.998 1.604s.256.184.986-.652c.729-.836 1.389-2.375.761-3.643z"/><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.339-.347 5.539-.231 1.201.118 5.206-.287 5.266.958z"/><path fill="#4289C1" d="M7.002 27.225c-.646-.143-1.293-.6-1.419-1.224 1.346-1.871 3.671-7.538 3.671-7.538.695-1.744 1.517-3.426 3.133-3.182 2.081.315 5.629 1.028 5.629 1.028 2.276.329 1.144 1.007 1.778 1.912.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.826.244-.993.004-1.64-.139z"/><path fill="#77B255" d="M25.569 16.971c-.211.688-.149 1.604-.515 1.362-1.444-.957-5.521-2.045-5.521-2.045.049-1.673.979-3.969 1.559-6.148.762-2.86 3.067-3.951 4.171-3.289 1.443.865 1.75 2.668 1.308 5.266s-.791 4.166-1.002 4.854z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#F3D2A2" d="M22.691 10.276c-.579 1.455-1.125 3.55-1.381 3.561-1.473.062-3.079.948-4.006.893-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 3.986.754 5.665-.345.566-.371 1.441-1.871 2.525-4.663-1.084-.477-2.51-.744-2.51-.744z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fc-200d-1f9bd.svg b/public/emoji/1f468-1f3fc-200d-1f9bd.svg new file mode 100644 index 000000000..6fbe0659c --- /dev/null +++ b/public/emoji/1f468-1f3fc-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M21.96.974c-1.285-.762-3.537-.411-4.045 1.152-.504 1.552-.455 4.123.968 4.198 1.492.079 3.048.003 3.886-1.41.838-1.414.476-3.178-.809-3.94z"/><path fill="#F3D2A2" d="M22.316 5.239c2.376-2.023-2.471-2.572-2.471-2.572-.916-.114-.535 1.504-1.097 2.263-.387.526.801 1.03.801 1.03s.569.083.488.777l-.001.006c-.021.177-.074.382-.2.647-.631 1.313 1.085 2.458 1.715 1.142.249-.521.265-1.012.255-1.469l-.001-.041c-.017-.68-.076-1.283.511-1.783z"/><path fill="#FFE51E" d="M23.439 1.781C22.698.564 21.481-.216 19.225.4c-.919.251-1.279.045-1.429.196-.718.726-.068 1.766.273 1.634 1.082-.417 1.946-.101 2.106.353.16.454-.171 1.169.013 1.204.496.094.494-.407.737-.657.397-.408.847-.068.872.461.02.419-.177 1.095-.86 1.109.29 1.065 1.134 1.511 1.134 1.511s.271.161.925-.735c.655-.896 1.178-2.486.443-3.695z"/><path fill="#292F33" d="M8.211 30.079s.097-.127.175-.426c.078-.299.069-.897.047-.988-.022-.091-.053-.16-.163-.158-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041-.279-.036-.496-.105-.563-.116s-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.262 30.488c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142s-1.074-.431-1.436-.629-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.004-1.679-.271-1.722-.338z"/><path fill="#4289C1" d="M24.032 17.279c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.115-2.108-.301-.994-.187-1.44-.16-2.522-.359-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.292-.724 5.498-.712 1.207.011 5.162-.741 5.33.494z"/><path fill="#4289C1" d="M6.879 28.832c-.656-.086-1.341-.485-1.521-1.095 1.178-1.982 3-7.829 3-7.829.541-1.798 1.213-3.546 2.843-3.443 2.1.133 5.697.533 5.697.533 2.296.13 1.228.904 1.938 1.75.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.799.315-.987.091-1.643.004z"/><path fill="#77B255" d="M24.698 16.173c.029.719.15 1.674-.276 1.567-1.679-.424-5.438-.168-5.438-.168-.508-1.594-.392-4.069-.566-6.317-.229-2.95 1.585-4.744 2.845-4.485.513.105 1.136.428 1.511.77.278.253.924.961 1.141 1.169 1.106 1.06.124 1.405.327 2.596.444 2.597.427 4.149.456 4.868z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#F3D2A2" d="M22.118 10.597c1.142.988 3.458 2.697 3.436 2.951-.128 1.469.543 3.175.369 4.087-.126.661-.665 1.138-.594 1.495.667-.009.443 1.15.729 1.665.301.542 1.171-.093 1.282-.949.081-.629-.102-1.11-.167-1.752-.093-.915 1.094-3.661.22-5.467-.295-.609-1.531-2.277-3.635-4.122-.595.457-1.64 2.092-1.64 2.092z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg b/public/emoji/1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg new file mode 100644 index 000000000..bb34ac855 --- /dev/null +++ b/public/emoji/1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#D4AB88" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#D4AB88" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#C1694F" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#C1694F" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg b/public/emoji/1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg new file mode 100644 index 000000000..4d6b0dd69 --- /dev/null +++ b/public/emoji/1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#D4AB88" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#D4AB88" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#C1694F" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#C1694F" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fd-200d-1f9af.svg b/public/emoji/1f468-1f3fd-200d-1f9af.svg new file mode 100644 index 000000000..f28f13f25 --- /dev/null +++ b/public/emoji/1f468-1f3fd-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.436 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95-.043-.081-.09-.139-.194-.11-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.004.16s.987.397 2.344.397 1.566-.399 2.444-.399c.877 0 1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.685 35.926c-.058-.052-.123-.22-.173-.243-.05-.023-.57.089-.813.146-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.222-5.012s-.072-.142-.307-.343-.777-.454-.868-.473c-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828-.096.838-.148 1.158c-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.101s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.58-.68.744-1.144.744-1.144z"/><path fill="#292F33" d="M30.425 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416s-.082-.003-.104-.028c-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107.484-.568.704-.997.876-1.36.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.978 1.394-1.056 1.404z"/><path fill="#D4AB88" d="M21.5 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.042-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M22.684 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#963B22" d="M23.32 2.026C22.259.784 20.74.125 18.301 1.235c-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.578.016.484-.551.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M18.558 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.805.876z"/><path fill="#4289C1" d="M29.292 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.064.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M25.495 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858.239 3.216.25 6.062.25 6.062z"/><path fill="#D4AB88" d="M20.029 11.693c-.781 1.172-2.291 3.808-2.518 3.909-1.205.534-2.549 1.22-3.445 1.314-.649.068-1.254.68-1.508.925-.316.304-.75 1.008-.63 1.37.075.226.571.488.742.253.332-.458.973-.535 1.49-.889 1.038-.712 3.284-.765 4.556-1.709.528-.391 1.677-1.309 3.2-3.9-.592-.426-1.887-1.273-1.887-1.273z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fd-200d-1f9bc.svg b/public/emoji/1f468-1f3fd-200d-1f9bc.svg new file mode 100644 index 000000000..be45b6793 --- /dev/null +++ b/public/emoji/1f468-1f3fd-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M26.007 1.015c-1.214-.871-3.488-.718-4.13.795-.638 1.502-.813 4.067.598 4.266 1.479.209 3.036.269 3.994-1.066.959-1.335.752-3.124-.462-3.995z"/><path fill="#D4AB88" d="M25.99 5.295c2.544-1.808-2.238-2.778-2.238-2.778-.902-.194-.664 1.452-1.29 2.159-.431.49.708 1.096.708 1.096s.56.133.419.817l-.002.006c-.037.174-.107.374-.256.627-.743 1.253.866 2.543 1.609 1.287.294-.497.352-.985.382-1.441l.003-.041c.043-.679.036-1.285.665-1.732z"/><path fill="#963B22" d="M27.409 1.948C26.777.671 25.632-.212 23.332.206c-.937.17-1.279-.066-1.441.071-.778.661-.222 1.753.13 1.652 1.114-.321 1.948.069 2.068.535.12.466-.272 1.15-.092 1.2.486.137.528-.363.791-.59.431-.371.85.006.829.535-.017.42-.272 1.075-.953 1.03.196 1.086.998 1.604.998 1.604s.256.184.986-.652c.729-.836 1.389-2.375.761-3.643z"/><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.339-.347 5.539-.231 1.201.118 5.206-.287 5.266.958z"/><path fill="#4289C1" d="M7.002 27.225c-.646-.143-1.293-.6-1.419-1.224 1.346-1.871 3.671-7.538 3.671-7.538.695-1.744 1.517-3.426 3.133-3.182 2.081.315 5.629 1.028 5.629 1.028 2.276.329 1.144 1.007 1.778 1.912.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.826.244-.993.004-1.64-.139z"/><path fill="#77B255" d="M25.569 16.971c-.211.688-.149 1.604-.515 1.362-1.444-.957-5.521-2.045-5.521-2.045.049-1.673.979-3.969 1.559-6.148.762-2.86 3.067-3.951 4.171-3.289 1.443.865 1.75 2.668 1.308 5.266s-.791 4.166-1.002 4.854z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#D4AB88" d="M22.691 10.276c-.579 1.455-1.125 3.55-1.381 3.561-1.473.062-3.079.948-4.006.893-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 3.986.754 5.665-.345.566-.371 1.441-1.871 2.525-4.663-1.084-.477-2.51-.744-2.51-.744z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fd-200d-1f9bd.svg b/public/emoji/1f468-1f3fd-200d-1f9bd.svg new file mode 100644 index 000000000..64bf6233d --- /dev/null +++ b/public/emoji/1f468-1f3fd-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M21.96.974c-1.285-.762-3.537-.411-4.045 1.152-.504 1.552-.455 4.123.968 4.198 1.492.079 3.048.003 3.886-1.41.838-1.414.476-3.178-.809-3.94z"/><path fill="#D4AB88" d="M22.316 5.239c2.376-2.023-2.471-2.572-2.471-2.572-.916-.114-.535 1.504-1.097 2.263-.387.526.801 1.03.801 1.03s.569.083.488.777l-.001.006c-.021.177-.074.382-.2.647-.631 1.313 1.085 2.458 1.715 1.142.249-.521.265-1.012.255-1.469l-.001-.041c-.017-.68-.076-1.283.511-1.783z"/><path fill="#963B22" d="M23.439 1.781C22.698.564 21.481-.216 19.225.4c-.919.251-1.279.045-1.429.196-.718.726-.068 1.766.273 1.634 1.082-.417 1.946-.101 2.106.353.16.454-.171 1.169.013 1.204.496.094.494-.407.737-.657.397-.408.847-.068.872.461.02.419-.177 1.095-.86 1.109.29 1.065 1.134 1.511 1.134 1.511s.271.161.925-.735c.655-.896 1.178-2.486.443-3.695z"/><path fill="#292F33" d="M8.211 30.079s.097-.127.175-.426c.078-.299.069-.897.047-.988-.022-.091-.053-.16-.163-.158-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041-.279-.036-.496-.105-.563-.116s-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.262 30.488c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142s-1.074-.431-1.436-.629-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.004-1.679-.271-1.722-.338z"/><path fill="#4289C1" d="M24.032 17.279c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.115-2.108-.301-.994-.187-1.44-.16-2.522-.359-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.292-.724 5.498-.712 1.207.011 5.162-.741 5.33.494z"/><path fill="#4289C1" d="M6.879 28.832c-.656-.086-1.341-.485-1.521-1.095 1.178-1.982 3-7.829 3-7.829.541-1.798 1.213-3.546 2.843-3.443 2.1.133 5.697.533 5.697.533 2.296.13 1.228.904 1.938 1.75.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.799.315-.987.091-1.643.004z"/><path fill="#77B255" d="M24.698 16.173c.029.719.15 1.674-.276 1.567-1.679-.424-5.438-.168-5.438-.168-.508-1.594-.392-4.069-.566-6.317-.229-2.95 1.585-4.744 2.845-4.485.513.105 1.136.428 1.511.77.278.253.924.961 1.141 1.169 1.106 1.06.124 1.405.327 2.596.444 2.597.427 4.149.456 4.868z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#D4AB88" d="M22.118 10.597c1.142.988 3.458 2.697 3.436 2.951-.128 1.469.543 3.175.369 4.087-.126.661-.665 1.138-.594 1.495.667-.009.443 1.15.729 1.665.301.542 1.171-.093 1.282-.949.081-.629-.102-1.11-.167-1.752-.093-.915 1.094-3.661.22-5.467-.295-.609-1.531-2.277-3.635-4.122-.595.457-1.64 2.092-1.64 2.092z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg b/public/emoji/1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg new file mode 100644 index 000000000..7c7ecbf2c --- /dev/null +++ b/public/emoji/1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#AF7E57" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#AF7E57" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#915A34" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#915A34" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg b/public/emoji/1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg new file mode 100644 index 000000000..bbe83212d --- /dev/null +++ b/public/emoji/1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#AF7E57" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#AF7E57" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#915A34" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#915A34" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg b/public/emoji/1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg new file mode 100644 index 000000000..99a2b33d3 --- /dev/null +++ b/public/emoji/1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#AF7E57" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#AF7E57" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#915A34" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#915A34" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fe-200d-1f9af.svg b/public/emoji/1f468-1f3fe-200d-1f9af.svg new file mode 100644 index 000000000..56845736e --- /dev/null +++ b/public/emoji/1f468-1f3fe-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.436 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95-.043-.081-.09-.139-.194-.11-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.004.16s.987.397 2.344.397 1.566-.399 2.444-.399c.877 0 1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.685 35.926c-.058-.052-.123-.22-.173-.243-.05-.023-.57.089-.813.146-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.222-5.012s-.072-.142-.307-.343-.777-.454-.868-.473c-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828-.096.838-.148 1.158c-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.101s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.58-.68.744-1.144.744-1.144z"/><path fill="#292F33" d="M30.425 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416s-.082-.003-.104-.028c-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107.484-.568.704-.997.876-1.36.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.978 1.394-1.056 1.404z"/><path fill="#AF7E57" d="M21.5 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.042-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M22.684 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#60352A" d="M23.32 2.026C22.259.784 20.74.125 18.301 1.235c-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.578.016.484-.551.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M18.558 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.805.876z"/><path fill="#4289C1" d="M29.292 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.064.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M25.495 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858.239 3.216.25 6.062.25 6.062z"/><path fill="#AF7E57" d="M20.029 11.693c-.781 1.172-2.291 3.808-2.518 3.909-1.205.534-2.549 1.22-3.445 1.314-.649.068-1.254.68-1.508.925-.316.304-.75 1.008-.63 1.37.075.226.571.488.742.253.332-.458.973-.535 1.49-.889 1.038-.712 3.284-.765 4.556-1.709.528-.391 1.677-1.309 3.2-3.9-.592-.426-1.887-1.273-1.887-1.273z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fe-200d-1f9bc.svg b/public/emoji/1f468-1f3fe-200d-1f9bc.svg new file mode 100644 index 000000000..0e2b8bed4 --- /dev/null +++ b/public/emoji/1f468-1f3fe-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M26.007 1.015c-1.214-.871-3.488-.718-4.13.795-.638 1.502-.813 4.067.598 4.266 1.479.209 3.036.269 3.994-1.066.959-1.335.752-3.124-.462-3.995z"/><path fill="#AF7E57" d="M25.99 5.295c2.544-1.808-2.238-2.778-2.238-2.778-.902-.194-.664 1.452-1.29 2.159-.431.49.708 1.096.708 1.096s.56.133.419.817l-.002.006c-.037.174-.107.374-.256.627-.743 1.253.866 2.543 1.609 1.287.294-.497.352-.985.382-1.441l.003-.041c.043-.679.036-1.285.665-1.732z"/><path fill="#60352A" d="M27.409 1.948C26.777.671 25.632-.212 23.332.206c-.937.17-1.279-.066-1.441.071-.778.661-.222 1.753.13 1.652 1.114-.321 1.948.069 2.068.535.12.466-.272 1.15-.092 1.2.486.137.528-.363.791-.59.431-.371.85.006.829.535-.017.42-.272 1.075-.953 1.03.196 1.086.998 1.604.998 1.604s.256.184.986-.652c.729-.836 1.389-2.375.761-3.643z"/><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.339-.347 5.539-.231 1.201.118 5.206-.287 5.266.958z"/><path fill="#4289C1" d="M7.002 27.225c-.646-.143-1.293-.6-1.419-1.224 1.346-1.871 3.671-7.538 3.671-7.538.695-1.744 1.517-3.426 3.133-3.182 2.081.315 5.629 1.028 5.629 1.028 2.276.329 1.144 1.007 1.778 1.912.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.826.244-.993.004-1.64-.139z"/><path fill="#77B255" d="M25.569 16.971c-.211.688-.149 1.604-.515 1.362-1.444-.957-5.521-2.045-5.521-2.045.049-1.673.979-3.969 1.559-6.148.762-2.86 3.067-3.951 4.171-3.289 1.443.865 1.75 2.668 1.308 5.266s-.791 4.166-1.002 4.854z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#AF7E57" d="M22.691 10.276c-.579 1.455-1.125 3.55-1.381 3.561-1.473.062-3.079.948-4.006.893-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 3.986.754 5.665-.345.566-.371 1.441-1.871 2.525-4.663-1.084-.477-2.51-.744-2.51-.744z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3fe-200d-1f9bd.svg b/public/emoji/1f468-1f3fe-200d-1f9bd.svg new file mode 100644 index 000000000..655037085 --- /dev/null +++ b/public/emoji/1f468-1f3fe-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M21.96.974c-1.285-.762-3.537-.411-4.045 1.152-.504 1.552-.455 4.123.968 4.198 1.492.079 3.048.003 3.886-1.41.838-1.414.476-3.178-.809-3.94z"/><path fill="#AF7E57" d="M22.316 5.239c2.376-2.023-2.471-2.572-2.471-2.572-.916-.114-.535 1.504-1.097 2.263-.387.526.801 1.03.801 1.03s.569.083.488.777l-.001.006c-.021.177-.074.382-.2.647-.631 1.313 1.085 2.458 1.715 1.142.249-.521.265-1.012.255-1.469l-.001-.041c-.017-.68-.076-1.283.511-1.783z"/><path fill="#60352A" d="M23.439 1.781C22.698.564 21.481-.216 19.225.4c-.919.251-1.279.045-1.429.196-.718.726-.068 1.766.273 1.634 1.082-.417 1.946-.101 2.106.353.16.454-.171 1.169.013 1.204.496.094.494-.407.737-.657.397-.408.847-.068.872.461.02.419-.177 1.095-.86 1.109.29 1.065 1.134 1.511 1.134 1.511s.271.161.925-.735c.655-.896 1.178-2.486.443-3.695z"/><path fill="#292F33" d="M8.211 30.079s.097-.127.175-.426c.078-.299.069-.897.047-.988-.022-.091-.053-.16-.163-.158-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041-.279-.036-.496-.105-.563-.116s-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.262 30.488c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142s-1.074-.431-1.436-.629-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.004-1.679-.271-1.722-.338z"/><path fill="#4289C1" d="M24.032 17.279c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.115-2.108-.301-.994-.187-1.44-.16-2.522-.359-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.292-.724 5.498-.712 1.207.011 5.162-.741 5.33.494z"/><path fill="#4289C1" d="M6.879 28.832c-.656-.086-1.341-.485-1.521-1.095 1.178-1.982 3-7.829 3-7.829.541-1.798 1.213-3.546 2.843-3.443 2.1.133 5.697.533 5.697.533 2.296.13 1.228.904 1.938 1.75.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.799.315-.987.091-1.643.004z"/><path fill="#77B255" d="M24.698 16.173c.029.719.15 1.674-.276 1.567-1.679-.424-5.438-.168-5.438-.168-.508-1.594-.392-4.069-.566-6.317-.229-2.95 1.585-4.744 2.845-4.485.513.105 1.136.428 1.511.77.278.253.924.961 1.141 1.169 1.106 1.06.124 1.405.327 2.596.444 2.597.427 4.149.456 4.868z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#AF7E57" d="M22.118 10.597c1.142.988 3.458 2.697 3.436 2.951-.128 1.469.543 3.175.369 4.087-.126.661-.665 1.138-.594 1.495.667-.009.443 1.15.729 1.665.301.542 1.171-.093 1.282-.949.081-.629-.102-1.11-.167-1.752-.093-.915 1.094-3.661.22-5.467-.295-.609-1.531-2.277-3.635-4.122-.595.457-1.64 2.092-1.64 2.092z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg b/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg new file mode 100644 index 000000000..b2383477f --- /dev/null +++ b/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#7C533E" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#7C533E" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#3D2E24" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="7.498" cy="8.5" r=".5"/><circle cx="12.498" cy="8.5" r=".5"/><path fill="#3D2E24" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg b/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg new file mode 100644 index 000000000..a7f8308d1 --- /dev/null +++ b/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#7C533E" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#7C533E" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#3D2E24" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="7.498" cy="8.5" r=".5"/><circle cx="12.498" cy="8.5" r=".5"/><path fill="#3D2E24" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg b/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg new file mode 100644 index 000000000..e9fc548f6 --- /dev/null +++ b/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#7C533E" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#7C533E" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#3D2E24" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="7.498" cy="8.5" r=".5"/><circle cx="12.498" cy="8.5" r=".5"/><path fill="#3D2E24" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg b/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg new file mode 100644 index 000000000..f55ff86f9 --- /dev/null +++ b/public/emoji/1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#7C533E" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#7C533E" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#3D2E24" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="7.498" cy="8.5" r=".5"/><circle cx="12.498" cy="8.5" r=".5"/><path fill="#3D2E24" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#AF7E57" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#915A34" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3ff-200d-1f9af.svg b/public/emoji/1f468-1f3ff-200d-1f9af.svg new file mode 100644 index 000000000..513caf1b3 --- /dev/null +++ b/public/emoji/1f468-1f3ff-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.436 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95-.043-.081-.09-.139-.194-.11-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.004.16s.987.397 2.344.397 1.566-.399 2.444-.399c.877 0 1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.685 35.926c-.058-.052-.123-.22-.173-.243-.05-.023-.57.089-.813.146-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.222-5.012s-.072-.142-.307-.343-.777-.454-.868-.473c-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828-.096.838-.148 1.158c-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.101s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.58-.68.744-1.144.744-1.144z"/><path fill="#292F33" d="M30.425 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416s-.082-.003-.104-.028c-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107.484-.568.704-.997.876-1.36.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.978 1.394-1.056 1.404z"/><path fill="#7C533E" d="M21.5 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.042-3.681-1.636-4.308z"/><path fill="#7C533E" d="M22.684 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#0B0200" d="M23.32 2.026C22.259.784 20.74.125 18.301 1.235c-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.578.016.484-.551.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M18.558 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.805.876z"/><path fill="#4289C1" d="M29.292 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.064.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M25.495 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858.239 3.216.25 6.062.25 6.062z"/><path fill="#7C533E" d="M20.029 11.693c-.781 1.172-2.291 3.808-2.518 3.909-1.205.534-2.549 1.22-3.445 1.314-.649.068-1.254.68-1.508.925-.316.304-.75 1.008-.63 1.37.075.226.571.488.742.253.332-.458.973-.535 1.49-.889 1.038-.712 3.284-.765 4.556-1.709.528-.391 1.677-1.309 3.2-3.9-.592-.426-1.887-1.273-1.887-1.273z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3ff-200d-1f9bc.svg b/public/emoji/1f468-1f3ff-200d-1f9bc.svg new file mode 100644 index 000000000..99ad94b9f --- /dev/null +++ b/public/emoji/1f468-1f3ff-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M26.007 1.015c-1.214-.871-3.488-.718-4.13.795-.638 1.502-.813 4.067.598 4.266 1.479.209 3.036.269 3.994-1.066.959-1.335.752-3.124-.462-3.995z"/><path fill="#7C533E" d="M25.99 5.295c2.544-1.808-2.238-2.778-2.238-2.778-.902-.194-.664 1.452-1.29 2.159-.431.49.708 1.096.708 1.096s.56.133.419.817l-.002.006c-.037.174-.107.374-.256.627-.743 1.253.866 2.543 1.609 1.287.294-.497.352-.985.382-1.441l.003-.041c.043-.679.036-1.285.665-1.732z"/><path fill="#0B0200" d="M27.409 1.948C26.777.671 25.632-.212 23.332.206c-.937.17-1.279-.066-1.441.071-.778.661-.222 1.753.13 1.652 1.114-.321 1.948.069 2.068.535.12.466-.272 1.15-.092 1.2.486.137.528-.363.791-.59.431-.371.85.006.829.535-.017.42-.272 1.075-.953 1.03.196 1.086.998 1.604.998 1.604s.256.184.986-.652c.729-.836 1.389-2.375.761-3.643z"/><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.339-.347 5.539-.231 1.201.118 5.206-.287 5.266.958z"/><path fill="#4289C1" d="M7.002 27.225c-.646-.143-1.293-.6-1.419-1.224 1.346-1.871 3.671-7.538 3.671-7.538.695-1.744 1.517-3.426 3.133-3.182 2.081.315 5.629 1.028 5.629 1.028 2.276.329 1.144 1.007 1.778 1.912.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.826.244-.993.004-1.64-.139z"/><path fill="#77B255" d="M25.569 16.971c-.211.688-.149 1.604-.515 1.362-1.444-.957-5.521-2.045-5.521-2.045.049-1.673.979-3.969 1.559-6.148.762-2.86 3.067-3.951 4.171-3.289 1.443.865 1.75 2.668 1.308 5.266s-.791 4.166-1.002 4.854z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#7C533E" d="M22.691 10.276c-.579 1.455-1.125 3.55-1.381 3.561-1.473.062-3.079.948-4.006.893-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 3.986.754 5.665-.345.566-.371 1.441-1.871 2.525-4.663-1.084-.477-2.51-.744-2.51-.744z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-1f3ff-200d-1f9bd.svg b/public/emoji/1f468-1f3ff-200d-1f9bd.svg new file mode 100644 index 000000000..4f6eba077 --- /dev/null +++ b/public/emoji/1f468-1f3ff-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M21.96.974c-1.285-.762-3.537-.411-4.045 1.152-.504 1.552-.455 4.123.968 4.198 1.492.079 3.048.003 3.886-1.41.838-1.414.476-3.178-.809-3.94z"/><path fill="#7C533E" d="M22.316 5.239c2.376-2.023-2.471-2.572-2.471-2.572-.916-.114-.535 1.504-1.097 2.263-.387.526.801 1.03.801 1.03s.569.083.488.777l-.001.006c-.021.177-.074.382-.2.647-.631 1.313 1.085 2.458 1.715 1.142.249-.521.265-1.012.255-1.469l-.001-.041c-.017-.68-.076-1.283.511-1.783z"/><path fill="#0B0200" d="M23.439 1.781C22.698.564 21.481-.216 19.225.4c-.919.251-1.279.045-1.429.196-.718.726-.068 1.766.273 1.634 1.082-.417 1.946-.101 2.106.353.16.454-.171 1.169.013 1.204.496.094.494-.407.737-.657.397-.408.847-.068.872.461.02.419-.177 1.095-.86 1.109.29 1.065 1.134 1.511 1.134 1.511s.271.161.925-.735c.655-.896 1.178-2.486.443-3.695z"/><path fill="#292F33" d="M8.211 30.079s.097-.127.175-.426c.078-.299.069-.897.047-.988-.022-.091-.053-.16-.163-.158-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041-.279-.036-.496-.105-.563-.116s-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.262 30.488c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142s-1.074-.431-1.436-.629-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.004-1.679-.271-1.722-.338z"/><path fill="#4289C1" d="M24.032 17.279c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.115-2.108-.301-.994-.187-1.44-.16-2.522-.359-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.292-.724 5.498-.712 1.207.011 5.162-.741 5.33.494z"/><path fill="#4289C1" d="M6.879 28.832c-.656-.086-1.341-.485-1.521-1.095 1.178-1.982 3-7.829 3-7.829.541-1.798 1.213-3.546 2.843-3.443 2.1.133 5.697.533 5.697.533 2.296.13 1.228.904 1.938 1.75.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.799.315-.987.091-1.643.004z"/><path fill="#77B255" d="M24.698 16.173c.029.719.15 1.674-.276 1.567-1.679-.424-5.438-.168-5.438-.168-.508-1.594-.392-4.069-.566-6.317-.229-2.95 1.585-4.744 2.845-4.485.513.105 1.136.428 1.511.77.278.253.924.961 1.141 1.169 1.106 1.06.124 1.405.327 2.596.444 2.597.427 4.149.456 4.868z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#7C533E" d="M22.118 10.597c1.142.988 3.458 2.697 3.436 2.951-.128 1.469.543 3.175.369 4.087-.126.661-.665 1.138-.594 1.495.667-.009.443 1.15.729 1.665.301.542 1.171-.093 1.282-.949.081-.629-.102-1.11-.167-1.752-.093-.915 1.094-3.661.22-5.467-.295-.609-1.531-2.277-3.635-4.122-.595.457-1.64 2.092-1.64 2.092z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-200d-1f9af.svg b/public/emoji/1f468-200d-1f9af.svg new file mode 100644 index 000000000..321bc0d99 --- /dev/null +++ b/public/emoji/1f468-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.436 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95-.043-.081-.09-.139-.194-.11-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.004.16s.987.397 2.344.397 1.566-.399 2.444-.399c.877 0 1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.685 35.926c-.058-.052-.123-.22-.173-.243-.05-.023-.57.089-.813.146-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.222-5.012s-.072-.142-.307-.343-.777-.454-.868-.473c-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828-.096.838-.148 1.158c-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.101s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.58-.68.744-1.144.744-1.144z"/><path fill="#292F33" d="M30.425 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416s-.082-.003-.104-.028c-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107.484-.568.704-.997.876-1.36.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.978 1.394-1.056 1.404z"/><path fill="#FFDC5D" d="M21.5 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.042-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M22.684 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#FFAC33" d="M23.32 2.026C22.259.784 20.74.125 18.301 1.235c-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.578.016.484-.551.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M18.558 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.805.876z"/><path fill="#4289C1" d="M29.292 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.064.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M25.495 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858.239 3.216.25 6.062.25 6.062z"/><path fill="#FFDC5D" d="M20.029 11.693c-.781 1.172-2.291 3.808-2.518 3.909-1.205.534-2.549 1.22-3.445 1.314-.649.068-1.254.68-1.508.925-.316.304-.75 1.008-.63 1.37.075.226.571.488.742.253.332-.458.973-.535 1.49-.889 1.038-.712 3.284-.765 4.556-1.709.528-.391 1.677-1.309 3.2-3.9-.592-.426-1.887-1.273-1.887-1.273z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-200d-1f9bc.svg b/public/emoji/1f468-200d-1f9bc.svg new file mode 100644 index 000000000..7d37c87f6 --- /dev/null +++ b/public/emoji/1f468-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M26.007 1.015c-1.214-.871-3.488-.718-4.13.795-.638 1.502-.813 4.067.598 4.266 1.479.209 3.036.269 3.994-1.066.959-1.335.752-3.124-.462-3.995z"/><path fill="#FFDC5D" d="M25.99 5.295c2.544-1.808-2.238-2.778-2.238-2.778-.902-.194-.664 1.452-1.29 2.159-.431.49.708 1.096.708 1.096s.56.133.419.817l-.002.006c-.037.174-.107.374-.256.627-.743 1.253.866 2.543 1.609 1.287.294-.497.352-.985.382-1.441l.003-.041c.043-.679.036-1.285.665-1.732z"/><path fill="#FFAC33" d="M27.409 1.948C26.777.671 25.632-.212 23.332.206c-.937.17-1.279-.066-1.441.071-.778.661-.222 1.753.13 1.652 1.114-.321 1.948.069 2.068.535.12.466-.272 1.15-.092 1.2.486.137.528-.363.791-.59.431-.371.85.006.829.535-.017.42-.272 1.075-.953 1.03.196 1.086.998 1.604.998 1.604s.256.184.986-.652c.729-.836 1.389-2.375.761-3.643z"/><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.339-.347 5.539-.231 1.201.118 5.206-.287 5.266.958z"/><path fill="#4289C1" d="M7.002 27.225c-.646-.143-1.293-.6-1.419-1.224 1.346-1.871 3.671-7.538 3.671-7.538.695-1.744 1.517-3.426 3.133-3.182 2.081.315 5.629 1.028 5.629 1.028 2.276.329 1.144 1.007 1.778 1.912.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.826.244-.993.004-1.64-.139z"/><path fill="#77B255" d="M25.569 16.971c-.211.688-.149 1.604-.515 1.362-1.444-.957-5.521-2.045-5.521-2.045.049-1.673.979-3.969 1.559-6.148.762-2.86 3.067-3.951 4.171-3.289 1.443.865 1.75 2.668 1.308 5.266s-.791 4.166-1.002 4.854z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#FFDC5D" d="M22.691 10.276c-.579 1.455-1.125 3.55-1.381 3.561-1.473.062-3.079.948-4.006.893-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 3.986.754 5.665-.345.566-.371 1.441-1.871 2.525-4.663-1.084-.477-2.51-.744-2.51-.744z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-200d-1f9bd.svg b/public/emoji/1f468-200d-1f9bd.svg new file mode 100644 index 000000000..b8d2858f9 --- /dev/null +++ b/public/emoji/1f468-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M21.96.974c-1.285-.762-3.537-.411-4.045 1.152-.504 1.552-.455 4.123.968 4.198 1.492.079 3.048.003 3.886-1.41.838-1.414.476-3.178-.809-3.94z"/><path fill="#FFDC5D" d="M22.316 5.239c2.376-2.023-2.471-2.572-2.471-2.572-.916-.114-.535 1.504-1.097 2.263-.387.526.801 1.03.801 1.03s.569.083.488.777l-.001.006c-.021.177-.074.382-.2.647-.631 1.313 1.085 2.458 1.715 1.142.249-.521.265-1.012.255-1.469l-.001-.041c-.017-.68-.076-1.283.511-1.783z"/><path fill="#FFAC33" d="M23.439 1.781C22.698.564 21.481-.216 19.225.4c-.919.251-1.279.045-1.429.196-.718.726-.068 1.766.273 1.634 1.082-.417 1.946-.101 2.106.353.16.454-.171 1.169.013 1.204.496.094.494-.407.737-.657.397-.408.847-.068.872.461.02.419-.177 1.095-.86 1.109.29 1.065 1.134 1.511 1.134 1.511s.271.161.925-.735c.655-.896 1.178-2.486.443-3.695z"/><path fill="#292F33" d="M8.211 30.079s.097-.127.175-.426c.078-.299.069-.897.047-.988-.022-.091-.053-.16-.163-.158-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041-.279-.036-.496-.105-.563-.116s-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.262 30.488c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142s-1.074-.431-1.436-.629-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.004-1.679-.271-1.722-.338z"/><path fill="#4289C1" d="M24.032 17.279c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.115-2.108-.301-.994-.187-1.44-.16-2.522-.359-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.292-.724 5.498-.712 1.207.011 5.162-.741 5.33.494z"/><path fill="#4289C1" d="M6.879 28.832c-.656-.086-1.341-.485-1.521-1.095 1.178-1.982 3-7.829 3-7.829.541-1.798 1.213-3.546 2.843-3.443 2.1.133 5.697.533 5.697.533 2.296.13 1.228.904 1.938 1.75.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.799.315-.987.091-1.643.004z"/><path fill="#77B255" d="M24.698 16.173c.029.719.15 1.674-.276 1.567-1.679-.424-5.438-.168-5.438-.168-.508-1.594-.392-4.069-.566-6.317-.229-2.95 1.585-4.744 2.845-4.485.513.105 1.136.428 1.511.77.278.253.924.961 1.141 1.169 1.106 1.06.124 1.405.327 2.596.444 2.597.427 4.149.456 4.868z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#FFDC5D" d="M22.118 10.597c1.142.988 3.458 2.697 3.436 2.951-.128 1.469.543 3.175.369 4.087-.126.661-.665 1.138-.594 1.495.667-.009.443 1.15.729 1.665.301.542 1.171-.093 1.282-.949.081-.629-.102-1.11-.167-1.752-.093-.915 1.094-3.661.22-5.467-.295-.609-1.531-2.277-3.635-4.122-.595.457-1.64 2.092-1.64 2.092z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-200d-2764-fe0f-200d-1f468.svg b/public/emoji/1f468-200d-2764-fe0f-200d-1f468.svg index c683290ee..cace24fc3 100644 --- a/public/emoji/1f468-200d-2764-fe0f-200d-1f468.svg +++ b/public/emoji/1f468-200d-2764-fe0f-200d-1f468.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M25 11.844c2.297-.669 3.315-3.565 3.734-5.369.953 1.477 3.036 3.68 7.266 4.805V.425C35.045.154 34.041 0 33 0c-6.075 0-11 4.925-11 11 0 3.009 1.211 5.733 3.168 7.719C25.061 18.162 25 17.589 25 17v-5.156z"/><path fill="#FFDC5D" d="M34 22h2V11.28c-4.23-1.125-6.313-3.328-7.266-4.804-.42 1.804-1.438 4.699-3.734 5.369V17c0 .589.061 1.162.168 1.719.61 3.15 2.863 5.706 5.832 6.757V27l3 5 2-3.396v-4.967c-.538.212-1.191.363-2 .363-3 0-4-2-4-2h4zm-1-3.5h2c.276 0 .5.224.5.5s-.224.5-.5.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5zM30 16c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#3B94D9" d="M36 28.604L34 32l-3-5h-6c-2.209 0-4 1.791-4 4v5h15v-7.396z"/><path fill="#1C6399" d="M25 32h1v4h-1z"/><path fill="#BF6952" d="M31 22h-1s1 2 4 2c.809 0 1.462-.151 2-.363V22h-5z"/><path fill="#662113" d="M30 16c.553 0 1-.448 1-1v-1c0-.552-.447-1-1-1s-1 .448-1 1v1c0 .552.447 1 1 1z"/><path fill="#BF6952" d="M33 19.5h2c.276 0 .5-.224.5-.5s-.224-.5-.5-.5h-2c-.276 0-.5.224-.5.5s.224.5.5.5z"/><path fill="#FFAC33" d="M11 11.844c-2.297-.669-3.315-3.565-3.734-5.369C6.313 7.952 4.23 10.155 0 11.28V.425C.955.154 1.959 0 3 0c6.075 0 11 4.925 11 11 0 3.009-1.211 5.733-3.168 7.719.107-.557.168-1.13.168-1.719v-5.156z"/><path fill="#FFDC5D" d="M5 22h1s-1 2-4 2c-.809 0-1.462-.151-2-.363v4.967L2 32l3-5v-1.523c2.968-1.051 5.222-3.607 5.832-6.757.107-.558.168-1.131.168-1.72v-5.156c-2.297-.669-3.315-3.565-3.734-5.369C6.313 7.952 4.23 10.155 0 11.28V22h5zm-1.5-3c0 .276-.224.5-.5.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5zM5 15v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1s-1-.448-1-1z"/><path fill="#3B94D9" d="M0 28.604L2 32l3-5h6c2.209 0 4 1.791 4 4v5H0v-7.396z"/><path fill="#1C6399" d="M10 32h1v4h-1z"/><path fill="#BF6952" d="M5 22h1s-1 2-4 2c-.809 0-1.462-.151-2-.363V22h5z"/><path fill="#662113" d="M6 16c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#BF6952" d="M3 19.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#E75A70" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M25 11.844c2.297-.669 3.315-3.565 3.734-5.369.953 1.477 3.036 3.68 7.266 4.805V.425C35.045.154 34.041 0 33 0c-6.075 0-11 4.925-11 11 0 3.009 1.211 5.733 3.168 7.719C25.061 18.162 25 17.589 25 17v-5.156z"/><path fill="#FFDC5D" d="M34 22h2V11.28c-4.23-1.125-6.313-3.328-7.266-4.804-.42 1.804-1.438 4.699-3.734 5.369V17c0 .589.061 1.162.168 1.719.61 3.15 2.863 5.706 5.832 6.757V27l3 5 2-3.396v-4.967c-.538.212-1.191.363-2 .363-3 0-4-2-4-2h4zm-1-3.5h2c.276 0 .5.224.5.5s-.224.5-.5.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5zM30 16c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#3B94D9" d="M36 28.604L34 32l-3-5h-6c-2.209 0-4 1.791-4 4v5h15v-7.396z"/><path fill="#1C6399" d="M25 32h1v4h-1z"/><path fill="#BF6952" d="M31 22h-1s1 2 4 2c.809 0 1.462-.151 2-.363V22h-5z"/><path fill="#662113" d="M30 16c.553 0 1-.448 1-1v-1c0-.552-.447-1-1-1s-1 .448-1 1v1c0 .552.447 1 1 1z"/><path fill="#BF6952" d="M33 19.5h2c.276 0 .5-.224.5-.5s-.224-.5-.5-.5h-2c-.276 0-.5.224-.5.5s.224.5.5.5z"/><path fill="#FFAC33" d="M11 11.844c-2.297-.669-3.315-3.565-3.734-5.369C6.313 7.952 4.23 10.155 0 11.28V.425C.955.154 1.959 0 3 0c6.075 0 11 4.925 11 11 0 3.009-1.211 5.733-3.168 7.719.107-.557.168-1.13.168-1.719v-5.156z"/><path fill="#FFDC5D" d="M5 22h1s-1 2-4 2c-.809 0-1.462-.151-2-.363v4.967L2 32l3-5v-1.523c2.968-1.051 5.222-3.607 5.832-6.757.107-.558.168-1.131.168-1.72v-5.156c-2.297-.669-3.315-3.565-3.734-5.369C6.313 7.952 4.23 10.155 0 11.28V22h5zm-1.5-3c0 .276-.224.5-.5.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5zM5 15v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1s-1-.448-1-1z"/><path fill="#3B94D9" d="M0 28.604L2 32l3-5h6c2.209 0 4 1.791 4 4v5H0v-7.396z"/><path fill="#1C6399" d="M10 32h1v4h-1z"/><path fill="#BF6952" d="M5 22h1s-1 2-4 2c-.809 0-1.462-.151-2-.363V22h5z"/><path fill="#662113" d="M6 16c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#BF6952" d="M3 19.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#DD2E44" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.svg b/public/emoji/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.svg index 1c9a76ab8..41dbd9681 100644 --- a/public/emoji/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.svg +++ b/public/emoji/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M31 8.042c-6.626 0-12 5.373-12 12 0 6.626 5.374 12 12 12 1.787 0 3.476-.401 5-1.102V9.143c-1.524-.7-3.213-1.101-5-1.101z"/><path fill="#FFAC33" d="M20.667 15.042c.055.06.128.115.197.171.72.716 1.753 1.477 3.219 2.036 3.691 1.407 9.121.297 9.121.297s-.748-1.198-2.101-2.492c1.809.549 3.463 1.358 4.897 2.371v-9.25c-1.81-.904-3.843-1.426-6-1.429-6.508-.008-9.915 3.393-10.059 6.135-.176.085-.352.168-.531.265 0 0 .237.641.902 1.459.077.094.161.191.249.29.038.048.064.101.106.147z"/><path fill="#642116" d="M26 21.542c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm5 0c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm-4.995 4c.273-.003.495-.226.495-.5 0-.276-.224-.5-.5-.5-.602 0-1.5.399-1.5 1.5 0 .438.143.765.352 1-.209.235-.352.562-.352 1 0 1.101.898 1.5 1.5 1.5.273 0 .493-.22.496-.494.004-.273-.217-.499-.49-.506-.231-.006-.506-.098-.506-.5s.275-.494.5-.5h.011c.272-.006.489-.228.489-.5 0-.274-.222-.497-.495-.5-.23-.006-.505-.098-.505-.5 0-.403.274-.494.505-.5z"/><path fill="#FFDC5D" d="M5 8.042c6.626 0 12 5.373 12 12 0 6.626-5.374 12-12 12-1.787 0-3.476-.401-5-1.102V9.143c1.524-.7 3.213-1.101 5-1.101z"/><path fill="#FFAC33" d="M15.333 15.042c-.055.06-.128.115-.197.171-.72.716-1.753 1.477-3.219 2.036-3.691 1.407-9.121.297-9.121.297s.748-1.198 2.101-2.492c-1.809.549-3.463 1.359-4.897 2.371v-9.25c1.81-.903 3.843-1.425 6-1.428 6.508-.008 9.915 3.393 10.059 6.135.176.085.352.168.531.265 0 0-.237.641-.902 1.459-.077.094-.161.191-.249.29-.038.047-.064.1-.106.146z"/><path fill="#642116" d="M10 21.542c1.411 0 1.497-1.251 1.5-1.503.001-.274.225-.497.5-.497.276 0 .5.224.5.5 0 .864-.523 2.5-2.5 2.5-.276 0-.5-.224-.5-.5 0-.277.224-.5.5-.5zm-5 0c1.411 0 1.497-1.251 1.5-1.503.001-.274.225-.497.5-.497.276 0 .5.224.5.5 0 .864-.523 2.5-2.5 2.5-.276 0-.5-.224-.5-.5 0-.277.224-.5.5-.5zm4.995 4c-.273-.003-.495-.226-.495-.5 0-.276.224-.5.5-.5.602 0 1.5.399 1.5 1.5 0 .438-.143.765-.352 1 .209.235.352.562.352 1 0 1.101-.898 1.5-1.5 1.5-.273 0-.493-.22-.496-.494-.004-.273.217-.499.49-.506.231-.006.506-.098.506-.5s-.275-.494-.5-.5h-.011c-.272-.006-.489-.228-.489-.5 0-.274.222-.497.495-.5.23-.006.505-.098.505-.5 0-.403-.274-.494-.505-.5z"/><path fill="#EA596E" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M31 8.042c-6.626 0-12 5.373-12 12 0 6.626 5.374 12 12 12 1.787 0 3.476-.401 5-1.102V9.143c-1.524-.7-3.213-1.101-5-1.101z"/><path fill="#FFAC33" d="M20.667 15.042c.055.06.128.115.197.171.72.716 1.753 1.477 3.219 2.036 3.691 1.407 9.121.297 9.121.297s-.748-1.198-2.101-2.492c1.809.549 3.463 1.358 4.897 2.371v-9.25c-1.81-.904-3.843-1.426-6-1.429-6.508-.008-9.915 3.393-10.059 6.135-.176.085-.352.168-.531.265 0 0 .237.641.902 1.459.077.094.161.191.249.29.038.048.064.101.106.147z"/><path fill="#642116" d="M26 21.542c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm5 0c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm-4.995 4c.273-.003.495-.226.495-.5 0-.276-.224-.5-.5-.5-.602 0-1.5.399-1.5 1.5 0 .438.143.765.352 1-.209.235-.352.562-.352 1 0 1.101.898 1.5 1.5 1.5.273 0 .493-.22.496-.494.004-.273-.217-.499-.49-.506-.231-.006-.506-.098-.506-.5s.275-.494.5-.5h.011c.272-.006.489-.228.489-.5 0-.274-.222-.497-.495-.5-.23-.006-.505-.098-.505-.5 0-.403.274-.494.505-.5z"/><path fill="#FFDC5D" d="M5 8.042c6.626 0 12 5.373 12 12 0 6.626-5.374 12-12 12-1.787 0-3.476-.401-5-1.102V9.143c1.524-.7 3.213-1.101 5-1.101z"/><path fill="#FFAC33" d="M15.333 15.042c-.055.06-.128.115-.197.171-.72.716-1.753 1.477-3.219 2.036-3.691 1.407-9.121.297-9.121.297s.748-1.198 2.101-2.492c-1.809.549-3.463 1.359-4.897 2.371v-9.25c1.81-.903 3.843-1.425 6-1.428 6.508-.008 9.915 3.393 10.059 6.135.176.085.352.168.531.265 0 0-.237.641-.902 1.459-.077.094-.161.191-.249.29-.038.047-.064.1-.106.146z"/><path fill="#642116" d="M10 21.542c1.411 0 1.497-1.251 1.5-1.503.001-.274.225-.497.5-.497.276 0 .5.224.5.5 0 .864-.523 2.5-2.5 2.5-.276 0-.5-.224-.5-.5 0-.277.224-.5.5-.5zm-5 0c1.411 0 1.497-1.251 1.5-1.503.001-.274.225-.497.5-.497.276 0 .5.224.5.5 0 .864-.523 2.5-2.5 2.5-.276 0-.5-.224-.5-.5 0-.277.224-.5.5-.5zm4.995 4c-.273-.003-.495-.226-.495-.5 0-.276.224-.5.5-.5.602 0 1.5.399 1.5 1.5 0 .438-.143.765-.352 1 .209.235.352.562.352 1 0 1.101-.898 1.5-1.5 1.5-.273 0-.493-.22-.496-.494-.004-.273.217-.499.49-.506.231-.006.506-.098.506-.5s-.275-.494-.5-.5h-.011c-.272-.006-.489-.228-.489-.5 0-.274.222-.497.495-.5.23-.006.505-.098.505-.5 0-.403-.274-.494-.505-.5z"/><path fill="#DD2E44" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc.svg b/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc.svg new file mode 100644 index 000000000..c0a072e2f --- /dev/null +++ b/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F7DECE" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#EEC2AD" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#EEC2AD" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd.svg b/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd.svg new file mode 100644 index 000000000..fa124a7f9 --- /dev/null +++ b/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F7DECE" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#EEC2AD" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#EEC2AD" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe.svg b/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe.svg new file mode 100644 index 000000000..97533c42d --- /dev/null +++ b/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F7DECE" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#EEC2AD" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#EEC2AD" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#AF7E57" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#915A34" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff.svg b/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff.svg new file mode 100644 index 000000000..8d03f30f0 --- /dev/null +++ b/public/emoji/1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F7DECE" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#EEC2AD" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#EEC2AD" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#0B0200" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#7C533E" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#7C533E" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#3D2E24" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="23.5" cy="8.5" r=".5"/><circle cx="28.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fb-200d-1f9af.svg b/public/emoji/1f469-1f3fb-200d-1f9af.svg new file mode 100644 index 000000000..3c5812183 --- /dev/null +++ b/public/emoji/1f469-1f3fb-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.476 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029-.621-.061-.641.488l.004.16s.987.397 2.344.397c1.358 0 1.566-.399 2.444-.399s1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.726 35.926c-.058-.052-.123-.22-.173-.243s-.57.089-.813.146c-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.221-5.012s-.072-.142-.307-.343c-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.103s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.581-.682.744-1.146.744-1.146z"/><path fill="#292F33" d="M30.465 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416-.08.025-.082-.003-.104-.028-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107s.704-.997.876-1.36c.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.977 1.394-1.056 1.404z"/><path fill="#F7DECE" d="M21.541 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M22.724 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.143-.766-.321-1.437.252-2.111z"/><path fill="#292F33" d="M23.361 2.026C22.3.784 20.841.269 18.342 1.235c-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.875-3.028-.178-4.261z"/><path fill="#292F33" d="M22.787 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.356-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M18.598 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.728-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.032.288-.538.767-1.804.876z"/><path fill="#4289C1" d="M29.333 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.261 1.291-.624 1.844z"/><path fill="#9268CA" d="M25.536 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858.238 3.216.25 6.062.25 6.062z"/><path fill="#F7DECE" d="M20.142 11.64c-.783 1.171-2.299 3.804-2.526 3.904-1.206.531-2.551 1.215-3.448 1.307-.65.067-1.256.678-1.51.922-.316.304-.752 1.006-.633 1.369.074.226.57.489.741.254.333-.457.974-.533 1.492-.886 1.039-.71 3.285-.758 4.56-1.7.528-.39 1.583-1.134 3.111-3.722-.591-.426-1.787-1.448-1.787-1.448z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fb-200d-1f9bc.svg b/public/emoji/1f469-1f3fb-200d-1f9bc.svg new file mode 100644 index 000000000..2f240ea5f --- /dev/null +++ b/public/emoji/1f469-1f3fb-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.288.195 5.488.311 1.201.118 5.257-.829 5.317.416z"/><path fill="#4289C1" d="M7.127 27.177c-.646-.143-1.069-.49-1.426-1.025 1.678-1.899 3.787-7.307 3.787-7.307.695-1.744 1.62-2.914 3.252-2.851 2.317.089 5.748.535 5.748.535 2.276.329.671.789 1.305 1.693.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.489.079-.868-.045-1.514-.188z"/><path fill="#F7DECE" d="M24.879.905c-1.341-.8-3.695-.439-4.23 1.193-.531 1.621-.487 4.307 1 4.389 1.559.086 3.185.011 4.064-1.464.88-1.474.507-3.318-.834-4.118z"/><path fill="#F7DECE" d="M25.24 5.363c2.488-2.108-2.576-2.694-2.576-2.694-.957-.122-.563 1.57-1.152 2.362-.405.548.834 1.078.834 1.078s.594.089.508.813l-.001.007c-.023.184-.078.399-.211.676-.662 1.37 1.127 2.571 1.789 1.198.262-.544.279-1.056.27-1.534l-.001-.042c-.015-.712-.076-1.343.54-1.864z"/><path fill="#292F33" d="M26.422 1.752C25.651.478 24.415-.201 22.023.298c-2.089.436-1.714 2.102-1.212 1.91 1.382-.528 2.116.237 2.589 1.369.27-.473 1.143-.648 1.189.117.051.859-.778 1.094-.712 1.337.022.082-.028-.075 0 0 .35.945 1.106 1.348 1.106 1.348s.283.169.969-.766c.684-.934 1.235-2.595.47-3.861z"/><path fill="#292F33" d="M25.843 2.713c1.875.677.661 2.73.665 3.791.004 1.306 1.158 1.604 1.158 1.604s-.331-.74-.045-1.649c.397-1.26 1.797-2.079 1.069-3.475-.927-1.783-4.012-.692-2.847-.271z"/><path fill="#9268CA" d="M25.778 16.257c-.214 1.304-.659 2.456-.696 3.032-.02.32-.939-.237-1.604-.511-1.782-.735-3.317-1.825-3.317-1.825.398-1.193.696-3.032.149-5.268-.477-1.953 3.106-5.252 4.309-4.634 1.573.807 2.382 1.782 1.904 4.684l-.745 4.522z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#F7DECE" d="M22.691 10.276c-.579 1.455-.982 3.884-1.237 3.894-1.473.062-3.222.614-4.149.559-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 4.492.479 5.665-.345.554-.389 1.272-1.95 2.356-4.742-1.084-.476-2.342-.664-2.342-.664z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fb-200d-1f9bd.svg b/public/emoji/1f469-1f3fb-200d-1f9bd.svg new file mode 100644 index 000000000..68f49e076 --- /dev/null +++ b/public/emoji/1f469-1f3fb-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M7.981 29.995s.097-.127.175-.426.069-.897.047-.988-.053-.16-.163-.158c-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041s-.496-.105-.563-.116c-.067-.011-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234c.866.226 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.032 30.404c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142-.484-.126-1.074-.431-1.436-.629s-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.005-1.678-.272-1.722-.338z"/><path fill="#4289C1" d="M23.802 17.195c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.114-2.108-.301s-1.44-.16-2.522-.359c-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.289-.179 5.495-.168s5.166-1.285 5.333-.05z"/><path fill="#4289C1" d="M6.77 28.689c-.656-.086-1.108-.395-1.51-.897 1.506-2.038 3.136-7.609 3.136-7.609.541-1.798 1.36-3.044 2.992-3.124 2.316-.113 5.772.032 5.772.032 2.296.13.738.727 1.448 1.573.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.48.122-.868.031-1.524-.055z"/><path fill="#F7DECE" d="M21.842.878c-1.405-.68-3.719-.115-4.11 1.557-.388 1.661-.109 4.333 1.379 4.285 1.56-.05 3.174-.266 3.921-1.812.748-1.545.215-3.35-1.19-4.03z"/><path fill="#F7DECE" d="M22.59 5.288c2.295-2.316-2.801-2.46-2.801-2.46-.964-.038-.424 1.613-.942 2.453-.356.582.925 1.001.925 1.001s.6.036.577.766v.007c-.007.186-.043.404-.151.691-.54 1.423 1.347 2.463 1.887 1.037.213-.564.186-1.077.136-1.552l-.006-.041c-.077-.707-.193-1.329.375-1.902z"/><path fill="#292F33" d="M23.453 1.588C22.574.386 21.283-.183 18.944.523c-2.044.617-1.525 2.243-1.042 2.008 1.331-.647 2.128.052 2.699 1.138.228-.495 1.083-.745 1.194.013.126.852-.68 1.158-.593 1.394.029.079-.034-.072 0 0 .431.911 1.22 1.246 1.22 1.246s.297.144.898-.847 1.005-2.693.133-3.887z"/><path fill="#292F33" d="M22.934 2.681c1.968.317 1.157 2.559 1.358 3.601.247 1.283 1.436 1.361 1.436 1.361s-.463-.666-.35-1.611c.156-1.312 1.379-2.377.405-3.613-1.244-1.58-4.072.065-2.849.262z"/><path fill="#9268CA" d="M24.353 16.862c.015 1.321-.057 1.777.007 2.351.036.319-1.252-.021-1.954-.176-1.883-.415-3.583-1.221-3.583-1.221.184-1.244.869-3.07-.624-4.823-.455-.535-.375-1.854.369-3.041.828-1.321 1.751-2.535 2.926-2.661.812-.088 1.597.328 2.15 1.2 2.206 1.83.762 1.78.777 3.121.024 2.035-.083 3.929-.068 5.25z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#F7DECE" d="M22.657 10.9c1.111 1.023 3.158 2.426 3.128 2.68-.174 1.464.402 3.203.2 4.11-.147.657-.805 1.117-.745 1.476.667.012.407 1.163.677 1.687.284.551 1.174-.056 1.311-.909.101-.627-.068-1.112-.113-1.757-.064-.918 1.207-3.625.39-5.457-.276-.618-1.167-1.842-3.212-3.751-.608.439-1.636 1.921-1.636 1.921z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg new file mode 100644 index 000000000..53e58734c --- /dev/null +++ b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F3D2A2" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#E2C196" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#E2C196" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd.svg b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd.svg new file mode 100644 index 000000000..16f795307 --- /dev/null +++ b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F3D2A2" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#E2C196" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#E2C196" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe.svg b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe.svg new file mode 100644 index 000000000..47dd9158e --- /dev/null +++ b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F3D2A2" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#E2C196" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#E2C196" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#AF7E57" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#915A34" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff.svg b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff.svg new file mode 100644 index 000000000..2cdda31da --- /dev/null +++ b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F3D2A2" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#E2C196" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#E2C196" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#0B0200" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#7C533E" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#7C533E" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#3D2E24" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="23.5" cy="8.5" r=".5"/><circle cx="28.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb.svg b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb.svg new file mode 100644 index 000000000..0939b16d8 --- /dev/null +++ b/public/emoji/1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F3D2A2" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#E2C196" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#E2C196" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#F7DECE" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#EEC2AD" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fc-200d-1f9af.svg b/public/emoji/1f469-1f3fc-200d-1f9af.svg new file mode 100644 index 000000000..ad8806b3f --- /dev/null +++ b/public/emoji/1f469-1f3fc-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.476 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029-.621-.061-.641.488l.004.16s.987.397 2.344.397c1.358 0 1.566-.399 2.444-.399s1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.726 35.926c-.058-.052-.123-.22-.173-.243s-.57.089-.813.146c-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.221-5.012s-.072-.142-.307-.343c-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.103s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.581-.682.744-1.146.744-1.146z"/><path fill="#292F33" d="M30.465 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416-.08.025-.082-.003-.104-.028-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107s.704-.997.876-1.36c.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.977 1.394-1.056 1.404z"/><path fill="#F3D2A2" d="M21.541 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M22.724 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.143-.766-.321-1.437.252-2.111z"/><path fill="#FFE51E" d="M23.361 2.026C22.3.784 20.841.269 18.342 1.235c-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.875-3.028-.178-4.261z"/><path fill="#FFE51E" d="M22.787 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.356-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M18.598 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.728-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.032.288-.538.767-1.804.876z"/><path fill="#4289C1" d="M29.333 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.261 1.291-.624 1.844z"/><path fill="#9268CA" d="M25.536 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858.238 3.216.25 6.062.25 6.062z"/><path fill="#F3D2A2" d="M20.142 11.64c-.783 1.171-2.299 3.804-2.526 3.904-1.206.531-2.551 1.215-3.448 1.307-.65.067-1.256.678-1.51.922-.316.304-.752 1.006-.633 1.369.074.226.57.489.741.254.333-.457.974-.533 1.492-.886 1.039-.71 3.285-.758 4.56-1.7.528-.39 1.583-1.134 3.111-3.722-.591-.426-1.787-1.448-1.787-1.448z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fc-200d-1f9bc.svg b/public/emoji/1f469-1f3fc-200d-1f9bc.svg new file mode 100644 index 000000000..ffea3a289 --- /dev/null +++ b/public/emoji/1f469-1f3fc-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.288.195 5.488.311 1.201.118 5.257-.829 5.317.416z"/><path fill="#4289C1" d="M7.127 27.177c-.646-.143-1.069-.49-1.426-1.025 1.678-1.899 3.787-7.307 3.787-7.307.695-1.744 1.62-2.914 3.252-2.851 2.317.089 5.748.535 5.748.535 2.276.329.671.789 1.305 1.693.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.489.079-.868-.045-1.514-.188z"/><path fill="#F3D2A2" d="M24.879.905c-1.341-.8-3.695-.439-4.23 1.193-.531 1.621-.487 4.307 1 4.389 1.559.086 3.185.011 4.064-1.464.88-1.474.507-3.318-.834-4.118z"/><path fill="#F3D2A2" d="M25.24 5.363c2.488-2.108-2.576-2.694-2.576-2.694-.957-.122-.563 1.57-1.152 2.362-.405.548.834 1.078.834 1.078s.594.089.508.813l-.001.007c-.023.184-.078.399-.211.676-.662 1.37 1.127 2.571 1.789 1.198.262-.544.279-1.056.27-1.534l-.001-.042c-.015-.712-.076-1.343.54-1.864z"/><path fill="#FFE51E" d="M26.422 1.752C25.651.478 24.415-.201 22.023.298c-2.089.436-1.714 2.102-1.212 1.91 1.382-.528 2.116.237 2.589 1.369.27-.473 1.143-.648 1.189.117.051.859-.778 1.094-.712 1.337.022.082-.028-.075 0 0 .35.945 1.106 1.348 1.106 1.348s.283.169.969-.766c.684-.934 1.235-2.595.47-3.861z"/><path fill="#FFE51E" d="M25.843 2.713c1.875.677.661 2.73.665 3.791.004 1.306 1.158 1.604 1.158 1.604s-.331-.74-.045-1.649c.397-1.26 1.797-2.079 1.069-3.475-.927-1.783-4.012-.692-2.847-.271z"/><path fill="#9268CA" d="M25.778 16.257c-.214 1.304-.659 2.456-.696 3.032-.02.32-.939-.237-1.604-.511-1.782-.735-3.317-1.825-3.317-1.825.398-1.193.696-3.032.149-5.268-.477-1.953 3.106-5.252 4.309-4.634 1.573.807 2.382 1.782 1.904 4.684l-.745 4.522z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#F3D2A2" d="M22.691 10.276c-.579 1.455-.982 3.884-1.237 3.894-1.473.062-3.222.614-4.149.559-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 4.492.479 5.665-.345.554-.389 1.272-1.95 2.356-4.742-1.084-.476-2.342-.664-2.342-.664z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fc-200d-1f9bd.svg b/public/emoji/1f469-1f3fc-200d-1f9bd.svg new file mode 100644 index 000000000..39843afd3 --- /dev/null +++ b/public/emoji/1f469-1f3fc-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M7.981 29.995s.097-.127.175-.426.069-.897.047-.988-.053-.16-.163-.158c-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041s-.496-.105-.563-.116c-.067-.011-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234c.866.226 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.032 30.404c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142-.484-.126-1.074-.431-1.436-.629s-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.005-1.678-.272-1.722-.338z"/><path fill="#4289C1" d="M23.802 17.195c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.114-2.108-.301s-1.44-.16-2.522-.359c-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.289-.179 5.495-.168s5.166-1.285 5.333-.05z"/><path fill="#4289C1" d="M6.77 28.689c-.656-.086-1.108-.395-1.51-.897 1.506-2.038 3.136-7.609 3.136-7.609.541-1.798 1.36-3.044 2.992-3.124 2.316-.113 5.772.032 5.772.032 2.296.13.738.727 1.448 1.573.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.48.122-.868.031-1.524-.055z"/><path fill="#F3D2A2" d="M21.842.878c-1.405-.68-3.719-.115-4.11 1.557-.388 1.661-.109 4.333 1.379 4.285 1.56-.05 3.174-.266 3.921-1.812.748-1.545.215-3.35-1.19-4.03z"/><path fill="#F3D2A2" d="M22.59 5.288c2.295-2.316-2.801-2.46-2.801-2.46-.964-.038-.424 1.613-.942 2.453-.356.582.925 1.001.925 1.001s.6.036.577.766v.007c-.007.186-.043.404-.151.691-.54 1.423 1.347 2.463 1.887 1.037.213-.564.186-1.077.136-1.552l-.006-.041c-.077-.707-.193-1.329.375-1.902z"/><path fill="#FFE51E" d="M23.453 1.588C22.574.386 21.283-.183 18.944.523c-2.044.617-1.525 2.243-1.042 2.008 1.331-.647 2.128.052 2.699 1.138.228-.495 1.083-.745 1.194.013.126.852-.68 1.158-.593 1.394.029.079-.034-.072 0 0 .431.911 1.22 1.246 1.22 1.246s.297.144.898-.847 1.005-2.693.133-3.887z"/><path fill="#FFE51E" d="M22.934 2.681c1.968.317 1.157 2.559 1.358 3.601.247 1.283 1.436 1.361 1.436 1.361s-.463-.666-.35-1.611c.156-1.312 1.379-2.377.405-3.613-1.244-1.58-4.072.065-2.849.262z"/><path fill="#9268CA" d="M24.353 16.862c.015 1.321-.057 1.777.007 2.351.036.319-1.252-.021-1.954-.176-1.883-.415-3.583-1.221-3.583-1.221.184-1.244.869-3.07-.624-4.823-.455-.535-.375-1.854.369-3.041.828-1.321 1.751-2.535 2.926-2.661.812-.088 1.597.328 2.15 1.2 2.206 1.83.762 1.78.777 3.121.024 2.035-.083 3.929-.068 5.25z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#F3D2A2" d="M22.657 10.9c1.111 1.023 3.158 2.426 3.128 2.68-.174 1.464.402 3.203.2 4.11-.147.657-.805 1.117-.745 1.476.667.012.407 1.163.677 1.687.284.551 1.174-.056 1.311-.909.101-.627-.068-1.112-.113-1.757-.064-.918 1.207-3.625.39-5.457-.276-.618-1.167-1.842-3.212-3.751-.608.439-1.636 1.921-1.636 1.921z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg new file mode 100644 index 000000000..adf04f14e --- /dev/null +++ b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg new file mode 100644 index 000000000..724aede5b --- /dev/null +++ b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe.svg b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe.svg new file mode 100644 index 000000000..6ab1b4275 --- /dev/null +++ b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#AF7E57" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#915A34" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff.svg b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff.svg new file mode 100644 index 000000000..edfadd095 --- /dev/null +++ b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#0B0200" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#7C533E" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#7C533E" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#3D2E24" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="23.5" cy="8.5" r=".5"/><circle cx="28.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb.svg b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb.svg new file mode 100644 index 000000000..6a909b143 --- /dev/null +++ b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#F7DECE" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#EEC2AD" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc.svg b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc.svg new file mode 100644 index 000000000..9ec331669 --- /dev/null +++ b/public/emoji/1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#F3D2A2" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#E2C196" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#E2C196" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fd-200d-1f9af.svg b/public/emoji/1f469-1f3fd-200d-1f9af.svg new file mode 100644 index 000000000..c17b0ed28 --- /dev/null +++ b/public/emoji/1f469-1f3fd-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.476 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029-.621-.061-.641.488l.004.16s.987.397 2.344.397c1.358 0 1.566-.399 2.444-.399s1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.726 35.926c-.058-.052-.123-.22-.173-.243s-.57.089-.813.146c-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.221-5.012s-.072-.142-.307-.343c-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.103s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.581-.682.744-1.146.744-1.146z"/><path fill="#292F33" d="M30.465 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416-.08.025-.082-.003-.104-.028-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107s.704-.997.876-1.36c.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.977 1.394-1.056 1.404z"/><path fill="#D4AB88" d="M21.541 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M22.724 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.143-.766-.321-1.437.252-2.111z"/><path fill="#963B22" d="M23.361 2.026C22.3.784 20.841.269 18.342 1.235c-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.875-3.028-.178-4.261z"/><path fill="#963B22" d="M22.787 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.356-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M18.598 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.728-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.032.288-.538.767-1.804.876z"/><path fill="#4289C1" d="M29.333 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.261 1.291-.624 1.844z"/><path fill="#9268CA" d="M25.536 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858.238 3.216.25 6.062.25 6.062z"/><path fill="#D4AB88" d="M20.142 11.64c-.783 1.171-2.299 3.804-2.526 3.904-1.206.531-2.551 1.215-3.448 1.307-.65.067-1.256.678-1.51.922-.316.304-.752 1.006-.633 1.369.074.226.57.489.741.254.333-.457.974-.533 1.492-.886 1.039-.71 3.285-.758 4.56-1.7.528-.39 1.583-1.134 3.111-3.722-.591-.426-1.787-1.448-1.787-1.448z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fd-200d-1f9bc.svg b/public/emoji/1f469-1f3fd-200d-1f9bc.svg new file mode 100644 index 000000000..798345314 --- /dev/null +++ b/public/emoji/1f469-1f3fd-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.288.195 5.488.311 1.201.118 5.257-.829 5.317.416z"/><path fill="#4289C1" d="M7.127 27.177c-.646-.143-1.069-.49-1.426-1.025 1.678-1.899 3.787-7.307 3.787-7.307.695-1.744 1.62-2.914 3.252-2.851 2.317.089 5.748.535 5.748.535 2.276.329.671.789 1.305 1.693.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.489.079-.868-.045-1.514-.188z"/><path fill="#D4AB88" d="M24.879.905c-1.341-.8-3.695-.439-4.23 1.193-.531 1.621-.487 4.307 1 4.389 1.559.086 3.185.011 4.064-1.464.88-1.474.507-3.318-.834-4.118z"/><path fill="#D4AB88" d="M25.24 5.363c2.488-2.108-2.576-2.694-2.576-2.694-.957-.122-.563 1.57-1.152 2.362-.405.548.834 1.078.834 1.078s.594.089.508.813l-.001.007c-.023.184-.078.399-.211.676-.662 1.37 1.127 2.571 1.789 1.198.262-.544.279-1.056.27-1.534l-.001-.042c-.015-.712-.076-1.343.54-1.864z"/><path fill="#963B22" d="M26.422 1.752C25.651.478 24.415-.201 22.023.298c-2.089.436-1.714 2.102-1.212 1.91 1.382-.528 2.116.237 2.589 1.369.27-.473 1.143-.648 1.189.117.051.859-.778 1.094-.712 1.337.022.082-.028-.075 0 0 .35.945 1.106 1.348 1.106 1.348s.283.169.969-.766c.684-.934 1.235-2.595.47-3.861z"/><path fill="#963B22" d="M25.843 2.713c1.875.677.661 2.73.665 3.791.004 1.306 1.158 1.604 1.158 1.604s-.331-.74-.045-1.649c.397-1.26 1.797-2.079 1.069-3.475-.927-1.783-4.012-.692-2.847-.271z"/><path fill="#9268CA" d="M25.778 16.257c-.214 1.304-.659 2.456-.696 3.032-.02.32-.939-.237-1.604-.511-1.782-.735-3.317-1.825-3.317-1.825.398-1.193.696-3.032.149-5.268-.477-1.953 3.106-5.252 4.309-4.634 1.573.807 2.382 1.782 1.904 4.684l-.745 4.522z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#D4AB88" d="M22.691 10.276c-.579 1.455-.982 3.884-1.237 3.894-1.473.062-3.222.614-4.149.559-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 4.492.479 5.665-.345.554-.389 1.272-1.95 2.356-4.742-1.084-.476-2.342-.664-2.342-.664z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fd-200d-1f9bd.svg b/public/emoji/1f469-1f3fd-200d-1f9bd.svg new file mode 100644 index 000000000..c128386d5 --- /dev/null +++ b/public/emoji/1f469-1f3fd-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M7.981 29.995s.097-.127.175-.426.069-.897.047-.988-.053-.16-.163-.158c-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041s-.496-.105-.563-.116c-.067-.011-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234c.866.226 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.032 30.404c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142-.484-.126-1.074-.431-1.436-.629s-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.005-1.678-.272-1.722-.338z"/><path fill="#4289C1" d="M23.802 17.195c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.114-2.108-.301s-1.44-.16-2.522-.359c-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.289-.179 5.495-.168s5.166-1.285 5.333-.05z"/><path fill="#4289C1" d="M6.77 28.689c-.656-.086-1.108-.395-1.51-.897 1.506-2.038 3.136-7.609 3.136-7.609.541-1.798 1.36-3.044 2.992-3.124 2.316-.113 5.772.032 5.772.032 2.296.13.738.727 1.448 1.573.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.48.122-.868.031-1.524-.055z"/><path fill="#D4AB88" d="M21.842.878c-1.405-.68-3.719-.115-4.11 1.557-.388 1.661-.109 4.333 1.379 4.285 1.56-.05 3.174-.266 3.921-1.812.748-1.545.215-3.35-1.19-4.03z"/><path fill="#D4AB88" d="M22.59 5.288c2.295-2.316-2.801-2.46-2.801-2.46-.964-.038-.424 1.613-.942 2.453-.356.582.925 1.001.925 1.001s.6.036.577.766v.007c-.007.186-.043.404-.151.691-.54 1.423 1.347 2.463 1.887 1.037.213-.564.186-1.077.136-1.552l-.006-.041c-.077-.707-.193-1.329.375-1.902z"/><path fill="#963B22" d="M23.453 1.588C22.574.386 21.283-.183 18.944.523c-2.044.617-1.525 2.243-1.042 2.008 1.331-.647 2.128.052 2.699 1.138.228-.495 1.083-.745 1.194.013.126.852-.68 1.158-.593 1.394.029.079-.034-.072 0 0 .431.911 1.22 1.246 1.22 1.246s.297.144.898-.847 1.005-2.693.133-3.887z"/><path fill="#963B22" d="M22.934 2.681c1.968.317 1.157 2.559 1.358 3.601.247 1.283 1.436 1.361 1.436 1.361s-.463-.666-.35-1.611c.156-1.312 1.379-2.377.405-3.613-1.244-1.58-4.072.065-2.849.262z"/><path fill="#9268CA" d="M24.353 16.862c.015 1.321-.057 1.777.007 2.351.036.319-1.252-.021-1.954-.176-1.883-.415-3.583-1.221-3.583-1.221.184-1.244.869-3.07-.624-4.823-.455-.535-.375-1.854.369-3.041.828-1.321 1.751-2.535 2.926-2.661.812-.088 1.597.328 2.15 1.2 2.206 1.83.762 1.78.777 3.121.024 2.035-.083 3.929-.068 5.25z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#D4AB88" d="M22.657 10.9c1.111 1.023 3.158 2.426 3.128 2.68-.174 1.464.402 3.203.2 4.11-.147.657-.805 1.117-.745 1.476.667.012.407 1.163.677 1.687.284.551 1.174-.056 1.311-.909.101-.627-.068-1.112-.113-1.757-.064-.918 1.207-3.625.39-5.457-.276-.618-1.167-1.842-3.212-3.751-.608.439-1.636 1.921-1.636 1.921z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg new file mode 100644 index 000000000..c14a8e794 --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg new file mode 100644 index 000000000..dff165ed5 --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg new file mode 100644 index 000000000..19a8dab4c --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff.svg b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff.svg new file mode 100644 index 000000000..6040c7be6 --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#0B0200" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#7C533E" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#7C533E" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#3D2E24" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="23.5" cy="8.5" r=".5"/><circle cx="28.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb.svg b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb.svg new file mode 100644 index 000000000..77a4bce68 --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#F7DECE" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#EEC2AD" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc.svg b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc.svg new file mode 100644 index 000000000..c30ccdf21 --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#F3D2A2" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#E2C196" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#E2C196" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd.svg b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd.svg new file mode 100644 index 000000000..aa913dc93 --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#D4AB88" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#CC9B7A" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#CC9B7A" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f9af.svg b/public/emoji/1f469-1f3fe-200d-1f9af.svg new file mode 100644 index 000000000..3b4b53958 --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.476 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029-.621-.061-.641.488l.004.16s.987.397 2.344.397c1.358 0 1.566-.399 2.444-.399s1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.726 35.926c-.058-.052-.123-.22-.173-.243s-.57.089-.813.146c-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.221-5.012s-.072-.142-.307-.343c-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.103s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.581-.682.744-1.146.744-1.146z"/><path fill="#292F33" d="M30.465 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416-.08.025-.082-.003-.104-.028-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107s.704-.997.876-1.36c.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.977 1.394-1.056 1.404z"/><path fill="#AF7E57" d="M21.541 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M22.724 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.143-.766-.321-1.437.252-2.111z"/><path fill="#60352A" d="M23.361 2.026C22.3.784 20.841.269 18.342 1.235c-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.875-3.028-.178-4.261z"/><path fill="#60352A" d="M22.787 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.356-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M18.598 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.728-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.032.288-.538.767-1.804.876z"/><path fill="#4289C1" d="M29.333 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.261 1.291-.624 1.844z"/><path fill="#9268CA" d="M25.536 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858.238 3.216.25 6.062.25 6.062z"/><path fill="#AF7E57" d="M20.142 11.64c-.783 1.171-2.299 3.804-2.526 3.904-1.206.531-2.551 1.215-3.448 1.307-.65.067-1.256.678-1.51.922-.316.304-.752 1.006-.633 1.369.074.226.57.489.741.254.333-.457.974-.533 1.492-.886 1.039-.71 3.285-.758 4.56-1.7.528-.39 1.583-1.134 3.111-3.722-.591-.426-1.787-1.448-1.787-1.448z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f9bc.svg b/public/emoji/1f469-1f3fe-200d-1f9bc.svg new file mode 100644 index 000000000..ba5ca0543 --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.288.195 5.488.311 1.201.118 5.257-.829 5.317.416z"/><path fill="#4289C1" d="M7.127 27.177c-.646-.143-1.069-.49-1.426-1.025 1.678-1.899 3.787-7.307 3.787-7.307.695-1.744 1.62-2.914 3.252-2.851 2.317.089 5.748.535 5.748.535 2.276.329.671.789 1.305 1.693.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.489.079-.868-.045-1.514-.188z"/><path fill="#AF7E57" d="M24.879.905c-1.341-.8-3.695-.439-4.23 1.193-.531 1.621-.487 4.307 1 4.389 1.559.086 3.185.011 4.064-1.464.88-1.474.507-3.318-.834-4.118z"/><path fill="#AF7E57" d="M25.24 5.363c2.488-2.108-2.576-2.694-2.576-2.694-.957-.122-.563 1.57-1.152 2.362-.405.548.834 1.078.834 1.078s.594.089.508.813l-.001.007c-.023.184-.078.399-.211.676-.662 1.37 1.127 2.571 1.789 1.198.262-.544.279-1.056.27-1.534l-.001-.042c-.015-.712-.076-1.343.54-1.864z"/><path fill="#60352A" d="M26.422 1.752C25.651.478 24.415-.201 22.023.298c-2.089.436-1.714 2.102-1.212 1.91 1.382-.528 2.116.237 2.589 1.369.27-.473 1.143-.648 1.189.117.051.859-.778 1.094-.712 1.337.022.082-.028-.075 0 0 .35.945 1.106 1.348 1.106 1.348s.283.169.969-.766c.684-.934 1.235-2.595.47-3.861z"/><path fill="#60352A" d="M25.843 2.713c1.875.677.661 2.73.665 3.791.004 1.306 1.158 1.604 1.158 1.604s-.331-.74-.045-1.649c.397-1.26 1.797-2.079 1.069-3.475-.927-1.783-4.012-.692-2.847-.271z"/><path fill="#9268CA" d="M25.778 16.257c-.214 1.304-.659 2.456-.696 3.032-.02.32-.939-.237-1.604-.511-1.782-.735-3.317-1.825-3.317-1.825.398-1.193.696-3.032.149-5.268-.477-1.953 3.106-5.252 4.309-4.634 1.573.807 2.382 1.782 1.904 4.684l-.745 4.522z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#AF7E57" d="M22.691 10.276c-.579 1.455-.982 3.884-1.237 3.894-1.473.062-3.222.614-4.149.559-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 4.492.479 5.665-.345.554-.389 1.272-1.95 2.356-4.742-1.084-.476-2.342-.664-2.342-.664z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3fe-200d-1f9bd.svg b/public/emoji/1f469-1f3fe-200d-1f9bd.svg new file mode 100644 index 000000000..f481961b1 --- /dev/null +++ b/public/emoji/1f469-1f3fe-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M7.981 29.995s.097-.127.175-.426.069-.897.047-.988-.053-.16-.163-.158c-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041s-.496-.105-.563-.116c-.067-.011-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234c.866.226 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.032 30.404c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142-.484-.126-1.074-.431-1.436-.629s-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.005-1.678-.272-1.722-.338z"/><path fill="#4289C1" d="M23.802 17.195c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.114-2.108-.301s-1.44-.16-2.522-.359c-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.289-.179 5.495-.168s5.166-1.285 5.333-.05z"/><path fill="#4289C1" d="M6.77 28.689c-.656-.086-1.108-.395-1.51-.897 1.506-2.038 3.136-7.609 3.136-7.609.541-1.798 1.36-3.044 2.992-3.124 2.316-.113 5.772.032 5.772.032 2.296.13.738.727 1.448 1.573.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.48.122-.868.031-1.524-.055z"/><path fill="#AF7E57" d="M21.842.878c-1.405-.68-3.719-.115-4.11 1.557-.388 1.661-.109 4.333 1.379 4.285 1.56-.05 3.174-.266 3.921-1.812.748-1.545.215-3.35-1.19-4.03z"/><path fill="#AF7E57" d="M22.59 5.288c2.295-2.316-2.801-2.46-2.801-2.46-.964-.038-.424 1.613-.942 2.453-.356.582.925 1.001.925 1.001s.6.036.577.766v.007c-.007.186-.043.404-.151.691-.54 1.423 1.347 2.463 1.887 1.037.213-.564.186-1.077.136-1.552l-.006-.041c-.077-.707-.193-1.329.375-1.902z"/><path fill="#60352A" d="M23.453 1.588C22.574.386 21.283-.183 18.944.523c-2.044.617-1.525 2.243-1.042 2.008 1.331-.647 2.128.052 2.699 1.138.228-.495 1.083-.745 1.194.013.126.852-.68 1.158-.593 1.394.029.079-.034-.072 0 0 .431.911 1.22 1.246 1.22 1.246s.297.144.898-.847 1.005-2.693.133-3.887z"/><path fill="#60352A" d="M22.934 2.681c1.968.317 1.157 2.559 1.358 3.601.247 1.283 1.436 1.361 1.436 1.361s-.463-.666-.35-1.611c.156-1.312 1.379-2.377.405-3.613-1.244-1.58-4.072.065-2.849.262z"/><path fill="#9268CA" d="M24.353 16.862c.015 1.321-.057 1.777.007 2.351.036.319-1.252-.021-1.954-.176-1.883-.415-3.583-1.221-3.583-1.221.184-1.244.869-3.07-.624-4.823-.455-.535-.375-1.854.369-3.041.828-1.321 1.751-2.535 2.926-2.661.812-.088 1.597.328 2.15 1.2 2.206 1.83.762 1.78.777 3.121.024 2.035-.083 3.929-.068 5.25z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#AF7E57" d="M22.657 10.9c1.111 1.023 3.158 2.426 3.128 2.68-.174 1.464.402 3.203.2 4.11-.147.657-.805 1.117-.745 1.476.667.012.407 1.163.677 1.687.284.551 1.174-.056 1.311-.909.101-.627-.068-1.112-.113-1.757-.064-.918 1.207-3.625.39-5.457-.276-.618-1.167-1.842-3.212-3.751-.608.439-1.636 1.921-1.636 1.921z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg new file mode 100644 index 000000000..cbcfecadc --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg new file mode 100644 index 000000000..fce4c9184 --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg new file mode 100644 index 000000000..84e2b2bd8 --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg new file mode 100644 index 000000000..d0ba4cd18 --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#AF7E57" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#915A34" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb.svg b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb.svg new file mode 100644 index 000000000..bfbb93bbf --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#F7DECE" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#EEC2AD" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc.svg b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc.svg new file mode 100644 index 000000000..36dec9257 --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#F3D2A2" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#E2C196" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#E2C196" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd.svg b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd.svg new file mode 100644 index 000000000..f18bc69bc --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#D4AB88" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#CC9B7A" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#CC9B7A" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe.svg b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe.svg new file mode 100644 index 000000000..ac2fe9944 --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#AF7E57" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#9B6A49" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#9B6A49" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f9af.svg b/public/emoji/1f469-1f3ff-200d-1f9af.svg new file mode 100644 index 000000000..aafa3bce6 --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.476 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029-.621-.061-.641.488l.004.16s.987.397 2.344.397c1.358 0 1.566-.399 2.444-.399s1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.726 35.926c-.058-.052-.123-.22-.173-.243s-.57.089-.813.146c-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.221-5.012s-.072-.142-.307-.343c-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.103s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.581-.682.744-1.146.744-1.146z"/><path fill="#292F33" d="M30.465 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416-.08.025-.082-.003-.104-.028-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107s.704-.997.876-1.36c.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.977 1.394-1.056 1.404z"/><path fill="#7C533E" d="M21.541 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#7C533E" d="M22.724 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.143-.766-.321-1.437.252-2.111z"/><path fill="#0B0200" d="M23.361 2.026C22.3.784 20.841.269 18.342 1.235c-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.875-3.028-.178-4.261z"/><path fill="#0B0200" d="M22.787 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.356-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M18.598 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.728-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.032.288-.538.767-1.804.876z"/><path fill="#4289C1" d="M29.333 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.261 1.291-.624 1.844z"/><path fill="#9268CA" d="M25.536 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858.238 3.216.25 6.062.25 6.062z"/><path fill="#7C533E" d="M20.142 11.64c-.783 1.171-2.299 3.804-2.526 3.904-1.206.531-2.551 1.215-3.448 1.307-.65.067-1.256.678-1.51.922-.316.304-.752 1.006-.633 1.369.074.226.57.489.741.254.333-.457.974-.533 1.492-.886 1.039-.71 3.285-.758 4.56-1.7.528-.39 1.583-1.134 3.111-3.722-.591-.426-1.787-1.448-1.787-1.448z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f9bc.svg b/public/emoji/1f469-1f3ff-200d-1f9bc.svg new file mode 100644 index 000000000..39f0c6a75 --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.288.195 5.488.311 1.201.118 5.257-.829 5.317.416z"/><path fill="#4289C1" d="M7.127 27.177c-.646-.143-1.069-.49-1.426-1.025 1.678-1.899 3.787-7.307 3.787-7.307.695-1.744 1.62-2.914 3.252-2.851 2.317.089 5.748.535 5.748.535 2.276.329.671.789 1.305 1.693.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.489.079-.868-.045-1.514-.188z"/><path fill="#7C533E" d="M24.879.905c-1.341-.8-3.695-.439-4.23 1.193-.531 1.621-.487 4.307 1 4.389 1.559.086 3.185.011 4.064-1.464.88-1.474.507-3.318-.834-4.118z"/><path fill="#7C533E" d="M25.24 5.363c2.488-2.108-2.576-2.694-2.576-2.694-.957-.122-.563 1.57-1.152 2.362-.405.548.834 1.078.834 1.078s.594.089.508.813l-.001.007c-.023.184-.078.399-.211.676-.662 1.37 1.127 2.571 1.789 1.198.262-.544.279-1.056.27-1.534l-.001-.042c-.015-.712-.076-1.343.54-1.864z"/><path fill="#0B0200" d="M26.422 1.752C25.651.478 24.415-.201 22.023.298c-2.089.436-1.714 2.102-1.212 1.91 1.382-.528 2.116.237 2.589 1.369.27-.473 1.143-.648 1.189.117.051.859-.778 1.094-.712 1.337.022.082-.028-.075 0 0 .35.945 1.106 1.348 1.106 1.348s.283.169.969-.766c.684-.934 1.235-2.595.47-3.861z"/><path fill="#0B0200" d="M25.843 2.713c1.875.677.661 2.73.665 3.791.004 1.306 1.158 1.604 1.158 1.604s-.331-.74-.045-1.649c.397-1.26 1.797-2.079 1.069-3.475-.927-1.783-4.012-.692-2.847-.271z"/><path fill="#9268CA" d="M25.778 16.257c-.214 1.304-.659 2.456-.696 3.032-.02.32-.939-.237-1.604-.511-1.782-.735-3.317-1.825-3.317-1.825.398-1.193.696-3.032.149-5.268-.477-1.953 3.106-5.252 4.309-4.634 1.573.807 2.382 1.782 1.904 4.684l-.745 4.522z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#7C533E" d="M22.691 10.276c-.579 1.455-.982 3.884-1.237 3.894-1.473.062-3.222.614-4.149.559-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 4.492.479 5.665-.345.554-.389 1.272-1.95 2.356-4.742-1.084-.476-2.342-.664-2.342-.664z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-1f3ff-200d-1f9bd.svg b/public/emoji/1f469-1f3ff-200d-1f9bd.svg new file mode 100644 index 000000000..4eea4dc72 --- /dev/null +++ b/public/emoji/1f469-1f3ff-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M7.981 29.995s.097-.127.175-.426.069-.897.047-.988-.053-.16-.163-.158c-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041s-.496-.105-.563-.116c-.067-.011-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234c.866.226 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.032 30.404c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142-.484-.126-1.074-.431-1.436-.629s-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.005-1.678-.272-1.722-.338z"/><path fill="#4289C1" d="M23.802 17.195c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.114-2.108-.301s-1.44-.16-2.522-.359c-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.289-.179 5.495-.168s5.166-1.285 5.333-.05z"/><path fill="#4289C1" d="M6.77 28.689c-.656-.086-1.108-.395-1.51-.897 1.506-2.038 3.136-7.609 3.136-7.609.541-1.798 1.36-3.044 2.992-3.124 2.316-.113 5.772.032 5.772.032 2.296.13.738.727 1.448 1.573.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.48.122-.868.031-1.524-.055z"/><path fill="#7C533E" d="M21.842.878c-1.405-.68-3.719-.115-4.11 1.557-.388 1.661-.109 4.333 1.379 4.285 1.56-.05 3.174-.266 3.921-1.812.748-1.545.215-3.35-1.19-4.03z"/><path fill="#7C533E" d="M22.59 5.288c2.295-2.316-2.801-2.46-2.801-2.46-.964-.038-.424 1.613-.942 2.453-.356.582.925 1.001.925 1.001s.6.036.577.766v.007c-.007.186-.043.404-.151.691-.54 1.423 1.347 2.463 1.887 1.037.213-.564.186-1.077.136-1.552l-.006-.041c-.077-.707-.193-1.329.375-1.902z"/><path fill="#0B0200" d="M23.453 1.588C22.574.386 21.283-.183 18.944.523c-2.044.617-1.525 2.243-1.042 2.008 1.331-.647 2.128.052 2.699 1.138.228-.495 1.083-.745 1.194.013.126.852-.68 1.158-.593 1.394.029.079-.034-.072 0 0 .431.911 1.22 1.246 1.22 1.246s.297.144.898-.847 1.005-2.693.133-3.887z"/><path fill="#0B0200" d="M22.934 2.681c1.968.317 1.157 2.559 1.358 3.601.247 1.283 1.436 1.361 1.436 1.361s-.463-.666-.35-1.611c.156-1.312 1.379-2.377.405-3.613-1.244-1.58-4.072.065-2.849.262z"/><path fill="#9268CA" d="M24.353 16.862c.015 1.321-.057 1.777.007 2.351.036.319-1.252-.021-1.954-.176-1.883-.415-3.583-1.221-3.583-1.221.184-1.244.869-3.07-.624-4.823-.455-.535-.375-1.854.369-3.041.828-1.321 1.751-2.535 2.926-2.661.812-.088 1.597.328 2.15 1.2 2.206 1.83.762 1.78.777 3.121.024 2.035-.083 3.929-.068 5.25z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#7C533E" d="M22.657 10.9c1.111 1.023 3.158 2.426 3.128 2.68-.174 1.464.402 3.203.2 4.11-.147.657-.805 1.117-.745 1.476.667.012.407 1.163.677 1.687.284.551 1.174-.056 1.311-.909.101-.627-.068-1.112-.113-1.757-.064-.918 1.207-3.625.39-5.457-.276-.618-1.167-1.842-3.212-3.751-.608.439-1.636 1.921-1.636 1.921z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-200d-1f9af.svg b/public/emoji/1f469-200d-1f9af.svg new file mode 100644 index 000000000..fe5558732 --- /dev/null +++ b/public/emoji/1f469-200d-1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.154 19.416l.802.598L3.988 32.04l-.802-.598z"/><path fill="#DD2E44" d="M3.186 31.444L1.093 34.25c-.164.22-.119.535.102.7s.535.119.7-.102l2.092-2.806-.801-.598z"/><path fill="#292F33" d="M11.359 21.319c-.22-.164-.266-.479-.102-.7l1.793-2.405c.164-.22.479-.266.7-.102.22.164.266.479.102.7l-1.793 2.405c-.164.221-.479.267-.7.102z"/><path fill="#292F33" d="M11.76 21.618l-.802-.598c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102l.802.598c.22.164.266.479.102.7-.164.221-.479.267-.7.102z"/><path fill="#99AAB5" d="M.598 35.751c-.22-.164-.266-.479-.102-.7.164-.22.479-.266.7-.102.22.164.266.479.102.7-.165.22-.48.266-.7.102z"/><path fill="#292F33" d="M20.476 35.056s.061-.144.061-.448c0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029-.621-.061-.641.488l.004.16s.987.397 2.344.397c1.358 0 1.566-.399 2.444-.399s1.328-.173 1.328-.173z"/><path fill="#292F33" d="M18.726 35.926c-.058-.052-.123-.22-.173-.243s-.57.089-.813.146c-.243.058-.66.156-1.152.156-.491 0-1.126-.144-1.519-.243-.393-.098-.701-.23-.77-.274-.07-.043-.05-.063-.046-.096.004-.033.052-.202.052-.202s.251.132.678.237c.426.104.851.183 1.584.183s1.193-.109 1.574-.211c.475-.128 1.163-.267 1.656-.267.38 0 .648-.112.751-.139.024-.006.046.012.046.037v.649c0 .042-.035.139-.146.162-.112.024-1.664.157-1.722.105zm12.221-5.012s-.072-.142-.307-.343c-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.078-.035.075-.199.746-.444 1.056-.454.575-1.184.418-1.184.418s-.087.46-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.127.103s.96-.502 1.857-1.555c.897-1.052.726-1.477 1.306-2.158.581-.682.744-1.146.744-1.146z"/><path fill="#292F33" d="M30.465 32.846c-.078.01-.252-.05-.303-.026-.051.024-.308.5-.424.727-.116.226-.316.615-.64.996s-.856.778-1.192 1.018c-.336.24-.642.391-.721.416-.08.025-.082-.003-.104-.028-.022-.025-.122-.174-.122-.174s.269-.107.631-.369c.363-.261.705-.538 1.189-1.107s.704-.997.876-1.36c.214-.452.562-1.078.887-1.46.251-.295.342-.576.388-.674.011-.023.04-.028.059-.012l.503.429c.033.028.085.118.029.22-.055.103-.977 1.394-1.056 1.404z"/><path fill="#FFDC5D" d="M21.541 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M22.724 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.143-.766-.321-1.437.252-2.111z"/><path fill="#FFAC33" d="M23.361 2.026C22.3.784 20.841.269 18.342 1.235c-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.875-3.028-.178-4.261z"/><path fill="#FFAC33" d="M22.787 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.356-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M18.598 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536.028-2.441-.472-5.991-.472-5.991 0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.728-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.032.288-.538.767-1.804.876z"/><path fill="#4289C1" d="M29.333 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.261 1.291-.624 1.844z"/><path fill="#9268CA" d="M25.536 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858.238 3.216.25 6.062.25 6.062z"/><path fill="#FFDC5D" d="M20.142 11.64c-.783 1.171-2.299 3.804-2.526 3.904-1.206.531-2.551 1.215-3.448 1.307-.65.067-1.256.678-1.51.922-.316.304-.752 1.006-.633 1.369.074.226.57.489.741.254.333-.457.974-.533 1.492-.886 1.039-.71 3.285-.758 4.56-1.7.528-.39 1.583-1.134 3.111-3.722-.591-.426-1.787-1.448-1.787-1.448z"/><path fill="#292F33" d="M14.21 17.018c.477.152.847.624.557 1.114-.29.49.403.185.512-.045.223-.468-.178-1.158-.646-1.314-.468-.156-.746.142-.423.245z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-200d-1f9bc.svg b/public/emoji/1f469-200d-1f9bc.svg new file mode 100644 index 000000000..6706ec815 --- /dev/null +++ b/public/emoji/1f469-200d-1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M8.22 28.583s.108-.118.211-.409c.104-.291.147-.888.133-.98-.014-.092-.039-.164-.148-.171-.083-.006-.768.08-1.145-.039-.699-.22-.812-.957-.812-.957s-.46.083-.829.152c-.368.069-.818.209-1.134.274-.271.056-.548.03-.823-.03-.275-.06-.485-.147-.55-.165-.066-.017-.575-.27-.782.25l-.051.154s.811.718 2.114 1.182c1.303.464 1.639.152 2.481.452.843.3 1.335.287 1.335.287z"/><path fill="#292F33" d="M6.243 28.821c-.038-.07-.043-.253-.083-.292-.04-.039-.577-.11-.83-.137-.253-.027-.687-.076-1.158-.244-.471-.168-1.032-.523-1.375-.752-.343-.228-.594-.46-.646-.526s-.026-.078-.011-.107.119-.176.119-.176.196.213.569.459.754.467 1.458.717c.703.25 1.182.303 1.583.335.499.039 1.207.141 1.681.309.365.13.66.114.768.123.025.002.04.027.032.051l-.222.623c-.014.041-.081.121-.196.105s-1.651-.419-1.689-.488z"/><path fill="#4289C1" d="M25.097 17.21c.069 1.432-.391 2.922-1.505 3.202-1.066.268-3.056-.151-3.056-.151s-.698.408-.531 1.189c.095.444.257.67.201.712-.05.038-.486-.022-.684-.032-.528-.027-1.1-.211-2.073-.484-.974-.273-1.421-.285-2.481-.577-1.175-.324-1.986-.835-2.33-1.956-.293-.956.277-2.123 1.654-2.63 1.12-.412 4.288.195 5.488.311 1.201.118 5.257-.829 5.317.416z"/><path fill="#4289C1" d="M7.127 27.177c-.646-.143-1.069-.49-1.426-1.025 1.678-1.899 3.787-7.307 3.787-7.307.695-1.744 1.62-2.914 3.252-2.851 2.317.089 5.748.535 5.748.535 2.276.329.671.789 1.305 1.693.635.903-1.294 1.99-2.786 1.891-2.602-.173-3.877-.453-5.522.846-.8 2.306-2.071 4.087-2.844 6.406-.489.079-.868-.045-1.514-.188z"/><path fill="#FFDC5D" d="M24.879.905c-1.341-.8-3.695-.439-4.23 1.193-.531 1.621-.487 4.307 1 4.389 1.559.086 3.185.011 4.064-1.464.88-1.474.507-3.318-.834-4.118z"/><path fill="#FFDC5D" d="M25.24 5.363c2.488-2.108-2.576-2.694-2.576-2.694-.957-.122-.563 1.57-1.152 2.362-.405.548.834 1.078.834 1.078s.594.089.508.813l-.001.007c-.023.184-.078.399-.211.676-.662 1.37 1.127 2.571 1.789 1.198.262-.544.279-1.056.27-1.534l-.001-.042c-.015-.712-.076-1.343.54-1.864z"/><path fill="#FFAC33" d="M26.422 1.752C25.651.478 24.415-.201 22.023.298c-2.089.436-1.714 2.102-1.212 1.91 1.382-.528 2.116.237 2.589 1.369.27-.473 1.143-.648 1.189.117.051.859-.778 1.094-.712 1.337.022.082-.028-.075 0 0 .35.945 1.106 1.348 1.106 1.348s.283.169.969-.766c.684-.934 1.235-2.595.47-3.861z"/><path fill="#FFAC33" d="M25.843 2.713c1.875.677.661 2.73.665 3.791.004 1.306 1.158 1.604 1.158 1.604s-.331-.74-.045-1.649c.397-1.26 1.797-2.079 1.069-3.475-.927-1.783-4.012-.692-2.847-.271z"/><path fill="#9268CA" d="M25.778 16.257c-.214 1.304-.659 2.456-.696 3.032-.02.32-.939-.237-1.604-.511-1.782-.735-3.317-1.825-3.317-1.825.398-1.193.696-3.032.149-5.268-.477-1.953 3.106-5.252 4.309-4.634 1.573.807 2.382 1.782 1.904 4.684l-.745 4.522z"/><path fill="#66757F" d="M27.811 10.609l.425-5.242c.022-.274.265-.48.539-.458.274.022.48.265.458.539l-.425 5.242c-.022.274-.265.48-.539.458-.274-.022-.48-.265-.458-.539z"/><path fill="#292F33" d="M16 21v2s-2 0-2 2v3c0 1 1 2 2 2h10c1 0 2-1 2-2v-5c0-1-1-2-2-2H16z"/><path fill="#292F33" d="M22.956 22.559l-9.848-1.736c-.985-.174-.985-.174-.811-1.158.096-.542.617-.907 1.158-.811l9.848 1.736c.542.096.907.617.811 1.158-.173.985-.173.985-1.158.811z"/><path fill="#292F33" d="M25.238 19.023c-.193.922-.557 1.827-2.094 1.537-1.537-.29-1.782 1.225-.824 1.493.958.267 3.252.646 3.921-.446.668-1.092.78-2.139.713-2.606s-1.572-.66-1.716.022z"/><path fill="#DD2E44" d="M23.442 22.896l-10.833-1.91c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l10.833 1.91c.271.048.453.308.406.579-.048.271-.309.454-.579.406z"/><path fill="#292F33" d="M28.932 9.642l-1.736 9.848c-.174.985-.174.985-1.158.811-.542-.096-.907-.617-.811-1.158l1.736-9.848c.096-.542.617-.907 1.158-.811.984.173.984.173.811 1.158zm.992-7.49l-.713 4.025c-.087.493-.168 1.007-1.153.834-.542-.096-.882-.715-.763-1.398l.639-3.609c.163-.579.626-1.004 1.167-.909.985.173.91.564.823 1.057z"/><path fill="#DD2E44" d="M29.406 9.224l-1.91 10.833c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l1.91-10.833c.048-.271.308-.453.579-.406.272.048.454.308.406.579zm1.243-7.455l-.91 5.18c-.048.271-.308.453-.579.406-.271-.048-.453-.308-.406-.579l.91-5.18c.048-.271.308-.453.579-.406.271.047.454.308.406.579z"/><path fill="#292F33" d="M25.494 18.441l-7.466-1.316c-.747-.132-.747-.132-.617-.869.071-.405.466-.678.877-.606l7.466 1.316c.411.072.688.463.617.869-.13.738-.13.738-.877.606z"/><path fill="#DD2E44" d="M23.123 21.824c.993.175 2.954.521 3.475-2.433s1.506-2.781.985.174-2.237 3.667-4.634 3.245c-1.969-.348-1.796-1.333.174-.986zm-10.33-1.821c1.971.34 2.277 1.422.308 1.07-.873-.156-.984.212-1.251.958-.252.702-.611 1.757-1.144 3.23-.391 1.082-1.279.603-.95-.342.551-1.588 1.061-2.968 1.392-3.847.338-.895.613-1.247 1.645-1.069z"/><path fill="#DD2E44" d="M10.62 24.01c-.258-.094-.547.04-.641.299l-2.052 5.638c-.094.258.04.547.299.641.258.094.547-.04.641-.299l2.052-5.638c.094-.259-.041-.547-.299-.641z"/><path fill="#66757F" d="M8.226 30.588L4.467 29.22c-.258-.094-.393-.382-.299-.641.094-.258.382-.393.641-.299l3.759 1.368c.258.094.393.382.299.641-.094.258-.383.393-.641.299z"/><path fill="#DD2E44" d="M13.844 30.862l2.95-2.95c.194-.194.194-.513 0-.707-.194-.194-.513-.194-.707 0l-2.95 2.95c-.194.194-.194.513 0 .707.194.194.512.194.707 0zM32 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M13.5 34c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1s1 .45 1 1v3c0 .55-.45 1-1 1zm12.983-6.005h2c.275 0 .5-.225.5-.5s-.225-.5-.5-.5h-2c-.275 0-.5.225-.5.5s.225.5.5.5z"/><path fill="#DD2E44" d="M31.123 30.803l-2.95-2.95c-.194-.194-.194-.513 0-.707.194-.194.513-.194.707 0l2.95 2.95c.194.194.194.513 0 .707-.194.195-.512.195-.707 0z"/><path fill="#292F33" d="M11.672 16.127c.742.318 2.05.936 2.339 1.047 0 0 .134-.891.49-.891 0 0 .134-.468.223-.668s.356-.134.379.245c.022.379-.089.512-.089.512s.334.423.134 1.002c0 0 .446.067.356.624-.089.557.067.98-.334 1.092-.401.111-1.916.535-1.938-.067-.022-.601-.401-1.069-1.136-1.515-.735-.446-1.27-.936-1.181-1.181.088-.244.133-.467.757-.2z"/><path fill="#DD2E44" d="M26.5 25h-11c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h11c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#FFDC5D" d="M22.691 10.276c-.579 1.455-.982 3.884-1.237 3.894-1.473.062-3.222.614-4.149.559-.672-.04-1.306-.167-1.651-.05-.552.187-1.159.289-1.351.632-.195.348.171.657 1.035.656.635 0 1.045.208 1.674.06.896-.21 4.492.479 5.665-.345.554-.389 1.272-1.95 2.356-4.742-1.084-.476-2.342-.664-2.342-.664z"/><circle fill="#66757F" cx="21.5" cy="31.5" r="4.5"/><circle fill="#66757F" cx="13.5" cy="33.5" r="2.5"/><circle fill="#66757F" cx="32" cy="34" r="2"/><circle fill="#CCD6DD" cx="21.5" cy="31.5" r="2.5"/><circle fill="#CCD6DD" cx="13.5" cy="33.5" r="1.5"/><circle fill="#292F33" cx="32" cy="34" r="1"/><g fill="#292F33"><circle cx="22" cy="30.634" r=".5"/><circle cx="21" cy="32.366" r=".5"/><circle cx="20.634" cy="31" r=".5"/><circle cx="22.366" cy="32" r=".5"/></g><circle fill="#292F33" cx="13.5" cy="33.5" r=".75"/><circle fill="#66757F" cx="32" cy="34" r=".5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-200d-1f9bd.svg b/public/emoji/1f469-200d-1f9bd.svg new file mode 100644 index 000000000..1d6b02cfa --- /dev/null +++ b/public/emoji/1f469-200d-1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M7.981 29.995s.097-.127.175-.426.069-.897.047-.988-.053-.16-.163-.158c-.083.001-.759.146-1.144.061-.716-.158-.892-.883-.892-.883s-.452.123-.812.223c-.361.101-.796.279-1.106.372-.265.079-.543.078-.823.041s-.496-.105-.563-.116c-.067-.011-.597-.219-.757.317l-.037.159s.871.645 2.209.993 1.646.009 2.511.234c.866.226 1.355.171 1.355.171z"/><path fill="#292F33" d="M6.032 30.404c-.044-.066-.065-.248-.109-.284-.043-.036-.585-.059-.839-.064-.254-.005-.691-.016-1.175-.142-.484-.126-1.074-.431-1.436-.629s-.632-.407-.689-.468c-.057-.061-.033-.075-.02-.106.013-.031.103-.186.103-.186s.214.195.607.407.792.399 1.514.587 1.204.199 1.606.195c.501-.004 1.215.035 1.701.162.375.098.668.056.776.056.025 0 .043.023.036.048l-.167.64c-.011.042-.07.128-.186.122-.114-.005-1.678-.272-1.722-.338z"/><path fill="#4289C1" d="M23.802 17.195c.193 1.421-.135 2.945-1.22 3.321-1.039.36-3.058.116-3.058.116s-.66.468-.426 1.231c.133.434.314.645.262.692-.046.042-.486.02-.684.027-.528.02-1.114-.114-2.108-.301s-1.44-.16-2.522-.359c-1.198-.22-2.051-.659-2.491-1.745-.375-.927.091-2.139 1.419-2.764 1.08-.508 4.289-.179 5.495-.168s5.166-1.285 5.333-.05z"/><path fill="#4289C1" d="M6.77 28.689c-.656-.086-1.108-.395-1.51-.897 1.506-2.038 3.136-7.609 3.136-7.609.541-1.798 1.36-3.044 2.992-3.124 2.316-.113 5.772.032 5.772.032 2.296.13.738.727 1.448 1.573.712.845-1.115 2.095-2.611 2.126-2.607.054-3.902-.113-5.428 1.324-.596 2.367-1.706 4.252-2.275 6.63-.48.122-.868.031-1.524-.055z"/><path fill="#FFDC5D" d="M21.842.878c-1.405-.68-3.719-.115-4.11 1.557-.388 1.661-.109 4.333 1.379 4.285 1.56-.05 3.174-.266 3.921-1.812.748-1.545.215-3.35-1.19-4.03z"/><path fill="#FFDC5D" d="M22.59 5.288c2.295-2.316-2.801-2.46-2.801-2.46-.964-.038-.424 1.613-.942 2.453-.356.582.925 1.001.925 1.001s.6.036.577.766v.007c-.007.186-.043.404-.151.691-.54 1.423 1.347 2.463 1.887 1.037.213-.564.186-1.077.136-1.552l-.006-.041c-.077-.707-.193-1.329.375-1.902z"/><path fill="#FFAC33" d="M23.453 1.588C22.574.386 21.283-.183 18.944.523c-2.044.617-1.525 2.243-1.042 2.008 1.331-.647 2.128.052 2.699 1.138.228-.495 1.083-.745 1.194.013.126.852-.68 1.158-.593 1.394.029.079-.034-.072 0 0 .431.911 1.22 1.246 1.22 1.246s.297.144.898-.847 1.005-2.693.133-3.887z"/><path fill="#FFAC33" d="M22.934 2.681c1.968.317 1.157 2.559 1.358 3.601.247 1.283 1.436 1.361 1.436 1.361s-.463-.666-.35-1.611c.156-1.312 1.379-2.377.405-3.613-1.244-1.58-4.072.065-2.849.262z"/><path fill="#9268CA" d="M24.353 16.862c.015 1.321-.057 1.777.007 2.351.036.319-1.252-.021-1.954-.176-1.883-.415-3.583-1.221-3.583-1.221.184-1.244.869-3.07-.624-4.823-.455-.535-.375-1.854.369-3.041.828-1.321 1.751-2.535 2.926-2.661.812-.088 1.597.328 2.15 1.2 2.206 1.83.762 1.78.777 3.121.024 2.035-.083 3.929-.068 5.25z"/><g fill="#DD2E44"><path d="M13.465 27.092l10.824.95c.274.024.518-.181.542-.455.024-.274-.181-.518-.455-.542l-10.824-.95c-.274-.024-.518.181-.542.455-.024.274.181.518.455.542z"/><path d="M24.288 28.041c-.274-.024-.478-.268-.455-.542l.436-4.981c.024-.274.268-.478.542-.455.274.024.478.268.455.542l-.436 4.981c-.024.275-.268.479-.542.455zm-10.738-7.58c-.274-.024-.518.181-.542.455l-1.015 11.597c-.024.274.181.518.455.542.274.024.518-.181.542-.455l1.015-11.597c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M23.524 20.592c1.431-.206 2.834-.148 2.345.544-.489.692-1.575 1.905-3.418 1.707-1.844-.198.185-2.123 1.073-2.251z"/><path fill="#292F33" d="M22.45 22.843l-9.962-.872c-.996-.087-.996-.087-.909-1.083.048-.548.535-.957 1.083-.909l9.962.872c.548.048.957.535.909 1.083-.087.996-.087.996-1.083.909z"/><path fill="#DD2E44" d="M22.964 23.136l-10.958-.959c-.274-.024-.478-.268-.455-.542.024-.274.268-.478.542-.455l10.958.959c.274.024.478.268.455.542-.025.275-.268.479-.542.455z"/><path fill="#292F33" d="M27.278 9.454l-.872 9.962c-.087.996-.087.996-1.083.909-.548-.048-.957-.535-.909-1.083l.872-9.962c.048-.548.535-.957 1.083-.909.996.087.996.087.909 1.083z"/><path fill="#DD2E44" d="M27.714 8.996l-.959 10.958c-.024.274-.268.478-.542.455-.274-.024-.478-.268-.455-.542l.959-10.958c.024-.274.268-.478.542-.455.274.025.479.268.455.542z"/><path fill="#292F33" d="M24.62 18.519l-7.552-.661c-.755-.066-.755-.066-.69-.812.036-.41.405-.716.82-.68l7.552.661c.415.036.726.402.69.812-.064.746-.064.746-.82.68z"/><path fill="#DD2E44" d="M22.553 22.096c1.004.088 2.989.261 3.25-2.727s1.258-2.901.996.087-1.909 3.848-4.333 3.636c-1.993-.174-1.906-1.17.087-.996zm-10.449-.914c1.993.166 2.392 1.218.4 1.039-.883-.079-.962.297-1.163 1.063-.189.721-.456 1.803-.858 3.318-.295 1.112-1.221.712-.977-.257.411-1.63.798-3.05 1.052-3.953.258-.922.502-1.297 1.546-1.21z"/><g fill="#66757F"><circle cx="24.5" cy="27.5" r="1.5"/><path d="M31.245 30.817l-6.062-3.5 3.5-6.062-.866-.5-3.5 6.062-6.062-3.5-.5.866 6.062 3.5-3.5 6.062.866.5 3.5-6.062 6.062 3.5z"/><path d="M26.924 34.615l-1.812-6.761 6.762-1.812-.259-.966-6.761 1.812-1.812-6.762-.966.259 1.812 6.761-6.762 1.812.259.966 6.761-1.812 1.812 6.762z"/></g><path fill="#292F33" d="M24.5 19c-4.694 0-8.5 3.806-8.5 8.5s3.806 8.5 8.5 8.5 8.5-3.806 8.5-8.5-3.806-8.5-8.5-8.5zm0 15c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5z"/><path fill="#66757F" d="M24.5 20c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5 7.5-3.358 7.5-7.5-3.358-7.5-7.5-7.5zm0 14c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zm-9.152-.433l-2.165-1.25 1.25-2.165-.866-.5-1.25 2.165-2.165-1.25-.5.866 2.165 1.25-1.25 2.165.866.5 1.25-2.165 2.165 1.25z"/><path fill="#292F33" d="M12.5 29C10.567 29 9 30.567 9 32.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5zm0 6c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill="#DD2E44" d="M10.288 25.363c-.266-.071-.541.088-.612.354l-1.553 5.796c-.071.266.088.541.354.612.266.071.541-.088.612-.354l1.553-5.796c.07-.265-.089-.541-.354-.612z"/><path fill="#66757F" d="M8.476 32.125L4.612 31.09c-.266-.071-.425-.347-.354-.612.071-.266.347-.425.612-.354l3.864 1.035c.266.071.426.346.354.612-.071.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M30.103 9.969l-2.954-.521c-.271-.048-.453-.308-.406-.579.048-.271.308-.453.579-.406l2.954.521c.271.048.453.308.406.579-.048.272-.308.454-.579.406z"/><path fill="#292F33" d="M31.088 10.143l-2.615-.467c-.271-.048-.26-.274-.213-.545.048-.271.116-.487.386-.44l2.615.467c.271.048.453.308.406.579-.048.271-.308.454-.579.406z"/><path fill="#FFDC5D" d="M22.657 10.9c1.111 1.023 3.158 2.426 3.128 2.68-.174 1.464.402 3.203.2 4.11-.147.657-.805 1.117-.745 1.476.667.012.407 1.163.677 1.687.284.551 1.174-.056 1.311-.909.101-.627-.068-1.112-.113-1.757-.064-.918 1.207-3.625.39-5.457-.276-.618-1.167-1.842-3.212-3.751-.608.439-1.636 1.921-1.636 1.921z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-200d-2764-fe0f-200d-1f468.svg b/public/emoji/1f469-200d-2764-fe0f-200d-1f468.svg index b01d6565e..ece280dc0 100644 --- a/public/emoji/1f469-200d-2764-fe0f-200d-1f468.svg +++ b/public/emoji/1f469-200d-2764-fe0f-200d-1f468.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M13.982 20H14v-9C14 4.925 9.075 0 3 0 1.956 0 .955.165 0 .44v31.037c.652.11 1.317.179 2 .179 6.511 0 11.799-5.189 11.982-11.656z"/><path fill="#9268CA" d="M11.431 27C11.287 26.984 0 27 0 27v9h15v-5c0-2.061-1.566-3.782-3.569-4z"/><path fill="#7450A8" d="M10 32h1v4h-1z"/><path fill="#FFDC5D" d="M0 8.018v22.204C.532 30.7 1.228 31 2 31c1.657 0 3-1.343 3-3v-2.523c3.494-1.237 6-4.56 6-8.477v-5.019c-5.92-.2-9.207-2.168-11-3.963z"/><path fill="#DF1F32" d="M0 22v1.637c.538.212 1.191.363 2 .363 1.413 0 2.369-.445 3-.915C5.707 22.558 6 22 6 22H0z"/><path fill="#C1694F" d="M3 19.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M6 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#FFAC33" d="M33 0c-6.075 0-11 4.925-11 11s4.925 11 11 11c1.041 0 2.045-.154 3-.425V.425C35.045.154 34.041 0 33 0z"/><path fill="#4289C1" d="M25 27c-2.209 0-4 1.791-4 4v5h15v-9H25z"/><path fill="#2A6797" d="M25 32h1v4h-1z"/><path fill="#FFDC5D" d="M36 11.28c-4.23-1.125-6.313-3.328-7.266-4.804-.42 1.804-1.438 4.699-3.734 5.369V17c0 .589.061 1.162.168 1.719.61 3.15 2.863 5.706 5.832 6.757V27l3 5 2-3.396V11.28z"/><path fill="#C1694F" d="M30 22s.293.558 1 1.085c.63.469 1.587.915 3 .915.809 0 1.462-.151 2-.363V22h-6zm5-2.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M30 16c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#E75A70" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.75 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M13.982 20H14v-9C14 4.925 9.075 0 3 0 1.956 0 .955.165 0 .44v31.037c.652.11 1.317.179 2 .179 6.511 0 11.799-5.189 11.982-11.656z"/><path fill="#9268CA" d="M11.431 27C11.287 26.984 0 27 0 27v9h15v-5c0-2.061-1.566-3.782-3.569-4z"/><path fill="#7450A8" d="M10 32h1v4h-1z"/><path fill="#FFDC5D" d="M0 8.018v22.204C.532 30.7 1.228 31 2 31c1.657 0 3-1.343 3-3v-2.523c3.494-1.237 6-4.56 6-8.477v-5.019c-5.92-.2-9.207-2.168-11-3.963z"/><path fill="#DF1F32" d="M0 22v1.637c.538.212 1.191.363 2 .363 1.413 0 2.369-.445 3-.915C5.707 22.558 6 22 6 22H0z"/><path fill="#C1694F" d="M3 19.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M6 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#FFAC33" d="M33 0c-6.075 0-11 4.925-11 11s4.925 11 11 11c1.041 0 2.045-.154 3-.425V.425C35.045.154 34.041 0 33 0z"/><path fill="#4289C1" d="M25 27c-2.209 0-4 1.791-4 4v5h15v-9H25z"/><path fill="#2A6797" d="M25 32h1v4h-1z"/><path fill="#FFDC5D" d="M36 11.28c-4.23-1.125-6.313-3.328-7.266-4.804-.42 1.804-1.438 4.699-3.734 5.369V17c0 .589.061 1.162.168 1.719.61 3.15 2.863 5.706 5.832 6.757V27l3 5 2-3.396V11.28z"/><path fill="#C1694F" d="M30 22s.293.558 1 1.085c.63.469 1.587.915 3 .915.809 0 1.462-.151 2-.363V22h-6zm5-2.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M30 16c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#DD2E44" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.75 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-200d-2764-fe0f-200d-1f469.svg b/public/emoji/1f469-200d-2764-fe0f-200d-1f469.svg index 70fc6b7c2..62abb03e7 100644 --- a/public/emoji/1f469-200d-2764-fe0f-200d-1f469.svg +++ b/public/emoji/1f469-200d-2764-fe0f-200d-1f469.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M13.982 20H14v-9C14 4.925 9.075 0 3 0 1.956 0 .955.165 0 .44v31.037c.652.11 1.317.179 2 .179 6.511 0 11.799-5.189 11.982-11.656z"/><path fill="#9268CA" d="M11.431 27C11.287 26.984 0 27 0 27v9h15v-5c0-2.061-1.566-3.782-3.569-4z"/><path fill="#7450A8" d="M10 32h1v4h-1z"/><path fill="#FFDC5D" d="M0 8.018v22.204C.532 30.7 1.228 31 2 31c1.657 0 3-1.343 3-3v-2.523c3.494-1.237 6-4.56 6-8.477v-5.019c-5.92-.2-9.207-2.168-11-3.963z"/><path fill="#DF1F32" d="M0 22v1.637c.538.212 1.191.363 2 .363 1.413 0 2.369-.445 3-.915C5.707 22.558 6 22 6 22H0z"/><path fill="#C1694F" d="M3 19.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M6 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#FFAC33" d="M22.018 20H22v-9c0-6.075 4.925-11 11-11 1.044 0 2.045.165 3 .44v31.037c-.652.11-1.317.179-2 .179-6.511 0-11.799-5.189-11.982-11.656z"/><path fill="#9268CA" d="M24.569 27C24.713 26.984 36 27 36 27v9H21v-5c0-2.061 1.566-3.782 3.569-4z"/><path fill="#7450A8" d="M25 32h1v4h-1z"/><path fill="#FFDC5D" d="M36 8.018v22.204c-.532.478-1.228.778-2 .778-1.657 0-3-1.343-3-3v-2.523c-3.494-1.237-6-4.56-6-8.477v-5.019c5.92-.2 9.207-2.168 11-3.963z"/><path fill="#DF1F32" d="M36 22v1.637c-.538.212-1.191.363-2 .363-1.413 0-2.369-.445-3-.915-.707-.527-1-1.085-1-1.085h6z"/><path fill="#C1694F" d="M33 19.5h2c.276 0 .5-.224.5-.5s-.224-.5-.5-.5h-2c-.276 0-.5.224-.5.5s.224.5.5.5z"/><path fill="#662113" d="M30 16c.552 0 1-.448 1-1v-1c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1z"/><path fill="#E75A70" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M13.982 20H14v-9C14 4.925 9.075 0 3 0 1.956 0 .955.165 0 .44v31.037c.652.11 1.317.179 2 .179 6.511 0 11.799-5.189 11.982-11.656z"/><path fill="#9268CA" d="M11.431 27C11.287 26.984 0 27 0 27v9h15v-5c0-2.061-1.566-3.782-3.569-4z"/><path fill="#7450A8" d="M10 32h1v4h-1z"/><path fill="#FFDC5D" d="M0 8.018v22.204C.532 30.7 1.228 31 2 31c1.657 0 3-1.343 3-3v-2.523c3.494-1.237 6-4.56 6-8.477v-5.019c-5.92-.2-9.207-2.168-11-3.963z"/><path fill="#DF1F32" d="M0 22v1.637c.538.212 1.191.363 2 .363 1.413 0 2.369-.445 3-.915C5.707 22.558 6 22 6 22H0z"/><path fill="#C1694F" d="M3 19.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M6 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#FFAC33" d="M22.018 20H22v-9c0-6.075 4.925-11 11-11 1.044 0 2.045.165 3 .44v31.037c-.652.11-1.317.179-2 .179-6.511 0-11.799-5.189-11.982-11.656z"/><path fill="#9268CA" d="M24.569 27C24.713 26.984 36 27 36 27v9H21v-5c0-2.061 1.566-3.782 3.569-4z"/><path fill="#7450A8" d="M25 32h1v4h-1z"/><path fill="#FFDC5D" d="M36 8.018v22.204c-.532.478-1.228.778-2 .778-1.657 0-3-1.343-3-3v-2.523c-3.494-1.237-6-4.56-6-8.477v-5.019c5.92-.2 9.207-2.168 11-3.963z"/><path fill="#DF1F32" d="M36 22v1.637c-.538.212-1.191.363-2 .363-1.413 0-2.369-.445-3-.915-.707-.527-1-1.085-1-1.085h6z"/><path fill="#C1694F" d="M33 19.5h2c.276 0 .5-.224.5-.5s-.224-.5-.5-.5h-2c-.276 0-.5.224-.5.5s.224.5.5.5z"/><path fill="#662113" d="M30 16c.552 0 1-.448 1-1v-1c0-.552-.448-1-1-1s-1 .448-1 1v1c0 .552.448 1 1 1z"/><path fill="#DD2E44" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.svg b/public/emoji/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.svg index e3fe65293..8248ed607 100644 --- a/public/emoji/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.svg +++ b/public/emoji/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M31 8.042c-6.626 0-12 5.373-12 12 0 6.626 5.374 12 12 12 1.787 0 3.476-.401 5-1.102V9.143c-1.524-.7-3.213-1.101-5-1.101z"/><path fill="#FFAC33" d="M20.667 15.042c.055.06.128.115.197.171.72.716 1.753 1.477 3.219 2.036 3.691 1.407 9.121.297 9.121.297s-.748-1.198-2.101-2.492c1.809.549 3.463 1.358 4.897 2.371v-9.25c-1.81-.904-3.843-1.426-6-1.429-6.508-.008-9.915 3.393-10.059 6.135-.176.085-.352.168-.531.265 0 0 .237.641.902 1.459.077.094.161.191.249.29.038.048.064.101.106.147z"/><path fill="#642116" d="M26 21.542c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm5 0c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm-4.995 4c.273-.003.495-.226.495-.5 0-.276-.224-.5-.5-.5-.602 0-1.5.399-1.5 1.5 0 .438.143.765.352 1-.209.235-.352.562-.352 1 0 1.101.898 1.5 1.5 1.5.273 0 .493-.22.496-.494.004-.273-.217-.499-.49-.506-.231-.006-.506-.098-.506-.5s.275-.494.5-.5h.011c.272-.006.489-.228.489-.5 0-.274-.222-.497-.495-.5-.23-.006-.505-.098-.505-.5 0-.403.274-.494.505-.5z"/><path fill="#FFAC33" d="M17.046 22.804c.015-.003.03-.005.044-.01.188-.055.328-.215.356-.412.261-1.897.124-3.785-.407-5.609C14.956 9.627 7.447 5.508.301 7.59c-.103.03-.199.073-.301.105V36h19.595c-2.291-5.75-2.539-10.675-2.549-13.196z"/><path fill="#FFDC5D" d="M16.687 22.728c-.079-.051-.151-.117-.192-.207-2.272-5.017-5.82-8.573-12.403-7.875 0 2.693-2.15 3.877-4.092 4.872V30.94c1.524.701 3.213 1.102 5 1.102 5.702 0 10.466-3.983 11.687-9.314z"/><path fill="#642116" d="M10 21.542c-.276 0-.5.224-.5.5s.224.5.5.5c1.977 0 2.5-1.636 2.5-2.5 0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503zm-2.5-1.5c0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503-.276 0-.5.224-.5.5s.224.5.5.5c1.977 0 2.5-1.636 2.5-2.5zm2.5 4.5c-.276 0-.5.224-.5.5 0 .274.222.497.495.5.23.006.505.098.505.5s-.274.494-.505.5c-.273.003-.495.226-.495.5 0 .272.218.494.489.5H10c.225.006.5.098.5.5s-.275.494-.506.5c-.273.007-.494.232-.49.506.003.274.223.494.496.494.602 0 1.5-.399 1.5-1.5 0-.438-.143-.765-.352-1 .209-.235.352-.562.352-1 0-1.101-.898-1.5-1.5-1.5z"/><path fill="#EA596E" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M31 8.042c-6.626 0-12 5.373-12 12 0 6.626 5.374 12 12 12 1.787 0 3.476-.401 5-1.102V9.143c-1.524-.7-3.213-1.101-5-1.101z"/><path fill="#FFAC33" d="M20.667 15.042c.055.06.128.115.197.171.72.716 1.753 1.477 3.219 2.036 3.691 1.407 9.121.297 9.121.297s-.748-1.198-2.101-2.492c1.809.549 3.463 1.358 4.897 2.371v-9.25c-1.81-.904-3.843-1.426-6-1.429-6.508-.008-9.915 3.393-10.059 6.135-.176.085-.352.168-.531.265 0 0 .237.641.902 1.459.077.094.161.191.249.29.038.048.064.101.106.147z"/><path fill="#642116" d="M26 21.542c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm5 0c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm-4.995 4c.273-.003.495-.226.495-.5 0-.276-.224-.5-.5-.5-.602 0-1.5.399-1.5 1.5 0 .438.143.765.352 1-.209.235-.352.562-.352 1 0 1.101.898 1.5 1.5 1.5.273 0 .493-.22.496-.494.004-.273-.217-.499-.49-.506-.231-.006-.506-.098-.506-.5s.275-.494.5-.5h.011c.272-.006.489-.228.489-.5 0-.274-.222-.497-.495-.5-.23-.006-.505-.098-.505-.5 0-.403.274-.494.505-.5z"/><path fill="#FFAC33" d="M17.046 22.804c.015-.003.03-.005.044-.01.188-.055.328-.215.356-.412.261-1.897.124-3.785-.407-5.609C14.956 9.627 7.447 5.508.301 7.59c-.103.03-.199.073-.301.105V36h19.595c-2.291-5.75-2.539-10.675-2.549-13.196z"/><path fill="#FFDC5D" d="M16.687 22.728c-.079-.051-.151-.117-.192-.207-2.272-5.017-5.82-8.573-12.403-7.875 0 2.693-2.15 3.877-4.092 4.872V30.94c1.524.701 3.213 1.102 5 1.102 5.702 0 10.466-3.983 11.687-9.314z"/><path fill="#642116" d="M10 21.542c-.276 0-.5.224-.5.5s.224.5.5.5c1.977 0 2.5-1.636 2.5-2.5 0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503zm-2.5-1.5c0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503-.276 0-.5.224-.5.5s.224.5.5.5c1.977 0 2.5-1.636 2.5-2.5zm2.5 4.5c-.276 0-.5.224-.5.5 0 .274.222.497.495.5.23.006.505.098.505.5s-.274.494-.505.5c-.273.003-.495.226-.495.5 0 .272.218.494.489.5H10c.225.006.5.098.5.5s-.275.494-.506.5c-.273.007-.494.232-.49.506.003.274.223.494.496.494.602 0 1.5-.399 1.5-1.5 0-.438-.143-.765-.352-1 .209-.235.352-.562.352-1 0-1.101-.898-1.5-1.5-1.5z"/><path fill="#DD2E44" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.svg b/public/emoji/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.svg index 93a147cdb..e46dfcaeb 100644 --- a/public/emoji/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.svg +++ b/public/emoji/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M0 7.139C6.911 5.55 13.967 9.61 15.976 16.503c.532 1.825.669 3.712.407 5.609-.028.197-.168.357-.356.412l-.044.01c.009 2.306.219 6.623 2.006 11.744.197.565.415 1.139.653 1.722H0V7.139z"/><path fill="#FFDC5D" d="M3.03 14.375c6.583-.698 10.13 2.858 12.403 7.875.041.09.113.156.192.207-1.222 5.332-5.986 9.314-11.687 9.314-1.381 0-2.702-.245-3.937-.675V18.679c1.587-.906 3.029-2.099 3.029-4.304z"/><path fill="#642116" d="M3.937 22.271c1.978 0 2.5-1.636 2.5-2.5 0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503-.276 0-.5.224-.5.5s.224.5.5.5zm5 0c1.977 0 2.5-1.636 2.5-2.5 0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503-.276 0-.5.224-.5.5s.224.5.5.5zm0 7c.602 0 1.5-.399 1.5-1.5 0-.438-.143-.765-.352-1 .209-.235.352-.562.352-1 0-1.101-.898-1.5-1.5-1.5-.276 0-.5.224-.5.5 0 .274.222.497.495.5.231.006.505.098.505.5s-.274.494-.505.5c-.273.003-.495.226-.495.5 0 .272.218.494.489.5h.011c.225.006.5.098.5.5s-.275.494-.506.5c-.273.007-.494.232-.49.506.003.274.223.494.496.494z"/><path fill="#F18F26" d="M36 7.139C29.089 5.55 22.033 9.61 20.024 16.503c-.532 1.825-.669 3.712-.407 5.609.028.197.168.357.356.412l.044.01c-.009 2.306-.219 6.623-2.006 11.744-.197.565-.415 1.139-.653 1.722H36V7.139z"/><path fill="#FFDC5D" d="M32.97 14.375c-6.583-.698-10.13 2.858-12.403 7.875-.041.09-.113.156-.192.207 1.222 5.332 5.986 9.314 11.687 9.314 1.381 0 2.702-.245 3.937-.675V18.679c-1.587-.906-3.029-2.099-3.029-4.304z"/><path fill="#642116" d="M32.063 22.271c-1.978 0-2.5-1.636-2.5-2.5 0-.276.224-.5.5-.5.275 0 .499.223.5.497.003.252.089 1.503 1.5 1.503.276 0 .5.224.5.5s-.224.5-.5.5zm-5 0c-1.977 0-2.5-1.636-2.5-2.5 0-.276.224-.5.5-.5.275 0 .499.223.5.497.003.252.089 1.503 1.5 1.503.276 0 .5.224.5.5s-.224.5-.5.5zm0 7c-.602 0-1.5-.399-1.5-1.5 0-.438.143-.765.352-1-.209-.235-.352-.562-.352-1 0-1.101.898-1.5 1.5-1.5.276 0 .5.224.5.5 0 .274-.222.497-.495.5-.23.006-.505.098-.505.5s.274.494.505.5c.273.003.495.226.495.5 0 .272-.218.494-.489.5h-.011c-.225.006-.5.098-.5.5s.275.494.506.5c.273.007.494.232.49.506-.003.274-.223.494-.496.494z"/><path fill="#E75A70" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.971 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.345.128-.702.128-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M0 7.139C6.911 5.55 13.967 9.61 15.976 16.503c.532 1.825.669 3.712.407 5.609-.028.197-.168.357-.356.412l-.044.01c.009 2.306.219 6.623 2.006 11.744.197.565.415 1.139.653 1.722H0V7.139z"/><path fill="#FFDC5D" d="M3.03 14.375c6.583-.698 10.13 2.858 12.403 7.875.041.09.113.156.192.207-1.222 5.332-5.986 9.314-11.687 9.314-1.381 0-2.702-.245-3.937-.675V18.679c1.587-.906 3.029-2.099 3.029-4.304z"/><path fill="#642116" d="M3.937 22.271c1.978 0 2.5-1.636 2.5-2.5 0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503-.276 0-.5.224-.5.5s.224.5.5.5zm5 0c1.977 0 2.5-1.636 2.5-2.5 0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503-.276 0-.5.224-.5.5s.224.5.5.5zm0 7c.602 0 1.5-.399 1.5-1.5 0-.438-.143-.765-.352-1 .209-.235.352-.562.352-1 0-1.101-.898-1.5-1.5-1.5-.276 0-.5.224-.5.5 0 .274.222.497.495.5.231.006.505.098.505.5s-.274.494-.505.5c-.273.003-.495.226-.495.5 0 .272.218.494.489.5h.011c.225.006.5.098.5.5s-.275.494-.506.5c-.273.007-.494.232-.49.506.003.274.223.494.496.494z"/><path fill="#F18F26" d="M36 7.139C29.089 5.55 22.033 9.61 20.024 16.503c-.532 1.825-.669 3.712-.407 5.609.028.197.168.357.356.412l.044.01c-.009 2.306-.219 6.623-2.006 11.744-.197.565-.415 1.139-.653 1.722H36V7.139z"/><path fill="#FFDC5D" d="M32.97 14.375c-6.583-.698-10.13 2.858-12.403 7.875-.041.09-.113.156-.192.207 1.222 5.332 5.986 9.314 11.687 9.314 1.381 0 2.702-.245 3.937-.675V18.679c-1.587-.906-3.029-2.099-3.029-4.304z"/><path fill="#642116" d="M32.063 22.271c-1.978 0-2.5-1.636-2.5-2.5 0-.276.224-.5.5-.5.275 0 .499.223.5.497.003.252.089 1.503 1.5 1.503.276 0 .5.224.5.5s-.224.5-.5.5zm-5 0c-1.977 0-2.5-1.636-2.5-2.5 0-.276.224-.5.5-.5.275 0 .499.223.5.497.003.252.089 1.503 1.5 1.503.276 0 .5.224.5.5s-.224.5-.5.5zm0 7c-.602 0-1.5-.399-1.5-1.5 0-.438.143-.765.352-1-.209-.235-.352-.562-.352-1 0-1.101.898-1.5 1.5-1.5.276 0 .5.224.5.5 0 .274-.222.497-.495.5-.23.006-.505.098-.505.5s.274.494.505.5c.273.003.495.226.495.5 0 .272-.218.494-.489.5h-.011c-.225.006-.5.098-.5.5s.275.494.506.5c.273.007.494.232.49.506-.003.274-.223.494-.496.494z"/><path fill="#DD2E44" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.971 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.345.128-.702.128-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46b-1f3fb.svg b/public/emoji/1f46b-1f3fb.svg new file mode 100644 index 000000000..5fedd969b --- /dev/null +++ b/public/emoji/1f46b-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F7DECE" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#EEC2AD" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#EEC2AD" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46b-1f3fc.svg b/public/emoji/1f46b-1f3fc.svg new file mode 100644 index 000000000..d5be6fe59 --- /dev/null +++ b/public/emoji/1f46b-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F3D2A2" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#E2C196" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#E2C196" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46b-1f3fd.svg b/public/emoji/1f46b-1f3fd.svg new file mode 100644 index 000000000..15c9bdfed --- /dev/null +++ b/public/emoji/1f46b-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46b-1f3fe.svg b/public/emoji/1f46b-1f3fe.svg new file mode 100644 index 000000000..54c46de87 --- /dev/null +++ b/public/emoji/1f46b-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#AF7E57" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#915A34" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46b-1f3ff.svg b/public/emoji/1f46b-1f3ff.svg new file mode 100644 index 000000000..e0cb1e2bb --- /dev/null +++ b/public/emoji/1f46b-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#0B0200" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#7C533E" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#7C533E" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#3D2E24" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="23.5" cy="8.5" r=".5"/><circle cx="28.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46b.svg b/public/emoji/1f46b.svg index 3877f5cd9..f7e46f210 100644 --- a/public/emoji/1f46b.svg +++ b/public/emoji/1f46b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#FFDC5D" d="M6 27h3v8H6zm5 0h3v8h-3z"/><path fill="#F9CA55" d="M6 27h3v1H6zm5 0h3v1h-3z"/><path fill="#292F33" d="M5 36v-1s0-1 2-1 2 1 2 1v1H5zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#FFDC5D" d="M.999 26c-.164 0-.331-.04-.485-.126-.482-.269-.657-.877-.388-1.359l5-9c.268-.483.876-.657 1.36-.388.482.268.657.877.388 1.36l-5 9c-.183.328-.523.513-.875.513zm18.002 0c-.352 0-.692-.185-.875-.515l-5-9c-.269-.483-.094-1.092.388-1.36.483-.269 1.092-.094 1.36.388l5 9c.269.483.095 1.091-.389 1.359-.153.088-.32.128-.484.128z"/><path fill="#E75A70" d="M4 27h12l-2-6v-4h2v-1c0-1.104-.896-2-2-2H6c-1.104 0-2 .896-2 2v1h2v4l-2 6z"/><path fill="#DA2F47" d="M6 19h8v2H6z"/><path fill="#FFDC5D" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#F9CA55" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M8 3s0 4 8 4V3H8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFAC33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AAB8C2" d="M27 23h-5v12h3v-8h2v8h3V23z"/><path fill="#292F33" d="M21 36v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#FFDC5D" d="M16.999 26c-.164 0-.331-.04-.485-.126-.483-.269-.657-.877-.388-1.359l5-9c.268-.483.878-.657 1.359-.388.483.268.657.877.389 1.36l-5 9c-.183.328-.523.513-.875.513zm18.002 0c-.352 0-.692-.185-.875-.515l-5-9c-.269-.483-.095-1.092.389-1.36.483-.269 1.092-.094 1.359.388l5 9c.269.483.095 1.091-.389 1.359-.153.088-.32.128-.484.128z"/><path fill="#4289C1" d="M32 16c0-1.104-.896-2-2-2h-8c-1.104 0-2 .896-2 2v1h2v7h8v-7h2v-1z"/><path fill="#FFDC5D" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#F9CA55" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M24 3h-3v4c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7V3h-7z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#FFDC5D" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#F9CA55" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#FFDC5D" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#FFDC5D" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#F9CA55" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFAC33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#FFDC5D" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#FFDC5D" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#F9CA55" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#FFDC5D" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46c-1f3fb.svg b/public/emoji/1f46c-1f3fb.svg new file mode 100644 index 000000000..18c40167f --- /dev/null +++ b/public/emoji/1f46c-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#F7DECE" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#F7DECE" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#C1694F" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#C1694F" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46c-1f3fc.svg b/public/emoji/1f46c-1f3fc.svg new file mode 100644 index 000000000..c7665eaf9 --- /dev/null +++ b/public/emoji/1f46c-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#F3D2A2" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#F3D2A2" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#C1694F" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#C1694F" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46c-1f3fd.svg b/public/emoji/1f46c-1f3fd.svg new file mode 100644 index 000000000..adf95058f --- /dev/null +++ b/public/emoji/1f46c-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#D4AB88" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#D4AB88" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#C1694F" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#C1694F" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46c-1f3fe.svg b/public/emoji/1f46c-1f3fe.svg new file mode 100644 index 000000000..484683659 --- /dev/null +++ b/public/emoji/1f46c-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#AF7E57" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#AF7E57" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#915A34" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#915A34" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#AF7E57" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#915A34" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46c-1f3ff.svg b/public/emoji/1f46c-1f3ff.svg new file mode 100644 index 000000000..f6fc11202 --- /dev/null +++ b/public/emoji/1f46c-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#7C533E" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#7C533E" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#3D2E24" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="7.498" cy="8.5" r=".5"/><circle cx="12.498" cy="8.5" r=".5"/><path fill="#3D2E24" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#0B0200" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#7C533E" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#7C533E" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#7C533E" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#3D2E24" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="23.5" cy="8.5" r=".5"/><circle cx="28.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46c.svg b/public/emoji/1f46c.svg index f61d4c434..0aa9dcb33 100644 --- a/public/emoji/1f46c.svg +++ b/public/emoji/1f46c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AAB8C2" d="M11 23H6v12h3v-8h2v8h3V23z"/><path fill="#292F33" d="M5 36v-1s0-1 2-1 2 1 2 1v1H5zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#FFDC5D" d="M.999 26c-.164 0-.331-.04-.485-.126-.482-.269-.657-.877-.388-1.359l5-9c.268-.483.876-.657 1.36-.388.482.268.657.877.388 1.36l-5 9c-.183.328-.523.513-.875.513zm18.002 0c-.352 0-.692-.185-.875-.515l-5-9c-.269-.483-.094-1.092.388-1.36.483-.269 1.092-.094 1.36.388l5 9c.269.483.095 1.091-.389 1.359-.153.088-.32.128-.484.128z"/><path fill="#4289C1" d="M16 16c0-1.104-.896-2-2-2H6c-1.104 0-2 .896-2 2v1h2v7h8v-7h2v-1z"/><path fill="#FFDC5D" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#F9CA55" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M15 7C8.779 7 8.004 4.588 7.965 3.512 7.85 4.588 7.333 7 5 7v2c0 2.762 2.238 5 5 5s5-2.237 5-5V7z"/><path fill="#FFAC33" d="M7.965 3.512C8.004 4.588 8.779 7 15 7v1.656c.628-.894 1-1.98 1-3.155C16 2.463 13.537 0 10.5 0 9.314 0 8.218.379 7.319 1.018 5.473 1.114 4 2.629 4 4.5c0 1.209.019 2.655 1 3.576V7c2.333 0 2.85-2.412 2.965-3.488z"/><path fill="#C1694F" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#67757F" d="M27 23h-5v12h3v-8h2v8h3V23z"/><path fill="#292F33" d="M21 36v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#FFDC5D" d="M16.999 26c-.164 0-.331-.04-.485-.126-.483-.269-.657-.877-.388-1.359l5-9c.268-.483.878-.657 1.359-.388.483.268.657.877.389 1.36l-5 9c-.183.328-.523.513-.875.513zm18.002 0c-.352 0-.692-.185-.875-.515l-5-9c-.269-.483-.095-1.092.389-1.36.483-.269 1.092-.094 1.359.388l5 9c.269.483.095 1.091-.389 1.359-.153.088-.32.128-.484.128z"/><path fill="#77B255" d="M32 16c0-1.104-.896-2-2-2h-8c-1.104 0-2 .896-2 2v1h2v7h8v-7h2v-1z"/><path fill="#FFDC5D" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#F9CA55" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFAC33" d="M32 4.5c0-1.871-1.473-3.386-3.319-3.482C27.782.379 26.687 0 25.5 0 22.463 0 20 2.463 20 5.501c0 1.175.372 2.262 1 3.155V7c6.221 0 6.996-2.412 7.035-3.488C28.15 4.588 28.667 7 31 7v1.076c.981-.921 1-2.367 1-3.576z"/><path fill="#FFDC5D" d="M28.035 3.512C27.996 4.588 27.221 7 21 7v2c0 2.762 2.238 5 5 5s5-2.237 5-5V7c-2.333 0-2.85-2.412-2.965-3.488z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M10.498 0c-1.186 0-2.282.379-3.18 1.018-1.847.096-3.32 1.611-3.32 3.482 0 1.542.007 3.484 2.038 4.208C7.035 10.094 8.659 11 10.498 11c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.462-5.501-5.5-5.501z"/><path fill="#FFDC5D" d="M17.896 26.76c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.702-2.072-1.69-3.821-.115-.204-.494-2.746-1.242-4.354-.202-.435-1.495-.684-2.009-.529-.513.154.005.98.037 1.134.344 1.651 1.305 4.077 1.45 4.404.8 1.806 1.965 2.389 2.071 3.706.055.69.205 1.286.6 1.228.092.352.093.728.193.761zM3.3 26.964c-.257.126-.504-.094-.62-.222-.33-.365-.591-1.242-.296-2.208.297-.975.424-2.146 1.174-4.01.087-.217.129-2.787.66-4.479.143-.457 1.392-.875 1.922-.789.529.086.124.972.112 1.129-.124 1.682-.758 4.213-.859 4.556-.556 1.895-1.634 2.627-1.566 3.946.036.692-.034 1.302-.433 1.296-.048.363 0 .735-.094.781z"/><path fill="#AAB8C2" d="M13.554 29.5c.5-2.734.422-6.5.422-6.5H6.013s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.298-2.156-.173-5.156-.11-5.5z"/><path fill="#292F33" d="M14.538 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.493.05 1.052.05 1.052H5.421z"/><path fill="#4289C1" d="M14.795 14.766C13.577 14 11.998 14 11.998 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.11 5.546h8.281l.109-5.547 2.203-.688c.001.001-.455-2.245-1.656-2.999z"/><path fill="#FFDC5D" d="M7.998 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#F9CA55" d="M7.998 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#FFDC5D" d="M14.998 3h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M4.998 2.5l-.5 2.5.5 2c2.333 0 2.85-2.412 2.965-3.488C8.002 4.588 8.778 7 14.998 7l.5-2-.5-2.5h-10z"/><path fill="#C1694F" d="M11.998 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.498" cy="8.5" r=".5"/><circle fill="#662113" cx="12.498" cy="8.5" r=".5"/><path fill="#C1694F" d="M8.998 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFAC33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#FFDC5D" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#FFDC5D" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#67757F" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#78B159" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#FFDC5D" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#F9CA55" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#FFDC5D" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46d-1f3fb.svg b/public/emoji/1f46d-1f3fb.svg new file mode 100644 index 000000000..8bc44aae2 --- /dev/null +++ b/public/emoji/1f46d-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F7DECE" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#EEC2AD" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#EEC2AD" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#F7DECE" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#EEC2AD" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46d-1f3fc.svg b/public/emoji/1f46d-1f3fc.svg new file mode 100644 index 000000000..555fcbb5b --- /dev/null +++ b/public/emoji/1f46d-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F3D2A2" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#E2C196" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#E2C196" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#F3D2A2" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#E2C196" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#E2C196" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46d-1f3fd.svg b/public/emoji/1f46d-1f3fd.svg new file mode 100644 index 000000000..5db65de5a --- /dev/null +++ b/public/emoji/1f46d-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#D4AB88" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#CC9B7A" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#CC9B7A" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46d-1f3fe.svg b/public/emoji/1f46d-1f3fe.svg new file mode 100644 index 000000000..d122ab64f --- /dev/null +++ b/public/emoji/1f46d-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#AF7E57" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#9B6A49" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#9B6A49" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46d-1f3ff.svg b/public/emoji/1f46d-1f3ff.svg new file mode 100644 index 000000000..5f292d55d --- /dev/null +++ b/public/emoji/1f46d-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#0B0200" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#7C533E" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#664131" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#664131" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="23.5" cy="8.5" r=".5"/><circle cx="28.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46d.svg b/public/emoji/1f46d.svg index 29d2b8597..8f8ea9cfb 100644 --- a/public/emoji/1f46d.svg +++ b/public/emoji/1f46d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#FFDC5D" d="M6 27h3v8H6zm5 0h3v8h-3z"/><path fill="#F9CA55" d="M6 27h3v1H6zm5 0h3v1h-3z"/><path fill="#292F33" d="M5 36v-1s0-1 2-1 2 1 2 1v1H5zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#FFDC5D" d="M.999 26c-.164 0-.331-.04-.485-.126-.482-.269-.657-.877-.388-1.359l5-9c.268-.483.876-.657 1.36-.388.482.268.657.877.388 1.36l-5 9c-.183.328-.523.513-.875.513zm18.002 0c-.352 0-.692-.185-.875-.515l-5-9c-.269-.483-.094-1.092.388-1.36.483-.269 1.092-.094 1.36.388l5 9c.269.483.095 1.091-.389 1.359-.153.088-.32.128-.484.128z"/><path fill="#E75A70" d="M4 27h12l-2-6v-4h2v-1c0-1.104-.896-2-2-2H6c-1.104 0-2 .896-2 2v1h2v4l-2 6z"/><path fill="#DA2F47" d="M6 19h8v2H6z"/><path fill="#FFDC5D" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#F9CA55" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M8 3s0 4 8 4V3H8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFAC33" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h4.685c.949.631 2.088 1 3.315 1 1.226 0 2.364-.369 3.315-1H33V6.001z"/><path fill="#FFDC5D" d="M22 27h3v8h-3zm5 0h3v8h-3z"/><path fill="#F9CA55" d="M22 27h3v1h-3zm5 0h3v1h-3z"/><path fill="#292F33" d="M21 36v-1s0-1 2-1 2 1 2 1v1h-4zm6 0v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#FFDC5D" d="M16.999 26c-.164 0-.331-.04-.485-.126-.483-.269-.657-.877-.388-1.359l5-9c.268-.483.878-.657 1.359-.388.483.268.657.877.389 1.36l-5 9c-.183.328-.523.513-.875.513zm18.002 0c-.352 0-.692-.185-.875-.515l-5-9c-.269-.483-.095-1.092.389-1.36.483-.269 1.092-.094 1.359.388l5 9c.269.483.095 1.091-.389 1.359-.153.088-.32.128-.484.128z"/><path fill="#9268CA" d="M32 17v-1c0-1.104-.896-2-2-2h-8c-1.104 0-2 .896-2 2v1h2v4l-2 6h12l-2-6v-4h2z"/><path fill="#AA8ED6" d="M22 19h8v2h-8z"/><path fill="#FFDC5D" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#F9CA55" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M24 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#FFDC5D" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#F9CA55" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#FFDC5D" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#FFDC5D" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#F9CA55" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFAC33" d="M33 6.001C33 2.687 30.313 0 27 0c-1.264 0-2.435.393-3.402 1.061C23.401 1.031 23.205 1 23 1c-2.209 0-4 1.791-4 4v6h14V6.001z"/><path fill="#FFDC5D" d="M27.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.312-.766 3.312 0 0 .344-.365 1.681-.417 3.131.312 1.659-.642 1.615-.485 3.678z"/><path fill="#F9CA55" d="M26.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5h2.817c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#FFDC5D" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.685 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.056.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.088-.217-.129-2.787-.66-4.479-.143-.458-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.626 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#292F33" d="M29.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52h-2.316z"/><path fill="#9268CA" d="M30.354 17.771L32 16c-1.438-1.792-4-2-4-2h-4s-2.562.208-4 2l1.646 1.771s.604 2.917.604 3.229S21 25.75 21 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#AA8ED6" d="M29.75 21c0-.106.07-.512.161-1h-7.822c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#FFDC5D" d="M24 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#F9CA55" d="M28 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M31 2H21l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46f-200d-2640-fe0f.svg b/public/emoji/1f46f-200d-2640-fe0f.svg index 4d00a954a..6559253b8 100644 --- a/public/emoji/1f46f-200d-2640-fe0f.svg +++ b/public/emoji/1f46f-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M8 35H5l1-9.712h3zm5.875-1.208l-1.834-1.333s3.167-3.012 2.531-3.994c-.636-.981-3.782-1.688-3.782-1.688l1.918-2.307s3.958 1.904 4.77 3.333c.827 1.452-3.603 5.989-3.603 5.989z"/><path fill="#292F33" d="M4 36v-1s0-1 2-1 2 1 2 1v1H4zm10.553-.517l.421-.908s.419-.907-1.396-1.747c-1.813-.841-2.233.066-2.233.066l-.42.907 3.628 1.682z"/><path fill="#FFDC5D" d="M5 26.288c-.256 0-.512-.098-.707-.293l-3-3c-.36-.36-.392-.934-.074-1.332l4-3.288c.345-.432.975-.501 1.405-.156.432.345.501.974.156 1.406l-3.44 2.589 2.367 2.367c.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293zm10 0c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l2.367-2.367-3.441-2.589c-.345-.432-.275-1.06.156-1.406.43-.345 1.06-.276 1.405.156l4.001 3.288c.318.398.286.972-.074 1.332l-3 3c-.195.195-.451.293-.707.293z"/><path fill="#292F33" d="M16 19c0-1.104-.896-2-2-2H6c-1.104 0-2 .896-2 2v1h2v5.288l3 2h2l3-2V20h2v-1z"/><path fill="#FFDC5D" d="M12 17v-3H8v3H7v1s0 3 3 3 3-3 3-3v-1h-1z"/><path fill="#F9CA55" d="M12 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M17 9.001C17 5.687 14.313 3 10.999 3c-1.263 0-2.434.393-3.401 1.06C7.401 4.031 7.204 4 7 4 4.791 4 3 5.791 3 8v6h2.422C5.153 13.387 5 12.713 5 12V9.894C7.989 9.285 8 6 8 6s.019 3.644 7 3.968V12c0 .712-.154 1.387-.422 2H17V9.001z"/><path fill="#FFDC5D" d="M15 12V9.968C8.018 9.644 8 6 8 6s-.011 3.285-3 3.894V12c0 .712.154 1.387.422 2 .772 1.765 2.528 3 4.578 3 2.05 0 3.807-1.235 4.579-3 .267-.613.421-1.287.421-2z"/><path fill="#DF1F32" d="M12 15H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="11.5" r=".5"/><circle fill="#662113" cx="12.5" cy="11.5" r=".5"/><path fill="#C1694F" d="M9 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M4.687 1.125c2.625-.219 3.75 2.875 3 4.25-1.968 0-3.937-1.813-3-4.25zm9.988.063c-2.625-.219-3.75 2.875-3 4.25 1.968 0 3.937-1.813 3-4.25z"/><path fill="#292F33" d="M7.312 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.811-.375-2.186-.937-4.061-.062-.094-.063-.441-1.098-.407-1.125z"/><path fill="#FFDC5D" d="M24 35h-3l1-9.712h3zm5.875-1.208l-1.833-1.333s3.167-3.012 2.531-3.994c-.636-.981-3.782-1.688-3.782-1.688l1.918-2.307s3.958 1.904 4.77 3.333c.826 1.452-3.604 5.989-3.604 5.989z"/><path fill="#292F33" d="M30.553 35.483l.422-.908s.418-.907-1.396-1.747c-1.812-.841-2.232.066-2.232.066l-.42.907 3.626 1.682zM20 36v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#FFDC5D" d="M21 26.288c-.256 0-.512-.098-.707-.293l-3-3c-.36-.36-.392-.934-.074-1.332l4-3.288c.346-.432.976-.501 1.406-.156.432.345.501.974.156 1.406l-3.441 2.589 2.367 2.367c.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293zm10 0c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l2.367-2.367-3.441-2.589c-.345-.432-.275-1.06.156-1.406.431-.345 1.06-.276 1.406.156l4 3.288c.318.398.286.972-.074 1.332l-3 3c-.195.195-.451.293-.707.293z"/><path fill="#292F33" d="M32 19c0-1.104-.896-2-2-2h-8c-1.104 0-2 .896-2 2v1h2v5.288l3 2h2l3-2V20h2v-1z"/><path fill="#FFDC5D" d="M28 17v-3h-4v3h-1v1s0 3 3 3 3-3 3-3v-1h-1z"/><path fill="#F9CA55" d="M28 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M33 9.001C33 5.687 30.313 3 27 3c-1.264 0-2.435.393-3.402 1.06C23.401 4.031 23.205 4 23 4c-2.209 0-4 1.791-4 4v6h2.422c-.269-.613-.422-1.287-.422-2V9.894C23.989 9.285 24 6 24 6s.019 3.644 7 3.968V12c0 .712-.154 1.387-.422 2H33V9.001z"/><path fill="#FFDC5D" d="M31 12V9.968C24.018 9.644 24 6 24 6s-.011 3.285-3 3.894V12c0 .712.154 1.387.422 2 .772 1.765 2.529 3 4.578 3s3.806-1.235 4.578-3c.268-.613.422-1.287.422-2z"/><path fill="#DF1F32" d="M28 15h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="11.5" r=".5"/><circle fill="#662113" cx="28.5" cy="11.5" r=".5"/><path fill="#C1694F" d="M25 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M20.781 1.125c2.625-.219 3.75 2.875 3 4.25-1.969 0-3.937-1.813-3-4.25zm9.987.063c-2.625-.219-3.75 2.875-3 4.25 1.969 0 3.938-1.813 3-4.25z"/><path fill="#292F33" d="M23.406 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.812-.375-2.188-.938-4.062-.062-.093-.063-.441-1.098-.406-1.125z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M8.564 34.435c.131.787-2.091 1.454-2.376 1.326-.305-.137.988-.808.967-1.226-.106-2.12-.904-1.961-.818-4.18-.802-2.376-.735-4.653-.772-5.287-.087-1.472 3.528.615 3.509 1.518-.038 1.776-.663 2.321-.687 3.502.42 1.882-.131 2.499.177 4.347zm7.189-.872c.353.715.726 1.971.416 1.931-.331-.043-1.396-.505-1.736-1.427-.734-1.991-1.804-1.447-2.364-3.596-1.047-1.579-2.186-3.886-2.406-4.482-.509-1.384 3.441-1.701 3.683-.832.477 1.711.287 3.328.607 4.465.948 1.68.97 2.262 1.8 3.941z"/><path fill="#FFDC5D" d="M5.621 26.494c-.164.146-.57.212-.669.182-.232-.07-.745-.46-1.026-.831-.513-.675-2.601-1.446-3.103-2.856-.085-.238-.067-.524.118-.86.113-.205 1.505-2.37 2.77-3.655.336-.342 1.248-.428 1.676-.104.427.323.483.579.233 1.04-.811 1.497-2.441 2.342-3.119 3.194.974.847.851 1.353 2.193 2.22.156-.088.457-.158.538-.136.08.022.264.154.224.397.024.02.226.196.271.286.126.245.107.934-.106 1.123zm8.023.065c.176.132.586.163.682.125.225-.089.703-.521.953-.914.454-.715 2.471-1.659 2.853-3.106.065-.244.023-.528-.19-.847-.13-.195-1.698-2.235-3.066-3.41-.364-.312-1.279-.322-1.679.037-.399.358-.433.617-.146 1.056.934 1.424 2.628 2.129 3.375 2.922-.9.925-.735 1.419-2 2.396-.163-.075-.469-.119-.547-.09-.078.029-.25.176-.19.414-.022.021-.209.214-.246.307-.103.255-.027.94.201 1.11z"/><path fill="#292F33" d="M15.511 18.712C14.558 17.265 12.827 17 11.722 17H9.387v.002V17H7.053c-1.104 0-2.835.265-3.788 1.712L5.388 20s-.131 1.332.682 2.988c-.713 1.04-.535 2.02-.535 2.02s1.277 1.248 3.297 2.376c.153.086 1.427.024 1.555-.096 1.706-1.6 3-2 3-2s-.488-1.153-1.05-2.181c.812-1.656 1.05-3.107 1.05-3.107l2.124-1.288z"/><path fill="#FFDC5D" d="M12.386 17.935c0-.588-.445-.935-1-.935v-3H7.388v3c-.555 0-1 .347-1 .935 0 .323 0 3.063 2.997 3.064h.004c2.997-.001 2.997-2.74 2.997-3.064z"/><path fill="#F9CA55" d="M11.388 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M16.388 9.001C16.388 5.687 13.701 3 10.387 3c-1.263 0-2.434.393-3.401 1.061C6.789 4.031 6.592 4 6.388 4c-2.209 0-4 1.791-4 4v6h14V9.001z"/><path fill="#FFDC5D" d="M14.388 6h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V6z"/><path fill="#FFAC33" d="M14.449 5h-10l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M11.388 15h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="6.888" cy="11.5" r=".5"/><circle fill="#662113" cx="11.888" cy="11.5" r=".5"/><path fill="#C1694F" d="M8.388 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M4.075 1.125C6.7.906 7.825 4 7.075 5.375c-1.968 0-3.937-1.813-3-4.25zm9.988.063c-2.625-.219-3.75 2.875-3 4.25 1.969 0 3.937-1.813 3-4.25z"/><path fill="#292F33" d="M6.7 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.811-.375-2.186-.937-4.061-.062-.094-.063-.441-1.098-.407-1.125zm7.657 29.788c-.386.475.511 1.883 1.188 2.168.564.238 1.545.149 1.842-.446.186-.373-1.04-1.842-1.426-1.931-.386-.089.594.475-.356.564-.684.065-1.248-.355-1.248-.355zm-5.793.397c.505.435.654 1.474-1.069 1.801-1.268.241-2.228.086-2.347-.386-.148-.594 1.486-1.277 1.902-1.367.416-.089-.475.564.238.535.712-.03 1.276-.583 1.276-.583z"/><path fill="#FFDC5D" d="M25.647 34.435c.131.787-2.091 1.454-2.376 1.326-.305-.137.988-.808.967-1.226-.106-2.12-.904-1.961-.818-4.18-.802-2.376-.735-4.653-.772-5.287-.087-1.472 3.528.615 3.509 1.518-.038 1.776-.663 2.321-.687 3.502.419 1.882-.132 2.499.177 4.347zm7.188-.872c.353.715.726 1.971.416 1.931-.331-.043-1.396-.505-1.736-1.427-.734-1.991-1.804-1.447-2.364-3.596-1.047-1.579-2.186-3.886-2.406-4.482-.509-1.384 3.441-1.701 3.683-.832.477 1.711.287 3.328.607 4.465.948 1.68.97 2.262 1.8 3.941z"/><path fill="#FFDC5D" d="M22.703 26.494c-.164.146-.57.212-.669.182-.232-.07-.745-.46-1.026-.831-.513-.675-2.601-1.446-3.103-2.856-.085-.238-.067-.524.118-.86.113-.205 1.505-2.37 2.77-3.655.336-.342 1.248-.428 1.676-.104.427.323.483.579.233 1.04-.811 1.497-2.441 2.342-3.119 3.194.974.847.851 1.353 2.193 2.22.156-.088.457-.158.538-.136.08.022.264.154.224.397.024.02.226.196.271.286.126.245.107.934-.106 1.123zm8.023.065c.176.132.586.163.682.125.225-.089.703-.521.953-.914.454-.715 2.471-1.659 2.853-3.106.065-.244.023-.528-.19-.847-.13-.195-1.698-2.235-3.066-3.41-.364-.312-1.279-.322-1.679.037-.399.358-.433.617-.146 1.056.934 1.424 2.628 2.129 3.375 2.922-.9.925-.735 1.419-2 2.396-.163-.075-.469-.119-.547-.09s-.25.176-.19.414c-.022.021-.209.214-.246.307-.103.255-.027.94.201 1.11z"/><path fill="#292F33" d="M32.593 18.712C31.64 17.265 29.909 17 28.805 17H26.47v.002V17h-2.335c-1.104 0-2.835.265-3.788 1.712L22.47 20s-.131 1.332.682 2.988c-.713 1.04-.535 2.02-.535 2.02s1.277 1.248 3.297 2.376c.153.086 1.427.024 1.555-.096 1.706-1.6 3-2 3-2s-.488-1.153-1.05-2.181c.812-1.656 1.05-3.107 1.05-3.107l2.124-1.288z"/><path fill="#FFDC5D" d="M29.468 17.935c0-.588-.445-.935-1-.935v-3H24.47v3c-.555 0-1 .347-1 .935 0 .323 0 3.063 2.997 3.064h.004c2.997-.001 2.997-2.74 2.997-3.064z"/><path fill="#F9CA55" d="M28.47 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M33.47 9.001C33.47 5.687 30.784 3 27.469 3c-1.264 0-2.435.393-3.402 1.061-.196-.03-.392-.061-.597-.061-2.209 0-4 1.791-4 4v6h14V9.001z"/><path fill="#FFDC5D" d="M31.47 6h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V6z"/><path fill="#FFAC33" d="M31.531 5h-10l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28.47 15h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.97" cy="11.5" r=".5"/><circle fill="#662113" cx="28.97" cy="11.5" r=".5"/><path fill="#C1694F" d="M25.47 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M21.158 1.125c2.625-.219 3.75 2.875 3 4.25-1.969 0-3.938-1.813-3-4.25zm9.987.063c-2.625-.219-3.75 2.875-3 4.25 1.969 0 3.937-1.813 3-4.25z"/><path fill="#292F33" d="M23.783 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.812-.375-2.188-.938-4.063-.062-.093-.063-.44-1.098-.405-1.125zm7.656 29.788c-.386.475.511 1.883 1.188 2.168.564.238 1.545.149 1.842-.446.186-.373-1.04-1.842-1.426-1.931-.386-.089.594.475-.356.564-.684.065-1.248-.355-1.248-.355zm-5.792.397c.505.435.654 1.474-1.069 1.801-1.268.241-2.228.086-2.347-.386-.149-.594 1.485-1.277 1.901-1.366.416-.089-.475.564.238.535.712-.031 1.277-.584 1.277-.584z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46f-200d-2642-fe0f.svg b/public/emoji/1f46f-200d-2642-fe0f.svg index db3d12a26..04254cd99 100644 --- a/public/emoji/1f46f-200d-2642-fe0f.svg +++ b/public/emoji/1f46f-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M8 35H5l1-9.712h3zm5.875-1.208l-1.834-1.333s3.167-3.012 2.531-3.994c-.636-.981-3.782-1.688-3.782-1.688l1.918-2.307s3.958 1.904 4.77 3.333c.827 1.452-3.603 5.989-3.603 5.989z"/><path fill="#292F33" d="M4 36v-1s0-1 2-1 2 1 2 1v1H4zm10.553-.517l.421-.908s.419-.907-1.396-1.747c-1.813-.841-2.233.066-2.233.066l-.42.907 3.628 1.682z"/><path fill="#FFDC5D" d="M5 26.288c-.256 0-.512-.098-.707-.293l-3-3c-.36-.36-.392-.934-.074-1.332l4-3.288c.345-.432.975-.501 1.405-.156.432.345.501.974.156 1.406l-3.44 2.589 2.367 2.367c.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293zm10 0c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l2.367-2.367-3.441-2.589c-.345-.432-.275-1.06.156-1.406.43-.345 1.06-.276 1.405.156l4.001 3.288c.318.398.286.972-.074 1.332l-3 3c-.195.195-.451.293-.707.293z"/><path fill="#292F33" d="M16 19c0-1.104-.896-2-2-2H6c-1.104 0-2 .896-2 2v1h2v5.288l3 2h2l3-2V20h2v-1z"/><path fill="#FFAC33" d="M10.5 3c-1.187 0-2.282.379-3.181 1.018C5.473 4.114 4 5.629 4 7.5c0 1.542.007 3.484 2.038 4.207C7.036 13.094 8.66 14 10.5 14c3.037 0 5.5-2.462 5.5-5.499C16 5.463 13.537 3 10.5 3z"/><path fill="#FFDC5D" d="M8 15v3c0 1.104.896 2 2 2s2-.896 2-2v-3H8z"/><path fill="#292F33" d="M9 27l-.344 3.219-3.312-.344L6 25.288zm4.134-2.381l2.631 1.325-1.356 2.711L11 27.288z"/><path fill="#F9CA55" d="M12 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M15 6H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V6z"/><path fill="#292F33" d="M14.875 1.188c-1.763-.147-2.846 1.201-3.142 2.519-.982-.51-2.456-.545-3.736.163-.216-1.384-1.32-2.9-3.185-2.745-.938 2.438 1.031 4.25 3 4.25 1.875-.875 3.25-.312 4.062.062 1.97.001 3.938-1.812 3.001-4.249z"/><path fill="#FFAC33" d="M8 6H5v4c2.333 0 2.85-2.412 2.965-3.488C8.004 7.588 8.779 10 15 10V6H8z"/><circle fill="#662113" cx="7.5" cy="11.5" r=".5"/><circle fill="#662113" cx="12.5" cy="11.5" r=".5"/><path fill="#C1694F" d="M9 13h2s0 1-1 1-1-1-1-1zm3 2H8s0 1 2 1 2-1 2-1z"/><path fill="#FFDC5D" d="M24 35h-3l1-9.712h3zm5.875-1.208l-1.833-1.333s3.167-3.012 2.531-3.994c-.636-.981-3.782-1.688-3.782-1.688l1.918-2.307s3.958 1.904 4.77 3.333c.826 1.452-3.604 5.989-3.604 5.989z"/><path fill="#292F33" d="M30.553 35.483l.422-.908s.418-.907-1.396-1.747c-1.812-.841-2.232.066-2.232.066l-.42.907 3.626 1.682zM20 36v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#FFDC5D" d="M21 26.288c-.256 0-.512-.098-.707-.293l-3-3c-.36-.36-.392-.934-.074-1.332l4-3.288c.346-.432.976-.501 1.406-.156.432.345.501.974.156 1.406l-3.441 2.589 2.367 2.367c.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293zm10 0c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l2.367-2.367-3.441-2.589c-.345-.432-.275-1.06.156-1.406.431-.345 1.06-.276 1.406.156l4 3.288c.318.398.286.972-.074 1.332l-3 3c-.195.195-.451.293-.707.293z"/><path fill="#FFDC5D" d="M28 17v-3h-4v3h-1v1s0 3 3 3 3-3 3-3v-1h-1z"/><path fill="#292F33" d="M30 17h-8c-1.104 0-2 .896-2 2v1h2v5.288l3 2h2l3-2V20h2v-1c0-1.104-.896-2-2-2z"/><path fill="#292F33" d="M25 27l-.344 3.219-3.312-.344.656-4.587zm4.134-2.381l2.631 1.325-1.356 2.711L27 27.288z"/><path fill="#FFDC5D" d="M24 15v3c0 1.104.896 2 2 2s2-.896 2-2v-3h-4z"/><path fill="#F9CA55" d="M28 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M26.5 3c-1.187 0-2.282.379-3.181 1.018C21.473 4.114 20 5.629 20 7.5c0 1.542.007 3.484 2.038 4.207C23.036 13.094 24.66 14 26.5 14c3.037 0 5.5-2.462 5.5-5.499C32 5.463 29.537 3 26.5 3z"/><path fill="#FFDC5D" d="M31 6H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V6z"/><path fill="#292F33" d="M30.875 1.188c-1.763-.147-2.846 1.201-3.142 2.519-.982-.509-2.456-.544-3.736.164-.216-1.384-1.319-2.901-3.184-2.745-.938 2.438 1.031 4.25 3 4.25 1.875-.875 3.25-.312 4.062.062 1.969 0 3.937-1.813 3-4.25z"/><path fill="#FFAC33" d="M24 6h-3v4c2.333 0 2.85-2.412 2.965-3.488C24.004 7.588 24.779 10 31 10V6h-7z"/><circle fill="#662113" cx="23.5" cy="11.5" r=".5"/><circle fill="#662113" cx="28.5" cy="11.5" r=".5"/><path fill="#C1694F" d="M25 13h2s0 1-1 1-1-1-1-1zm3 2h-4s0 1 2 1 2-1 2-1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M8.564 34.435c.131.787-2.091 1.454-2.376 1.326-.305-.137.988-.808.967-1.226-.106-2.12-.904-1.961-.818-4.18-.802-2.376-.735-4.653-.772-5.287-.087-1.472 3.804.623 3.682 1.518-.204 1.488-.663 2.321-.687 3.502.42 1.882-.304 2.499.004 4.347zm7.189-.872c.353.715.726 1.971.416 1.931-.331-.043-1.396-.505-1.736-1.427-.734-1.991-1.962-1.447-2.522-3.596-1.047-1.579-2.186-3.886-2.406-4.482-.509-1.384 3.391-1.737 3.619-.863.5 1.914.509 3.359.829 4.496.948 1.68.97 2.262 1.8 3.941z"/><path fill="#FFDC5D" d="M5.621 26.494c-.164.146-.57.212-.669.182-.232-.07-.745-.46-1.026-.831-.513-.675-2.601-1.446-3.103-2.856-.085-.238-.067-.524.118-.86.113-.205 1.505-2.37 2.77-3.655.336-.342 1.248-.428 1.676-.104.427.323 1.483.579 1.233 1.04-.811 1.497-3.441 2.342-4.119 3.194.974.847.851 1.353 2.193 2.22.156-.088.457-.158.538-.136.08.022.264.154.224.397.024.02.226.196.271.286.126.245.107.934-.106 1.123zm8.023.065c.176.132.586.163.682.125.225-.089.703-.521.953-.914.454-.715 2.471-1.659 2.853-3.106.065-.244.023-.528-.19-.847-.13-.195-1.698-2.235-3.066-3.41-.364-.312-1.279-.322-1.679.037-.399.358-1.433.617-1.146 1.056.934 1.424 3.628 2.129 4.375 2.922-.9.925-.735 1.419-2 2.396-.163-.075-.469-.119-.547-.09-.078.029-.25.176-.19.414-.022.021-.209.214-.246.307-.103.255-.027.94.201 1.11z"/><path fill="#292F33" d="M15.511 18.712C14.558 17.265 12.827 17 11.722 17H9.387v.002V17H7.053c-1.104 0-2.835.265-3.788 1.712L5.388 21l.147 4.008s.028 3.179.402 4.206c.564.04 1.958.198 2.797.315.043.006.203-1.076.509-2.106.238.009.587-.017.803-.065.407.69 1.073 2.028 1.101 2.002.812-.255 2.042-.664 2.621-.928-.084-1.174-.381-3.143-.381-3.143V21l2.124-2.288z"/><path fill="#FFDC5D" d="M12.059 17.692c0-.435-.117-.692-.672-.692v-3H7.388v3c-.555 0-.672.257-.672.692 0 .239 0 2.264 2.67 2.265h.003c2.669-.001 2.67-2.026 2.67-2.265z"/><path fill="#F9CA55" d="M11.388 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M9.888 3c-1.187 0-2.282.379-3.181 1.018-1.846.096-3.319 1.611-3.319 3.482 0 1.542.007 3.484 2.038 4.208C6.424 13.094 8.048 14 9.888 14c3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.463-5.501-5.5-5.501z"/><path fill="#FFDC5D" d="M14.388 6h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V6z"/><path fill="#FFAC33" d="M4.417 5.5l-.5 2 .471 2.5c2.333 0 2.85-2.412 2.965-3.488C7.392 7.588 8.167 10 14.388 10l.529-2.5-.5-2h-10z"/><path fill="#C1694F" d="M11.388 15h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="6.888" cy="11.5" r=".5"/><circle fill="#662113" cx="11.888" cy="11.5" r=".5"/><path fill="#C1694F" d="M8.388 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M4.075 1.125C6.7.906 7.825 4 7.075 5.375c-1.968 0-3.937-1.813-3-4.25zm9.988.063c-2.625-.219-3.75 2.875-3 4.25 1.969 0 3.937-1.813 3-4.25z"/><path fill="#292F33" d="M6.7 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.811-.375-2.186-.937-4.061-.062-.094-.063-.441-1.098-.407-1.125zm7.657 29.788c-.386.475.511 1.883 1.188 2.168.564.238 1.545.149 1.842-.446.186-.373-1.04-1.842-1.426-1.931-.386-.089.594.475-.356.564-.684.065-1.248-.355-1.248-.355zm-5.793.397c.505.435.654 1.474-1.069 1.801-1.268.241-2.228.086-2.347-.386-.148-.594 1.486-1.277 1.902-1.367.416-.089-.475.564.238.535.712-.03 1.276-.583 1.276-.583z"/><path fill="#FFDC5D" d="M25.647 34.435c.131.787-2.091 1.454-2.376 1.326-.305-.137.988-.808.967-1.226-.106-2.12-.904-1.961-.818-4.18-.802-2.376-.735-4.653-.772-5.287-.087-1.472 3.804.623 3.682 1.518-.204 1.488-.663 2.321-.687 3.502.42 1.882-.304 2.499.004 4.347zm7.188-.872c.353.715.726 1.971.416 1.931-.331-.043-1.396-.505-1.736-1.427-.734-1.991-1.962-1.447-2.522-3.596-1.047-1.579-2.186-3.886-2.406-4.482-.509-1.384 3.391-1.737 3.619-.863.5 1.914.509 3.359.829 4.496.949 1.68.971 2.262 1.8 3.941z"/><path fill="#FFDC5D" d="M22.704 26.494c-.164.146-.57.212-.669.182-.232-.07-.745-.46-1.026-.831-.513-.675-2.601-1.446-3.103-2.856-.085-.238-.067-.524.118-.86.113-.205 1.505-2.37 2.77-3.655.336-.342 1.248-.428 1.676-.104.427.323 1.483.579 1.233 1.04-.811 1.497-3.441 2.342-4.119 3.194.974.847.851 1.353 2.193 2.22.156-.088.457-.158.538-.136.08.022.264.154.224.397.024.02.226.196.271.286.125.245.106.934-.106 1.123zm8.022.065c.176.132.586.163.682.125.225-.089.703-.521.953-.914.454-.715 2.471-1.659 2.853-3.106.065-.244.023-.528-.19-.847-.13-.195-1.698-2.235-3.066-3.41-.364-.312-1.279-.322-1.679.037-.399.358-1.433.617-1.146 1.056.934 1.424 3.628 2.129 4.375 2.922-.9.925-.735 1.419-2 2.396-.163-.075-.469-.119-.547-.09s-.25.176-.19.414c-.022.021-.209.214-.246.307-.103.255-.026.94.201 1.11z"/><path fill="#292F33" d="M32.593 18.712C31.64 17.265 29.91 17 28.805 17H26.47v.002V17h-2.335c-1.104 0-2.835.265-3.788 1.712L22.471 21l.147 4.008s.028 3.179.402 4.206c.564.04 1.958.198 2.797.315.043.006.203-1.076.509-2.106.238.009.587-.017.803-.065.407.69 1.073 2.028 1.101 2.002.812-.255 2.042-.664 2.621-.928-.084-1.174-.381-3.143-.381-3.143V21l2.123-2.288z"/><path fill="#FFDC5D" d="M29.141 17.692c0-.435-.117-.692-.672-.692v-3h-3.998v3c-.555 0-.672.257-.672.692 0 .239 0 2.264 2.67 2.265h.003c2.669-.001 2.669-2.026 2.669-2.265z"/><path fill="#F9CA55" d="M28.471 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M26.971 3c-1.186 0-2.282.379-3.181 1.018-1.847.096-3.319 1.611-3.319 3.482 0 1.542.007 3.484 2.038 4.208.998 1.386 2.622 2.292 4.462 2.292 3.037 0 5.5-2.462 5.5-5.499 0-3.038-2.463-5.501-5.5-5.501z"/><path fill="#FFDC5D" d="M31.471 6h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V6z"/><path fill="#FFAC33" d="M21.5 5.5l-.5 2 .471 2.5c2.333 0 2.85-2.412 2.965-3.488.038 1.076.814 3.488 7.035 3.488L32 7.5l-.5-2h-10z"/><path fill="#C1694F" d="M28.471 15h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.971" cy="11.5" r=".5"/><circle fill="#662113" cx="28.971" cy="11.5" r=".5"/><path fill="#C1694F" d="M25.471 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M21.158 1.125c2.625-.219 3.75 2.875 3 4.25-1.969 0-3.937-1.813-3-4.25zm9.987.063c-2.625-.219-3.75 2.875-3 4.25 1.969 0 3.938-1.813 3-4.25z"/><path fill="#292F33" d="M23.783 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.812-.375-2.188-.938-4.063-.062-.092-.063-.44-1.098-.405-1.125zm7.656 29.788c-.386.475.511 1.883 1.188 2.168.564.238 1.545.149 1.842-.446.186-.373-1.04-1.842-1.426-1.931-.386-.089.594.475-.356.564-.683.065-1.248-.355-1.248-.355zm-5.792.397c.505.435.654 1.474-1.069 1.801-1.268.241-2.228.086-2.347-.386-.149-.594 1.485-1.277 1.901-1.366.416-.089-.475.564.238.535.713-.031 1.277-.584 1.277-.584z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f46f.svg b/public/emoji/1f46f.svg index 4d00a954a..6559253b8 100644 --- a/public/emoji/1f46f.svg +++ b/public/emoji/1f46f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M8 35H5l1-9.712h3zm5.875-1.208l-1.834-1.333s3.167-3.012 2.531-3.994c-.636-.981-3.782-1.688-3.782-1.688l1.918-2.307s3.958 1.904 4.77 3.333c.827 1.452-3.603 5.989-3.603 5.989z"/><path fill="#292F33" d="M4 36v-1s0-1 2-1 2 1 2 1v1H4zm10.553-.517l.421-.908s.419-.907-1.396-1.747c-1.813-.841-2.233.066-2.233.066l-.42.907 3.628 1.682z"/><path fill="#FFDC5D" d="M5 26.288c-.256 0-.512-.098-.707-.293l-3-3c-.36-.36-.392-.934-.074-1.332l4-3.288c.345-.432.975-.501 1.405-.156.432.345.501.974.156 1.406l-3.44 2.589 2.367 2.367c.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293zm10 0c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l2.367-2.367-3.441-2.589c-.345-.432-.275-1.06.156-1.406.43-.345 1.06-.276 1.405.156l4.001 3.288c.318.398.286.972-.074 1.332l-3 3c-.195.195-.451.293-.707.293z"/><path fill="#292F33" d="M16 19c0-1.104-.896-2-2-2H6c-1.104 0-2 .896-2 2v1h2v5.288l3 2h2l3-2V20h2v-1z"/><path fill="#FFDC5D" d="M12 17v-3H8v3H7v1s0 3 3 3 3-3 3-3v-1h-1z"/><path fill="#F9CA55" d="M12 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M17 9.001C17 5.687 14.313 3 10.999 3c-1.263 0-2.434.393-3.401 1.06C7.401 4.031 7.204 4 7 4 4.791 4 3 5.791 3 8v6h2.422C5.153 13.387 5 12.713 5 12V9.894C7.989 9.285 8 6 8 6s.019 3.644 7 3.968V12c0 .712-.154 1.387-.422 2H17V9.001z"/><path fill="#FFDC5D" d="M15 12V9.968C8.018 9.644 8 6 8 6s-.011 3.285-3 3.894V12c0 .712.154 1.387.422 2 .772 1.765 2.528 3 4.578 3 2.05 0 3.807-1.235 4.579-3 .267-.613.421-1.287.421-2z"/><path fill="#DF1F32" d="M12 15H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="11.5" r=".5"/><circle fill="#662113" cx="12.5" cy="11.5" r=".5"/><path fill="#C1694F" d="M9 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M4.687 1.125c2.625-.219 3.75 2.875 3 4.25-1.968 0-3.937-1.813-3-4.25zm9.988.063c-2.625-.219-3.75 2.875-3 4.25 1.968 0 3.937-1.813 3-4.25z"/><path fill="#292F33" d="M7.312 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.811-.375-2.186-.937-4.061-.062-.094-.063-.441-1.098-.407-1.125z"/><path fill="#FFDC5D" d="M24 35h-3l1-9.712h3zm5.875-1.208l-1.833-1.333s3.167-3.012 2.531-3.994c-.636-.981-3.782-1.688-3.782-1.688l1.918-2.307s3.958 1.904 4.77 3.333c.826 1.452-3.604 5.989-3.604 5.989z"/><path fill="#292F33" d="M30.553 35.483l.422-.908s.418-.907-1.396-1.747c-1.812-.841-2.232.066-2.232.066l-.42.907 3.626 1.682zM20 36v-1s0-1 2-1 2 1 2 1v1h-4z"/><path fill="#FFDC5D" d="M21 26.288c-.256 0-.512-.098-.707-.293l-3-3c-.36-.36-.392-.934-.074-1.332l4-3.288c.346-.432.976-.501 1.406-.156.432.345.501.974.156 1.406l-3.441 2.589 2.367 2.367c.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293zm10 0c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l2.367-2.367-3.441-2.589c-.345-.432-.275-1.06.156-1.406.431-.345 1.06-.276 1.406.156l4 3.288c.318.398.286.972-.074 1.332l-3 3c-.195.195-.451.293-.707.293z"/><path fill="#292F33" d="M32 19c0-1.104-.896-2-2-2h-8c-1.104 0-2 .896-2 2v1h2v5.288l3 2h2l3-2V20h2v-1z"/><path fill="#FFDC5D" d="M28 17v-3h-4v3h-1v1s0 3 3 3 3-3 3-3v-1h-1z"/><path fill="#F9CA55" d="M28 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M33 9.001C33 5.687 30.313 3 27 3c-1.264 0-2.435.393-3.402 1.06C23.401 4.031 23.205 4 23 4c-2.209 0-4 1.791-4 4v6h2.422c-.269-.613-.422-1.287-.422-2V9.894C23.989 9.285 24 6 24 6s.019 3.644 7 3.968V12c0 .712-.154 1.387-.422 2H33V9.001z"/><path fill="#FFDC5D" d="M31 12V9.968C24.018 9.644 24 6 24 6s-.011 3.285-3 3.894V12c0 .712.154 1.387.422 2 .772 1.765 2.529 3 4.578 3s3.806-1.235 4.578-3c.268-.613.422-1.287.422-2z"/><path fill="#DF1F32" d="M28 15h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="11.5" r=".5"/><circle fill="#662113" cx="28.5" cy="11.5" r=".5"/><path fill="#C1694F" d="M25 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M20.781 1.125c2.625-.219 3.75 2.875 3 4.25-1.969 0-3.937-1.813-3-4.25zm9.987.063c-2.625-.219-3.75 2.875-3 4.25 1.969 0 3.938-1.813 3-4.25z"/><path fill="#292F33" d="M23.406 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.812-.375-2.188-.938-4.062-.062-.093-.063-.441-1.098-.406-1.125z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M8.564 34.435c.131.787-2.091 1.454-2.376 1.326-.305-.137.988-.808.967-1.226-.106-2.12-.904-1.961-.818-4.18-.802-2.376-.735-4.653-.772-5.287-.087-1.472 3.528.615 3.509 1.518-.038 1.776-.663 2.321-.687 3.502.42 1.882-.131 2.499.177 4.347zm7.189-.872c.353.715.726 1.971.416 1.931-.331-.043-1.396-.505-1.736-1.427-.734-1.991-1.804-1.447-2.364-3.596-1.047-1.579-2.186-3.886-2.406-4.482-.509-1.384 3.441-1.701 3.683-.832.477 1.711.287 3.328.607 4.465.948 1.68.97 2.262 1.8 3.941z"/><path fill="#FFDC5D" d="M5.621 26.494c-.164.146-.57.212-.669.182-.232-.07-.745-.46-1.026-.831-.513-.675-2.601-1.446-3.103-2.856-.085-.238-.067-.524.118-.86.113-.205 1.505-2.37 2.77-3.655.336-.342 1.248-.428 1.676-.104.427.323.483.579.233 1.04-.811 1.497-2.441 2.342-3.119 3.194.974.847.851 1.353 2.193 2.22.156-.088.457-.158.538-.136.08.022.264.154.224.397.024.02.226.196.271.286.126.245.107.934-.106 1.123zm8.023.065c.176.132.586.163.682.125.225-.089.703-.521.953-.914.454-.715 2.471-1.659 2.853-3.106.065-.244.023-.528-.19-.847-.13-.195-1.698-2.235-3.066-3.41-.364-.312-1.279-.322-1.679.037-.399.358-.433.617-.146 1.056.934 1.424 2.628 2.129 3.375 2.922-.9.925-.735 1.419-2 2.396-.163-.075-.469-.119-.547-.09-.078.029-.25.176-.19.414-.022.021-.209.214-.246.307-.103.255-.027.94.201 1.11z"/><path fill="#292F33" d="M15.511 18.712C14.558 17.265 12.827 17 11.722 17H9.387v.002V17H7.053c-1.104 0-2.835.265-3.788 1.712L5.388 20s-.131 1.332.682 2.988c-.713 1.04-.535 2.02-.535 2.02s1.277 1.248 3.297 2.376c.153.086 1.427.024 1.555-.096 1.706-1.6 3-2 3-2s-.488-1.153-1.05-2.181c.812-1.656 1.05-3.107 1.05-3.107l2.124-1.288z"/><path fill="#FFDC5D" d="M12.386 17.935c0-.588-.445-.935-1-.935v-3H7.388v3c-.555 0-1 .347-1 .935 0 .323 0 3.063 2.997 3.064h.004c2.997-.001 2.997-2.74 2.997-3.064z"/><path fill="#F9CA55" d="M11.388 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M16.388 9.001C16.388 5.687 13.701 3 10.387 3c-1.263 0-2.434.393-3.401 1.061C6.789 4.031 6.592 4 6.388 4c-2.209 0-4 1.791-4 4v6h14V9.001z"/><path fill="#FFDC5D" d="M14.388 6h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V6z"/><path fill="#FFAC33" d="M14.449 5h-10l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M11.388 15h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="6.888" cy="11.5" r=".5"/><circle fill="#662113" cx="11.888" cy="11.5" r=".5"/><path fill="#C1694F" d="M8.388 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M4.075 1.125C6.7.906 7.825 4 7.075 5.375c-1.968 0-3.937-1.813-3-4.25zm9.988.063c-2.625-.219-3.75 2.875-3 4.25 1.969 0 3.937-1.813 3-4.25z"/><path fill="#292F33" d="M6.7 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.811-.375-2.186-.937-4.061-.062-.094-.063-.441-1.098-.407-1.125zm7.657 29.788c-.386.475.511 1.883 1.188 2.168.564.238 1.545.149 1.842-.446.186-.373-1.04-1.842-1.426-1.931-.386-.089.594.475-.356.564-.684.065-1.248-.355-1.248-.355zm-5.793.397c.505.435.654 1.474-1.069 1.801-1.268.241-2.228.086-2.347-.386-.148-.594 1.486-1.277 1.902-1.367.416-.089-.475.564.238.535.712-.03 1.276-.583 1.276-.583z"/><path fill="#FFDC5D" d="M25.647 34.435c.131.787-2.091 1.454-2.376 1.326-.305-.137.988-.808.967-1.226-.106-2.12-.904-1.961-.818-4.18-.802-2.376-.735-4.653-.772-5.287-.087-1.472 3.528.615 3.509 1.518-.038 1.776-.663 2.321-.687 3.502.419 1.882-.132 2.499.177 4.347zm7.188-.872c.353.715.726 1.971.416 1.931-.331-.043-1.396-.505-1.736-1.427-.734-1.991-1.804-1.447-2.364-3.596-1.047-1.579-2.186-3.886-2.406-4.482-.509-1.384 3.441-1.701 3.683-.832.477 1.711.287 3.328.607 4.465.948 1.68.97 2.262 1.8 3.941z"/><path fill="#FFDC5D" d="M22.703 26.494c-.164.146-.57.212-.669.182-.232-.07-.745-.46-1.026-.831-.513-.675-2.601-1.446-3.103-2.856-.085-.238-.067-.524.118-.86.113-.205 1.505-2.37 2.77-3.655.336-.342 1.248-.428 1.676-.104.427.323.483.579.233 1.04-.811 1.497-2.441 2.342-3.119 3.194.974.847.851 1.353 2.193 2.22.156-.088.457-.158.538-.136.08.022.264.154.224.397.024.02.226.196.271.286.126.245.107.934-.106 1.123zm8.023.065c.176.132.586.163.682.125.225-.089.703-.521.953-.914.454-.715 2.471-1.659 2.853-3.106.065-.244.023-.528-.19-.847-.13-.195-1.698-2.235-3.066-3.41-.364-.312-1.279-.322-1.679.037-.399.358-.433.617-.146 1.056.934 1.424 2.628 2.129 3.375 2.922-.9.925-.735 1.419-2 2.396-.163-.075-.469-.119-.547-.09s-.25.176-.19.414c-.022.021-.209.214-.246.307-.103.255-.027.94.201 1.11z"/><path fill="#292F33" d="M32.593 18.712C31.64 17.265 29.909 17 28.805 17H26.47v.002V17h-2.335c-1.104 0-2.835.265-3.788 1.712L22.47 20s-.131 1.332.682 2.988c-.713 1.04-.535 2.02-.535 2.02s1.277 1.248 3.297 2.376c.153.086 1.427.024 1.555-.096 1.706-1.6 3-2 3-2s-.488-1.153-1.05-2.181c.812-1.656 1.05-3.107 1.05-3.107l2.124-1.288z"/><path fill="#FFDC5D" d="M29.468 17.935c0-.588-.445-.935-1-.935v-3H24.47v3c-.555 0-1 .347-1 .935 0 .323 0 3.063 2.997 3.064h.004c2.997-.001 2.997-2.74 2.997-3.064z"/><path fill="#F9CA55" d="M28.47 14l-4 .019V18s2 1 4 0v-4z"/><path fill="#FFAC33" d="M33.47 9.001C33.47 5.687 30.784 3 27.469 3c-1.264 0-2.435.393-3.402 1.061-.196-.03-.392-.061-.597-.061-2.209 0-4 1.791-4 4v6h14V9.001z"/><path fill="#FFDC5D" d="M31.47 6h-10v6c0 2.762 2.238 5 5 5s5-2.237 5-5V6z"/><path fill="#FFAC33" d="M31.531 5h-10l-1 5c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M28.47 15h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.97" cy="11.5" r=".5"/><circle fill="#662113" cx="28.97" cy="11.5" r=".5"/><path fill="#C1694F" d="M25.47 13h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M21.158 1.125c2.625-.219 3.75 2.875 3 4.25-1.969 0-3.938-1.813-3-4.25zm9.987.063c-2.625-.219-3.75 2.875-3 4.25 1.969 0 3.937-1.813 3-4.25z"/><path fill="#292F33" d="M23.783 4.25c1.812-1.438 4.344-1.062 5.156.156.031.312-.37 1.178-.688 1.031-.812-.375-2.188-.938-4.063-.062-.093-.063-.44-1.098-.405-1.125zm7.656 29.788c-.386.475.511 1.883 1.188 2.168.564.238 1.545.149 1.842-.446.186-.373-1.04-1.842-1.426-1.931-.386-.089.594.475-.356.564-.684.065-1.248-.355-1.248-.355zm-5.792.397c.505.435.654 1.474-1.069 1.801-1.268.241-2.228.086-2.347-.386-.149-.594 1.485-1.277 1.901-1.366.416-.089-.475.564.238.535.712-.031 1.277-.584 1.277-.584z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f483-1f3fb.svg b/public/emoji/1f483-1f3fb.svg index f0fcf19fb..72c8f2cef 100644 --- a/public/emoji/1f483-1f3fb.svg +++ b/public/emoji/1f483-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M16 1c.203-.378.538-.985 1.806-.602C19.722.978 18 2 18 2s2 1 2 4-1 1.838-1 5c0 2-2 0-2 0l-3 3c-4 4-6-1-5-3s0-2 0-4 2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#F7DECE" cx="14.625" cy="5" rx="2.625" ry="3"/><path fill="#292F33" d="M14.5 1c-.927 0-1.727.306-2.158.755C11.239 1.548 11.864 3.272 11 5c-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5S15.881 1 14.5 1z"/><path fill="#F7DECE" d="M22.707 10.293c-.373-.373-1.806-1.217-7.027-1.286l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104L13.667 9H9.083l-5.918-.986c-.55-.091-1.06.278-1.151.822-.091.544.277 1.06.821 1.15l6 1c.055.01.11.014.165.014h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 3-5.015 3-7.5 0-.604-.048-1.06-.15-1.407 1.206.087 2.027.223 2.567.351L18.2 14.4c-.331.442-.242 1.069.2 1.4.18.135.391.2.599.2.305 0 .604-.138.801-.4l3-4c.299-.398.259-.955-.093-1.307zM15.998 33c-.489 0-.917-.359-.988-.858l-1-7c-.078-.547.302-1.054.848-1.132.548-.073 1.054.302 1.131.849l1 7c.078.547-.302 1.054-.848 1.132-.048.006-.095.009-.143.009z"/><path fill="#F7DECE" d="M15.999 21c-.472 0-.892-.335-.982-.815-.102-.543.256-1.066.799-1.167l15.999-3c.552-.102 1.066.256 1.167.799.103.542-.255 1.065-.798 1.167l-16.001 3c-.061.01-.123.016-.184.016z"/><path fill="#DD2E44" d="M12 13s1 1 1 3 0 3-2 6-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-2 0-2-3c0 0-1.25 4-3.25 0 0 0 1.25 3-.75 4z"/><path fill="#DD2E44" d="M16 36c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm16.429-17.37c-.22 0-.441-.072-.626-.221-.431-.347-.498-.976-.151-1.406l1.781-2.211c.346-.428.975-.498 1.405-.151.431.347.498.976.151 1.406l-1.781 2.211c-.197.245-.486.372-.779.372z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M16.908 32.178c.05-.603-.299-1.018-.755-1.024h-.188c-.456.006-.805.421-.755 1.024.075.905-.017 1.4-.052 2.318-.025.674.296 1.498.901 1.491.605.007.926-.817.901-1.491-.035-.918-.127-1.413-.052-2.318z"/><path fill="#F7DECE" d="M17.021 27.471c.001-.268-.486-.398-.962-.394-.476-.004-.963.126-.962.394 0 0 .409 3.448.331 6.691-.007.286.313.44.631.443.318-.003.638-.156.631-.443-.078-3.243.331-6.691.331-6.691z"/><path fill="#DD2E44" d="M15.385 32.081h1.365v.65h-1.365z"/><path fill="#F7DECE" d="M24.23 20.819s3.162-2.282 3.598-2.309c.247-.016 1.883-.13 2.23-.163 1.259-.125 3.854-.67 4.081-.719.228-.05.322.031.839-.806.517-.838-.044-.64-.044-.64s-.354.293-.547.379-.562.173-.909.166c-1.085-.023-7.175-.281-7.175-.281-.848.049-1.288.04-1.615.673-.574 1.104-.493 3.138-.458 3.7z"/><path fill="#292F33" d="M16.043 1.013c.203-.378.538-.985 1.806-.602 1.915.579.194 1.602.194 1.602s2 1 2 4-2.344 2.369-2.344 5.531l-.359.534s.644-.438-1.356 1.562c-4 4-6.782-1.274-6.412-2.754.542-2.169-.529-1.873-.529-3.873s2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#F7DECE" cx="14.668" cy="5.013" rx="2.625" ry="3"/><path fill="#292F33" d="M14.543 1.013c-.927 0-1.727.306-2.158.755-1.103-.208-.477 1.517-1.342 3.245-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5s-1.119-1.5-2.5-1.5z"/><path fill="#F7DECE" d="M18.6 9.333c-.98-.334-1.68-.297-2.877-.313l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104l.406 3.656-1.94.046.022 1.953c.009.262.086.588.251 1 1 2.5 6 2.985 6 .5 0-.604-.048-1.06-.15-1.407 1.205.088 3.366-.867.707-1.773z"/><path fill="#DD2E44" d="M13.043 16.013c0 2 0 3-2 6s-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-1.359-.364-1.791-2.983l-.188-.006s-.561 3.494-2.821.008l-.212.002s.86 2.616-.65 3.77c-.101.076.662 1.209.662 3.209z"/><path d="M26.043 18.888c-1.122.561-1.23 1.205-.908 1.854.159-.253.446-.498.908-.729 1.251-.625 1.915-2.424 1.625-3.439-.187.902-.766 1.885-1.625 2.314zm-5 12c-2 0-3-3-5-3s-1 3-4 3-2-5-4-4c-1.08.54-1.853.773-2.192.572-.611 1.526.362 1.468 2.192.553 2-1 1 4 4 4s2-3 4-3 3 3 5 3c1.421 0 2.106-1.222 1.828-2.496-.209.783-.844 1.371-1.828 1.371zm4-6c-1-1-4 1-3 2 .014.014.021.03.034.044.613-.86 2.271-1.614 2.966-.919 1.191 1.191 2.422.154 2.003-1.385-.266.814-1.143 1.12-2.003.26z" fill="#A0041E"/><path fill="#DD2E44" d="M35.85 15.69s-.423-.21-.785.319c-.072.107-.132.172-.132.172.041.072.027.15.005.217-.13.398-.472.696-1.126.79-.272.039-.49.087-.684.138l.019-.605-.65-.021-.028.874c-.296.17-.39.348-.434.481-.096.292.556.637.963.771.368.121.688.175.91.182.245.007 1.136.225 1.136.225l.088-.269s-.72-.335-.966-.446c-.198-.09-.079-.582.224-.635.805-.141.997-.076 1.12-.454l.448-1.375c.083-.248-.108-.364-.108-.364z"/><path fill="#F7DECE" d="M12.386 9.254c-.101-.078-.216-.132-.34-.161-.167-.04-.351-.035-.547.013-.39.097-.964.206-1.572.322-.83.158-1.931.476-2.229.476s-1.515-.391-2.634-.537c-.37-.048-1.552-.165-1.804-.193-.342-.038-.756-.08-1.073-.15-.146-.032-.713-.184-.943-.225-.436-.078-1.161-.115-1.202-.03-.176.368.763.233 1.538.913.454.398.916.381 1.355.349.347-.025 1.447.573 2.326.841.635.194 2.056.533 2.26.562s1.296-.052 2.023-.11c.735-.057 1.371-.107 1.879-.075.485.031.849-.079 1.083-.326.292-.309.286-.742.278-.867-.024-.339-.165-.624-.398-.802zm11.198 1.335c-.168-.229-.565-.565-1.412-.8-.657-.183-3.994-.629-4.649-.707-.508-.061-.197 1.809.06 1.966.165.101.365.11.667.141 1.223.126 3.062.028 3.392-.005.143-.014.209.038.218.129-.063.29-.287.669-.477 1.104-.318.727-.656 1.714-.778 1.827l-.111.101c-.251.046-.549.174-.815.391-.095.077-.184.172-.252.364-.094.268.17.299.234.138.027-.067.091-.183.239-.221-.005.031-.015.057-.016.093-.002.058-.017.106-.027.158-.228.395-.682.553-.651.706.007.033.048.035.08.044-.154.104-.274.176-.264.256.008.065.08.08.178.071-.071.053-.117.1-.111.149.026.209.556-.116.81-.219.433-.176.686-.36.986-.636.349-.322.518-.787.669-1.045.111-.19 1.441-1.807 1.736-2.348.435-.798.462-1.428.294-1.657z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f483-1f3fc.svg b/public/emoji/1f483-1f3fc.svg index 8f68656c5..972ac6a54 100644 --- a/public/emoji/1f483-1f3fc.svg +++ b/public/emoji/1f483-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M16 1c.203-.378.538-.985 1.806-.602C19.722.978 18 2 18 2s2 1 2 4-1 1.838-1 5c0 2-2 0-2 0l-3 3c-4 4-6-1-5-3s0-2 0-4 2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#F3D2A2" cx="14.625" cy="5" rx="2.625" ry="3"/><path fill="#FFE51E" d="M14.5 1c-.927 0-1.727.306-2.158.755C11.239 1.548 11.864 3.272 11 5c-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5S15.881 1 14.5 1z"/><path fill="#F3D2A2" d="M22.707 10.293c-.373-.373-1.806-1.217-7.027-1.286l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104L13.667 9H9.083l-5.918-.986c-.55-.091-1.06.278-1.151.822-.091.544.277 1.06.821 1.15l6 1c.055.01.11.014.165.014h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 3-5.015 3-7.5 0-.604-.048-1.06-.15-1.407 1.206.087 2.027.223 2.567.351L18.2 14.4c-.331.442-.242 1.069.2 1.4.18.135.391.2.599.2.305 0 .604-.138.801-.4l3-4c.299-.398.259-.955-.093-1.307zM15.998 33c-.489 0-.917-.359-.988-.858l-1-7c-.078-.547.302-1.054.848-1.132.548-.073 1.054.302 1.131.849l1 7c.078.547-.302 1.054-.848 1.132-.048.006-.095.009-.143.009z"/><path fill="#F3D2A2" d="M15.999 21c-.472 0-.892-.335-.982-.815-.102-.543.256-1.066.799-1.167l15.999-3c.552-.102 1.066.256 1.167.799.103.542-.255 1.065-.798 1.167l-16.001 3c-.061.01-.123.016-.184.016z"/><path fill="#DD2E44" d="M12 13s1 1 1 3 0 3-2 6-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-2 0-2-3c0 0-1.25 4-3.25 0 0 0 1.25 3-.75 4z"/><path fill="#DD2E44" d="M16 36c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm16.429-17.37c-.22 0-.441-.072-.626-.221-.431-.347-.498-.976-.151-1.406l1.781-2.211c.346-.428.975-.498 1.405-.151.431.347.498.976.151 1.406l-1.781 2.211c-.197.245-.486.372-.779.372z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M16.908 32.178c.05-.603-.299-1.018-.755-1.024h-.188c-.456.006-.805.421-.755 1.024.075.905-.017 1.4-.052 2.318-.025.674.296 1.498.901 1.491.605.007.926-.817.901-1.491-.035-.918-.127-1.413-.052-2.318z"/><path fill="#F3D2A2" d="M17.021 27.471c.001-.268-.486-.398-.962-.394-.476-.004-.963.126-.962.394 0 0 .409 3.448.331 6.691-.007.286.313.44.631.443.318-.003.638-.156.631-.443-.078-3.243.331-6.691.331-6.691z"/><path fill="#DD2E44" d="M15.385 32.081h1.365v.65h-1.365z"/><path fill="#F3D2A2" d="M24.23 20.819s3.162-2.282 3.598-2.309c.247-.016 1.883-.13 2.23-.163 1.259-.125 3.854-.67 4.081-.719.228-.05.322.031.839-.806.517-.838-.044-.64-.044-.64s-.354.293-.547.379-.562.173-.909.166c-1.085-.023-7.175-.281-7.175-.281-.848.049-1.288.04-1.615.673-.574 1.104-.493 3.138-.458 3.7z"/><path fill="#FFE51E" d="M16.043 1.013c.203-.378.538-.985 1.806-.602 1.915.579.194 1.602.194 1.602s2 1 2 4-2.344 2.369-2.344 5.531l-.359.534s.644-.438-1.356 1.562c-4 4-6.782-1.274-6.412-2.754.542-2.169-.529-1.873-.529-3.873s2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#F3D2A2" cx="14.668" cy="5.013" rx="2.625" ry="3"/><path fill="#FFE51E" d="M14.543 1.013c-.927 0-1.727.306-2.158.755-1.103-.208-.477 1.517-1.342 3.245-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5s-1.119-1.5-2.5-1.5z"/><path fill="#F3D2A2" d="M18.6 9.333c-.98-.334-1.68-.297-2.877-.313l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104l.406 3.656-1.94.046.022 1.953c.009.262.086.588.251 1 1 2.5 6 2.985 6 .5 0-.604-.048-1.06-.15-1.407 1.205.088 3.366-.867.707-1.773z"/><path fill="#DD2E44" d="M13.043 16.013c0 2 0 3-2 6s-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-1.359-.364-1.791-2.983l-.188-.006s-.561 3.494-2.821.008l-.212.002s.86 2.616-.65 3.77c-.101.076.662 1.209.662 3.209z"/><path d="M26.043 18.888c-1.122.561-1.23 1.205-.908 1.854.159-.253.446-.498.908-.729 1.251-.625 1.915-2.424 1.625-3.439-.187.902-.766 1.885-1.625 2.314zm-5 12c-2 0-3-3-5-3s-1 3-4 3-2-5-4-4c-1.08.54-1.853.773-2.192.572-.611 1.526.362 1.468 2.192.553 2-1 1 4 4 4s2-3 4-3 3 3 5 3c1.421 0 2.106-1.222 1.828-2.496-.209.783-.844 1.371-1.828 1.371zm4-6c-1-1-4 1-3 2 .014.014.021.03.034.044.613-.86 2.271-1.614 2.966-.919 1.191 1.191 2.422.154 2.003-1.385-.266.814-1.143 1.12-2.003.26z" fill="#A0041E"/><path fill="#DD2E44" d="M35.85 15.69s-.423-.21-.785.319c-.072.107-.132.172-.132.172.041.072.027.15.005.217-.13.398-.472.696-1.126.79-.272.039-.49.087-.684.138l.019-.605-.65-.021-.028.874c-.296.17-.39.348-.434.481-.096.292.556.637.963.771.368.121.688.175.91.182.245.007 1.136.225 1.136.225l.088-.269s-.72-.335-.966-.446c-.198-.09-.079-.582.224-.635.805-.141.997-.076 1.12-.454l.448-1.375c.083-.248-.108-.364-.108-.364z"/><path fill="#F3D2A2" d="M12.386 9.254c-.101-.078-.216-.132-.34-.161-.167-.04-.351-.035-.547.013-.39.097-.964.206-1.572.322-.83.158-1.931.476-2.229.476s-1.515-.391-2.634-.537c-.37-.048-1.552-.165-1.804-.193-.342-.038-.756-.08-1.073-.15-.146-.032-.713-.184-.943-.225-.436-.078-1.161-.115-1.202-.03-.176.368.763.233 1.538.913.454.398.916.381 1.355.349.347-.025 1.447.573 2.326.841.635.194 2.056.533 2.26.562s1.296-.052 2.023-.11c.735-.057 1.371-.107 1.879-.075.485.031.849-.079 1.083-.326.292-.309.286-.742.278-.867-.024-.339-.165-.624-.398-.802zm11.198 1.335c-.168-.229-.565-.565-1.412-.8-.657-.183-3.994-.629-4.649-.707-.508-.061-.197 1.809.06 1.966.165.101.365.11.667.141 1.223.126 3.062.028 3.392-.005.143-.014.209.038.218.129-.063.29-.287.669-.477 1.104-.318.727-.656 1.714-.778 1.827l-.111.101c-.251.046-.549.174-.815.391-.095.077-.184.172-.252.364-.094.268.17.299.234.138.027-.067.091-.183.239-.221-.005.031-.015.057-.016.093-.002.058-.017.106-.027.158-.228.395-.682.553-.651.706.007.033.048.035.08.044-.154.104-.274.176-.264.256.008.065.08.08.178.071-.071.053-.117.1-.111.149.026.209.556-.116.81-.219.433-.176.686-.36.986-.636.349-.322.518-.787.669-1.045.111-.19 1.441-1.807 1.736-2.348.435-.798.462-1.428.294-1.657z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f483-1f3fd.svg b/public/emoji/1f483-1f3fd.svg index 518d5fee5..50377b687 100644 --- a/public/emoji/1f483-1f3fd.svg +++ b/public/emoji/1f483-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M16 1c.203-.378.538-.985 1.806-.602C19.722.978 18 2 18 2s2 1 2 4-1 1.838-1 5c0 2-2 0-2 0l-3 3c-4 4-6-1-5-3s0-2 0-4 2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#D5AB88" cx="14.625" cy="5" rx="2.625" ry="3"/><path fill="#963B22" d="M14.5 1c-.927 0-1.727.306-2.158.755C11.239 1.548 11.864 3.272 11 5c-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5S15.881 1 14.5 1z"/><path fill="#D5AB88" d="M22.707 10.293c-.373-.373-1.806-1.217-7.027-1.286l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104L13.667 9H9.083l-5.918-.986c-.55-.091-1.06.278-1.151.822-.091.544.277 1.06.821 1.15l6 1c.055.01.11.014.165.014h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 3-5.015 3-7.5 0-.604-.048-1.06-.15-1.407 1.206.087 2.027.223 2.567.351L18.2 14.4c-.331.442-.242 1.069.2 1.4.18.135.391.2.599.2.305 0 .604-.138.801-.4l3-4c.299-.398.259-.955-.093-1.307zM15.998 33c-.489 0-.917-.359-.988-.858l-1-7c-.078-.547.302-1.054.848-1.132.548-.073 1.054.302 1.131.849l1 7c.078.547-.302 1.054-.848 1.132-.048.006-.095.009-.143.009z"/><path fill="#D5AB88" d="M15.999 21c-.472 0-.892-.335-.982-.815-.102-.543.256-1.066.799-1.167l15.999-3c.552-.102 1.066.256 1.167.799.103.542-.255 1.065-.798 1.167l-16.001 3c-.061.01-.123.016-.184.016z"/><path fill="#DD2E44" d="M12 13s1 1 1 3 0 3-2 6-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-2 0-2-3c0 0-1.25 4-3.25 0 0 0 1.25 3-.75 4z"/><path fill="#DD2E44" d="M16 36c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm16.429-17.37c-.22 0-.441-.072-.626-.221-.431-.347-.498-.976-.151-1.406l1.781-2.211c.346-.428.975-.498 1.405-.151.431.347.498.976.151 1.406l-1.781 2.211c-.197.245-.486.372-.779.372z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M16.908 32.178c.05-.603-.299-1.018-.755-1.024h-.188c-.456.006-.805.421-.755 1.024.075.905-.017 1.4-.052 2.318-.025.674.296 1.498.901 1.491.605.007.926-.817.901-1.491-.035-.918-.127-1.413-.052-2.318z"/><path fill="#D4AB88" d="M17.021 27.471c.001-.268-.486-.398-.962-.394-.476-.004-.963.126-.962.394 0 0 .409 3.448.331 6.691-.007.286.313.44.631.443.318-.003.638-.156.631-.443-.078-3.243.331-6.691.331-6.691z"/><path fill="#DD2E44" d="M15.385 32.081h1.365v.65h-1.365z"/><path fill="#D4AB88" d="M24.23 20.819s3.162-2.282 3.598-2.309c.247-.016 1.883-.13 2.23-.163 1.259-.125 3.854-.67 4.081-.719.228-.05.322.031.839-.806.517-.838-.044-.64-.044-.64s-.354.293-.547.379-.562.173-.909.166c-1.085-.023-7.175-.281-7.175-.281-.848.049-1.288.04-1.615.673-.574 1.104-.493 3.138-.458 3.7z"/><path fill="#963B22" d="M16.043 1.013c.203-.378.538-.985 1.806-.602 1.915.579.194 1.602.194 1.602s2 1 2 4-2.344 2.369-2.344 5.531l-.359.534s.644-.438-1.356 1.562c-4 4-6.782-1.274-6.412-2.754.542-2.169-.529-1.873-.529-3.873s2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#D4AB88" cx="14.668" cy="5.013" rx="2.625" ry="3"/><path fill="#963B22" d="M14.543 1.013c-.927 0-1.727.306-2.158.755-1.103-.208-.477 1.517-1.342 3.245-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5s-1.119-1.5-2.5-1.5z"/><path fill="#D4AB88" d="M18.6 9.333c-.98-.334-1.68-.297-2.877-.313l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104l.406 3.656-1.94.046.022 1.953c.009.262.086.588.251 1 1 2.5 6 2.985 6 .5 0-.604-.048-1.06-.15-1.407 1.205.088 3.366-.867.707-1.773z"/><path fill="#DD2E44" d="M13.043 16.013c0 2 0 3-2 6s-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-1.359-.364-1.791-2.983l-.188-.006s-.561 3.494-2.821.008l-.212.002s.86 2.616-.65 3.77c-.101.076.662 1.209.662 3.209z"/><path d="M26.043 18.888c-1.122.561-1.23 1.205-.908 1.854.159-.253.446-.498.908-.729 1.251-.625 1.915-2.424 1.625-3.439-.187.902-.766 1.885-1.625 2.314zm-5 12c-2 0-3-3-5-3s-1 3-4 3-2-5-4-4c-1.08.54-1.853.773-2.192.572-.611 1.526.362 1.468 2.192.553 2-1 1 4 4 4s2-3 4-3 3 3 5 3c1.421 0 2.106-1.222 1.828-2.496-.209.783-.844 1.371-1.828 1.371zm4-6c-1-1-4 1-3 2 .014.014.021.03.034.044.613-.86 2.271-1.614 2.966-.919 1.191 1.191 2.422.154 2.003-1.385-.266.814-1.143 1.12-2.003.26z" fill="#A0041E"/><path fill="#DD2E44" d="M35.85 15.69s-.423-.21-.785.319c-.072.107-.132.172-.132.172.041.072.027.15.005.217-.13.398-.472.696-1.126.79-.272.039-.49.087-.684.138l.019-.605-.65-.021-.028.874c-.296.17-.39.348-.434.481-.096.292.556.637.963.771.368.121.688.175.91.182.245.007 1.136.225 1.136.225l.088-.269s-.72-.335-.966-.446c-.198-.09-.079-.582.224-.635.805-.141.997-.076 1.12-.454l.448-1.375c.083-.248-.108-.364-.108-.364z"/><path fill="#D4AB88" d="M12.386 9.254c-.101-.078-.216-.132-.34-.161-.167-.04-.351-.035-.547.013-.39.097-.964.206-1.572.322-.83.158-1.931.476-2.229.476s-1.515-.391-2.634-.537c-.37-.048-1.552-.165-1.804-.193-.342-.038-.756-.08-1.073-.15-.146-.032-.713-.184-.943-.225-.436-.078-1.161-.115-1.202-.03-.176.368.763.233 1.538.913.454.398.916.381 1.355.349.347-.025 1.447.573 2.326.841.635.194 2.056.533 2.26.562s1.296-.052 2.023-.11c.735-.057 1.371-.107 1.879-.075.485.031.849-.079 1.083-.326.292-.309.286-.742.278-.867-.024-.339-.165-.624-.398-.802zm11.198 1.335c-.168-.229-.565-.565-1.412-.8-.657-.183-3.994-.629-4.649-.707-.508-.061-.197 1.809.06 1.966.165.101.365.11.667.141 1.223.126 3.062.028 3.392-.005.143-.014.209.038.218.129-.063.29-.287.669-.477 1.104-.318.727-.656 1.714-.778 1.827l-.111.101c-.251.046-.549.174-.815.391-.095.077-.184.172-.252.364-.094.268.17.299.234.138.027-.067.091-.183.239-.221-.005.031-.015.057-.016.093-.002.058-.017.106-.027.158-.228.395-.682.553-.651.706.007.033.048.035.08.044-.154.104-.274.176-.264.256.008.065.08.08.178.071-.071.053-.117.1-.111.149.026.209.556-.116.81-.219.433-.176.686-.36.986-.636.349-.322.518-.787.669-1.045.111-.19 1.441-1.807 1.736-2.348.435-.798.462-1.428.294-1.657z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f483-1f3fe.svg b/public/emoji/1f483-1f3fe.svg index 2b7025cc3..e4dde292f 100644 --- a/public/emoji/1f483-1f3fe.svg +++ b/public/emoji/1f483-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M16 1c.203-.378.538-.985 1.806-.602C19.722.978 18 2 18 2s2 1 2 4-1 1.838-1 5c0 2-2 0-2 0l-3 3c-4 4-6-1-5-3s0-2 0-4 2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#AF7E57" cx="14.625" cy="5" rx="2.625" ry="3"/><path fill="#60352A" d="M14.5 1c-.927 0-1.727.306-2.158.755C11.239 1.548 11.864 3.272 11 5c-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5S15.881 1 14.5 1z"/><path fill="#AF7E57" d="M22.707 10.293c-.373-.373-1.806-1.217-7.027-1.286l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104L13.667 9H9.083l-5.918-.986c-.55-.091-1.06.278-1.151.822-.091.544.277 1.06.821 1.15l6 1c.055.01.11.014.165.014h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 3-5.015 3-7.5 0-.604-.048-1.06-.15-1.407 1.206.087 2.027.223 2.567.351L18.2 14.4c-.331.442-.242 1.069.2 1.4.18.135.391.2.599.2.305 0 .604-.138.801-.4l3-4c.299-.398.259-.955-.093-1.307zM15.998 33c-.489 0-.917-.359-.988-.858l-1-7c-.078-.547.302-1.054.848-1.132.548-.073 1.054.302 1.131.849l1 7c.078.547-.302 1.054-.848 1.132-.048.006-.095.009-.143.009z"/><path fill="#AF7E57" d="M15.999 21c-.472 0-.892-.335-.982-.815-.102-.543.256-1.066.799-1.167l15.999-3c.552-.102 1.066.256 1.167.799.103.542-.255 1.065-.798 1.167l-16.001 3c-.061.01-.123.016-.184.016z"/><path fill="#DD2E44" d="M12 13s1 1 1 3 0 3-2 6-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-2 0-2-3c0 0-1.25 4-3.25 0 0 0 1.25 3-.75 4z"/><path fill="#DD2E44" d="M16 36c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm16.429-17.37c-.22 0-.441-.072-.626-.221-.431-.347-.498-.976-.151-1.406l1.781-2.211c.346-.428.975-.498 1.405-.151.431.347.498.976.151 1.406l-1.781 2.211c-.197.245-.486.372-.779.372z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M16.908 32.178c.05-.603-.299-1.018-.755-1.024h-.188c-.456.006-.805.421-.755 1.024.075.905-.017 1.4-.052 2.318-.025.674.296 1.498.901 1.491.605.007.926-.817.901-1.491-.035-.918-.127-1.413-.052-2.318z"/><path fill="#AF7E57" d="M17.021 27.471c.001-.268-.486-.398-.962-.394-.476-.004-.963.126-.962.394 0 0 .409 3.448.331 6.691-.007.286.313.44.631.443.318-.003.638-.156.631-.443-.078-3.243.331-6.691.331-6.691z"/><path fill="#DD2E44" d="M15.385 32.081h1.365v.65h-1.365z"/><path fill="#AF7E57" d="M24.23 20.819s3.162-2.282 3.598-2.309c.247-.016 1.883-.13 2.23-.163 1.259-.125 3.854-.67 4.081-.719.228-.05.322.031.839-.806.517-.838-.044-.64-.044-.64s-.354.293-.547.379-.562.173-.909.166c-1.085-.023-7.175-.281-7.175-.281-.848.049-1.288.04-1.615.673-.574 1.104-.493 3.138-.458 3.7z"/><path fill="#60352A" d="M16.043 1.013c.203-.378.538-.985 1.806-.602 1.915.579.194 1.602.194 1.602s2 1 2 4-2.344 2.369-2.344 5.531l-.359.534s.644-.438-1.356 1.562c-4 4-6.782-1.274-6.412-2.754.542-2.169-.529-1.873-.529-3.873s2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#AF7E57" cx="14.668" cy="5.013" rx="2.625" ry="3"/><path fill="#60352A" d="M14.543 1.013c-.927 0-1.727.306-2.158.755-1.103-.208-.477 1.517-1.342 3.245-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5s-1.119-1.5-2.5-1.5z"/><path fill="#AF7E57" d="M18.6 9.333c-.98-.334-1.68-.297-2.877-.313l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104l.406 3.656-1.94.046.022 1.953c.009.262.086.588.251 1 1 2.5 6 2.985 6 .5 0-.604-.048-1.06-.15-1.407 1.205.088 3.366-.867.707-1.773z"/><path fill="#DD2E44" d="M13.043 16.013c0 2 0 3-2 6s-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-1.359-.364-1.791-2.983l-.188-.006s-.561 3.494-2.821.008l-.212.002s.86 2.616-.65 3.77c-.101.076.662 1.209.662 3.209z"/><path d="M26.043 18.888c-1.122.561-1.23 1.205-.908 1.854.159-.253.446-.498.908-.729 1.251-.625 1.915-2.424 1.625-3.439-.187.902-.766 1.885-1.625 2.314zm-5 12c-2 0-3-3-5-3s-1 3-4 3-2-5-4-4c-1.08.54-1.853.773-2.192.572-.611 1.526.362 1.468 2.192.553 2-1 1 4 4 4s2-3 4-3 3 3 5 3c1.421 0 2.106-1.222 1.828-2.496-.209.783-.844 1.371-1.828 1.371zm4-6c-1-1-4 1-3 2 .014.014.021.03.034.044.613-.86 2.271-1.614 2.966-.919 1.191 1.191 2.422.154 2.003-1.385-.266.814-1.143 1.12-2.003.26z" fill="#A0041E"/><path fill="#DD2E44" d="M35.85 15.69s-.423-.21-.785.319c-.072.107-.132.172-.132.172.041.072.027.15.005.217-.13.398-.472.696-1.126.79-.272.039-.49.087-.684.138l.019-.605-.65-.021-.028.874c-.296.17-.39.348-.434.481-.096.292.556.637.963.771.368.121.688.175.91.182.245.007 1.136.225 1.136.225l.088-.269s-.72-.335-.966-.446c-.198-.09-.079-.582.224-.635.805-.141.997-.076 1.12-.454l.448-1.375c.083-.248-.108-.364-.108-.364z"/><path fill="#AF7E57" d="M12.386 9.254c-.101-.078-.216-.132-.34-.161-.167-.04-.351-.035-.547.013-.39.097-.964.206-1.572.322-.83.158-1.931.476-2.229.476s-1.515-.391-2.634-.537c-.37-.048-1.552-.165-1.804-.193-.342-.038-.756-.08-1.073-.15-.146-.032-.713-.184-.943-.225-.436-.078-1.161-.115-1.202-.03-.176.368.763.233 1.538.913.454.398.916.381 1.355.349.347-.025 1.447.573 2.326.841.635.194 2.056.533 2.26.562s1.296-.052 2.023-.11c.735-.057 1.371-.107 1.879-.075.485.031.849-.079 1.083-.326.292-.309.286-.742.278-.867-.024-.339-.165-.624-.398-.802zm11.198 1.335c-.168-.229-.565-.565-1.412-.8-.657-.183-3.994-.629-4.649-.707-.508-.061-.197 1.809.06 1.966.165.101.365.11.667.141 1.223.126 3.062.028 3.392-.005.143-.014.209.038.218.129-.063.29-.287.669-.477 1.104-.318.727-.656 1.714-.778 1.827l-.111.101c-.251.046-.549.174-.815.391-.095.077-.184.172-.252.364-.094.268.17.299.234.138.027-.067.091-.183.239-.221-.005.031-.015.057-.016.093-.002.058-.017.106-.027.158-.228.395-.682.553-.651.706.007.033.048.035.08.044-.154.104-.274.176-.264.256.008.065.08.08.178.071-.071.053-.117.1-.111.149.026.209.556-.116.81-.219.433-.176.686-.36.986-.636.349-.322.518-.787.669-1.045.111-.19 1.441-1.807 1.736-2.348.435-.798.462-1.428.294-1.657z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f483-1f3ff.svg b/public/emoji/1f483-1f3ff.svg index edafd473f..ac5350687 100644 --- a/public/emoji/1f483-1f3ff.svg +++ b/public/emoji/1f483-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M16 1c.203-.378.538-.985 1.806-.602C19.722.978 18 2 18 2s2 1 2 4-1 1.838-1 5c0 2-2 0-2 0l-3 3c-4 4-6-1-5-3s0-2 0-4 2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#7C533E" cx="14.625" cy="5" rx="2.625" ry="3"/><path fill="#0B0200" d="M14.5 1c-.927 0-1.727.306-2.158.755C11.239 1.548 11.864 3.272 11 5c-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5S15.881 1 14.5 1z"/><path fill="#7C533E" d="M22.707 10.293c-.373-.373-1.806-1.217-7.027-1.286l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104L13.667 9H9.083l-5.918-.986c-.55-.091-1.06.278-1.151.822-.091.544.277 1.06.821 1.15l6 1c.055.01.11.014.165.014h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 3-5.015 3-7.5 0-.604-.048-1.06-.15-1.407 1.206.087 2.027.223 2.567.351L18.2 14.4c-.331.442-.242 1.069.2 1.4.18.135.391.2.599.2.305 0 .604-.138.801-.4l3-4c.299-.398.259-.955-.093-1.307zM15.998 33c-.489 0-.917-.359-.988-.858l-1-7c-.078-.547.302-1.054.848-1.132.548-.073 1.054.302 1.131.849l1 7c.078.547-.302 1.054-.848 1.132-.048.006-.095.009-.143.009z"/><path fill="#7C533E" d="M15.999 21c-.472 0-.892-.335-.982-.815-.102-.543.256-1.066.799-1.167l15.999-3c.552-.102 1.066.256 1.167.799.103.542-.255 1.065-.798 1.167l-16.001 3c-.061.01-.123.016-.184.016z"/><path fill="#DD2E44" d="M12 13s1 1 1 3 0 3-2 6-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-2 0-2-3c0 0-1.25 4-3.25 0 0 0 1.25 3-.75 4z"/><path fill="#DD2E44" d="M16 36c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm16.429-17.37c-.22 0-.441-.072-.626-.221-.431-.347-.498-.976-.151-1.406l1.781-2.211c.346-.428.975-.498 1.405-.151.431.347.498.976.151 1.406l-1.781 2.211c-.197.245-.486.372-.779.372z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M16.908 32.178c.05-.603-.299-1.018-.755-1.024h-.188c-.456.006-.805.421-.755 1.024.075.905-.017 1.4-.052 2.318-.025.674.296 1.498.901 1.491.605.007.926-.817.901-1.491-.035-.918-.127-1.413-.052-2.318z"/><path fill="#7C533E" d="M17.021 27.471c.001-.268-.486-.398-.962-.394-.476-.004-.963.126-.962.394 0 0 .409 3.448.331 6.691-.007.286.313.44.631.443.318-.003.638-.156.631-.443-.078-3.243.331-6.691.331-6.691z"/><path fill="#DD2E44" d="M15.385 32.081h1.365v.65h-1.365z"/><path fill="#7C533E" d="M24.23 20.819s3.162-2.282 3.598-2.309c.247-.016 1.883-.13 2.23-.163 1.259-.125 3.854-.67 4.081-.719.228-.05.322.031.839-.806.517-.838-.044-.64-.044-.64s-.354.293-.547.379-.562.173-.909.166c-1.085-.023-7.175-.281-7.175-.281-.848.049-1.288.04-1.615.673-.574 1.104-.493 3.138-.458 3.7z"/><path fill="#0B0200" d="M16.043 1.013c.203-.378.538-.985 1.806-.602 1.915.579.194 1.602.194 1.602s2 1 2 4-2.344 2.369-2.344 5.531l-.359.534s.644-.438-1.356 1.562c-4 4-6.782-1.274-6.412-2.754.542-2.169-.529-1.873-.529-3.873s2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#7C533E" cx="14.668" cy="5.013" rx="2.625" ry="3"/><path fill="#0B0200" d="M14.543 1.013c-.927 0-1.727.306-2.158.755-1.103-.208-.477 1.517-1.342 3.245-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5s-1.119-1.5-2.5-1.5z"/><path fill="#7C533E" d="M18.6 9.333c-.98-.334-1.68-.297-2.877-.313l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104l.406 3.656-1.94.046.022 1.953c.009.262.086.588.251 1 1 2.5 6 2.985 6 .5 0-.604-.048-1.06-.15-1.407 1.205.088 3.366-.867.707-1.773z"/><path fill="#DD2E44" d="M13.043 16.013c0 2 0 3-2 6s-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-1.359-.364-1.791-2.983l-.188-.006s-.561 3.494-2.821.008l-.212.002s.86 2.616-.65 3.77c-.101.076.662 1.209.662 3.209z"/><path d="M26.043 18.888c-1.122.561-1.23 1.205-.908 1.854.159-.253.446-.498.908-.729 1.251-.625 1.915-2.424 1.625-3.439-.187.902-.766 1.885-1.625 2.314zm-5 12c-2 0-3-3-5-3s-1 3-4 3-2-5-4-4c-1.08.54-1.853.773-2.192.572-.611 1.526.362 1.468 2.192.553 2-1 1 4 4 4s2-3 4-3 3 3 5 3c1.421 0 2.106-1.222 1.828-2.496-.209.783-.844 1.371-1.828 1.371zm4-6c-1-1-4 1-3 2 .014.014.021.03.034.044.613-.86 2.271-1.614 2.966-.919 1.191 1.191 2.422.154 2.003-1.385-.266.814-1.143 1.12-2.003.26z" fill="#A0041E"/><path fill="#DD2E44" d="M35.85 15.69s-.423-.21-.785.319c-.072.107-.132.172-.132.172.041.072.027.15.005.217-.13.398-.472.696-1.126.79-.272.039-.49.087-.684.138l.019-.605-.65-.021-.028.874c-.296.17-.39.348-.434.481-.096.292.556.637.963.771.368.121.688.175.91.182.245.007 1.136.225 1.136.225l.088-.269s-.72-.335-.966-.446c-.198-.09-.079-.582.224-.635.805-.141.997-.076 1.12-.454l.448-1.375c.083-.248-.108-.364-.108-.364z"/><path fill="#7C533E" d="M12.386 9.254c-.101-.078-.216-.132-.34-.161-.167-.04-.351-.035-.547.013-.39.097-.964.206-1.572.322-.83.158-1.931.476-2.229.476s-1.515-.391-2.634-.537c-.37-.048-1.552-.165-1.804-.193-.342-.038-.756-.08-1.073-.15-.146-.032-.713-.184-.943-.225-.436-.078-1.161-.115-1.202-.03-.176.368.763.233 1.538.913.454.398.916.381 1.355.349.347-.025 1.447.573 2.326.841.635.194 2.056.533 2.26.562s1.296-.052 2.023-.11c.735-.057 1.371-.107 1.879-.075.485.031.849-.079 1.083-.326.292-.309.286-.742.278-.867-.024-.339-.165-.624-.398-.802zm11.198 1.335c-.168-.229-.565-.565-1.412-.8-.657-.183-3.994-.629-4.649-.707-.508-.061-.197 1.809.06 1.966.165.101.365.11.667.141 1.223.126 3.062.028 3.392-.005.143-.014.209.038.218.129-.063.29-.287.669-.477 1.104-.318.727-.656 1.714-.778 1.827l-.111.101c-.251.046-.549.174-.815.391-.095.077-.184.172-.252.364-.094.268.17.299.234.138.027-.067.091-.183.239-.221-.005.031-.015.057-.016.093-.002.058-.017.106-.027.158-.228.395-.682.553-.651.706.007.033.048.035.08.044-.154.104-.274.176-.264.256.008.065.08.08.178.071-.071.053-.117.1-.111.149.026.209.556-.116.81-.219.433-.176.686-.36.986-.636.349-.322.518-.787.669-1.045.111-.19 1.441-1.807 1.736-2.348.435-.798.462-1.428.294-1.657z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f483.svg b/public/emoji/1f483.svg index 33e8827de..abc19e5f7 100644 --- a/public/emoji/1f483.svg +++ b/public/emoji/1f483.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M16 1c.203-.378.538-.985 1.806-.602C19.722.978 18 2 18 2s2 1 2 4-1 1.838-1 5c0 2-2 0-2 0l-3 3c-4 4-6-1-5-3s0-2 0-4 2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#FFDC5D" cx="14.625" cy="5" rx="2.625" ry="3"/><path fill="#FFAC33" d="M14.5 1c-.927 0-1.727.306-2.158.755C11.239 1.548 11.864 3.272 11 5c-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5S15.881 1 14.5 1z"/><path fill="#FFDC5D" d="M22.707 10.293c-.373-.373-1.806-1.217-7.027-1.286l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104L13.667 9H9.083l-5.918-.986c-.55-.091-1.06.278-1.151.822-.091.544.277 1.06.821 1.15l6 1c.055.01.11.014.165.014h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 3-5.015 3-7.5 0-.604-.048-1.06-.15-1.407 1.206.087 2.027.223 2.567.351L18.2 14.4c-.331.442-.242 1.069.2 1.4.18.135.391.2.599.2.305 0 .604-.138.801-.4l3-4c.299-.398.259-.955-.093-1.307zM15.998 33c-.489 0-.917-.359-.988-.858l-1-7c-.078-.547.302-1.054.848-1.132.548-.073 1.054.302 1.131.849l1 7c.078.547-.302 1.054-.848 1.132-.048.006-.095.009-.143.009z"/><path fill="#FFDC5D" d="M15.999 21c-.472 0-.892-.335-.982-.815-.102-.543.256-1.066.799-1.167l15.999-3c.552-.102 1.066.256 1.167.799.103.542-.255 1.065-.798 1.167l-16.001 3c-.061.01-.123.016-.184.016z"/><path fill="#DD2E44" d="M12 13s1 1 1 3 0 3-2 6-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-2 0-2-3c0 0-1.25 4-3.25 0 0 0 1.25 3-.75 4z"/><path fill="#DD2E44" d="M16 36c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm16.429-17.37c-.22 0-.441-.072-.626-.221-.431-.347-.498-.976-.151-1.406l1.781-2.211c.346-.428.975-.498 1.405-.151.431.347.498.976.151 1.406l-1.781 2.211c-.197.245-.486.372-.779.372z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M16.908 32.178c.05-.603-.299-1.018-.755-1.024h-.188c-.456.006-.805.421-.755 1.024.075.905-.017 1.4-.052 2.318-.025.674.296 1.498.901 1.491.605.007.926-.817.901-1.491-.035-.918-.127-1.413-.052-2.318z"/><path fill="#FFDC5D" d="M17.021 27.471c.001-.268-.486-.398-.962-.394-.476-.004-.963.126-.962.394 0 0 .409 3.448.331 6.691-.007.286.313.44.631.443.318-.003.638-.156.631-.443-.078-3.243.331-6.691.331-6.691z"/><path fill="#DD2E44" d="M15.385 32.081h1.365v.65h-1.365z"/><path fill="#FFDC5D" d="M24.23 20.819s3.162-2.282 3.598-2.309c.247-.016 1.883-.13 2.23-.163 1.259-.125 3.854-.67 4.081-.719.228-.05.322.031.839-.806.517-.838-.044-.64-.044-.64s-.354.293-.547.379-.562.173-.909.166c-1.085-.023-7.175-.281-7.175-.281-.848.049-1.288.04-1.615.673-.574 1.104-.493 3.138-.458 3.7z"/><path fill="#FFAC33" d="M16.043 1.013c.203-.378.538-.985 1.806-.602 1.915.579.194 1.602.194 1.602s2 1 2 4-2.344 2.369-2.344 5.531l-.359.534s.644-.438-1.356 1.562c-4 4-6.782-1.274-6.412-2.754.542-2.169-.529-1.873-.529-3.873s2-2 2-4 2-3 3-3 2 1 2 1z"/><ellipse fill="#FFDC5D" cx="14.668" cy="5.013" rx="2.625" ry="3"/><path fill="#FFAC33" d="M14.543 1.013c-.927 0-1.727.306-2.158.755-1.103-.208-.477 1.517-1.342 3.245-1 2 1 4 1 3s0-4 2-4h.5c1.381 0 2.5-.671 2.5-1.5s-1.119-1.5-2.5-1.5z"/><path fill="#FFDC5D" d="M18.6 9.333c-.98-.334-1.68-.297-2.877-.313l-.432-3.883c-.061-.549-.562-.948-1.104-.883-.549.061-.944.555-.883 1.104l.406 3.656-1.94.046.022 1.953c.009.262.086.588.251 1 1 2.5 6 2.985 6 .5 0-.604-.048-1.06-.15-1.407 1.205.088 3.366-.867.707-1.773z"/><path fill="#DD2E44" d="M13.043 16.013c0 2 0 3-2 6s-4 3-5 5 0 2 2 1 1 4 4 4 2-3 4-3 3 3 5 3 2.581-2.419 1-4c-1-1 2-3 3-2 1.581 1.581 3.236-.764 1-3-1-1-1.789-2.105 0-3 2-1 2.5-5 0-4-3.344 1.338-8 3.161-8 0v-4s-1.359-.364-1.791-2.983l-.188-.006s-.561 3.494-2.821.008l-.212.002s.86 2.616-.65 3.77c-.101.076.662 1.209.662 3.209z"/><path d="M26.043 18.888c-1.122.561-1.23 1.205-.908 1.854.159-.253.446-.498.908-.729 1.251-.625 1.915-2.424 1.625-3.439-.187.902-.766 1.885-1.625 2.314zm-5 12c-2 0-3-3-5-3s-1 3-4 3-2-5-4-4c-1.08.54-1.853.773-2.192.572-.611 1.526.362 1.468 2.192.553 2-1 1 4 4 4s2-3 4-3 3 3 5 3c1.421 0 2.106-1.222 1.828-2.496-.209.783-.844 1.371-1.828 1.371zm4-6c-1-1-4 1-3 2 .014.014.021.03.034.044.613-.86 2.271-1.614 2.966-.919 1.191 1.191 2.422.154 2.003-1.385-.266.814-1.143 1.12-2.003.26z" fill="#A0041E"/><path fill="#DD2E44" d="M35.85 15.69s-.423-.21-.785.319c-.072.107-.132.172-.132.172.041.072.027.15.005.217-.13.398-.472.696-1.126.79-.272.039-.49.087-.684.138l.019-.605-.65-.021-.028.874c-.296.17-.39.348-.434.481-.096.292.556.637.963.771.368.121.688.175.91.182.245.007 1.136.225 1.136.225l.088-.269s-.72-.335-.966-.446c-.198-.09-.079-.582.224-.635.805-.141.997-.076 1.12-.454l.448-1.375c.083-.248-.108-.364-.108-.364z"/><path fill="#FFDC5D" d="M12.386 9.254c-.101-.078-.216-.132-.34-.161-.167-.04-.351-.035-.547.013-.39.097-.964.206-1.572.322-.83.158-1.931.476-2.229.476s-1.515-.391-2.634-.537c-.37-.048-1.552-.165-1.804-.193-.342-.038-.756-.08-1.073-.15-.146-.032-.713-.184-.943-.225-.436-.078-1.161-.115-1.202-.03-.176.368.763.233 1.538.913.454.398.916.381 1.355.349.347-.025 1.447.573 2.326.841.635.194 2.056.533 2.26.562s1.296-.052 2.023-.11c.735-.057 1.371-.107 1.879-.075.485.031.849-.079 1.083-.326.292-.309.286-.742.278-.867-.024-.339-.165-.624-.398-.802zm11.198 1.335c-.168-.229-.565-.565-1.412-.8-.657-.183-3.994-.629-4.649-.707-.508-.061-.197 1.809.06 1.966.165.101.365.11.667.141 1.223.126 3.062.028 3.392-.005.143-.014.209.038.218.129-.063.29-.287.669-.477 1.104-.318.727-.656 1.714-.778 1.827l-.111.101c-.251.046-.549.174-.815.391-.095.077-.184.172-.252.364-.094.268.17.299.234.138.027-.067.091-.183.239-.221-.005.031-.015.057-.016.093-.002.058-.017.106-.027.158-.228.395-.682.553-.651.706.007.033.048.035.08.044-.154.104-.274.176-.264.256.008.065.08.08.178.071-.071.053-.117.1-.111.149.026.209.556-.116.81-.219.433-.176.686-.36.986-.636.349-.322.518-.787.669-1.045.111-.19 1.441-1.807 1.736-2.348.435-.798.462-1.428.294-1.657z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f48b.svg b/public/emoji/1f48b.svg index 8a1454a50..f71fc97fc 100644 --- a/public/emoji/1f48b.svg +++ b/public/emoji/1f48b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E75A70" d="M32.201 7.791c-2.223-.36-7.568-3.963-11.411-2.762s-3.542 2.162-5.464 2.763c-1.922.601-2.222-.36-6.065.841-3.842 1.201-6.184 7.206-7.805 8.768 0 0-1.603 1.621-1.021 3.483.583 1.861 2.523 1.32 2.523 1.32 6.726-2.102 9.007-4.925 9.007-4.925s3.482 1.021 6.364.12c2.882-.901 5.164-3.724 5.164-3.724s3.484 1.021 10.209-1.081c0 0 1.902-.661 1.32-2.522-.583-1.862-2.821-2.281-2.821-2.281zm-1.082 6.666c-5.764 1.801-4.562 5.644-11.288 7.747-6.726 2.102-7.927-1.74-13.691.061-1.921.601-2.582 1.861-2.281 2.824.9 2.881 8.407 10.025 18.976 6.723 10.568-3.303 12.67-13.452 11.769-16.333-.301-.963-1.564-1.623-3.485-1.022z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M32.201 7.791c-2.223-.36-7.568-3.963-11.411-2.762s-3.542 2.162-5.464 2.763c-1.922.601-2.222-.36-6.065.841-3.842 1.201-6.184 7.206-7.805 8.768 0 0-1.603 1.621-1.021 3.483.583 1.861 2.523 1.32 2.523 1.32 6.726-2.102 9.007-4.925 9.007-4.925s3.482 1.021 6.364.12c2.882-.901 5.164-3.724 5.164-3.724s3.484 1.021 10.209-1.081c0 0 1.902-.661 1.32-2.522-.583-1.862-2.821-2.281-2.821-2.281zm-1.082 6.666c-5.764 1.801-4.562 5.644-11.288 7.747-6.726 2.102-7.927-1.74-13.691.061-1.921.601-2.582 1.861-2.281 2.824.9 2.881 8.407 10.025 18.976 6.723 10.568-3.303 12.67-13.452 11.769-16.333-.301-.963-1.564-1.623-3.485-1.022z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f48c.svg b/public/emoji/1f48c.svg index 966105d33..0734ecf23 100644 --- a/public/emoji/1f48c.svg +++ b/public/emoji/1f48c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#99AAB5" d="M11.949 17.636L.637 28.948c-.027.029-.037.064-.06.092.34.57.814 1.043 1.384 1.384.029-.023.063-.033.09-.06L13.365 19.05c.39-.391.39-1.023 0-1.414-.392-.391-1.024-.391-1.416 0M35.423 29.04c-.021-.028-.033-.063-.06-.09L24.051 17.636c-.392-.391-1.024-.391-1.415 0-.391.392-.391 1.024 0 1.414l11.313 11.314c.026.026.062.037.09.06.571-.34 1.044-.814 1.384-1.384"/><path fill="#99AAB5" d="M32 5H4C1.791 5 0 6.791 0 9v1.03l14.527 14.496c1.895 1.893 4.988 1.893 6.885 0L36 10.009V9c0-2.209-1.791-4-4-4"/><path fill="#E1E8ED" d="M32 5H4C2.412 5 1.051 5.934.405 7.275l14.766 14.767c1.562 1.562 4.096 1.562 5.657 0L35.595 7.275C34.949 5.934 33.589 5 32 5"/><path fill="#E75A70" d="M27 16.78c0-2.754-2.232-4.987-4.986-4.987-1.672 0-3.148.826-4.053 2.087-.906-1.261-2.381-2.087-4.051-2.087-2.754 0-4.987 2.233-4.987 4.987 0 .391.05.769.134 1.133.693 4.302 5.476 8.841 8.904 10.087 3.428-1.246 8.212-5.785 8.904-10.086.085-.365.135-.744.135-1.134z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#99AAB5" d="M11.949 17.636L.637 28.948c-.027.029-.037.064-.06.092.34.57.814 1.043 1.384 1.384.029-.023.063-.033.09-.06L13.365 19.05c.39-.391.39-1.023 0-1.414-.392-.391-1.024-.391-1.416 0M35.423 29.04c-.021-.028-.033-.063-.06-.09L24.051 17.636c-.392-.391-1.024-.391-1.415 0-.391.392-.391 1.024 0 1.414l11.313 11.314c.026.026.062.037.09.06.571-.34 1.044-.814 1.384-1.384"/><path fill="#99AAB5" d="M32 5H4C1.791 5 0 6.791 0 9v1.03l14.527 14.496c1.895 1.893 4.988 1.893 6.885 0L36 10.009V9c0-2.209-1.791-4-4-4"/><path fill="#E1E8ED" d="M32 5H4C2.412 5 1.051 5.934.405 7.275l14.766 14.767c1.562 1.562 4.096 1.562 5.657 0L35.595 7.275C34.949 5.934 33.589 5 32 5"/><path fill="#DD2E44" d="M27 16.78c0-2.754-2.232-4.987-4.986-4.987-1.672 0-3.148.826-4.053 2.087-.906-1.261-2.381-2.087-4.051-2.087-2.754 0-4.987 2.233-4.987 4.987 0 .391.05.769.134 1.133.693 4.302 5.476 8.841 8.904 10.087 3.428-1.246 8.212-5.785 8.904-10.086.085-.365.135-.744.135-1.134z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f48f.svg b/public/emoji/1f48f.svg index e3fe65293..8248ed607 100644 --- a/public/emoji/1f48f.svg +++ b/public/emoji/1f48f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M31 8.042c-6.626 0-12 5.373-12 12 0 6.626 5.374 12 12 12 1.787 0 3.476-.401 5-1.102V9.143c-1.524-.7-3.213-1.101-5-1.101z"/><path fill="#FFAC33" d="M20.667 15.042c.055.06.128.115.197.171.72.716 1.753 1.477 3.219 2.036 3.691 1.407 9.121.297 9.121.297s-.748-1.198-2.101-2.492c1.809.549 3.463 1.358 4.897 2.371v-9.25c-1.81-.904-3.843-1.426-6-1.429-6.508-.008-9.915 3.393-10.059 6.135-.176.085-.352.168-.531.265 0 0 .237.641.902 1.459.077.094.161.191.249.29.038.048.064.101.106.147z"/><path fill="#642116" d="M26 21.542c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm5 0c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm-4.995 4c.273-.003.495-.226.495-.5 0-.276-.224-.5-.5-.5-.602 0-1.5.399-1.5 1.5 0 .438.143.765.352 1-.209.235-.352.562-.352 1 0 1.101.898 1.5 1.5 1.5.273 0 .493-.22.496-.494.004-.273-.217-.499-.49-.506-.231-.006-.506-.098-.506-.5s.275-.494.5-.5h.011c.272-.006.489-.228.489-.5 0-.274-.222-.497-.495-.5-.23-.006-.505-.098-.505-.5 0-.403.274-.494.505-.5z"/><path fill="#FFAC33" d="M17.046 22.804c.015-.003.03-.005.044-.01.188-.055.328-.215.356-.412.261-1.897.124-3.785-.407-5.609C14.956 9.627 7.447 5.508.301 7.59c-.103.03-.199.073-.301.105V36h19.595c-2.291-5.75-2.539-10.675-2.549-13.196z"/><path fill="#FFDC5D" d="M16.687 22.728c-.079-.051-.151-.117-.192-.207-2.272-5.017-5.82-8.573-12.403-7.875 0 2.693-2.15 3.877-4.092 4.872V30.94c1.524.701 3.213 1.102 5 1.102 5.702 0 10.466-3.983 11.687-9.314z"/><path fill="#642116" d="M10 21.542c-.276 0-.5.224-.5.5s.224.5.5.5c1.977 0 2.5-1.636 2.5-2.5 0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503zm-2.5-1.5c0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503-.276 0-.5.224-.5.5s.224.5.5.5c1.977 0 2.5-1.636 2.5-2.5zm2.5 4.5c-.276 0-.5.224-.5.5 0 .274.222.497.495.5.23.006.505.098.505.5s-.274.494-.505.5c-.273.003-.495.226-.495.5 0 .272.218.494.489.5H10c.225.006.5.098.5.5s-.275.494-.506.5c-.273.007-.494.232-.49.506.003.274.223.494.496.494.602 0 1.5-.399 1.5-1.5 0-.438-.143-.765-.352-1 .209-.235.352-.562.352-1 0-1.101-.898-1.5-1.5-1.5z"/><path fill="#EA596E" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M31 8.042c-6.626 0-12 5.373-12 12 0 6.626 5.374 12 12 12 1.787 0 3.476-.401 5-1.102V9.143c-1.524-.7-3.213-1.101-5-1.101z"/><path fill="#FFAC33" d="M20.667 15.042c.055.06.128.115.197.171.72.716 1.753 1.477 3.219 2.036 3.691 1.407 9.121.297 9.121.297s-.748-1.198-2.101-2.492c1.809.549 3.463 1.358 4.897 2.371v-9.25c-1.81-.904-3.843-1.426-6-1.429-6.508-.008-9.915 3.393-10.059 6.135-.176.085-.352.168-.531.265 0 0 .237.641.902 1.459.077.094.161.191.249.29.038.048.064.101.106.147z"/><path fill="#642116" d="M26 21.542c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm5 0c-1.411 0-1.497-1.251-1.5-1.503-.001-.274-.225-.497-.5-.497-.276 0-.5.224-.5.5 0 .864.523 2.5 2.5 2.5.276 0 .5-.224.5-.5 0-.277-.224-.5-.5-.5zm-4.995 4c.273-.003.495-.226.495-.5 0-.276-.224-.5-.5-.5-.602 0-1.5.399-1.5 1.5 0 .438.143.765.352 1-.209.235-.352.562-.352 1 0 1.101.898 1.5 1.5 1.5.273 0 .493-.22.496-.494.004-.273-.217-.499-.49-.506-.231-.006-.506-.098-.506-.5s.275-.494.5-.5h.011c.272-.006.489-.228.489-.5 0-.274-.222-.497-.495-.5-.23-.006-.505-.098-.505-.5 0-.403.274-.494.505-.5z"/><path fill="#FFAC33" d="M17.046 22.804c.015-.003.03-.005.044-.01.188-.055.328-.215.356-.412.261-1.897.124-3.785-.407-5.609C14.956 9.627 7.447 5.508.301 7.59c-.103.03-.199.073-.301.105V36h19.595c-2.291-5.75-2.539-10.675-2.549-13.196z"/><path fill="#FFDC5D" d="M16.687 22.728c-.079-.051-.151-.117-.192-.207-2.272-5.017-5.82-8.573-12.403-7.875 0 2.693-2.15 3.877-4.092 4.872V30.94c1.524.701 3.213 1.102 5 1.102 5.702 0 10.466-3.983 11.687-9.314z"/><path fill="#642116" d="M10 21.542c-.276 0-.5.224-.5.5s.224.5.5.5c1.977 0 2.5-1.636 2.5-2.5 0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503zm-2.5-1.5c0-.276-.224-.5-.5-.5-.275 0-.499.223-.5.497-.003.252-.089 1.503-1.5 1.503-.276 0-.5.224-.5.5s.224.5.5.5c1.977 0 2.5-1.636 2.5-2.5zm2.5 4.5c-.276 0-.5.224-.5.5 0 .274.222.497.495.5.23.006.505.098.505.5s-.274.494-.505.5c-.273.003-.495.226-.495.5 0 .272.218.494.489.5H10c.225.006.5.098.5.5s-.275.494-.506.5c-.273.007-.494.232-.49.506.003.274.223.494.496.494.602 0 1.5-.399 1.5-1.5 0-.438-.143-.765-.352-1 .209-.235.352-.562.352-1 0-1.101-.898-1.5-1.5-1.5z"/><path fill="#DD2E44" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.751 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f491.svg b/public/emoji/1f491.svg index b01d6565e..ece280dc0 100644 --- a/public/emoji/1f491.svg +++ b/public/emoji/1f491.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M13.982 20H14v-9C14 4.925 9.075 0 3 0 1.956 0 .955.165 0 .44v31.037c.652.11 1.317.179 2 .179 6.511 0 11.799-5.189 11.982-11.656z"/><path fill="#9268CA" d="M11.431 27C11.287 26.984 0 27 0 27v9h15v-5c0-2.061-1.566-3.782-3.569-4z"/><path fill="#7450A8" d="M10 32h1v4h-1z"/><path fill="#FFDC5D" d="M0 8.018v22.204C.532 30.7 1.228 31 2 31c1.657 0 3-1.343 3-3v-2.523c3.494-1.237 6-4.56 6-8.477v-5.019c-5.92-.2-9.207-2.168-11-3.963z"/><path fill="#DF1F32" d="M0 22v1.637c.538.212 1.191.363 2 .363 1.413 0 2.369-.445 3-.915C5.707 22.558 6 22 6 22H0z"/><path fill="#C1694F" d="M3 19.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M6 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#FFAC33" d="M33 0c-6.075 0-11 4.925-11 11s4.925 11 11 11c1.041 0 2.045-.154 3-.425V.425C35.045.154 34.041 0 33 0z"/><path fill="#4289C1" d="M25 27c-2.209 0-4 1.791-4 4v5h15v-9H25z"/><path fill="#2A6797" d="M25 32h1v4h-1z"/><path fill="#FFDC5D" d="M36 11.28c-4.23-1.125-6.313-3.328-7.266-4.804-.42 1.804-1.438 4.699-3.734 5.369V17c0 .589.061 1.162.168 1.719.61 3.15 2.863 5.706 5.832 6.757V27l3 5 2-3.396V11.28z"/><path fill="#C1694F" d="M30 22s.293.558 1 1.085c.63.469 1.587.915 3 .915.809 0 1.462-.151 2-.363V22h-6zm5-2.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M30 16c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#E75A70" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.75 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M13.982 20H14v-9C14 4.925 9.075 0 3 0 1.956 0 .955.165 0 .44v31.037c.652.11 1.317.179 2 .179 6.511 0 11.799-5.189 11.982-11.656z"/><path fill="#9268CA" d="M11.431 27C11.287 26.984 0 27 0 27v9h15v-5c0-2.061-1.566-3.782-3.569-4z"/><path fill="#7450A8" d="M10 32h1v4h-1z"/><path fill="#FFDC5D" d="M0 8.018v22.204C.532 30.7 1.228 31 2 31c1.657 0 3-1.343 3-3v-2.523c3.494-1.237 6-4.56 6-8.477v-5.019c-5.92-.2-9.207-2.168-11-3.963z"/><path fill="#DF1F32" d="M0 22v1.637c.538.212 1.191.363 2 .363 1.413 0 2.369-.445 3-.915C5.707 22.558 6 22 6 22H0z"/><path fill="#C1694F" d="M3 19.5H1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M6 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#FFAC33" d="M33 0c-6.075 0-11 4.925-11 11s4.925 11 11 11c1.041 0 2.045-.154 3-.425V.425C35.045.154 34.041 0 33 0z"/><path fill="#4289C1" d="M25 27c-2.209 0-4 1.791-4 4v5h15v-9H25z"/><path fill="#2A6797" d="M25 32h1v4h-1z"/><path fill="#FFDC5D" d="M36 11.28c-4.23-1.125-6.313-3.328-7.266-4.804-.42 1.804-1.438 4.699-3.734 5.369V17c0 .589.061 1.162.168 1.719.61 3.15 2.863 5.706 5.832 6.757V27l3 5 2-3.396V11.28z"/><path fill="#C1694F" d="M30 22s.293.558 1 1.085c.63.469 1.587.915 3 .915.809 0 1.462-.151 2-.363V22h-6zm5-2.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M30 16c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#DD2E44" d="M26.539 4.711c0-2.602-2.11-4.711-4.711-4.711C20.249 0 18.855.78 18 1.972 17.144.78 15.75 0 14.172 0c-2.601 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.065 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.081-.344.128-.702.128-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f492.svg b/public/emoji/1f492.svg index 723eba8a2..974ddac8f 100644 --- a/public/emoji/1f492.svg +++ b/public/emoji/1f492.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BCBEC0" d="M20 2h-1V1c0-.552-.447-1-1-1s-1 .448-1 1v1h-1c-.553 0-1 .448-1 1s.447 1 1 1h1v6c0 .552.447 1 1 1s1-.448 1-1V4h1c.553 0 1-.448 1-1s-.447-1-1-1z"/><path fill="#F4ABBA" d="M18 9l-5.143 4H13v9h10v-9h.143z"/><path fill="#662113" d="M19.999 15c0-1.104-.896-2-1.999-2-1.105 0-2 .896-2 2v7h4l-.001-7z"/><path fill="#F4ABBA" d="M17.999 18L4 26v9c0 .553.448 1 1 1h26c.553 0 1-.447 1-1v-9l-14.001-8z"/><path fill="#DD2E44" d="M31.998 27c-.168 0-.339-.042-.495-.132l-13.504-7.717-13.504 7.717c-.478.276-1.09.107-1.364-.372s-.107-1.09.372-1.364l14-8c.308-.176.685-.176.992 0l14 8c.48.274.647.885.372 1.364-.184.323-.521.504-.869.504zm-8.999-13c-.219 0-.439-.072-.624-.219l-4.376-3.5-4.374 3.5c-.432.343-1.061.275-1.406-.156-.345-.432-.275-1.061.156-1.406l4.999-4c.365-.292.884-.292 1.25 0l5.001 4c.431.345.501.974.156 1.405-.198.247-.488.376-.782.376z"/><path fill="#662113" d="M12.999 31c0-1.104-.895-2-1.999-2-1.105 0-2 .896-2 2v5h4v-5h-.001zm7-2c0-1.104-.896-2-1.999-2-1.105 0-2 .896-2 2v7h4l-.001-7zm7 2c0-1.104-.896-2-1.999-2-1.105 0-2 .896-2 2v5h4l-.001-5z"/><path fill="#EA596E" d="M1 6c0-2.761 3.963-4 5 0 1.121-4 5-2.761 5 0 0 3-5 6-5 6S1 9 1 6zm24 0c0-2.761 3.963-4 5 0 1.121-4 5-2.761 5 0 0 3-5 6-5 6s-5-3-5-6z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BCBEC0" d="M20 2h-1V1c0-.552-.447-1-1-1s-1 .448-1 1v1h-1c-.553 0-1 .448-1 1s.447 1 1 1h1v6c0 .552.447 1 1 1s1-.448 1-1V4h1c.553 0 1-.448 1-1s-.447-1-1-1z"/><path fill="#F4ABBA" d="M18 9l-5.143 4H13v9h10v-9h.143z"/><path fill="#662113" d="M19.999 15c0-1.104-.896-2-1.999-2-1.105 0-2 .896-2 2v7h4l-.001-7z"/><path fill="#F4ABBA" d="M17.999 18L4 26v9c0 .553.448 1 1 1h26c.553 0 1-.447 1-1v-9l-14.001-8z"/><path fill="#DD2E44" d="M31.998 27c-.168 0-.339-.042-.495-.132l-13.504-7.717-13.504 7.717c-.478.276-1.09.107-1.364-.372s-.107-1.09.372-1.364l14-8c.308-.176.685-.176.992 0l14 8c.48.274.647.885.372 1.364-.184.323-.521.504-.869.504zm-8.999-13c-.219 0-.439-.072-.624-.219l-4.376-3.5-4.374 3.5c-.432.343-1.061.275-1.406-.156-.345-.432-.275-1.061.156-1.406l4.999-4c.365-.292.884-.292 1.25 0l5.001 4c.431.345.501.974.156 1.405-.198.247-.488.376-.782.376z"/><path fill="#662113" d="M12.999 31c0-1.104-.895-2-1.999-2-1.105 0-2 .896-2 2v5h4v-5h-.001zm7-2c0-1.104-.896-2-1.999-2-1.105 0-2 .896-2 2v7h4l-.001-7zm7 2c0-1.104-.896-2-1.999-2-1.105 0-2 .896-2 2v5h4l-.001-5z"/><path fill="#DD2E44" d="M1 6c0-2.761 3.963-4 5 0 1.121-4 5-2.761 5 0 0 3-5 6-5 6S1 9 1 6zm24 0c0-2.761 3.963-4 5 0 1.121-4 5-2.761 5 0 0 3-5 6-5 6s-5-3-5-6z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f493.svg b/public/emoji/1f493.svg index 79d69c61f..404a6e769 100644 --- a/public/emoji/1f493.svg +++ b/public/emoji/1f493.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E75A70" d="M33.885 15.764c0-4.841-3.924-8.764-8.764-8.764-2.938 0-5.53 1.45-7.121 3.667C16.41 8.45 13.816 7 10.879 7c-4.84 0-8.764 3.923-8.764 8.764 0 .685.087 1.35.236 1.99C3.568 25.315 11.975 33.292 18 35.482c6.024-2.19 14.432-10.167 15.647-17.728.151-.64.238-1.304.238-1.99z"/><path fill="#FDCB58" d="M1.499 11.042c-.15 0-.303-.034-.446-.106-.494-.247-.694-.848-.447-1.342 1.016-2.031 3.793-5.195 7.283-5.588.549-.061 1.043.333 1.105.882.062.549-.333 1.044-.882 1.106-2.679.302-4.928 2.917-5.717 4.495-.176.35-.529.553-.896.553zm-.458-5.417c-.193 0-.388-.056-.56-.172-.457-.31-.577-.932-.267-1.389.936-1.381 2.895-2.909 4.682-3.021.552-.043 1.025.385 1.06.936.035.551-.384 1.026-.935 1.061-.961.06-2.404 1.042-3.151 2.146-.194.285-.509.439-.829.439zm33.46 5.417c-.367 0-.72-.202-.896-.553-.789-1.578-3.039-4.193-5.718-4.495-.549-.062-.943-.557-.882-1.106.062-.548.549-.945 1.106-.882 3.489.393 6.267 3.557 7.282 5.588.247.494.047 1.095-.447 1.342-.143.072-.295.106-.445.106zm.458-5.417c-.32 0-.636-.154-.829-.439-.747-1.104-2.19-2.086-3.151-2.146-.551-.035-.97-.509-.935-1.061.034-.552.51-.981 1.06-.936 1.788.112 3.747 1.64 4.683 3.021.31.457.19 1.079-.268 1.389-.172.116-.366.172-.56.172z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M33.885 15.764c0-4.841-3.924-8.764-8.764-8.764-2.938 0-5.53 1.45-7.121 3.667C16.41 8.45 13.816 7 10.879 7c-4.84 0-8.764 3.923-8.764 8.764 0 .685.087 1.35.236 1.99C3.568 25.315 11.975 33.292 18 35.482c6.024-2.19 14.432-10.167 15.647-17.728.151-.64.238-1.304.238-1.99z"/><path fill="#FDCB58" d="M1.499 11.042c-.15 0-.303-.034-.446-.106-.494-.247-.694-.848-.447-1.342 1.016-2.031 3.793-5.195 7.283-5.588.549-.061 1.043.333 1.105.882.062.549-.333 1.044-.882 1.106-2.679.302-4.928 2.917-5.717 4.495-.176.35-.529.553-.896.553zm-.458-5.417c-.193 0-.388-.056-.56-.172-.457-.31-.577-.932-.267-1.389.936-1.381 2.895-2.909 4.682-3.021.552-.043 1.025.385 1.06.936.035.551-.384 1.026-.935 1.061-.961.06-2.404 1.042-3.151 2.146-.194.285-.509.439-.829.439zm33.46 5.417c-.367 0-.72-.202-.896-.553-.789-1.578-3.039-4.193-5.718-4.495-.549-.062-.943-.557-.882-1.106.062-.548.549-.945 1.106-.882 3.489.393 6.267 3.557 7.282 5.588.247.494.047 1.095-.447 1.342-.143.072-.295.106-.445.106zm.458-5.417c-.32 0-.636-.154-.829-.439-.747-1.104-2.19-2.086-3.151-2.146-.551-.035-.97-.509-.935-1.061.034-.552.51-.981 1.06-.936 1.788.112 3.747 1.64 4.683 3.021.31.457.19 1.079-.268 1.389-.172.116-.366.172-.56.172z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f494.svg b/public/emoji/1f494.svg index 697ecc6a9..d50c77047 100644 --- a/public/emoji/1f494.svg +++ b/public/emoji/1f494.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E75A70"><path d="M13.589 26.521c-.297-.495-.284-1.117.035-1.599l4.395-6.646-5.995-5.139c-.556-.476-.686-1.283-.31-1.911l4.304-7.172c-1.669-1.301-3.755-2.09-6.035-2.09-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c.025-.009.052-.022.077-.032l-4.488-7.481z"/><path d="M26.018 1.966c-2.765 0-5.248 1.151-7.037 2.983l-4.042 6.737 6.039 5.176c.574.492.691 1.335.274 1.966l-4.604 6.962 4.161 6.935c6.338-3.529 13.621-11.263 14.809-18.649.17-.721.268-1.469.268-2.241-.001-5.452-4.419-9.869-9.868-9.869z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#DD2E44"><path d="M13.589 26.521c-.297-.495-.284-1.117.035-1.599l4.395-6.646-5.995-5.139c-.556-.476-.686-1.283-.31-1.911l4.304-7.172c-1.669-1.301-3.755-2.09-6.035-2.09-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c.025-.009.052-.022.077-.032l-4.488-7.481z"/><path d="M26.018 1.966c-2.765 0-5.248 1.151-7.037 2.983l-4.042 6.737 6.039 5.176c.574.492.691 1.335.274 1.966l-4.604 6.962 4.161 6.935c6.338-3.529 13.621-11.263 14.809-18.649.17-.721.268-1.469.268-2.241-.001-5.452-4.419-9.869-9.868-9.869z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f495.svg b/public/emoji/1f495.svg index 724469b8e..b4b3216f3 100644 --- a/public/emoji/1f495.svg +++ b/public/emoji/1f495.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E75A70" d="M24.77 19.715c0-3.757-3.045-6.801-6.801-6.801-2.28 0-4.292 1.125-5.526 2.845-1.234-1.72-3.247-2.845-5.526-2.845-3.756 0-6.801 3.044-6.801 6.801 0 .531.067 1.049.183 1.545.945 5.867 7.468 12.059 12.144 13.758 4.675-1.699 11.2-7.891 12.142-13.756.117-.498.185-1.016.185-1.547zM35.885 5.693c0-2.602-2.109-4.711-4.711-4.711-1.579 0-2.973.78-3.828 1.972-.855-1.191-2.249-1.972-3.827-1.972-2.602 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.064 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.08-.344.127-.702.127-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M24.77 19.715c0-3.757-3.045-6.801-6.801-6.801-2.28 0-4.292 1.125-5.526 2.845-1.234-1.72-3.247-2.845-5.526-2.845-3.756 0-6.801 3.044-6.801 6.801 0 .531.067 1.049.183 1.545.945 5.867 7.468 12.059 12.144 13.758 4.675-1.699 11.2-7.891 12.142-13.756.117-.498.185-1.016.185-1.547zM35.885 5.693c0-2.602-2.109-4.711-4.711-4.711-1.579 0-2.973.78-3.828 1.972-.855-1.191-2.249-1.972-3.827-1.972-2.602 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.064 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.08-.344.127-.702.127-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f496.svg b/public/emoji/1f496.svg index d5da4b4f6..aa3abbca7 100644 --- a/public/emoji/1f496.svg +++ b/public/emoji/1f496.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E75A70" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/><path fill="#FDCB58" d="M34.347 23.894l-3.824-1.416-1.416-3.824c-.145-.394-.52-.654-.938-.654-.418 0-.793.26-.938.653l-1.416 3.824-3.824 1.416c-.393.144-.653.519-.653.938 0 .418.261.793.653.938l3.824 1.416 1.416 3.824c.145.393.52.653.938.653.418 0 .793-.261.938-.653l1.416-3.824 3.824-1.416c.392-.145.653-.52.653-.938 0-.418-.261-.793-.653-.937zm-23-16.001l-2.365-.875-.875-2.365C7.961 4.26 7.587 4 7.169 4c-.419 0-.793.26-.938.653l-.876 2.365-2.364.875c-.393.146-.653.52-.653.938 0 .418.26.792.653.938l2.365.875.875 2.365c.146.393.52.653.938.653.418 0 .792-.26.938-.653l.875-2.365 2.365-.875c.393-.146.653-.519.653-.938 0-.418-.26-.792-.653-.938z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/><path fill="#FDCB58" d="M34.347 23.894l-3.824-1.416-1.416-3.824c-.145-.394-.52-.654-.938-.654-.418 0-.793.26-.938.653l-1.416 3.824-3.824 1.416c-.393.144-.653.519-.653.938 0 .418.261.793.653.938l3.824 1.416 1.416 3.824c.145.393.52.653.938.653.418 0 .793-.261.938-.653l1.416-3.824 3.824-1.416c.392-.145.653-.52.653-.938 0-.418-.261-.793-.653-.937zm-23-16.001l-2.365-.875-.875-2.365C7.961 4.26 7.587 4 7.169 4c-.419 0-.793.26-.938.653l-.876 2.365-2.364.875c-.393.146-.653.52-.653.938 0 .418.26.792.653.938l2.365.875.875 2.365c.146.393.52.653.938.653.418 0 .792-.26.938-.653l.875-2.365 2.365-.875c.393-.146.653-.519.653-.938 0-.418-.26-.792-.653-.938z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f497.svg b/public/emoji/1f497.svg index 1808f480b..295f9d48e 100644 --- a/public/emoji/1f497.svg +++ b/public/emoji/1f497.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F2ABBA" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/><path fill="#E75A70" d="M31.423 13.372c0-4.091-3.315-7.406-7.405-7.406-2.482 0-4.673 1.225-6.018 3.099-1.344-1.874-3.535-3.099-6.017-3.099-4.09 0-7.406 3.315-7.406 7.406 0 .579.074 1.141.199 1.681C5.805 21.442 12.908 28.184 18 30.034c5.091-1.851 12.195-8.592 13.223-14.98.127-.541.2-1.103.2-1.682z"/><path fill="#BB1A34" d="M27.191 14.831c0-2.801-2.27-5.072-5.07-5.072-1.7 0-3.2.839-4.121 2.123-.92-1.284-2.421-2.123-4.121-2.123-2.801 0-5.072 2.271-5.072 5.072 0 .397.05.781.136 1.151.705 4.376 5.569 8.992 9.056 10.259 3.485-1.268 8.352-5.884 9.055-10.259.088-.37.137-.755.137-1.151z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4ABBA" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/><path fill="#EA596E" d="M31.423 13.372c0-4.091-3.315-7.406-7.405-7.406-2.482 0-4.673 1.225-6.018 3.099-1.344-1.874-3.535-3.099-6.017-3.099-4.09 0-7.406 3.315-7.406 7.406 0 .579.074 1.141.199 1.681C5.805 21.442 12.908 28.184 18 30.034c5.091-1.851 12.195-8.592 13.223-14.98.127-.541.2-1.103.2-1.682z"/><path fill="#DD2E44" d="M27.191 14.831c0-2.801-2.27-5.072-5.07-5.072-1.7 0-3.2.839-4.121 2.123-.92-1.284-2.421-2.123-4.121-2.123-2.801 0-5.072 2.271-5.072 5.072 0 .397.05.781.136 1.151.705 4.376 5.569 8.992 9.056 10.259 3.485-1.268 8.352-5.884 9.055-10.259.088-.37.137-.755.137-1.151z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f498.svg b/public/emoji/1f498.svg index 8fdd3155a..32d819fe4 100644 --- a/public/emoji/1f498.svg +++ b/public/emoji/1f498.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M16.13 17.444L2.129 3.445c-.391-.39 1.023-1.804 1.414-1.415l14.001 14c.391.391-1.219 1.61-1.414 1.414z"/><path fill="#E75A70" d="M34.197 14.488c0-4.841-3.924-8.764-8.764-8.764-2.938 0-5.53 1.45-7.121 3.667-1.59-2.217-4.184-3.667-7.121-3.667-4.84 0-8.764 3.923-8.764 8.764 0 .686.087 1.351.236 1.99 1.217 7.562 9.624 15.538 15.649 17.729 6.024-2.19 14.432-10.167 15.647-17.728.151-.64.238-1.305.238-1.991z"/><path fill="#5DADEC" d="M34.648 25.764s-4.509-4.45-6.41-4.45l-5.657-.009-1.195 1.195.009 5.657c0 1.901 4.45 6.41 4.45 6.41.858.787 1.925 1.204 2.695 1.204.634 0 1.14-.276 1.505-.775.31-.427.426-.992.426-1.682 0-1.254-.556-2.864-1.39-4.313 1.449.833 3.059 1.39 4.313 1.39.689 0 1.255-.116 1.682-.426.499-.365.775-.871.775-1.505.001-.771-.416-1.837-1.203-2.696z"/><path fill="#2A6797" d="M31.569 32.542c-.256 0-.487-.122-.683-.317L17.497 18.827c-.391-.391 1.023-1.805 1.414-1.415l13.39 13.399c.391.391.378 1.036-.013 1.427-.194.194-.462.304-.719.304zM.161 1.123c0-.259.101-.511.286-.701.248-.252.611-.355.955-.27l6.541 1.625c.452.113.73.521.759.989-.009.465-.337.864-.793.961-.144.031-3.636.833-4.005 4.051-.055.477-.44.848-.92.883-.478.036-.915-.274-1.039-.738L.195 1.381C.172 1.296.161 1.21.161 1.123z"/><path fill="#DA2F47" d="M22.184 16.015c-.031.487-.415.89-.916.931-3.268.269-3.75 2.12-4.217 3.91l-.108.411c-.147.533-.697.846-1.229.7-.532-.147-.843-.694-.7-1.229l.103-.386c.489-1.875 1.306-5.013 5.988-5.399.551-.045 1.034.364 1.079.914.003.051.003.1 0 .148z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M16.13 17.444L2.129 3.445c-.391-.39 1.023-1.804 1.414-1.415l14.001 14c.391.391-1.219 1.61-1.414 1.414z"/><path fill="#DD2E44" d="M34.197 14.488c0-4.841-3.924-8.764-8.764-8.764-2.938 0-5.53 1.45-7.121 3.667-1.59-2.217-4.184-3.667-7.121-3.667-4.84 0-8.764 3.923-8.764 8.764 0 .686.087 1.351.236 1.99 1.217 7.562 9.624 15.538 15.649 17.729 6.024-2.19 14.432-10.167 15.647-17.728.151-.64.238-1.305.238-1.991z"/><path fill="#FFCC4D" d="M34.648 25.764s-4.509-4.45-6.41-4.45l-5.657-.009-1.195 1.195.009 5.657c0 1.901 4.45 6.41 4.45 6.41.858.787 1.925 1.204 2.695 1.204.634 0 1.14-.276 1.505-.775.31-.427.426-.992.426-1.682 0-1.254-.556-2.864-1.39-4.313 1.449.833 3.059 1.39 4.313 1.39.689 0 1.255-.116 1.682-.426.499-.365.775-.871.775-1.505.001-.771-.416-1.837-1.203-2.696z"/><path fill="#FFAC33" d="M31.569 32.542c-.256 0-.487-.122-.683-.317L17.497 18.827c-.391-.391 1.023-1.805 1.414-1.415l13.39 13.399c.391.391.378 1.036-.013 1.427-.194.194-.462.304-.719.304z"/><path fill="#FFCC4D" d="M.161 1.123c0-.259.101-.511.286-.701.248-.252.611-.355.955-.27l6.541 1.625c.452.113.73.521.759.989-.009.465-.337.864-.793.961-.144.031-3.636.833-4.005 4.051-.055.477-.44.848-.92.883-.478.036-.915-.274-1.039-.738L.195 1.381C.172 1.296.161 1.21.161 1.123z"/><path fill="#A0041E" d="M22.184 16.015c-.031.487-.415.89-.916.931-3.268.269-3.75 2.12-4.217 3.91l-.108.411c-.147.533-.697.846-1.229.7-.532-.147-.843-.694-.7-1.229l.103-.386c.489-1.875 1.306-5.013 5.988-5.399.551-.045 1.034.364 1.079.914.003.051.003.1 0 .148z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f49d.svg b/public/emoji/1f49d.svg index 72f8e7afa..5db2632ff 100644 --- a/public/emoji/1f49d.svg +++ b/public/emoji/1f49d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E75A70" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/><path fill="#FDD888" d="M36 15c-1 5-4 8-4 8H4s-3-3-4-8h36z"/><path fill="#FDD888" d="M14 18v18l-5-5-5 5V18z"/><path fill="#FDCB58" d="M16.802 9.194l-7.879 5.515-7.878-5.515C.47 8.792 0 9.036 0 9.738v14.658c0 .703.48.965 1.069.582l7.854-5.106 7.854 5.106c.588.383 1.069.121 1.069-.582V9.738c.001-.702-.47-.946-1.044-.544z"/><circle fill="#FDD888" cx="9" cy="17" r="4"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/><path fill="#FDD888" d="M36 15c-1 5-4 8-4 8H4s-3-3-4-8h36z"/><path fill="#FDD888" d="M14 18v18l-5-5-5 5V18z"/><path fill="#FDCB58" d="M16.802 9.194l-7.879 5.515-7.878-5.515C.47 8.792 0 9.036 0 9.738v14.658c0 .703.48.965 1.069.582l7.854-5.106 7.854 5.106c.588.383 1.069.121 1.069-.582V9.738c.001-.702-.47-.946-1.044-.544z"/><circle fill="#FDD888" cx="9" cy="17" r="4"/></svg> \ No newline at end of file diff --git a/public/emoji/1f49e.svg b/public/emoji/1f49e.svg index f61f1276c..b9459b7d5 100644 --- a/public/emoji/1f49e.svg +++ b/public/emoji/1f49e.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F2ABBA" d="M35.977 16.672c-.25 4.574-8.194 8.248-17.977 8.248-3.285 0-6.352-.422-9-1.145v3.588c2.65 1.023 5.718 1.619 9 1.619 9.941 0 18-5.373 18-12 0-.104-.02-.207-.023-.31zM27 6.6c-2.646-1.024-5.717-1.617-9-1.617-9.018 0-16.465 4.426-17.774 10.194C1.535 11.106 8.982 7.982 18 7.982c3.283 0 6.354.418 9 1.142V6.6z"/><path fill="#E75A70" d="M24.77 19.715c0-3.757-3.045-6.801-6.801-6.801-2.28 0-4.292 1.125-5.526 2.845-1.234-1.72-3.247-2.845-5.526-2.845-3.756 0-6.801 3.044-6.801 6.801 0 .531.067 1.049.183 1.545.945 5.867 7.468 12.059 12.144 13.758 4.675-1.699 11.2-7.891 12.142-13.756.117-.498.185-1.016.185-1.547zM35.885 5.693c0-2.602-2.109-4.711-4.711-4.711-1.579 0-2.973.78-3.828 1.972-.855-1.191-2.249-1.972-3.827-1.972-2.602 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.064 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.08-.344.127-.702.127-1.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4ABBA" d="M35.977 16.672c-.25 4.574-8.194 8.248-17.977 8.248-3.285 0-6.352-.422-9-1.145v3.588c2.65 1.023 5.718 1.619 9 1.619 9.941 0 18-5.373 18-12 0-.104-.02-.207-.023-.31zM27 6.6c-2.646-1.024-5.717-1.617-9-1.617-9.018 0-16.465 4.426-17.774 10.194C1.535 11.106 8.982 7.982 18 7.982c3.283 0 6.354.418 9 1.142V6.6z"/><path fill="#DD2E44" d="M24.77 19.715c0-3.757-3.045-6.801-6.801-6.801-2.28 0-4.292 1.125-5.526 2.845-1.234-1.72-3.247-2.845-5.526-2.845-3.756 0-6.801 3.044-6.801 6.801 0 .531.067 1.049.183 1.545.945 5.867 7.468 12.059 12.144 13.758 4.675-1.699 11.2-7.891 12.142-13.756.117-.498.185-1.016.185-1.547zM35.885 5.693c0-2.602-2.109-4.711-4.711-4.711-1.579 0-2.973.78-3.828 1.972-.855-1.191-2.249-1.972-3.827-1.972-2.602 0-4.711 2.109-4.711 4.711 0 .369.047.727.127 1.07.654 4.064 5.173 8.353 8.411 9.529 3.238-1.177 7.758-5.465 8.412-9.528.08-.344.127-.702.127-1.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f49f.svg b/public/emoji/1f49f.svg index 66fa36112..71adb414f 100644 --- a/public/emoji/1f49f.svg +++ b/public/emoji/1f49f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E75A70" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#F5F8FA" d="M31.885 13.764c0-4.231-3.43-7.661-7.66-7.661-2.567 0-4.834 1.268-6.225 3.206-1.39-1.938-3.657-3.206-6.224-3.206-4.231 0-7.661 3.43-7.661 7.661 0 .6.076 1.18.206 1.74C5.385 22.113 12.733 29.085 18 31c5.266-1.915 12.614-8.887 13.678-15.496.131-.56.207-1.14.207-1.74z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#F5F8FA" d="M31.885 13.764c0-4.231-3.43-7.661-7.66-7.661-2.567 0-4.834 1.268-6.225 3.206-1.39-1.938-3.657-3.206-6.224-3.206-4.231 0-7.661 3.43-7.661 7.661 0 .6.076 1.18.206 1.74C5.385 22.113 12.733 29.085 18 31c5.266-1.915 12.614-8.887 13.678-15.496.131-.56.207-1.14.207-1.74z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4a3.svg b/public/emoji/1f4a3.svg index d18d8a2e2..feb2c9d29 100644 --- a/public/emoji/1f4a3.svg +++ b/public/emoji/1f4a3.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M24.187 9.657l5.658-5.654L32 6.16l-5.658 5.655z"/><circle fill="#292F33" cx="14" cy="22" r="14"/><path fill="#292F33" d="M19 11.342l5.658-5.657 5.657 5.658L24.657 17z"/><circle fill="#F18F26" cx="32" cy="4" r="4"/><circle fill="#FDCB58" cx="32" cy="4" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M24.187 9.657l5.658-5.654L32 6.16l-5.658 5.655z"/><circle fill="#31373D" cx="14" cy="22" r="14"/><path fill="#31373D" d="M19 11.342l5.658-5.657 5.657 5.658L24.657 17z"/><circle fill="#F18F26" cx="32" cy="4" r="4"/><circle fill="#FDCB58" cx="32" cy="4" r="2"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4be.svg b/public/emoji/1f4be.svg index addfae6f4..7c9762695 100644 --- a/public/emoji/1f4be.svg +++ b/public/emoji/1f4be.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M4 36s-4 0-4-4V4s0-4 4-4h26c1 0 2 1 2 1l3 3s1 1 1 2v26s0 4-4 4H4z"/><path fill="#55ACEE" d="M5 19v-1s0-2 2-2h21c2 0 2 2 2 2v1H5z"/><path fill="#E1E8ED" d="M5 32.021V19h25v13s0 2-2 2H7c-2 0-2-1.979-2-1.979zM10 3s0-1 1-1h18c1.048 0 1 1 1 1v10s0 1-1 1H11s-1 0-1-1V3zm12 10h5V3h-5v10z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M4 36s-4 0-4-4V4s0-4 4-4h26c1 0 2 1 2 1l3 3s1 1 1 2v26s0 4-4 4H4z"/><path fill="#55ACEE" d="M5 19v-1s0-2 2-2h21c2 0 2 2 2 2v1H5z"/><path fill="#E1E8ED" d="M5 32.021V19h25v13s0 2-2 2H7c-2 0-2-1.979-2-1.979zM10 3s0-1 1-1h18c1.048 0 1 1 1 1v10s0 1-1 1H11s-1 0-1-1V3zm12 10h5V3h-5v10z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4de.svg b/public/emoji/1f4de.svg index 5ace10d4a..cfaf7ca8f 100644 --- a/public/emoji/1f4de.svg +++ b/public/emoji/1f4de.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M34.06 26.407l-3.496-3.496c-1.93-1.93-5.06-1.93-6.989 0-.719.718-1.167 1.603-1.351 2.528-5.765-1.078-11.372-6.662-11.721-11.653.947-.176 1.854-.627 2.586-1.36 1.93-1.93 1.93-5.06 0-6.99L9.594 1.94c-1.93-1.93-5.06-1.93-6.99 0-10.486 10.486 20.97 41.942 31.456 31.456 1.929-1.929 1.929-5.059 0-6.989z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M34.06 26.407l-3.496-3.496c-1.93-1.93-5.06-1.93-6.989 0-.719.718-1.167 1.603-1.351 2.528-5.765-1.078-11.372-6.662-11.721-11.653.947-.176 1.854-.627 2.586-1.36 1.93-1.93 1.93-5.06 0-6.99L9.594 1.94c-1.93-1.93-5.06-1.93-6.99 0-10.486 10.486 20.97 41.942 31.456 31.456 1.929-1.929 1.929-5.059 0-6.989z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4df.svg b/public/emoji/1f4df.svg index f4f240fdb..d7d4b5fa5 100644 --- a/public/emoji/1f4df.svg +++ b/public/emoji/1f4df.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#C6E5B3" d="M34 21c0 1.104-.896 2-2 2H4c-1.104 0-2-.896-2-2V9c0-1.104.896-2 2-2h28c1.104 0 2 .896 2 2v12z"/><path fill="#66757F" d="M14 27c0 1.104-.896 2-2 2H4c-1.104 0-2-.896-2-2s.896-2 2-2h8c1.104 0 2 .896 2 2zm14 0c0 1.104-.896 2-2 2h-8c-1.104 0-2-.896-2-2s.896-2 2-2h8c1.104 0 2 .896 2 2z"/><circle fill="#DD2E44" cx="32" cy="27" r="2"/><path d="M24.616 16.138c-.291 0-.416-.196-.416-.351 0-.131.048-.202.083-.262l1.332-2.414c.131-.238.297-.345.606-.345.345 0 .684.22.684.761v1.826h.101c.232 0 .416.155.416.393 0 .238-.184.392-.416.392h-.101v.506c0 .315-.125.464-.428.464s-.428-.149-.428-.464v-.506h-1.433zm1.433-2.444h-.012l-.803 1.659h.815v-1.659zm-5.744 1.171c0-.961.372-2.17 1.563-2.17 1.192 0 1.563 1.209 1.563 2.17s-.372 2.171-1.563 2.171c-1.191 0-1.563-1.209-1.563-2.171zm2.206 0c0-.448-.041-1.368-.643-1.368s-.643.92-.643 1.368c0 .419.041 1.368.643 1.368.602.001.643-.949.643-1.368zm-5.781 1.201c-.291 0-.416-.196-.416-.351 0-.131.048-.202.083-.262l1.332-2.414c.131-.238.297-.345.606-.345.345 0 .684.22.684.761v1.826h.101c.232 0 .416.155.416.393 0 .238-.184.392-.416.392h-.101v.506c0 .315-.125.464-.428.464s-.428-.149-.428-.464v-.506H16.73zm1.433-2.444h-.012l-.803 1.659h.815v-1.659zm-5.744 1.315c0-.961.372-2.17 1.563-2.17 1.192 0 1.563 1.209 1.563 2.17s-.372 2.171-1.563 2.171c-1.191-.001-1.563-1.21-1.563-2.171zm2.206 0c0-.448-.041-1.368-.643-1.368s-.643.92-.643 1.368c0 .419.041 1.368.643 1.368s.643-.95.643-1.368zm-5.781 1.201c-.291 0-.416-.196-.416-.351 0-.131.048-.202.083-.262l1.332-2.414c.131-.238.297-.345.606-.345.345 0 .684.22.684.761v1.826h.101c.232 0 .416.155.416.393 0 .238-.184.392-.416.392h-.101v.506c0 .315-.125.464-.428.464s-.428-.149-.428-.464v-.506H8.844zm1.433-2.444h-.012l-.803 1.659h.815v-1.659z" fill="#77B255"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V9c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v18z"/><path fill="#C6E5B3" d="M34 21c0 1.104-.896 2-2 2H4c-1.104 0-2-.896-2-2V9c0-1.104.896-2 2-2h28c1.104 0 2 .896 2 2v12z"/><path fill="#66757F" d="M14 27c0 1.104-.896 2-2 2H4c-1.104 0-2-.896-2-2s.896-2 2-2h8c1.104 0 2 .896 2 2zm14 0c0 1.104-.896 2-2 2h-8c-1.104 0-2-.896-2-2s.896-2 2-2h8c1.104 0 2 .896 2 2z"/><circle fill="#DD2E44" cx="32" cy="27" r="2"/><path d="M24.616 16.138c-.291 0-.416-.196-.416-.351 0-.131.048-.202.083-.262l1.332-2.414c.131-.238.297-.345.606-.345.345 0 .684.22.684.761v1.826h.101c.232 0 .416.155.416.393 0 .238-.184.392-.416.392h-.101v.506c0 .315-.125.464-.428.464s-.428-.149-.428-.464v-.506h-1.433zm1.433-2.444h-.012l-.803 1.659h.815v-1.659zm-5.744 1.171c0-.961.372-2.17 1.563-2.17 1.192 0 1.563 1.209 1.563 2.17s-.372 2.171-1.563 2.171c-1.191 0-1.563-1.209-1.563-2.171zm2.206 0c0-.448-.041-1.368-.643-1.368s-.643.92-.643 1.368c0 .419.041 1.368.643 1.368.602.001.643-.949.643-1.368zm-5.781 1.201c-.291 0-.416-.196-.416-.351 0-.131.048-.202.083-.262l1.332-2.414c.131-.238.297-.345.606-.345.345 0 .684.22.684.761v1.826h.101c.232 0 .416.155.416.393 0 .238-.184.392-.416.392h-.101v.506c0 .315-.125.464-.428.464s-.428-.149-.428-.464v-.506H16.73zm1.433-2.444h-.012l-.803 1.659h.815v-1.659zm-5.744 1.315c0-.961.372-2.17 1.563-2.17 1.192 0 1.563 1.209 1.563 2.17s-.372 2.171-1.563 2.171c-1.191-.001-1.563-1.21-1.563-2.171zm2.206 0c0-.448-.041-1.368-.643-1.368s-.643.92-.643 1.368c0 .419.041 1.368.643 1.368s.643-.95.643-1.368zm-5.781 1.201c-.291 0-.416-.196-.416-.351 0-.131.048-.202.083-.262l1.332-2.414c.131-.238.297-.345.606-.345.345 0 .684.22.684.761v1.826h.101c.232 0 .416.155.416.393 0 .238-.184.392-.416.392h-.101v.506c0 .315-.125.464-.428.464s-.428-.149-.428-.464v-.506H8.844zm1.433-2.444h-.012l-.803 1.659h.815v-1.659z" fill="#77B255"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4f1.svg b/public/emoji/1f4f1.svg index a96e40b8c..81c4e99cb 100644 --- a/public/emoji/1f4f1.svg +++ b/public/emoji/1f4f1.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 36s-4 0-4-4V4s0-4 4-4h14s4 0 4 4v28s0 4-4 4H11z"/><path fill="#55ACEE" d="M9 5h18v26H9z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M11 36s-4 0-4-4V4s0-4 4-4h14s4 0 4 4v28s0 4-4 4H11z"/><path fill="#55ACEE" d="M9 5h18v26H9z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4f2.svg b/public/emoji/1f4f2.svg index a73e8a6cb..82f5293e7 100644 --- a/public/emoji/1f4f2.svg +++ b/public/emoji/1f4f2.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18 36s-4 0-4-4V4s0-4 4-4h14s4 0 4 4v28s0 4-4 4H18z"/><path fill="#55ACEE" d="M16 5h18v26H16zm-3 11s1 1 1 2-1 2-1 2l-5 5c-1 1-3 1-3-1v-3H2s-2 0-2-2v-2c0-2 2-2 2-2h3v-3c0-2 2-2 3-1l5 5z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M18 36s-4 0-4-4V4s0-4 4-4h14s4 0 4 4v28s0 4-4 4H18z"/><path fill="#55ACEE" d="M16 5h18v26H16zm-3 11s1 1 1 2-1 2-1 2l-5 5c-1 1-3 1-3-1v-3H2s-2 0-2-2v-2c0-2 2-2 2-2h3v-3c0-2 2-2 3-1l5 5z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4f7.svg b/public/emoji/1f4f7.svg index a5c1fdf6a..aa2d9c503 100644 --- a/public/emoji/1f4f7.svg +++ b/public/emoji/1f4f7.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M4 5s0-1 1-1h6s1 0 1 1v2H4V5z"/><path fill="#292F33" d="M0 10s0-4 4-4h28s4 0 4 4v18s0 4-4 4H4s-4 0-4-4V10z"/><circle fill="#CCD6DD" cx="21" cy="19" r="10"/><circle fill="#292F33" cx="21" cy="19" r="8"/><circle fill="#3B88C3" cx="21" cy="19" r="5"/><circle fill="#FFF" cx="32.5" cy="9.5" r="1.5"/><path fill="#F5F8FA" d="M12 9.5c0 .829-.671 1.5-1.5 1.5h-5C4.671 11 4 10.329 4 9.5S4.671 8 5.5 8h5c.829 0 1.5.671 1.5 1.5z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M4 5s0-1 1-1h6s1 0 1 1v2H4V5z"/><path fill="#31373D" d="M0 10s0-4 4-4h28s4 0 4 4v18s0 4-4 4H4s-4 0-4-4V10z"/><circle fill="#CCD6DD" cx="21" cy="19" r="10"/><circle fill="#31373D" cx="21" cy="19" r="8"/><circle fill="#3B88C3" cx="21" cy="19" r="5"/><circle fill="#FFF" cx="32.5" cy="9.5" r="1.5"/><path fill="#F5F8FA" d="M12 9.5c0 .829-.671 1.5-1.5 1.5h-5C4.671 11 4 10.329 4 9.5S4.671 8 5.5 8h5c.829 0 1.5.671 1.5 1.5z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4f8.svg b/public/emoji/1f4f8.svg index f8e1dd092..9bf3cf70b 100644 --- a/public/emoji/1f4f8.svg +++ b/public/emoji/1f4f8.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M0 10s0-4 4-4h28s4 0 4 4v18s0 4-4 4H4s-4 0-4-4V10z"/><circle fill="#CCD6DD" cx="21" cy="19" r="10"/><circle fill="#292F33" cx="21" cy="19" r="8"/><circle fill="#3B88C3" cx="21" cy="19" r="5"/><circle fill="#FFF" cx="32.5" cy="9.5" r="1.5"/><path fill="#FFAC33" d="M16 9l3-6-6 2-4-5-2 5-6-1 4 6-5 4h6l-2 6 6-3 6 5-1-8 6-1z"/><path fill="#FFF" d="M10 14l-3 2 1-3-3-1 3-2-3-3h4l1-3 2 3 3-1-2 3 3 3-3 1 1 4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M0 10s0-4 4-4h28s4 0 4 4v18s0 4-4 4H4s-4 0-4-4V10z"/><circle fill="#CCD6DD" cx="21" cy="19" r="10"/><circle fill="#31373D" cx="21" cy="19" r="8"/><circle fill="#3B88C3" cx="21" cy="19" r="5"/><circle fill="#FFF" cx="32.5" cy="9.5" r="1.5"/><path fill="#FFAC33" d="M16 9l3-6-6 2-4-5-2 5-6-1 4 6-5 4h6l-2 6 6-3 6 5-1-8 6-1z"/><path fill="#FFF" d="M10 14l-3 2 1-3-3-1 3-2-3-3h4l1-3 2 3 3-1-2 3 3 3-3 1 1 4z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4f9.svg b/public/emoji/1f4f9.svg index c6c0477b4..f1abb5901 100644 --- a/public/emoji/1f4f9.svg +++ b/public/emoji/1f4f9.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M29 18H16c-3.668 0-5-2.99-5-5v-2H7c-3 0-3 3-3 3s-2-1-3-1-1 1-1 1v10s0 1 1 1 3-1 3-1v7c0 4 4 4 4 4h18c4 0 4-4 4-4V17.894c-.347.069-.685.106-1 .106z"/><path fill="#66757F" d="M35 6c-.559 0-2.05.934-3.26 1.76C31.413 6.934 30.674 6 29 6H18s-5 0-5 5v2s0 3 3 3h13s2.075-.006 2.771-1.739C32.976 15.082 34.446 16 35 16c1 0 1-1 1-1V7s0-1-1-1zM9 35v-9s0-3 2.75-3H22s3 0 3 3v9h-2v-9s0-1-1-1H12s-1 0-1 1v9H9z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M29 18H16c-3.668 0-5-2.99-5-5v-2H7c-3 0-3 3-3 3s-2-1-3-1-1 1-1 1v10s0 1 1 1 3-1 3-1v7c0 4 4 4 4 4h18c4 0 4-4 4-4V17.894c-.347.069-.685.106-1 .106z"/><path fill="#66757F" d="M35 6c-.559 0-2.05.934-3.26 1.76C31.413 6.934 30.674 6 29 6H18s-5 0-5 5v2s0 3 3 3h13s2.075-.006 2.771-1.739C32.976 15.082 34.446 16 35 16c1 0 1-1 1-1V7s0-1-1-1zM9 35v-9s0-3 2.75-3H22s3 0 3 3v9h-2v-9s0-1-1-1H12s-1 0-1 1v9H9z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4fa.svg b/public/emoji/1f4fa.svg index 795f6cdee..5f864dee5 100644 --- a/public/emoji/1f4fa.svg +++ b/public/emoji/1f4fa.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M35 31s0 4-4 4H5c-4 0-4-4-4-4V12c0-4 4-4 4-4h26s4 0 4 4v19z"/><path fill="#292F33" d="M21.303 10.389c.391.391.391 1.023 0 1.414s-1.023.391-1.414 0l-9.192-9.192c-.391-.391-.391-1.023 0-1.414s1.023-.391 1.414 0l9.192 9.192z"/><path fill="#292F33" d="M14.697 10.389c-.391.391-.391 1.023 0 1.414s1.023.391 1.414 0l9.192-9.192c.391-.391.391-1.023 0-1.414s-1.023-.391-1.414 0l-9.192 9.192z"/><path fill="#55ACEE" d="M18 11c8 0 10 1 11 2s2 3 2 8-1 7-2 8-3 2-11 2-10-1-11-2-2-3-2-8 1-7 2-8 3-2 11-2z"/><circle fill="#66757F" cx="31.5" cy="31.5" r="1.5"/><circle fill="#66757F" cx="4.5" cy="31.5" r="1.5"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M35 31s0 4-4 4H5c-4 0-4-4-4-4V12c0-4 4-4 4-4h26s4 0 4 4v19z"/><path fill="#31373D" d="M21.303 10.389c.391.391.391 1.023 0 1.414s-1.023.391-1.414 0l-9.192-9.192c-.391-.391-.391-1.023 0-1.414s1.023-.391 1.414 0l9.192 9.192z"/><path fill="#31373D" d="M14.697 10.389c-.391.391-.391 1.023 0 1.414s1.023.391 1.414 0l9.192-9.192c.391-.391.391-1.023 0-1.414s-1.023-.391-1.414 0l-9.192 9.192z"/><path fill="#55ACEE" d="M18 11c8 0 10 1 11 2s2 3 2 8-1 7-2 8-3 2-11 2-10-1-11-2-2-3-2-8 1-7 2-8 3-2 11-2z"/><circle fill="#66757F" cx="31.5" cy="31.5" r="1.5"/><circle fill="#66757F" cx="4.5" cy="31.5" r="1.5"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4fc.svg b/public/emoji/1f4fc.svg index a5f770d48..31024baf1 100644 --- a/public/emoji/1f4fc.svg +++ b/public/emoji/1f4fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M36 25s0 4-4 4H4s-4 0-4-4V10c0-4 4-4 4-4h28s4 0 4 4v15z"/><path fill="#CCD6DD" d="M32 12h-6s-1 0-1 1v8s0 1 1 1h6c1 0 2-2 2-5s-1-5-2-5z"/><path d="M29.894 12H26s-1 0-1 1v1c1.656 0 3 1.343 3 3s-1.344 3-3 3v1s0 1 1 1h3.895C31.193 20.73 32 18.96 32 17c0-1.959-.808-3.729-2.106-5z"/><path fill="#66757F" d="M28 17c0-1.657-1.344-3-3-3v6c1.656 0 3-1.343 3-3z"/><path fill="#CCD6DD" d="M4 12h6s1 0 1 1v8s0 1-1 1H4c-1 0-2-2-2-5s1-5 2-5z"/><path d="M11 20c-1.657 0-3-1.343-3-3s1.343-3 3-3v-1c0-1-1-1-1-1H6.106C4.808 13.271 4 15.04 4 17s.808 3.729 2.106 5H10c1 0 1-1 1-1v-1z"/><path fill="#66757F" d="M8 17c0 1.657 1.343 3 3 3v-6c-1.657 0-3 1.343-3 3z"/><path fill="#88C9F9" d="M13 14s0-1 1-1h8s1 0 1 1v6s0 1-1 1h-8s-1 0-1-1v-6z"/><path d="M34 26c0 .553-.447 1-1 1H3c-.552 0-1-.447-1-1 0-.553.448-1 1-1h30c.553 0 1 .447 1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M36 25s0 4-4 4H4s-4 0-4-4V10c0-4 4-4 4-4h28s4 0 4 4v15z"/><path fill="#CCD6DD" d="M32 12h-6s-1 0-1 1v8s0 1 1 1h6c1 0 2-2 2-5s-1-5-2-5z"/><path d="M29.894 12H26s-1 0-1 1v1c1.656 0 3 1.343 3 3s-1.344 3-3 3v1s0 1 1 1h3.895C31.193 20.73 32 18.96 32 17c0-1.959-.808-3.729-2.106-5z"/><path fill="#66757F" d="M28 17c0-1.657-1.344-3-3-3v6c1.656 0 3-1.343 3-3z"/><path fill="#CCD6DD" d="M4 12h6s1 0 1 1v8s0 1-1 1H4c-1 0-2-2-2-5s1-5 2-5z"/><path d="M11 20c-1.657 0-3-1.343-3-3s1.343-3 3-3v-1c0-1-1-1-1-1H6.106C4.808 13.271 4 15.04 4 17s.808 3.729 2.106 5H10c1 0 1-1 1-1v-1z"/><path fill="#66757F" d="M8 17c0 1.657 1.343 3 3 3v-6c-1.657 0-3 1.343-3 3z"/><path fill="#88C9F9" d="M13 14s0-1 1-1h8s1 0 1 1v6s0 1-1 1h-8s-1 0-1-1v-6z"/><path d="M34 26c0 .553-.447 1-1 1H3c-.552 0-1-.447-1-1 0-.553.448-1 1-1h30c.553 0 1 .447 1 1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f4fd.svg b/public/emoji/1f4fd.svg index d5744ba83..b12b42ce9 100644 --- a/public/emoji/1f4fd.svg +++ b/public/emoji/1f4fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M34.074 18l-4.832 3H28v-4c0-.088-.02-.169-.026-.256C31.436 15.864 34 12.735 34 9c0-4.418-3.582-8-8-8s-8.001 3.582-8.001 8c0 1.463.412 2.822 1.099 4H14.92c.047-.328.08-.66.08-1 0-3.866-3.134-7-7-7-3.865 0-7 3.134-7 7 0 2.79 1.638 5.193 4 6.317V29c0 2.209 1.791 4 4 4h15c2.209 0 4-1.791 4-4v-3h1.242l4.832 3H35V18h-.926zM28.727 3.977c1.762.959 2.961 2.819 2.984 4.961L28.18 8.35c-.112-.376-.31-.715-.583-.982l1.13-3.391zm-.9 6.342l3.552.592c-.66 1.857-2.254 3.26-4.214 3.669-.37-.483-.843-.875-1.392-1.148l.625-2.19c.556-.113 1.076-.452 1.429-.923zM26 3.285c.282 0 .557.027.828.067l-1.131 3.392c-.404.054-.772.21-1.081.446L21.42 5.592c1.042-1.397 2.703-2.307 4.58-2.307zM20.285 9c0-.563.085-1.106.236-1.62l3.194 1.597-.002.023c0 .657.313 1.245.771 1.662L23.816 13h-1.871c-1.02-1.03-1.66-2.436-1.66-4zm-9.088-.385c.901.851 1.47 2.048 1.47 3.385 0 .344-.043.677-.113 1H10.1c.145-.304.233-.641.233-1 0-.478-.145-.922-.392-1.292l1.256-2.093zM8 7.333c.519 0 1.01.105 1.476.261L8.22 9.688c-.073-.007-.145-.022-.22-.022-.478 0-.922.145-1.292.392L4.615 8.803c.851-.901 2.048-1.47 3.385-1.47zM3.333 12c0-.519.105-1.01.261-1.477l2.095 1.257c-.007.073-.022.144-.022.22 0 .75.36 1.41.91 1.837-.624.479-1.097 1.134-1.353 1.895-1.141-.851-1.891-2.199-1.891-3.732z"/><circle fill="#8899A6" cx="24" cy="19" r="2"/><circle fill="#8899A6" cx="9" cy="19" r="2"/><path fill="#8899A6" d="M24 27c0-1.104-.896-2-2-2H11c-1.104 0-2 .896-2 2v6c0 1.104.896 2 2 2h11c1.104 0 2-.896 2-2v-6z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M34.074 18l-4.832 3H28v-4c0-.088-.02-.169-.026-.256C31.436 15.864 34 12.735 34 9c0-4.418-3.582-8-8-8s-8.001 3.582-8.001 8c0 1.463.412 2.822 1.099 4H14.92c.047-.328.08-.66.08-1 0-3.866-3.134-7-7-7-3.865 0-7 3.134-7 7 0 2.79 1.638 5.193 4 6.317V29c0 2.209 1.791 4 4 4h15c2.209 0 4-1.791 4-4v-3h1.242l4.832 3H35V18h-.926zM28.727 3.977c1.762.959 2.961 2.819 2.984 4.961L28.18 8.35c-.112-.376-.31-.715-.583-.982l1.13-3.391zm-.9 6.342l3.552.592c-.66 1.857-2.254 3.26-4.214 3.669-.37-.483-.843-.875-1.392-1.148l.625-2.19c.556-.113 1.076-.452 1.429-.923zM26 3.285c.282 0 .557.027.828.067l-1.131 3.392c-.404.054-.772.21-1.081.446L21.42 5.592c1.042-1.397 2.703-2.307 4.58-2.307zM20.285 9c0-.563.085-1.106.236-1.62l3.194 1.597-.002.023c0 .657.313 1.245.771 1.662L23.816 13h-1.871c-1.02-1.03-1.66-2.436-1.66-4zm-9.088-.385c.901.851 1.47 2.048 1.47 3.385 0 .344-.043.677-.113 1H10.1c.145-.304.233-.641.233-1 0-.478-.145-.922-.392-1.292l1.256-2.093zM8 7.333c.519 0 1.01.105 1.476.261L8.22 9.688c-.073-.007-.145-.022-.22-.022-.478 0-.922.145-1.292.392L4.615 8.803c.851-.901 2.048-1.47 3.385-1.47zM3.333 12c0-.519.105-1.01.261-1.477l2.095 1.257c-.007.073-.022.144-.022.22 0 .75.36 1.41.91 1.837-.624.479-1.097 1.134-1.353 1.895-1.141-.851-1.891-2.199-1.891-3.732z"/><circle fill="#8899A6" cx="24" cy="19" r="2"/><circle fill="#8899A6" cx="9" cy="19" r="2"/><path fill="#8899A6" d="M24 27c0-1.104-.896-2-2-2H11c-1.104 0-2 .896-2 2v6c0 1.104.896 2 2 2h11c1.104 0 2-.896 2-2v-6z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f50c.svg b/public/emoji/1f50c.svg index 9f9b7ee29..8f432f0de 100644 --- a/public/emoji/1f50c.svg +++ b/public/emoji/1f50c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9AAAB4" d="M11.858 16.264c.389.389.389 1.025 0 1.414s-1.025.389-1.414 0L1.959 9.192c-.389-.389-.389-1.025 0-1.414s1.025-.389 1.414 0l8.485 8.486zm7.072-7.071c.389.389.389 1.025 0 1.414s-1.025.389-1.414 0L9.029 2.121c-.389-.389-.389-1.025 0-1.414s1.025-.389 1.414 0l8.487 8.486z"/><path fill="#292F33" d="M34 36c0-4.966-2.56-8.581-4.562-10.65.898-1.532.704-3.529-.61-4.844l-1.099-1.099c.352-1.332.021-2.806-1.022-3.851l-4.949-4.95c.78-.781.78-2.047 0-2.828-.781-.781-2.049-.781-2.829-.001l-2.826 2.826-.003.002-4.242 4.243-2.828 2.828c-.781.781-.781 2.047 0 2.828.781.781 2.047.781 2.828 0l4.95 4.95c1.044 1.044 2.519 1.373 3.85 1.021l1.101 1.101c1.318 1.318 3.323 1.51 4.857.602C28.099 29.726 30 32.404 30 36h4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9AAAB4" d="M11.858 16.264c.389.389.389 1.025 0 1.414s-1.025.389-1.414 0L1.959 9.192c-.389-.389-.389-1.025 0-1.414s1.025-.389 1.414 0l8.485 8.486zm7.072-7.071c.389.389.389 1.025 0 1.414s-1.025.389-1.414 0L9.029 2.121c-.389-.389-.389-1.025 0-1.414s1.025-.389 1.414 0l8.487 8.486z"/><path fill="#31373D" d="M34 36c0-4.966-2.56-8.581-4.562-10.65.898-1.532.704-3.529-.61-4.844l-1.099-1.099c.352-1.332.021-2.806-1.022-3.851l-4.949-4.95c.78-.781.78-2.047 0-2.828-.781-.781-2.049-.781-2.829-.001l-2.826 2.826-.003.002-4.242 4.243-2.828 2.828c-.781.781-.781 2.047 0 2.828.781.781 2.047.781 2.828 0l4.95 4.95c1.044 1.044 2.519 1.373 3.85 1.021l1.101 1.101c1.318 1.318 3.323 1.51 4.857.602C28.099 29.726 30 32.404 30 36h4z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f519.svg b/public/emoji/1f519.svg index 08e031266..ddf8fbd3e 100644 --- a/public/emoji/1f519.svg +++ b/public/emoji/1f519.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M34 3H12.475V1.128c0-1.046-.74-1.435-1.645-.865L.69 6.652c-.905.57-.922 1.527-.038 2.127l10.215 6.931c.884.602 1.607.235 1.607-.811V13H34c1.104 0 2-.896 2-2V5c0-1.104-.896-2-2-2zM.024 26.184c0-.727.5-1.137 1.197-1.137H4.13c1.576 0 2.849 1.061 2.849 2.667 0 1.061-.439 1.772-1.409 2.227v.03c1.288.183 2.303 1.258 2.303 2.576 0 2.137-1.424 3.288-3.516 3.288h-3.12c-.697 0-1.212-.439-1.212-1.151v-8.5zm2.273 3.135h1.182c.742 0 1.227-.439 1.227-1.196 0-.713-.561-1.076-1.227-1.076H2.297v2.272zm0 4.516h1.788c.818 0 1.424-.47 1.424-1.318 0-.712-.545-1.197-1.606-1.197H2.297v2.515zm9.217-7.713c.258-.696.85-1.257 1.621-1.257.805 0 1.365.53 1.621 1.257l2.971 8.243c.092.242.121.454.121.561 0 .591-.484 1-1.045 1-.637 0-.955-.333-1.107-.788l-.453-1.424H11.03l-.455 1.409c-.15.47-.469.803-1.09.803-.607 0-1.122-.454-1.122-1.061 0-.242.076-.424.106-.5l3.045-8.243zm.168 5.501h2.879l-1.41-4.395h-.029l-1.44 4.395zm11.378-6.758c1.106 0 3.258.363 3.258 1.696 0 .546-.379 1.016-.94 1.016-.621 0-1.046-.53-2.318-.53-1.879 0-2.849 1.591-2.849 3.439 0 1.803.985 3.349 2.849 3.349 1.272 0 1.788-.637 2.409-.637.682 0 1 .682 1 1.03 0 1.455-2.288 1.788-3.409 1.788-3.076 0-5.212-2.439-5.212-5.576 0-3.151 2.121-5.575 5.212-5.575zm4.471 1.212c0-.621.455-1.121 1.137-1.121.651 0 1.137.424 1.137 1.121v3.273l3.727-3.97c.167-.182.455-.424.879-.424.576 0 1.121.439 1.121 1.091 0 .393-.242.712-.742 1.212l-2.863 2.818 3.5 3.651c.363.364.637.697.637 1.152 0 .712-.562 1.045-1.183 1.045-.44 0-.727-.258-1.151-.712l-3.924-4.243v3.864c0 .591-.455 1.091-1.137 1.091-.651 0-1.137-.424-1.137-1.091v-8.757z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M34 3H12.475V1.128c0-1.046-.74-1.435-1.645-.865L.69 6.652c-.905.57-.922 1.527-.038 2.127l10.215 6.931c.884.602 1.607.235 1.607-.811V13H34c1.104 0 2-.896 2-2V5c0-1.104-.896-2-2-2zM.024 26.184c0-.727.5-1.137 1.197-1.137H4.13c1.576 0 2.849 1.061 2.849 2.667 0 1.061-.439 1.772-1.409 2.227v.03c1.288.183 2.303 1.258 2.303 2.576 0 2.137-1.424 3.288-3.516 3.288h-3.12c-.697 0-1.212-.439-1.212-1.151v-8.5zm2.273 3.135h1.182c.742 0 1.227-.439 1.227-1.196 0-.713-.561-1.076-1.227-1.076H2.297v2.272zm0 4.516h1.788c.818 0 1.424-.47 1.424-1.318 0-.712-.545-1.197-1.606-1.197H2.297v2.515zm9.217-7.713c.258-.696.85-1.257 1.621-1.257.805 0 1.365.53 1.621 1.257l2.971 8.243c.092.242.121.454.121.561 0 .591-.484 1-1.045 1-.637 0-.955-.333-1.107-.788l-.453-1.424H11.03l-.455 1.409c-.15.47-.469.803-1.09.803-.607 0-1.122-.454-1.122-1.061 0-.242.076-.424.106-.5l3.045-8.243zm.168 5.501h2.879l-1.41-4.395h-.029l-1.44 4.395zm11.378-6.758c1.106 0 3.258.363 3.258 1.696 0 .546-.379 1.016-.94 1.016-.621 0-1.046-.53-2.318-.53-1.879 0-2.849 1.591-2.849 3.439 0 1.803.985 3.349 2.849 3.349 1.272 0 1.788-.637 2.409-.637.682 0 1 .682 1 1.03 0 1.455-2.288 1.788-3.409 1.788-3.076 0-5.212-2.439-5.212-5.576 0-3.151 2.121-5.575 5.212-5.575zm4.471 1.212c0-.621.455-1.121 1.137-1.121.651 0 1.137.424 1.137 1.121v3.273l3.727-3.97c.167-.182.455-.424.879-.424.576 0 1.121.439 1.121 1.091 0 .393-.242.712-.742 1.212l-2.863 2.818 3.5 3.651c.363.364.637.697.637 1.152 0 .712-.562 1.045-1.183 1.045-.44 0-.727-.258-1.151-.712l-3.924-4.243v3.864c0 .591-.455 1.091-1.137 1.091-.651 0-1.137-.424-1.137-1.091v-8.757z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f51a.svg b/public/emoji/1f51a.svg index 3d45f5d61..d964c524e 100644 --- a/public/emoji/1f51a.svg +++ b/public/emoji/1f51a.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M34 3H12.475V1.128c0-1.046-.74-1.434-1.644-.865L.69 6.652c-.905.57-.922 1.527-.038 2.127l10.215 6.931c.884.602 1.607.235 1.607-.811V13H34c1.104 0 2-.896 2-2V5c0-1.104-.896-2-2-2zM.088 22.915c0-1.03.515-1.791 1.606-1.791h5.108c.989 0 1.462.7 1.462 1.421 0 .7-.495 1.421-1.462 1.421H3.178v3.008h3.378c1.009 0 1.503.699 1.503 1.421 0 .699-.515 1.42-1.503 1.42H3.178v3.131h3.811c.988 0 1.462.701 1.462 1.421 0 .701-.495 1.422-1.462 1.422H1.675c-.906 0-1.586-.617-1.586-1.544v-11.33zm9.419-.309c0-1.029.659-1.606 1.545-1.606.392 0 1.03.31 1.298.68l6.529 8.712h.041v-7.785c0-1.029.659-1.606 1.545-1.606.886 0 1.545.577 1.545 1.606v11.699c0 1.03-.659 1.606-1.545 1.606-.391 0-1.009-.309-1.297-.681l-6.53-8.608h-.041v7.683c0 1.03-.659 1.606-1.544 1.606s-1.545-.576-1.545-1.606v-11.7zm14.239.104c0-.948.659-1.586 1.586-1.586h3.419c4.612 0 7.249 2.965 7.249 7.537 0 4.326-2.801 7.127-7.043 7.127h-3.584c-.68 0-1.627-.37-1.627-1.544V22.71zm3.09 10.235h2.08c2.656 0 3.872-1.957 3.872-4.429 0-2.637-1.235-4.551-4.078-4.551h-1.874v8.98z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M34 3H12.475V1.128c0-1.046-.74-1.434-1.644-.865L.69 6.652c-.905.57-.922 1.527-.038 2.127l10.215 6.931c.884.602 1.607.235 1.607-.811V13H34c1.104 0 2-.896 2-2V5c0-1.104-.896-2-2-2zM.088 22.915c0-1.03.515-1.791 1.606-1.791h5.108c.989 0 1.462.7 1.462 1.421 0 .7-.495 1.421-1.462 1.421H3.178v3.008h3.378c1.009 0 1.503.699 1.503 1.421 0 .699-.515 1.42-1.503 1.42H3.178v3.131h3.811c.988 0 1.462.701 1.462 1.421 0 .701-.495 1.422-1.462 1.422H1.675c-.906 0-1.586-.617-1.586-1.544v-11.33zm9.419-.309c0-1.029.659-1.606 1.545-1.606.392 0 1.03.31 1.298.68l6.529 8.712h.041v-7.785c0-1.029.659-1.606 1.545-1.606.886 0 1.545.577 1.545 1.606v11.699c0 1.03-.659 1.606-1.545 1.606-.391 0-1.009-.309-1.297-.681l-6.53-8.608h-.041v7.683c0 1.03-.659 1.606-1.544 1.606s-1.545-.576-1.545-1.606v-11.7zm14.239.104c0-.948.659-1.586 1.586-1.586h3.419c4.612 0 7.249 2.965 7.249 7.537 0 4.326-2.801 7.127-7.043 7.127h-3.584c-.68 0-1.627-.37-1.627-1.544V22.71zm3.09 10.235h2.08c2.656 0 3.872-1.957 3.872-4.429 0-2.637-1.235-4.551-4.078-4.551h-1.874v8.98z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f51b.svg b/public/emoji/1f51b.svg index eeed72c1f..a885bab4f 100644 --- a/public/emoji/1f51b.svg +++ b/public/emoji/1f51b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M35.311 6.652L25.17.263c-.904-.569-1.645-.181-1.645.865V3h-11.05V1.128c0-1.046-.74-1.434-1.644-.865L.689 6.652c-.904.57-.922 1.527-.037 2.127l10.215 6.932c.885.602 1.607.234 1.607-.812V13h11.051v1.899c0 1.046.723 1.413 1.607.811l10.215-6.931c.885-.6.868-1.557-.036-2.127zM.204 27.986c0-4.529 3.048-8.014 7.49-8.014 4.377 0 7.491 3.594 7.491 8.014 0 4.506-3.027 8.014-7.491 8.014-4.42 0-7.49-3.508-7.49-8.014zm11.584 0c0-2.635-1.372-5.01-4.094-5.01-2.721 0-4.094 2.375-4.094 5.01 0 2.656 1.33 5.008 4.094 5.008 2.765 0 4.094-2.351 4.094-5.008zm4.625-6.184c0-1.089.696-1.699 1.632-1.699.415 0 1.089.327 1.373.72l6.902 9.211h.045v-8.231c0-1.089.694-1.699 1.633-1.699.937 0 1.633.61 1.633 1.699V34.17c0 1.088-.696 1.697-1.633 1.697-.415 0-1.067-.326-1.372-.717l-6.903-9.102h-.044v8.121c0 1.088-.697 1.697-1.633 1.697s-1.632-.609-1.632-1.697V21.802zm16.013 12.499c0-.936.762-1.699 1.698-1.699.936 0 1.698.764 1.698 1.699 0 .936-.763 1.699-1.698 1.699-.936 0-1.698-.764-1.698-1.699zm.131-12.848c0-.914.673-1.48 1.567-1.48.87 0 1.567.588 1.567 1.48v8.384c0 .894-.697 1.479-1.567 1.479-.895 0-1.567-.564-1.567-1.479v-8.384z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M35.311 6.652L25.17.263c-.904-.569-1.645-.181-1.645.865V3h-11.05V1.128c0-1.046-.74-1.434-1.644-.865L.689 6.652c-.904.57-.922 1.527-.037 2.127l10.215 6.932c.885.602 1.607.234 1.607-.812V13h11.051v1.899c0 1.046.723 1.413 1.607.811l10.215-6.931c.885-.6.868-1.557-.036-2.127zM.204 27.986c0-4.529 3.048-8.014 7.49-8.014 4.377 0 7.491 3.594 7.491 8.014 0 4.506-3.027 8.014-7.491 8.014-4.42 0-7.49-3.508-7.49-8.014zm11.584 0c0-2.635-1.372-5.01-4.094-5.01-2.721 0-4.094 2.375-4.094 5.01 0 2.656 1.33 5.008 4.094 5.008 2.765 0 4.094-2.351 4.094-5.008zm4.625-6.184c0-1.089.696-1.699 1.632-1.699.415 0 1.089.327 1.373.72l6.902 9.211h.045v-8.231c0-1.089.694-1.699 1.633-1.699.937 0 1.633.61 1.633 1.699V34.17c0 1.088-.696 1.697-1.633 1.697-.415 0-1.067-.326-1.372-.717l-6.903-9.102h-.044v8.121c0 1.088-.697 1.697-1.633 1.697s-1.632-.609-1.632-1.697V21.802zm16.013 12.499c0-.936.762-1.699 1.698-1.699.936 0 1.698.764 1.698 1.699 0 .936-.763 1.699-1.698 1.699-.936 0-1.698-.764-1.698-1.699zm.131-12.848c0-.914.673-1.48 1.567-1.48.87 0 1.567.588 1.567 1.48v8.384c0 .894-.697 1.479-1.567 1.479-.895 0-1.567-.564-1.567-1.479v-8.384z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f51c.svg b/public/emoji/1f51c.svg index c9aaa2d26..690428101 100644 --- a/public/emoji/1f51c.svg +++ b/public/emoji/1f51c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M35.311 6.652L25.17.263c-.904-.569-1.645-.181-1.645.865V3H2C.896 3 0 3.895 0 5v6c0 1.104.896 2 2 2h21.525v1.899c0 1.046.723 1.413 1.607.811l10.215-6.931c.885-.6.868-1.557-.036-2.127zM6.303 27.263c0 .537-.357 1.018-.921 1.018-.563 0-1.002-.412-1.826-.412-.591 0-1.126.316-1.126.893 0 1.414 4.587.509 4.587 4.052C7.017 34.776 5.396 36 3.501 36c-1.058 0-3.337-.248-3.337-1.539 0-.535.356-.976.92-.976.645 0 1.415.536 2.308.536.907 0 1.401-.509 1.401-1.182 0-1.62-4.588-.645-4.588-3.832 0-1.923 1.58-3.118 3.407-3.118.768.001 2.691.289 2.691 1.374zm1.213 3.681c0-2.855 1.922-5.055 4.725-5.055 2.761 0 4.725 2.268 4.725 5.055 0 2.844-1.91 5.056-4.725 5.056-2.788 0-4.725-2.212-4.725-5.056zm7.307 0c0-1.661-.866-3.159-2.583-3.159s-2.582 1.498-2.582 3.159c0 1.676.838 3.159 2.582 3.159 1.745.001 2.583-1.483 2.583-3.159zm2.615 0c0-2.855 1.923-5.055 4.725-5.055 2.76 0 4.725 2.268 4.725 5.055 0 2.844-1.909 5.056-4.725 5.056-2.789 0-4.725-2.212-4.725-5.056zm7.306 0c0-1.661-.864-3.159-2.581-3.159-1.718 0-2.582 1.498-2.582 3.159 0 1.676.838 3.159 2.582 3.159 1.743.001 2.581-1.483 2.581-3.159zm2.918-3.9c0-.688.44-1.072 1.03-1.072.261 0 .687.206.865.454l4.353 5.81h.028v-5.191c0-.688.439-1.072 1.031-1.072.589 0 1.029.385 1.029 1.072v7.802c0 .688-.44 1.072-1.029 1.072-.263 0-.675-.206-.866-.454l-4.354-5.741h-.027v5.123c0 .688-.44 1.072-1.03 1.072s-1.03-.385-1.03-1.072v-7.803z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M35.311 6.652L25.17.263c-.904-.569-1.645-.181-1.645.865V3H2C.896 3 0 3.895 0 5v6c0 1.104.896 2 2 2h21.525v1.899c0 1.046.723 1.413 1.607.811l10.215-6.931c.885-.6.868-1.557-.036-2.127zM6.303 27.263c0 .537-.357 1.018-.921 1.018-.563 0-1.002-.412-1.826-.412-.591 0-1.126.316-1.126.893 0 1.414 4.587.509 4.587 4.052C7.017 34.776 5.396 36 3.501 36c-1.058 0-3.337-.248-3.337-1.539 0-.535.356-.976.92-.976.645 0 1.415.536 2.308.536.907 0 1.401-.509 1.401-1.182 0-1.62-4.588-.645-4.588-3.832 0-1.923 1.58-3.118 3.407-3.118.768.001 2.691.289 2.691 1.374zm1.213 3.681c0-2.855 1.922-5.055 4.725-5.055 2.761 0 4.725 2.268 4.725 5.055 0 2.844-1.91 5.056-4.725 5.056-2.788 0-4.725-2.212-4.725-5.056zm7.307 0c0-1.661-.866-3.159-2.583-3.159s-2.582 1.498-2.582 3.159c0 1.676.838 3.159 2.582 3.159 1.745.001 2.583-1.483 2.583-3.159zm2.615 0c0-2.855 1.923-5.055 4.725-5.055 2.76 0 4.725 2.268 4.725 5.055 0 2.844-1.909 5.056-4.725 5.056-2.789 0-4.725-2.212-4.725-5.056zm7.306 0c0-1.661-.864-3.159-2.581-3.159-1.718 0-2.582 1.498-2.582 3.159 0 1.676.838 3.159 2.582 3.159 1.743.001 2.581-1.483 2.581-3.159zm2.918-3.9c0-.688.44-1.072 1.03-1.072.261 0 .687.206.865.454l4.353 5.81h.028v-5.191c0-.688.439-1.072 1.031-1.072.589 0 1.029.385 1.029 1.072v7.802c0 .688-.44 1.072-1.029 1.072-.263 0-.675-.206-.866-.454l-4.354-5.741h-.027v5.123c0 .688-.44 1.072-1.03 1.072s-1.03-.385-1.03-1.072v-7.803z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f51d.svg b/public/emoji/1f51d.svg index e5d0ca5c0..54ab898eb 100644 --- a/public/emoji/1f51d.svg +++ b/public/emoji/1f51d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M25.711 10.867L18.779.652c-.602-.885-1.558-.867-2.127.037l-6.39 10.141c-.569.904-.181 1.644.865 1.644H13V16c0 1.104.896 2 2 2h6c1.105 0 2-.896 2-2v-3.525h1.898c1.047 0 1.414-.723.813-1.608zM3.651 23.575H1.438c-.975 0-1.381-.712-1.381-1.401 0-.71.508-1.399 1.381-1.399h7.469c.874 0 1.381.689 1.381 1.399 0 .69-.406 1.401-1.381 1.401H6.696v10.189c0 1.016-.649 1.584-1.522 1.584s-1.522-.568-1.522-1.584V23.575zM10.396 28c0-4.222 2.841-7.471 6.982-7.471 4.079 0 6.983 3.351 6.983 7.471 0 4.201-2.821 7.471-6.983 7.471-4.121 0-6.982-3.27-6.982-7.471zm10.798 0c0-2.456-1.279-4.67-3.816-4.67s-3.816 2.214-3.816 4.67c0 2.476 1.239 4.668 3.816 4.668 2.578 0 3.816-2.192 3.816-4.668zm4.433-5.644c0-.954.569-1.582 1.585-1.582h3.591c2.985 0 5.197 1.947 5.197 4.851 0 2.963-2.293 4.811-5.074 4.811h-2.253v3.329c0 1.016-.649 1.584-1.521 1.584-.874 0-1.524-.568-1.524-1.584V22.356zm3.046 5.4h2.071c1.277 0 2.089-.934 2.089-2.151 0-1.219-.812-2.152-2.089-2.152h-2.071v4.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M25.711 10.867L18.779.652c-.602-.885-1.558-.867-2.127.037l-6.39 10.141c-.569.904-.181 1.644.865 1.644H13V16c0 1.104.896 2 2 2h6c1.105 0 2-.896 2-2v-3.525h1.898c1.047 0 1.414-.723.813-1.608zM3.651 23.575H1.438c-.975 0-1.381-.712-1.381-1.401 0-.71.508-1.399 1.381-1.399h7.469c.874 0 1.381.689 1.381 1.399 0 .69-.406 1.401-1.381 1.401H6.696v10.189c0 1.016-.649 1.584-1.522 1.584s-1.522-.568-1.522-1.584V23.575zM10.396 28c0-4.222 2.841-7.471 6.982-7.471 4.079 0 6.983 3.351 6.983 7.471 0 4.201-2.821 7.471-6.983 7.471-4.121 0-6.982-3.27-6.982-7.471zm10.798 0c0-2.456-1.279-4.67-3.816-4.67s-3.816 2.214-3.816 4.67c0 2.476 1.239 4.668 3.816 4.668 2.578 0 3.816-2.192 3.816-4.668zm4.433-5.644c0-.954.569-1.582 1.585-1.582h3.591c2.985 0 5.197 1.947 5.197 4.851 0 2.963-2.293 4.811-5.074 4.811h-2.253v3.329c0 1.016-.649 1.584-1.521 1.584-.874 0-1.524-.568-1.524-1.584V22.356zm3.046 5.4h2.071c1.277 0 2.089-.934 2.089-2.151 0-1.219-.812-2.152-2.089-2.152h-2.071v4.303z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f52a.svg b/public/emoji/1f52a.svg index fa23e9e71..d2ba9e7f0 100644 --- a/public/emoji/1f52a.svg +++ b/public/emoji/1f52a.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M35.875 34.604L19.796 15.113s-5.637 3.692-7.689 9.676c0 0 4.667 5.292 9.79 8.225 6.368 3.646 11.642 2.855 13.703 2.391.362-.081.511-.513.275-.801z"/><path fill="#AAB8C2" d="M18.071 13.005l-4.035 3.559c.066.028.316.45.174 1.107-.402 1.865-2.346 4.288-2.974 5.098-.194.25-.224.691.026 1.007l.845 1.013c1.821-3.964 6.556-8.694 7.689-9.676l-1.725-2.108z"/><path fill="#292F33" d="M18.071 13.005s-3.32-4.216-5.763-6.986S8.208 1.658 6.625.64C5.01-.398 3.285.205 1.981 1.354S-.722 5.082.787 6.793c.826.937 2.785.078 3.791 1.219.683.774 1.031 1.365 3.464 3.859 3.759 3.854 5.994 4.692 5.994 4.692s1.251-1.042 1.932-1.648c.682-.604 2.103-1.91 2.103-1.91z"/><circle fill="#F5F8FA" cx="11.618" cy="10.543" r="1.365"/><circle fill="#F5F8FA" cx="5.903" cy="4.653" r="1.365"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M35.875 34.604L19.796 15.113s-5.637 3.692-7.689 9.676c0 0 4.667 5.292 9.79 8.225 6.368 3.646 11.642 2.855 13.703 2.391.362-.081.511-.513.275-.801z"/><path fill="#AAB8C2" d="M18.071 13.005l-4.035 3.559c.066.028.316.45.174 1.107-.402 1.865-2.346 4.288-2.974 5.098-.194.25-.224.691.026 1.007l.845 1.013c1.821-3.964 6.556-8.694 7.689-9.676l-1.725-2.108z"/><path fill="#31373D" d="M18.071 13.005s-3.32-4.216-5.763-6.986S8.208 1.658 6.625.64C5.01-.398 3.285.205 1.981 1.354S-.722 5.082.787 6.793c.826.937 2.785.078 3.791 1.219.683.774 1.031 1.365 3.464 3.859 3.759 3.854 5.994 4.692 5.994 4.692s1.251-1.042 1.932-1.648c.682-.604 2.103-1.91 2.103-1.91z"/><circle fill="#F5F8FA" cx="11.618" cy="10.543" r="1.365"/><circle fill="#F5F8FA" cx="5.903" cy="4.653" r="1.365"/></svg> \ No newline at end of file diff --git a/public/emoji/1f532.svg b/public/emoji/1f532.svg index 262a671fc..a2e37de7f 100644 --- a/public/emoji/1f532.svg +++ b/public/emoji/1f532.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#E6E7E8" d="M30 28c0 1.104-.896 2-2 2H8c-1.104 0-2-.896-2-2V8c0-1.104.896-2 2-2h20c1.104 0 2 .896 2 2v20z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#E6E7E8" d="M30 28c0 1.104-.896 2-2 2H8c-1.104 0-2-.896-2-2V8c0-1.104.896-2 2-2h20c1.104 0 2 .896 2 2v20z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f533.svg b/public/emoji/1f533.svg index e82e1e853..13f35b71a 100644 --- a/public/emoji/1f533.svg +++ b/public/emoji/1f533.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E6E7E8" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#292F33" d="M30 28c0 1.104-.896 2-2 2H8c-1.104 0-2-.896-2-2V8c0-1.104.896-2 2-2h20c1.104 0 2 .896 2 2v20z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E6E7E8" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#31373D" d="M30 28c0 1.104-.896 2-2 2H8c-1.104 0-2-.896-2-2V8c0-1.104.896-2 2-2h20c1.104 0 2 .896 2 2v20z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f573.svg b/public/emoji/1f573.svg index 983d21de3..213a6ab69 100644 --- a/public/emoji/1f573.svg +++ b/public/emoji/1f573.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18 11.001c-9.389 0-17 3.358-17 7.5s7.611 7.5 17 7.5 17-3.358 17-7.5-7.611-7.5-17-7.5z"/><path fill="#7D8B93" d="M33.871 19.284c.079-.256.129-.516.129-.783 0-1.418-1.16-2.676-3-3.699v2.778c1.083.51 2.05 1.08 2.871 1.704zM5 14.802c-1.84 1.023-3 2.281-3 3.699 0 .267.05.527.129.783C2.95 18.66 3.917 18.09 5 17.58v-2.778z"/><path fill="#CCD6DD" d="M18 12.001c-4.766 0-9.87 1.06-13 2.801v2.778c3.398-1.598 7.967-2.579 13-2.579s9.602.981 13 2.579v-2.778c-3.13-1.741-8.234-2.801-13-2.801z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M18 11.001c-9.389 0-17 3.358-17 7.5s7.611 7.5 17 7.5 17-3.358 17-7.5-7.611-7.5-17-7.5z"/><path fill="#7D8B93" d="M33.871 19.284c.079-.256.129-.516.129-.783 0-1.418-1.16-2.676-3-3.699v2.778c1.083.51 2.05 1.08 2.871 1.704zM5 14.802c-1.84 1.023-3 2.281-3 3.699 0 .267.05.527.129.783C2.95 18.66 3.917 18.09 5 17.58v-2.778z"/><path fill="#CCD6DD" d="M18 12.001c-4.766 0-9.87 1.06-13 2.801v2.778c3.398-1.598 7.967-2.579 13-2.579s9.602.981 13 2.579v-2.778c-3.13-1.741-8.234-2.801-13-2.801z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f574-1f3fb-200d-2642-fe0f.svg index d9b230be1..97bc7b5a5 100644 --- a/public/emoji/1f574-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f574-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#F7DECE" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#F7DECE" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#292F33" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#F7DECE" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#F7DECE" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#292F33" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3fb.svg b/public/emoji/1f574-1f3fb.svg index d9b230be1..97bc7b5a5 100644 --- a/public/emoji/1f574-1f3fb.svg +++ b/public/emoji/1f574-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#F7DECE" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#F7DECE" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#292F33" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#F7DECE" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#F7DECE" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#292F33" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f574-1f3fc-200d-2642-fe0f.svg index 4f27f75c7..27c10f151 100644 --- a/public/emoji/1f574-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f574-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#F3D2A2" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#F3D2A2" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#FFE51E" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#F3D2A2" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#F3D2A2" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#FFE51E" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3fc.svg b/public/emoji/1f574-1f3fc.svg index 4f27f75c7..27c10f151 100644 --- a/public/emoji/1f574-1f3fc.svg +++ b/public/emoji/1f574-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#F3D2A2" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#F3D2A2" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#FFE51E" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#F3D2A2" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#F3D2A2" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#FFE51E" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f574-1f3fd-200d-2642-fe0f.svg index 047933f9b..4e980b002 100644 --- a/public/emoji/1f574-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f574-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#D5AB88" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#D5AB88" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#963B22" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#D4AB88" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#D4AB88" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#963B22" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3fd.svg b/public/emoji/1f574-1f3fd.svg index 047933f9b..4e980b002 100644 --- a/public/emoji/1f574-1f3fd.svg +++ b/public/emoji/1f574-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#D5AB88" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#D5AB88" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#963B22" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#D4AB88" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#D4AB88" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#963B22" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f574-1f3fe-200d-2642-fe0f.svg index 43ac9ee41..88a306164 100644 --- a/public/emoji/1f574-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f574-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#AF7E57" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#AF7E57" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#915A34" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#60352A" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#AF7E57" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#AF7E57" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#915A34" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#60352A" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3fe.svg b/public/emoji/1f574-1f3fe.svg index 43ac9ee41..88a306164 100644 --- a/public/emoji/1f574-1f3fe.svg +++ b/public/emoji/1f574-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#AF7E57" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#AF7E57" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#915A34" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#60352A" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#AF7E57" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#AF7E57" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#915A34" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#60352A" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f574-1f3ff-200d-2642-fe0f.svg index 28fd4074e..57aec606d 100644 --- a/public/emoji/1f574-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f574-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#7C533E" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#7C533E" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#3D2E24" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#0B0200" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#7C533E" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#7C533E" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#3D2E24" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#0B0200" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-1f3ff.svg b/public/emoji/1f574-1f3ff.svg index 28fd4074e..57aec606d 100644 --- a/public/emoji/1f574-1f3ff.svg +++ b/public/emoji/1f574-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#7C533E" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#7C533E" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#3D2E24" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#0B0200" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#7C533E" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#7C533E" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#3D2E24" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#0B0200" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574-fe0f-200d-2642-fe0f.svg b/public/emoji/1f574-fe0f-200d-2642-fe0f.svg index a9bd641c9..a834fd4b9 100644 --- a/public/emoji/1f574-fe0f-200d-2642-fe0f.svg +++ b/public/emoji/1f574-fe0f-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#FFDC5D" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#FFDC5D" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#FFAC33" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#FFDC5D" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#FFDC5D" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#FFAC33" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f574.svg b/public/emoji/1f574.svg index a9bd641c9..a834fd4b9 100644 --- a/public/emoji/1f574.svg +++ b/public/emoji/1f574.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#E1E8ED" d="M18 18l-2-7h4z"/><path fill="#55ACEE" d="M17 15l1 3 1-3-1-2.417z"/><path fill="#FFDC5D" d="M16.799 10v1.592L18 12l1.201-.408V10zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#FFDC5D" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#FFAC33" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#66757F" d="M16 11l-1 3 1.25.344-.688 1.125L18 18zm4 0l1 3-1.25.344.688 1.125L18 18z"/><path fill="#55ACEE" d="M17 12l1 1 1-1-1-.417z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M23.227 4.833c0 .66-2.337 1.333-5.219 1.333s-5.219-.673-5.219-1.333 1.196-.896 5.219-.896 5.219.236 5.219.896z"/><path fill="#292F33" d="M20.191 4.016c.678-.163 1.224-.45 1.224-.45s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.967 2.542 0 0 .322.274.902.403 1.22.273 3.76.269 4.685.047z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M14 22c0 .553-.448 1-1 1s-1-.447-1-1v-8c0-.552.448-1 1-1s1 .448 1 1v8zm10 0c0 .553-.447 1-1 1-.553 0-1-.447-1-1v-8c0-.552.447-1 1-1 .553 0 1 .448 1 1v8z"/><path fill="#66757F" d="M19 19h-5l1 11h3v-7 7h3l1-11z"/><path fill="#546170" d="M18 23c-.552 0-1 7-1 7 0 .553.448 0 1 0 .553 0 1 .553 1 0 0 0-.447-7-1-7z"/><path fill="#292F33" d="M22 11h-8c-1.104 0-2 .896-2 2v8h2v1h2l2-1 2 1h2v-1h2v-8c0-1.104-.896-2-2-2zm-5.36 18.479c1.105 0 1.346.159 1.359.521.052 1.375-1.786 3.479-3.141 2.979-.86-.317-.422-1.901.141-2.979.23-.441.962-.521 1.641-.521z"/><path fill="#292F33" d="M19.36 29.479c-1.105 0-1.346.159-1.359.521-.051 1.375 1.787 3.479 3.141 2.979.86-.317.422-1.901-.141-2.979-.23-.441-.961-.521-1.641-.521z"/><path fill="#FFDC5D" d="M16.799 10h2.402v1.592h-2.402zm-1.495-3.181c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071zm6.696 0c0 .592-.3 1.071-.67 1.071-.37 0-.67-.48-.67-1.071 0-.592.3-1.071.67-1.071.37-.001.67.479.67 1.071z"/><path fill="#FFDC5D" d="M18 10.906c-1.923 0-3.482-1.851-3.482-4.135S16.077 2.636 18 2.636s3.482 1.851 3.482 4.135-1.559 4.135-3.482 4.135"/><path fill="#C1694F" d="M19.305 9.096c-.015-.025-.043-.041-.073-.041h-2.453c-.03 0-.058.015-.073.041-.015.025-.017.057-.003.084.015.029.372.704 1.303.704.931 0 1.288-.676 1.303-.704.013-.026.011-.058-.004-.084zm-1.297-1.16c-.269 0-.478-.048-.646-.122.055.198.21.474.646.474.436 0 .59-.276.646-.474-.168.074-.377.122-.646.122z"/><path fill="#FFAC33" d="M14.827 6.396c.06-.296.148-.546.246-.771h-.777c.121.874.465 1.095.531.771zm6.346-.125c.239.47.475.152.55-.771h-.942l.392.771z"/><path fill="#546170" d="M19.8 13.2l1.276-1.2-.49-1H19.8z"/><path fill="#66757F" d="M17.997 18l3.099-5.045-1.271-1.361z"/><path fill="#546170" d="M16.2 13.2L14.924 12l.49-1h.786z"/><path fill="#66757F" d="M18 18l-3.099-5.045 1.271-1.361z"/><path fill="#E1E8ED" d="M18 18l-2-7 2 1 2-1z"/><path fill="#55ACEE" d="M19 12l-1-.417L17 12l.878.878-.793 1.918L18 18l.915-3.204-.793-1.918z"/><path fill="#F5F8FA" d="M16.562 10.562L18 11.583l-.938.995L16 11zm2.876 0L18 11.583l.938.995L20 11z"/><ellipse fill="#99AAB5" cx="18" cy="35" rx="6" ry="1"/><path fill="#292F33" d="M20.324 3.977c.612-.166 1.091-.411 1.091-.411s-.141-.578-.283-.95c-.442-1.154-1.175-1.729-1.849-1.558-1.019.259-1.496.11-2.712-.034-1.215-.144-1.773 1.682-1.968 2.542 0 0 .322.274.902.403.022.005.05.008.073.013-2.094.094-2.787.351-2.787.852 0 .66 2.336 1.333 5.219 1.333 2.882 0 5.219-.673 5.219-1.333-.002-.511-.723-.767-2.905-.857z"/><path fill="#66757F" d="M21.583 4.225c-.012-.069-.027-.145-.043-.22-.048-.225-.126-.439-.126-.439s-1.101.429-3.406.429-3.406-.429-3.406-.429-.078.214-.126.439c-.016.076-.031.152-.043.22-.048.273.081.461.966.649.6.127 1.582.241 2.608.22 1.026.021 2.009-.093 2.608-.22.888-.188 1.017-.376.968-.649z"/><path fill="#292F33" d="M21.492 5.897l-.958.316c-.337-.047-1.038-.066-1.779.015-.197.022-.272.078-.739.078-.466 0-.542-.056-.739-.078-.741-.081-1.442-.062-1.779-.015l-.958-.316c-.093-.033-.191.019-.221.111s.02.19.111.221l.894.295c.066.051.208.148.242.248.039.116.117.861.35 1.055.241.2 1.148.125 1.322.039.389-.194.437-.82.505-1.094.039-.155.272-.155.272-.155s.233 0 .272.155c.069.274.117.902.505 1.096.174.087 1.081.161 1.322-.039.233-.194.311-.941.35-1.057.033-.1.175-.196.241-.247l.895-.295c.092-.03.142-.129.111-.221-.029-.093-.132-.144-.219-.112z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f576.svg b/public/emoji/1f576.svg index 2244dcdd8..5d5c04fb8 100644 --- a/public/emoji/1f576.svg +++ b/public/emoji/1f576.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill-rule="evenodd" clip-rule="evenodd" fill="#292F33" d="M1.24 15.018c.24.239 1.438.957 1.677 1.675.24.717.72 5.307 2.158 6.504 1.483 1.232 7.077.773 8.148.24 2.397-1.195 2.691-5.055 3.115-6.745.239-.957 1.677-.957 1.677-.957s1.438 0 1.678.956c.424 1.691.72 5.562 3.115 6.755 1.072.535 6.666.994 8.151-.238 1.436-1.197 1.915-5.799 2.155-6.517.238-.717 1.438-1.435 1.677-1.674.241-.239.241-1.196 0-1.436-.479-.478-6.134-.904-12.223-.239-1.215.133-1.677.478-4.554.478-2.875 0-3.339-.346-4.553-.478-6.085-.664-11.741-.238-12.221.24-.239.239-.239 1.197 0 1.436z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill-rule="evenodd" clip-rule="evenodd" fill="#31373D" d="M1.24 15.018c.24.239 1.438.957 1.677 1.675.24.717.72 5.307 2.158 6.504 1.483 1.232 7.077.773 8.148.24 2.397-1.195 2.691-5.055 3.115-6.745.239-.957 1.677-.957 1.677-.957s1.438 0 1.678.956c.424 1.691.72 5.562 3.115 6.755 1.072.535 6.666.994 8.151-.238 1.436-1.197 1.915-5.799 2.155-6.517.238-.717 1.438-1.435 1.677-1.674.241-.239.241-1.196 0-1.436-.479-.478-6.134-.904-12.223-.239-1.215.133-1.677.478-4.554.478-2.875 0-3.339-.346-4.553-.478-6.085-.664-11.741-.238-12.221.24-.239.239-.239 1.197 0 1.436z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f577.svg b/public/emoji/1f577.svg index f98a440fe..a15686510 100644 --- a/public/emoji/1f577.svg +++ b/public/emoji/1f577.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M14.999 17c-.208 0-.419-.065-.599-.2C9.863 13.397 6.959 7.585 7 1.993c.004-.553.412-.975 1.007-.993.553.004.997.455.993 1.007-.037 4.98 2.554 10.159 6.6 13.193.442.331.531.958.2 1.4-.196.262-.497.4-.801.4z"/><path fill="#292F33" d="M16 19c-.377 0-9.273-.098-12.919-8.606-.218-.508.018-1.096.525-1.313.508-.218 1.096.018 1.313.525C8.052 16.916 15.677 17 16 17c.552 0 1 .448 1 1 0 .553-.448 1-1 1z"/><path fill="#292F33" d="M4 29c-.104 0-.211-.017-.316-.052-.524-.174-.807-.74-.632-1.265 1.388-4.164 4.719-9.054 12.71-8.692.102.005.183.009.238.009.552 0 1 .447 1 1s-.448 1-1 1c-.076 0-.187-.005-.328-.011-5.411-.237-9.021 2.222-10.723 7.327-.14.419-.53.684-.949.684z"/><path fill="#292F33" d="M8 36c-.552 0-1-.447-1-1 0-4.495 3.228-12.703 8.485-15.857.474-.284 1.088-.131 1.372.343s.131 1.088-.343 1.372C11.997 23.568 9 31.165 9 35c0 .553-.448 1-1 1zm13.001-19c-.305 0-.604-.138-.801-.4-.332-.442-.242-1.069.2-1.4 4.046-3.035 6.637-8.213 6.6-13.193-.004-.552.44-1.003.992-1.007H28c.549 0 .996.443 1 .993.042 5.592-2.863 11.404-7.4 14.807-.18.135-.39.2-.599.2z"/><path fill="#292F33" d="M20 19c-.553 0-1-.447-1-1 0-.552.447-1 1-1 .323 0 7.948-.084 11.081-7.394.218-.507.808-.742 1.312-.525.508.217.743.805.525 1.313C29.272 18.902 20.377 19 20 19z"/><path fill="#292F33" d="M32 29c-.419 0-.809-.265-.948-.684-1.702-5.105-5.293-7.559-10.724-7.327-.141.006-.252.011-.328.011-.553 0-1-.447-1-1s.447-1 1-1c.055 0 .136-.004.238-.009 7.979-.36 11.323 4.528 12.71 8.692.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.316.052z"/><path fill="#292F33" d="M28 36c-.553 0-1-.447-1-1 0-3.835-2.997-11.432-7.515-14.143-.474-.284-.627-.898-.343-1.372.284-.473.897-.627 1.372-.343C25.771 22.297 29 30.505 29 35c0 .553-.447 1-1 1z"/><ellipse fill="#292F33" cx="18" cy="25.208" rx="6" ry="6.792"/><ellipse fill="#292F33" cx="18" cy="17" rx="4" ry="6"/><path fill="#292F33" d="M16 14c-.256 0-.512-.098-.707-.293C14 12.414 14 11.076 14 10c0-.552.448-1 1-1s1 .448 1 1c0 .92 0 1.586.707 2.293.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293zm4 0c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414C20 11.586 20 10.92 20 10c0-.552.447-1 1-1s1 .448 1 1c0 1.076 0 2.414-1.293 3.707-.195.195-.451.293-.707.293z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M14.999 17c-.208 0-.419-.065-.599-.2C9.863 13.397 6.959 7.585 7 1.993c.004-.553.412-.975 1.007-.993.553.004.997.455.993 1.007-.037 4.98 2.554 10.159 6.6 13.193.442.331.531.958.2 1.4-.196.262-.497.4-.801.4z"/><path fill="#31373D" d="M16 19c-.377 0-9.273-.098-12.919-8.606-.218-.508.018-1.096.525-1.313.508-.218 1.096.018 1.313.525C8.052 16.916 15.677 17 16 17c.552 0 1 .448 1 1 0 .553-.448 1-1 1z"/><path fill="#31373D" d="M4 29c-.104 0-.211-.017-.316-.052-.524-.174-.807-.74-.632-1.265 1.388-4.164 4.719-9.054 12.71-8.692.102.005.183.009.238.009.552 0 1 .447 1 1s-.448 1-1 1c-.076 0-.187-.005-.328-.011-5.411-.237-9.021 2.222-10.723 7.327-.14.419-.53.684-.949.684z"/><path fill="#31373D" d="M8 36c-.552 0-1-.447-1-1 0-4.495 3.228-12.703 8.485-15.857.474-.284 1.088-.131 1.372.343s.131 1.088-.343 1.372C11.997 23.568 9 31.165 9 35c0 .553-.448 1-1 1zm13.001-19c-.305 0-.604-.138-.801-.4-.332-.442-.242-1.069.2-1.4 4.046-3.035 6.637-8.213 6.6-13.193-.004-.552.44-1.003.992-1.007H28c.549 0 .996.443 1 .993.042 5.592-2.863 11.404-7.4 14.807-.18.135-.39.2-.599.2z"/><path fill="#31373D" d="M20 19c-.553 0-1-.447-1-1 0-.552.447-1 1-1 .323 0 7.948-.084 11.081-7.394.218-.507.808-.742 1.312-.525.508.217.743.805.525 1.313C29.272 18.902 20.377 19 20 19z"/><path fill="#31373D" d="M32 29c-.419 0-.809-.265-.948-.684-1.702-5.105-5.293-7.559-10.724-7.327-.141.006-.252.011-.328.011-.553 0-1-.447-1-1s.447-1 1-1c.055 0 .136-.004.238-.009 7.979-.36 11.323 4.528 12.71 8.692.175.524-.108 1.091-.632 1.265-.105.035-.212.052-.316.052z"/><path fill="#31373D" d="M28 36c-.553 0-1-.447-1-1 0-3.835-2.997-11.432-7.515-14.143-.474-.284-.627-.898-.343-1.372.284-.473.897-.627 1.372-.343C25.771 22.297 29 30.505 29 35c0 .553-.447 1-1 1z"/><ellipse fill="#31373D" cx="18" cy="25.208" rx="6" ry="6.792"/><ellipse fill="#31373D" cx="18" cy="17" rx="4" ry="6"/><path fill="#31373D" d="M16 14c-.256 0-.512-.098-.707-.293C14 12.414 14 11.076 14 10c0-.552.448-1 1-1s1 .448 1 1c0 .92 0 1.586.707 2.293.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293zm4 0c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414C20 11.586 20 10.92 20 10c0-.552.447-1 1-1s1 .448 1 1c0 1.076 0 2.414-1.293 3.707-.195.195-.451.293-.707.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f579.svg b/public/emoji/1f579.svg index a7467e3cb..33479b504 100644 --- a/public/emoji/1f579.svg +++ b/public/emoji/1f579.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M16 9h4v17h-4z"/><path fill="#DA2F47" d="M10 24.5c0 .828-.672 1.5-1.5 1.5h-3c-.828 0-1.5-.672-1.5-1.5S4.672 23 5.5 23h3c.828 0 1.5.672 1.5 1.5z"/><path fill="#292F33" d="M34 33c0 1.104-.896 2-2 2H4c-1.104 0-2-.896-2-2v-6c0-1.104.896-2 2-2h28c1.104 0 2 .896 2 2v6z"/><path fill="#292F33" d="M10 34.5c0 .828-.671 1.5-1.5 1.5h-3c-.829 0-1.5-.672-1.5-1.5S4.671 33 5.5 33h3c.829 0 1.5.672 1.5 1.5zm22 0c0 .828-.672 1.5-1.5 1.5h-3c-.828 0-1.5-.672-1.5-1.5s.672-1.5 1.5-1.5h3c.828 0 1.5.672 1.5 1.5z"/><circle fill="#DA2F47" cx="18" cy="7" r="5"/><path fill="#292F33" d="M25 26c0 1.104-.896 2-2 2H13c-1.104 0-2-.896-2-2v-1c0-1.104 3.896-6 5-6h4c1.104 0 5 4.896 5 6v1z"/><path fill="#66757F" d="M33 28c0 .553-.447 1-1 1H4c-.552 0-1-.447-1-1 0-.553.448-1 1-1h28c.553 0 1 .447 1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M16 9h4v17h-4z"/><path fill="#DA2F47" d="M10 24.5c0 .828-.672 1.5-1.5 1.5h-3c-.828 0-1.5-.672-1.5-1.5S4.672 23 5.5 23h3c.828 0 1.5.672 1.5 1.5z"/><path fill="#31373D" d="M34 33c0 1.104-.896 2-2 2H4c-1.104 0-2-.896-2-2v-6c0-1.104.896-2 2-2h28c1.104 0 2 .896 2 2v6z"/><path fill="#31373D" d="M10 34.5c0 .828-.671 1.5-1.5 1.5h-3c-.829 0-1.5-.672-1.5-1.5S4.671 33 5.5 33h3c.829 0 1.5.672 1.5 1.5zm22 0c0 .828-.672 1.5-1.5 1.5h-3c-.828 0-1.5-.672-1.5-1.5s.672-1.5 1.5-1.5h3c.828 0 1.5.672 1.5 1.5z"/><circle fill="#DA2F47" cx="18" cy="7" r="5"/><path fill="#31373D" d="M25 26c0 1.104-.896 2-2 2H13c-1.104 0-2-.896-2-2v-1c0-1.104 3.896-6 5-6h4c1.104 0 5 4.896 5 6v1z"/><path fill="#66757F" d="M33 28c0 .553-.447 1-1 1H4c-.552 0-1-.447-1-1 0-.553.448-1 1-1h28c.553 0 1 .447 1 1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f57a-1f3fb.svg b/public/emoji/1f57a-1f3fb.svg index 215ffcb0d..1eb5928c8 100644 --- a/public/emoji/1f57a-1f3fb.svg +++ b/public/emoji/1f57a-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M21.826 35.661c-.154-.19-.249-.433-.249-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.614-.001 1.117.492 1.119 1.109.004.617-.491 1.118-1.108 1.121l-3.169.017c-.35.001-.666-.159-.872-.412zm-14.506 0c-.154-.19-.248-.433-.248-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.613-.001 1.117.492 1.119 1.109.004.617-.493 1.118-1.109 1.121l-3.169.017c-.35.001-.664-.159-.872-.412z"/><path fill="#F7DECE" d="M28.151 9.007c-.423-.35-.535-.964-.24-1.441l2.247-1.63c.499-.363 1.196-.252 1.562.247.356.501.248 1.194-.249 1.558l-1.657.991c-.323.524-1.01.69-1.535.368-.047-.03-.089-.059-.128-.093z"/><path fill="#292F33" d="M28.648 6.667l-4.044 2.58-5.079.429s-6.822.855-9.048 1.472c-3.818 1.058-1.925 3.991-1.925 3.991l2.583 4.167 1.322-1.723-1.736-3.708 4.871-.906 4.001.544 6.613-1.754 3.905-2.755-1.463-2.337z"/><path fill="#F7DECE" d="M20.336 5.354c0-1.848-1.309-3.347-2.927-3.347S14.48 3.506 14.48 5.354c0 1.433.791 2.646 1.899 3.123l.253 2.498c.062.613.608 1.06 1.222.997.613-.061 1.059-.609.997-1.221l-.238-2.353c1.014-.526 1.723-1.688 1.723-3.044z"/><path fill="#292F33" d="M18.982 3.075s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.225-.282-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M13.5 10.531s.257 3.954-.29 8.34c.968-.009 7.373-.024 7.373-.024s1.156-2.033.994-4.213c-.161-2.181-1.039-4.815-1.039-4.815l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.185 1.066-2.348.415z"/><path fill="#292F33" d="M12.874 10.651s.689 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.35.32 1.479.3c.467-1.222.843-3.514.786-5.018-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.073zm-6.18 9.467s-.682 5.616-1.425 7.125c-.79 2.579-4.54 8.368-4.54 8.368l2.527.585s4.298-4.64 5.43-6.582c1.212-2.185 2.2-5.511 2.2-5.511s2.576 2.267 3.728 3.958c.727 2.003.448 8.148.448 8.148l3.028-.014s1.545-6.364.288-9.574c-.604-1.559-4.311-6.527-4.311-6.527l-7.373.024z"/><path fill="#F7DECE" d="M14.731 20.108c-.27.476-.854.692-1.376.487l-2.218-1.289 1.322-1.723 1.713.935c.573.226.854.873.629 1.447-.021.052-.044.098-.07.143z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M26.157 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031-.29-.037-.57-.108-.816-.257-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.074-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M21.19 35.405l-.41-.287c.008-.013.829-1.147 2.439-.666.092-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.379-.491-2.031.415-2.038.425z"/><path fill="#292F33" d="M14.268 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031s-.57-.108-.816-.257c-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.073-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M9.3 35.406l-.409-.288c.008-.012.823-1.149 2.439-.666.091-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.366-.488-2.012.388-2.039.426z"/><path fill="#F7DECE" d="M28.658 1.816c-.19-.089-.279.102-.279.102l-.378.812c.007-.014-.083-.071-.077-.082l.56-1.201s.089-.19-.102-.279-.279.102-.279.102l-.054.115-.472 1.013c.001-.003-.093-.049-.092-.051l.622-1.336s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.622 1.336c-.001.002-.097-.039-.099-.036l.515-1.106s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.702 1.507c-.048.103-.139.105-.179.078-.106-.072-.05-.26-.079-.424-.045-.25-.196-.415-.355-.418-.176-.003-.206.138-.192.187.028.095.073.254.126.506.037.177-.017.324-.017.324-.023.072-.085.318-.038.604.028.169.092.352.205.52l-.332.714 1.507.659.366-.956c.267-.119.5-.319.633-.604l.044-.095.631-1.355c.003-.004.091-.194-.099-.282z"/><path fill="#E0AA94" d="M26.348 2.443c.04-.012.06-.036.075-.058.168.108.389.272.491.543.132.351.054.627-.028.798-.066.138-.172.168-.099-.047.092-.27.143-.866-.455-1.205l-.055-.03c.001 0 .037.009.071-.001z"/><path fill="#F7DECE" d="M11.397 20.373c-.076-.064-.202-.171-.385-.352-.129-.128-.165-.279-.165-.279-.021-.073-.105-.312-.303-.524-.117-.126-.271-.243-.459-.319l-.116-.779-1.62.284.224.999c-.156.247-.24.542-.193.854l.016.104.224 1.478s.031.207.239.176.176-.239.176-.239L8.9 20.89c.002.015.108.013.11.026l.198 1.31s.031.207.239.176c.207-.031.176-.239.176-.239l-.019-.126-.167-1.105c0 .003.104-.01.105-.009l.221 1.457s.031.207.239.176c.207-.031.176-.239.176-.239l-.22-1.457c0-.002.103-.021.102-.024l.182 1.206s.031.207.239.176c.207-.031.176-.239.176-.239l-.249-1.644c-.017-.112.057-.165.106-.164.128.001.185.189.3.309.176.183.393.237.527.152.148-.092.095-.227.056-.259z"/><path fill="#292F33" d="M25.814 3.729S23.755 8.05 23.512 8.19c-.219.126-1.719-.042-3.699.354-1.979.396-2.744-.155-4.769-.075-1.176.046-2.413.452-3.227.648-1.237.299-3.276 3.237-3.848 4.26-.443.791-.421 1.68-.327 2.372.078.578.058 1.486.82 3.41l1.719-.281s-.289-3.783-.043-4.192c.102-.169 1.323-2.119 2.303-2.473l8.188-.385s3.375-.485 4.302-1.167c.708-.521 2.497-6.251 2.497-6.251l-1.614-.681z"/><path fill="#F7DECE" d="M15.546 5.857c.175-.172.407-.289.671-.314.613-.064 1.16.383 1.222.997l.319 3.153c.061.611-.384 1.16-.997 1.221-.615.063-1.161-.384-1.222-.997l-.32-3.153c-.035-.35.095-.676.327-.907z"/><path fill="#F7DECE" d="M19.243 4.296c0 1.849-1.309 3.348-2.927 3.348s-2.929-1.499-2.929-3.348c0-1.848 1.311-3.347 2.929-3.347 1.618 0 2.927 1.499 2.927 3.347z"/><path fill="#292F33" d="M17.89 2.018s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.226-.283-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M12.407 9.474v9.253l7.083-.024s.625-2.703 1.034-4.549c.474-2.135-1.079-5.392-1.079-5.392l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.184 1.067-2.349.414z"/><path fill="#292F33" d="M11.781 9.593s.688 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.441.486 1.57.466c.467-1.222.752-3.679.695-5.183-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.074zm-5.89 10.38s-.607 6.995-.982 8.307c-.334 1.168-3.799 6.742-3.799 6.742s1.646.406 3.229.094c0 0 3.163-3.836 3.99-5.688.24-.539 1.835-5.521 1.835-5.521s1.712 1.908 2.863 3.599c.728 2.003.09 7.442.09 7.442s1.483.312 2.899.042c0 0 .859-5.397.651-7.688-.033-.367-.103-1.05-.245-1.309-.619-1.123-1.963-3.231-2.822-4.172-.774-.847-.625-1.873-.625-1.873l-7.084.025z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f57a-1f3fc.svg b/public/emoji/1f57a-1f3fc.svg index b8ff07cda..37bfbee9c 100644 --- a/public/emoji/1f57a-1f3fc.svg +++ b/public/emoji/1f57a-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M21.826 35.661c-.154-.19-.249-.433-.249-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.614-.001 1.117.492 1.119 1.109.004.617-.491 1.118-1.108 1.121l-3.169.017c-.35.001-.666-.159-.872-.412zm-14.506 0c-.154-.19-.248-.433-.248-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.613-.001 1.117.492 1.119 1.109.004.617-.493 1.118-1.109 1.121l-3.169.017c-.35.001-.664-.159-.872-.412z"/><path fill="#F3D2A2" d="M28.151 9.007c-.423-.35-.535-.964-.24-1.441l2.247-1.63c.499-.363 1.196-.252 1.562.247.356.501.248 1.194-.249 1.558l-1.657.991c-.323.524-1.01.69-1.535.368-.047-.03-.089-.059-.128-.093z"/><path fill="#292F33" d="M28.648 6.667l-4.044 2.58-5.079.429s-6.822.855-9.048 1.472c-3.818 1.058-1.925 3.991-1.925 3.991l2.583 4.167 1.322-1.723-1.736-3.708 4.871-.906 4.001.544 6.613-1.754 3.905-2.755-1.463-2.337z"/><path fill="#F3D2A2" d="M20.336 5.354c0-1.848-1.309-3.347-2.927-3.347S14.48 3.506 14.48 5.354c0 1.433.791 2.646 1.899 3.123l.253 2.498c.062.613.608 1.06 1.222.997.613-.061 1.059-.609.997-1.221l-.238-2.353c1.014-.526 1.723-1.688 1.723-3.044z"/><path fill="#FFE51E" d="M18.982 3.075s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.225-.282-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M13.5 10.531s.257 3.954-.29 8.34c.968-.009 7.373-.024 7.373-.024s1.156-2.033.994-4.213c-.161-2.181-1.039-4.815-1.039-4.815l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.185 1.066-2.348.415z"/><path fill="#292F33" d="M12.874 10.651s.689 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.35.32 1.479.3c.467-1.222.843-3.514.786-5.018-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.073zm-6.18 9.467s-.682 5.616-1.425 7.125c-.79 2.579-4.54 8.368-4.54 8.368l2.527.585s4.298-4.64 5.43-6.582c1.212-2.185 2.2-5.511 2.2-5.511s2.576 2.267 3.728 3.958c.727 2.003.448 8.148.448 8.148l3.028-.014s1.545-6.364.288-9.574c-.604-1.559-4.311-6.527-4.311-6.527l-7.373.024z"/><path fill="#F3D2A2" d="M14.731 20.108c-.27.476-.854.692-1.376.487l-2.218-1.289 1.322-1.723 1.713.935c.573.226.854.873.629 1.447-.021.052-.044.098-.07.143z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M26.157 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031-.29-.037-.57-.108-.816-.257-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.074-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M21.19 35.405l-.41-.287c.008-.013.829-1.147 2.439-.666.092-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.379-.491-2.031.415-2.038.425z"/><path fill="#292F33" d="M14.268 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031s-.57-.108-.816-.257c-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.073-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M9.3 35.406l-.409-.288c.008-.012.823-1.149 2.439-.666.091-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.366-.488-2.012.388-2.039.426z"/><path fill="#F3D2A2" d="M28.658 1.816c-.19-.089-.279.102-.279.102l-.378.812c.007-.014-.083-.071-.077-.082l.56-1.201s.089-.19-.102-.279-.279.102-.279.102l-.054.115-.472 1.013c.001-.003-.093-.049-.092-.051l.622-1.336s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.622 1.336c-.001.002-.097-.039-.099-.036l.515-1.106s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.702 1.507c-.048.103-.139.105-.179.078-.106-.072-.05-.26-.079-.424-.045-.25-.196-.415-.355-.418-.176-.003-.206.138-.192.187.028.095.073.254.126.506.037.177-.017.324-.017.324-.023.072-.085.318-.038.604.028.169.092.352.205.52l-.332.714 1.507.659.366-.956c.267-.119.5-.319.633-.604l.044-.095.631-1.355c.003-.004.091-.194-.099-.282z"/><path fill="#D2A077" d="M26.348 2.443c.04-.012.06-.036.075-.058.168.108.389.272.491.543.132.351.054.627-.028.798-.066.138-.172.168-.099-.047.092-.27.143-.866-.455-1.205l-.055-.03c.001 0 .037.009.071-.001z"/><path fill="#F3D2A2" d="M11.397 20.373c-.076-.064-.202-.171-.385-.352-.129-.128-.165-.279-.165-.279-.021-.073-.105-.312-.303-.524-.117-.126-.271-.243-.459-.319l-.116-.779-1.62.284.224.999c-.156.247-.24.542-.193.854l.016.104.224 1.478s.031.207.239.176.176-.239.176-.239L8.9 20.89c.002.015.108.013.11.026l.198 1.31s.031.207.239.176c.207-.031.176-.239.176-.239l-.019-.126-.167-1.105c0 .003.104-.01.105-.009l.221 1.457s.031.207.239.176c.207-.031.176-.239.176-.239l-.22-1.457c0-.002.103-.021.102-.024l.182 1.206s.031.207.239.176c.207-.031.176-.239.176-.239l-.249-1.644c-.017-.112.057-.165.106-.164.128.001.185.189.3.309.176.183.393.237.527.152.148-.092.095-.227.056-.259z"/><path fill="#292F33" d="M25.814 3.729S23.755 8.05 23.512 8.19c-.219.126-1.719-.042-3.699.354-1.979.396-2.744-.155-4.769-.075-1.176.046-2.413.452-3.227.648-1.237.299-3.276 3.237-3.848 4.26-.443.791-.421 1.68-.327 2.372.078.578.058 1.486.82 3.41l1.719-.281s-.289-3.783-.043-4.192c.102-.169 1.323-2.119 2.303-2.473l8.188-.385s3.375-.485 4.302-1.167c.708-.521 2.497-6.251 2.497-6.251l-1.614-.681z"/><path fill="#F3D2A2" d="M15.546 5.857c.175-.172.407-.289.671-.314.613-.064 1.16.383 1.222.997l.319 3.153c.061.611-.384 1.16-.997 1.221-.615.063-1.161-.384-1.222-.997l-.32-3.153c-.035-.35.095-.676.327-.907z"/><path fill="#F3D2A2" d="M19.243 4.296c0 1.849-1.309 3.348-2.927 3.348s-2.929-1.499-2.929-3.348c0-1.848 1.311-3.347 2.929-3.347 1.618 0 2.927 1.499 2.927 3.347z"/><path fill="#FFE51E" d="M17.89 2.018s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.226-.283-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M12.407 9.474v9.253l7.083-.024s.625-2.703 1.034-4.549c.474-2.135-1.079-5.392-1.079-5.392l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.184 1.067-2.349.414z"/><path fill="#292F33" d="M11.781 9.593s.688 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.441.486 1.57.466c.467-1.222.752-3.679.695-5.183-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.074zm-5.89 10.38s-.607 6.995-.982 8.307c-.334 1.168-3.799 6.742-3.799 6.742s1.646.406 3.229.094c0 0 3.163-3.836 3.99-5.688.24-.539 1.835-5.521 1.835-5.521s1.712 1.908 2.863 3.599c.728 2.003.09 7.442.09 7.442s1.483.312 2.899.042c0 0 .859-5.397.651-7.688-.033-.367-.103-1.05-.245-1.309-.619-1.123-1.963-3.231-2.822-4.172-.774-.847-.625-1.873-.625-1.873l-7.084.025z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f57a-1f3fd.svg b/public/emoji/1f57a-1f3fd.svg index 14e536b4f..586b6c5e9 100644 --- a/public/emoji/1f57a-1f3fd.svg +++ b/public/emoji/1f57a-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M21.826 35.661c-.154-.19-.249-.433-.249-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.614-.001 1.117.492 1.119 1.109.004.617-.491 1.118-1.108 1.121l-3.169.017c-.35.001-.666-.159-.872-.412zm-14.506 0c-.154-.19-.248-.433-.248-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.613-.001 1.117.492 1.119 1.109.004.617-.493 1.118-1.109 1.121l-3.169.017c-.35.001-.664-.159-.872-.412z"/><path fill="#D5AB88" d="M28.151 9.007c-.423-.35-.535-.964-.24-1.441l2.247-1.63c.499-.363 1.196-.252 1.562.247.356.501.248 1.194-.249 1.558l-1.657.991c-.323.524-1.01.69-1.535.368-.047-.03-.089-.059-.128-.093z"/><path fill="#292F33" d="M28.648 6.667l-4.044 2.58-5.079.429s-6.822.855-9.048 1.472c-3.818 1.058-1.925 3.991-1.925 3.991l2.583 4.167 1.322-1.723-1.736-3.708 4.871-.906 4.001.544 6.613-1.754 3.905-2.755-1.463-2.337z"/><path fill="#D5AB88" d="M20.336 5.354c0-1.848-1.309-3.347-2.927-3.347S14.48 3.506 14.48 5.354c0 1.433.791 2.646 1.899 3.123l.253 2.498c.062.613.608 1.06 1.222.997.613-.061 1.059-.609.997-1.221l-.238-2.353c1.014-.526 1.723-1.688 1.723-3.044z"/><path fill="#963B22" d="M18.982 3.075s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.225-.282-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M13.5 10.531s.257 3.954-.29 8.34c.968-.009 7.373-.024 7.373-.024s1.156-2.033.994-4.213c-.161-2.181-1.039-4.815-1.039-4.815l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.185 1.066-2.348.415z"/><path fill="#292F33" d="M12.874 10.651s.689 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.35.32 1.479.3c.467-1.222.843-3.514.786-5.018-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.073zm-6.18 9.467s-.682 5.616-1.425 7.125c-.79 2.579-4.54 8.368-4.54 8.368l2.527.585s4.298-4.64 5.43-6.582c1.212-2.185 2.2-5.511 2.2-5.511s2.576 2.267 3.728 3.958c.727 2.003.448 8.148.448 8.148l3.028-.014s1.545-6.364.288-9.574c-.604-1.559-4.311-6.527-4.311-6.527l-7.373.024z"/><path fill="#D5AB88" d="M14.731 20.108c-.27.476-.854.692-1.376.487l-2.218-1.289 1.322-1.723 1.713.935c.573.226.854.873.629 1.447-.021.052-.044.098-.07.143z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M26.157 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031-.29-.037-.57-.108-.816-.257-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.074-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M21.19 35.405l-.41-.287c.008-.013.829-1.147 2.439-.666.092-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.379-.491-2.031.415-2.038.425z"/><path fill="#292F33" d="M14.268 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031s-.57-.108-.816-.257c-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.073-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M9.3 35.406l-.409-.288c.008-.012.823-1.149 2.439-.666.091-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.366-.488-2.012.388-2.039.426z"/><path fill="#D4AB88" d="M28.658 1.816c-.19-.089-.279.102-.279.102l-.378.812c.007-.014-.083-.071-.077-.082l.56-1.201s.089-.19-.102-.279-.279.102-.279.102l-.054.115-.472 1.013c.001-.003-.093-.049-.092-.051l.622-1.336s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.622 1.336c-.001.002-.097-.039-.099-.036l.515-1.106s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.702 1.507c-.048.103-.139.105-.179.078-.106-.072-.05-.26-.079-.424-.045-.25-.196-.415-.355-.418-.176-.003-.206.138-.192.187.028.095.073.254.126.506.037.177-.017.324-.017.324-.023.072-.085.318-.038.604.028.169.092.352.205.52l-.332.714 1.507.659.366-.956c.267-.119.5-.319.633-.604l.044-.095.631-1.355c.003-.004.091-.194-.099-.282z"/><path fill="#B78B60" d="M26.348 2.443c.04-.012.06-.036.075-.058.168.108.389.272.491.543.132.351.054.627-.028.798-.066.138-.172.168-.099-.047.092-.27.143-.866-.455-1.205l-.055-.03c.001 0 .037.009.071-.001z"/><path fill="#D4AB88" d="M11.397 20.373c-.076-.064-.202-.171-.385-.352-.129-.128-.165-.279-.165-.279-.021-.073-.105-.312-.303-.524-.117-.126-.271-.243-.459-.319l-.116-.779-1.62.284.224.999c-.156.247-.24.542-.193.854l.016.104.224 1.478s.031.207.239.176.176-.239.176-.239L8.9 20.89c.002.015.108.013.11.026l.198 1.31s.031.207.239.176c.207-.031.176-.239.176-.239l-.019-.126-.167-1.105c0 .003.104-.01.105-.009l.221 1.457s.031.207.239.176c.207-.031.176-.239.176-.239l-.22-1.457c0-.002.103-.021.102-.024l.182 1.206s.031.207.239.176c.207-.031.176-.239.176-.239l-.249-1.644c-.017-.112.057-.165.106-.164.128.001.185.189.3.309.176.183.393.237.527.152.148-.092.095-.227.056-.259z"/><path fill="#292F33" d="M25.814 3.729S23.755 8.05 23.512 8.19c-.219.126-1.719-.042-3.699.354-1.979.396-2.744-.155-4.769-.075-1.176.046-2.413.452-3.227.648-1.237.299-3.276 3.237-3.848 4.26-.443.791-.421 1.68-.327 2.372.078.578.058 1.486.82 3.41l1.719-.281s-.289-3.783-.043-4.192c.102-.169 1.323-2.119 2.303-2.473l8.188-.385s3.375-.485 4.302-1.167c.708-.521 2.497-6.251 2.497-6.251l-1.614-.681z"/><path fill="#D4AB88" d="M15.546 5.857c.175-.172.407-.289.671-.314.613-.064 1.16.383 1.222.997l.319 3.153c.061.611-.384 1.16-.997 1.221-.615.063-1.161-.384-1.222-.997l-.32-3.153c-.035-.35.095-.676.327-.907z"/><path fill="#D4AB88" d="M19.243 4.296c0 1.849-1.309 3.348-2.927 3.348s-2.929-1.499-2.929-3.348c0-1.848 1.311-3.347 2.929-3.347 1.618 0 2.927 1.499 2.927 3.347z"/><path fill="#963B22" d="M17.89 2.018s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.226-.283-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M12.407 9.474v9.253l7.083-.024s.625-2.703 1.034-4.549c.474-2.135-1.079-5.392-1.079-5.392l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.184 1.067-2.349.414z"/><path fill="#292F33" d="M11.781 9.593s.688 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.441.486 1.57.466c.467-1.222.752-3.679.695-5.183-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.074zm-5.89 10.38s-.607 6.995-.982 8.307c-.334 1.168-3.799 6.742-3.799 6.742s1.646.406 3.229.094c0 0 3.163-3.836 3.99-5.688.24-.539 1.835-5.521 1.835-5.521s1.712 1.908 2.863 3.599c.728 2.003.09 7.442.09 7.442s1.483.312 2.899.042c0 0 .859-5.397.651-7.688-.033-.367-.103-1.05-.245-1.309-.619-1.123-1.963-3.231-2.822-4.172-.774-.847-.625-1.873-.625-1.873l-7.084.025z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f57a-1f3fe.svg b/public/emoji/1f57a-1f3fe.svg index 6697af06f..02824e9cb 100644 --- a/public/emoji/1f57a-1f3fe.svg +++ b/public/emoji/1f57a-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M21.826 35.661c-.154-.19-.249-.433-.249-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.614-.001 1.117.492 1.119 1.109.004.617-.491 1.118-1.108 1.121l-3.169.017c-.35.001-.666-.159-.872-.412zm-14.506 0c-.154-.19-.248-.433-.248-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.613-.001 1.117.492 1.119 1.109.004.617-.493 1.118-1.109 1.121l-3.169.017c-.35.001-.664-.159-.872-.412z"/><path fill="#AF7E57" d="M28.151 9.007c-.423-.35-.535-.964-.24-1.441l2.247-1.63c.499-.363 1.196-.252 1.562.247.356.501.248 1.194-.249 1.558l-1.657.991c-.323.524-1.01.69-1.535.368-.047-.03-.089-.059-.128-.093z"/><path fill="#292F33" d="M28.648 6.667l-4.044 2.58-5.079.429s-6.822.855-9.048 1.472c-3.818 1.058-1.925 3.991-1.925 3.991l2.583 4.167 1.322-1.723-1.736-3.708 4.871-.906 4.001.544 6.613-1.754 3.905-2.755-1.463-2.337z"/><path fill="#AF7E57" d="M20.336 5.354c0-1.848-1.309-3.347-2.927-3.347S14.48 3.506 14.48 5.354c0 1.433.791 2.646 1.899 3.123l.253 2.498c.062.613.608 1.06 1.222.997.613-.061 1.059-.609.997-1.221l-.238-2.353c1.014-.526 1.723-1.688 1.723-3.044z"/><path fill="#60352A" d="M18.982 3.075s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.225-.282-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M13.5 10.531s.257 3.954-.29 8.34c.968-.009 7.373-.024 7.373-.024s1.156-2.033.994-4.213c-.161-2.181-1.039-4.815-1.039-4.815l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.185 1.066-2.348.415z"/><path fill="#292F33" d="M12.874 10.651s.689 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.35.32 1.479.3c.467-1.222.843-3.514.786-5.018-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.073zm-6.18 9.467s-.682 5.616-1.425 7.125c-.79 2.579-4.54 8.368-4.54 8.368l2.527.585s4.298-4.64 5.43-6.582c1.212-2.185 2.2-5.511 2.2-5.511s2.576 2.267 3.728 3.958c.727 2.003.448 8.148.448 8.148l3.028-.014s1.545-6.364.288-9.574c-.604-1.559-4.311-6.527-4.311-6.527l-7.373.024z"/><path fill="#AF7E57" d="M14.731 20.108c-.27.476-.854.692-1.376.487l-2.218-1.289 1.322-1.723 1.713.935c.573.226.854.873.629 1.447-.021.052-.044.098-.07.143z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M26.157 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031-.29-.037-.57-.108-.816-.257-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.074-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M21.19 35.405l-.41-.287c.008-.013.829-1.147 2.439-.666.092-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.379-.491-2.031.415-2.038.425z"/><path fill="#292F33" d="M14.268 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031s-.57-.108-.816-.257c-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.073-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M9.3 35.406l-.409-.288c.008-.012.823-1.149 2.439-.666.091-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.366-.488-2.012.388-2.039.426z"/><path fill="#AF7E57" d="M28.658 1.816c-.19-.089-.279.102-.279.102l-.378.812c.007-.014-.083-.071-.077-.082l.56-1.201s.089-.19-.102-.279-.279.102-.279.102l-.054.115-.472 1.013c.001-.003-.093-.049-.092-.051l.622-1.336s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.622 1.336c-.001.002-.097-.039-.099-.036l.515-1.106s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.702 1.507c-.048.103-.139.105-.179.078-.106-.072-.05-.26-.079-.424-.045-.25-.196-.415-.355-.418-.176-.003-.206.138-.192.187.028.095.073.254.126.506.037.177-.017.324-.017.324-.023.072-.085.318-.038.604.028.169.092.352.205.52l-.332.714 1.507.659.366-.956c.267-.119.5-.319.633-.604l.044-.095.631-1.355c.003-.004.091-.194-.099-.282z"/><path fill="#90603E" d="M26.348 2.443c.04-.012.06-.036.075-.058.168.108.389.272.491.543.132.351.054.627-.028.798-.066.138-.172.168-.099-.047.092-.27.143-.866-.455-1.205l-.055-.03c.001 0 .037.009.071-.001z"/><path fill="#AF7E57" d="M11.397 20.373c-.076-.064-.202-.171-.385-.352-.129-.128-.165-.279-.165-.279-.021-.073-.105-.312-.303-.524-.117-.126-.271-.243-.459-.319l-.116-.779-1.62.284.224.999c-.156.247-.24.542-.193.854l.016.104.224 1.478s.031.207.239.176.176-.239.176-.239L8.9 20.89c.002.015.108.013.11.026l.198 1.31s.031.207.239.176c.207-.031.176-.239.176-.239l-.019-.126-.167-1.105c0 .003.104-.01.105-.009l.221 1.457s.031.207.239.176c.207-.031.176-.239.176-.239l-.22-1.457c0-.002.103-.021.102-.024l.182 1.206s.031.207.239.176c.207-.031.176-.239.176-.239l-.249-1.644c-.017-.112.057-.165.106-.164.128.001.185.189.3.309.176.183.393.237.527.152.148-.092.095-.227.056-.259z"/><path fill="#292F33" d="M25.814 3.729S23.755 8.05 23.512 8.19c-.219.126-1.719-.042-3.699.354-1.979.396-2.744-.155-4.769-.075-1.176.046-2.413.452-3.227.648-1.237.299-3.276 3.237-3.848 4.26-.443.791-.421 1.68-.327 2.372.078.578.058 1.486.82 3.41l1.719-.281s-.289-3.783-.043-4.192c.102-.169 1.323-2.119 2.303-2.473l8.188-.385s3.375-.485 4.302-1.167c.708-.521 2.497-6.251 2.497-6.251l-1.614-.681z"/><path fill="#AF7E57" d="M15.546 5.857c.175-.172.407-.289.671-.314.613-.064 1.16.383 1.222.997l.319 3.153c.061.611-.384 1.16-.997 1.221-.615.063-1.161-.384-1.222-.997l-.32-3.153c-.035-.35.095-.676.327-.907z"/><path fill="#AF7E57" d="M19.243 4.296c0 1.849-1.309 3.348-2.927 3.348s-2.929-1.499-2.929-3.348c0-1.848 1.311-3.347 2.929-3.347 1.618 0 2.927 1.499 2.927 3.347z"/><path fill="#60352A" d="M17.89 2.018s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.226-.283-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M12.407 9.474v9.253l7.083-.024s.625-2.703 1.034-4.549c.474-2.135-1.079-5.392-1.079-5.392l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.184 1.067-2.349.414z"/><path fill="#292F33" d="M11.781 9.593s.688 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.441.486 1.57.466c.467-1.222.752-3.679.695-5.183-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.074zm-5.89 10.38s-.607 6.995-.982 8.307c-.334 1.168-3.799 6.742-3.799 6.742s1.646.406 3.229.094c0 0 3.163-3.836 3.99-5.688.24-.539 1.835-5.521 1.835-5.521s1.712 1.908 2.863 3.599c.728 2.003.09 7.442.09 7.442s1.483.312 2.899.042c0 0 .859-5.397.651-7.688-.033-.367-.103-1.05-.245-1.309-.619-1.123-1.963-3.231-2.822-4.172-.774-.847-.625-1.873-.625-1.873l-7.084.025z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f57a-1f3ff.svg b/public/emoji/1f57a-1f3ff.svg index e8e68b6cb..f43787a0f 100644 --- a/public/emoji/1f57a-1f3ff.svg +++ b/public/emoji/1f57a-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M21.826 35.661c-.154-.19-.249-.433-.249-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.614-.001 1.117.492 1.119 1.109.004.617-.491 1.118-1.108 1.121l-3.169.017c-.35.001-.666-.159-.872-.412zm-14.506 0c-.154-.19-.248-.433-.248-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.613-.001 1.117.492 1.119 1.109.004.617-.493 1.118-1.109 1.121l-3.169.017c-.35.001-.664-.159-.872-.412z"/><path fill="#7C533E" d="M28.151 9.007c-.423-.35-.535-.964-.24-1.441l2.247-1.63c.499-.363 1.196-.252 1.562.247.356.501.248 1.194-.249 1.558l-1.657.991c-.323.524-1.01.69-1.535.368-.047-.03-.089-.059-.128-.093z"/><path fill="#292F33" d="M28.648 6.667l-4.044 2.58-5.079.429s-6.822.855-9.048 1.472c-3.818 1.058-1.925 3.991-1.925 3.991l2.583 4.167 1.322-1.723-1.736-3.708 4.871-.906 4.001.544 6.613-1.754 3.905-2.755-1.463-2.337z"/><path fill="#7C533E" d="M20.336 5.354c0-1.848-1.309-3.347-2.927-3.347S14.48 3.506 14.48 5.354c0 1.433.791 2.646 1.899 3.123l.253 2.498c.062.613.608 1.06 1.222.997.613-.061 1.059-.609.997-1.221l-.238-2.353c1.014-.526 1.723-1.688 1.723-3.044z"/><path fill="#0B0200" d="M18.982 3.075s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.225-.282-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M13.5 10.531s.257 3.954-.29 8.34c.968-.009 7.373-.024 7.373-.024s1.156-2.033.994-4.213c-.161-2.181-1.039-4.815-1.039-4.815l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.185 1.066-2.348.415z"/><path fill="#292F33" d="M12.874 10.651s.689 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.35.32 1.479.3c.467-1.222.843-3.514.786-5.018-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.073zm-6.18 9.467s-.682 5.616-1.425 7.125c-.79 2.579-4.54 8.368-4.54 8.368l2.527.585s4.298-4.64 5.43-6.582c1.212-2.185 2.2-5.511 2.2-5.511s2.576 2.267 3.728 3.958c.727 2.003.448 8.148.448 8.148l3.028-.014s1.545-6.364.288-9.574c-.604-1.559-4.311-6.527-4.311-6.527l-7.373.024z"/><path fill="#7C533E" d="M14.731 20.108c-.27.476-.854.692-1.376.487l-2.218-1.289 1.322-1.723 1.713.935c.573.226.854.873.629 1.447-.021.052-.044.098-.07.143z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M26.157 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031-.29-.037-.57-.108-.816-.257-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.074-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M21.19 35.405l-.41-.287c.008-.013.829-1.147 2.439-.666.092-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.379-.491-2.031.415-2.038.425z"/><path fill="#292F33" d="M14.268 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031s-.57-.108-.816-.257c-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.073-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M9.3 35.406l-.409-.288c.008-.012.823-1.149 2.439-.666.091-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.366-.488-2.012.388-2.039.426z"/><path fill="#7C533E" d="M28.658 1.816c-.19-.089-.279.102-.279.102l-.378.812c.007-.014-.083-.071-.077-.082l.56-1.201s.089-.19-.102-.279-.279.102-.279.102l-.054.115-.472 1.013c.001-.003-.093-.049-.092-.051l.622-1.336s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.622 1.336c-.001.002-.097-.039-.099-.036l.515-1.106s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.702 1.507c-.048.103-.139.105-.179.078-.106-.072-.05-.26-.079-.424-.045-.25-.196-.415-.355-.418-.176-.003-.206.138-.192.187.028.095.073.254.126.506.037.177-.017.324-.017.324-.023.072-.085.318-.038.604.028.169.092.352.205.52l-.332.714 1.507.659.366-.956c.267-.119.5-.319.633-.604l.044-.095.631-1.355c.003-.004.091-.194-.099-.282z"/><path fill="#583529" d="M26.348 2.443c.04-.012.06-.036.075-.058.168.108.389.272.491.543.132.351.054.627-.028.798-.066.138-.172.168-.099-.047.092-.27.143-.866-.455-1.205l-.055-.03c.001 0 .037.009.071-.001z"/><path fill="#7C533E" d="M11.397 20.373c-.076-.064-.202-.171-.385-.352-.129-.128-.165-.279-.165-.279-.021-.073-.105-.312-.303-.524-.117-.126-.271-.243-.459-.319l-.116-.779-1.62.284.224.999c-.156.247-.24.542-.193.854l.016.104.224 1.478s.031.207.239.176.176-.239.176-.239L8.9 20.89c.002.015.108.013.11.026l.198 1.31s.031.207.239.176c.207-.031.176-.239.176-.239l-.019-.126-.167-1.105c0 .003.104-.01.105-.009l.221 1.457s.031.207.239.176c.207-.031.176-.239.176-.239l-.22-1.457c0-.002.103-.021.102-.024l.182 1.206s.031.207.239.176c.207-.031.176-.239.176-.239l-.249-1.644c-.017-.112.057-.165.106-.164.128.001.185.189.3.309.176.183.393.237.527.152.148-.092.095-.227.056-.259z"/><path fill="#292F33" d="M25.814 3.729S23.755 8.05 23.512 8.19c-.219.126-1.719-.042-3.699.354-1.979.396-2.744-.155-4.769-.075-1.176.046-2.413.452-3.227.648-1.237.299-3.276 3.237-3.848 4.26-.443.791-.421 1.68-.327 2.372.078.578.058 1.486.82 3.41l1.719-.281s-.289-3.783-.043-4.192c.102-.169 1.323-2.119 2.303-2.473l8.188-.385s3.375-.485 4.302-1.167c.708-.521 2.497-6.251 2.497-6.251l-1.614-.681z"/><path fill="#7C533E" d="M15.546 5.857c.175-.172.407-.289.671-.314.613-.064 1.16.383 1.222.997l.319 3.153c.061.611-.384 1.16-.997 1.221-.615.063-1.161-.384-1.222-.997l-.32-3.153c-.035-.35.095-.676.327-.907z"/><path fill="#7C533E" d="M19.243 4.296c0 1.849-1.309 3.348-2.927 3.348s-2.929-1.499-2.929-3.348c0-1.848 1.311-3.347 2.929-3.347 1.618 0 2.927 1.499 2.927 3.347z"/><path fill="#0B0200" d="M17.89 2.018s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.226-.283-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M12.407 9.474v9.253l7.083-.024s.625-2.703 1.034-4.549c.474-2.135-1.079-5.392-1.079-5.392l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.184 1.067-2.349.414z"/><path fill="#292F33" d="M11.781 9.593s.688 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.441.486 1.57.466c.467-1.222.752-3.679.695-5.183-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.074zm-5.89 10.38s-.607 6.995-.982 8.307c-.334 1.168-3.799 6.742-3.799 6.742s1.646.406 3.229.094c0 0 3.163-3.836 3.99-5.688.24-.539 1.835-5.521 1.835-5.521s1.712 1.908 2.863 3.599c.728 2.003.09 7.442.09 7.442s1.483.312 2.899.042c0 0 .859-5.397.651-7.688-.033-.367-.103-1.05-.245-1.309-.619-1.123-1.963-3.231-2.822-4.172-.774-.847-.625-1.873-.625-1.873l-7.084.025z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f57a.svg b/public/emoji/1f57a.svg index 6597b5ce1..e63c1ec84 100644 --- a/public/emoji/1f57a.svg +++ b/public/emoji/1f57a.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M21.826 35.661c-.154-.19-.249-.433-.249-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.614-.001 1.117.492 1.119 1.109.004.617-.491 1.118-1.108 1.121l-3.169.017c-.35.001-.666-.159-.872-.412zm-14.506 0c-.154-.19-.248-.433-.248-.698-.004-.617.493-1.118 1.109-1.121l3.17-.016c.613-.001 1.117.492 1.119 1.109.004.617-.493 1.118-1.109 1.121l-3.169.017c-.35.001-.664-.159-.872-.412z"/><path fill="#FFDC5D" d="M28.151 9.007c-.423-.35-.535-.964-.24-1.441l2.247-1.63c.499-.363 1.196-.252 1.562.247.356.501.248 1.194-.249 1.558l-1.657.991c-.323.524-1.01.69-1.535.368-.047-.03-.089-.059-.128-.093z"/><path fill="#292F33" d="M28.648 6.667l-4.044 2.58-5.079.429s-6.822.855-9.048 1.472c-3.818 1.058-1.925 3.991-1.925 3.991l2.583 4.167 1.322-1.723-1.736-3.708 4.871-.906 4.001.544 6.613-1.754 3.905-2.755-1.463-2.337z"/><path fill="#FFDC5D" d="M16.639 6.915c.175-.172.407-.289.671-.314.613-.064 1.16.383 1.222.997l.319 3.153c.062.611-.384 1.16-.997 1.221-.615.063-1.161-.384-1.222-.997l-.32-3.153c-.035-.35.094-.676.327-.907z"/><path fill="#FFDC5D" d="M20.336 5.354c0 1.849-1.309 3.348-2.927 3.348S14.48 7.203 14.48 5.354c0-1.848 1.311-3.347 2.929-3.347 1.617-.001 2.927 1.498 2.927 3.347z"/><path fill="#FFAC33" d="M18.982 3.075s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.225-.282-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M13.5 10.531s.257 3.954-.29 8.34c.968-.009 7.373-.024 7.373-.024s1.156-2.033.994-4.213c-.161-2.181-1.039-4.815-1.039-4.815l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.185 1.066-2.348.415z"/><path fill="#292F33" d="M12.874 10.651s.689 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.35.32 1.479.3c.467-1.222.843-3.514.786-5.018-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.073zm-6.18 9.467s-.682 5.616-1.425 7.125c-.79 2.579-4.54 8.368-4.54 8.368l2.527.585s4.298-4.64 5.43-6.582c1.212-2.185 2.2-5.511 2.2-5.511s2.576 2.267 3.728 3.958c.727 2.003.448 8.148.448 8.148l3.028-.014s1.545-6.364.288-9.574c-.604-1.559-4.311-6.527-4.311-6.527l-7.373.024z"/><path fill="#FFDC5D" d="M14.731 20.108c-.27.476-.854.692-1.376.487l-2.218-1.289 1.322-1.723 1.713.935c.573.226.854.873.629 1.447-.021.052-.044.098-.07.143z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M26.157 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031-.29-.037-.57-.108-.816-.257-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.074-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M21.19 35.405l-.41-.287c.008-.013.829-1.147 2.439-.666.092-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.379-.491-2.031.415-2.038.425z"/><path fill="#292F33" d="M14.268 35.26c-.005-.034-.055-.214-.055-.214l-.057.027.004-.134c-.021-.58-.608-.51-.678-.516-.07-.006-.305.006-.596-.031s-.57-.108-.816-.257c-.287-.174-.678-.467-1.014-.663s-.758-.437-.758-.437-.367.682-1.127.654c-.409-.015-1.05-.337-1.133-.36-.11-.031-.159.031-.205.116-.046.086-.211.684-.211 1.005 0 .204.025.333.044.405l-.055-.017c-.025-.007-.049.012-.049.039v.687c0 .045.037.147.155.171.118.024 1.759.165 1.821.11s.13-.232.183-.257c.053-.024.603.094.859.155s.698.165 1.218.165 1.191-.153 1.607-.257c.415-.104.741-.243.815-.289.073-.046.053-.067.048-.102z"/><path fill="#4B545D" d="M9.3 35.406l-.409-.288c.008-.012.823-1.149 2.439-.666.091-.126.23-.324.363-.544l.428.26c-.24.396-.491.718-.501.731l-.111.142-.17-.061c-1.366-.488-2.012.388-2.039.426z"/><path fill="#FFDC5D" d="M28.658 1.816c-.19-.089-.279.102-.279.102l-.378.812c.007-.014-.083-.071-.077-.082l.56-1.201s.089-.19-.102-.279-.279.102-.279.102l-.054.115-.472 1.013c.001-.003-.093-.049-.092-.051l.622-1.336s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.622 1.336c-.001.002-.097-.039-.099-.036l.515-1.106s.089-.19-.102-.279c-.19-.089-.279.102-.279.102l-.702 1.507c-.048.103-.139.105-.179.078-.106-.072-.05-.26-.079-.424-.045-.25-.196-.415-.355-.418-.176-.003-.206.138-.192.187.028.095.073.254.126.506.037.177-.017.324-.017.324-.023.072-.085.318-.038.604.028.169.092.352.205.52l-.332.714 1.507.659.366-.956c.267-.119.5-.319.633-.604l.044-.095.631-1.355c.003-.004.091-.194-.099-.282z"/><path fill="#EF9645" d="M26.348 2.443c.04-.012.06-.036.075-.058.168.108.389.272.491.543.132.351.054.627-.028.798-.066.138-.172.168-.099-.047.092-.27.143-.866-.455-1.205l-.055-.03c.001 0 .037.009.071-.001z"/><path fill="#FFDC5D" d="M11.397 20.373c-.076-.064-.202-.171-.385-.352-.129-.128-.165-.279-.165-.279-.021-.073-.105-.312-.303-.524-.117-.126-.271-.243-.459-.319l-.116-.779-1.62.284.224.999c-.156.247-.24.542-.193.854l.016.104.224 1.478s.031.207.239.176.176-.239.176-.239L8.9 20.89c.002.015.108.013.11.026l.198 1.31s.031.207.239.176c.207-.031.176-.239.176-.239l-.019-.126-.167-1.105c0 .003.104-.01.105-.009l.221 1.457s.031.207.239.176c.207-.031.176-.239.176-.239l-.22-1.457c0-.002.103-.021.102-.024l.182 1.206s.031.207.239.176c.207-.031.176-.239.176-.239l-.249-1.644c-.017-.112.057-.165.106-.164.128.001.185.189.3.309.176.183.393.237.527.152.148-.092.095-.227.056-.259z"/><path fill="#292F33" d="M25.814 3.729S23.755 8.05 23.512 8.19c-.219.126-1.719-.042-3.699.354-1.979.396-2.744-.155-4.769-.075-1.176.046-2.413.452-3.227.648-1.237.299-3.276 3.237-3.848 4.26-.443.791-.421 1.68-.327 2.372.078.578.058 1.486.82 3.41l1.719-.281s-.289-3.783-.043-4.192c.102-.169 1.323-2.119 2.303-2.473l8.188-.385s3.375-.485 4.302-1.167c.708-.521 2.497-6.251 2.497-6.251l-1.614-.681z"/><path fill="#FFDC5D" d="M15.546 5.857c.175-.172.407-.289.671-.314.613-.064 1.16.383 1.222.997l.319 3.153c.061.611-.384 1.16-.997 1.221-.615.063-1.161-.384-1.222-.997l-.32-3.153c-.035-.35.095-.676.327-.907z"/><path fill="#FFDC5D" d="M19.243 4.296c0 1.849-1.309 3.348-2.927 3.348s-2.929-1.499-2.929-3.348c0-1.848 1.311-3.347 2.929-3.347 1.618 0 2.927 1.499 2.927 3.347z"/><path fill="#FFAC33" d="M17.89 2.018s-1.14 1.07-2.349 1.255c0 0-.723 1.171-.768 1.847 0 0-.45-1.081-.81-.9-.36.18-.496.855-.18 1.305.315.451.705 1.226.363 1.003-.689-.45-.79-.768-.976-1.07-.127-.206-.425-.943-.465-2.162-.024-.721.232-2.116 1.707-2.857 1.278-.644 3.287-.315 4.231.359.945.676 1.18 2.38.594 3.056 0 0-.085-.63-.488-1.14-.226-.283-.859-.696-.859-.696z"/><path fill="#DD2E44" d="M12.407 9.474v9.253l7.083-.024s.625-2.703 1.034-4.549c.474-2.135-1.079-5.392-1.079-5.392l-1.082-.108-.212-1.011-1.056.4-.151 1.751-.456-1.666-1.548-.135-.184 1.067-2.349.414z"/><path fill="#292F33" d="M11.781 9.593s.688 2.443.385 7.5c2.228-.038 3.963-.732 3.963-.732s.146-1.919-.228-3.615c-.546-2.469-1.105-3.921-1.105-3.921l-3.015.768zm6.516-1.246s.623 3.271.484 5.224c-.14 1.953-.235 2.694-.235 2.694s.441.486 1.57.466c.467-1.222.752-3.679.695-5.183-.059-1.585-1.002-3.127-1.002-3.127l-1.512-.074zm-5.89 10.38s-.607 6.995-.982 8.307c-.334 1.168-3.799 6.742-3.799 6.742s1.646.406 3.229.094c0 0 3.163-3.836 3.99-5.688.24-.539 1.835-5.521 1.835-5.521s1.712 1.908 2.863 3.599c.728 2.003.09 7.442.09 7.442s1.483.312 2.899.042c0 0 .859-5.397.651-7.688-.033-.367-.103-1.05-.245-1.309-.619-1.123-1.963-3.231-2.822-4.172-.774-.847-.625-1.873-.625-1.873l-7.084.025z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f58a.svg b/public/emoji/1f58a.svg index ae22c0984..4e791e6ac 100644 --- a/public/emoji/1f58a.svg +++ b/public/emoji/1f58a.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M3.968 33.446C2.211 35.204.47 36.312.079 35.921c-.391-.391.718-2.132 2.475-3.889 1.757-1.758 3.498-2.866 3.889-2.475.39.391-.718 2.131-2.475 3.889z"/><path fill="#FFCC4D" d="M6.443 29.558l-2.122-2.122s-1.083 1.393-2.284 3.63C1.137 32.742.786 33.8.786 33.8l.707.707.707.707s1.059-.352 2.734-1.251c2.237-1.201 3.629-2.284 3.629-2.284l-2.12-2.121z"/><path fill="#292F33" d="M34.02 1.98c-3.535-3.536-18.164 10.297-18.871 11.004-.707.707-1.304 1.348-.928 1.724L12.1 16.829c-2.122 2.122-8.486 9.899-7.779 10.606l2.122 2.122 2.121 2.121c.707.707 8.485-5.657 10.607-7.778l2.121-2.121c.376.376 1.017-.222 1.724-.929.707-.706 14.54-15.334 11.004-18.87z"/><path fill="#FFCC4D" d="M23.016 20.851c.085-.084.362-.375.774-.817l-7.823-7.822c-.442.411-.732.689-.817.774-.707.707-1.304 1.348-.928 1.724l3.535 3.536 3.536 3.535c.375.374 1.016-.223 1.723-.93z"/><path fill="#FFAC33" d="M31.212 2.001C30.285 1.074 29.048.102 27.28.986c-1.768.884-7.313 4.441-9.878 7.005-1.322 1.322-1.247 2.102-.751 2.165.821.106 1.37.088 2.122-.663.75-.751.883-2.033.883-2.033s3.05-2.342 5.458-3.778c2.409-1.437 3.268-1.682 4.11-.84.842.842 1.988-.841 1.988-.841z"/><path fill="#FFAC33" d="M28.87 2.487l4.643 4.643c.353-.709.631-1.384.818-2.011l-3.45-3.45c-.627.188-1.301.466-2.011.818z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M3.968 33.446C2.211 35.204.47 36.312.079 35.921c-.391-.391.718-2.132 2.475-3.889 1.757-1.758 3.498-2.866 3.889-2.475.39.391-.718 2.131-2.475 3.889z"/><path fill="#FFCC4D" d="M6.443 29.558l-2.122-2.122s-1.083 1.393-2.284 3.63C1.137 32.742.786 33.8.786 33.8l.707.707.707.707s1.059-.352 2.734-1.251c2.237-1.201 3.629-2.284 3.629-2.284l-2.12-2.121z"/><path fill="#31373D" d="M34.02 1.98c-3.535-3.536-18.164 10.297-18.871 11.004-.707.707-1.304 1.348-.928 1.724L12.1 16.829c-2.122 2.122-8.486 9.899-7.779 10.606l2.122 2.122 2.121 2.121c.707.707 8.485-5.657 10.607-7.778l2.121-2.121c.376.376 1.017-.222 1.724-.929.707-.706 14.54-15.334 11.004-18.87z"/><path fill="#FFCC4D" d="M23.016 20.851c.085-.084.362-.375.774-.817l-7.823-7.822c-.442.411-.732.689-.817.774-.707.707-1.304 1.348-.928 1.724l3.535 3.536 3.536 3.535c.375.374 1.016-.223 1.723-.93z"/><path fill="#FFAC33" d="M31.212 2.001C30.285 1.074 29.048.102 27.28.986c-1.768.884-7.313 4.441-9.878 7.005-1.322 1.322-1.247 2.102-.751 2.165.821.106 1.37.088 2.122-.663.75-.751.883-2.033.883-2.033s3.05-2.342 5.458-3.778c2.409-1.437 3.268-1.682 4.11-.84.842.842 1.988-.841 1.988-.841z"/><path fill="#FFAC33" d="M28.87 2.487l4.643 4.643c.353-.709.631-1.384.818-2.011l-3.45-3.45c-.627.188-1.301.466-2.011.818z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f58b.svg b/public/emoji/1f58b.svg index dbc179197..8a7f77359 100644 --- a/public/emoji/1f58b.svg +++ b/public/emoji/1f58b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M4.167 32.729c.292.167.626.271.987.271 1.105 0 2-.896 2-2s-.895-2-2-2-2 .896-2 2c0 .361.103.695.27.987L.278 35.133 1.154 28l9-7 5 5-7 9-7.134.876 3.147-3.147z"/><path fill="#66757F" d="M22.511 5.308c-1.151 1.151-1.151 3.016 0 4.167l4.167 4.168c1.151 1.15 3.018 1.15 4.167 0l4.167-4.168c1.15-1.151 1.15-3.016 0-4.167l-4.167-4.167c-1.15-1.151-3.016-1.151-4.167 0l-4.167 4.167z"/><path fill="#292F33" d="M9.511 18.309L26.713 1.105l8.333 8.335-17.201 17.203c-1.15 1.15-3.016 1.15-4.168 0l-4.166-4.168c-1.151-1.151-1.151-3.016 0-4.166z"/><path fill="#66757F" d="M17.469 10.35l2.125-2.125 8.334 8.334-2.125 2.125z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M4.167 32.729c.292.167.626.271.987.271 1.105 0 2-.896 2-2s-.895-2-2-2-2 .896-2 2c0 .361.103.695.27.987L.278 35.133 1.154 28l9-7 5 5-7 9-7.134.876 3.147-3.147z"/><path fill="#66757F" d="M22.511 5.308c-1.151 1.151-1.151 3.016 0 4.167l4.167 4.168c1.151 1.15 3.018 1.15 4.167 0l4.167-4.168c1.15-1.151 1.15-3.016 0-4.167l-4.167-4.167c-1.15-1.151-3.016-1.151-4.167 0l-4.167 4.167z"/><path fill="#31373D" d="M9.511 18.309L26.713 1.105l8.333 8.335-17.201 17.203c-1.15 1.15-3.016 1.15-4.168 0l-4.166-4.168c-1.151-1.151-1.151-3.016 0-4.166z"/><path fill="#66757F" d="M17.469 10.35l2.125-2.125 8.334 8.334-2.125 2.125z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f590-1f3fb.svg b/public/emoji/1f590-1f3fb.svg index b366d3afb..f106ae7dd 100644 --- a/public/emoji/1f590-1f3fb.svg +++ b/public/emoji/1f590-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M11.136 19.038c.259.967-.314 1.961-1.281 2.221l-.362.097c-.967.259-1.961-.314-2.22-1.281L4.069 8.121c-.258-.967.316-1.962 1.283-2.221l.361-.097c.967-.26 1.961.314 2.221 1.281l3.202 11.954zm4.795-1.94c.159 1.023-.542 1.982-1.564 2.14l-.248.039c-1.023.158-1.981-.542-2.14-1.565l-2.34-15.07c-.16-1.023.542-1.981 1.564-2.14l.248-.039c1.023-.159 1.982.542 2.141 1.565l2.339 15.07zm4.665-.117c-.058 1.011-.925 1.783-1.937 1.726l-.244-.015c-1.013-.059-1.785-.925-1.727-1.937l.857-14.898C17.604.846 18.471.072 19.483.13l.244.014c1.012.058 1.783.926 1.727 1.938l-.858 14.899zm4.592 1.959c-.219.941-1.157 1.528-2.101 1.31l-.486-.112c-.942-.219-1.528-1.158-1.311-2.1l3.273-14.125c.219-.941 1.158-1.528 2.1-1.31l.487.113c.942.219 1.527 1.159 1.31 2.1L25.188 18.94zm3.739 8.419c-.522.903-1.677 1.213-2.581.691l-.191-.111c-.904-.522-1.214-1.677-.691-2.58l5.609-9.718c.522-.903 1.678-1.214 2.582-.692l.191.111c.904.521 1.213 1.678.691 2.581l-5.61 9.718z"/><path fill="#F7DECE" d="M6.183 16.007C6.663 18.35 6 21.192 6 24s2.125 12 12 12 10.5-8.234 12-10.666c1.5-2.432-.369-6.515-1.813-4.704-1.957 2.453-3.466 2.053-2.646-2.69.611-3.537-2.964-5.244-3.603-2.052-.493 2.467-1.299 1.952-1.186-.775.137-3.283-3.679-3.641-3.875.091-.142 2.707-1.049 1.551-1.322-.273-.234-1.563-4.389-2.721-4.013-.319.593 3.785-.182 4.833-1.458.723-.806-2.595-4.382-1.671-3.901.672z"/><path fill="#E0AA94" d="M25.965 22.053c-.3-.122-.51-.486-.599-1.114-1.892.259-4.396.77-6.366 2.695-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.294-2.727 2.243-8.128 8.891-8.576z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M32.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.074-.71-.206-.84-.609-.137-.68-.107-1.731.147-3.201l2.74-12.315c.218-.941-.293-1.852-1.523-2.149s-2.155.306-2.374 1.247L20.938 15.89c-.493 2.466-1.407 2.018-1.186-.775v-.001l.701-13.092C20.51 1.01 19.732.183 18.582.139c-1.15-.044-1.979.646-2.038 1.657l-.668 13.409c-.143 2.707-1.112 1.687-1.322-.274L13 4.083c-.159-1.023-1.118-1.73-2.268-1.546-1.15.185-1.845 1.136-1.686 2.159l1.495 9.914c.593 3.785-.182 4.833-1.458.723L7.489 9.308c-.26-.967-1.213-1.567-2.41-1.231-1.197.336-1.713 1.299-1.454 2.266l1.558 5.663c.651 4.077.651 5.686.651 8.493S7.125 36 17 36s11.906-10.031 12-10.666c0 0 .123-1.48 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.359.625-1.707-.906-2.384z"/><path fill="#E0AA94" d="M24.911 21.741c-.3-.122-.554-.436-.584-1.119-1.892.259-4.451.789-6.42 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.293-2.727 2.282-8.143 8.93-8.591z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f590-1f3fc.svg b/public/emoji/1f590-1f3fc.svg index c9b02942b..9944090ec 100644 --- a/public/emoji/1f590-1f3fc.svg +++ b/public/emoji/1f590-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M11.136 19.038c.259.967-.314 1.961-1.281 2.221l-.362.097c-.967.259-1.961-.314-2.22-1.281L4.069 8.121c-.258-.967.316-1.962 1.283-2.221l.361-.097c.967-.26 1.961.314 2.221 1.281l3.202 11.954zm4.795-1.94c.159 1.023-.542 1.982-1.564 2.14l-.248.039c-1.023.158-1.981-.542-2.14-1.565l-2.34-15.07c-.16-1.023.542-1.981 1.564-2.14l.248-.039c1.023-.159 1.982.542 2.141 1.565l2.339 15.07zm4.665-.117c-.058 1.011-.925 1.783-1.937 1.726l-.244-.015c-1.013-.059-1.785-.925-1.727-1.937l.857-14.898C17.604.846 18.471.072 19.483.13l.244.014c1.012.058 1.783.926 1.727 1.938l-.858 14.899zm4.592 1.959c-.219.941-1.157 1.528-2.101 1.31l-.486-.112c-.942-.219-1.528-1.158-1.311-2.1l3.273-14.125c.219-.941 1.158-1.528 2.1-1.31l.487.113c.942.219 1.527 1.159 1.31 2.1L25.188 18.94zm3.739 8.419c-.522.903-1.677 1.213-2.581.691l-.191-.111c-.904-.522-1.214-1.677-.691-2.58l5.609-9.718c.522-.903 1.678-1.214 2.582-.692l.191.111c.904.521 1.213 1.678.691 2.581l-5.61 9.718z"/><path fill="#F3D2A2" d="M6.183 16.007C6.663 18.35 6 21.192 6 24s2.125 12 12 12 10.5-8.234 12-10.666c1.5-2.432-.369-6.515-1.813-4.704-1.957 2.453-3.466 2.053-2.646-2.69.611-3.537-2.964-5.244-3.603-2.052-.493 2.467-1.299 1.952-1.186-.775.137-3.283-3.679-3.641-3.875.091-.142 2.707-1.049 1.551-1.322-.273-.234-1.563-4.389-2.721-4.013-.319.593 3.785-.182 4.833-1.458.723-.806-2.595-4.382-1.671-3.901.672z"/><path fill="#D2A077" d="M25.965 22.053c-.3-.122-.51-.486-.599-1.114-1.892.259-4.396.77-6.366 2.695-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.294-2.727 2.243-8.128 8.891-8.576z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M32.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.074-.71-.206-.84-.609-.137-.68-.107-1.731.147-3.201l2.74-12.315c.218-.941-.293-1.852-1.523-2.149s-2.155.306-2.374 1.247L20.938 15.89c-.493 2.466-1.407 2.018-1.186-.775v-.001l.701-13.092C20.51 1.01 19.732.183 18.582.139c-1.15-.044-1.979.646-2.038 1.657l-.668 13.409c-.143 2.707-1.112 1.687-1.322-.274L13 4.083c-.159-1.023-1.118-1.73-2.268-1.546-1.15.185-1.845 1.136-1.686 2.159l1.495 9.914c.593 3.785-.182 4.833-1.458.723L7.489 9.308c-.26-.967-1.213-1.567-2.41-1.231-1.197.336-1.713 1.299-1.454 2.266l1.558 5.663c.651 4.077.651 5.686.651 8.493S7.125 36 17 36s11.906-10.031 12-10.666c0 0 .123-1.48 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.359.625-1.707-.906-2.384z"/><path fill="#D2A077" d="M24.911 21.741c-.3-.122-.554-.436-.584-1.119-1.892.259-4.451.789-6.42 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.293-2.727 2.282-8.143 8.93-8.591z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f590-1f3fd.svg b/public/emoji/1f590-1f3fd.svg index 7a924e462..296a8f795 100644 --- a/public/emoji/1f590-1f3fd.svg +++ b/public/emoji/1f590-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M11.136 19.038c.259.967-.314 1.961-1.281 2.221l-.362.097c-.967.259-1.961-.314-2.22-1.281L4.069 8.121c-.258-.967.316-1.962 1.283-2.221l.361-.097c.967-.26 1.961.314 2.221 1.281l3.202 11.954zm4.795-1.94c.159 1.023-.542 1.982-1.564 2.14l-.248.039c-1.023.158-1.981-.542-2.14-1.565l-2.34-15.07c-.16-1.023.542-1.981 1.564-2.14l.248-.039c1.023-.159 1.982.542 2.141 1.565l2.339 15.07zm4.665-.117c-.058 1.011-.925 1.783-1.937 1.726l-.244-.015c-1.013-.059-1.785-.925-1.727-1.937l.857-14.898C17.604.846 18.471.072 19.483.13l.244.014c1.012.058 1.783.926 1.727 1.938l-.858 14.899zm4.592 1.959c-.219.941-1.157 1.528-2.101 1.31l-.486-.112c-.942-.219-1.528-1.158-1.311-2.1l3.273-14.125c.219-.941 1.158-1.528 2.1-1.31l.487.113c.942.219 1.527 1.159 1.31 2.1L25.188 18.94zm3.739 8.419c-.522.903-1.677 1.213-2.581.691l-.191-.111c-.904-.522-1.214-1.677-.691-2.58l5.609-9.718c.522-.903 1.678-1.214 2.582-.692l.191.111c.904.521 1.213 1.678.691 2.581l-5.61 9.718z"/><path fill="#D5AB88" d="M6.183 16.007C6.663 18.35 6 21.192 6 24s2.125 12 12 12 10.5-8.234 12-10.666c1.5-2.432-.369-6.515-1.813-4.704-1.957 2.453-3.466 2.053-2.646-2.69.611-3.537-2.964-5.244-3.603-2.052-.493 2.467-1.299 1.952-1.186-.775.137-3.283-3.679-3.641-3.875.091-.142 2.707-1.049 1.551-1.322-.273-.234-1.563-4.389-2.721-4.013-.319.593 3.785-.182 4.833-1.458.723-.806-2.595-4.382-1.671-3.901.672z"/><path fill="#B78B60" d="M25.965 22.053c-.3-.122-.51-.486-.599-1.114-1.892.259-4.396.77-6.366 2.695-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.294-2.727 2.243-8.128 8.891-8.576z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M32.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.074-.71-.206-.84-.609-.137-.68-.107-1.731.147-3.201l2.74-12.315c.218-.941-.293-1.852-1.523-2.149s-2.155.306-2.374 1.247L20.938 15.89c-.493 2.466-1.407 2.018-1.186-.775v-.001l.701-13.092C20.51 1.01 19.732.183 18.582.139c-1.15-.044-1.979.646-2.038 1.657l-.668 13.409c-.143 2.707-1.112 1.687-1.322-.274L13 4.083c-.159-1.023-1.118-1.73-2.268-1.546-1.15.185-1.845 1.136-1.686 2.159l1.495 9.914c.593 3.785-.182 4.833-1.458.723L7.489 9.308c-.26-.967-1.213-1.567-2.41-1.231-1.197.336-1.713 1.299-1.454 2.266l1.558 5.663c.651 4.077.651 5.686.651 8.493S7.125 36 17 36s11.906-10.031 12-10.666c0 0 .123-1.48 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.359.625-1.707-.906-2.384z"/><path fill="#B78B60" d="M24.911 21.741c-.3-.122-.554-.436-.584-1.119-1.892.259-4.451.789-6.42 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.293-2.727 2.282-8.143 8.93-8.591z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f590-1f3fe.svg b/public/emoji/1f590-1f3fe.svg index 74ed3da4f..9ec61de59 100644 --- a/public/emoji/1f590-1f3fe.svg +++ b/public/emoji/1f590-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M11.136 19.038c.259.967-.314 1.961-1.281 2.221l-.362.097c-.967.259-1.961-.314-2.22-1.281L4.069 8.121c-.258-.967.316-1.962 1.283-2.221l.361-.097c.967-.26 1.961.314 2.221 1.281l3.202 11.954zm4.795-1.94c.159 1.023-.542 1.982-1.564 2.14l-.248.039c-1.023.158-1.981-.542-2.14-1.565l-2.34-15.07c-.16-1.023.542-1.981 1.564-2.14l.248-.039c1.023-.159 1.982.542 2.141 1.565l2.339 15.07zm4.665-.117c-.058 1.011-.925 1.783-1.937 1.726l-.244-.015c-1.013-.059-1.785-.925-1.727-1.937l.857-14.898C17.604.846 18.471.072 19.483.13l.244.014c1.012.058 1.783.926 1.727 1.938l-.858 14.899zm4.592 1.959c-.219.941-1.157 1.528-2.101 1.31l-.486-.112c-.942-.219-1.528-1.158-1.311-2.1l3.273-14.125c.219-.941 1.158-1.528 2.1-1.31l.487.113c.942.219 1.527 1.159 1.31 2.1L25.188 18.94zm3.739 8.419c-.522.903-1.677 1.213-2.581.691l-.191-.111c-.904-.522-1.214-1.677-.691-2.58l5.609-9.718c.522-.903 1.678-1.214 2.582-.692l.191.111c.904.521 1.213 1.678.691 2.581l-5.61 9.718z"/><path fill="#AF7E57" d="M6.183 16.007C6.663 18.35 6 21.192 6 24s2.125 12 12 12 10.5-8.234 12-10.666c1.5-2.432-.369-6.515-1.813-4.704-1.957 2.453-3.466 2.053-2.646-2.69.611-3.537-2.964-5.244-3.603-2.052-.493 2.467-1.299 1.952-1.186-.775.137-3.283-3.679-3.641-3.875.091-.142 2.707-1.049 1.551-1.322-.273-.234-1.563-4.389-2.721-4.013-.319.593 3.785-.182 4.833-1.458.723-.806-2.595-4.382-1.671-3.901.672z"/><path fill="#90603E" d="M25.965 22.053c-.3-.122-.51-.486-.599-1.114-1.892.259-4.396.77-6.366 2.695-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.294-2.727 2.243-8.128 8.891-8.576z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M32.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.074-.71-.206-.84-.609-.137-.68-.107-1.731.147-3.201l2.74-12.315c.218-.941-.293-1.852-1.523-2.149s-2.155.306-2.374 1.247L20.938 15.89c-.493 2.466-1.407 2.018-1.186-.775v-.001l.701-13.092C20.51 1.01 19.732.183 18.582.139c-1.15-.044-1.979.646-2.038 1.657l-.668 13.409c-.143 2.707-1.112 1.687-1.322-.274L13 4.083c-.159-1.023-1.118-1.73-2.268-1.546-1.15.185-1.845 1.136-1.686 2.159l1.495 9.914c.593 3.785-.182 4.833-1.458.723L7.489 9.308c-.26-.967-1.213-1.567-2.41-1.231-1.197.336-1.713 1.299-1.454 2.266l1.558 5.663c.651 4.077.651 5.686.651 8.493S7.125 36 17 36s11.906-10.031 12-10.666c0 0 .123-1.48 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.359.625-1.707-.906-2.384z"/><path fill="#90603E" d="M24.911 21.741c-.3-.122-.554-.436-.584-1.119-1.892.259-4.451.789-6.42 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.293-2.727 2.282-8.143 8.93-8.591z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f590-1f3ff.svg b/public/emoji/1f590-1f3ff.svg index acb4dcd9d..0a4d174be 100644 --- a/public/emoji/1f590-1f3ff.svg +++ b/public/emoji/1f590-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M11.136 19.038c.259.967-.314 1.961-1.281 2.221l-.362.097c-.967.259-1.961-.314-2.22-1.281L4.069 8.121c-.258-.967.316-1.962 1.283-2.221l.361-.097c.967-.26 1.961.314 2.221 1.281l3.202 11.954zm4.795-1.94c.159 1.023-.542 1.982-1.564 2.14l-.248.039c-1.023.158-1.981-.542-2.14-1.565l-2.34-15.07c-.16-1.023.542-1.981 1.564-2.14l.248-.039c1.023-.159 1.982.542 2.141 1.565l2.339 15.07zm4.665-.117c-.058 1.011-.925 1.783-1.937 1.726l-.244-.015c-1.013-.059-1.785-.925-1.727-1.937l.857-14.898C17.604.846 18.471.072 19.483.13l.244.014c1.012.058 1.783.926 1.727 1.938l-.858 14.899zm4.592 1.959c-.219.941-1.157 1.528-2.101 1.31l-.486-.112c-.942-.219-1.528-1.158-1.311-2.1l3.273-14.125c.219-.941 1.158-1.528 2.1-1.31l.487.113c.942.219 1.527 1.159 1.31 2.1L25.188 18.94zm3.739 8.419c-.522.903-1.677 1.213-2.581.691l-.191-.111c-.904-.522-1.214-1.677-.691-2.58l5.609-9.718c.522-.903 1.678-1.214 2.582-.692l.191.111c.904.521 1.213 1.678.691 2.581l-5.61 9.718z"/><path fill="#7C533E" d="M6.183 16.007C6.663 18.35 6 21.192 6 24s2.125 12 12 12 10.5-8.234 12-10.666c1.5-2.432-.369-6.515-1.813-4.704-1.957 2.453-3.466 2.053-2.646-2.69.611-3.537-2.964-5.244-3.603-2.052-.493 2.467-1.299 1.952-1.186-.775.137-3.283-3.679-3.641-3.875.091-.142 2.707-1.049 1.551-1.322-.273-.234-1.563-4.389-2.721-4.013-.319.593 3.785-.182 4.833-1.458.723-.806-2.595-4.382-1.671-3.901.672z"/><path fill="#583529" d="M25.965 22.053c-.3-.122-.51-.486-.599-1.114-1.892.259-4.396.77-6.366 2.695-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.294-2.727 2.243-8.128 8.891-8.576z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M32.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.074-.71-.206-.84-.609-.137-.68-.107-1.731.147-3.201l2.74-12.315c.218-.941-.293-1.852-1.523-2.149s-2.155.306-2.374 1.247L20.938 15.89c-.493 2.466-1.407 2.018-1.186-.775v-.001l.701-13.092C20.51 1.01 19.732.183 18.582.139c-1.15-.044-1.979.646-2.038 1.657l-.668 13.409c-.143 2.707-1.112 1.687-1.322-.274L13 4.083c-.159-1.023-1.118-1.73-2.268-1.546-1.15.185-1.845 1.136-1.686 2.159l1.495 9.914c.593 3.785-.182 4.833-1.458.723L7.489 9.308c-.26-.967-1.213-1.567-2.41-1.231-1.197.336-1.713 1.299-1.454 2.266l1.558 5.663c.651 4.077.651 5.686.651 8.493S7.125 36 17 36s11.906-10.031 12-10.666c0 0 .123-1.48 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.359.625-1.707-.906-2.384z"/><path fill="#583529" d="M24.911 21.741c-.3-.122-.554-.436-.584-1.119-1.892.259-4.451.789-6.42 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.293-2.727 2.282-8.143 8.93-8.591z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f590.svg b/public/emoji/1f590.svg index 2c9d033cf..1c8dd6849 100644 --- a/public/emoji/1f590.svg +++ b/public/emoji/1f590.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M11.136 19.038c.259.967-.314 1.961-1.281 2.221l-.362.097c-.967.259-1.961-.314-2.22-1.281L4.069 8.121c-.258-.967.316-1.962 1.283-2.221l.361-.097c.967-.26 1.961.314 2.221 1.281l3.202 11.954zm4.795-1.94c.159 1.023-.542 1.982-1.564 2.14l-.248.039c-1.023.158-1.981-.542-2.14-1.565l-2.34-15.07c-.16-1.023.542-1.981 1.564-2.14l.248-.039c1.023-.159 1.982.542 2.141 1.565l2.339 15.07zm4.665-.117c-.058 1.011-.925 1.783-1.937 1.726l-.244-.015c-1.013-.059-1.785-.925-1.727-1.937l.857-14.898C17.604.846 18.471.072 19.483.13l.244.014c1.012.058 1.783.926 1.727 1.938l-.858 14.899zm4.592 1.959c-.219.941-1.157 1.528-2.101 1.31l-.486-.112c-.942-.219-1.528-1.158-1.311-2.1l3.273-14.125c.219-.941 1.158-1.528 2.1-1.31l.487.113c.942.219 1.527 1.159 1.31 2.1L25.188 18.94zm3.739 8.419c-.522.903-1.677 1.213-2.581.691l-.191-.111c-.904-.522-1.214-1.677-.691-2.58l5.609-9.718c.522-.903 1.678-1.214 2.582-.692l.191.111c.904.521 1.213 1.678.691 2.581l-5.61 9.718z"/><path fill="#FFDC5D" d="M6.183 16.007C6.663 18.35 6 21.192 6 24s2.125 12 12 12 10.5-8.234 12-10.666c1.5-2.432-.369-6.515-1.813-4.704-1.957 2.453-3.466 2.053-2.646-2.69.611-3.537-2.964-5.244-3.603-2.052-.493 2.467-1.299 1.952-1.186-.775.137-3.283-3.679-3.641-3.875.091-.142 2.707-1.049 1.551-1.322-.273-.234-1.563-4.389-2.721-4.013-.319.593 3.785-.182 4.833-1.458.723-.806-2.595-4.382-1.671-3.901.672z"/><path fill="#EF9645" d="M25.965 22.053c-.3-.122-.51-.486-.599-1.114-1.892.259-4.396.77-6.366 2.695-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.294-2.727 2.243-8.128 8.891-8.576z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M32.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.074-.71-.206-.84-.609-.137-.68-.107-1.731.147-3.201l2.74-12.315c.218-.941-.293-1.852-1.523-2.149s-2.155.306-2.374 1.247L20.938 15.89c-.493 2.466-1.407 2.018-1.186-.775v-.001l.701-13.092C20.51 1.01 19.732.183 18.582.139c-1.15-.044-1.979.646-2.038 1.657l-.668 13.409c-.143 2.707-1.112 1.687-1.322-.274L13 4.083c-.159-1.023-1.118-1.73-2.268-1.546-1.15.185-1.845 1.136-1.686 2.159l1.495 9.914c.593 3.785-.182 4.833-1.458.723L7.489 9.308c-.26-.967-1.213-1.567-2.41-1.231-1.197.336-1.713 1.299-1.454 2.266l1.558 5.663c.651 4.077.651 5.686.651 8.493S7.125 36 17 36s11.906-10.031 12-10.666c0 0 .123-1.48 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.359.625-1.707-.906-2.384z"/><path fill="#EF9645" d="M24.911 21.741c-.3-.122-.554-.436-.584-1.119-1.892.259-4.451.789-6.42 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.293-2.727 2.282-8.143 8.93-8.591z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f5a4.svg b/public/emoji/1f5a4.svg index 4b3ff616c..51ec883f8 100644 --- a/public/emoji/1f5a4.svg +++ b/public/emoji/1f5a4.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f5dd.svg b/public/emoji/1f5dd.svg index 74e28dc46..9e97cea6e 100644 --- a/public/emoji/1f5dd.svg +++ b/public/emoji/1f5dd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M7.915 34.868c.725.725 1.313 1.313 2.417.21 1.103-1.103-.665-2.871.439-3.975l.552-.552c1.104-1.104 2.872.664 3.974-.438 1.104-1.104.516-1.692-.21-2.417L12.41 25.02c-.725-.725-1.808-.819-2.417-.209l-4.964 4.964c-.61.609-.516 1.692.209 2.417l2.677 2.676z"/><path fill="#67757F" d="M1.03 33.772c.781.781 2.047.781 2.829 0l19.07-19.069c-.101-2.727 4.95-4.95 3.536-6.364-.781-.781-4.243 5.657-6.971 4.142L1.03 30.944c-.781.782-.781 2.048 0 2.828z"/><path fill="#292F33" d="M16.919 3.743c-2.148 2.147-2.149 5.63 0 7.778 2.148 2.148 5.63 2.148 7.778 0 2.147-2.148 2.147-5.63 0-7.778-2.148-2.148-5.631-2.148-7.778 0zm6.363 6.364c-1.366 1.367-3.583 1.367-4.95 0s-1.367-3.583 0-4.95 3.583-1.367 4.95 0 1.367 3.583 0 4.95z"/><path fill="#292F33" d="M26.111 1.622c-2.148 2.147-2.148 5.63 0 7.778 2.148 2.148 5.63 2.148 7.777 0 2.148-2.148 2.148-5.631 0-7.778-2.147-2.148-5.629-2.148-7.777 0zm6.364 6.364c-1.366 1.366-3.583 1.366-4.949 0-1.367-1.368-1.367-3.583 0-4.95 1.366-1.367 3.582-1.368 4.949 0 1.367 1.366 1.367 3.583 0 4.95z"/><path fill="#292F33" d="M23.989 10.814c-2.147 2.147-2.147 5.63 0 7.778 2.147 2.148 5.631 2.148 7.778 0 2.147-2.148 2.147-5.63 0-7.778-2.147-2.147-5.63-2.147-7.778 0zm6.365 6.364c-1.366 1.367-3.583 1.367-4.95 0s-1.366-3.583 0-4.949c1.367-1.367 3.583-1.368 4.95 0 1.366 1.366 1.366 3.582 0 4.949z"/><path fill="#67757F" d="M19.394 18.238c.781.781.781 2.048 0 2.829-.781.78-2.048.78-2.829 0l-2.829-2.829c-.781-.78-.781-2.047 0-2.828.781-.781 2.048-.781 2.829 0l2.829 2.828z"/><circle fill="#292F33" cx="26" cy="9" r="1"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M7.915 34.868c.725.725 1.313 1.313 2.417.21 1.103-1.103-.665-2.871.439-3.975l.552-.552c1.104-1.104 2.872.664 3.974-.438 1.104-1.104.516-1.692-.21-2.417L12.41 25.02c-.725-.725-1.808-.819-2.417-.209l-4.964 4.964c-.61.609-.516 1.692.209 2.417l2.677 2.676z"/><path fill="#67757F" d="M1.03 33.772c.781.781 2.047.781 2.829 0l19.07-19.069c-.101-2.727 4.95-4.95 3.536-6.364-.781-.781-4.243 5.657-6.971 4.142L1.03 30.944c-.781.782-.781 2.048 0 2.828z"/><path fill="#31373D" d="M16.919 3.743c-2.148 2.147-2.149 5.63 0 7.778 2.148 2.148 5.63 2.148 7.778 0 2.147-2.148 2.147-5.63 0-7.778-2.148-2.148-5.631-2.148-7.778 0zm6.363 6.364c-1.366 1.367-3.583 1.367-4.95 0s-1.367-3.583 0-4.95 3.583-1.367 4.95 0 1.367 3.583 0 4.95z"/><path fill="#31373D" d="M26.111 1.622c-2.148 2.147-2.148 5.63 0 7.778 2.148 2.148 5.63 2.148 7.777 0 2.148-2.148 2.148-5.631 0-7.778-2.147-2.148-5.629-2.148-7.777 0zm6.364 6.364c-1.366 1.366-3.583 1.366-4.949 0-1.367-1.368-1.367-3.583 0-4.95 1.366-1.367 3.582-1.368 4.949 0 1.367 1.366 1.367 3.583 0 4.95z"/><path fill="#31373D" d="M23.989 10.814c-2.147 2.147-2.147 5.63 0 7.778 2.147 2.148 5.631 2.148 7.778 0 2.147-2.148 2.147-5.63 0-7.778-2.147-2.147-5.63-2.147-7.778 0zm6.365 6.364c-1.366 1.367-3.583 1.367-4.95 0s-1.366-3.583 0-4.949c1.367-1.367 3.583-1.368 4.95 0 1.366 1.366 1.366 3.582 0 4.949z"/><path fill="#67757F" d="M19.394 18.238c.781.781.781 2.048 0 2.829-.781.78-2.048.78-2.829 0l-2.829-2.829c-.781-.78-.781-2.047 0-2.828.781-.781 2.048-.781 2.829 0l2.829 2.828z"/><circle fill="#31373D" cx="26" cy="9" r="1"/></svg> \ No newline at end of file diff --git a/public/emoji/1f5e1.svg b/public/emoji/1f5e1.svg index 74bbf3c43..2741fb89d 100644 --- a/public/emoji/1f5e1.svg +++ b/public/emoji/1f5e1.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.622 16.971C13.33 16.264 19.694 4.243 35.25 0c-1.414 1.415-19.54 21.691-19.54 21.691l-3.088-4.72z"/><path fill="#9AAAB4" d="M18.279 22.629C18.986 21.922 31.008 15.556 35.25 0L14.037 21.214l4.242 1.415z"/><path fill="#292F33" d="M15.451 24.043c.781-.781.655-2.174-.283-3.112l-.848-.849c-.938-.938-2.331-1.063-3.112-.282L3.43 27.578c-.781.781-.654 2.174.283 3.111l.848.848c.938.938 2.331 1.064 3.111.283l7.779-7.777z"/><path d="M7.108 23.9l7.071 1.414 1.271-1.271c.133-.133.23-.288.311-.452L8.807 22.2l-1.699 1.7zm7.212-3.818c-.938-.938-2.331-1.063-3.112-.282l-.826.826 5.328 1.065c-.131-.27-.312-.529-.543-.76l-.847-.849zM5.408 25.6l-1.699 1.699 7.071 1.414 1.699-1.699zm-2.422 3.793c.107.46.346.916.727 1.297l.848.848c.103.103.213.192.325.275l2.11.422c.252-.084.483-.22.676-.414l1.242-1.242-5.928-1.186z" fill="#67757F"/><circle fill="#292F33" cx="4.142" cy="31.104" r="4"/><path fill="#292F33" d="M19.693 26.164c-.586.586-1.536.586-2.121 0l-8.839-8.839c-.586-.586-.586-1.536 0-2.121.586-.586 1.535-.586 2.121 0l8.839 8.839c.586.584.586 1.535 0 2.121z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M12.622 16.971C13.33 16.264 19.694 4.243 35.25 0c-1.414 1.415-19.54 21.691-19.54 21.691l-3.088-4.72z"/><path fill="#9AAAB4" d="M18.279 22.629C18.986 21.922 31.008 15.556 35.25 0L14.037 21.214l4.242 1.415z"/><path fill="#31373D" d="M15.451 24.043c.781-.781.655-2.174-.283-3.112l-.848-.849c-.938-.938-2.331-1.063-3.112-.282L3.43 27.578c-.781.781-.654 2.174.283 3.111l.848.848c.938.938 2.331 1.064 3.111.283l7.779-7.777z"/><path d="M7.108 23.9l7.071 1.414 1.271-1.271c.133-.133.23-.288.311-.452L8.807 22.2l-1.699 1.7zm7.212-3.818c-.938-.938-2.331-1.063-3.112-.282l-.826.826 5.328 1.065c-.131-.27-.312-.529-.543-.76l-.847-.849zM5.408 25.6l-1.699 1.699 7.071 1.414 1.699-1.699zm-2.422 3.793c.107.46.346.916.727 1.297l.848.848c.103.103.213.192.325.275l2.11.422c.252-.084.483-.22.676-.414l1.242-1.242-5.928-1.186z" fill="#67757F"/><circle fill="#31373D" cx="4.142" cy="31.104" r="4"/><path fill="#31373D" d="M19.693 26.164c-.586.586-1.536.586-2.121 0l-8.839-8.839c-.586-.586-.586-1.536 0-2.121.586-.586 1.535-.586 2.121 0l8.839 8.839c.586.584.586 1.535 0 2.121z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f5e3.svg b/public/emoji/1f5e3.svg index 5607d68c0..4e613c046 100644 --- a/public/emoji/1f5e3.svg +++ b/public/emoji/1f5e3.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FA743E" d="M35.838 23.159c.003.553-.443 1.002-.998 1.003l-5 .013c-.552.002-.999-.446-1-.997-.003-.555.444-1.002.995-1.004l5-.013c.553 0 1.002.445 1.003.998zm-1.587-5.489c.238.499.025 1.095-.475 1.333l-4.517 2.145c-.498.236-1.094.023-1.33-.476-.239-.498-.025-1.094.474-1.333l4.516-2.144c.5-.236 1.095-.024 1.332.475zm.027 10.987c.234-.501.02-1.096-.48-1.33l-4.527-2.122c-.501-.235-1.095-.02-1.33.48-.234.501-.019 1.096.482 1.33l4.526 2.123c.499.234 1.096.019 1.329-.481z"/><path fill="#292F33" d="M27.979 14.875c-1.42-.419-2.693-1.547-3.136-2.25-.76-1.208.157-1.521-.153-4.889C24.405 4.653 20.16 1.337 15 1c-2.346-.153-4.786.326-7.286 1.693-6.42 3.511-8.964 10.932-4.006 18.099 4.47 6.46.276 9.379.276 9.379s.166 1.36 2.914 3.188c2.749 1.827 6.121.588 6.121.588s1.112-3.954 4.748-3.59c2.606.384 6.266-.129 7.191-1.024.865-.837-.151-1.886.539-4.224-2.365-.232-3.665-1.359-3.79-2.948 2.625.255 3.708-.578 4.458-1.495-.021-.54-.075-1.686-.127-2.454 2.322-.672 3.212-2.962 1.941-3.337z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FA743E" d="M35.838 23.159c.003.553-.443 1.002-.998 1.003l-5 .013c-.552.002-.999-.446-1-.997-.003-.555.444-1.002.995-1.004l5-.013c.553 0 1.002.445 1.003.998zm-1.587-5.489c.238.499.025 1.095-.475 1.333l-4.517 2.145c-.498.236-1.094.023-1.33-.476-.239-.498-.025-1.094.474-1.333l4.516-2.144c.5-.236 1.095-.024 1.332.475zm.027 10.987c.234-.501.02-1.096-.48-1.33l-4.527-2.122c-.501-.235-1.095-.02-1.33.48-.234.501-.019 1.096.482 1.33l4.526 2.123c.499.234 1.096.019 1.329-.481z"/><path fill="#269" d="M27.979 14.875c-1.42-.419-2.693-1.547-3.136-2.25-.76-1.208.157-1.521-.153-4.889C24.405 4.653 20.16 1.337 15 1c-2.346-.153-4.786.326-7.286 1.693-6.42 3.511-8.964 10.932-4.006 18.099 4.47 6.46.276 9.379.276 9.379s.166 1.36 2.914 3.188c2.749 1.827 6.121.588 6.121.588s1.112-3.954 4.748-3.59c2.606.384 6.266-.129 7.191-1.024.865-.837-.151-1.886.539-4.224-2.365-.232-3.665-1.359-3.79-2.948 2.625.255 3.708-.578 4.458-1.495-.021-.54-.075-1.686-.127-2.454 2.322-.672 3.212-2.962 1.941-3.337z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f5f3.svg b/public/emoji/1f5f3.svg index edd19d416..9c643d363 100644 --- a/public/emoji/1f5f3.svg +++ b/public/emoji/1f5f3.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M34.5 24.995c0 2.209-1.791 2-4 2h-25c-2.209 0-4 .209-4-2L3.5 11c.293-1.75 1-2 2-2h25c1 0 1.791.208 2 2l2 13.995z"/><path fill="#67757F" d="M13.5 16zm0 0zm0 12z"/><path fill="#292F33" d="M28.5 16.5c0 .829-.672 1.5-1.5 1.5H9c-.829 0-1.5-.671-1.5-1.5S8.172 15 9 15h18c.828 0 1.5.671 1.5 1.5z"/><path fill="#5DADEC" d="M26.5 17V3c0-1.105-.895-2-2-2h-13c-1.104 0-2 .895-2 2v14h17z"/><path fill="#9AAAB4" d="M34.5 25c0-1.104-.896-2-2-2h-29c-1.104 0-2 .896-2 2v8c0 1.104.896 2 2 2h29c1.104 0 2-.896 2-2v-8z"/><path fill="#5DADEC" d="M18.5 22zm0 0z"/><path fill="#67757F" d="M13.5 23v6c0 1.104.896 2 2 2h5c1.105 0 2-.896 2-2v-6h-9z"/><path fill="#9AAAB4" d="M22.5 23v-1c0-1.104-.895-2-2-2h-5c-1.104 0-2 .896-2 2v1h9zm-3 4.5c0 .828-.672 1.5-1.5 1.5-.829 0-1.5-.672-1.5-1.5v-1c0-.828.671-1.5 1.5-1.5.828 0 1.5.672 1.5 1.5v1z"/><path fill="#FFF" d="M18.806 8.997l2.778-2.778c.222-.222.222-.581 0-.803-.222-.222-.581-.222-.803 0l-2.778 2.778-2.778-2.778c-.221-.222-.581-.222-.803 0-.222.222-.222.581 0 .803L17.2 8.997l-2.784 2.784c-.222.222-.222.581 0 .803.111.111.256.166.401.166.145 0 .291-.056.401-.166L18.002 9.8l2.778 2.778c.111.111.256.166.401.166.145 0 .29-.055.401-.166.222-.222.222-.581 0-.803l-2.776-2.778z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8CCAF7" d="M34.5 24.995c0 2.209-1.791 2-4 2h-25c-2.209 0-4 .209-4-2L3.5 11c.293-1.75 1-2 2-2h25c1 0 1.791.208 2 2l2 13.995z"/><path fill="#292F33" d="M28.5 16.5c0 .829-.672 1.5-1.5 1.5H9c-.829 0-1.5-.671-1.5-1.5S8.172 15 9 15h18c.828 0 1.5.671 1.5 1.5z"/><path fill="#FFD983" d="M26.25 17.188v-14c0-1.105-.895-2-2-2h-13c-1.104 0-2 .895-2 2v14h17z"/><path fill="#5DADEC" d="M34.5 25c0-1.104-.896-2-2-2h-29c-1.104 0-2 .896-2 2v8c0 1.104.896 2 2 2h29c1.104 0 2-.896 2-2v-8z"/><path fill="#4289C1" d="M13.5 23v6c0 1.104.896 2 2 2h5c1.105 0 2-.896 2-2v-6h-9z"/><path fill="#5DADEC" d="M22.5 23v-1c0-1.104-.895-2-2-2h-5c-1.104 0-2 .896-2 2v1h9zm-3 4.5c0 .828-.672 1.5-1.5 1.5-.829 0-1.5-.672-1.5-1.5v-1c0-.828.671-1.5 1.5-1.5.828 0 1.5.672 1.5 1.5v1z"/><path d="M24 5c0 .276-.224.5-.5.5H16c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h7.5c.276 0 .5.224.5.5m0 4c0 .276-.224.5-.5.5H16c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h7.5c.276 0 .5.224.5.5m0 4c0 .276-.224.5-.5.5H16c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h7.5c.276 0 .5.224.5.5" fill="#C1694F"/><g fill="#C1694F"><circle cx="13" cy="5" r="1"/><circle cx="13" cy="9" r="1"/><circle cx="13" cy="13" r="1"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f60d.svg b/public/emoji/1f60d.svg index a745838c6..18b1867c1 100644 --- a/public/emoji/1f60d.svg +++ b/public/emoji/1f60d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 18c0 9.941-8.059 18-18 18S0 27.941 0 18 8.059 0 18 0s18 8.059 18 18"/><path fill="#664500" d="M18 21.849c-2.966 0-4.935-.346-7.369-.819-.557-.106-1.638 0-1.638 1.638 0 3.275 3.763 7.369 9.007 7.369s9.007-4.094 9.007-7.369c0-1.638-1.082-1.745-1.638-1.638-2.434.473-4.402.819-7.369.819"/><path fill="#E75A70" d="M16.65 3.281C15.791.85 13.126-.426 10.694.431c-1.476.52-2.521 1.711-2.928 3.104-1.191-.829-2.751-1.1-4.225-.58C1.111 3.813-.167 6.48.692 8.911c.122.344.284.663.472.958 1.951 3.582 7.588 6.1 11.001 6.131 2.637-2.167 5.446-7.665 4.718-11.677-.038-.348-.113-.698-.233-1.042zm2.7 0C20.209.85 22.875-.426 25.306.431c1.476.52 2.521 1.711 2.929 3.104 1.191-.829 2.751-1.1 4.225-.58 2.43.858 3.707 3.525 2.85 5.956-.123.344-.284.663-.473.958-1.951 3.582-7.588 6.1-11.002 6.131-2.637-2.167-5.445-7.665-4.717-11.677.037-.348.112-.698.232-1.042z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 18c0 9.941-8.059 18-18 18S0 27.941 0 18 8.059 0 18 0s18 8.059 18 18"/><path fill="#664500" d="M18 21.849c-2.966 0-4.935-.346-7.369-.819-.557-.106-1.638 0-1.638 1.638 0 3.275 3.763 7.369 9.007 7.369s9.007-4.094 9.007-7.369c0-1.638-1.082-1.745-1.638-1.638-2.434.473-4.402.819-7.369.819"/><path fill="#DD2E44" d="M16.65 3.281C15.791.85 13.126-.426 10.694.431c-1.476.52-2.521 1.711-2.928 3.104-1.191-.829-2.751-1.1-4.225-.58C1.111 3.813-.167 6.48.692 8.911c.122.344.284.663.472.958 1.951 3.582 7.588 6.1 11.001 6.131 2.637-2.167 5.446-7.665 4.718-11.677-.038-.348-.113-.698-.233-1.042zm2.7 0C20.209.85 22.875-.426 25.306.431c1.476.52 2.521 1.711 2.929 3.104 1.191-.829 2.751-1.1 4.225-.58 2.43.858 3.707 3.525 2.85 5.956-.123.344-.284.663-.473.958-1.951 3.582-7.588 6.1-11.002 6.131-2.637-2.167-5.445-7.665-4.717-11.677.037-.348.112-.698.232-1.042z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f618.svg b/public/emoji/1f618.svg index da48c23a9..5e00b8e4d 100644 --- a/public/emoji/1f618.svg +++ b/public/emoji/1f618.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="18" cy="18" r="18"/><ellipse fill="#664500" cx="11.5" cy="15.5" rx="2.5" ry="3.5"/><path fill="#664500" d="M28.457 17.797c-.06-.135-1.499-3.297-4.457-3.297-2.957 0-4.397 3.162-4.457 3.297-.092.207-.032.449.145.591.175.142.426.147.61.014.012-.009 1.262-.902 3.702-.902 2.426 0 3.674.881 3.702.901.088.066.194.099.298.099.11 0 .221-.037.312-.109.177-.142.238-.386.145-.594zM5.999 11c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C8.462 5.05 12.816 5 13 5c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.155.002-3.568.086-6.204 3.6-.196.262-.497.4-.801.4zm23.002 3c-.305 0-.604-.138-.801-.4-2.592-3.456-6.961-2.628-7.004-2.62-.547.11-1.068-.244-1.177-.784-.108-.541.243-1.068.784-1.177.231-.047 5.657-1.072 8.996 3.38.332.442.242 1.069-.2 1.4-.179.136-.389.201-.598.201zm-8.922 13.042c1.335-.412 2.629-1.156 2.629-2.5 0-2.619-4.912-2.968-5.472-2.999-.274-.026-.509.193-.527.468-.017.274.19.511.464.53.035.002 3.535.299 3.535 2.001s-3.5 1.999-3.535 2.001c-.014.001-.024.009-.037.011-.052.006-.101.018-.146.04l-.019.011c-.047.026-.088.057-.125.098-.014.015-.024.031-.036.048-.023.032-.044.063-.059.102-.012.029-.018.061-.024.092-.004.023-.016.044-.018.067 0 .011.004.021.004.031s-.005.021-.004.031c.001.024.013.045.018.068.006.031.011.061.023.09.013.03.031.057.049.084.017.024.032.05.052.071.023.023.05.041.078.061.024.017.046.034.074.047.032.015.066.021.101.027.024.006.044.018.069.02.035.002 3.535.299 3.535 2.001s-3.5 1.999-3.535 2.001c-.274.02-.481.257-.464.53.017.265.237.469.499.469l.028-.001c.56-.031 5.472-.38 5.472-2.999 0-1.345-1.294-2.089-2.629-2.501z"/><path fill="#FFAC33" d="M34.202 25.803c-.236-.79-.779-1.486-1.578-1.875-.922-.449-1.956-.391-2.793.06-.16-.936-.75-1.789-1.67-2.237-1.517-.74-3.348-.11-4.087 1.406-.105.215-.18.437-.23.659-.775 2.556.64 6.341 2.192 7.948 1.23.13 2.953-.198 4.513-.873 1.5-1.46 2.733-3.183 3.653-5.088z"/><path fill="#E75A70" d="M35.654 27.222c.739-1.516.11-3.347-1.405-4.086-.922-.449-1.956-.391-2.793.06-.16-.936-.75-1.789-1.67-2.237-1.517-.74-3.348-.109-4.087 1.406-.105.215-.18.437-.23.659-.774 2.556.64 6.341 2.192 7.948 2.223.234 6.077-.979 7.615-3.161.145-.179.273-.374.378-.589z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="18" cy="18" r="18"/><ellipse fill="#664500" cx="11.5" cy="15.5" rx="2.5" ry="3.5"/><path fill="#664500" d="M28.457 17.797c-.06-.135-1.499-3.297-4.457-3.297-2.957 0-4.397 3.162-4.457 3.297-.092.207-.032.449.145.591.175.142.426.147.61.014.012-.009 1.262-.902 3.702-.902 2.426 0 3.674.881 3.702.901.088.066.194.099.298.099.11 0 .221-.037.312-.109.177-.142.238-.386.145-.594zM5.999 11c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C8.462 5.05 12.816 5 13 5c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.155.002-3.568.086-6.204 3.6-.196.262-.497.4-.801.4zm23.002 3c-.305 0-.604-.138-.801-.4-2.592-3.456-6.961-2.628-7.004-2.62-.547.11-1.068-.244-1.177-.784-.108-.541.243-1.068.784-1.177.231-.047 5.657-1.072 8.996 3.38.332.442.242 1.069-.2 1.4-.179.136-.389.201-.598.201zm-8.922 13.042c1.335-.412 2.629-1.156 2.629-2.5 0-2.619-4.912-2.968-5.472-2.999-.274-.026-.509.193-.527.468-.017.274.19.511.464.53.035.002 3.535.299 3.535 2.001s-3.5 1.999-3.535 2.001c-.014.001-.024.009-.037.011-.052.006-.101.018-.146.04l-.019.011c-.047.026-.088.057-.125.098-.014.015-.024.031-.036.048-.023.032-.044.063-.059.102-.012.029-.018.061-.024.092-.004.023-.016.044-.018.067 0 .011.004.021.004.031s-.005.021-.004.031c.001.024.013.045.018.068.006.031.011.061.023.09.013.03.031.057.049.084.017.024.032.05.052.071.023.023.05.041.078.061.024.017.046.034.074.047.032.015.066.021.101.027.024.006.044.018.069.02.035.002 3.535.299 3.535 2.001s-3.5 1.999-3.535 2.001c-.274.02-.481.257-.464.53.017.265.237.469.499.469l.028-.001c.56-.031 5.472-.38 5.472-2.999 0-1.345-1.294-2.089-2.629-2.501z"/><path fill="#FFAC33" d="M34.202 25.803c-.236-.79-.779-1.486-1.578-1.875-.922-.449-1.956-.391-2.793.06-.16-.936-.75-1.789-1.67-2.237-1.517-.74-3.348-.11-4.087 1.406-.105.215-.18.437-.23.659-.775 2.556.64 6.341 2.192 7.948 1.23.13 2.953-.198 4.513-.873 1.5-1.46 2.733-3.183 3.653-5.088z"/><path fill="#DD2E44" d="M35.654 27.222c.739-1.516.11-3.347-1.405-4.086-.922-.449-1.956-.391-2.793.06-.16-.936-.75-1.789-1.67-2.237-1.517-.74-3.348-.109-4.087 1.406-.105.215-.18.437-.23.659-.774 2.556.64 6.341 2.192 7.948 2.223.234 6.077-.979 7.615-3.161.145-.179.273-.374.378-.589z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f61e.svg b/public/emoji/1f61e.svg index b55a69c01..7ae60a58d 100644 --- a/public/emoji/1f61e.svg +++ b/public/emoji/1f61e.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 18c0 9.941-8.059 18-18 18S0 27.941 0 18 8.059 0 18 0s18 8.059 18 18"/><path fill="#664500" d="M23.485 28.879C23.474 28.835 22.34 24.5 18 24.5s-5.474 4.335-5.485 4.379c-.053.213.044.431.232.544.188.112.433.086.596-.06.009-.008 1.013-.863 4.657-.863 3.59 0 4.617.83 4.656.863.095.09.219.137.344.137.084 0 .169-.021.246-.064.196-.112.294-.339.239-.557zm2.295-13.238c-.341-.093-.692-.14-1.043-.14-2.345 0-4.053 2.06-4.125 2.147-.143.176-.148.425-.017.609.134.184.374.253.586.173.005-.002.572-.214 1.564-.214.714 0 1.469.107 2.244.319 2.342.638 3.313 1.818 3.334 1.844.098.124.243.191.394.191.066 0 .134-.014.197-.041.209-.09.331-.31.297-.534-.021-.146-.577-3.576-3.431-4.354zm-14.554-.129c-.317 0-.636.039-.947.116-2.87.707-3.513 4.121-3.539 4.267-.04.223.076.443.281.54.067.031.14.047.211.047.145 0 .287-.063.385-.18.01-.012 1.01-1.178 3.379-1.761.714-.176 1.412-.265 2.073-.265 1.104 0 1.732.253 1.735.254.067.028.131.04.207.04.272.012.509-.221.509-.5 0-.165-.08-.311-.203-.402-.367-.435-1.953-2.156-4.091-2.156z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="18" cy="18" r="18"/><path fill="#664500" d="M23.485 28.879C23.474 28.835 22.34 24.5 18 24.5s-5.474 4.335-5.485 4.379c-.053.213.044.431.232.544.188.112.433.086.596-.06.009-.008 1.013-.863 4.657-.863 3.59 0 4.617.83 4.656.863.095.09.219.137.344.137.084 0 .169-.021.246-.064.196-.112.294-.339.239-.557zM11.226 15.512c-.317 0-.636.039-.947.116-2.87.707-3.513 4.121-3.539 4.267-.04.223.076.443.281.54.067.031.14.047.211.047.145 0 .287-.063.385-.18.01-.012 1.01-1.178 3.379-1.761.714-.176 1.412-.265 2.073-.265 1.104 0 1.732.253 1.735.254.067.028.131.04.207.04.272.012.509-.221.509-.5 0-.165-.08-.311-.203-.402-.367-.435-1.953-2.156-4.091-2.156zm13.548 0c.317 0 .636.039.947.116 2.87.707 3.513 4.121 3.539 4.267.04.223-.076.443-.281.54-.067.031-.14.047-.211.047-.145 0-.287-.063-.385-.18-.01-.012-1.01-1.178-3.379-1.761-.714-.176-1.412-.265-2.073-.265-1.104 0-1.731.253-1.735.254-.067.028-.131.04-.206.04-.272.012-.509-.221-.509-.5 0-.165.08-.311.203-.402.366-.435 1.952-2.156 4.09-2.156z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f638.svg b/public/emoji/1f638.svg index 98a25a5a9..4e125ab97 100644 --- a/public/emoji/1f638.svg +++ b/public/emoji/1f638.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M34.964 11.955L35 12s1-10 0-11c-.91-.91-6.771.66-7.822.951C24.752.717 21.735 0 18 0c-3.729 0-6.742.719-9.166 1.954C7.814 1.671 1.913.087 1 1 0 2 1 12 1 12l.047-.059C.308 14.494 0 17.251 0 20c0 9.941 11 16 18 16s18-6 18-16c0-2.751-.306-5.502-1.036-8.045z"/><path fill="#292F33" d="M31.404 23.705c-.123-.169-.338-.245-.542-.186-.069.02-7 1.98-12.863 1.98-5.858 0-12.793-1.961-12.862-1.98-.209-.062-.431.021-.552.2-.121.18-.113.416.02.587.292.377 7.221 9.194 13.395 9.194 7.185 0 13.166-8.846 13.417-9.223.115-.174.11-.402-.013-.572z"/><path fill="#F5F8FA" d="M8 25s5 2 10 2 10-2 10-2 0 3-1 3-2-1-2-1-4 2-7 2-7-2-7-2-1 1-2 1-1-3-1-3z"/><path fill="#67757F" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path d="M26 20.5c-.209 0-.404-.133-.475-.342-.087-.262.055-.545.316-.633l9-3c.264-.087.545.054.633.316.087.262-.055.545-.316.632l-9 3c-.053.019-.105.027-.158.027zm-1.001 2c-.233 0-.441-.164-.489-.402-.055-.271.121-.534.392-.588l10-2c.26-.054.533.12.588.392.055.271-.121.534-.393.588l-10 2c-.032.007-.065.01-.098.01zM10 20.5c-.052 0-.106-.008-.158-.025l-9-3c-.262-.087-.403-.37-.316-.632.087-.262.368-.404.632-.316l9 3c.262.088.403.371.316.633-.07.207-.264.34-.474.34zm1 2c-.032 0-.065-.003-.099-.01l-10-2c-.271-.054-.446-.317-.392-.588.054-.271.313-.449.588-.392l10 2c.271.054.446.317.392.588-.046.238-.255.402-.489.402z" fill="#9AAAB4"/><path fill="#292F33" d="M28.416 17.723C28.355 17.632 26.901 15.5 24 15.5c-2.9 0-4.355 2.132-4.416 2.223-.135.202-.104.47.071.638.174.167.446.185.643.042.012-.01 1.262-.903 3.702-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zm-12 0C16.355 17.632 14.901 15.5 12 15.5c-2.9 0-4.355 2.132-4.416 2.223-.134.202-.104.47.071.638.175.167.447.185.642.042.013-.01 1.262-.903 3.703-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zM31.001 16c-.305 0-.604-.138-.801-.4-2.641-3.521-6.061-3.599-6.206-3.6-.55-.006-.994-.456-.991-1.005.003-.551.447-.995.997-.995.184 0 4.537.05 7.8 4.4.332.442.242 1.069-.2 1.4-.18.135-.39.2-.599.2zM4.999 16c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C7.462 10.05 11.816 10 12 10c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.156.002-3.569.086-6.205 3.6-.195.262-.496.4-.8.4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35.734 19.929C35.375 16.66 35 15 34 13c0 0 3-9 1-12.7-.674-1.246-7.404 1.688-10 3.7 0 0-4-.998-7-.998S11 4 11 4C8.404 1.988 1.674-.946 1 .3-1 4 2 13 2 13 1 15 .625 16.66.266 19.929-.129 23.513.657 26.37 1 27c.39.716 2.367 3.025 5 5 4 3 10 4 12 4s8-1 12-4c2.633-1.975 4.61-4.284 5-5 .343-.63 1.129-3.487.734-7.071z"/><path fill="#E75A70" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#F18F26" d="M2 3c.447-1.342 5.64 1 6.64 2C8.64 5 4 8 3 11c0 0-2-5-1-8zm32 0c-.447-1.342-5.64 1-6.64 2 0 0 4.64 3 5.64 6 0 0 2-5 1-8z"/><path fill="#FFCC4D" d="M4.934 5.603C4.934 4.189 11 7 10 8s-2 1.603-3 2.603-2.066-4-2.066-5zm26.132 0C31.066 4.189 25 7 26 8s2 1.603 3 2.603 2.066-4 2.066-5z"/><path fill="#FEE7B8" d="M.701 25c-.148 0-.294-.065-.393-.19-.171-.217-.134-.531.083-.702.162-.127 4.02-3.12 10.648-2.605.275.02.481.261.46.536-.021.275-.257.501-.537.46-6.233-.474-9.915 2.366-9.951 2.395-.093.071-.202.106-.31.106zm8.868-4.663c-.049 0-.1-.007-.149-.022-4.79-1.497-8.737-.347-8.777-.336-.265.081-.543-.07-.623-.335-.079-.265.071-.543.335-.622.173-.052 4.286-1.247 9.362.338.264.083.411.363.328.627-.066.213-.263.35-.476.35zM35.299 25c.148 0 .294-.065.393-.19.171-.217.134-.531-.083-.702-.162-.127-4.02-3.12-10.648-2.605-.275.02-.481.261-.46.536.021.275.257.501.537.46 6.233-.474 9.915 2.366 9.951 2.395.093.071.202.106.31.106zm-8.868-4.663c.049 0 .1-.007.149-.022 4.79-1.497 8.737-.347 8.777-.336.265.081.543-.07.623-.335.079-.265-.071-.543-.335-.622-.173-.052-4.286-1.247-9.362.338-.264.083-.411.363-.328.627.065.213.263.35.476.35z"/><path fill="#292F33" d="M28.023 24.191C27.046 24.383 23 26 18 26s-9.046-1.617-10.023-1.809C7 24 6.885 25.264 7.442 27.132 8 29 11 33 18 33s10-4 10.558-5.868c.557-1.868.442-3.132-.535-2.941z"/><path fill="#F5F8FA" d="M8 25s5 2 10 2 10-2 10-2-.5 3-1.5 3-1.5-1-1.5-1-4 2-7 2-7-2-7-2-.5 1-1.5 1S8 25 8 25z"/><path d="M28.416 17.723C28.355 17.632 26.901 15.5 24 15.5c-2.9 0-4.355 2.132-4.416 2.223-.135.202-.104.47.071.638.174.167.446.185.643.042.012-.01 1.262-.903 3.702-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zm-12 0C16.355 17.632 14.901 15.5 12 15.5c-2.9 0-4.355 2.132-4.416 2.223-.134.202-.104.47.071.638.175.167.447.185.642.042.013-.01 1.262-.903 3.703-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zM31.001 16c-.305 0-.604-.138-.801-.4-2.641-3.521-6.061-3.599-6.206-3.6-.55-.006-.994-.456-.991-1.005.003-.551.447-.995.997-.995.184 0 4.537.05 7.8 4.4.332.442.242 1.069-.2 1.4-.18.135-.39.2-.599.2zM4.999 16c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C7.462 10.05 11.816 10 12 10c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.156.002-3.569.086-6.205 3.6-.195.262-.496.4-.8.4z" fill="#292F33"/></svg> \ No newline at end of file diff --git a/public/emoji/1f639.svg b/public/emoji/1f639.svg index b468daa67..92f9022d9 100644 --- a/public/emoji/1f639.svg +++ b/public/emoji/1f639.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M34.964 11.955L35 12s1-10 0-11c-.91-.91-6.771.66-7.822.951C24.752.717 21.735 0 18 0c-3.729 0-6.742.719-9.166 1.954C7.814 1.671 1.913.087 1 1 0 2 1 12 1 12l.047-.059C.308 14.494 0 17.251 0 20c0 9.941 11 16 18 16s18-6 18-16c0-2.751-.306-5.502-1.036-8.045z"/><path fill="#292F33" d="M31.404 23.705c-.123-.169-.338-.245-.542-.186-.069.02-7 1.98-12.863 1.98-5.858 0-12.793-1.961-12.862-1.98-.209-.062-.431.021-.552.2-.121.18-.113.416.02.587.292.377 7.221 9.194 13.395 9.194 7.185 0 13.166-8.846 13.417-9.223.115-.174.11-.402-.013-.572z"/><path fill="#F5F8FA" d="M8 25s5 2 10 2 10-2 10-2 0 3-1 3-2-1-2-1-4 2-7 2-7-2-7-2-1 1-2 1-1-3-1-3z"/><path fill="#67757F" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path d="M26 20.5c-.209 0-.404-.133-.475-.342-.087-.262.055-.545.316-.633l9-3c.264-.087.545.054.633.316.087.262-.055.545-.316.632l-9 3c-.053.019-.105.027-.158.027zm-1.001 2c-.233 0-.441-.164-.489-.402-.055-.271.121-.534.392-.588l10-2c.26-.054.533.12.588.392.055.271-.121.534-.393.588l-10 2c-.032.007-.065.01-.098.01zM10 20.5c-.052 0-.106-.008-.158-.025l-9-3c-.262-.087-.403-.37-.316-.632.087-.262.368-.404.632-.316l9 3c.262.088.403.371.316.633-.07.207-.264.34-.474.34zm1 2c-.032 0-.065-.003-.099-.01l-10-2c-.271-.054-.446-.317-.392-.588.054-.271.313-.449.588-.392l10 2c.271.054.446.317.392.588-.046.238-.255.402-.489.402z" fill="#9AAAB4"/><path fill="#292F33" d="M28.416 17.723C28.355 17.632 26.901 15.5 24 15.5c-2.9 0-4.355 2.132-4.416 2.223-.135.202-.104.47.071.638.174.167.446.185.643.042.012-.01 1.262-.903 3.702-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zm-12 0C16.355 17.632 14.901 15.5 12 15.5c-2.9 0-4.355 2.132-4.416 2.223-.134.202-.104.47.071.638.175.167.447.185.642.042.013-.01 1.262-.903 3.703-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64z"/><path fill="#5DADEC" d="M27 19c5 2 9 5 9 10 0 4-3 4-3 4-6 0-2-8-6-14zM9 19c-5 2-9 5-9 10 0 4 3 4 3 4 6 0 2-8 6-14z"/><path fill="#292F33" d="M31.001 16c-.305 0-.604-.138-.801-.4-2.641-3.521-6.061-3.599-6.206-3.6-.55-.006-.994-.456-.991-1.005.003-.551.447-.995.997-.995.184 0 4.537.05 7.8 4.4.332.442.242 1.069-.2 1.4-.18.135-.39.2-.599.2zM4.999 16c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C7.462 10.05 11.816 10 12 10c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.156.002-3.569.086-6.205 3.6-.195.262-.496.4-.8.4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35.734 19.929C35.375 16.66 35 15 34 13c0 0 3-9 1-12.7-.674-1.246-7.404 1.688-10 3.7 0 0-4-.998-7-.998S11 4 11 4C8.404 1.988 1.674-.946 1 .3-1 4 2 13 2 13 1 15 .625 16.66.266 19.929-.129 23.513.657 26.37 1 27c.39.716 2.367 3.025 5 5 4 3 10 4 12 4s8-1 12-4c2.633-1.975 4.61-4.284 5-5 .343-.63 1.129-3.487.734-7.071z"/><path fill="#E75A70" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#F18F26" d="M2 3c.447-1.342 5.64 1 6.64 2C8.64 5 4 8 3 11c0 0-2-5-1-8zm32 0c-.447-1.342-5.64 1-6.64 2 0 0 4.64 3 5.64 6 0 0 2-5 1-8z"/><path fill="#FFCC4D" d="M4.934 5.603C4.934 4.189 11 7 10 8s-2 1.603-3 2.603-2.066-4-2.066-5zm26.132 0C31.066 4.189 25 7 26 8s2 1.603 3 2.603 2.066-4 2.066-5z"/><path fill="#FEE7B8" d="M.701 25c-.148 0-.294-.065-.393-.19-.171-.217-.134-.531.083-.702.162-.127 4.02-3.12 10.648-2.605.275.02.481.261.46.536-.021.275-.257.501-.537.46-6.233-.474-9.915 2.366-9.951 2.395-.093.071-.202.106-.31.106zm8.868-4.663c-.049 0-.1-.007-.149-.022-4.79-1.497-8.737-.347-8.777-.336-.265.081-.543-.07-.623-.335-.079-.265.071-.543.335-.622.173-.052 4.286-1.247 9.362.338.264.083.411.363.328.627-.066.213-.263.35-.476.35zM35.299 25c.148 0 .294-.065.393-.19.171-.217.134-.531-.083-.702-.162-.127-4.02-3.12-10.648-2.605-.275.02-.481.261-.46.536.021.275.257.501.537.46 6.233-.474 9.915 2.366 9.951 2.395.093.071.202.106.31.106zm-8.868-4.663c.049 0 .1-.007.149-.022 4.79-1.497 8.737-.347 8.777-.336.265.081.543-.07.623-.335.079-.265-.071-.543-.335-.622-.173-.052-4.286-1.247-9.362.338-.264.083-.411.363-.328.627.065.213.263.35.476.35z"/><path fill="#292F33" d="M28.023 24.191C27.046 24.383 23 26 18 26s-9.046-1.617-10.023-1.809C7 24 6.885 25.264 7.442 27.132 8 29 11 33 18 33s10-4 10.558-5.868c.557-1.868.442-3.132-.535-2.941z"/><path fill="#F5F8FA" d="M8 25s5 2 10 2 10-2 10-2-.5 3-1.5 3-1.5-1-1.5-1-4 2-7 2-7-2-7-2-.5 1-1.5 1S8 25 8 25z"/><path d="M28.416 17.723C28.355 17.632 26.901 15.5 24 15.5c-2.9 0-4.355 2.132-4.416 2.223-.135.202-.104.47.071.638.174.167.446.185.643.042.012-.01 1.262-.903 3.702-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zm-12 0C16.355 17.632 14.901 15.5 12 15.5c-2.9 0-4.355 2.132-4.416 2.223-.134.202-.104.47.071.638.175.167.447.185.642.042.013-.01 1.262-.903 3.703-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zM31.001 16c-.305 0-.604-.138-.801-.4-2.641-3.521-6.061-3.599-6.206-3.6-.55-.006-.994-.456-.991-1.005.003-.551.447-.995.997-.995.184 0 4.537.05 7.8 4.4.332.442.242 1.069-.2 1.4-.18.135-.39.2-.599.2zM4.999 16c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C7.462 10.05 11.816 10 12 10c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.156.002-3.569.086-6.205 3.6-.195.262-.496.4-.8.4z" fill="#292F33"/><path d="M27 19c5 2 9 5 9 10 0 4-3 4-3 4-6 0-2-8-6-14zM9 19c-5 2-9 5-9 10 0 4 3 4 3 4 6 0 2-8 6-14z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f63a.svg b/public/emoji/1f63a.svg index 97dfc19ab..88057ceb0 100644 --- a/public/emoji/1f63a.svg +++ b/public/emoji/1f63a.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 20c0 10-11 16-18 16S0 29.941 0 20C0 10.059 4 0 18 0s18 10 18 20z"/><path fill="#FFCC4D" d="M35 1c1 1 0 11 0 11L27 2s7-2 8-1zM1 1C0 2 1 12 1 12L9 2S2 0 1 1z"/><path fill="#292F33" d="M31.404 23.705c-.123-.169-.338-.245-.542-.186-.069.02-7 1.98-12.863 1.98-5.858 0-12.793-1.961-12.862-1.98-.209-.062-.431.021-.552.2-.121.18-.113.416.02.587.292.377 7.221 9.194 13.395 9.194 7.185 0 13.166-8.846 13.417-9.223.115-.174.11-.402-.013-.572z"/><ellipse fill="#292F33" cx="12" cy="14.5" rx="2" ry="3.5"/><ellipse fill="#292F33" cx="24" cy="14.5" rx="2" ry="3.5"/><path fill="#F5F8FA" d="M8 25s5 2 10 2 10-2 10-2 0 3-1 3-2-1-2-1-4 2-7 2-7-2-7-2-1 1-2 1-1-3-1-3z"/><path fill="#67757F" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path d="M26 20.5c-.209 0-.404-.133-.475-.342-.087-.262.055-.545.316-.633l9-3c.264-.087.545.054.633.316.087.262-.055.545-.316.632l-9 3c-.053.019-.105.027-.158.027zm-1.001 2c-.233 0-.441-.164-.489-.402-.055-.271.121-.534.392-.588l10-2c.26-.054.533.12.588.392.055.271-.121.534-.393.588l-10 2c-.032.007-.065.01-.098.01zM10 20.5c-.052 0-.106-.008-.158-.025l-9-3c-.262-.087-.403-.37-.316-.632.087-.262.368-.404.632-.316l9 3c.262.088.403.371.316.633-.07.207-.264.34-.474.34zm1 2c-.032 0-.065-.003-.099-.01l-10-2c-.271-.054-.446-.317-.392-.588.054-.271.313-.449.588-.392l10 2c.271.054.446.317.392.588-.046.238-.255.402-.489.402z" fill="#9AAAB4"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35.734 19.929C35.375 16.66 35 15 34 13c0 0 3-9 1-12.7-.674-1.246-7.404 1.688-10 3.7 0 0-4-.998-7-.998S11 4 11 4C8.404 1.988 1.674-.946 1 .3-1 4 2 13 2 13 1 15 .625 16.66.266 19.929-.129 23.513.657 26.37 1 27c.39.716 2.367 3.025 5 5 4 3 10 4 12 4s8-1 12-4c2.633-1.975 4.61-4.284 5-5 .343-.63 1.129-3.487.734-7.071z"/><path fill="#E75A70" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#F18F26" d="M2 3c.447-1.342 5.64 1 6.64 2C8.64 5 4 8 3 11c0 0-2-5-1-8zm32 0c-.447-1.342-5.64 1-6.64 2 0 0 4.64 3 5.64 6 0 0 2-5 1-8z"/><path fill="#FFCC4D" d="M4.934 5.603C4.934 4.189 11 7 10 8s-2 1.603-3 2.603-2.066-4-2.066-5zm26.132 0C31.066 4.189 25 7 26 8s2 1.603 3 2.603 2.066-4 2.066-5z"/><path fill="#FEE7B8" d="M.701 25c-.148 0-.294-.065-.393-.19-.171-.217-.134-.531.083-.702.162-.127 4.02-3.12 10.648-2.605.275.02.481.261.46.536-.021.275-.257.501-.537.46-6.233-.474-9.915 2.366-9.951 2.395-.093.071-.202.106-.31.106zm8.868-4.663c-.049 0-.1-.007-.149-.022-4.79-1.497-8.737-.347-8.777-.336-.265.081-.543-.07-.623-.335-.079-.265.071-.543.335-.622.173-.052 4.286-1.247 9.362.338.264.083.411.363.328.627-.066.213-.263.35-.476.35zM35.299 25c.148 0 .294-.065.393-.19.171-.217.134-.531-.083-.702-.162-.127-4.02-3.12-10.648-2.605-.275.02-.481.261-.46.536.021.275.257.501.537.46 6.233-.474 9.915 2.366 9.951 2.395.093.071.202.106.31.106zm-8.868-4.663c.049 0 .1-.007.149-.022 4.79-1.497 8.737-.347 8.777-.336.265.081.543-.07.623-.335.079-.265-.071-.543-.335-.622-.173-.052-4.286-1.247-9.362.338-.264.083-.411.363-.328.627.065.213.263.35.476.35z"/><path fill="#292F33" d="M28.023 24.191C27.046 24.383 23 26 18 26s-9.046-1.617-10.023-1.809C7 24 6.885 25.264 7.442 27.132 8 29 11 33 18 33s10-4 10.558-5.868c.557-1.868.442-3.132-.535-2.941z"/><path fill="#F5F8FA" d="M8 25s5 2 10 2 10-2 10-2-.5 3-1.5 3-1.5-1-1.5-1-4 2-7 2-7-2-7-2-.5 1-1.5 1S8 25 8 25z"/><g fill="#292F33"><ellipse cx="12" cy="14.5" rx="2" ry="3.5"/><ellipse cx="24" cy="14.5" rx="2" ry="3.5"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f63b.svg b/public/emoji/1f63b.svg index 0255ef366..a4dd7e46b 100644 --- a/public/emoji/1f63b.svg +++ b/public/emoji/1f63b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 20c0 10-11 16-18 16S0 29.941 0 20C0 10.059 4 0 18 0s18 10 18 20z"/><path fill="#FFCC4D" d="M35 1c1 1 0 11 0 11L27 2s7-2 8-1zM1 1C0 2 1 12 1 12L9 2S2 0 1 1z"/><path fill="#292F33" d="M31.404 23.705c-.123-.169-.338-.245-.542-.186-.069.02-7 1.98-12.863 1.98-5.858 0-12.793-1.961-12.862-1.98-.209-.062-.431.021-.552.2-.121.18-.113.416.02.587.292.377 7.221 9.194 13.395 9.194 7.185 0 13.166-8.846 13.417-9.223.115-.174.11-.402-.013-.572z"/><path fill="#F5F8FA" d="M8 25s5 2 10 2 10-2 10-2 0 3-1 3-2-1-2-1-4 2-7 2-7-2-7-2-1 1-2 1-1-3-1-3z"/><path fill="#67757F" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path d="M26 20.5c-.209 0-.404-.133-.475-.342-.087-.262.055-.545.316-.633l9-3c.264-.087.545.054.633.316.087.262-.055.545-.316.632l-9 3c-.053.019-.105.027-.158.027zm-1.001 2c-.233 0-.441-.164-.489-.402-.055-.271.121-.534.392-.588l10-2c.26-.054.533.12.588.392.055.271-.121.534-.393.588l-10 2c-.032.007-.065.01-.098.01zM10 20.5c-.052 0-.106-.008-.158-.025l-9-3c-.262-.087-.403-.37-.316-.632.087-.262.368-.404.632-.316l9 3c.262.088.403.371.316.633-.07.207-.264.34-.474.34zm1 2c-.032 0-.065-.003-.099-.01l-10-2c-.271-.054-.446-.317-.392-.588.054-.271.313-.449.588-.392l10 2c.271.054.446.317.392.588-.046.238-.255.402-.489.402z" fill="#9AAAB4"/><path fill="#E75A70" d="M16.226 5.117c-.859-2.431-3.525-3.707-5.956-2.85-1.477.52-2.521 1.711-2.928 3.104-1.191-.829-2.751-1.1-4.225-.58-2.431.857-3.708 3.525-2.85 5.956.122.345.284.663.472.958 1.951 3.582 7.588 6.1 11.002 6.131 2.637-2.167 5.445-7.664 4.717-11.677-.038-.348-.113-.698-.232-1.042zm3.548 0c.859-2.431 3.525-3.707 5.956-2.85 1.477.52 2.521 1.711 2.929 3.104 1.191-.829 2.751-1.1 4.225-.58 2.43.857 3.707 3.525 2.85 5.956-.123.345-.284.663-.473.958-1.951 3.582-7.588 6.1-11.002 6.131-2.637-2.167-5.445-7.664-4.717-11.677.038-.348.113-.698.232-1.042z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35.734 19.929C35.375 16.66 35 15 34 13c0 0 3-9 1-12.7-.674-1.246-7.404 1.688-10 3.7 0 0-4-.998-7-.998S11 4 11 4C8.404 1.988 1.674-.946 1 .3-1 4 2 13 2 13 1 15 .625 16.66.266 19.929-.129 23.513.657 26.37 1 27c.39.716 2.367 3.025 5 5 4 3 10 4 12 4s8-1 12-4c2.633-1.975 4.61-4.284 5-5 .343-.63 1.129-3.487.734-7.071z"/><path fill="#E75A70" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#F18F26" d="M2 3c.447-1.342 5.64 1 6.64 2C8.64 5 4 8 3 11c0 0-2-5-1-8zm32 0c-.447-1.342-5.64 1-6.64 2 0 0 4.64 3 5.64 6 0 0 2-5 1-8z"/><path fill="#FFCC4D" d="M4.934 5.603C4.934 4.189 11 7 10 8s-2 1.603-3 2.603-2.066-4-2.066-5zm26.132 0C31.066 4.189 25 7 26 8s2 1.603 3 2.603 2.066-4 2.066-5z"/><path fill="#FEE7B8" d="M.701 25c-.148 0-.294-.065-.393-.19-.171-.217-.134-.531.083-.702.162-.127 4.02-3.12 10.648-2.605.275.02.481.261.46.536-.021.275-.257.501-.537.46-6.233-.474-9.915 2.366-9.951 2.395-.093.071-.202.106-.31.106zm8.868-4.663c-.049 0-.1-.007-.149-.022-4.79-1.497-8.737-.347-8.777-.336-.265.081-.543-.07-.623-.335-.079-.265.071-.543.335-.622.173-.052 4.286-1.247 9.362.338.264.083.411.363.328.627-.066.213-.263.35-.476.35zM35.299 25c.148 0 .294-.065.393-.19.171-.217.134-.531-.083-.702-.162-.127-4.02-3.12-10.648-2.605-.275.02-.481.261-.46.536.021.275.257.501.537.46 6.233-.474 9.915 2.366 9.951 2.395.093.071.202.106.31.106zm-8.868-4.663c.049 0 .1-.007.149-.022 4.79-1.497 8.737-.347 8.777-.336.265.081.543-.07.623-.335.079-.265-.071-.543-.335-.622-.173-.052-4.286-1.247-9.362.338-.264.083-.411.363-.328.627.065.213.263.35.476.35z"/><path fill="#292F33" d="M28.023 24.191C27.046 24.383 23 26 18 26s-9.046-1.617-10.023-1.809C7 24 6.885 25.264 7.442 27.132 8 29 11 33 18 33s10-4 10.558-5.868c.557-1.868.442-3.132-.535-2.941z"/><path fill="#F5F8FA" d="M8 25s5 2 10 2 10-2 10-2-.5 3-1.5 3-1.5-1-1.5-1-4 2-7 2-7-2-7-2-.5 1-1.5 1S8 25 8 25z"/><path d="M16.226 5.117c-.859-2.431-3.525-3.707-5.956-2.85-1.477.52-2.521 1.711-2.928 3.104-1.191-.829-2.751-1.1-4.225-.58-2.431.857-3.708 3.525-2.85 5.956.122.345.284.663.472.958 1.951 3.582 7.588 6.1 11.002 6.131 2.637-2.167 5.445-7.664 4.717-11.677-.038-.349-.113-.698-.232-1.042zm3.548 0c.859-2.431 3.525-3.707 5.956-2.85 1.477.52 2.521 1.711 2.929 3.104 1.191-.829 2.751-1.1 4.225-.58 2.43.857 3.707 3.525 2.85 5.956-.123.345-.284.663-.473.958-1.951 3.582-7.588 6.1-11.002 6.131-2.637-2.167-5.445-7.664-4.717-11.677.038-.349.113-.698.232-1.042z" fill="#DD2E44"/></svg> \ No newline at end of file diff --git a/public/emoji/1f63c.svg b/public/emoji/1f63c.svg index 5235cbc62..198ad47a5 100644 --- a/public/emoji/1f63c.svg +++ b/public/emoji/1f63c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 20c0 10-11 16-18 16S0 29.941 0 20C0 10.059 4 0 18 0s18 10 18 20z"/><path fill="#FFCC4D" d="M35 1c1 1 0 11 0 11L27 2s7-2 8-1zM1 1C0 2 1 12 1 12L9 2S2 0 1 1z"/><ellipse fill="#292F33" cx="12" cy="14.5" rx="2" ry="3.5"/><ellipse fill="#292F33" cx="24" cy="14.5" rx="2" ry="3.5"/><path fill="#67757F" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path d="M26 20.5c-.209 0-.404-.133-.475-.342-.087-.262.055-.545.316-.633l9-3c.264-.087.545.054.633.316.087.262-.055.545-.316.632l-9 3c-.053.019-.105.027-.158.027zm-1.001 2c-.233 0-.441-.164-.489-.402-.055-.271.121-.534.392-.588l10-2c.26-.054.533.12.588.392.055.271-.121.534-.393.588l-10 2c-.032.007-.065.01-.098.01zM10 20.5c-.052 0-.106-.008-.158-.025l-9-3c-.262-.087-.403-.37-.316-.632.087-.262.368-.404.632-.316l9 3c.262.088.403.371.316.633-.07.207-.264.34-.474.34zm1 2c-.032 0-.065-.003-.099-.01l-10-2c-.271-.054-.446-.317-.392-.588.054-.271.313-.449.588-.392l10 2c.271.054.446.317.392.588-.046.238-.255.402-.489.402z" fill="#9AAAB4"/><path fill="#292F33" d="M25.327 25.622c-.152-.132-.369-.159-.551-.069l-4 2c-1.871.935-6.727.947-6.776.947-.276 0-.5.224-.5.5 0 .185.101.347.25.433v.001h.001v.001c.071.04.153.063.24.065h7.008c2.658 0 4.089-2.186 4.475-3.342.064-.192.006-.403-.147-.536zM21 12c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414C24.537 6.049 28.819 6 29 6c.553 0 1 .448 1 1 0 .551-.445.998-.995 1-.065.001-3.687.096-7.298 3.707-.195.195-.451.293-.707.293zm-6 0c-.256 0-.512-.098-.707-.293C10.667 8.082 7.031 8 6.995 8c-.551-.006-.995-.455-.992-1.005C6.006 6.444 6.45 6 7 6c.18 0 4.463.049 8.707 4.293.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35.734 19.929C35.375 16.66 35 15 34 13c0 0 3-9 1-12.7-.674-1.246-7.404 1.688-10 3.7 0 0-4-.998-7-.998S11 4 11 4C8.404 1.988 1.674-.946 1 .3-1 4 2 13 2 13 1 15 .625 16.66.266 19.929-.129 23.513.657 26.37 1 27c.39.716 2.367 3.025 5 5 4 3 10 4 12 4s8-1 12-4c2.633-1.975 4.61-4.284 5-5 .343-.63 1.129-3.487.734-7.071z"/><path fill="#E75A70" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#F18F26" d="M2 3c.447-1.342 5.64 1 6.64 2C8.64 5 4 8 3 11c0 0-2-5-1-8zm32 0c-.447-1.342-5.64 1-6.64 2 0 0 4.64 3 5.64 6 0 0 2-5 1-8z"/><path fill="#FFCC4D" d="M4.934 5.603C4.934 4.189 11 7 10 8s-2 1.603-3 2.603-2.066-4-2.066-5zm26.132 0C31.066 4.189 25 7 26 8s2 1.603 3 2.603 2.066-4 2.066-5z"/><path fill="#FEE7B8" d="M.701 25c-.148 0-.294-.065-.393-.19-.171-.217-.134-.531.083-.702.162-.127 4.02-3.12 10.648-2.605.275.02.481.261.46.536-.021.275-.257.501-.537.46-6.233-.474-9.915 2.366-9.951 2.395-.093.071-.202.106-.31.106zm8.868-4.663c-.049 0-.1-.007-.149-.022-4.79-1.497-8.737-.347-8.777-.336-.265.081-.543-.07-.623-.335-.079-.265.071-.543.335-.622.173-.052 4.286-1.247 9.362.338.264.083.411.363.328.627-.066.213-.263.35-.476.35zM35.299 25c.148 0 .294-.065.393-.19.171-.217.134-.531-.083-.702-.162-.127-4.02-3.12-10.648-2.605-.275.02-.481.261-.46.536.021.275.257.501.537.46 6.233-.474 9.915 2.366 9.951 2.395.093.071.202.106.31.106zm-8.868-4.663c.049 0 .1-.007.149-.022 4.79-1.497 8.737-.347 8.777-.336.265.081.543-.07.623-.335.079-.265-.071-.543-.335-.622-.173-.052-4.286-1.247-9.362.338-.264.083-.411.363-.328.627.065.213.263.35.476.35z"/><path fill="#292F33" d="M25.327 25.622c-.152-.132-.369-.159-.551-.069l-4 2c-1.871.935-6.727.947-6.776.947-.276 0-.5.224-.5.5 0 .185.101.347.25.433v.001h.001v.001c.071.04.153.063.24.065h7.008c2.658 0 4.089-2.186 4.475-3.342.064-.192.006-.403-.147-.536z"/><g fill="#292F33"><ellipse cx="12" cy="14.5" rx="2" ry="3.5"/><ellipse cx="24" cy="14.5" rx="2" ry="3.5"/><path d="M21 12c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414C24.537 6.049 28.819 6 29 6c.553 0 1 .448 1 1 0 .551-.445.998-.995 1-.065.001-3.687.096-7.298 3.707-.195.195-.451.293-.707.293zm-6 0c-.256 0-.512-.098-.707-.293C10.667 8.082 7.031 8 6.995 8c-.551-.006-.995-.455-.992-1.005C6.006 6.444 6.45 6 7 6c.18 0 4.463.049 8.707 4.293.391.391.391 1.023 0 1.414-.195.195-.451.293-.707.293z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f63d.svg b/public/emoji/1f63d.svg index 5e7e3e86b..e982de7a3 100644 --- a/public/emoji/1f63d.svg +++ b/public/emoji/1f63d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 20c0 10-11 16-18 16S0 29.941 0 20C0 10.059 4 0 18 0s18 10 18 20z"/><path fill="#FFCC4D" d="M35 1c1 1 0 11 0 11L27 2s7-2 8-1zM1 1C0 2 1 12 1 12L9 2S2 0 1 1z"/><path fill="#67757F" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path d="M26 20.5c-.209 0-.404-.133-.475-.342-.087-.262.055-.545.316-.633l9-3c.264-.087.545.054.633.316.087.262-.055.545-.316.632l-9 3c-.053.019-.105.027-.158.027zm-1.001 2c-.233 0-.441-.164-.489-.402-.055-.271.121-.534.392-.588l10-2c.26-.054.533.12.588.392.055.271-.121.534-.393.588l-10 2c-.032.007-.065.01-.098.01zM10 20.5c-.052 0-.106-.008-.158-.025l-9-3c-.262-.087-.403-.37-.316-.632.087-.262.368-.404.632-.316l9 3c.262.088.403.371.316.633-.07.207-.264.34-.474.34zm1 2c-.032 0-.065-.003-.099-.01l-10-2c-.271-.054-.446-.317-.392-.588.054-.271.313-.449.588-.392l10 2c.271.054.446.317.392.588-.046.238-.255.402-.489.402z" fill="#9AAAB4"/><path fill="#292F33" d="M28.416 17.723C28.355 17.632 26.901 15.5 24 15.5c-2.9 0-4.355 2.132-4.416 2.223-.135.202-.104.47.071.638.174.167.446.185.643.042.012-.01 1.262-.903 3.702-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zM12 15.5c-2.9 0-4.355 2.132-4.416 2.223-.134.202-.104.47.071.638.175.167.447.185.642.042.013-.01 1.262-.903 3.703-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.208-.438.072-.641-.061-.09-1.515-2.222-4.416-2.222zM21.871 30c1.335-.412 2.629-1.156 2.629-2.5 0-2.619-4.912-2.968-5.473-2.999-.277-.035-.51.194-.526.468-.017.274.19.511.464.53.035.002 3.535.299 3.535 2.001s-3.5 1.999-3.535 2.001c-.01.001-.017.006-.027.008-.123.008-.229.064-.308.157-.006.007-.011.016-.017.022-.028.039-.054.078-.072.124-.011.027-.016.057-.021.086-.005.023-.017.046-.019.07-.001.011.004.021.004.032s-.005.021-.004.031c.002.025.013.046.019.07.006.029.011.059.022.087.013.032.032.06.051.088.017.023.03.047.05.067.023.024.052.043.081.062.024.017.045.033.071.046.031.015.065.021.101.027.023.006.044.018.069.02.035.003 3.535.3 3.535 2.002 0 1.702-3.5 1.999-3.535 2.001-.273.02-.481.257-.464.53.017.265.236.469.499.469l.027-.001c.561-.031 5.473-.38 5.473-2.999 0-1.344-1.294-2.088-2.629-2.5zm9.13-14c-.305 0-.604-.138-.801-.4-2.641-3.521-6.061-3.599-6.206-3.6-.55-.006-.994-.456-.991-1.005.003-.551.447-.995.997-.995.184 0 4.537.05 7.8 4.4.332.442.242 1.069-.2 1.4-.18.135-.39.2-.599.2zM4.999 16c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C7.462 10.05 11.816 10 12 10c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.156.002-3.569.086-6.205 3.6-.195.262-.496.4-.8.4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35.734 19.929C35.375 16.66 35 15 34 13c0 0 3-9 1-12.7-.674-1.246-7.404 1.688-10 3.7 0 0-4-.998-7-.998S11 4 11 4C8.404 1.988 1.674-.946 1 .3-1 4 2 13 2 13 1 15 .625 16.66.266 19.929-.129 23.513.657 26.37 1 27c.39.716 2.367 3.025 5 5 4 3 10 4 12 4s8-1 12-4c2.633-1.975 4.61-4.284 5-5 .343-.63 1.129-3.487.734-7.071z"/><path fill="#E75A70" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#F18F26" d="M2 3c.447-1.342 5.64 1 6.64 2C8.64 5 4 8 3 11c0 0-2-5-1-8zm32 0c-.447-1.342-5.64 1-6.64 2 0 0 4.64 3 5.64 6 0 0 2-5 1-8z"/><path fill="#FFCC4D" d="M4.934 5.603C4.934 4.189 11 7 10 8s-2 1.603-3 2.603-2.066-4-2.066-5zm26.132 0C31.066 4.189 25 7 26 8s2 1.603 3 2.603 2.066-4 2.066-5z"/><path fill="#FEE7B8" d="M.701 25c-.148 0-.294-.065-.393-.19-.171-.217-.134-.531.083-.702.162-.127 4.02-3.12 10.648-2.605.275.02.481.261.46.536-.021.275-.257.501-.537.46-6.233-.474-9.915 2.366-9.951 2.395-.093.071-.202.106-.31.106zm8.868-4.663c-.049 0-.1-.007-.149-.022-4.79-1.497-8.737-.347-8.777-.336-.265.081-.543-.07-.623-.335-.079-.265.071-.543.335-.622.173-.052 4.286-1.247 9.362.338.264.083.411.363.328.627-.066.213-.263.35-.476.35zM35.299 25c.148 0 .294-.065.393-.19.171-.217.134-.531-.083-.702-.162-.127-4.02-3.12-10.648-2.605-.275.02-.481.261-.46.536.021.275.257.501.537.46 6.233-.474 9.915 2.366 9.951 2.395.093.071.202.106.31.106zm-8.868-4.663c.049 0 .1-.007.149-.022 4.79-1.497 8.737-.347 8.777-.336.265.081.543-.07.623-.335.079-.265-.071-.543-.335-.622-.173-.052-4.286-1.247-9.362.338-.264.083-.411.363-.328.627.065.213.263.35.476.35z"/><path fill="#292F33" d="M21.871 30c1.335-.412 2.629-1.156 2.629-2.5 0-2.619-4.912-2.968-5.473-2.999-.277-.035-.51.194-.526.468-.017.274.19.511.464.53.035.002 3.535.299 3.535 2.001s-3.5 1.999-3.535 2.001c-.01.001-.017.006-.027.008-.123.008-.229.064-.308.157-.006.007-.011.016-.017.022-.028.039-.054.078-.072.124-.011.027-.016.057-.021.086-.005.023-.017.046-.019.07-.001.011.004.021.004.032s-.005.021-.004.031c.002.025.013.046.019.07.006.029.011.059.022.087.013.032.032.06.051.088.017.023.03.047.05.067.023.024.052.043.081.062.024.017.045.033.071.046.031.015.065.021.101.027.023.006.044.018.069.02.035.003 3.535.3 3.535 2.002 0 1.702-3.5 1.999-3.535 2.001-.273.02-.481.257-.464.53.017.265.236.469.499.469l.027-.001c.561-.031 5.473-.38 5.473-2.999 0-1.344-1.294-2.088-2.629-2.5zm6.545-12.277C28.355 17.632 26.901 15.5 24 15.5c-2.9 0-4.355 2.132-4.416 2.223-.135.202-.104.47.071.638.174.167.446.185.643.042.012-.01 1.262-.903 3.702-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zm-12 0C16.355 17.632 14.901 15.5 12 15.5c-2.9 0-4.355 2.132-4.416 2.223-.134.202-.104.47.071.638.175.167.447.185.642.042.013-.01 1.262-.903 3.703-.903 2.426 0 3.674.881 3.702.901.089.066.194.099.298.099.124 0 .248-.046.344-.137.177-.167.207-.438.072-.64zM31.001 16c-.305 0-.604-.138-.801-.4-2.641-3.521-6.061-3.599-6.206-3.6-.55-.006-.994-.456-.991-1.005.003-.551.447-.995.997-.995.184 0 4.537.05 7.8 4.4.332.442.242 1.069-.2 1.4-.18.135-.39.2-.599.2zM4.999 16c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C7.462 10.05 11.816 10 12 10c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.156.002-3.569.086-6.205 3.6-.195.262-.496.4-.8.4z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f63e.svg b/public/emoji/1f63e.svg index f93d26cbf..19a41d75b 100644 --- a/public/emoji/1f63e.svg +++ b/public/emoji/1f63e.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 20c0 10-11 16-18 16S0 29.941 0 20C0 10.059 4 0 18 0s18 10 18 20z"/><path fill="#FFCC4D" d="M35 1c1 1 0 11 0 11L27 2s7-2 8-1zM1 1C0 2 1 12 1 12L9 2S2 0 1 1z"/><ellipse fill="#292F33" cx="12" cy="14.5" rx="2" ry="3.5"/><ellipse fill="#292F33" cx="24" cy="14.5" rx="2" ry="3.5"/><path fill="#67757F" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path d="M26 20.5c-.209 0-.404-.133-.475-.342-.087-.262.055-.545.316-.633l9-3c.264-.087.545.054.633.316.087.262-.055.545-.316.632l-9 3c-.053.019-.105.027-.158.027zm-1.001 2c-.233 0-.441-.164-.489-.402-.055-.271.121-.534.392-.588l10-2c.26-.054.533.12.588.392.055.271-.121.534-.393.588l-10 2c-.032.007-.065.01-.098.01zM10 20.5c-.052 0-.106-.008-.158-.025l-9-3c-.262-.087-.403-.37-.316-.632.087-.262.368-.404.632-.316l9 3c.262.088.403.371.316.633-.07.207-.264.34-.474.34zm1 2c-.032 0-.065-.003-.099-.01l-10-2c-.271-.054-.446-.317-.392-.588.054-.271.313-.449.588-.392l10 2c.271.054.446.317.392.588-.046.238-.255.402-.489.402z" fill="#9AAAB4"/><path fill="#292F33" d="M30.708 10.647c-.215.215-.525.33-.849.283-4.357-.623-6.831 1.742-6.934 1.843-.393.385-1.025.381-1.412-.01s-.387-1.02.002-1.408c.13-.13 3.243-3.173 8.626-2.404.547.078.927.584.848 1.131-.031.223-.133.417-.281.565zm-25.416 0c.215.215.525.33.849.283 4.357-.623 6.831 1.742 6.934 1.843.393.385 1.025.381 1.412-.01s.387-1.02-.002-1.408c-.13-.13-3.243-3.173-8.626-2.404-.548.077-.927.584-.849 1.131.032.223.134.417.282.565zm20.193 19.232c-.045-.179-1.168-4.379-7.486-4.379s-7.44 4.2-7.485 4.379c-.055.217.043.442.237.554.195.109.439.079.6-.077.019-.019 1.954-1.855 6.648-1.855s6.63 1.837 6.648 1.855c.096.095.224.145.352.145.084 0 .169-.021.246-.064.197-.113.294-.34.24-.558z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35.734 19.929C35.375 16.66 35 15 34 13c0 0 3-9 1-12.7-.674-1.246-7.404 1.688-10 3.7 0 0-4-.998-7-.998S11 4 11 4C8.404 1.988 1.674-.946 1 .3-1 4 2 13 2 13 1 15 .625 16.66.266 19.929-.129 23.513.657 26.37 1 27c.39.716 2.367 3.025 5 5 4 3 10 4 12 4s8-1 12-4c2.633-1.975 4.61-4.284 5-5 .343-.63 1.129-3.487.734-7.071z"/><path fill="#E75A70" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#F18F26" d="M2 3c.447-1.342 5.64 1 6.64 2C8.64 5 4 8 3 11c0 0-2-5-1-8zm32 0c-.447-1.342-5.64 1-6.64 2 0 0 4.64 3 5.64 6 0 0 2-5 1-8z"/><path fill="#FFCC4D" d="M4.934 5.603C4.934 4.189 11 7 10 8s-2 1.603-3 2.603-2.066-4-2.066-5zm26.132 0C31.066 4.189 25 7 26 8s2 1.603 3 2.603 2.066-4 2.066-5z"/><path fill="#FEE7B8" d="M.701 25c-.148 0-.294-.065-.393-.19-.171-.217-.134-.531.083-.702.162-.127 4.02-3.12 10.648-2.605.275.02.481.261.46.536-.021.275-.257.501-.537.46-6.233-.474-9.915 2.366-9.951 2.395-.093.071-.202.106-.31.106zm8.868-4.663c-.049 0-.1-.007-.149-.022-4.79-1.497-8.737-.347-8.777-.336-.265.081-.543-.07-.623-.335-.079-.265.071-.543.335-.622.173-.052 4.286-1.247 9.362.338.264.083.411.363.328.627-.066.213-.263.35-.476.35zM35.299 25c.148 0 .294-.065.393-.19.171-.217.134-.531-.083-.702-.162-.127-4.02-3.12-10.648-2.605-.275.02-.481.261-.46.536.021.275.257.501.537.46 6.233-.474 9.915 2.366 9.951 2.395.093.071.202.106.31.106zm-8.868-4.663c.049 0 .1-.007.149-.022 4.79-1.497 8.737-.347 8.777-.336.265.081.543-.07.623-.335.079-.265-.071-.543-.335-.622-.173-.052-4.286-1.247-9.362.338-.264.083-.411.363-.328.627.065.213.263.35.476.35z"/><path fill="#292F33" d="M25.362 30.28C24.879 29.642 21.947 26 18 26c-4.234 0-7.3 4.191-7.428 4.37-.121.167-.085.381.084.516.094.075.219.114.344.114.096 0 .193-.023.277-.07.029-.016 2.918-1.597 6.722-1.597 3.792 0 6.695 1.581 6.723 1.597.086.048.215.08.281.07.277-.003.516-.182.516-.417.001-.119-.059-.226-.157-.303z"/><g fill="#292F33"><ellipse cx="12" cy="14.5" rx="2" ry="3.5"/><ellipse cx="24" cy="14.5" rx="2" ry="3.5"/><path d="M21.137 13.031c-.225-.06-.425-.215-.547-.45-.243-.469-.079-1.081.366-1.366 4.834-3.099 8.616-2.136 8.775-2.093.486.13.764.668.621 1.202-.142.532-.65.859-1.135.731-.058-.015-3.27-.777-7.383 1.859-.221.144-.471.178-.697.117zm-6.274.001c-.225.06-.476.026-.698-.116-4.13-2.647-7.352-1.867-7.384-1.859-.486.124-.993-.205-1.133-.737s.136-1.066.62-1.196c.159-.042 3.941-1.005 8.775 2.093.445.285.609.896.366 1.366-.121.234-.321.388-.546.449z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f63f.svg b/public/emoji/1f63f.svg index 4cc6054c2..cdd84393f 100644 --- a/public/emoji/1f63f.svg +++ b/public/emoji/1f63f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 20c0 10-11 16-18 16S0 29.941 0 20C0 10.059 4 0 18 0s18 10 18 20z"/><path fill="#FFCC4D" d="M35 1c1 1 0 11 0 11L27 2s7-2 8-1zM1 1C0 2 1 12 1 12L9 2S2 0 1 1z"/><path fill="#292F33" d="M25.362 30.636C24.879 29.87 21.947 25.5 18 25.5c-4.234 0-7.3 5.028-7.428 5.243-.121.2-.085.457.084.619.094.091.219.138.344.138.096 0 .193-.027.277-.084.029-.02 2.918-1.916 6.723-1.916 3.792 0 6.695 1.897 6.723 1.916.086.058.215.096.281.084.277-.004.516-.219.516-.5 0-.144-.06-.272-.158-.364z"/><ellipse fill="#292F33" cx="12" cy="14.5" rx="2" ry="3.5"/><ellipse fill="#292F33" cx="24" cy="14.5" rx="2" ry="3.5"/><path fill="#67757F" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path d="M26 20.5c-.209 0-.404-.133-.475-.342-.087-.262.055-.545.316-.633l9-3c.264-.087.545.054.633.316.087.262-.055.545-.316.632l-9 3c-.053.019-.105.027-.158.027zm-1.001 2c-.233 0-.441-.164-.489-.402-.055-.271.121-.534.392-.588l10-2c.26-.054.533.12.588.392.055.271-.121.534-.393.588l-10 2c-.032.007-.065.01-.098.01zM10 20.5c-.052 0-.106-.008-.158-.025l-9-3c-.262-.087-.403-.37-.316-.632.087-.262.368-.404.632-.316l9 3c.262.088.403.371.316.633-.07.207-.264.34-.474.34zm1 2c-.032 0-.065-.003-.099-.01l-10-2c-.271-.054-.446-.317-.392-.588.054-.271.313-.449.588-.392l10 2c.271.054.446.317.392.588-.046.238-.255.402-.489.402z" fill="#9AAAB4"/><path fill="#292F33" d="M31.001 14c-.305 0-.604-.138-.801-.4-2.641-3.521-6.061-3.599-6.206-3.6-.55-.006-.994-.456-.991-1.005C23.006 8.444 23.45 8 24 8c.184 0 4.537.05 7.8 4.4.332.442.242 1.069-.2 1.4-.18.135-.39.2-.599.2zM4.999 14c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C7.462 8.05 11.816 8 12 8c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.156.002-3.569.086-6.205 3.6-.195.262-.496.4-.8.4z"/><path fill="#5DADEC" d="M15 31c0 2.762-2.239 5-5 5s-5-2.238-5-5 4-13 5-13 5 10.238 5 13z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35.734 19.929C35.375 16.66 35 15 34 13c0 0 3-9 1-12.7-.674-1.246-7.404 1.688-10 3.7 0 0-4-.998-7-.998S11 4 11 4C8.404 1.988 1.674-.946 1 .3-1 4 2 13 2 13 1 15 .625 16.66.266 19.929-.129 23.513.657 26.37 1 27c.39.716 2.367 3.025 5 5 4 3 10 4 12 4s8-1 12-4c2.633-1.975 4.61-4.284 5-5 .343-.63 1.129-3.487.734-7.071z"/><path fill="#E75A70" d="M18 19.5c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#F18F26" d="M2 3c.447-1.342 5.64 1 6.64 2C8.64 5 4 8 3 11c0 0-2-5-1-8zm32 0c-.447-1.342-5.64 1-6.64 2 0 0 4.64 3 5.64 6 0 0 2-5 1-8z"/><path fill="#FFCC4D" d="M4.934 5.603C4.934 4.189 11 7 10 8s-2 1.603-3 2.603-2.066-4-2.066-5zm26.132 0C31.066 4.189 25 7 26 8s2 1.603 3 2.603 2.066-4 2.066-5z"/><path fill="#FEE7B8" d="M.701 25c-.148 0-.294-.065-.393-.19-.171-.217-.134-.531.083-.702.162-.127 4.02-3.12 10.648-2.605.275.02.481.261.46.536-.021.275-.257.501-.537.46-6.233-.474-9.915 2.366-9.951 2.395-.093.071-.202.106-.31.106zm8.868-4.663c-.049 0-.1-.007-.149-.022-4.79-1.497-8.737-.347-8.777-.336-.265.081-.543-.07-.623-.335-.079-.265.071-.543.335-.622.173-.052 4.286-1.247 9.362.338.264.083.411.363.328.627-.066.213-.263.35-.476.35zM35.299 25c.148 0 .294-.065.393-.19.171-.217.134-.531-.083-.702-.162-.127-4.02-3.12-10.648-2.605-.275.02-.481.261-.46.536.021.275.257.501.537.46 6.233-.474 9.915 2.366 9.951 2.395.093.071.202.106.31.106zm-8.868-4.663c.049 0 .1-.007.149-.022 4.79-1.497 8.737-.347 8.777-.336.265.081.543-.07.623-.335.079-.265-.071-.543-.335-.622-.173-.052-4.286-1.247-9.362.338-.264.083-.411.363-.328.627.065.213.263.35.476.35z"/><path fill="#292F33" d="M25.362 30.636C24.879 29.87 21.947 25.5 18 25.5c-4.234 0-7.3 5.028-7.428 5.243-.121.2-.085.457.084.619.094.091.219.138.344.138.096 0 .193-.027.277-.084.029-.02 2.918-1.916 6.723-1.916 3.792 0 6.695 1.897 6.723 1.916.086.058.215.096.281.084.277-.004.516-.219.516-.5 0-.144-.06-.272-.158-.364z"/><g fill="#292F33"><ellipse cx="12" cy="14.5" rx="2" ry="3.5"/><ellipse cx="24" cy="14.5" rx="2" ry="3.5"/><path d="M31.001 14c-.305 0-.604-.138-.801-.4-2.641-3.521-6.061-3.599-6.206-3.6-.55-.006-.994-.456-.991-1.005C23.006 8.444 23.45 8 24 8c.184 0 4.537.05 7.8 4.4.332.442.242 1.069-.2 1.4-.18.135-.39.2-.599.2zM4.999 14c-.208 0-.419-.065-.599-.2-.442-.331-.531-.958-.2-1.4C7.462 8.05 11.816 8 12 8c.552 0 1 .448 1 1 0 .551-.445.998-.996 1-.156.002-3.569.086-6.205 3.6-.195.262-.496.4-.8.4z"/></g><path fill="#5DADEC" d="M15 31c0 2.762-2.239 5-5 5s-5-2.238-5-5 4-13 5-13 5 10.238 5 13z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f640.svg b/public/emoji/1f640.svg index c071e39ff..65ea8a5a2 100644 --- a/public/emoji/1f640.svg +++ b/public/emoji/1f640.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M34.964 11.955L35 12s1-10 0-11c-.91-.91-6.771.66-7.822.951C24.752.717 21.735 0 18 0c-3.729 0-6.742.719-9.166 1.954C7.814 1.671 1.913.087 1 1 0 2 1 12 1 12l.047-.059C.308 14.494 0 17.251 0 20c0 5.506 3.376 9.818 7.577 12.572C7.658 26.155 5.32 19 1.404 19c-.464 0-.84.066-1.153.183C.554 18.426 1.211 18 2.44 18c4.246 0 6.638 8.411 6.102 15.173C11.688 35.01 15.171 36 18 36c2.83 0 6.315-.981 9.461-2.812-.546-6.79 1.848-15.188 6.1-15.188 1.233 0 1.892.426 2.192 1.183-.314-.117-.691-.183-1.157-.183-3.924 0-6.264 7.151-6.171 13.592C32.624 29.847 36 25.538 36 20c0-2.751-.306-5.502-1.036-8.045z"/><path fill="#292F33" d="M18 21c-2.209 0-4 1.791-4 4v6c0 2.209 1.791 4 4 4s4-1.791 4-4v-6c0-2.209-1.791-4-4-4z"/><path fill="#67757F" d="M18 15c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#9AAAB4" d="M29.924 20.506l-5.021 1.004c-.271.054-.447.317-.392.588.048.238.256.402.489.402.033 0 .066-.003.099-.01l4.197-.84c.195-.409.405-.792.628-1.144zM33.561 18l.016.001 1.582-.527c.262-.087.403-.37.316-.632-.088-.262-.369-.403-.633-.316l-9 3c-.262.088-.403.371-.316.633.07.208.265.341.474.341.053 0 .105-.008.158-.025l5.431-1.81c.602-.424 1.261-.665 1.972-.665zm-22.463 3.51L6.07 20.504c.223.354.433.736.629 1.146l4.203.841c.033.007.066.01.099.01.233 0 .442-.164.49-.402.053-.272-.122-.536-.393-.589zm-.94-1.985l-9-3c-.264-.088-.545.054-.632.316-.087.262.054.545.316.632l1.583.528c.006.001.01-.001.015-.001.708 0 1.363.24 1.963.661l5.438 1.813c.053.018.107.026.159.026.21 0 .404-.133.474-.342.087-.262-.054-.545-.316-.633z"/><path fill="#F5F8FA" d="M7.347 10.665c-.946 3.176.107 6.293 2.352 6.962 2.246.67 4.834-1.362 5.779-4.538.947-3.175-.106-6.293-2.35-6.962-2.245-.669-4.834 1.364-5.781 4.538zm21.305 0c.946 3.176-.107 6.293-2.352 6.962-2.246.67-4.834-1.362-5.779-4.538-.946-3.175.107-6.293 2.351-6.962 2.245-.669 4.833 1.364 5.78 4.538z"/><path fill="#FCAB40" d="M35.753 19.183c-.314-.117-.691-.183-1.157-.183-4.641 0-7.065 10.002-5.873 17h6.46c-1.906-7.045 1.656-14.089.57-16.817zM1.404 19c-.464 0-.84.066-1.153.183.072-.179.167-.336.281-.476C-1.33 20.998 2.849 28.54.818 36h6.46c1.19-6.96-1.235-17-5.874-17z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35 .3C34.326-.946 27.596 1.988 25 4c0 0-4-.998-7-.998S11 4 11 4C8.404 1.988 1.674-.946 1 .3-1 4 2 13 2 13 1.102 14.796.709 16.328.377 18.987c.353-.097.76-.157 1.265-.157 5.002 0 7.857 8.145 7.352 14.925C12.541 35.401 16.458 36 18 36c1.549 0 5.497-.605 9.058-2.27-.497-6.775 2.357-14.9 7.353-14.9.48 0 .868.058 1.21.145C35.29 16.323 34.897 14.793 34 13c0 0 3-9 1-12.7z"/><path fill="#E75A70" d="M18 15c3 0 3 .5 3 1.5s-1.5 3-3 3-3-2-3-3-.001-1.5 3-1.5z"/><path fill="#F18F26" d="M2 3c.447-1.342 5.64 1 6.64 2C8.64 5 4 8 3 11c0 0-2-5-1-8zm32 0c-.447-1.342-5.64 1-6.64 2 0 0 4.64 3 5.64 6 0 0 2-5 1-8z"/><path fill="#FFCC4D" d="M4.934 5.603C4.934 4.189 11 7 10 8s-2 1.603-3 2.603-2.066-4-2.066-5zm26.132 0C31.066 4.189 25 7 26 8s2 1.603 3 2.603 2.066-4 2.066-5z"/><path fill="#FEE7B8" d="M11.039 21.502c-1.801-.14-3.389-.016-4.762.234.198.292.386.6.565.924 1.208-.193 2.586-.279 4.12-.162.28.041.516-.184.537-.46.02-.275-.185-.516-.46-.536zm-1.321-2.143c-4.002-1.25-7.396-.772-8.742-.488.206-.024.421-.042.666-.042.889 0 1.71.26 2.457.722 1.482-.021 3.326.14 5.321.764.049.016.1.022.149.022.213 0 .41-.137.477-.351.083-.263-.064-.544-.328-.627zm20.053 2.386c-1.384-.256-2.988-.384-4.809-.243-.275.02-.481.261-.46.536.021.275.257.501.537.46 1.554-.118 2.95-.03 4.17.169.177-.323.364-.631.562-.922zm2.183-2.194c.747-.462 1.568-.722 2.458-.722.216 0 .403.018.589.037-1.361-.284-4.739-.75-8.718.493-.264.083-.411.363-.328.627.067.214.264.351.477.351.049 0 .1-.007.149-.022 2.018-.632 3.883-.79 5.373-.764z"/><path fill="#292F33" d="M18 21c-2.209 0-4 1.791-4 4v6c0 2.209 1.791 4 4 4s4-1.791 4-4v-6c0-2.209-1.791-4-4-4z"/><path fill="#F5F8FA" d="M7.347 10.665c-.946 3.176.107 6.293 2.352 6.962 2.246.67 4.834-1.362 5.779-4.538.947-3.175-.106-6.293-2.35-6.962-2.245-.669-4.834 1.364-5.781 4.538zm21.305 0c.946 3.176-.107 6.293-2.352 6.962-2.246.67-4.834-1.362-5.779-4.538-.946-3.175.107-6.293 2.351-6.962 2.245-.669 4.833 1.364 5.78 4.538z"/><path fill="#FCAB40" d="M35.753 19.183c-.314-.117-.691-.183-1.157-.183-4.641 0-7.065 10.002-5.873 17h6.46c-1.906-7.045 1.656-14.089.57-16.817zM1.404 19c-.464 0-.84.066-1.153.183l-.001.014C-.832 21.94 2.722 29.006.818 36h6.46c1.19-6.96-1.235-17-5.874-17z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f645-1f3fb-200d-2640-fe0f.svg index 5070955e0..d3d6161f2 100644 --- a/public/emoji/1f645-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f645-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#F7DECE" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#EEC2AD" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#F7DECE" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#EEC2AD" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#F7DECE" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#F7DECE" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#EEC2AD" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#F7DECE" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#EEC2AD" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#F7DECE" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f645-1f3fb-200d-2642-fe0f.svg index 159d67c9f..47b17497d 100644 --- a/public/emoji/1f645-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f645-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M28.729 13.715c0-1.548-.769-2.801-1.729-2.852V6.25L9 5.938v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#292F33" d="M18 .823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#C1694F" d="M14 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#4289C1" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#EEC2AD" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#F7DECE" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#4289C1" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#2A6797" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#EEC2AD" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#F7DECE" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#4289C1" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M28.752 13.715c0-1.548-.769-2.801-1.729-2.852V6.25l-18-.312v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#292F33" d="M18.023.823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#C1694F" d="M14.023 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#2A6797" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19.023 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14.023 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#EEC2AD" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#F7DECE" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#4289C1" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#2A6797" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#EEC2AD" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#F7DECE" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#4289C1" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fb.svg b/public/emoji/1f645-1f3fb.svg index 5070955e0..d3d6161f2 100644 --- a/public/emoji/1f645-1f3fb.svg +++ b/public/emoji/1f645-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#F7DECE" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#EEC2AD" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#F7DECE" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#EEC2AD" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#F7DECE" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#F7DECE" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#EEC2AD" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#F7DECE" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#EEC2AD" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#F7DECE" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f645-1f3fc-200d-2640-fe0f.svg index 1db0387cd..061e83da3 100644 --- a/public/emoji/1f645-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f645-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#F3D2A2" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#E2C196" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#F3D2A2" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#E2C196" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#F3D2A2" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#F3D2A2" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#E2C196" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#F3D2A2" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#E2C196" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#F3D2A2" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f645-1f3fc-200d-2642-fe0f.svg index 5e2c41248..47109a9c2 100644 --- a/public/emoji/1f645-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f645-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M28.729 13.715c0-1.548-.769-2.801-1.729-2.852V6.25L9 5.938v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#FFE51E" d="M18 .823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#C1694F" d="M14 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#4289C1" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#E2C196" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#F3D2A2" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#4289C1" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#2A6797" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#E2C196" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#F3D2A2" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#4289C1" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M28.752 13.715c0-1.548-.769-2.801-1.729-2.852V6.25l-18-.312v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#FFE51E" d="M18.023.823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#C1694F" d="M14.023 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#2A6797" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19.023 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14.023 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#E2C196" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#F3D2A2" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#4289C1" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#2A6797" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#E2C196" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#F3D2A2" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#4289C1" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fc.svg b/public/emoji/1f645-1f3fc.svg index 1db0387cd..061e83da3 100644 --- a/public/emoji/1f645-1f3fc.svg +++ b/public/emoji/1f645-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#F3D2A2" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#E2C196" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#F3D2A2" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#E2C196" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#F3D2A2" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#F3D2A2" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#E2C196" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#F3D2A2" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#E2C196" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#F3D2A2" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f645-1f3fd-200d-2640-fe0f.svg index 1378f80d2..3ba6194b5 100644 --- a/public/emoji/1f645-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f645-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#D5AB88" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#CC9B7A" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#D5AB88" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#CC9B7A" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#D5AB88" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#D5AB88" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#CC9B7A" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#D5AB88" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#CC9B7A" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#D5AB88" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f645-1f3fd-200d-2642-fe0f.svg index 50a2cecdc..5e7487e79 100644 --- a/public/emoji/1f645-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f645-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M28.729 13.715c0-1.548-.769-2.801-1.729-2.852V6.25L9 5.938v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#963B22" d="M18 .823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#C1694F" d="M14 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#4289C1" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#CC9B7A" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#D5AB88" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#4289C1" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#2A6797" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#CC9B7A" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#D5AB88" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#4289C1" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M28.752 13.715c0-1.548-.769-2.801-1.729-2.852V6.25l-18-.312v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#963B22" d="M18.023.823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#C1694F" d="M14.023 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#2A6797" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19.023 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14.023 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#CC9B7A" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#D5AB88" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#4289C1" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#2A6797" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#CC9B7A" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#D5AB88" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#4289C1" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fd.svg b/public/emoji/1f645-1f3fd.svg index 1378f80d2..3ba6194b5 100644 --- a/public/emoji/1f645-1f3fd.svg +++ b/public/emoji/1f645-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#D5AB88" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#CC9B7A" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#D5AB88" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#CC9B7A" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#D5AB88" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#D5AB88" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#CC9B7A" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#D5AB88" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#CC9B7A" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#D5AB88" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f645-1f3fe-200d-2640-fe0f.svg index 8a775425a..5eacdc63d 100644 --- a/public/emoji/1f645-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f645-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#AF7E57" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#9B6A49" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#AF7E57" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#9B6A49" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#AF7E57" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#915A34" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#60352A" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#AF7E57" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#915A34" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#60352A" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#9B6A49" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#AF7E57" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#9B6A49" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#AF7E57" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f645-1f3fe-200d-2642-fe0f.svg index 58749e06d..da7e78935 100644 --- a/public/emoji/1f645-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f645-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M28.729 13.715c0-1.548-.769-2.801-1.729-2.852V6.25L9 5.938v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#60352A" d="M18 .823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#915A34" d="M14 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#4289C1" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#9B6A49" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#AF7E57" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#4289C1" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#2A6797" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#9B6A49" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#AF7E57" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#4289C1" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#915A34" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#60352A" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M28.752 13.715c0-1.548-.769-2.801-1.729-2.852V6.25l-18-.312v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#60352A" d="M18.023.823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#915A34" d="M14.023 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#2A6797" d="M6 28h24v8H6z"/><path fill="#915A34" d="M19.023 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#60352A" d="M14.023 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#9B6A49" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#AF7E57" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#4289C1" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#2A6797" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#9B6A49" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#AF7E57" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#4289C1" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3fe.svg b/public/emoji/1f645-1f3fe.svg index 8a775425a..5eacdc63d 100644 --- a/public/emoji/1f645-1f3fe.svg +++ b/public/emoji/1f645-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#AF7E57" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#9B6A49" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#AF7E57" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#9B6A49" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#AF7E57" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#915A34" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#60352A" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#AF7E57" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#915A34" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#60352A" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#9B6A49" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#AF7E57" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#9B6A49" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#AF7E57" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f645-1f3ff-200d-2640-fe0f.svg index a43091f99..e38dfd1cd 100644 --- a/public/emoji/1f645-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f645-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#7C533E" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#664131" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#7C533E" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#664131" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#7C533E" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#3D2E24" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#7C533E" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#3D2E24" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#664131" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#7C533E" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#664131" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#7C533E" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f645-1f3ff-200d-2642-fe0f.svg index 773a01625..1fb2443b6 100644 --- a/public/emoji/1f645-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f645-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M28.729 13.715c0-1.548-.769-2.801-1.729-2.852V6.25L9 5.938v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#0B0200" d="M18 .823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#3D2E24" d="M14 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#4289C1" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#664131" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#7C533E" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#4289C1" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#2A6797" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#664131" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#7C533E" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#4289C1" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#3D2E24" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M28.752 13.715c0-1.548-.769-2.801-1.729-2.852V6.25l-18-.312v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#0B0200" d="M18.023.823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#3D2E24" d="M14.023 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#2A6797" d="M6 28h24v8H6z"/><path fill="#3D2E24" d="M19.023 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path d="M14.023 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#664131" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#7C533E" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#4289C1" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#2A6797" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#664131" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#7C533E" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#4289C1" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-1f3ff.svg b/public/emoji/1f645-1f3ff.svg index a43091f99..e38dfd1cd 100644 --- a/public/emoji/1f645-1f3ff.svg +++ b/public/emoji/1f645-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#7C533E" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#664131" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#7C533E" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#664131" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#7C533E" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#3D2E24" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#7C533E" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#3D2E24" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#664131" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#7C533E" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#664131" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#7C533E" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-200d-2640-fe0f.svg b/public/emoji/1f645-200d-2640-fe0f.svg index bdb511b33..2e47b6710 100644 --- a/public/emoji/1f645-200d-2640-fe0f.svg +++ b/public/emoji/1f645-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#FFDC5D" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#F9CA55" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#FFDC5D" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#F9CA55" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#FFDC5D" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#FFDC5D" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#F9CA55" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#FFDC5D" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#F9CA55" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#FFDC5D" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645-200d-2642-fe0f.svg b/public/emoji/1f645-200d-2642-fe0f.svg index 99f4d9724..ba0fc8e83 100644 --- a/public/emoji/1f645-200d-2642-fe0f.svg +++ b/public/emoji/1f645-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M28.729 13.715c0-1.548-.769-2.801-1.729-2.852V6.25L9 5.938v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#FFAC33" d="M18 .823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#C1694F" d="M14 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#4289C1" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#F9CA55" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#FFDC5D" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#4289C1" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#2A6797" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#F9CA55" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#FFDC5D" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#4289C1" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FDD54C" d="M28.752 13.715c0-1.548-.769-2.801-1.729-2.852V6.25l-18-.312v4.926c-.96.051-1.729 1.304-1.729 2.852 0 1.548.77 2.801 1.729 2.852V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-.433c.96-.051 1.729-1.304 1.729-2.852z"/><path fill="#FFAC33" d="M18.023.823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#C1694F" d="M14.023 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#2A6797" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19.023 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14.023 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#F5BF44" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#FDD54C" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#4289C1" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#2A6797" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#F5BF44" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#FDD54C" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#4289C1" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f645.svg b/public/emoji/1f645.svg index bdb511b33..2e47b6710 100644 --- a/public/emoji/1f645.svg +++ b/public/emoji/1f645.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#FFDC5D" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.89 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#9268CA" d="M27 27H9c-2.209 0-4 1.791-4 4v5h26v-5c0-2.209-1.791-4-4-4z"/><path fill="#F9CA55" d="M2.58 13c-.074 0-1.015-.653-1.557-.541-.693.144-1.139.822-.997 1.517L.58 16.65V19c0 1.104.896 2 2 2h2l-2-8z"/><path fill="#FFDC5D" d="M1.58 8c-.552 0-1 .447-1 1l1 6v5c0 .553.448 1 1 1h2v-2L4 15 2.58 9s-.447-1-1-1z"/><path fill="#9268CA" d="M27 27c4 0 0 9 0 9L4 21v-6l23 12z"/><path fill="#7450A8" d="M19.347 31.408l7.326-4.579-1.938-1.011L9 36h3l5.731-3.582L24 36h3zm2.195-7.255l-4.819-2.515-6.647 3.324 3.056 1.994z"/><path fill="#F9CA55" d="M34.977 12.459c-.541-.112-1.064.142-1.341.586C33.564 13.029 31.42 21 31.42 21h2c1.104 0 2-.896 2-2v-2.35l.554-2.675c.141-.694-.304-1.373-.997-1.516z"/><path fill="#FFDC5D" d="M34.42 8c.552 0 1 .447 1 1l-1 6v5c0 .553-.448 1-1 1h-2v-2l.58-4 1.42-6s.447-1 1-1z"/><path fill="#9268CA" d="M32 15L9 27c-2.209 0-4 1.791-4 4v5h4l9.035-5.846L18 30.13 32 21v-6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M19 0c-1.721 0-3.343.406-4.793 1.111C13.814 1.043 13.412 1 13 1 9.134 1 6 4.134 6 8v12h.018C6.201 26.467 11.489 31.656 18 31.656S29.799 26.467 29.982 20H30v-9c0-6.075-4.925-11-11-11z"/><path fill="#FFDC5D" d="M14 5s-.003 5.308-5 5.936V17c0 4.971 4.029 9 9 9s9-4.029 9-9v-5.019C15.889 11.605 14 5 14 5z"/><circle fill="#DF1F32" cx="18" cy="22" r="1"/><path fill="#7450A8" d="M6 28h24v8H6z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.553 0-1-.448-1-1v-1c0-.552.447-1 1-1s1 .448 1 1v1c0 .552-.447 1-1 1z"/><path fill="#F9CA55" d="M3.195 18.025c.263-.484.776-.74 1.268-.694.034-.064 7.084 2.942 7.084 2.942l-1.268 1.547c-.7.854-1.907 1.023-2.696.376l-1.677-1.375-2.26-1.137c-.586-.297-.788-1.039-.451-1.659z"/><path fill="#FFDC5D" d="M.365 14.985c-.35.427-.315 1.035.08 1.359l4.917 2.738 3.569 2.926c.395.323.998.239 1.348-.188l1.268-1.547-1.428-1.17-3.223-1.893-5.183-2.413c-.001 0-.998-.239-1.348.188z"/><path fill="#9268CA" d="M9.52 18.438s19.597 8.657 20.108 8.884c1.19.529 3.154 1.7 3.154 3.678l-.351 4.75c0 .138-.112.25-.25.25h-3.323c-.05 0-.098-.015-.139-.043L9.279 22.898c-.069-.046-.111-.124-.111-.207v-4.025c.001-.181.186-.302.352-.228z"/><path fill="#7450A8" d="M18.226 22.266l-.779-.324-6.462 2.109 1.482 1.031zm5.203 2.316l1.007.445-5.175 4.594-3.821-.025z"/><path fill="#F9CA55" d="M32.752 18.025c-.263-.484-.776-.74-1.268-.694-.034-.064-7.084 2.942-7.084 2.942l1.268 1.547c.7.854 1.907 1.023 2.696.376l1.677-1.375 2.26-1.137c.586-.297.788-1.039.451-1.659z"/><path fill="#FFDC5D" d="M35.582 14.985c.35.427.315 1.035-.08 1.359l-4.917 2.738-3.569 2.926c-.395.323-.998.239-1.348-.188L24.4 20.273l1.428-1.17 3.223-1.892 5.183-2.413c0-.001.998-.24 1.348.187z"/><path fill="#9268CA" d="M26.427 18.438S6.83 27.095 6.319 27.322c-1.19.529-3.154 1.7-3.154 3.678l.351 4.75c0 .138.112.25.25.25h3.323c.05 0 .098-.015.139-.043l19.439-13.059c.069-.046.111-.124.111-.207v-4.025c0-.181-.186-.302-.351-.228z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f6a3-1f3fb-200d-2640-fe0f.svg index de89bf2ef..e5c19c946 100644 --- a/public/emoji/1f6a3-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f6a3-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M16.631 10.798c.15-1.054 1.129-1.397.867-2.313-.627-2.193 2.545-.565 2.545-.565.603.301-1.152 2.123-1.152 2.123s-.604-.301-.753.754c-.149 1.055-1.656 1.057-1.507.001z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#F7DECE" d="M18.615 5.87c1.205.031 2.156 1.033 2.125 2.238-.031 1.205-1.033 2.156-2.238 2.125-1.205-.031-2.156-1.033-2.125-2.237.031-1.206 1.033-2.157 2.238-2.126z"/><path fill="#292F33" d="M14.115 8.48c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.505-3.407-1.386-2.839-1.413z"/><path fill="#9266CC" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/><path fill="#F7DECE" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#F7DECE" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#292F33" d="M13.809 8.258c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.506-3.406-1.385-2.839-1.413z"/><path fill="#F7DECE" d="M24.039 13.96c-.331-.341-.519.068-.754.058-.139-.006-2.338-.872-2.623-1.143-.285-.271-1.105-1.326-1.929-1.875-.824-.549-1.384-.171-1.597.237-.282.541-.146 1.165.412 1.517.397.25 1.755 1.106 2.535 1.54.561.311 2.569.67 2.744.741.236.095.555.618.787.57.232-.048.479-.425.719-.809.239-.385.037-.495-.294-.836z"/><path fill="#9266CC" d="M20.25 12.366l-.738-.759c-.482-.732-.789-1.183-1.524-1.344-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.444.604 4.552.092.137-.653.753-1.253 1.055-2.174.78-.345.86-.869.88-.855.447.326 1.073.678 1.073.678l1.183-1.359z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f6a3-1f3fb-200d-2642-fe0f.svg index 85a692145..a9651dca4 100644 --- a/public/emoji/1f6a3-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f6a3-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm.979-6.691c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#292F33" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#F7DECE" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#292F33" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#F7DECE" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fb.svg b/public/emoji/1f6a3-1f3fb.svg index 85a692145..a9651dca4 100644 --- a/public/emoji/1f6a3-1f3fb.svg +++ b/public/emoji/1f6a3-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm.979-6.691c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#292F33" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#F7DECE" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#292F33" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#F7DECE" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f6a3-1f3fc-200d-2640-fe0f.svg index 82a0128c9..a0c9e1cef 100644 --- a/public/emoji/1f6a3-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f6a3-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm-2.357-3.018c.15-1.054 1.129-1.397.867-2.313-.627-2.193 2.545-.565 2.545-.565.603.301-1.152 2.123-1.152 2.123s-.604-.301-.753.754c-.149 1.055-1.656 1.057-1.507.001z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#F3D2A2" d="M18.615 5.87c1.205.031 2.156 1.033 2.125 2.238-.031 1.205-1.033 2.156-2.238 2.125-1.205-.031-2.156-1.033-2.125-2.237.031-1.206 1.033-2.157 2.238-2.126z"/><path fill="#FFE51E" d="M14.115 8.48c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.505-3.407-1.386-2.839-1.413z"/><path fill="#9266CC" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#F3D2A2" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#FFE51E" d="M13.809 8.258c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.506-3.406-1.385-2.839-1.413z"/><path fill="#F3D2A2" d="M24.039 13.96c-.331-.341-.519.068-.754.058-.139-.006-2.338-.872-2.623-1.143-.285-.271-1.105-1.326-1.929-1.875-.824-.549-1.384-.171-1.597.237-.282.541-.146 1.165.412 1.517.397.25 1.755 1.106 2.535 1.54.561.311 2.569.67 2.744.741.236.095.555.618.787.57.232-.048.479-.425.719-.809.239-.385.037-.495-.294-.836z"/><path fill="#9266CC" d="M20.25 12.366l-.738-.759c-.482-.732-.789-1.183-1.524-1.344-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.444.604 4.552.092.137-.653.753-1.253 1.055-2.174.78-.345.86-.869.88-.855.447.326 1.073.678 1.073.678l1.183-1.359z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f6a3-1f3fc-200d-2642-fe0f.svg index 1207116a1..d5d8a1b1a 100644 --- a/public/emoji/1f6a3-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f6a3-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#F3D2A2" d="M19.967 7.125c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/><path fill="#FFE51E" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#F3D2A2" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#FFE51E" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#F3D2A2" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fc.svg b/public/emoji/1f6a3-1f3fc.svg index 1207116a1..d5d8a1b1a 100644 --- a/public/emoji/1f6a3-1f3fc.svg +++ b/public/emoji/1f6a3-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#F3D2A2" d="M19.967 7.125c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/><path fill="#FFE51E" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#F3D2A2" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#FFE51E" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#F3D2A2" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f6a3-1f3fd-200d-2640-fe0f.svg index ec8948666..16b7ac0bb 100644 --- a/public/emoji/1f6a3-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f6a3-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm-2.357-3.018c.15-1.054 1.129-1.397.867-2.313-.627-2.193 2.545-.565 2.545-.565.603.301-1.152 2.123-1.152 2.123s-.604-.301-.753.754c-.149 1.055-1.656 1.057-1.507.001z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#D5AB88" d="M18.615 5.87c1.205.031 2.156 1.033 2.125 2.238-.031 1.205-1.033 2.156-2.238 2.125-1.205-.031-2.156-1.033-2.125-2.237.031-1.206 1.033-2.157 2.238-2.126z"/><path fill="#963B22" d="M14.115 8.48c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.505-3.407-1.386-2.839-1.413z"/><path fill="#9266CC" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#D4AB88" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#963B22" d="M13.809 8.258c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.506-3.406-1.385-2.839-1.413z"/><path fill="#D4AB88" d="M24.039 13.96c-.331-.341-.519.068-.754.058-.139-.006-2.338-.872-2.623-1.143-.285-.271-1.105-1.326-1.929-1.875-.824-.549-1.384-.171-1.597.237-.282.541-.146 1.165.412 1.517.397.25 1.755 1.106 2.535 1.54.561.311 2.569.67 2.744.741.236.095.555.618.787.57.232-.048.479-.425.719-.809.239-.385.037-.495-.294-.836z"/><path fill="#9266CC" d="M20.25 12.366l-.738-.759c-.482-.732-.789-1.183-1.524-1.344-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.444.604 4.552.092.137-.653.753-1.253 1.055-2.174.78-.345.86-.869.88-.855.447.326 1.073.678 1.073.678l1.183-1.359z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f6a3-1f3fd-200d-2642-fe0f.svg index 6c4dd1097..350a363a0 100644 --- a/public/emoji/1f6a3-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f6a3-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm.979-6.691c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#963B22" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#D4AB88" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#963B22" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#D4AB88" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fd.svg b/public/emoji/1f6a3-1f3fd.svg index 6c4dd1097..350a363a0 100644 --- a/public/emoji/1f6a3-1f3fd.svg +++ b/public/emoji/1f6a3-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm.979-6.691c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#963B22" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#D4AB88" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#963B22" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#D4AB88" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f6a3-1f3fe-200d-2640-fe0f.svg index 48e297207..08ab1cce5 100644 --- a/public/emoji/1f6a3-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f6a3-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm-2.357-3.018c.15-1.054 1.129-1.397.867-2.313-.627-2.193 2.545-.565 2.545-.565.603.301-1.152 2.123-1.152 2.123s-.604-.301-.753.754c-.149 1.055-1.656 1.057-1.507.001z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#AF7E57" d="M18.615 5.87c1.205.031 2.156 1.033 2.125 2.238-.031 1.205-1.033 2.156-2.238 2.125-1.205-.031-2.156-1.033-2.125-2.237.031-1.206 1.033-2.157 2.238-2.126z"/><path fill="#60352A" d="M14.115 8.48c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.505-3.407-1.386-2.839-1.413z"/><path fill="#9266CC" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#AF7E57" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#60352A" d="M13.809 8.258c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.506-3.406-1.385-2.839-1.413z"/><path fill="#AF7E57" d="M24.039 13.96c-.331-.341-.519.068-.754.058-.139-.006-2.338-.872-2.623-1.143-.285-.271-1.105-1.326-1.929-1.875-.824-.549-1.384-.171-1.597.237-.282.541-.146 1.165.412 1.517.397.25 1.755 1.106 2.535 1.54.561.311 2.569.67 2.744.741.236.095.555.618.787.57.232-.048.479-.425.719-.809.239-.385.037-.495-.294-.836z"/><path fill="#9266CC" d="M20.25 12.366l-.738-.759c-.482-.732-.789-1.183-1.524-1.344-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.444.604 4.552.092.137-.653.753-1.253 1.055-2.174.78-.345.86-.869.88-.855.447.326 1.073.678 1.073.678l1.183-1.359z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f6a3-1f3fe-200d-2642-fe0f.svg index 5a94398df..58d8d4e8a 100644 --- a/public/emoji/1f6a3-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f6a3-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#AF7E57" d="M19.967 7.125c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path fill="#60352A" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#AF7E57" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#60352A" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#AF7E57" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3fe.svg b/public/emoji/1f6a3-1f3fe.svg index 5a94398df..58d8d4e8a 100644 --- a/public/emoji/1f6a3-1f3fe.svg +++ b/public/emoji/1f6a3-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#AF7E57" d="M19.967 7.125c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path fill="#60352A" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#AF7E57" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#60352A" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#AF7E57" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f6a3-1f3ff-200d-2640-fe0f.svg index 8cf74481c..05a2304c9 100644 --- a/public/emoji/1f6a3-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f6a3-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm-2.357-3.018c.15-1.054 1.129-1.397.867-2.313-.627-2.193 2.545-.565 2.545-.565.603.301-1.152 2.123-1.152 2.123s-.604-.301-.753.754c-.149 1.055-1.656 1.057-1.507.001z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#7C533E" d="M18.615 5.87c1.205.031 2.156 1.033 2.125 2.238-.031 1.205-1.033 2.156-2.238 2.125-1.205-.031-2.156-1.033-2.125-2.237.031-1.206 1.033-2.157 2.238-2.126z"/><path fill="#0B0200" d="M14.115 8.48c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.505-3.407-1.386-2.839-1.413z"/><path fill="#9266CC" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#7C533E" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#0B0200" d="M13.809 8.258c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.506-3.406-1.385-2.839-1.413z"/><path fill="#7C533E" d="M24.039 13.96c-.331-.341-.519.068-.754.058-.139-.006-2.338-.872-2.623-1.143-.285-.271-1.105-1.326-1.929-1.875-.824-.549-1.384-.171-1.597.237-.282.541-.146 1.165.412 1.517.397.25 1.755 1.106 2.535 1.54.561.311 2.569.67 2.744.741.236.095.555.618.787.57.232-.048.479-.425.719-.809.239-.385.037-.495-.294-.836z"/><path fill="#9266CC" d="M20.25 12.366l-.738-.759c-.482-.732-.789-1.183-1.524-1.344-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.444.604 4.552.092.137-.653.753-1.253 1.055-2.174.78-.345.86-.869.88-.855.447.326 1.073.678 1.073.678l1.183-1.359z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f6a3-1f3ff-200d-2642-fe0f.svg index 43ecec5d8..d461a4103 100644 --- a/public/emoji/1f6a3-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f6a3-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm.979-6.691c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#0B0200" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#7C533E" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#0B0200" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#7C533E" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-1f3ff.svg b/public/emoji/1f6a3-1f3ff.svg index 43ecec5d8..d461a4103 100644 --- a/public/emoji/1f6a3-1f3ff.svg +++ b/public/emoji/1f6a3-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm.979-6.691c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#0B0200" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#7C533E" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#0B0200" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#7C533E" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-200d-2640-fe0f.svg b/public/emoji/1f6a3-200d-2640-fe0f.svg index 06d1b2f05..8e0c5adc3 100644 --- a/public/emoji/1f6a3-200d-2640-fe0f.svg +++ b/public/emoji/1f6a3-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M16.631 10.798c.15-1.054 1.129-1.397.867-2.313-.627-2.193 2.545-.565 2.545-.565.603.301-1.152 2.123-1.152 2.123s-.604-.301-.753.754c-.149 1.055-1.656 1.057-1.507.001z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#9266CC" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/><path fill="#FFDC5D" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#FFDC5D" d="M18.615 5.87c1.205.031 2.156 1.033 2.125 2.238-.031 1.205-1.033 2.156-2.238 2.125-1.205-.031-2.156-1.033-2.125-2.237.031-1.206 1.033-2.157 2.238-2.126z"/><path fill="#FFAC33" d="M14.115 8.48c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.505-3.407-1.386-2.839-1.413z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#FFDC5D" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#FFAC33" d="M13.809 8.258c.568-.028 1.117-.092 2.056-1.302.624-.804 1.207-1.32 2.649-1.307 1.531.014 2.814 1.317 1.831 1.969-.429.284-.788.149-1.476.342-1.081.303-1.245 1.453-2.221 1.711-1.912.506-3.406-1.385-2.839-1.413z"/><path fill="#FFDC5D" d="M24.039 13.96c-.331-.341-.519.068-.754.058-.139-.006-2.338-.872-2.623-1.143-.285-.271-1.105-1.326-1.929-1.875-.824-.549-1.384-.171-1.597.237-.282.541-.146 1.165.412 1.517.397.25 1.755 1.106 2.535 1.54.561.311 2.569.67 2.744.741.236.095.555.618.787.57.232-.048.479-.425.719-.809.239-.385.037-.495-.294-.836z"/><path fill="#9266CC" d="M20.25 12.366l-.738-.759c-.482-.732-.789-1.183-1.524-1.344-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.444.604 4.552.092.137-.653.753-1.253 1.055-2.174.78-.345.86-.869.88-.855.447.326 1.073.678 1.073.678l1.183-1.359z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3-200d-2642-fe0f.svg b/public/emoji/1f6a3-200d-2642-fe0f.svg index c426a2ea5..d62822936 100644 --- a/public/emoji/1f6a3-200d-2642-fe0f.svg +++ b/public/emoji/1f6a3-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm.979-6.691c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#FFAC33" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#FFDC5D" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#FFAC33" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#FFDC5D" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a3.svg b/public/emoji/1f6a3.svg index c426a2ea5..d62822936 100644 --- a/public/emoji/1f6a3.svg +++ b/public/emoji/1f6a3.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M18.988 13.816l1.245-1.41c.942.928 2.453 1.492 2.959 1.166.556-.353 1.916.904.806 1.613-1.11.71-1.417-.007-2.31-.264-1.032-.296-1.61-.546-2.7-1.105zm.979-6.691c.91.201-.046.961.236 2.329.312 1.516-2.047 0-1.826 2.171.149 1.464-1.865 1.973-2.019.507-.154-1.464 1.045-2.254.385-3.394-1.578-2.731 3.224-1.613 3.224-1.613z"/><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#FFAC33" d="M19.967 7.55c.808.668.57-.862 0-1.335-.806-.667-2.418-.668-3.224 0-.806.667-.806 2.003 0 2.67.57.472.806 1.335.806 0s.807 0 .807-.667c-.001-.668 1.611-.668 1.611-.668z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M12 27c-.256 0-.512-.098-.707-.293-.391-.391-.391-1.023 0-1.414l11-11c.391-.391 1.023-.391 1.414 0s.391 1.023 0 1.414l-11.001 11c-.195.195-.451.293-.706.293z"/><path fill="#FFCC4D" d="M11 29c-.512 0-1.024-.195-1.414-.586-.781-.781-.781-2.047 0-2.828l3-3c.78-.781 2.048-.781 2.828 0 .781.781.781 2.047 0 2.828l-3 3c-.391.391-.903.586-1.414.586z"/><path fill="#77B255" d="M20.233 12.407s-.563-.683-.678-.856c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.2-.91.671-1.255 1.04-.71.24.354.728.624.728.624l1.246-1.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M15.356 15.875l3.083 1.158-1.156 3.084s-4.55-1.004-5.259-2.113c-.709-1.111.602-2.729.602-2.729l2.73.6z"/><path fill="#C1694F" d="M2 17h32s0 2-1 7c-.86 4.302-21 1-24.601 0C5.316 23.144 2 17 2 17z"/><path fill="#F4900C" d="M35 18c0 .553-.447 1-1 1H2c-.552 0-1-.447-1-1 0-.553.448-1 1-1h32c.553 0 1 .447 1 1z"/><path fill="#55ACEE" d="M0 23.933V34c0 1.105.895 2 2 2h32c1.105 0 2-.895 2-2v-9.637c0-.637-.585-1.097-1.21-.976-11.333 2.19-22.667-2.809-34-.439-.461.096-.79.514-.79.985z"/><path fill="#1C6399" d="M24.646 13.533c-.171-.171-.448-.171-.619 0l-8.031 8.031c-2.225 2.224-2.691.599-5.033 2.941l-3.231 3.231c-.2.199-.199.523 0 .723l.994.994.994.994c.2.2.523.2.722 0l3.231-3.231c2.342-2.342.717-2.809 2.941-5.033l8.031-8.031c.172-.171.172-.448.001-.619z"/><path fill="#FFDC5D" d="M17.028 9.229c-.176-.21-.314-.46-.388-.773-.265-1.118.345-2.22 1.362-2.461 1.017-.241 2.447.464 2.46 1.613.013 1.141-.556 2.847-1.522 2.6-.255-.065-.51-.138-.754-.228-.098.125-.153.592-.096.987.147 1.008-1.245 1.167-1.391.157-.116-.798.365-1.327.329-1.895z"/><path fill="#FFAC33" d="M19.947 6.183c-1.426-.8-2.352-.616-3.1.042-.743.653-.726 1.824-.477 2.559.249.735.464.684.464.684s1.04.186 1.072-.772c.01-.303-.333-.45.011-.91.222-.296.752-.178.773.233.022.411.228.324.228.324l.567-1.117s.531-.055.85.42c.202.298.857-.764-.388-1.463z"/><path fill="#FFDC5D" d="M24.229 14.008l-.118-.118c-.271-.28-.494-.141-.642-.049-.064.04-.126.078-.172.078h-.004c-.178-.025-2.298-.865-2.562-1.116-.072-.069-.182-.192-.321-.348-.399-.449-1.004-1.126-1.621-1.538-.484-.323-.858-.319-1.086-.26-.277.071-.515.266-.655.534-.315.605-.131 1.283.447 1.647 1.135.716 2.013 1.25 2.539 1.542.41.227 1.505.465 2.229.624.248.054.482.105.526.123.079.032.188.141.292.247.163.165.331.333.502.333.017 0 .033-.001.051-.005.267-.055.513-.419.783-.854.252-.403.067-.586-.188-.84z"/><path fill="#77B255" d="M19.556 11.55c-.482-.732-.833-1.126-1.568-1.288-1.287-.284-2.912.308-4.222 1.927-.829 1.024-.947 2.174-2.259 3.794 0 0 4.199.447 4.754.092.556-.354.758-1.265.959-2.174.106-.482.288-.806.491-.922.426.358 1.277.837 1.277.837l1.306-1.507c0 .001-.525-.587-.738-.759z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a5.svg b/public/emoji/1f6a5.svg index 22c18e973..6cb382717 100644 --- a/public/emoji/1f6a5.svg +++ b/public/emoji/1f6a5.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M36 23c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V13c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v10z"/><circle fill="#77B255" cx="7" cy="18" r="4"/><circle fill="#FFCC4D" cx="18" cy="18" r="4"/><circle fill="#DD2E44" cx="29" cy="18" r="4"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M36 23c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V13c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v10z"/><circle fill="#77B255" cx="7" cy="18" r="4"/><circle fill="#FFCC4D" cx="18" cy="18" r="4"/><circle fill="#DD2E44" cx="29" cy="18" r="4"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6a6.svg b/public/emoji/1f6a6.svg index 927d3b4fd..252e85cc5 100644 --- a/public/emoji/1f6a6.svg +++ b/public/emoji/1f6a6.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M27 32c0 2.209-1.791 4-4 4H13c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h10c2.209 0 4 1.791 4 4v28z"/><path fill="#77B255" d="M17.999 25c2.209 0 4 1.791 4 4s-1.791 4-4 4-4-1.791-4-4 1.791-4 4-4z"/><path fill="#FFCC4D" d="M17.999 14c2.209 0 4 1.791 4 4s-1.791 4-4 4-4-1.791-4-4 1.791-4 4-4z"/><path fill="#DD2E44" d="M17.999 3c2.209 0 4 1.791 4 4s-1.791 4-4 4-4-1.791-4-4 1.791-4 4-4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M27 32c0 2.209-1.791 4-4 4H13c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h10c2.209 0 4 1.791 4 4v28z"/><path fill="#77B255" d="M17.999 25c2.209 0 4 1.791 4 4s-1.791 4-4 4-4-1.791-4-4 1.791-4 4-4z"/><path fill="#FFCC4D" d="M17.999 14c2.209 0 4 1.791 4 4s-1.791 4-4 4-4-1.791-4-4 1.791-4 4-4z"/><path fill="#DD2E44" d="M17.999 3c2.209 0 4 1.791 4 4s-1.791 4-4 4-4-1.791-4-4 1.791-4 4-4z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f6b6-1f3fb-200d-2640-fe0f.svg index bad4c3fc5..396c56b4e 100644 --- a/public/emoji/1f6b6-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f6b6-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M15.316 3.261C14.109 3.528 16.37 4.79 16 6c-.252.838.225 0 1 0 0 0 .627 1.283.423 3.226-.207 1.94 2.472 2.616 2.677.673.204-1.941-1.385-2.988-.511-4.5 2.092-3.619-4.273-2.138-4.273-2.138"/><path fill="#F7DECE" d="M22 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-4 4-4 4 1.791 4 4"/><path fill="#292F33" d="M26.208 4.766c-1.037-.051-2.041-.169-3.756-2.378-1.14-1.469-2.205-2.412-4.84-2.387-2.798.026-5.141 2.407-3.346 3.598.783.52 1.44.273 2.698.625 1.975.553 2.274 2.654 4.059 3.125 3.491.922 6.222-2.532 5.185-2.583z"/><path fill="#EEC2AD" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.519-4.661-9.247-4.708-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.024-.389 1.413 0 .216.216 5.293 5.355 5.293 10.708.001.553-.447 1-.999 1z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.728-.744.959.548 1.292 1.769.744 2.729l-3.736 6.539v6.469c0 1.104-.896 1.999-2 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.353 1.088-.219 2.138.486 2.354 1.568l.905 4.523 3.695 4.62c.69.862.551 2.121-.312 2.811-.37.295-.811.438-1.249.438z"/><path fill="#9268CA" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#F7DECE" d="M17.696 11.99c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.877 31.048c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471l4.258-4.255zm-10.266 4.855c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063l6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#EEC2AD" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#F7DECE" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#292F33" d="M20.825 2.026c-1.061-1.242-2.52-1.757-5.019-.791-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#292F33" d="M20.251 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.355-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#9268CA" d="M23 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#F7DECE" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f6b6-1f3fb-200d-2642-fe0f.svg index 1f483bba8..8f5f4ce23 100644 --- a/public/emoji/1f6b6-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f6b6-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#292F33" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#EEC2AD" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#F7DECE" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#EEC2AD" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#F7DECE" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#292F33" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#F7DECE" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fb.svg b/public/emoji/1f6b6-1f3fb.svg index 1f483bba8..8f5f4ce23 100644 --- a/public/emoji/1f6b6-1f3fb.svg +++ b/public/emoji/1f6b6-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#292F33" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#EEC2AD" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#F7DECE" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#EEC2AD" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#F7DECE" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#292F33" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#F7DECE" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f6b6-1f3fc-200d-2640-fe0f.svg index 6eec07db7..571d8f0f4 100644 --- a/public/emoji/1f6b6-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f6b6-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M15.316 3.261C14.109 3.528 16.37 4.79 16 6c-.252.838.225 0 1 0 0 0 .627 1.283.423 3.226-.207 1.94 2.472 2.616 2.677.673.204-1.941-1.385-2.988-.511-4.5 2.092-3.619-4.273-2.138-4.273-2.138"/><path fill="#F3D2A2" d="M22 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-4 4-4 4 1.791 4 4"/><path fill="#FFE51E" d="M26.208 4.766c-1.037-.051-2.041-.169-3.756-2.378-1.14-1.469-2.205-2.412-4.84-2.387-2.798.026-5.141 2.407-3.346 3.598.783.52 1.44.273 2.698.625 1.975.553 2.274 2.654 4.059 3.125 3.491.922 6.222-2.532 5.185-2.583z"/><path fill="#E2C196" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.519-4.661-9.247-4.708-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.024-.389 1.413 0 .216.216 5.293 5.355 5.293 10.708.001.553-.447 1-.999 1z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.728-.744.959.548 1.292 1.769.744 2.729l-3.736 6.539v6.469c0 1.104-.896 1.999-2 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.353 1.088-.219 2.138.486 2.354 1.568l.905 4.523 3.695 4.62c.69.862.551 2.121-.312 2.811-.37.295-.811.438-1.249.438z"/><path fill="#9268CA" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#F3D2A2" d="M17.696 11.99c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.877 31.048c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471l4.258-4.255zm-10.266 4.855c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063l6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#E2C196" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#F3D2A2" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#FFE51E" d="M20.825 2.026c-1.061-1.242-2.52-1.757-5.019-.791-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#FFE51E" d="M20.251 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.355-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#9268CA" d="M23 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#F3D2A2" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f6b6-1f3fc-200d-2642-fe0f.svg index dbfd6a6a2..cba51a41c 100644 --- a/public/emoji/1f6b6-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f6b6-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#FFE51E" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#E2C196" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#F3D2A2" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#E2C196" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#F3D2A2" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#FFE51E" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#F3D2A2" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fc.svg b/public/emoji/1f6b6-1f3fc.svg index dbfd6a6a2..cba51a41c 100644 --- a/public/emoji/1f6b6-1f3fc.svg +++ b/public/emoji/1f6b6-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#FFE51E" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#E2C196" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#F3D2A2" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#E2C196" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#F3D2A2" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#FFE51E" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#F3D2A2" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f6b6-1f3fd-200d-2640-fe0f.svg index aa1476383..65a6df4d7 100644 --- a/public/emoji/1f6b6-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f6b6-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M15.316 3.261C14.109 3.528 16.37 4.79 16 6c-.252.838.225 0 1 0 0 0 .627 1.283.423 3.226-.207 1.94 2.472 2.616 2.677.673.204-1.941-1.385-2.988-.511-4.5 2.092-3.619-4.273-2.138-4.273-2.138"/><path fill="#D5AB88" d="M22 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-4 4-4 4 1.791 4 4"/><path fill="#963B22" d="M26.208 4.766c-1.037-.051-2.041-.169-3.756-2.378-1.14-1.469-2.205-2.412-4.84-2.387-2.798.026-5.141 2.407-3.346 3.598.783.52 1.44.273 2.698.625 1.975.553 2.274 2.654 4.059 3.125 3.491.922 6.222-2.532 5.185-2.583z"/><path fill="#CC9B7A" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.519-4.661-9.247-4.708-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.024-.389 1.413 0 .216.216 5.293 5.355 5.293 10.708.001.553-.447 1-.999 1z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.728-.744.959.548 1.292 1.769.744 2.729l-3.736 6.539v6.469c0 1.104-.896 1.999-2 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.353 1.088-.219 2.138.486 2.354 1.568l.905 4.523 3.695 4.62c.69.862.551 2.121-.312 2.811-.37.295-.811.438-1.249.438z"/><path fill="#9268CA" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#D5AB88" d="M17.696 11.99c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.877 31.048c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471l4.258-4.255zm-10.266 4.855c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063l6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#CC9B7A" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#D4AB88" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#963B22" d="M20.825 2.026c-1.061-1.242-2.52-1.757-5.019-.791-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#963B22" d="M20.251 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.355-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#9268CA" d="M23 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#D4AB88" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f6b6-1f3fd-200d-2642-fe0f.svg index 64c97ad32..84169ed7a 100644 --- a/public/emoji/1f6b6-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f6b6-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#963B22" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#CC9B7A" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#D5AB88" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#CC9B7A" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#D4AB88" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#963B22" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#D4AB88" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fd.svg b/public/emoji/1f6b6-1f3fd.svg index 64c97ad32..84169ed7a 100644 --- a/public/emoji/1f6b6-1f3fd.svg +++ b/public/emoji/1f6b6-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#963B22" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#CC9B7A" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#D5AB88" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#CC9B7A" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#D4AB88" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#963B22" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#D4AB88" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f6b6-1f3fe-200d-2640-fe0f.svg index 3f10e2f6a..352e7af5d 100644 --- a/public/emoji/1f6b6-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f6b6-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M15.316 3.261C14.109 3.528 16.37 4.79 16 6c-.252.838.225 0 1 0 0 0 .627 1.283.423 3.226-.207 1.94 2.472 2.616 2.677.673.204-1.941-1.385-2.988-.511-4.5 2.092-3.619-4.273-2.138-4.273-2.138"/><path fill="#AF7E57" d="M22 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-4 4-4 4 1.791 4 4"/><path fill="#60352A" d="M26.208 4.766c-1.037-.051-2.041-.169-3.756-2.378-1.14-1.469-2.205-2.412-4.84-2.387-2.798.026-5.141 2.407-3.346 3.598.783.52 1.44.273 2.698.625 1.975.553 2.274 2.654 4.059 3.125 3.491.922 6.222-2.532 5.185-2.583z"/><path fill="#9B6A49" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.519-4.661-9.247-4.708-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.024-.389 1.413 0 .216.216 5.293 5.355 5.293 10.708.001.553-.447 1-.999 1z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.728-.744.959.548 1.292 1.769.744 2.729l-3.736 6.539v6.469c0 1.104-.896 1.999-2 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.353 1.088-.219 2.138.486 2.354 1.568l.905 4.523 3.695 4.62c.69.862.551 2.121-.312 2.811-.37.295-.811.438-1.249.438z"/><path fill="#9268CA" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#AF7E57" d="M17.696 11.99c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.877 31.048c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471l4.258-4.255zm-10.266 4.855c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063l6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#9B6A49" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#AF7E57" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#60352A" d="M20.825 2.026c-1.061-1.242-2.52-1.757-5.019-.791-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#60352A" d="M20.251 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.355-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#9268CA" d="M23 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#AF7E57" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f6b6-1f3fe-200d-2642-fe0f.svg index 8c7e5b671..591c56223 100644 --- a/public/emoji/1f6b6-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f6b6-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#60352A" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#9B6A49" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#AF7E57" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#9B6A49" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#AF7E57" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#60352A" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#AF7E57" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3fe.svg b/public/emoji/1f6b6-1f3fe.svg index 8c7e5b671..591c56223 100644 --- a/public/emoji/1f6b6-1f3fe.svg +++ b/public/emoji/1f6b6-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#60352A" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#9B6A49" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#AF7E57" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#9B6A49" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#AF7E57" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#60352A" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#AF7E57" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f6b6-1f3ff-200d-2640-fe0f.svg index 7516079f8..ae7e41430 100644 --- a/public/emoji/1f6b6-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f6b6-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M15.316 3.261C14.109 3.528 16.37 4.79 16 6c-.252.838.225 0 1 0 0 0 .627 1.283.423 3.226-.207 1.94 2.472 2.616 2.677.673.204-1.941-1.385-2.988-.511-4.5 2.092-3.619-4.273-2.138-4.273-2.138"/><path fill="#7C533E" d="M22 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-4 4-4 4 1.791 4 4"/><path fill="#0B0200" d="M26.208 4.766c-1.037-.051-2.041-.169-3.756-2.378-1.14-1.469-2.205-2.412-4.84-2.387-2.798.026-5.141 2.407-3.346 3.598.783.52 1.44.273 2.698.625 1.975.553 2.274 2.654 4.059 3.125 3.491.922 6.222-2.532 5.185-2.583z"/><path fill="#664131" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.519-4.661-9.247-4.708-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.024-.389 1.413 0 .216.216 5.293 5.355 5.293 10.708.001.553-.447 1-.999 1z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.728-.744.959.548 1.292 1.769.744 2.729l-3.736 6.539v6.469c0 1.104-.896 1.999-2 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.353 1.088-.219 2.138.486 2.354 1.568l.905 4.523 3.695 4.62c.69.862.551 2.121-.312 2.811-.37.295-.811.438-1.249.438z"/><path fill="#9268CA" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#7C533E" d="M17.696 11.99c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.877 31.048c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471l4.258-4.255zm-10.266 4.855c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063l6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#664131" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#7C533E" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#7C533E" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#0B0200" d="M20.825 2.026c-1.061-1.242-2.52-1.757-5.019-.791-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#0B0200" d="M20.251 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.355-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#9268CA" d="M23 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#7C533E" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f6b6-1f3ff-200d-2642-fe0f.svg index 46989f638..198a8377e 100644 --- a/public/emoji/1f6b6-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f6b6-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#0B0200" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#664131" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#7C533E" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#664131" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#7C533E" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#7C533E" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#0B0200" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#7C533E" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-1f3ff.svg b/public/emoji/1f6b6-1f3ff.svg index 46989f638..198a8377e 100644 --- a/public/emoji/1f6b6-1f3ff.svg +++ b/public/emoji/1f6b6-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#0B0200" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#664131" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#7C533E" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#664131" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#7C533E" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#7C533E" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#0B0200" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#7C533E" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-200d-2640-fe0f.svg b/public/emoji/1f6b6-200d-2640-fe0f.svg index 8b722c778..8e187bfab 100644 --- a/public/emoji/1f6b6-200d-2640-fe0f.svg +++ b/public/emoji/1f6b6-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M15.316 3.261C14.109 3.528 16.37 4.79 16 6c-.252.838.225 0 1 0 0 0 .627 1.283.423 3.226-.207 1.94 2.472 2.616 2.677.673.204-1.941-1.385-2.988-.511-4.5 2.092-3.619-4.273-2.138-4.273-2.138"/><path fill="#FFDC5D" d="M22 4c0 2.209-1.791 4-4 4s-4-1.791-4-4 1.791-4 4-4 4 1.791 4 4"/><path fill="#FFAC33" d="M26.208 4.766c-1.037-.051-2.041-.169-3.756-2.378-1.14-1.469-2.205-2.412-4.84-2.387-2.798.026-5.141 2.407-3.346 3.598.783.52 1.44.273 2.698.625 1.975.553 2.274 2.654 4.059 3.125 3.491.922 6.222-2.532 5.185-2.583z"/><path fill="#F9CA55" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.519-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413 0 .216.216 5.293 5.355 5.293 10.708 0 .553-.447 1-1 1z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.769.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.353 1.088-.219 2.138.486 2.354 1.568l.905 4.523 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#9268CA" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#FFDC5D" d="M17.696 11.99c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.048c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471l4.258-4.255zm-10.266 4.855c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063l6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#F9CA55" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#FFDC5D" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#FFAC33" d="M20.825 2.026c-1.061-1.242-2.52-1.757-5.019-.791-2.183.844-1.481 2.579-.972 2.282 1.402-.817 2.332-.119 3.046 1.021.208-.56 1.122-.904 1.307-.085.208.921-.647 1.322-.533 1.573.038.084-.043-.076 0 0 .547.96 1.437 1.262 1.437 1.262s.337.132.912-1.001.876-3.028-.178-4.261z"/><path fill="#FFAC33" d="M20.251 3.332c2.163.467 1.275 3.839 1.487 5.08.261 1.528 1.761 1.582 1.761 1.582s-.247-1.064-.116-2.177c.183-1.543 1.189-2.789.127-4.296-1.355-1.924-4.604-.479-3.259-.189z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#9268CA" d="M23 20s0 1-2 1h-4.898c-.415-2 .554-3.818-.102-6.5-.848-3.46 2.406-6.874 3.818-6.42 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#FFDC5D" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6-200d-2642-fe0f.svg b/public/emoji/1f6b6-200d-2642-fe0f.svg index c82bdf756..9217939d2 100644 --- a/public/emoji/1f6b6-200d-2642-fe0f.svg +++ b/public/emoji/1f6b6-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M15.012 3.254c-1.207.267 1.054 1.529.684 2.739-.252.838.225 0 1 0 0 0 .627 1.283.423 3.226-.207 1.94 2.472 2.616 2.677.673.204-1.941-1.385-2.988-.511-4.5 2.092-3.619-4.273-2.138-4.273-2.138"/><path fill="#FFDC5D" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#FFAC33" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#F9CA55" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#FFDC5D" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#F9CA55" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#FFDC5D" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#FFAC33" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#FFDC5D" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6b6.svg b/public/emoji/1f6b6.svg index c82bdf756..9217939d2 100644 --- a/public/emoji/1f6b6.svg +++ b/public/emoji/1f6b6.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M15.012 3.254c-1.207.267 1.054 1.529.684 2.739-.252.838.225 0 1 0 0 0 .627 1.283.423 3.226-.207 1.94 2.472 2.616 2.677.673.204-1.941-1.385-2.988-.511-4.5 2.092-3.619-4.273-2.138-4.273-2.138"/><path fill="#FFDC5D" d="M20.567 5.975c.929-1.996.212-4.298-1.602-5.143-1.814-.845-4.769-.077-5.238 2.073-.466 2.136-.03 5.389 1.877 5.299.527-.025 1.057-.067 1.571-.149.067.25.052.761-.043 1.246-.369 1.864 2.171 2.751 2.539.883.214-1.093-.195-1.942-.373-2.737.516-.343.96-.808 1.269-1.472z"/><path fill="#FFAC33" d="M21.043 1.71C19.894.186 18.228-.519 15.243.431c-2.607.829-1.788 3.076-1.297 2.594.782-.768 1.757-.458 1.757-.458l.632 2.315s.353.242.553-.52c.199-.762 1.239-.778 1.541-.137.469.996-.233 1.139-.331 1.711-.31 1.81 1.713 1.864 1.713 1.864s.383.178 1.135-1.103c.753-1.283 1.238-3.473.097-4.987z"/><path fill="#F9CA55" d="M23.696 20.993c-.553 0-1-.447-1-1 0-4.52-4.661-9.247-4.707-9.294-.39-.391-.389-1.024.001-1.414.391-.39 1.023-.389 1.413.001.216.216 5.293 5.355 5.293 10.708 0 .552-.447.999-1 .999z"/><path fill="#2A6797" d="M15.696 34.993c-1.104 0-2-.896-2-2v-7c0-.348.091-.69.264-.992l4-7c.548-.958 1.771-1.293 2.729-.744.959.548 1.292 1.77.744 2.729l-3.736 6.539v6.469c-.001 1.104-.897 1.999-2.001 1.999z"/><path fill="#4289C1" d="M24.697 31.993c-.587 0-1.168-.257-1.562-.751l-4-5c-.2-.249-.337-.543-.399-.856l-1-5c-.217-1.083.485-2.137 1.568-2.354 1.088-.219 2.138.486 2.354 1.568l.905 4.524 3.695 4.62c.691.862.551 2.121-.312 2.811-.369.295-.811.438-1.249.438z"/><path fill="#77B255" d="M22.696 18.993s0 1-2 1h-4c-2-6-.359-12 2-12 3 0 3 4 4 9"/><path fill="#FFDC5D" d="M17.696 11.991c0 .045-.066 4.552-3.6 7.203l.01.014c-.243.183-.41.459-.41.786 0 .553.448 1 1 1 .225 0 .423-.088.59-.214l.01.014c4.35-3.262 4.4-8.575 4.4-8.8l-2-.003z"/><path fill="#292F33" d="M27.878 31.049c.271-.271.16-.676-.129-.94-.463-.422-.672-.574-.672-.574-.255-.168-.873-.418-1.13-.161-1.872 1.865-3.304 4.53-3.356 5.459-.031.548.645.855 1.029.471 1.132-1.133 3.276-3.275 4.258-4.255zm-10.266 4.854c.383.003.594-.361.578-.753-.025-.626-.064-.882-.064-.882-.059-.3-.316-.915-.68-.918-2.642-.023-5.545.83-6.243 1.446-.412.363-.156 1.06.388 1.063 1.603.013 4.633.034 6.021.044z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.011 34.975l-.052.016c.018-.068.042-.19.042-.383 0-.303-.156-.869-.199-.95s-.09-.139-.194-.11c-.079.022-.685.326-1.072.341-.719.027-1.066-.618-1.066-.618s-.399.228-.716.413c-.318.185-.687.462-.959.627-.232.141-.497.208-.771.243s-.497.023-.563.029c-.066.006-.621-.061-.641.488l.003.127-.054-.026s-.048.17-.052.202c-.004.033-.024.052.046.096.07.044.378.176.77.274s1.028.243 1.519.243.909-.098 1.151-.156c.243-.058.763-.169.813-.146.05.023.116.191.173.243.058.052 1.61-.081 1.721-.104.112-.023.146-.119.146-.162v-.649c.002-.027-.021-.045-.045-.038zm10.947-3.752l-.504-.429c-.019-.016-.048-.011-.059.012l-.022.051c-.041-.059-.12-.158-.269-.285-.235-.2-.777-.454-.868-.473-.091-.02-.167-.022-.213.077-.035.076-.199.746-.444 1.056-.454.575-1.184.418-1.184.418l-.153.828c-.067.368-.096.838-.148 1.158-.044.273-.167.523-.322.758-.154.236-.31.4-.35.456-.039.055-.457.441-.045.82l.101.081-.055.025s.1.149.122.174c.022.025.025.053.104.028s.386-.177.721-.416c.336-.24.868-.637 1.192-1.018.325-.381.524-.77.64-.996.116-.226.373-.703.424-.727.051-.024.224.036.303.026.078-.01 1.001-1.302 1.057-1.403s.005-.193-.028-.221z"/><path fill="#F9CA55" d="M19.3 12.243c.927.96 3.062 2.89 3.109 3.121.251 1.223.614 2.606.52 3.454-.068.615.376 1.298.551 1.583.218.354.781.898 1.141.86.224-.023.567-.43.384-.636-.357-.4-.298-1.009-.522-1.559-.449-1.105-.045-3.194-.661-4.563-.256-.567-.733-1.693-2.824-3.626-.511.462-1.698 1.366-1.698 1.366z"/><path fill="#FFDC5D" d="M19.005 1.384c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307s-.043-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M20.189 6.143c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.437.252-2.111z"/><path fill="#FFAC33" d="M20.825 2.026c-1.061-1.242-2.58-1.901-5.019-.791-.994.452-1.439.285-1.58.484-.679.953.246 2.01.608 1.799 1.148-.669 2.183-.47 2.447.014s.021 1.354.234 1.359c.579.015.485-.552.714-.878.375-.534.946-.232 1.071.362.099.471 0 1.271-.77 1.412.523 1.151 1.56 1.502 1.56 1.502s.337.132.912-1.001c.576-1.134.877-3.029-.177-4.262z"/><path fill="#2A6797" d="M16.062 34.203c-1.266.109-1.853-.233-1.721-.416.165-.228.128-.397.13-.536C14.499 30.81 14 27.26 14 27.26c0-.348.003-.813.312-1.562.778-1.883 3.951-7.69 3.951-7.69.548-.958 1.771-1.293 2.729-.744.959.548 1.122 1.405.744 2.729-.715 2.508-2.965 5.602-3.903 7.477.224 2.121-.174 3.853.035 5.857.03.288-.54.767-1.806.876z"/><path fill="#4289C1" d="M26.797 31.931c-.364.553-.97.942-1.598.838-1.269-1.924-4.955-5.321-4.955-5.321-.241-.25-.562-.587-.86-1.341-.748-1.895-2.498-8.277-2.498-8.277-.272-1.07.376-2.16 1.446-2.43 1.07-.272 1.783.232 2.43 1.446 1.227 2.301 1.757 6.09 2.384 8.09 1.87 1.568 2.383 3.603 4.275 5.151-.065.857-.26 1.291-.624 1.844z"/><path fill="#77B255" d="M23 20s0 1-2 1h-4.898c-.415-2-.027-5.004.006-7.765.043-3.623 2.298-5.609 3.71-5.155 1.846.594 2.693 2.641 2.932 5.858S23 20 23 20z"/><path fill="#FFDC5D" d="M17.75 11.792c-.167 1.399-.322 4.433-.479 4.625-.833 1.021-1.722 2.24-2.479 2.729-.549.354-.811 1.174-.927 1.507-.144.414-.213 1.238.057 1.507.169.168.73.177.776-.11.09-.559.626-.917.927-1.467.604-1.104 2.583-2.167 3.292-3.584.294-.588.896-1.729 1.083-4.729-.72-.11-2.25-.478-2.25-.478z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6d5.svg b/public/emoji/1f6d5.svg new file mode 100644 index 000000000..4a2e9be2d --- /dev/null +++ b/public/emoji/1f6d5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FF8044" d="M25 2.875L18 2v5.25l7-.875-2.8-1.75z"/><path fill="#C7521E" d="M0 36h36l-2-2H2z"/><path fill="#662113" d="M17.5 3c0-2 1-2 1 0 0 5 1 9 1 9h-3s1-4 1-9z"/><path fill="#C7521E" d="M28 29v-2l-4-1.938V21l-2-2h-.123s.732-3.967-1.377-5.449V12l-1-1h-3l-1 1v1.551C13.391 15.033 14.123 19 14.123 19H14l-2 2v4.062L8 27v2l-4 2v4l28 .037V31l-4-2z"/><path fill="#662113" d="M19.846 19h-3.692s-.615-5 .615-5h2.462c1.231 0 .615 5 .615 5z"/><path fill="#C7521E" d="M11.784 23.477v-.521l-.292-.292h-.063c-.086-.435-.229-1.313-.229-2.337 0-.584-.292-.584-.292 0 0 1.023-.143 1.902-.229 2.337h-.063l-.292.292v.521c-.465.474-.293 1.523-.293 1.523h2.045s.172-1.049-.292-1.523zm13.906 0v-.521l-.292-.292h-.063c-.086-.435-.229-1.313-.229-2.337 0-.584-.292-.584-.292 0 0 1.023-.143 1.902-.229 2.337h-.063l-.292.292v.521c-.465.474-.292 1.523-.292 1.523h2.045c-.001 0 .171-1.049-.293-1.523zm4 4v-.521l-.292-.292h-.063c-.086-.435-.229-1.313-.229-2.337 0-.584-.292-.584-.292 0 0 1.023-.143 1.902-.229 2.337h-.063l-.292.292v.521c-.465.474-.292 1.523-.292 1.523h2.045c-.001 0 .171-1.049-.293-1.523zm4 5v-.521l-.292-.292h-.063c-.086-.435-.229-1.313-.229-2.337 0-.584-.292-.584-.292 0 0 1.023-.143 1.902-.229 2.337h-.063l-.292.292v.521c-.465.474-.292 1.523-.292 1.523h2.045c-.001 0 .171-1.049-.293-1.523zm-25.906-5v-.521l-.292-.292h-.063c-.086-.436-.229-1.314-.229-2.337 0-.584-.292-.584-.292 0 0 1.023-.143 1.902-.229 2.337h-.064l-.292.292v.521C5.859 27.951 6.031 29 6.031 29h2.045s.172-1.049-.292-1.523zm-4 5v-.521l-.292-.292h-.063c-.086-.436-.229-1.314-.229-2.337 0-.584-.292-.584-.292 0 0 1.023-.143 1.902-.229 2.337h-.064l-.292.292v.521C1.859 32.951 2.031 34 2.031 34h2.045s.172-1.049-.292-1.523z"/><path fill="#FF8044" d="M15.5 12l1-1h3l1 1zM12 21l2-2h8l2 2zm-4 6l2-2h16l2 2zm-4 4l2-2h24l2 2zm-4 5l2-2h32l2 2z"/><path fill="#662113" d="M21 25h-6s0-4 1.5-4h3c1.5 0 1.5 4 1.5 4zm1 4h-8s0-2 2-2h4c2 0 2 2 2 2z"/><path fill="#292F33" d="M24 34H12s0-3 3-3h6c3 0 3 3 3 3z"/><path fill="#FFA06C" d="M21 27h-6c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1s-.448 1-1 1zm1 4h-8c-.552 0-1-.448-1-1s.448-1 1-1h8c.552 0 1 .448 1 1s-.448 1-1 1zm2 5H12c-.552 0-1-.448-1-1s.448-1 1-1h12c.552 0 1 .448 1 1s-.448 1-1 1z"/><path fill="#FF8044" d="M21 31h1v3h-1zm-7 0h1v3h-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f6fa.svg b/public/emoji/1f6fa.svg new file mode 100644 index 000000000..aae4e94ac --- /dev/null +++ b/public/emoji/1f6fa.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M19 9h2v11h-2z"/><path fill="#55ACEE" d="M10 9c-2 2-4 5-4 7 0 4 5 1 5 1V9h-1z"/><circle fill="#292F33" cx="5" cy="32" r="4"/><circle fill="#99AAB5" cx="5" cy="32" r="2"/><path fill="#1E5200" d="M29 23h-2c-1.105 0-2 .895-2 2v5c0 1.105.895 2 2 2h2c1.105 0 2-.895 2-2v-5c0-1.105-.895-2-2-2zm-10 0h-2c-1.105 0-2 .895-2 2v5c0 1.105.895 2 2 2h2c1.105 0 2-.895 2-2v-5c0-1.105-.895-2-2-2z"/><path fill="#5C913B" d="M2 28.377c-1.387.225-2.581-1.152-1-2.435 2-1.623 7-2.435 9-1.623S12 33 11 33s-4-5.435-9-4.623z"/><path fill="#3E721D" d="M11 33h13c1 0 2 0 2-2 0-1 1-4 3-4s5 3 5 4 0 2 1 2 1-1 1-2V19h-8c0 3-1 8-1 8s-1-1-1 1c0 .606-1 2-2 2h-1c-1 0-2-.666-2-1.672V19c0-1-2-1-2 0v9.328C19 29.334 18.262 30 17.341 30h-3.33C13 30 12 29 12 28v-9H5c0 6 5 14 6 14z"/><path fill="#5C913B" d="M34 32c0 1 1 0 1-2 0-3-.833-5-5-5s-5 3-5 5c0 1 1 3 1 2s.667-2 4-2 4 1 4 2z"/><path fill="#FFAC33" d="M12 19H5c0-1 1-3 1-3h4c.552 0 1-.448 1-1v-4s-2 0-2-2c0-.326.106-.652.25-.944C9.573 7.4 10.258 7 10.99 7H33c2 0 3 5 3 12h-8s0-8-3-8H12v8z"/><circle fill="#292F33" cx="30" cy="32" r="4"/><circle fill="#99AAB5" cx="30" cy="32" r="2"/><path fill="#F4900C" d="M9 18.5v-1c0-.276-.224-.5-.5-.5H5.552C5.286 17.648 5 18.464 5 19h3.5c.276 0 .5-.224.5-.5z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e0.svg b/public/emoji/1f7e0.svg new file mode 100644 index 000000000..2db43d5b2 --- /dev/null +++ b/public/emoji/1f7e0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFAC33" cx="18" cy="18" r="18"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e1.svg b/public/emoji/1f7e1.svg new file mode 100644 index 000000000..5c05d4385 --- /dev/null +++ b/public/emoji/1f7e1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FDCB58" cx="18" cy="18" r="18"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e2.svg b/public/emoji/1f7e2.svg new file mode 100644 index 000000000..3e68a3fb1 --- /dev/null +++ b/public/emoji/1f7e2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#78B159" cx="18" cy="18" r="18"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e3.svg b/public/emoji/1f7e3.svg new file mode 100644 index 000000000..8a034cab4 --- /dev/null +++ b/public/emoji/1f7e3.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#AA8ED6" cx="18" cy="18" r="18"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e4.svg b/public/emoji/1f7e4.svg new file mode 100644 index 000000000..ebbc3a730 --- /dev/null +++ b/public/emoji/1f7e4.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#C1694F" cx="18" cy="18" r="18"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e5.svg b/public/emoji/1f7e5.svg new file mode 100644 index 000000000..5326d657d --- /dev/null +++ b/public/emoji/1f7e5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e6.svg b/public/emoji/1f7e6.svg new file mode 100644 index 000000000..082422601 --- /dev/null +++ b/public/emoji/1f7e6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e7.svg b/public/emoji/1f7e7.svg new file mode 100644 index 000000000..3cbdde4d9 --- /dev/null +++ b/public/emoji/1f7e7.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e8.svg b/public/emoji/1f7e8.svg new file mode 100644 index 000000000..64795b1f2 --- /dev/null +++ b/public/emoji/1f7e8.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FDCB58" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7e9.svg b/public/emoji/1f7e9.svg new file mode 100644 index 000000000..73ed4fa49 --- /dev/null +++ b/public/emoji/1f7e9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#78B159" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7ea.svg b/public/emoji/1f7ea.svg new file mode 100644 index 000000000..c331b1f71 --- /dev/null +++ b/public/emoji/1f7ea.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AA8ED6" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f7eb.svg b/public/emoji/1f7eb.svg new file mode 100644 index 000000000..24ee98278 --- /dev/null +++ b/public/emoji/1f7eb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f90d.svg b/public/emoji/1f90d.svg new file mode 100644 index 000000000..7deb0cd70 --- /dev/null +++ b/public/emoji/1f90d.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E6E7E8" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f90e.svg b/public/emoji/1f90e.svg new file mode 100644 index 000000000..275f3c98f --- /dev/null +++ b/public/emoji/1f90e.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f90f-1f3fb.svg b/public/emoji/1f90f-1f3fb.svg new file mode 100644 index 000000000..a14c90745 --- /dev/null +++ b/public/emoji/1f90f-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M33.29 8.628C33.265 8.62 24.499 6 21.499 5c-1.2-.4-21-7-21 16 0 .637 2 11 4 11h11c8.375 0 5.642-10.68 15.92-12.106 1.739-.241 2.621-1.112 2.466-2.566-.165-1.549-1.975-2.059-3.534-2.059-1.146 0-5.754.233-9.026 1.951-.286-1.809-.826-4.013-.826-6.221 5 1 11.092 2.333 11.209 2.372 1.31.434 2.726-.271 3.162-1.582.438-1.309-.27-2.724-1.58-3.161z"/><path fill="#E0AA94" d="M19.207 7.293c-.389-.391-1.023-.392-1.414-.001-.391.39-.392 1.023-.001 1.415.017.017 1.704 1.737 1.704 4.293v7.109c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.247-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v.996s-.004 1.001-.004 3.114c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v2c0 .021.005.039.005.06-.001.017-.01.032-.01.049 0 .852-.501 1.154-.97 1.154-.496.004-1.025-.328-1.025-1.26 0-3.394 0-7.618-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342C7.5 15.618 7.5 19.613 7.5 22c0 2.143 1.522 3.264 3.025 3.264.722 0 1.445-.263 1.999-.769.56.505 1.281.769 2.001.769 1.236 0 2.473-.769 2.846-2.232.368.151.761.232 1.154.232 1.476 0 2.97-1.083 2.97-3.154V13c0-3.375-2.194-5.613-2.288-5.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f90f-1f3fc.svg b/public/emoji/1f90f-1f3fc.svg new file mode 100644 index 000000000..8f109cde2 --- /dev/null +++ b/public/emoji/1f90f-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M33.29 8.628C33.265 8.62 24.499 6 21.499 5c-1.2-.4-21-7-21 16 0 .637 2 11 4 11h11c8.375 0 5.642-10.68 15.92-12.106 1.739-.241 2.621-1.112 2.466-2.566-.165-1.549-1.975-2.059-3.534-2.059-1.146 0-5.754.233-9.026 1.951-.286-1.809-.826-4.013-.826-6.221 5 1 11.092 2.333 11.209 2.372 1.31.434 2.726-.271 3.162-1.582.438-1.309-.27-2.724-1.58-3.161z"/><path fill="#D2A077" d="M19.207 7.293c-.389-.391-1.023-.392-1.414-.001-.391.39-.392 1.023-.001 1.415.017.017 1.704 1.737 1.704 4.293v7.109c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.247-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v.996s-.004 1.001-.004 3.114c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v2c0 .021.005.039.005.06-.001.017-.01.032-.01.049 0 .852-.501 1.154-.97 1.154-.496.004-1.025-.328-1.025-1.26 0-3.394 0-7.618-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342C7.5 15.618 7.5 19.613 7.5 22c0 2.143 1.522 3.264 3.025 3.264.722 0 1.445-.263 1.999-.769.56.505 1.281.769 2.001.769 1.236 0 2.473-.769 2.846-2.232.368.151.761.232 1.154.232 1.476 0 2.97-1.083 2.97-3.154V13c0-3.375-2.194-5.613-2.288-5.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f90f-1f3fd.svg b/public/emoji/1f90f-1f3fd.svg new file mode 100644 index 000000000..0e9b3e620 --- /dev/null +++ b/public/emoji/1f90f-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M33.29 8.628C33.265 8.62 24.499 6 21.499 5c-1.2-.4-21-7-21 16 0 .637 2 11 4 11h11c8.375 0 5.642-10.68 15.92-12.106 1.739-.241 2.621-1.112 2.466-2.566-.165-1.549-1.975-2.059-3.534-2.059-1.146 0-5.754.233-9.026 1.951-.286-1.809-.826-4.013-.826-6.221 5 1 11.092 2.333 11.209 2.372 1.31.434 2.726-.271 3.162-1.582.438-1.309-.27-2.724-1.58-3.161z"/><path fill="#B78B60" d="M19.207 7.293c-.389-.391-1.023-.392-1.414-.001-.391.39-.392 1.023-.001 1.415.017.017 1.704 1.737 1.704 4.293v7.109c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.247-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v.996s-.004 1.001-.004 3.114c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v2c0 .021.005.039.005.06-.001.017-.01.032-.01.049 0 .852-.501 1.154-.97 1.154-.496.004-1.025-.328-1.025-1.26 0-3.394 0-7.618-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342C7.5 15.618 7.5 19.613 7.5 22c0 2.143 1.522 3.264 3.025 3.264.722 0 1.445-.263 1.999-.769.56.505 1.281.769 2.001.769 1.236 0 2.473-.769 2.846-2.232.368.151.761.232 1.154.232 1.476 0 2.97-1.083 2.97-3.154V13c0-3.375-2.194-5.613-2.288-5.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f90f-1f3fe.svg b/public/emoji/1f90f-1f3fe.svg new file mode 100644 index 000000000..07ccb2b69 --- /dev/null +++ b/public/emoji/1f90f-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M33.29 8.628C33.265 8.62 24.499 6 21.499 5c-1.2-.4-21-7-21 16 0 .637 2 11 4 11h11c8.375 0 5.642-10.68 15.92-12.106 1.739-.241 2.621-1.112 2.466-2.566-.165-1.549-1.975-2.059-3.534-2.059-1.146 0-5.754.233-9.026 1.951-.286-1.809-.826-4.013-.826-6.221 5 1 11.092 2.333 11.209 2.372 1.31.434 2.726-.271 3.162-1.582.438-1.309-.27-2.724-1.58-3.161z"/><path fill="#90603E" d="M19.207 7.293c-.389-.391-1.023-.392-1.414-.001-.391.39-.392 1.023-.001 1.415.017.017 1.704 1.737 1.704 4.293v7.109c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.247-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v.996s-.004 1.001-.004 3.114c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v2c0 .021.005.039.005.06-.001.017-.01.032-.01.049 0 .852-.501 1.154-.97 1.154-.496.004-1.025-.328-1.025-1.26 0-3.394 0-7.618-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342C7.5 15.618 7.5 19.613 7.5 22c0 2.143 1.522 3.264 3.025 3.264.722 0 1.445-.263 1.999-.769.56.505 1.281.769 2.001.769 1.236 0 2.473-.769 2.846-2.232.368.151.761.232 1.154.232 1.476 0 2.97-1.083 2.97-3.154V13c0-3.375-2.194-5.613-2.288-5.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f90f-1f3ff.svg b/public/emoji/1f90f-1f3ff.svg new file mode 100644 index 000000000..78893d0e9 --- /dev/null +++ b/public/emoji/1f90f-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M33.29 8.628C33.265 8.62 24.499 6 21.499 5c-1.2-.4-21-7-21 16 0 .637 2 11 4 11h11c8.375 0 5.642-10.68 15.92-12.106 1.739-.241 2.621-1.112 2.466-2.566-.165-1.549-1.975-2.059-3.534-2.059-1.146 0-5.754.233-9.026 1.951-.286-1.809-.826-4.013-.826-6.221 5 1 11.092 2.333 11.209 2.372 1.31.434 2.726-.271 3.162-1.582.438-1.309-.27-2.724-1.58-3.161z"/><path fill="#583529" d="M19.207 7.293c-.389-.391-1.023-.392-1.414-.001-.391.39-.392 1.023-.001 1.415.017.017 1.704 1.737 1.704 4.293v7.109c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.247-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v.996s-.004 1.001-.004 3.114c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v2c0 .021.005.039.005.06-.001.017-.01.032-.01.049 0 .852-.501 1.154-.97 1.154-.496.004-1.025-.328-1.025-1.26 0-3.394 0-7.618-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342C7.5 15.618 7.5 19.613 7.5 22c0 2.143 1.522 3.264 3.025 3.264.722 0 1.445-.263 1.999-.769.56.505 1.281.769 2.001.769 1.236 0 2.473-.769 2.846-2.232.368.151.761.232 1.154.232 1.476 0 2.97-1.083 2.97-3.154V13c0-3.375-2.194-5.613-2.288-5.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f90f.svg b/public/emoji/1f90f.svg new file mode 100644 index 000000000..626e3b5f0 --- /dev/null +++ b/public/emoji/1f90f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M33.29 8.628C33.265 8.62 24.499 6 21.499 5c-1.2-.4-21-7-21 16 0 .637 2 11 4 11h11c8.375 0 5.642-10.68 15.92-12.106 1.739-.241 2.621-1.112 2.466-2.566-.165-1.549-1.975-2.059-3.534-2.059-1.146 0-5.754.233-9.026 1.951-.286-1.809-.826-4.013-.826-6.221 5 1 11.092 2.333 11.209 2.372 1.31.434 2.726-.271 3.162-1.582.438-1.309-.27-2.724-1.58-3.161z"/><path fill="#EF9645" d="M19.207 7.293c-.389-.391-1.023-.392-1.414-.001-.391.39-.392 1.023-.001 1.415.017.017 1.704 1.737 1.704 4.293v7.109c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.247-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v.996s-.004 1.001-.004 3.114c0 .852-.501 1.154-.97 1.154-.496 0-1.025-.332-1.025-1.264v-2c0-3.767-.303-7.77-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342.66.33 1.447 1.831 1.447 7.105v2c0 .021.005.039.005.06-.001.017-.01.032-.01.049 0 .852-.501 1.154-.97 1.154-.496.004-1.025-.328-1.025-1.26 0-3.394 0-7.618-2.553-8.895-.495-.248-1.095-.046-1.342.447-.247.494-.047 1.095.447 1.342C7.5 15.618 7.5 19.613 7.5 22c0 2.143 1.522 3.264 3.025 3.264.722 0 1.445-.263 1.999-.769.56.505 1.281.769 2.001.769 1.236 0 2.473-.769 2.846-2.232.368.151.761.232 1.154.232 1.476 0 2.97-1.083 2.97-3.154V13c0-3.375-2.194-5.613-2.288-5.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f916.svg b/public/emoji/1f916.svg index 181a4901c..1dbe6d68d 100644 --- a/public/emoji/1f916.svg +++ b/public/emoji/1f916.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#F4900C" cx="33.5" cy="14.5" rx="2.5" ry="3.5"/><ellipse fill="#F4900C" cx="2.5" cy="14.5" rx="2.5" ry="3.5"/><path fill="#FFAC33" d="M34 19c0 .553-.447 1-1 1h-3c-.553 0-1-.447-1-1v-9c0-.552.447-1 1-1h3c.553 0 1 .448 1 1v9zM7 19c0 .553-.448 1-1 1H3c-.552 0-1-.447-1-1v-9c0-.552.448-1 1-1h3c.552 0 1 .448 1 1v9z"/><path fill="#FFCC4D" d="M28 5c0 2.761-4.478 4-10 4C12.477 9 8 7.761 8 5s4.477-5 10-5c5.522 0 10 2.239 10 5z"/><path fill="#F4900C" d="M25 4.083C25 5.694 21.865 7 18 7c-3.866 0-7-1.306-7-2.917 0-1.611 3.134-2.917 7-2.917 3.865 0 7 1.306 7 2.917z"/><path fill="#269" d="M30 5.5C30 6.881 28.881 7 27.5 7h-19C7.119 7 6 6.881 6 5.5S7.119 3 8.5 3h19C28.881 3 30 4.119 30 5.5z"/><path fill="#55ACEE" d="M30 6H6c-1.104 0-2 .896-2 2v26h28V8c0-1.104-.896-2-2-2z"/><path fill="#3B88C3" d="M35 33v-1c0-1.104-.896-2-2-2H22.071l-3.364 3.364c-.391.391-1.023.391-1.414 0L13.929 30H3c-1.104 0-2 .896-2 2v1c0 1.104-.104 2 1 2h32c1.104 0 1-.896 1-2z"/><circle fill="#FFF" cx="24.5" cy="14.5" r="4.5"/><path fill="#DD2E44" d="M26 17c0 .553-.447 1-1 1h-1c-.553 0-1-.447-1-1v-5c0-.552.447-1 1-1h1c.553 0 1 .448 1 1v5z"/><circle fill="#FFF" cx="11.5" cy="14.5" r="4.5"/><path fill="#DD2E44" d="M13 17c0 .553-.448 1-1 1h-1c-.552 0-1-.447-1-1v-5c0-.552.448-1 1-1h1c.552 0 1 .448 1 1v5z"/><path fill="#F5F8FA" d="M29 25.5c0 1.381-1.119 2.5-2.5 2.5h-17C8.119 28 7 26.881 7 25.5S8.119 23 9.5 23h17c1.381 0 2.5 1.119 2.5 2.5z"/><path fill="#CCD6DD" d="M17 23h2v5h-2zm-5 0h2v5h-2zm10 0h2v5h-2zM7 25.5c0 1.21.859 2.218 2 2.45v-4.9c-1.141.232-2 1.24-2 2.45zm20-2.45v4.899c1.141-.232 2-1.24 2-2.45s-.859-2.217-2-2.449z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#F4900C" cx="33.5" cy="14.5" rx="2.5" ry="3.5"/><ellipse fill="#F4900C" cx="2.5" cy="14.5" rx="2.5" ry="3.5"/><path fill="#FFAC33" d="M34 19c0 .553-.447 1-1 1h-3c-.553 0-1-.447-1-1v-9c0-.552.447-1 1-1h3c.553 0 1 .448 1 1v9zM7 19c0 .553-.448 1-1 1H3c-.552 0-1-.447-1-1v-9c0-.552.448-1 1-1h3c.552 0 1 .448 1 1v9z"/><path fill="#FFCC4D" d="M28 5c0 2.761-4.478 4-10 4C12.477 9 8 7.761 8 5s4.477-5 10-5c5.522 0 10 2.239 10 5z"/><path fill="#F4900C" d="M25 4.083C25 5.694 21.865 7 18 7c-3.866 0-7-1.306-7-2.917 0-1.611 3.134-2.917 7-2.917 3.865 0 7 1.306 7 2.917z"/><path fill="#269" d="M30 5.5C30 6.881 28.881 7 27.5 7h-19C7.119 7 6 6.881 6 5.5S7.119 3 8.5 3h19C28.881 3 30 4.119 30 5.5z"/><path fill="#55ACEE" d="M30 6H6c-1.104 0-2 .896-2 2v26h28V8c0-1.104-.896-2-2-2z"/><path fill="#3B88C3" d="M35 33v-1c0-1.104-.896-2-2-2H22.071l-3.364 3.364c-.391.391-1.023.391-1.414 0L13.929 30H3c-1.104 0-2 .896-2 2v1c0 1.104-.104 2 1 2h32c1.104 0 1-.896 1-2z"/><circle fill="#FFF" cx="24.5" cy="14.5" r="4.5"/><circle fill="#DD2E44" cx="24.5" cy="14.5" r="2.721"/><circle fill="#FFF" cx="11.5" cy="14.5" r="4.5"/><path fill="#F5F8FA" d="M29 25.5c0 1.381-1.119 2.5-2.5 2.5h-17C8.119 28 7 26.881 7 25.5S8.119 23 9.5 23h17c1.381 0 2.5 1.119 2.5 2.5z"/><path fill="#CCD6DD" d="M17 23h2v5h-2zm-5 0h2v5h-2zm10 0h2v5h-2zM7 25.5c0 1.21.859 2.218 2 2.45v-4.9c-1.141.232-2 1.24-2 2.45zm20-2.45v4.899c1.141-.232 2-1.24 2-2.45s-.859-2.217-2-2.449z"/><circle fill="#DD2E44" cx="11.5" cy="14.5" r="2.721"/></svg> \ No newline at end of file diff --git a/public/emoji/1f918-1f3fb.svg b/public/emoji/1f918-1f3fb.svg index d86181b90..56fa28a56 100644 --- a/public/emoji/1f918-1f3fb.svg +++ b/public/emoji/1f918-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M25 17.125l-8 .021c-1.104 0-1.875.75-1.875 1.854s.771 1.854 1.875 1.854l5.266.021s.879-.104.879.625c0 .276-.369.625-.646.625 0 0-4.5-.208-4.875 6.875-.015.276-.349.625-.625.625s-.624-.349-.624-.625c0-3.01 1.396-5.938 2.867-6.823-.911 0-1.711-.052-2.242-.052-1 0-1.438-.334-1.438-.333-.146.231-.562 1.271-2.688 1.271-2.375 0-3.021-2.363-3.021-3.021v-5.021L10 15c0-.811.485-1.507 1.18-1.82l-.096 6.654c0 1.104.812 2.083 1.917 2.083.755 0 1.263-.341 1.604-.958-.458-.526-.677-1.133-.677-1.885 0-.886.318-1.795.927-2.344l.042-2.708L15 14c0-.811.485-1.507 1.18-1.82L16.125 15l-.021 1.021c.315-.111.564-.146.917-.146l2.875.021v-2.917L20 13V4c0-.811.485-1.507 1.18-1.82l-.034 13.66h3.646L25 16c.922 0 1.723 2 1.723 2l.002.015c-.244-.419-.757-.89-1.725-.89z"/><path fill="#F7DECE" d="M15 16.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C14.404 21.576 13.755 22 13 22c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path fill="#F7DECE" d="M6 6c0-1.104.896-2 2-2s2 .896 2 2v14c0 .658.217 1.262.578 1.753.027.037.061.068.089.103.104.129.21.255.332.365.033.027.065.055.1.082.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.222.052.451.086.688.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L28 22c.103.335.479 1.871.411 2.191C28.411 29 23.715 34 18 34c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path fill="#F7DECE" d="M20 16h-3c-.352 0-.685.072-1 .184V13c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V3c0-.293.067-.569.18-.82C21.493 1.485 22.189 1 23 1c1.104 0 2 .896 2 2v13h-4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M18 32.625l-8.146-7.583L11 17c0-.811.485-1.507 1.18-1.82L16 16c0-.811.485-1.507 1.18-1.82l3.716.799L21 15V6c0-.811.485-1.507 1.18-1.82l3.612 13.66L26 18c.922 0 1.723 2 1.723 2l.002.015L18 32.625z"/><g fill="#F7DECE"><path d="M16 18.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path d="M7 8c0-1.104.896-2 2-2s2 .896 2 2v14c0 .839.378 1.659.999 2.221 1.168.96 2.843 1.043 4-.002.202-.184.384-.387.53-.618l-.003-.003C16.727 23.713 17 24 18 24h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path d="M21 18h-3c-.352 0-.685.072-1 .184V15c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V5c0-.293.067-.569.18-.82C22.493 3.485 23.189 3 24 3c1.104 0 2 .896 2 2v13h-4z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f918-1f3fc.svg b/public/emoji/1f918-1f3fc.svg index 025715f9f..bae1401c4 100644 --- a/public/emoji/1f918-1f3fc.svg +++ b/public/emoji/1f918-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M25 17.125l-8 .021c-1.104 0-1.875.75-1.875 1.854s.771 1.854 1.875 1.854l5.266.021s.879-.104.879.625c0 .276-.369.625-.646.625 0 0-4.5-.208-4.875 6.875-.015.276-.349.625-.625.625s-.624-.349-.624-.625c0-3.01 1.396-5.938 2.867-6.823-.911 0-1.711-.052-2.242-.052-1 0-1.438-.334-1.438-.333-.146.231-.562 1.271-2.688 1.271-2.375 0-3.021-2.363-3.021-3.021v-5.021L10 15c0-.811.485-1.507 1.18-1.82l-.096 6.654c0 1.104.812 2.083 1.917 2.083.755 0 1.263-.341 1.604-.958-.458-.526-.677-1.133-.677-1.885 0-.886.318-1.795.927-2.344l.042-2.708L15 14c0-.811.485-1.507 1.18-1.82L16.125 15l-.021 1.021c.315-.111.564-.146.917-.146l2.875.021v-2.917L20 13V4c0-.811.485-1.507 1.18-1.82l-.034 13.66h3.646L25 16c.922 0 1.723 2 1.723 2l.002.015c-.244-.419-.757-.89-1.725-.89z"/><path fill="#F3D2A2" d="M15 16.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C14.404 21.576 13.755 22 13 22c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path fill="#F3D2A2" d="M6 6c0-1.104.896-2 2-2s2 .896 2 2v14c0 .658.217 1.262.578 1.753.027.037.061.068.089.103.104.129.21.255.332.365.033.027.065.055.1.082.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.222.052.451.086.688.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L28 22c.103.335.479 1.871.411 2.191C28.411 29 23.715 34 18 34c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path fill="#F3D2A2" d="M20 16h-3c-.352 0-.685.072-1 .184V13c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V3c0-.293.067-.569.18-.82C21.493 1.485 22.189 1 23 1c1.104 0 2 .896 2 2v13h-4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M18 32.625l-8.146-7.583L11 17c0-.811.485-1.507 1.18-1.82L16 16c0-.811.485-1.507 1.18-1.82l3.716.799L21 15V6c0-.811.485-1.507 1.18-1.82l3.612 13.66L26 18c.922 0 1.723 2 1.723 2l.002.015L18 32.625z"/><g fill="#F3D2A2"><path d="M16 18.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path d="M7 8c0-1.104.896-2 2-2s2 .896 2 2v14c0 .839.378 1.659.999 2.221 1.168.96 2.843 1.043 4-.002.202-.184.384-.387.53-.618l-.003-.003C16.727 23.713 17 24 18 24h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path d="M21 18h-3c-.352 0-.685.072-1 .184V15c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V5c0-.293.067-.569.18-.82C22.493 3.485 23.189 3 24 3c1.104 0 2 .896 2 2v13h-4z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f918-1f3fd.svg b/public/emoji/1f918-1f3fd.svg index 984098179..98ebab088 100644 --- a/public/emoji/1f918-1f3fd.svg +++ b/public/emoji/1f918-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M25 17.125l-8 .021c-1.104 0-1.875.75-1.875 1.854s.771 1.854 1.875 1.854l5.266.021s.879-.104.879.625c0 .276-.369.625-.646.625 0 0-4.5-.208-4.875 6.875-.015.276-.349.625-.625.625s-.624-.349-.624-.625c0-3.01 1.396-5.938 2.867-6.823-.911 0-1.711-.052-2.242-.052-1 0-1.438-.334-1.438-.333-.146.231-.562 1.271-2.688 1.271-2.375 0-3.021-2.363-3.021-3.021v-5.021L10 15c0-.811.485-1.507 1.18-1.82l-.096 6.654c0 1.104.812 2.083 1.917 2.083.755 0 1.263-.341 1.604-.958-.458-.526-.677-1.133-.677-1.885 0-.886.318-1.795.927-2.344l.042-2.708L15 14c0-.811.485-1.507 1.18-1.82L16.125 15l-.021 1.021c.315-.111.564-.146.917-.146l2.875.021v-2.917L20 13V4c0-.811.485-1.507 1.18-1.82l-.034 13.66h3.646L25 16c.922 0 1.723 2 1.723 2l.002.015c-.244-.419-.757-.89-1.725-.89z"/><path fill="#D5AB88" d="M15 16.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C14.404 21.576 13.755 22 13 22c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path fill="#D5AB88" d="M6 6c0-1.104.896-2 2-2s2 .896 2 2v14c0 .658.217 1.262.578 1.753.027.037.061.068.089.103.104.129.21.255.332.365.033.027.065.055.1.082.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.222.052.451.086.688.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L28 22c.103.335.479 1.871.411 2.191C28.411 29 23.715 34 18 34c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path fill="#D5AB88" d="M20 16h-3c-.352 0-.685.072-1 .184V13c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V3c0-.293.067-.569.18-.82C21.493 1.485 22.189 1 23 1c1.104 0 2 .896 2 2v13h-4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M18 32.625l-8.146-7.583L11 17c0-.811.485-1.507 1.18-1.82L16 16c0-.811.485-1.507 1.18-1.82l3.716.799L21 15V6c0-.811.485-1.507 1.18-1.82l3.612 13.66L26 18c.922 0 1.723 2 1.723 2l.002.015L18 32.625z"/><g fill="#D4AB88"><path d="M16 18.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path d="M7 8c0-1.104.896-2 2-2s2 .896 2 2v14c0 .839.378 1.659.999 2.221 1.168.96 2.843 1.043 4-.002.202-.184.384-.387.53-.618l-.003-.003C16.727 23.713 17 24 18 24h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path d="M21 18h-3c-.352 0-.685.072-1 .184V15c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V5c0-.293.067-.569.18-.82C22.493 3.485 23.189 3 24 3c1.104 0 2 .896 2 2v13h-4z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f918-1f3fe.svg b/public/emoji/1f918-1f3fe.svg index 74adc3caf..873cef08c 100644 --- a/public/emoji/1f918-1f3fe.svg +++ b/public/emoji/1f918-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M25 17.125l-8 .021c-1.104 0-1.875.75-1.875 1.854s.771 1.854 1.875 1.854l5.266.021s.879-.104.879.625c0 .276-.369.625-.646.625 0 0-4.5-.208-4.875 6.875-.015.276-.349.625-.625.625s-.624-.349-.624-.625c0-3.01 1.396-5.938 2.867-6.823-.911 0-1.711-.052-2.242-.052-1 0-1.438-.334-1.438-.333-.146.231-.562 1.271-2.688 1.271-2.375 0-3.021-2.363-3.021-3.021v-5.021L10 15c0-.811.485-1.507 1.18-1.82l-.096 6.654c0 1.104.812 2.083 1.917 2.083.755 0 1.263-.341 1.604-.958-.458-.526-.677-1.133-.677-1.885 0-.886.318-1.795.927-2.344l.042-2.708L15 14c0-.811.485-1.507 1.18-1.82L16.125 15l-.021 1.021c.315-.111.564-.146.917-.146l2.875.021v-2.917L20 13V4c0-.811.485-1.507 1.18-1.82l-.034 13.66h3.646L25 16c.922 0 1.723 2 1.723 2l.002.015c-.244-.419-.757-.89-1.725-.89z"/><path fill="#AF7E57" d="M15 16.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C14.404 21.576 13.755 22 13 22c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path fill="#AF7E57" d="M6 6c0-1.104.896-2 2-2s2 .896 2 2v14c0 .658.217 1.262.578 1.753.027.037.061.068.089.103.104.129.21.255.332.365.033.027.065.055.1.082.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.222.052.451.086.688.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L28 22c.103.335.479 1.871.411 2.191C28.411 29 23.715 34 18 34c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path fill="#AF7E57" d="M20 16h-3c-.352 0-.685.072-1 .184V13c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V3c0-.293.067-.569.18-.82C21.493 1.485 22.189 1 23 1c1.104 0 2 .896 2 2v13h-4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M18 32.625l-8.146-7.583L11 17c0-.811.485-1.507 1.18-1.82L16 16c0-.811.485-1.507 1.18-1.82l3.716.799L21 15V6c0-.811.485-1.507 1.18-1.82l3.612 13.66L26 18c.922 0 1.723 2 1.723 2l.002.015L18 32.625z"/><g fill="#AF7E57"><path d="M16 18.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path d="M7 8c0-1.104.896-2 2-2s2 .896 2 2v14c0 .839.378 1.659.999 2.221 1.168.96 2.843 1.043 4-.002.202-.184.384-.387.53-.618l-.003-.003C16.727 23.713 17 24 18 24h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path d="M21 18h-3c-.352 0-.685.072-1 .184V15c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V5c0-.293.067-.569.18-.82C22.493 3.485 23.189 3 24 3c1.104 0 2 .896 2 2v13h-4z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f918-1f3ff.svg b/public/emoji/1f918-1f3ff.svg index 94bf9a18f..052adbb63 100644 --- a/public/emoji/1f918-1f3ff.svg +++ b/public/emoji/1f918-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M25 17.125l-8 .021c-1.104 0-1.875.75-1.875 1.854s.771 1.854 1.875 1.854l5.266.021s.879-.104.879.625c0 .276-.369.625-.646.625 0 0-4.5-.208-4.875 6.875-.015.276-.349.625-.625.625s-.624-.349-.624-.625c0-3.01 1.396-5.938 2.867-6.823-.911 0-1.711-.052-2.242-.052-1 0-1.438-.334-1.438-.333-.146.231-.562 1.271-2.688 1.271-2.375 0-3.021-2.363-3.021-3.021v-5.021L10 15c0-.811.485-1.507 1.18-1.82l-.096 6.654c0 1.104.812 2.083 1.917 2.083.755 0 1.263-.341 1.604-.958-.458-.526-.677-1.133-.677-1.885 0-.886.318-1.795.927-2.344l.042-2.708L15 14c0-.811.485-1.507 1.18-1.82L16.125 15l-.021 1.021c.315-.111.564-.146.917-.146l2.875.021v-2.917L20 13V4c0-.811.485-1.507 1.18-1.82l-.034 13.66h3.646L25 16c.922 0 1.723 2 1.723 2l.002.015c-.244-.419-.757-.89-1.725-.89z"/><path fill="#7C533E" d="M15 16.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C14.404 21.576 13.755 22 13 22c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path fill="#7C533E" d="M6 6c0-1.104.896-2 2-2s2 .896 2 2v14c0 .658.217 1.262.578 1.753.027.037.061.068.089.103.104.129.21.255.332.365.033.027.065.055.1.082.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.222.052.451.086.688.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L28 22c.103.335.479 1.871.411 2.191C28.411 29 23.715 34 18 34c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path fill="#7C533E" d="M20 16h-3c-.352 0-.685.072-1 .184V13c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V3c0-.293.067-.569.18-.82C21.493 1.485 22.189 1 23 1c1.104 0 2 .896 2 2v13h-4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M18 32.625l-8.146-7.583L11 17c0-.811.485-1.507 1.18-1.82L16 16c0-.811.485-1.507 1.18-1.82l3.716.799L21 15V6c0-.811.485-1.507 1.18-1.82l3.612 13.66L26 18c.922 0 1.723 2 1.723 2l.002.015L18 32.625z"/><g fill="#7C533E"><path d="M16 18.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path d="M7 8c0-1.104.896-2 2-2s2 .896 2 2v14c0 .839.378 1.659.999 2.221 1.168.96 2.843 1.043 4-.002.202-.184.384-.387.53-.618l-.003-.003C16.727 23.713 17 24 18 24h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path d="M21 18h-3c-.352 0-.685.072-1 .184V15c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V5c0-.293.067-.569.18-.82C22.493 3.485 23.189 3 24 3c1.104 0 2 .896 2 2v13h-4z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f918.svg b/public/emoji/1f918.svg index 71646855c..c3a10630e 100644 --- a/public/emoji/1f918.svg +++ b/public/emoji/1f918.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M25 17.125l-8 .021c-1.104 0-1.875.75-1.875 1.854s.771 1.854 1.875 1.854l5.266.021s.879-.104.879.625c0 .276-.369.625-.646.625 0 0-4.5-.208-4.875 6.875-.015.276-.349.625-.625.625s-.624-.349-.624-.625c0-3.01 1.396-5.938 2.867-6.823-.911 0-1.711-.052-2.242-.052-1 0-1.438-.334-1.438-.333-.146.231-.562 1.271-2.688 1.271-2.375 0-3.021-2.363-3.021-3.021v-5.021L10 15c0-.811.485-1.507 1.18-1.82l-.096 6.654c0 1.104.812 2.083 1.917 2.083.755 0 1.263-.341 1.604-.958-.458-.526-.677-1.133-.677-1.885 0-.886.318-1.795.927-2.344l.042-2.708L15 14c0-.811.485-1.507 1.18-1.82L16.125 15l-.021 1.021c.315-.111.564-.146.917-.146l2.875.021v-2.917L20 13V4c0-.811.485-1.507 1.18-1.82l-.034 13.66h3.646L25 16c.922 0 1.723 2 1.723 2l.002.015c-.244-.419-.757-.89-1.725-.89z"/><path fill="#FFDC5D" d="M15 16.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C14.404 21.576 13.755 22 13 22c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path fill="#FFDC5D" d="M6 6c0-1.104.896-2 2-2s2 .896 2 2v14c0 .658.217 1.262.578 1.753.027.037.061.068.089.103.104.129.21.255.332.365.033.027.065.055.1.082.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.222.052.451.086.688.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L28 22c.103.335.479 1.871.411 2.191C28.411 29 23.715 34 18 34c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path fill="#FFDC5D" d="M20 16h-3c-.352 0-.685.072-1 .184V13c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V3c0-.293.067-.569.18-.82C21.493 1.485 22.189 1 23 1c1.104 0 2 .896 2 2v13h-4z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M18 32.625l-8.146-7.583L11 17c0-.811.485-1.507 1.18-1.82L16 16c0-.811.485-1.507 1.18-1.82l3.716.799L21 15V6c0-.811.485-1.507 1.18-1.82l3.612 13.66L26 18c.922 0 1.723 2 1.723 2l.002.015L18 32.625z"/><g fill="#FFDC5D"><path d="M16 18.778c-.609.549-1 1.336-1 2.222 0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v2.778z"/><path d="M7 8c0-1.104.896-2 2-2s2 .896 2 2v14c0 .839.378 1.659.999 2.221 1.168.96 2.843 1.043 4-.002.202-.184.384-.387.53-.618l-.003-.003C16.727 23.713 17 24 18 24h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.968 0 1.481.596 1.725 1.015.126.217.185.389.188.4L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-12-5.25-12-12 .008.007 0-16 0-16z"/><path d="M21 18h-3c-.352 0-.685.072-1 .184V15c0-.293.067-.569.18-.82.313-.695 1.009-1.18 1.82-1.18 1.104 0 2 .896 2 2v3zm1 0V5c0-.293.067-.569.18-.82C22.493 3.485 23.189 3 24 3c1.104 0 2 .896 2 2v13h-4z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f91a-1f3fb.svg b/public/emoji/1f91a-1f3fb.svg index d1a7ef589..646618e6e 100644 --- a/public/emoji/1f91a-1f3fb.svg +++ b/public/emoji/1f91a-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M26 4.965C26 3.604 24.896 2.5 23.535 2.5h-.07C22.104 2.5 21 3.604 21 4.965v-2.16C21 1.532 19.968.5 18.695.5h-.391C17.032.5 16 1.532 16 2.805V4c0-1.381-1.119-2.5-2.5-2.5S11 2.619 11 4v9.347c0-1.02-.827-1.847-1.846-1.847h-.308C7.827 11.5 7 12.327 7 13.347v9.807C7 24.173 7.827 25 8.846 25H9v1h2.15c.695 3.424 3.721 6 7.35 6 4.143 0 7.5-3.357 7.5-7.5v-6c0-.217-.015-.431-.032-.643.013-.107.032-.211.032-.322V4.965z"/><path fill="#F7DECE" d="M30 8s0-2-2-2-2 2-2 2v9.286c0-.147-1-.281-1-.398V4s0-2-2-2-2 2-2 2v12.122c0-.028-1-.052-1-.069V2s0-2-2-2-2 2-2 2v14.052c0 .017-1 .053-1 .082V3s0-2-2-2-2 2-2 2v18h-1v-8s0-2-2-2-2 2-2 2v11c0 6.627 5.373 12 12 12s12-5.373 12-12V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M15.5 2.965c1.381 0 2.5 1.119 2.5 2.5v.005L20.5.465c1.381 0 2.5 1.119 2.5 2.5V4.25l2.5-1.535c1.381 0 2.5 1.119 2.5 2.5V8.75L29 18H15.458L15.5 2.965z"/><path fill="#F7DECE" d="M4.625 16.219c1.381-.611 3.354.208 4.75 2.188.917 1.3 1.187 3.151 2.391 3.344.46.073 1.234-.313 1.234-1.397V4.5s0-2 2-2 2 2 2 2v11.633c0-.029 1-.064 1-.082V2s0-2 2-2 2 2 2 2v14.053c0 .017 1 .041 1 .069V4.25s0-2 2-2 2 2 2 2v12.638c0 .118 1 .251 1 .398V8.75s0-2 2-2 2 2 2 2V24c0 6.627-5.373 12-12 12-4.775 0-8.06-2.598-9.896-5.292C8.547 28.423 8.096 26.051 8 25.334c0 0-.123-1.479-1.156-2.865-1.469-1.969-2.5-3.156-3.125-3.866-.317-.359-.625-1.707.906-2.384z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f91a-1f3fc.svg b/public/emoji/1f91a-1f3fc.svg index ccc982e57..4b5f98392 100644 --- a/public/emoji/1f91a-1f3fc.svg +++ b/public/emoji/1f91a-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M26 4.965C26 3.604 24.896 2.5 23.535 2.5h-.07C22.104 2.5 21 3.604 21 4.965v-2.16C21 1.532 19.968.5 18.695.5h-.391C17.032.5 16 1.532 16 2.805V4c0-1.381-1.119-2.5-2.5-2.5S11 2.619 11 4v9.347c0-1.02-.827-1.847-1.846-1.847h-.308C7.827 11.5 7 12.327 7 13.347v9.807C7 24.173 7.827 25 8.846 25H9v1h2.15c.695 3.424 3.721 6 7.35 6 4.143 0 7.5-3.357 7.5-7.5v-6c0-.217-.015-.431-.032-.643.013-.107.032-.211.032-.322V4.965z"/><path fill="#F3D2A2" d="M30 8s0-2-2-2-2 2-2 2v9.286c-.319-.147-.651-.281-1-.398V4s0-2-2-2-2 2-2 2v12.122c-.328-.028-.661-.052-1-.069V2s0-2-2-2-2 2-2 2v14.052c-.342.017-.668.053-1 .082V3s0-2-2-2-2 2-2 2v18h-1v-8s0-2-2-2-2 2-2 2v11c0 6.627 5.373 12 12 12s12-5.373 12-12V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M15.5 2.965c1.381 0 2.5 1.119 2.5 2.5v.005L20.5.465c1.381 0 2.5 1.119 2.5 2.5V4.25l2.5-1.535c1.381 0 2.5 1.119 2.5 2.5V8.75L29 18H15.458L15.5 2.965z"/><path fill="#F3D2A2" d="M4.625 16.219c1.381-.611 3.354.208 4.75 2.188.917 1.3 1.187 3.151 2.391 3.344.46.073 1.234-.313 1.234-1.397V4.5s0-2 2-2 2 2 2 2v11.633c0-.029 1-.064 1-.082V2s0-2 2-2 2 2 2 2v14.053c0 .017 1 .041 1 .069V4.25s0-2 2-2 2 2 2 2v12.638c0 .118 1 .251 1 .398V8.75s0-2 2-2 2 2 2 2V24c0 6.627-5.373 12-12 12-4.775 0-8.06-2.598-9.896-5.292C8.547 28.423 8.096 26.051 8 25.334c0 0-.123-1.479-1.156-2.865-1.469-1.969-2.5-3.156-3.125-3.866-.317-.359-.625-1.707.906-2.384z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f91a-1f3fd.svg b/public/emoji/1f91a-1f3fd.svg index 50698f1cf..6d85626e0 100644 --- a/public/emoji/1f91a-1f3fd.svg +++ b/public/emoji/1f91a-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M26 4.965C26 3.604 24.896 2.5 23.535 2.5h-.07C22.104 2.5 21 3.604 21 4.965v-2.16C21 1.532 19.968.5 18.695.5h-.391C17.032.5 16 1.532 16 2.805V4c0-1.381-1.119-2.5-2.5-2.5S11 2.619 11 4v9.347c0-1.02-.827-1.847-1.846-1.847h-.308C7.827 11.5 7 12.327 7 13.347v9.807C7 24.173 7.827 25 8.846 25H9v1h2.15c.695 3.424 3.721 6 7.35 6 4.143 0 7.5-3.357 7.5-7.5v-6c0-.217-.015-.431-.032-.643.013-.107.032-.211.032-.322V4.965z"/><path fill="#D5AB88" d="M30 8s0-2-2-2-2 2-2 2v9.286c-.319-.147-.651-.281-1-.398V4s0-2-2-2-2 2-2 2v12.122c-.328-.028-.661-.052-1-.069V2s0-2-2-2-2 2-2 2v14.052c-.342.017-.668.053-1 .082V3s0-2-2-2-2 2-2 2v18h-1v-8s0-2-2-2-2 2-2 2v11c0 6.627 5.373 12 12 12s12-5.373 12-12V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M15.5 2.965c1.381 0 2.5 1.119 2.5 2.5v.005L20.5.465c1.381 0 2.5 1.119 2.5 2.5V4.25l2.5-1.535c1.381 0 2.5 1.119 2.5 2.5V8.75L29 18H15.458L15.5 2.965z"/><path fill="#D5AB88" d="M4.625 16.219c1.381-.611 3.354.208 4.75 2.188.917 1.3 1.187 3.151 2.391 3.344.46.073 1.234-.313 1.234-1.397V4.5s0-2 2-2 2 2 2 2v11.633c0-.029 1-.064 1-.082V2s0-2 2-2 2 2 2 2v14.053c0 .017 1 .041 1 .069V4.25s0-2 2-2 2 2 2 2v12.638c0 .118 1 .251 1 .398V8.75s0-2 2-2 2 2 2 2V24c0 6.627-5.373 12-12 12-4.775 0-8.06-2.598-9.896-5.292C8.547 28.423 8.096 26.051 8 25.334c0 0-.123-1.479-1.156-2.865-1.469-1.969-2.5-3.156-3.125-3.866-.317-.359-.625-1.707.906-2.384z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f91a-1f3fe.svg b/public/emoji/1f91a-1f3fe.svg index 13e2bd5c0..cc36a2487 100644 --- a/public/emoji/1f91a-1f3fe.svg +++ b/public/emoji/1f91a-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M26 4.965C26 3.604 24.896 2.5 23.535 2.5h-.07C22.104 2.5 21 3.604 21 4.965v-2.16C21 1.532 19.968.5 18.695.5h-.391C17.032.5 16 1.532 16 2.805V4c0-1.381-1.119-2.5-2.5-2.5S11 2.619 11 4v9.347c0-1.02-.827-1.847-1.846-1.847h-.308C7.827 11.5 7 12.327 7 13.347v9.807C7 24.173 7.827 25 8.846 25H9v1h2.15c.695 3.424 3.721 6 7.35 6 4.143 0 7.5-3.357 7.5-7.5v-6c0-.217-.015-.431-.032-.643.013-.107.032-.211.032-.322V4.965z"/><path fill="#AF7E57" d="M30 8s0-2-2-2-2 2-2 2v9.286c-.319-.147-.651-.281-1-.398V4s0-2-2-2-2 2-2 2v12.122c-.328-.028-.661-.052-1-.069V2s0-2-2-2-2 2-2 2v14.052c-.342.017-.668.053-1 .082V3s0-2-2-2-2 2-2 2v18h-1v-8s0-2-2-2-2 2-2 2v11c0 6.627 5.373 12 12 12s12-5.373 12-12V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M15.5 2.965c1.381 0 2.5 1.119 2.5 2.5v.005L20.5.465c1.381 0 2.5 1.119 2.5 2.5V4.25l2.5-1.535c1.381 0 2.5 1.119 2.5 2.5V8.75L29 18H15.458L15.5 2.965z"/><path fill="#AF7E57" d="M4.625 16.219c1.381-.611 3.354.208 4.75 2.188.917 1.3 1.187 3.151 2.391 3.344.46.073 1.234-.313 1.234-1.397V4.5s0-2 2-2 2 2 2 2v11.633c0-.029 1-.064 1-.082V2s0-2 2-2 2 2 2 2v14.053c0 .017 1 .041 1 .069V4.25s0-2 2-2 2 2 2 2v12.638c0 .118 1 .251 1 .398V8.75s0-2 2-2 2 2 2 2V24c0 6.627-5.373 12-12 12-4.775 0-8.06-2.598-9.896-5.292C8.547 28.423 8.096 26.051 8 25.334c0 0-.123-1.479-1.156-2.865-1.469-1.969-2.5-3.156-3.125-3.866-.317-.359-.625-1.707.906-2.384z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f91a-1f3ff.svg b/public/emoji/1f91a-1f3ff.svg index a47052cd0..1345e9719 100644 --- a/public/emoji/1f91a-1f3ff.svg +++ b/public/emoji/1f91a-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M26 4.965C26 3.604 24.896 2.5 23.535 2.5h-.07C22.104 2.5 21 3.604 21 4.965v-2.16C21 1.532 19.968.5 18.695.5h-.391C17.032.5 16 1.532 16 2.805V4c0-1.381-1.119-2.5-2.5-2.5S11 2.619 11 4v9.347c0-1.02-.827-1.847-1.846-1.847h-.308C7.827 11.5 7 12.327 7 13.347v9.807C7 24.173 7.827 25 8.846 25H9v1h2.15c.695 3.424 3.721 6 7.35 6 4.143 0 7.5-3.357 7.5-7.5v-6c0-.217-.015-.431-.032-.643.013-.107.032-.211.032-.322V4.965z"/><path fill="#7C533E" d="M30 8s0-2-2-2-2 2-2 2v9.286c-.319-.147-.651-.281-1-.398V4s0-2-2-2-2 2-2 2v12.122c-.328-.028-.661-.052-1-.069V2s0-2-2-2-2 2-2 2v14.052c-.342.017-.668.053-1 .082V3s0-2-2-2-2 2-2 2v18h-1v-8s0-2-2-2-2 2-2 2v11c0 6.627 5.373 12 12 12s12-5.373 12-12V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M15.5 2.965c1.381 0 2.5 1.119 2.5 2.5v.005L20.5.465c1.381 0 2.5 1.119 2.5 2.5V4.25l2.5-1.535c1.381 0 2.5 1.119 2.5 2.5V8.75L29 18H15.458L15.5 2.965z"/><path fill="#7C533E" d="M4.625 16.219c1.381-.611 3.354.208 4.75 2.188.917 1.3 1.187 3.151 2.391 3.344.46.073 1.234-.313 1.234-1.397V4.5s0-2 2-2 2 2 2 2v11.633c0-.029 1-.064 1-.082V2s0-2 2-2 2 2 2 2v14.053c0 .017 1 .041 1 .069V4.25s0-2 2-2 2 2 2 2v12.638c0 .118 1 .251 1 .398V8.75s0-2 2-2 2 2 2 2V24c0 6.627-5.373 12-12 12-4.775 0-8.06-2.598-9.896-5.292C8.547 28.423 8.096 26.051 8 25.334c0 0-.123-1.479-1.156-2.865-1.469-1.969-2.5-3.156-3.125-3.866-.317-.359-.625-1.707.906-2.384z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f91a.svg b/public/emoji/1f91a.svg index 48811d085..a3d2b1c9d 100644 --- a/public/emoji/1f91a.svg +++ b/public/emoji/1f91a.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M26 4.965C26 3.604 24.896 2.5 23.535 2.5h-.07C22.104 2.5 21 3.604 21 4.965v-2.16C21 1.532 19.968.5 18.695.5h-.391C17.032.5 16 1.532 16 2.805V4c0-1.381-1.119-2.5-2.5-2.5S11 2.619 11 4v9.347c0-1.02-.827-1.847-1.846-1.847h-.308C7.827 11.5 7 12.327 7 13.347v9.807C7 24.173 7.827 25 8.846 25H9v1h2.15c.695 3.424 3.721 6 7.35 6 4.143 0 7.5-3.357 7.5-7.5v-6c0-.217-.015-.431-.032-.643.013-.107.032-.211.032-.322V4.965z"/><path fill="#FFDC5D" d="M30 8s0-2-2-2-2 2-2 2v9.286c-.319-.147-.651-.281-1-.398V4s0-2-2-2-2 2-2 2v12.122c-.328-.028-.661-.052-1-.069V2s0-2-2-2-2 2-2 2v14.052c-.342.017-.668.053-1 .082V3s0-2-2-2-2 2-2 2v18h-1v-8s0-2-2-2-2 2-2 2v11c0 6.627 5.373 12 12 12s12-5.373 12-12V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M15.5 2.965c1.381 0 2.5 1.119 2.5 2.5v.005L20.5.465c1.381 0 2.5 1.119 2.5 2.5V4.25l2.5-1.535c1.381 0 2.5 1.119 2.5 2.5V8.75L29 18H15.458L15.5 2.965z"/><path fill="#FFDC5D" d="M4.625 16.219c1.381-.611 3.354.208 4.75 2.188.917 1.3 1.187 3.151 2.391 3.344.46.073 1.234-.313 1.234-1.397V4.5s0-2 2-2 2 2 2 2v11.633c0-.029 1-.064 1-.082V2s0-2 2-2 2 2 2 2v14.053c0 .017 1 .041 1 .069V4.25s0-2 2-2 2 2 2 2v12.638c0 .118 1 .251 1 .398V8.75s0-2 2-2 2 2 2 2V24c0 6.627-5.373 12-12 12-4.775 0-8.06-2.598-9.896-5.292C8.547 28.423 8.096 26.051 8 25.334c0 0-.123-1.479-1.156-2.865-1.469-1.969-2.5-3.156-3.125-3.866-.317-.359-.625-1.707.906-2.384z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f91e-1f3fb.svg b/public/emoji/1f91e-1f3fb.svg index 6e6cb494a..30a387d36 100644 --- a/public/emoji/1f91e-1f3fb.svg +++ b/public/emoji/1f91e-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M25.362 18.513l-.372-.521-.161-.132-4.001.016-4.098-11.92c-.613.525-.879 1.383-.586 2.187l1.721 4.727-.005.145 1.719 4.891-3.422-.016-.223.311c-.083.031-.62.313-.773.44l-.161.137s-1.125.534-1.125 2.407c.044.678.392 1.534.719 1.774-.359.572-.996.916-1.594.916-1.104 0-1.906-.771-1.906-1.875l.295-7.176c-.817.364-1.389 1.181-1.389 2.133v.96l-.109.005v4.161C9.734 24 7.916 23.906 7.916 23.906 6.857 23.906 6 23.142 6 22.083V24c0 .095.015.185.028.276.515.445 1.177.818 1.91.818 0 0 1.609.094 2.575-1.266.123.183 1.003 1.281 2.487 1.281 1.688 0 2.527-1.405 2.526-1.406.201.115.474.375 1.474.375h2.297c-2.031 1.734-2.875 4.528-2.875 6.922 0 .276.302.562.578.562s.578-.286.578-.562c0-2.548.899-4.642 2.299-5.891 1.139-1.016 2.623-1.031 2.623-1.031.276 0 .578-.302.578-.578 0-.276-.302-.578-.578-.578H17c-1.104 0-1.906-.817-1.906-1.922s.802-1.906 1.906-1.906l8-.016c.766 0 1.518.633 1.543.664-.286-.504-.689-.926-1.181-1.229zM20.333 5.365L20.96 4.2h.135l2.033 5.604-.001.293-.514 1.366h-.072l-2.208-5.994z"/><path fill="#F7DECE" d="M17 18c-.703 0-1.066.202-1.066.202l1.931-5.331L19.731 18H17zm-9.084-2h.168C9.143 16 10 16.858 10 17.917v4.166C10 23.142 9.143 24 8.084 24h-.168C6.857 24 6 23.142 6 22.083v-4.166C6 16.858 6.857 16 7.916 16zm6.918 2.96l-.056.062C14.304 19.551 14 20.233 14 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path fill="#F7DECE" d="M8.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.043-.039.071-.09.112-.13.152-.152.303-.305.419-.488l-.003-.003C15.727 23.713 16 24 17 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.063.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L28 24c.103.335.479 1.871.411 2.191C28.411 31 23.715 36 18 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM21.226 3.707c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L20.96 4.2l.266-.493zM25.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L20.733 18h4.268z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M26.362 18.513l-.372-.521-4.656-6.523 2.28-.006.514-1.366V4.2H21.96l-.628 1.165-3.602.591c-.613.525-.879 1.383-.586 2.187l1.721 4.727v2.882l-1.93 2.449c-.083.031-.62.313-.773.44l-.162.137-3.611-3.954c-.817.364-1.389 1.181-1.389 2.133v.96l-4 4.166.016 2.188L17 35s10.518-15.288 10.543-15.258c-.286-.504-.689-.926-1.181-1.229z"/><g fill="#F7DECE"><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM18 18c-.703 0-1.066.202-1.066.202l1.931-5.331L20.731 18H18z"/><path d="M8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182zm6.392-15.253c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L21.96 4.2l.266-.493zM26.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L21.733 18h4.268z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f91e-1f3fc.svg b/public/emoji/1f91e-1f3fc.svg index c3b5182b4..ec2fa5086 100644 --- a/public/emoji/1f91e-1f3fc.svg +++ b/public/emoji/1f91e-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M25.362 18.513l-.372-.521-.161-.132-4.001.016-4.098-11.92c-.613.525-.879 1.383-.586 2.187l1.721 4.727-.005.145 1.719 4.891-3.422-.016-.223.311c-.083.031-.62.313-.773.44l-.161.137s-1.125.534-1.125 2.407c.044.678.392 1.534.719 1.774-.359.572-.996.916-1.594.916-1.104 0-1.906-.771-1.906-1.875l.295-7.176c-.817.364-1.389 1.181-1.389 2.133v.96l-.109.005v4.161C9.734 24 7.916 23.906 7.916 23.906 6.857 23.906 6 23.142 6 22.083V24c0 .095.015.185.028.276.515.445 1.177.818 1.91.818 0 0 1.609.094 2.575-1.266.123.183 1.003 1.281 2.487 1.281 1.688 0 2.527-1.405 2.526-1.406.201.115.474.375 1.474.375h2.297c-2.031 1.734-2.875 4.528-2.875 6.922 0 .276.302.562.578.562s.578-.286.578-.562c0-2.548.899-4.642 2.299-5.891 1.139-1.016 2.623-1.031 2.623-1.031.276 0 .578-.302.578-.578 0-.276-.302-.578-.578-.578H17c-1.104 0-1.906-.817-1.906-1.922s.802-1.906 1.906-1.906l8-.016c.766 0 1.518.633 1.543.664-.286-.504-.689-.926-1.181-1.229zM20.333 5.365L20.96 4.2h.135l2.033 5.604-.001.293-.514 1.366h-.072l-2.208-5.994z"/><path fill="#F3D2A2" d="M17 18c-.703 0-1.066.202-1.066.202l1.931-5.331L19.731 18H17zm-9.084-2h.168C9.143 16 10 16.858 10 17.917v4.166C10 23.142 9.143 24 8.084 24h-.168C6.857 24 6 23.142 6 22.083v-4.166C6 16.858 6.857 16 7.916 16zm6.918 2.96l-.056.062C14.304 19.551 14 20.233 14 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path fill="#F3D2A2" d="M8.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.043-.039.071-.09.112-.13.152-.152.303-.305.419-.488l-.003-.003C15.727 23.713 16 24 17 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.063.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L28 24c.103.335.479 1.871.411 2.191C28.411 31 23.715 36 18 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM21.226 3.707c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L20.96 4.2l.266-.493zM25.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L20.733 18h4.268z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M26.362 18.513l-.372-.521-4.656-6.523 2.28-.006.514-1.366V4.2H21.96l-.628 1.165-3.602.591c-.613.525-.879 1.383-.586 2.187l1.721 4.727v2.882l-1.93 2.449c-.083.031-.62.313-.773.44l-.162.137-3.611-3.954c-.817.364-1.389 1.181-1.389 2.133v.96l-4 4.166.016 2.188L17 35s10.518-15.288 10.543-15.258c-.286-.504-.689-.926-1.181-1.229z"/><g fill="#F3D2A2"><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM18 18c-.703 0-1.066.202-1.066.202l1.931-5.331L20.731 18H18z"/><path d="M8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182zm6.392-15.253c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L21.96 4.2l.266-.493zM26.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L21.733 18h4.268z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f91e-1f3fd.svg b/public/emoji/1f91e-1f3fd.svg index f7f0b9ba4..b17f2690b 100644 --- a/public/emoji/1f91e-1f3fd.svg +++ b/public/emoji/1f91e-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M25.362 18.513l-.372-.521-.161-.132-4.001.016-4.098-11.92c-.613.525-.879 1.383-.586 2.187l1.721 4.727-.005.145 1.719 4.891-3.422-.016-.223.311c-.083.031-.62.313-.773.44l-.161.137s-1.125.534-1.125 2.407c.044.678.392 1.534.719 1.774-.359.572-.996.916-1.594.916-1.104 0-1.906-.771-1.906-1.875l.295-7.176c-.817.364-1.389 1.181-1.389 2.133v.96l-.109.005v4.161C9.734 24 7.916 23.906 7.916 23.906 6.857 23.906 6 23.142 6 22.083V24c0 .095.015.185.028.276.515.445 1.177.818 1.91.818 0 0 1.609.094 2.575-1.266.123.183 1.003 1.281 2.487 1.281 1.688 0 2.527-1.405 2.526-1.406.201.115.474.375 1.474.375h2.297c-2.031 1.734-2.875 4.528-2.875 6.922 0 .276.302.562.578.562s.578-.286.578-.562c0-2.548.899-4.642 2.299-5.891 1.139-1.016 2.623-1.031 2.623-1.031.276 0 .578-.302.578-.578 0-.276-.302-.578-.578-.578H17c-1.104 0-1.906-.817-1.906-1.922s.802-1.906 1.906-1.906l8-.016c.766 0 1.518.633 1.543.664-.286-.504-.689-.926-1.181-1.229zM20.333 5.365L20.96 4.2h.135l2.033 5.604-.001.293-.514 1.366h-.072l-2.208-5.994z"/><path fill="#D5AB88" d="M17 18c-.703 0-1.066.202-1.066.202l1.931-5.331L19.731 18H17zm-9.084-2h.168C9.143 16 10 16.858 10 17.917v4.166C10 23.142 9.143 24 8.084 24h-.168C6.857 24 6 23.142 6 22.083v-4.166C6 16.858 6.857 16 7.916 16zm6.918 2.96l-.056.062C14.304 19.551 14 20.233 14 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path fill="#D5AB88" d="M8.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.043-.039.071-.09.112-.13.152-.152.303-.305.419-.488l-.003-.003C15.727 23.713 16 24 17 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.063.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L28 24c.103.335.479 1.871.411 2.191C28.411 31 23.715 36 18 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM21.226 3.707c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L20.96 4.2l.266-.493zM25.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L20.733 18h4.268z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M26.362 18.513l-.372-.521-4.656-6.523 2.28-.006.514-1.366V4.2H21.96l-.628 1.165-3.602.591c-.613.525-.879 1.383-.586 2.187l1.721 4.727v2.882l-1.93 2.449c-.083.031-.62.313-.773.44l-.162.137-3.611-3.954c-.817.364-1.389 1.181-1.389 2.133v.96l-4 4.166.016 2.188L17 35s10.518-15.288 10.543-15.258c-.286-.504-.689-.926-1.181-1.229z"/><g fill="#D4AB88"><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM18 18c-.703 0-1.066.202-1.066.202l1.931-5.331L20.731 18H18z"/><path d="M8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182zm6.392-15.253c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L21.96 4.2l.266-.493zM26.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L21.733 18h4.268z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f91e-1f3fe.svg b/public/emoji/1f91e-1f3fe.svg index c1f22530b..28cbb7885 100644 --- a/public/emoji/1f91e-1f3fe.svg +++ b/public/emoji/1f91e-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M25.362 18.513l-.372-.521-.161-.132-4.001.016-4.098-11.92c-.613.525-.879 1.383-.586 2.187l1.721 4.727-.005.145 1.719 4.891-3.422-.016-.223.311c-.083.031-.62.313-.773.44l-.161.137s-1.125.534-1.125 2.407c.044.678.392 1.534.719 1.774-.359.572-.996.916-1.594.916-1.104 0-1.906-.771-1.906-1.875l.295-7.176c-.817.364-1.389 1.181-1.389 2.133v.96l-.109.005v4.161C9.734 24 7.916 23.906 7.916 23.906 6.857 23.906 6 23.142 6 22.083V24c0 .095.015.185.028.276.515.445 1.177.818 1.91.818 0 0 1.609.094 2.575-1.266.123.183 1.003 1.281 2.487 1.281 1.688 0 2.527-1.405 2.526-1.406.201.115.474.375 1.474.375h2.297c-2.031 1.734-2.875 4.528-2.875 6.922 0 .276.302.562.578.562s.578-.286.578-.562c0-2.548.899-4.642 2.299-5.891 1.139-1.016 2.623-1.031 2.623-1.031.276 0 .578-.302.578-.578 0-.276-.302-.578-.578-.578H17c-1.104 0-1.906-.817-1.906-1.922s.802-1.906 1.906-1.906l8-.016c.766 0 1.518.633 1.543.664-.286-.504-.689-.926-1.181-1.229zM20.333 5.365L20.96 4.2h.135l2.033 5.604-.001.293-.514 1.366h-.072l-2.208-5.994z"/><path fill="#AF7E57" d="M17 18c-.703 0-1.066.202-1.066.202l1.931-5.331L19.731 18H17zm-9.084-2h.168C9.143 16 10 16.858 10 17.917v4.166C10 23.142 9.143 24 8.084 24h-.168C6.857 24 6 23.142 6 22.083v-4.166C6 16.858 6.857 16 7.916 16zm6.918 2.96l-.056.062C14.304 19.551 14 20.233 14 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path fill="#AF7E57" d="M8.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.043-.039.071-.09.112-.13.152-.152.303-.305.419-.488l-.003-.003C15.727 23.713 16 24 17 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.063.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L28 24c.103.335.479 1.871.411 2.191C28.411 31 23.715 36 18 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM21.226 3.707c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L20.96 4.2l.266-.493zM25.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L20.733 18h4.268z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M26.362 18.513l-.372-.521-4.656-6.523 2.28-.006.514-1.366V4.2H21.96l-.628 1.165-3.602.591c-.613.525-.879 1.383-.586 2.187l1.721 4.727v2.882l-1.93 2.449c-.083.031-.62.313-.773.44l-.162.137-3.611-3.954c-.817.364-1.389 1.181-1.389 2.133v.96l-4 4.166.016 2.188L17 35s10.518-15.288 10.543-15.258c-.286-.504-.689-.926-1.181-1.229z"/><g fill="#AF7E57"><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM18 18c-.703 0-1.066.202-1.066.202l1.931-5.331L20.731 18H18z"/><path d="M8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182zm6.392-15.253c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L21.96 4.2l.266-.493zM26.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L21.733 18h4.268z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f91e-1f3ff.svg b/public/emoji/1f91e-1f3ff.svg index 82a18b3c9..86e91b2a9 100644 --- a/public/emoji/1f91e-1f3ff.svg +++ b/public/emoji/1f91e-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M25.362 18.513l-.372-.521-.161-.132-4.001.016-4.098-11.92c-.613.525-.879 1.383-.586 2.187l1.721 4.727-.005.145 1.719 4.891-3.422-.016-.223.311c-.083.031-.62.313-.773.44l-.161.137s-1.125.534-1.125 2.407c.044.678.392 1.534.719 1.774-.359.572-.996.916-1.594.916-1.104 0-1.906-.771-1.906-1.875l.295-7.176c-.817.364-1.389 1.181-1.389 2.133v.96l-.109.005v4.161C9.734 24 7.916 23.906 7.916 23.906 6.857 23.906 6 23.142 6 22.083V24c0 .095.015.185.028.276.515.445 1.177.818 1.91.818 0 0 1.609.094 2.575-1.266.123.183 1.003 1.281 2.487 1.281 1.688 0 2.527-1.405 2.526-1.406.201.115.474.375 1.474.375h2.297c-2.031 1.734-2.875 4.528-2.875 6.922 0 .276.302.562.578.562s.578-.286.578-.562c0-2.548.899-4.642 2.299-5.891 1.139-1.016 2.623-1.031 2.623-1.031.276 0 .578-.302.578-.578 0-.276-.302-.578-.578-.578H17c-1.104 0-1.906-.817-1.906-1.922s.802-1.906 1.906-1.906l8-.016c.766 0 1.518.633 1.543.664-.286-.504-.689-.926-1.181-1.229zM20.333 5.365L20.96 4.2h.135l2.033 5.604-.001.293-.514 1.366h-.072l-2.208-5.994z"/><path fill="#7C533E" d="M17 18c-.703 0-1.066.202-1.066.202l1.931-5.331L19.731 18H17zm-9.084-2h.168C9.143 16 10 16.858 10 17.917v4.166C10 23.142 9.143 24 8.084 24h-.168C6.857 24 6 23.142 6 22.083v-4.166C6 16.858 6.857 16 7.916 16zm6.918 2.96l-.056.062C14.304 19.551 14 20.233 14 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path fill="#7C533E" d="M8.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.043-.039.071-.09.112-.13.152-.152.303-.305.419-.488l-.003-.003C15.727 23.713 16 24 17 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.063.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L28 24c.103.335.479 1.871.411 2.191C28.411 31 23.715 36 18 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM21.226 3.707c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L20.96 4.2l.266-.493zM25.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L20.733 18h4.268z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M26.362 18.513l-.372-.521-4.656-6.523 2.28-.006.514-1.366V4.2H21.96l-.628 1.165-3.602.591c-.613.525-.879 1.383-.586 2.187l1.721 4.727v2.882l-1.93 2.449c-.083.031-.62.313-.773.44l-.162.137-3.611-3.954c-.817.364-1.389 1.181-1.389 2.133v.96l-4 4.166.016 2.188L17 35s10.518-15.288 10.543-15.258c-.286-.504-.689-.926-1.181-1.229z"/><g fill="#7C533E"><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM18 18c-.703 0-1.066.202-1.066.202l1.931-5.331L20.731 18H18z"/><path d="M8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182zm6.392-15.253c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L21.96 4.2l.266-.493zM26.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L21.733 18h4.268z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f91e.svg b/public/emoji/1f91e.svg index 6bcd3a2e7..f85ba6525 100644 --- a/public/emoji/1f91e.svg +++ b/public/emoji/1f91e.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M25.362 18.513l-.372-.521-.161-.132-4.001.016-4.098-11.92c-.613.525-.879 1.383-.586 2.187l1.721 4.727-.005.145 1.719 4.891-3.422-.016-.223.311c-.083.031-.62.313-.773.44l-.161.137s-1.125.534-1.125 2.407c.044.678.392 1.534.719 1.774-.359.572-.996.916-1.594.916-1.104 0-1.906-.771-1.906-1.875l.295-7.176c-.817.364-1.389 1.181-1.389 2.133v.96l-.109.005v4.161C9.734 24 7.916 23.906 7.916 23.906 6.857 23.906 6 23.142 6 22.083V24c0 .095.015.185.028.276.515.445 1.177.818 1.91.818 0 0 1.609.094 2.575-1.266.123.183 1.003 1.281 2.487 1.281 1.688 0 2.527-1.405 2.526-1.406.201.115.474.375 1.474.375h2.297c-2.031 1.734-2.875 4.528-2.875 6.922 0 .276.302.562.578.562s.578-.286.578-.562c0-2.548.899-4.642 2.299-5.891 1.139-1.016 2.623-1.031 2.623-1.031.276 0 .578-.302.578-.578 0-.276-.302-.578-.578-.578H17c-1.104 0-1.906-.817-1.906-1.922s.802-1.906 1.906-1.906l8-.016c.766 0 1.518.633 1.543.664-.286-.504-.689-.926-1.181-1.229zM20.333 5.365L20.96 4.2h.135l2.033 5.604-.001.293-.514 1.366h-.072l-2.208-5.994z"/><path fill="#FFDC5D" d="M17 18c-.703 0-1.066.202-1.066.202l1.931-5.331L19.731 18H17zm-9.084-2h.168C9.143 16 10 16.858 10 17.917v4.166C10 23.142 9.143 24 8.084 24h-.168C6.857 24 6 23.142 6 22.083v-4.166C6 16.858 6.857 16 7.916 16zm6.918 2.96l-.056.062C14.304 19.551 14 20.233 14 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path fill="#FFDC5D" d="M8.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.043-.039.071-.09.112-.13.152-.152.303-.305.419-.488l-.003-.003C15.727 23.713 16 24 17 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H17c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.063.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L28 24c.103.335.479 1.871.411 2.191C28.411 31 23.715 36 18 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM21.226 3.707c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L20.96 4.2l.266-.493zM25.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L20.733 18h4.268z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M26.362 18.513l-.372-.521-4.656-6.523 2.28-.006.514-1.366V4.2H21.96l-.628 1.165-3.602.591c-.613.525-.879 1.383-.586 2.187l1.721 4.727v2.882l-1.93 2.449c-.083.031-.62.313-.773.44l-.162.137-3.611-3.954c-.817.364-1.389 1.181-1.389 2.133v.96l-4 4.166.016 2.188L17 35s10.518-15.288 10.543-15.258c-.286-.504-.689-.926-1.181-1.229z"/><g fill="#FFDC5D"><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124zM18 18c-.703 0-1.066.202-1.066.202l1.931-5.331L20.731 18H18z"/><path d="M8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182zm6.392-15.253c.445-.903 1.501-1.35 2.468-.998 1.038.377 1.573 1.525 1.195 2.563l-1.761 4.821-.001.003L21.96 4.2l.266-.493zM26.001 18l-2.388-6.537-2.07-5.688c-.054-.149-.128-.283-.211-.41-.497-.759-1.464-1.109-2.353-.785-.642.234-1.089.762-1.25 1.376-.099.379-.09.791.055 1.187L21.733 18h4.268z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f934-1f3fb.svg b/public/emoji/1f934-1f3fb.svg index f8768989f..eaa8fb273 100644 --- a/public/emoji/1f934-1f3fb.svg +++ b/public/emoji/1f934-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#662113"/><path d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z" fill="#C1694F"/><path fill="#292F33" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><g fill="#99AAB5"><path d="M28.55 8.4L25.875 3l-2.429 4.189L17.969.5l-5.493 6.689L9.992 3 6.946 8.4 5.5 6.25V9.5h25V6.25z"/><path d="M30.5 10h-25c-.276 0-.5-.224-.5-.5V6.25c0-.22.144-.414.354-.478.21-.067.438.017.561.199l.994 1.478 2.648-4.694c.088-.156.251-.253.43-.255.195.019.344.092.436.245l2.12 3.576L17.584.183c.093-.116.235-.183.385-.183.149 0 .292.067.386.183l5.021 6.131 2.066-3.565c.093-.16.254-.262.449-.249.184.006.35.112.432.277l2.349 4.743 1.458-1.606c.139-.153.357-.206.55-.13.193.074.32.259.32.466V9.5c0 .276-.224.5-.5.5zM6 9h24V7.545l-1.08 1.19c-.11.123-.27.186-.439.159-.163-.023-.306-.125-.379-.273l-2.261-4.565-1.962 3.384c-.082.142-.229.234-.393.248-.165.012-.322-.055-.426-.182l-5.091-6.218-5.106 6.218c-.103.126-.264.193-.424.181-.163-.012-.309-.104-.392-.244l-2.042-3.446-2.623 4.649c-.086.15-.243.247-.416.253-.175.013-.337-.077-.435-.22L6 7.889V9z"/></g><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#662113"/><path fill="#C1694F" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#292F33" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><path fill="#99AAB5" d="M30.68 5.784c-.192-.075-.411-.022-.55.13L28.672 7.52l-2.349-4.743c-.082-.165-.248-.271-.432-.277-.195-.013-.356.089-.449.249l-2.066 3.565L18.355.183C18.261.067 18.119 0 17.969 0c-.149 0-.292.067-.386.183l-5.041 6.138-2.12-3.576c-.091-.153-.24-.227-.436-.245-.179.002-.342.099-.43.254L6.909 7.449l-.994-1.478c-.123-.182-.351-.266-.561-.199-.21.064-.354.258-.354.478V9.5c0 .276.224.5.5.5h25c.276 0 .5-.224.5-.5V6.25c0-.207-.127-.392-.32-.466z"/><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f934-1f3fc.svg b/public/emoji/1f934-1f3fc.svg index afd0d5036..5feff0ac7 100644 --- a/public/emoji/1f934-1f3fc.svg +++ b/public/emoji/1f934-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#662113"/><path fill="#C1694F" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#FFE51E" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><g fill="#99AAB5"><path d="M28.55 8.4L25.875 3l-2.429 4.189L17.969.5l-5.493 6.689L9.992 3 6.946 8.4 5.5 6.25V9.5h25V6.25z"/><path d="M30.5 10h-25c-.276 0-.5-.224-.5-.5V6.25c0-.22.144-.414.354-.478.21-.067.438.017.561.199l.994 1.478 2.648-4.694c.088-.156.251-.253.43-.255.195.019.344.092.436.245l2.12 3.576L17.584.183c.093-.116.235-.183.385-.183.149 0 .292.067.386.183l5.021 6.131 2.066-3.565c.093-.16.254-.262.449-.249.184.006.35.112.432.277l2.349 4.743 1.458-1.606c.139-.153.357-.206.55-.13.193.074.32.259.32.466V9.5c0 .276-.224.5-.5.5zM6 9h24V7.545l-1.08 1.19c-.11.123-.27.186-.439.159-.163-.023-.306-.125-.379-.273l-2.261-4.565-1.962 3.384c-.082.142-.229.234-.393.248-.165.012-.322-.055-.426-.182l-5.091-6.218-5.106 6.218c-.103.126-.264.193-.424.181-.163-.012-.309-.104-.392-.244l-2.042-3.446-2.623 4.649c-.086.15-.243.247-.416.253-.175.013-.337-.077-.435-.22L6 7.889V9z"/></g><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#662113"/><path fill="#C1694F" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#FFE51E" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><path fill="#99AAB5" d="M30.68 5.784c-.192-.075-.411-.022-.55.13L28.672 7.52l-2.349-4.743c-.082-.165-.248-.271-.432-.277-.195-.013-.356.089-.449.249l-2.066 3.565L18.355.183C18.261.067 18.119 0 17.969 0c-.149 0-.292.067-.386.183l-5.041 6.138-2.12-3.576c-.091-.153-.24-.227-.436-.245-.179.002-.342.099-.43.254L6.909 7.449l-.994-1.478c-.123-.182-.351-.266-.561-.199-.21.064-.354.258-.354.478V9.5c0 .276.224.5.5.5h25c.276 0 .5-.224.5-.5V6.25c0-.207-.127-.392-.32-.466z"/><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f934-1f3fd.svg b/public/emoji/1f934-1f3fd.svg index cc0c79762..04db0c91e 100644 --- a/public/emoji/1f934-1f3fd.svg +++ b/public/emoji/1f934-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#662113"/><path fill="#C1694F" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#963B22" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><g fill="#99AAB5"><path d="M28.55 8.4L25.875 3l-2.429 4.189L17.969.5l-5.493 6.689L9.992 3 6.946 8.4 5.5 6.25V9.5h25V6.25z"/><path d="M30.5 10h-25c-.276 0-.5-.224-.5-.5V6.25c0-.22.144-.414.354-.478.21-.067.438.017.561.199l.994 1.478 2.648-4.694c.088-.156.251-.253.43-.255.195.019.344.092.436.245l2.12 3.576L17.584.183c.093-.116.235-.183.385-.183.149 0 .292.067.386.183l5.021 6.131 2.066-3.565c.093-.16.254-.262.449-.249.184.006.35.112.432.277l2.349 4.743 1.458-1.606c.139-.153.357-.206.55-.13.193.074.32.259.32.466V9.5c0 .276-.224.5-.5.5zM6 9h24V7.545l-1.08 1.19c-.11.123-.27.186-.439.159-.163-.023-.306-.125-.379-.273l-2.261-4.565-1.962 3.384c-.082.142-.229.234-.393.248-.165.012-.322-.055-.426-.182l-5.091-6.218-5.106 6.218c-.103.126-.264.193-.424.181-.163-.012-.309-.104-.392-.244l-2.042-3.446-2.623 4.649c-.086.15-.243.247-.416.253-.175.013-.337-.077-.435-.22L6 7.889V9z"/></g><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#662113"/><path fill="#C1694F" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#963B22" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><path fill="#99AAB5" d="M30.68 5.784c-.192-.075-.411-.022-.55.13L28.672 7.52l-2.349-4.743c-.082-.165-.248-.271-.432-.277-.195-.013-.356.089-.449.249l-2.066 3.565L18.355.183C18.261.067 18.119 0 17.969 0c-.149 0-.292.067-.386.183l-5.041 6.138-2.12-3.576c-.091-.153-.24-.227-.436-.245-.179.002-.342.099-.43.254L6.909 7.449l-.994-1.478c-.123-.182-.351-.266-.561-.199-.21.064-.354.258-.354.478V9.5c0 .276.224.5.5.5h25c.276 0 .5-.224.5-.5V6.25c0-.207-.127-.392-.32-.466z"/><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f934-1f3fe.svg b/public/emoji/1f934-1f3fe.svg index c7e8eee83..a26398fa9 100644 --- a/public/emoji/1f934-1f3fe.svg +++ b/public/emoji/1f934-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#60352A"/><path fill="#915A34" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#60352A" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><g fill="#99AAB5"><path d="M28.55 8.4L25.875 3l-2.429 4.189L17.969.5l-5.493 6.689L9.992 3 6.946 8.4 5.5 6.25V9.5h25V6.25z"/><path d="M30.5 10h-25c-.276 0-.5-.224-.5-.5V6.25c0-.22.144-.414.354-.478.21-.067.438.017.561.199l.994 1.478 2.648-4.694c.088-.156.251-.253.43-.255.195.019.344.092.436.245l2.12 3.576L17.584.183c.093-.116.235-.183.385-.183.149 0 .292.067.386.183l5.021 6.131 2.066-3.565c.093-.16.254-.262.449-.249.184.006.35.112.432.277l2.349 4.743 1.458-1.606c.139-.153.357-.206.55-.13.193.074.32.259.32.466V9.5c0 .276-.224.5-.5.5zM6 9h24V7.545l-1.08 1.19c-.11.123-.27.186-.439.159-.163-.023-.306-.125-.379-.273l-2.261-4.565-1.962 3.384c-.082.142-.229.234-.393.248-.165.012-.322-.055-.426-.182l-5.091-6.218-5.106 6.218c-.103.126-.264.193-.424.181-.163-.012-.309-.104-.392-.244l-2.042-3.446-2.623 4.649c-.086.15-.243.247-.416.253-.175.013-.337-.077-.435-.22L6 7.889V9z"/></g><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#60352A"/><path fill="#915A34" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#60352A" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><path fill="#99AAB5" d="M30.68 5.784c-.192-.075-.411-.022-.55.13L28.672 7.52l-2.349-4.743c-.082-.165-.248-.271-.432-.277-.195-.013-.356.089-.449.249l-2.066 3.565L18.355.183C18.261.067 18.119 0 17.969 0c-.149 0-.292.067-.386.183l-5.041 6.138-2.12-3.576c-.091-.153-.24-.227-.436-.245-.179.002-.342.099-.43.254L6.909 7.449l-.994-1.478c-.123-.182-.351-.266-.561-.199-.21.064-.354.258-.354.478V9.5c0 .276.224.5.5.5h25c.276 0 .5-.224.5-.5V6.25c0-.207-.127-.392-.32-.466z"/><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f934-1f3ff.svg b/public/emoji/1f934-1f3ff.svg index 0cb9a1b7e..ad40c9d54 100644 --- a/public/emoji/1f934-1f3ff.svg +++ b/public/emoji/1f934-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z"/><path fill="#3D2E24" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#0B0200" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><g fill="#99AAB5"><path d="M28.55 8.4L25.875 3l-2.429 4.189L17.969.5l-5.493 6.689L9.992 3 6.946 8.4 5.5 6.25V9.5h25V6.25z"/><path d="M30.5 10h-25c-.276 0-.5-.224-.5-.5V6.25c0-.22.144-.414.354-.478.21-.067.438.017.561.199l.994 1.478 2.648-4.694c.088-.156.251-.253.43-.255.195.019.344.092.436.245l2.12 3.576L17.584.183c.093-.116.235-.183.385-.183.149 0 .292.067.386.183l5.021 6.131 2.066-3.565c.093-.16.254-.262.449-.249.184.006.35.112.432.277l2.349 4.743 1.458-1.606c.139-.153.357-.206.55-.13.193.074.32.259.32.466V9.5c0 .276-.224.5-.5.5zM6 9h24V7.545l-1.08 1.19c-.11.123-.27.186-.439.159-.163-.023-.306-.125-.379-.273l-2.261-4.565-1.962 3.384c-.082.142-.229.234-.393.248-.165.012-.322-.055-.426-.182l-5.091-6.218-5.106 6.218c-.103.126-.264.193-.424.181-.163-.012-.309-.104-.392-.244l-2.042-3.446-2.623 4.649c-.086.15-.243.247-.416.253-.175.013-.337-.077-.435-.22L6 7.889V9z"/></g><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z"/><path fill="#3D2E24" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#0B0200" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><path fill="#99AAB5" d="M30.68 5.784c-.192-.075-.411-.022-.55.13L28.672 7.52l-2.349-4.743c-.082-.165-.248-.271-.432-.277-.195-.013-.356.089-.449.249l-2.066 3.565L18.355.183C18.261.067 18.119 0 17.969 0c-.149 0-.292.067-.386.183l-5.041 6.138-2.12-3.576c-.091-.153-.24-.227-.436-.245-.179.002-.342.099-.43.254L6.909 7.449l-.994-1.478c-.123-.182-.351-.266-.561-.199-.21.064-.354.258-.354.478V9.5c0 .276.224.5.5.5h25c.276 0 .5-.224.5-.5V6.25c0-.207-.127-.392-.32-.466z"/><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f934.svg b/public/emoji/1f934.svg index 11775b66e..666ac38c2 100644 --- a/public/emoji/1f934.svg +++ b/public/emoji/1f934.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#662113"/><path fill="#C1694F" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#FFAC33" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><g fill="#99AAB5"><path d="M28.55 8.4L25.875 3l-2.429 4.189L17.969.5l-5.493 6.689L9.992 3 6.946 8.4 5.5 6.25V9.5h25V6.25z"/><path d="M30.5 10h-25c-.276 0-.5-.224-.5-.5V6.25c0-.22.144-.414.354-.478.21-.067.438.017.561.199l.994 1.478 2.648-4.694c.088-.156.251-.253.43-.255.195.019.344.092.436.245l2.12 3.576L17.584.183c.093-.116.235-.183.385-.183.149 0 .292.067.386.183l5.021 6.131 2.066-3.565c.093-.16.254-.262.449-.249.184.006.35.112.432.277l2.349 4.743 1.458-1.606c.139-.153.357-.206.55-.13.193.074.32.259.32.466V9.5c0 .276-.224.5-.5.5zM6 9h24V7.545l-1.08 1.19c-.11.123-.27.186-.439.159-.163-.023-.306-.125-.379-.273l-2.261-4.565-1.962 3.384c-.082.142-.229.234-.393.248-.165.012-.322-.055-.426-.182l-5.091-6.218-5.106 6.218c-.103.126-.264.193-.424.181-.163-.012-.309-.104-.392-.244l-2.042-3.446-2.623 4.649c-.086.15-.243.247-.416.253-.175.013-.337-.077-.435-.22L6 7.889V9z"/></g><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M32 20c0-2.209-1.119-4-2.5-4-.012 0-.021.005-.033.005C27.955 9.704 23.394 5.125 18 5.125s-9.956 4.58-11.467 10.88C6.521 16.004 6.511 16 6.5 16 5.119 16 4 17.791 4 20c0 2.107 1.021 3.815 2.314 3.97C7.537 30.619 12.299 35 18 35c5.7 0 10.463-4.381 11.685-11.03C30.979 23.815 32 22.107 32 20z"/><path d="M13 21c-.552 0-1-.447-1-1v-2c0-.552.448-1 1-1s1 .448 1 1v2c0 .553-.448 1-1 1zm10 0c-.553 0-1-.447-1-1v-2c0-.552.447-1 1-1s1 .448 1 1v2c0 .553-.447 1-1 1z" fill="#662113"/><path fill="#C1694F" d="M18 31c-4.201 0-5.491-1.077-5.707-1.293-.391-.391-.391-1.023 0-1.414.378-.379.984-.39 1.376-.036.08.058 1.1.743 4.331.743 3.355 0 4.326-.739 4.336-.747.39-.389 1.001-.37 1.393.021.391.391.369 1.043-.021 1.434C23.491 29.923 22.201 31 18 31zm1-5h-2c-.552 0-1-.447-1-1s.448-1 1-1h2c.553 0 1 .447 1 1s-.447 1-1 1z"/><path fill="#FFAC33" d="M18 1c8 0 13 6 13 11s-1 7-2 5l-2-4s-6 0-8-2c0 0 3 6-3 0 0 0 1 4-5-1 0 0-3 2-4 7-.277 1.387-2 0-2-5S9 1 18 1z"/><path fill="#99AAB5" d="M30.68 5.784c-.192-.075-.411-.022-.55.13L28.672 7.52l-2.349-4.743c-.082-.165-.248-.271-.432-.277-.195-.013-.356.089-.449.249l-2.066 3.565L18.355.183C18.261.067 18.119 0 17.969 0c-.149 0-.292.067-.386.183l-5.041 6.138-2.12-3.576c-.091-.153-.24-.227-.436-.245-.179.002-.342.099-.43.254L6.909 7.449l-.994-1.478c-.123-.182-.351-.266-.561-.199-.21.064-.354.258-.354.478V9.5c0 .276.224.5.5.5h25c.276 0 .5-.224.5-.5V6.25c0-.207-.127-.392-.32-.466z"/><path fill="#E1E8ED" d="M18 3l-2 2v2l2 2 2-2V5zm-7 3l-1 1.415L9 6l1-1.414zm16 0l-1 1.415L25 6l1-1.414z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f935-1f3fb-200d-2640-fe0f.svg index 9f30726ca..d0e7ba4e3 100644 --- a/public/emoji/1f935-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f935-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#F6DDCD" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#ECC0AC" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><path fill="#66757F" d="M23.684 36l-1.172-1.918 3.223-.886L23.156 26l-3.011 10zm-11.368 0l1.172-1.918-3.223-.886L12.844 26l3.011 10z"/><path fill="#292F33" d="M18.635 30.796c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm0 2.6c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm-.636 1.965c-.351 0-.636.285-.636.636h1.273c-.001-.352-.285-.636-.637-.636z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#F6DDCD" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DE2032" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#C1694F" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662213" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#292F33" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#F6DDCD" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#F7DECE" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#EEC2AD" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#546170" d="M13.95 29.603l-3.863-.825L11.808 26l2.142.003z"/><path fill="#66757F" d="M16.078 36h-2.406l-4.485-7.9 2.621.831 1.571-1.983z"/><path fill="#546170" d="M22.05 29.603l3.863-.825L24.192 26l-2.141.003z"/><path fill="#66757F" d="M19.922 36h2.406l4.485-7.9-2.621.831-1.57-1.983z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><circle fill="#292F33" cx="18" cy="30.796" r=".625"/><circle fill="#292F33" cx="18" cy="33.396" r=".625"/><path fill="#292F33" d="M18 35.375c-.345 0-.625.28-.625.625h1.25c0-.345-.28-.625-.625-.625z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#F7DECE" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#C1694F" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662113" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#292F33" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#F7DECE" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f935-1f3fb-200d-2642-fe0f.svg index 1febe152c..abd68b8f6 100644 --- a/public/emoji/1f935-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f935-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#F6DDCD" d="M14 26l4 1.75L22 26v-4h-8z"/><path fill="#ECC0AC" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F6DDCD" d="M11.444 13.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.174 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623 1.639 1.174 1.639 2.623"/><path fill="#F6DDCD" d="M9.477 14.96c0-5.589 3.816-10.121 8.523-10.121s8.522 4.532 8.522 10.121S22.707 25.081 18 25.081c-4.707-.001-8.523-4.532-8.523-10.121"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#292F33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/><path fill="#662213" d="M14 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M18.75 17.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><g fill="#292F33"><path d="M17.999 28.463l2.927 1.609v-3.218z"/><path d="M20.926 30.306c-.039 0-.077-.01-.112-.029l-2.927-1.609c-.075-.041-.121-.119-.121-.204s.046-.163.121-.204l2.927-1.608c.072-.04.159-.04.231.003.07.042.114.119.114.201v3.218c0 .082-.044.159-.114.201-.037.02-.078.031-.119.031zm-2.443-1.843l2.209 1.215v-2.429l-2.209 1.214z"/><path d="M17.999 28.463l-2.926 1.609v-3.218z"/><path d="M15.072 30.306c-.041 0-.082-.011-.119-.032-.071-.042-.115-.119-.115-.201v-3.218c0-.082.044-.159.115-.201.072-.042.159-.043.231-.003l2.927 1.608c.075.041.121.119.121.204s-.046.163-.121.204l-2.927 1.609c-.035.02-.073.03-.112.03zm.234-3.057v2.429l2.209-1.215-2.209-1.214z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#F7DECE" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#EEC2AD" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F7DECE" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#292F33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fb.svg b/public/emoji/1f935-1f3fb.svg index 1febe152c..abd68b8f6 100644 --- a/public/emoji/1f935-1f3fb.svg +++ b/public/emoji/1f935-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#F6DDCD" d="M14 26l4 1.75L22 26v-4h-8z"/><path fill="#ECC0AC" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F6DDCD" d="M11.444 13.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.174 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623 1.639 1.174 1.639 2.623"/><path fill="#F6DDCD" d="M9.477 14.96c0-5.589 3.816-10.121 8.523-10.121s8.522 4.532 8.522 10.121S22.707 25.081 18 25.081c-4.707-.001-8.523-4.532-8.523-10.121"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#292F33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/><path fill="#662213" d="M14 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M18.75 17.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><g fill="#292F33"><path d="M17.999 28.463l2.927 1.609v-3.218z"/><path d="M20.926 30.306c-.039 0-.077-.01-.112-.029l-2.927-1.609c-.075-.041-.121-.119-.121-.204s.046-.163.121-.204l2.927-1.608c.072-.04.159-.04.231.003.07.042.114.119.114.201v3.218c0 .082-.044.159-.114.201-.037.02-.078.031-.119.031zm-2.443-1.843l2.209 1.215v-2.429l-2.209 1.214z"/><path d="M17.999 28.463l-2.926 1.609v-3.218z"/><path d="M15.072 30.306c-.041 0-.082-.011-.119-.032-.071-.042-.115-.119-.115-.201v-3.218c0-.082.044-.159.115-.201.072-.042.159-.043.231-.003l2.927 1.608c.075.041.121.119.121.204s-.046.163-.121.204l-2.927 1.609c-.035.02-.073.03-.112.03zm.234-3.057v2.429l2.209-1.215-2.209-1.214z"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#F7DECE" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#EEC2AD" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F7DECE" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#292F33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f935-1f3fc-200d-2640-fe0f.svg index 40b403069..5b10171c3 100644 --- a/public/emoji/1f935-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f935-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#F2D1A1" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#E0BF94" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><path fill="#66757F" d="M23.684 36l-1.172-1.918 3.223-.886L23.156 26l-3.011 10zm-11.368 0l1.172-1.918-3.223-.886L12.844 26l3.011 10z"/><path fill="#292F33" d="M18.635 30.796c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm0 2.6c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm-.636 1.965c-.351 0-.636.285-.636.636h1.273c-.001-.352-.285-.636-.637-.636z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#F2D1A1" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DE2032" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#C1694F" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662213" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#FFE51E" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#F2D1A1" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#F3D2A2" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#E2C196" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#546170" d="M13.95 29.603l-3.863-.825L11.808 26l2.142.003z"/><path fill="#66757F" d="M16.078 36h-2.406l-4.485-7.9 2.621.831 1.571-1.983z"/><path fill="#546170" d="M22.05 29.603l3.863-.825L24.192 26l-2.141.003z"/><path fill="#66757F" d="M19.922 36h2.406l4.485-7.9-2.621.831-1.57-1.983z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><circle fill="#292F33" cx="18" cy="30.796" r=".625"/><circle fill="#292F33" cx="18" cy="33.396" r=".625"/><path fill="#292F33" d="M18 35.375c-.345 0-.625.28-.625.625h1.25c0-.345-.28-.625-.625-.625z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#F3D2A2" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#C1694F" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662113" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#FFE51E" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#F3D2A2" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f935-1f3fc-200d-2642-fe0f.svg index da0f7e5f4..f7093beb7 100644 --- a/public/emoji/1f935-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f935-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#F2D1A1" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#E0BF94" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F2D1A1" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662213" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#FFE51E" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#F3D2A2" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#E2C196" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F3D2A2" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#FFE51E" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fc.svg b/public/emoji/1f935-1f3fc.svg index da0f7e5f4..f7093beb7 100644 --- a/public/emoji/1f935-1f3fc.svg +++ b/public/emoji/1f935-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#F2D1A1" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#E0BF94" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F2D1A1" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662213" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#FFE51E" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#F3D2A2" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#E2C196" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F3D2A2" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#FFE51E" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f935-1f3fd-200d-2640-fe0f.svg index 1e4f6197b..35d0ab5d3 100644 --- a/public/emoji/1f935-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f935-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#D4AB88" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#CB9A7A" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><path fill="#66757F" d="M23.684 36l-1.172-1.918 3.223-.886L23.156 26l-3.011 10zm-11.368 0l1.172-1.918-3.223-.886L12.844 26l3.011 10z"/><path fill="#292F33" d="M18.635 30.796c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm0 2.6c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm-.636 1.965c-.351 0-.636.285-.636.636h1.273c-.001-.352-.285-.636-.637-.636z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#D4AB88" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DE2032" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#C1694F" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662213" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#963B22" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#D4AB88" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#D4AB88" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#CC9B7A" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#546170" d="M13.95 29.603l-3.863-.825L11.808 26l2.142.003z"/><path fill="#66757F" d="M16.078 36h-2.406l-4.485-7.9 2.621.831 1.571-1.983z"/><path fill="#546170" d="M22.05 29.603l3.863-.825L24.192 26l-2.141.003z"/><path fill="#66757F" d="M19.922 36h2.406l4.485-7.9-2.621.831-1.57-1.983z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><circle fill="#292F33" cx="18" cy="30.796" r=".625"/><circle fill="#292F33" cx="18" cy="33.396" r=".625"/><path fill="#292F33" d="M18 35.375c-.345 0-.625.28-.625.625h1.25c0-.345-.28-.625-.625-.625z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#D4AB88" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#C1694F" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662113" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#963B22" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#D4AB88" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f935-1f3fd-200d-2642-fe0f.svg index 2268bf01d..5ed3aa32a 100644 --- a/public/emoji/1f935-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f935-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#D4AB88" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#CB9A7A" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#D4AB88" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662213" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#963B22" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#D4AB88" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#CC9B7A" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#D4AB88" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#963B22" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fd.svg b/public/emoji/1f935-1f3fd.svg index 2268bf01d..5ed3aa32a 100644 --- a/public/emoji/1f935-1f3fd.svg +++ b/public/emoji/1f935-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#D4AB88" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#CB9A7A" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#D4AB88" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662213" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#963B22" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#D4AB88" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#CC9B7A" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#D4AB88" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#963B22" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f935-1f3fe-200d-2640-fe0f.svg index 682d58b0a..5b0623609 100644 --- a/public/emoji/1f935-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f935-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#AE7E57" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#9A6A4A" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><path fill="#66757F" d="M23.684 36l-1.172-1.918 3.223-.886L23.156 26l-3.011 10zm-11.368 0l1.172-1.918-3.223-.886L12.844 26l3.011 10z"/><path fill="#292F33" d="M18.635 30.796c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm0 2.6c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm-.636 1.965c-.351 0-.636.285-.636.636h1.273c-.001-.352-.285-.636-.637-.636z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#AE7E57" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DE2032" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#915A34" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662213" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#60352A" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#AE7E57" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#AF7E57" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#9B6A49" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#546170" d="M13.95 29.603l-3.863-.825L11.808 26l2.142.003z"/><path fill="#66757F" d="M16.078 36h-2.406l-4.485-7.9 2.621.831 1.571-1.983z"/><path fill="#546170" d="M22.05 29.603l3.863-.825L24.192 26l-2.141.003z"/><path fill="#66757F" d="M19.922 36h2.406l4.485-7.9-2.621.831-1.57-1.983z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><circle fill="#292F33" cx="18" cy="30.796" r=".625"/><circle fill="#292F33" cx="18" cy="33.396" r=".625"/><path fill="#292F33" d="M18 35.375c-.345 0-.625.28-.625.625h1.25c0-.345-.28-.625-.625-.625z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#AF7E57" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#915A34" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662113" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#60352A" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#AF7E57" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f935-1f3fe-200d-2642-fe0f.svg index 427e42d60..6ed7fb365 100644 --- a/public/emoji/1f935-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f935-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#AE7E57" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#9A6A4A" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#AE7E57" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#915A34" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662213" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#60352A" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#AF7E57" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#9B6A49" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#AF7E57" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#915A34" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#60352A" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3fe.svg b/public/emoji/1f935-1f3fe.svg index 427e42d60..6ed7fb365 100644 --- a/public/emoji/1f935-1f3fe.svg +++ b/public/emoji/1f935-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#AE7E57" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#9A6A4A" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#AE7E57" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#915A34" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662213" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#60352A" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#AF7E57" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#9B6A49" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#AF7E57" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#915A34" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#60352A" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f935-1f3ff-200d-2640-fe0f.svg index cb824ae81..70f6517f0 100644 --- a/public/emoji/1f935-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f935-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#7C543E" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#674232" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><path fill="#66757F" d="M23.684 36l-1.172-1.918 3.223-.886L23.156 26l-3.011 10zm-11.368 0l1.172-1.918-3.223-.886L12.844 26l3.011 10z"/><path fill="#292F33" d="M18.635 30.796c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm0 2.6c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm-.636 1.965c-.351 0-.636.285-.636.636h1.273c-.001-.352-.285-.636-.637-.636z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#7C543E" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DE2032" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#3D2E24" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#0B0200" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#7C543E" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#7C533E" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#664131" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#546170" d="M13.95 29.603l-3.863-.825L11.808 26l2.142.003z"/><path fill="#66757F" d="M16.078 36h-2.406l-4.485-7.9 2.621.831 1.571-1.983z"/><path fill="#546170" d="M22.05 29.603l3.863-.825L24.192 26l-2.141.003z"/><path fill="#66757F" d="M19.922 36h2.406l4.485-7.9-2.621.831-1.57-1.983z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><circle fill="#292F33" cx="18" cy="30.796" r=".625"/><circle fill="#292F33" cx="18" cy="33.396" r=".625"/><path fill="#292F33" d="M18 35.375c-.345 0-.625.28-.625.625h1.25c0-.345-.28-.625-.625-.625z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#7C533E" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#3D2E24" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#0B0200" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#7C533E" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f935-1f3ff-200d-2642-fe0f.svg index c38b49041..3af34ef2c 100644 --- a/public/emoji/1f935-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f935-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#7C543E" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#674232" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#7C543E" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#3D2E24" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#0B0200" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#7C533E" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#664131" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#7C533E" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#3D2E24" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#0B0200" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-1f3ff.svg b/public/emoji/1f935-1f3ff.svg index c38b49041..3af34ef2c 100644 --- a/public/emoji/1f935-1f3ff.svg +++ b/public/emoji/1f935-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#7C543E" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#674232" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#7C543E" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#3D2E24" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#0B0200" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#7C533E" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#664131" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#7C533E" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#3D2E24" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#0B0200" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-200d-2640-fe0f.svg b/public/emoji/1f935-200d-2640-fe0f.svg index 8adcb6b0b..63ef4c95e 100644 --- a/public/emoji/1f935-200d-2640-fe0f.svg +++ b/public/emoji/1f935-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FAAA35" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#FFDB5E" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#F8C954" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><path fill="#66757F" d="M23.684 36l-1.172-1.918 3.223-.886L23.156 26l-3.011 10zm-11.368 0l1.172-1.918-3.223-.886L12.844 26l3.011 10z"/><path fill="#292F33" d="M18.635 30.796c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm0 2.6c0 .352-.285.636-.636.636s-.636-.285-.636-.636c0-.351.285-.636.636-.636s.636.285.636.636zm-.636 1.965c-.351 0-.636.285-.636.636h1.273c-.001-.352-.285-.636-.637-.636z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#FFDB5E" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DE2032" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#C1694F" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662213" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#FAAA35" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#FFDB5E" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M18.004 3.979c4.104 0 10.947 2.053 10.947 10.947 0 8.895 0 10.948-2.053 10.948s-4.79-2.053-8.894-2.053c-4.106 0-6.785 2.053-8.896 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.895 6.844-10.947 10.949-10.947"/><path fill="#292F33" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#FFDC5D" d="M14.5 26c1 1.982 2.792 2 3.5 2s2.512-.049 3.5-2v-3.591h-7V26z"/><path fill="#F9CA55" d="M14.5 24.054c.975 1.102 2.185 1.4 3.499 1.4 1.315 0 2.526-.298 3.501-1.4v-1.051h-7v1.051z"/><path fill="#546170" d="M13.95 29.603l-3.863-.825L11.808 26l2.142.003z"/><path fill="#66757F" d="M16.078 36h-2.406l-4.485-7.9 2.621.831 1.571-1.983z"/><path fill="#546170" d="M22.05 29.603l3.863-.825L24.192 26l-2.141.003z"/><path fill="#66757F" d="M19.922 36h2.406l4.485-7.9-2.621.831-1.57-1.983z"/><path fill="#DFE7EC" d="M20.145 36l3.011-10L18 27l-5.156-1 3.011 10z"/><circle fill="#292F33" cx="18" cy="30.796" r=".625"/><circle fill="#292F33" cx="18" cy="33.396" r=".625"/><path fill="#292F33" d="M18 35.375c-.345 0-.625.28-.625.625h1.25c0-.345-.28-.625-.625-.625z"/><path fill="#F4F7F9" d="M14.294 24.872L18 26.966l-2.417 2.564-2.74-3.53zm7.412 0L18 26.966l2.417 2.564 2.74-3.53z"/><path fill="#292F33" d="M20.781 26.053c-.072-.043-.159-.043-.231-.003l-2.551 1.402-2.551-1.402c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v2.928c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029l2.551-1.402 2.551 1.402c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-2.928c.001-.082-.043-.159-.114-.201z"/><path fill="#FFDC5D" d="M9.793 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M18.004 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.019.26.269.26.691-.004.955-.09.092-.929.886-2.535.886"/><path fill="#C1694F" d="M18.895 19.409h-1.69c-.233 0-.423-.189-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#662113" d="M21.432 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847m-6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847"/><path fill="#FFAC33" d="M7.784 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.438 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.951 5.813 22.11 2.5 18.003 2.5c-4.105 0-10.947 3.257-10.947 12.152 0 .793-.02 1.257.008 3.257h.72z"/><path fill="#FFDC5D" d="M11.503 14.845c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623 1.639 1.175 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.905 0 1.639 1.175 1.639 2.623"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935-200d-2642-fe0f.svg b/public/emoji/1f935-200d-2642-fe0f.svg index c5668af1b..5c87be483 100644 --- a/public/emoji/1f935-200d-2642-fe0f.svg +++ b/public/emoji/1f935-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#FFDC5D" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#F8C954" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#FFDC5D" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662213" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#FFAC33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#FFDC5D" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#F9CA55" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#FFDC5D" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#FFAC33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f935.svg b/public/emoji/1f935.svg index c5668af1b..5c87be483 100644 --- a/public/emoji/1f935.svg +++ b/public/emoji/1f935.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><path fill="#292F33" d="M18.698 31.846c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.313.699.699zm0 2.858c0 .386-.313.699-.699.699-.386 0-.699-.313-.699-.699 0-.386.313-.699.699-.699.386 0 .699.312.699.699z"/><path fill="#66757F" d="M23.29 36l-.332-.543 3.542-.974-2.833-8.5L20.805 36zm-10.58 0l.332-.543-3.542-.974 2.833-8.5L15.195 36z"/><path fill="#FFDC5D" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#F8C954" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#FFDC5D" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662213" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#FFAC33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#546170" d="M22.5 30.003l4.292-.916L24.879 26l-2.379.003z"/><path fill="#66757F" d="M20.58 36h2.83l4.382-7.667-2.913.924-1.744-2.204z"/><path fill="#546170" d="M13.5 30.003l-4.292-.916L11.12 26l2.38.003z"/><path fill="#66757F" d="M15.42 36h-2.83l-4.382-7.667 2.912.924 1.745-2.204z"/><path fill="#DFE7EC" d="M20.805 36l2.862-10.017H12.333L15.195 36z"/><circle fill="#292F33" cx="18" cy="31.847" r=".7"/><circle fill="#292F33" cx="18" cy="34.704" r=".7"/><path fill="#FFDC5D" d="M14 25.887l4 1.75 4-1.75v-4h-8z"/><path fill="#F9CA55" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#FFDC5D" d="M27.833 13.935c0-1.448-.733-2.623-1.639-2.623-.082 0-.161.02-.24.039C24.73 7.546 21.635 4.839 18 4.839s-6.729 2.707-7.955 6.512c-.079-.019-.158-.039-.24-.039-.905 0-1.639 1.175-1.639 2.623 0 1.33.621 2.417 1.423 2.587.634 4.845 4.153 8.557 8.411 8.557s7.776-3.712 8.411-8.557c.802-.17 1.422-1.257 1.422-2.587z"/><path fill="#F4F7F9" d="M13.927 24.744L18 27.637l-2.656 2.818-3.011-4.472zm8.146 0L18 27.637l2.656 2.818 3.011-4.472z"/><path fill="#292F33" d="M21.045 26.653c-.072-.043-.159-.043-.231-.003L18 28.197l-2.814-1.547c-.072-.04-.159-.039-.231.003-.071.042-.115.119-.115.201v3.218c0 .082.044.159.115.201.037.021.078.032.119.032.039 0 .077-.01.112-.029L18 28.728l2.814 1.548c.035.02.073.029.112.029.041 0 .082-.011.119-.032.07-.042.114-.119.114-.201v-3.218c0-.082-.044-.159-.114-.201z"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848m.75-4.052h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#662113" d="M22 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m-8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#FFAC33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f938-1f3fb-200d-2640-fe0f.svg index b6fa84e75..c5a0d1e42 100644 --- a/public/emoji/1f938-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f938-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#F7DECE" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#F7DECE" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#F7DECE" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#F7DECE" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#F7DECE" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#292F33" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#F7DECE" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#F7DECE" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#292F33" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#F7DECE" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#F7DECE" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#F7DECE" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#292F33" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#F7DECE" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#F7DECE" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#F7DECE" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#F7DECE" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f938-1f3fb-200d-2642-fe0f.svg index 30d80301b..245766556 100644 --- a/public/emoji/1f938-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f938-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#4289C1" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#F7DECE" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#F7DECE" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#F7DECE" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#F7DECE" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#F7DECE" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#292F33" d="M29.062 29.647c-.25 1.188-1.471 2.025-2.812 2.189-1.516.185-2.541-.699-3.126-1.935-.538-1.137-.437-2.316-.312-2.629s.926.075.797.712c-.151.747.229 1.413.678 1.291.317-.086.576-.391.383-.631-.232-.289-.149-.476-.149-.476s.182-.276.729.391c.287.35 1.565-.768 2.893.09 0 0 .283-.416.272-1.092-.004-.199-.078-.448-.171-.687-.168-.428 1.342.29.818 2.777z"/><path fill="#2A6797" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#F7DECE" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#F7DECE" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#4289C1" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.77-.921-1.801-2.296-1.662-2.676-1.73-3.039c0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 1.985 2.412 2.572 3.315.812 1.25 1.855 3.152 1.418 3.639-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#F7DECE" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#F7DECE" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#F7DECE" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#292F33" d="M25.36 28.167s.236.077.49.713c.223.557.267 1.248 0 1.871-.336.783-1.515 1.537-2.606 1.515-1.527-.031-2.378-.501-2.963-1.738-.538-1.137-.377-2.306-.377-2.306s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.34-.542-.139-.676s.361.205.691.512c.334.312.557.713 1.203 1.069 0 0 1.803-.434 1.96-1.092.133-.555-.023-1.29-.023-1.29z"/><path fill="#F7DECE" d="M20.926 8.62c-.168.504-.934 1.145-1.116 1.322-.822.803-2.361 2.536-3.141 3.099l2.927 2.037c.571-.547 1.504-1.719 2.309-2.726.48-.6 1.16-1.419 1.458-2.328 0 0 .484-2.929 1.486-5.51.32-.825-1.304-1.405-1.67-.718-.363.681-.776 1.496-1.015 2.137-.161.439-1.162 2.459-1.238 2.687z"/><path fill="#269" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#3B88C3" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#F7DECE" d="M10.141 9.777c.528.627 1.938 1.882 2.115 2.065.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.833-2.663-2.476-3.332 0 0-1.266-1.767-2.555-4.217-.413-.784.991-1.416 1.577-.904.627.548 1.394 1.44 1.978 2.103.308.35 1.282 1.553 1.438 1.737z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#269" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#269" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#F7DECE" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#F7DECE" d="M13.976 34.214s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.294.066.863-.959 3.206-.867 4.121.03.297.935.551.683.743-.111.085-.853.164-1.01.149l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#3B88C3" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.341-.402-.546-.989c-.142-.404-.479-1.167-.624-1.515-.446-1.069-.73-1.909-.799-2.272 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.307 2.352 1.823 3.297 1.094 2.003 2.734 3.803 2.297 4.289-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.646-1.102.998-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fb.svg b/public/emoji/1f938-1f3fb.svg index b6fa84e75..c5a0d1e42 100644 --- a/public/emoji/1f938-1f3fb.svg +++ b/public/emoji/1f938-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#F7DECE" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#F7DECE" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#F7DECE" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#F7DECE" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#F7DECE" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#292F33" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#F7DECE" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#F7DECE" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#292F33" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#F7DECE" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#F7DECE" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#F7DECE" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#292F33" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#F7DECE" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#F7DECE" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#F7DECE" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#F7DECE" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f938-1f3fc-200d-2640-fe0f.svg index 70941c652..15b2df731 100644 --- a/public/emoji/1f938-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f938-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#F3D2A2" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#F3D2A2" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#F3D2A2" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#F3D2A2" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#F3D2A2" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#FFE51E" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#F3D2A2" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#F3D2A2" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#FFE51E" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#F3D2A2" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#F3D2A2" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#F3D2A2" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#FFE51E" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#F3D2A2" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#F3D2A2" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#F3D2A2" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#F3D2A2" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f938-1f3fc-200d-2642-fe0f.svg index 334889aeb..32a693857 100644 --- a/public/emoji/1f938-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f938-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#4289C1" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#F3D2A2" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#F3D2A2" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#F3D2A2" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#F3D2A2" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#F3D2A2" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#FFE51E" d="M29.062 29.647c-.25 1.188-1.471 2.025-2.812 2.189-1.516.185-2.541-.699-3.126-1.935-.538-1.137-.437-2.316-.312-2.629s.926.075.797.712c-.151.747.229 1.413.678 1.291.317-.086.576-.391.383-.631-.232-.289-.149-.476-.149-.476s.182-.276.729.391c.287.35 1.565-.768 2.893.09 0 0 .283-.416.272-1.092-.004-.199-.078-.448-.171-.687-.168-.428 1.342.29.818 2.777z"/><path fill="#2A6797" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#F3D2A2" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#F3D2A2" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#4289C1" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.77-.921-1.801-2.296-1.662-2.676-1.73-3.039c0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 1.985 2.412 2.572 3.315.812 1.25 1.855 3.152 1.418 3.639-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#F3D2A2" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#F3D2A2" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#F3D2A2" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#FFE51E" d="M25.36 28.167s.236.077.49.713c.223.557.267 1.248 0 1.871-.336.783-1.515 1.537-2.606 1.515-1.527-.031-2.378-.501-2.963-1.738-.538-1.137-.377-2.306-.377-2.306s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.34-.542-.139-.676s.361.205.691.512c.334.312.557.713 1.203 1.069 0 0 1.803-.434 1.96-1.092.133-.555-.023-1.29-.023-1.29z"/><path fill="#F3D2A2" d="M20.926 8.62c-.168.504-.934 1.145-1.116 1.322-.822.803-2.361 2.536-3.141 3.099l2.927 2.037c.571-.547 1.504-1.719 2.309-2.726.48-.6 1.16-1.419 1.458-2.328 0 0 .484-2.929 1.486-5.51.32-.825-1.304-1.405-1.67-.718-.363.681-.776 1.496-1.015 2.137-.161.439-1.162 2.459-1.238 2.687z"/><path fill="#269" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#3B88C3" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#F3D2A2" d="M10.141 9.777c.528.627 1.938 1.882 2.115 2.065.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.833-2.663-2.476-3.332 0 0-1.266-1.767-2.555-4.217-.413-.784.991-1.416 1.577-.904.627.548 1.394 1.44 1.978 2.103.308.35 1.282 1.553 1.438 1.737z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#269" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#269" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#F3D2A2" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#F3D2A2" d="M13.976 34.214s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.294.066.863-.959 3.206-.867 4.121.03.297.935.551.683.743-.111.085-.853.164-1.01.149l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#3B88C3" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.341-.402-.546-.989c-.142-.404-.479-1.167-.624-1.515-.446-1.069-.73-1.909-.799-2.272 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.307 2.352 1.823 3.297 1.094 2.003 2.734 3.803 2.297 4.289-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.646-1.102.998-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fc.svg b/public/emoji/1f938-1f3fc.svg index 70941c652..15b2df731 100644 --- a/public/emoji/1f938-1f3fc.svg +++ b/public/emoji/1f938-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#F3D2A2" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#F3D2A2" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#F3D2A2" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#F3D2A2" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#F3D2A2" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#FFE51E" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#F3D2A2" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#F3D2A2" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#FFE51E" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#F3D2A2" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#F3D2A2" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#F3D2A2" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#FFE51E" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#F3D2A2" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#F3D2A2" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#F3D2A2" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#F3D2A2" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f938-1f3fd-200d-2640-fe0f.svg index 79301f54b..58447e654 100644 --- a/public/emoji/1f938-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f938-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#D5AB88" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#D5AB88" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#D5AB88" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#D5AB88" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#D5AB88" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#963B22" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#D5AB88" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#D5AB88" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#963B22" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#D4AB88" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#D4AB88" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#D4AB88" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#963B22" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#D4AB88" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#D4AB88" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#D4AB88" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#D4AB88" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f938-1f3fd-200d-2642-fe0f.svg index 0f45265fe..bb9f50ce8 100644 --- a/public/emoji/1f938-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f938-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#4289C1" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#D5AB88" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#D5AB88" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#D5AB88" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#D5AB88" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#D5AB88" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#963B22" d="M29.062 29.647c-.25 1.188-1.471 2.025-2.812 2.189-1.516.185-2.541-.699-3.126-1.935-.538-1.137-.437-2.316-.312-2.629s.926.075.797.712c-.151.747.229 1.413.678 1.291.317-.086.576-.391.383-.631-.232-.289-.149-.476-.149-.476s.182-.276.729.391c.287.35 1.565-.768 2.893.09 0 0 .283-.416.272-1.092-.004-.199-.078-.448-.171-.687-.168-.428 1.342.29.818 2.777z"/><path fill="#2A6797" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#D5AB88" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#D5AB88" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#4289C1" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.77-.921-1.801-2.296-1.662-2.676-1.73-3.039c0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 1.985 2.412 2.572 3.315.812 1.25 1.855 3.152 1.418 3.639-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#D4AB88" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#D4AB88" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#D4AB88" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#963B22" d="M25.36 28.167s.236.077.49.713c.223.557.267 1.248 0 1.871-.336.783-1.515 1.537-2.606 1.515-1.527-.031-2.378-.501-2.963-1.738-.538-1.137-.377-2.306-.377-2.306s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.34-.542-.139-.676s.361.205.691.512c.334.312.557.713 1.203 1.069 0 0 1.803-.434 1.96-1.092.133-.555-.023-1.29-.023-1.29z"/><path fill="#D4AB88" d="M20.926 8.62c-.168.504-.934 1.145-1.116 1.322-.822.803-2.361 2.536-3.141 3.099l2.927 2.037c.571-.547 1.504-1.719 2.309-2.726.48-.6 1.16-1.419 1.458-2.328 0 0 .484-2.929 1.486-5.51.32-.825-1.304-1.405-1.67-.718-.363.681-.776 1.496-1.015 2.137-.161.439-1.162 2.459-1.238 2.687z"/><path fill="#269" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#3B88C3" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#D4AB88" d="M10.141 9.777c.528.627 1.938 1.882 2.115 2.065.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.833-2.663-2.476-3.332 0 0-1.266-1.767-2.555-4.217-.413-.784.991-1.416 1.577-.904.627.548 1.394 1.44 1.978 2.103.308.35 1.282 1.553 1.438 1.737z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#269" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#269" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#D4AB88" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#D4AB88" d="M13.976 34.214s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.294.066.863-.959 3.206-.867 4.121.03.297.935.551.683.743-.111.085-.853.164-1.01.149l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#3B88C3" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.341-.402-.546-.989c-.142-.404-.479-1.167-.624-1.515-.446-1.069-.73-1.909-.799-2.272 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.307 2.352 1.823 3.297 1.094 2.003 2.734 3.803 2.297 4.289-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.646-1.102.998-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fd.svg b/public/emoji/1f938-1f3fd.svg index 79301f54b..58447e654 100644 --- a/public/emoji/1f938-1f3fd.svg +++ b/public/emoji/1f938-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#D5AB88" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#D5AB88" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#D5AB88" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#D5AB88" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#D5AB88" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#963B22" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#D5AB88" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#D5AB88" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#963B22" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#D4AB88" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#D4AB88" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#D4AB88" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#963B22" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#D4AB88" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#D4AB88" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#D4AB88" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#D4AB88" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f938-1f3fe-200d-2640-fe0f.svg index ea7c23d24..b17fdb449 100644 --- a/public/emoji/1f938-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f938-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#AF7E57" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#AF7E57" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#AF7E57" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#AF7E57" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#AF7E57" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#60352A" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#AF7E57" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#AF7E57" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#60352A" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#AF7E57" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#AF7E57" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#AF7E57" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#60352A" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#AF7E57" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#AF7E57" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#AF7E57" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#AF7E57" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f938-1f3fe-200d-2642-fe0f.svg index c4624bd4d..cce9c90ed 100644 --- a/public/emoji/1f938-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f938-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#4289C1" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#AF7E57" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#AF7E57" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#AF7E57" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#AF7E57" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#AF7E57" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#60352A" d="M29.062 29.647c-.25 1.188-1.471 2.025-2.812 2.189-1.516.185-2.541-.699-3.126-1.935-.538-1.137-.437-2.316-.312-2.629s.926.075.797.712c-.151.747.229 1.413.678 1.291.317-.086.576-.391.383-.631-.232-.289-.149-.476-.149-.476s.182-.276.729.391c.287.35 1.565-.768 2.893.09 0 0 .283-.416.272-1.092-.004-.199-.078-.448-.171-.687-.168-.428 1.342.29.818 2.777z"/><path fill="#2A6797" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#AF7E57" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#AF7E57" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#4289C1" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.77-.921-1.801-2.296-1.662-2.676-1.73-3.039c0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 1.985 2.412 2.572 3.315.812 1.25 1.855 3.152 1.418 3.639-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#AF7E57" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#AF7E57" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#AF7E57" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#60352A" d="M25.36 28.167s.236.077.49.713c.223.557.267 1.248 0 1.871-.336.783-1.515 1.537-2.606 1.515-1.527-.031-2.378-.501-2.963-1.738-.538-1.137-.377-2.306-.377-2.306s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.34-.542-.139-.676s.361.205.691.512c.334.312.557.713 1.203 1.069 0 0 1.803-.434 1.96-1.092.133-.555-.023-1.29-.023-1.29z"/><path fill="#AF7E57" d="M20.926 8.62c-.168.504-.934 1.145-1.116 1.322-.822.803-2.361 2.536-3.141 3.099l2.927 2.037c.571-.547 1.504-1.719 2.309-2.726.48-.6 1.16-1.419 1.458-2.328 0 0 .484-2.929 1.486-5.51.32-.825-1.304-1.405-1.67-.718-.363.681-.776 1.496-1.015 2.137-.161.439-1.162 2.459-1.238 2.687z"/><path fill="#269" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#3B88C3" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#AF7E57" d="M10.141 9.777c.528.627 1.938 1.882 2.115 2.065.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.833-2.663-2.476-3.332 0 0-1.266-1.767-2.555-4.217-.413-.784.991-1.416 1.577-.904.627.548 1.394 1.44 1.978 2.103.308.35 1.282 1.553 1.438 1.737z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#269" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#269" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#AF7E57" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#AF7E57" d="M13.976 34.214s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.294.066.863-.959 3.206-.867 4.121.03.297.935.551.683.743-.111.085-.853.164-1.01.149l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#3B88C3" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.341-.402-.546-.989c-.142-.404-.479-1.167-.624-1.515-.446-1.069-.73-1.909-.799-2.272 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.307 2.352 1.823 3.297 1.094 2.003 2.734 3.803 2.297 4.289-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.646-1.102.998-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3fe.svg b/public/emoji/1f938-1f3fe.svg index ea7c23d24..b17fdb449 100644 --- a/public/emoji/1f938-1f3fe.svg +++ b/public/emoji/1f938-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#AF7E57" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#AF7E57" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#AF7E57" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#AF7E57" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#AF7E57" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#60352A" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#AF7E57" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#AF7E57" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#60352A" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#AF7E57" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#AF7E57" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#AF7E57" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#60352A" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#AF7E57" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#AF7E57" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#AF7E57" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#AF7E57" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f938-1f3ff-200d-2640-fe0f.svg index 48e6a08da..076b69d98 100644 --- a/public/emoji/1f938-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f938-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#7C533E" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#7C533E" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#7C533E" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#7C533E" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#7C533E" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#0B0200" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#7C533E" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#7C533E" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#0B0200" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#7C533E" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#7C533E" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#7C533E" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#0B0200" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#7C533E" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#7C533E" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#7C533E" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#7C533E" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f938-1f3ff-200d-2642-fe0f.svg index 4bdd418f2..4f61ec9e6 100644 --- a/public/emoji/1f938-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f938-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#4289C1" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#7C533E" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#7C533E" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#7C533E" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#7C533E" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#7C533E" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#0B0200" d="M29.062 29.647c-.25 1.188-1.471 2.025-2.812 2.189-1.516.185-2.541-.699-3.126-1.935-.538-1.137-.437-2.316-.312-2.629s.926.075.797.712c-.151.747.229 1.413.678 1.291.317-.086.576-.391.383-.631-.232-.289-.149-.476-.149-.476s.182-.276.729.391c.287.35 1.565-.768 2.893.09 0 0 .283-.416.272-1.092-.004-.199-.078-.448-.171-.687-.168-.428 1.342.29.818 2.777z"/><path fill="#2A6797" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#7C533E" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#7C533E" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#4289C1" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.77-.921-1.801-2.296-1.662-2.676-1.73-3.039c0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 1.985 2.412 2.572 3.315.812 1.25 1.855 3.152 1.418 3.639-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#7C533E" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#7C533E" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#7C533E" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#0B0200" d="M25.36 28.167s.236.077.49.713c.223.557.267 1.248 0 1.871-.336.783-1.515 1.537-2.606 1.515-1.527-.031-2.378-.501-2.963-1.738-.538-1.137-.377-2.306-.377-2.306s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.34-.542-.139-.676s.361.205.691.512c.334.312.557.713 1.203 1.069 0 0 1.803-.434 1.96-1.092.133-.555-.023-1.29-.023-1.29z"/><path fill="#7C533E" d="M20.926 8.62c-.168.504-.934 1.145-1.116 1.322-.822.803-2.361 2.536-3.141 3.099l2.927 2.037c.571-.547 1.504-1.719 2.309-2.726.48-.6 1.16-1.419 1.458-2.328 0 0 .484-2.929 1.486-5.51.32-.825-1.304-1.405-1.67-.718-.363.681-.776 1.496-1.015 2.137-.161.439-1.162 2.459-1.238 2.687z"/><path fill="#269" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#3B88C3" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#7C533E" d="M10.141 9.777c.528.627 1.938 1.882 2.115 2.065.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.833-2.663-2.476-3.332 0 0-1.266-1.767-2.555-4.217-.413-.784.991-1.416 1.577-.904.627.548 1.394 1.44 1.978 2.103.308.35 1.282 1.553 1.438 1.737z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#269" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#269" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#7C533E" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#7C533E" d="M13.976 34.214s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.294.066.863-.959 3.206-.867 4.121.03.297.935.551.683.743-.111.085-.853.164-1.01.149l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#3B88C3" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.341-.402-.546-.989c-.142-.404-.479-1.167-.624-1.515-.446-1.069-.73-1.909-.799-2.272 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.307 2.352 1.823 3.297 1.094 2.003 2.734 3.803 2.297 4.289-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.646-1.102.998-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-1f3ff.svg b/public/emoji/1f938-1f3ff.svg index 48e6a08da..076b69d98 100644 --- a/public/emoji/1f938-1f3ff.svg +++ b/public/emoji/1f938-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#7C533E" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#7C533E" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#7C533E" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#7C533E" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#7C533E" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#0B0200" d="M29.001 26.869c-.536-.426-1.155-.82-1.155-.82s.557.951.568 1.508c.012.676-.272 1.092-.272 1.092-1.327-.857-2.453.017-2.893-.09-.438-.105-1.01-1.019-1.01-1.019s.319.815.43 1.104c.109.288.038.702-.383.631-.4-.067-.84-1.062-.576-1.291.143-.124-.805-.762-.805-.762s-.32 1.542.218 2.679c.038.081.084.157.126.235-.229-.064-.489-.098-.78-.064-.692.081-1.906.589-2.519 1.538-.473.73-.565 1.851-.565 1.851.227-.586.847-1.003 1.584-1.086.978-.11 1.984.781 2.909.018.408-.337.565-.649.604-.91.492.292 1.076.438 1.766.354 1.342-.164 2.69-1.311 2.986-2.11.381-1.026.379-2.371-.233-2.858z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#7C533E" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#7C533E" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#0B0200" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#7C533E" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#7C533E" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#7C533E" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#0B0200" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#7C533E" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#7C533E" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#7C533E" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#7C533E" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-200d-2640-fe0f.svg b/public/emoji/1f938-200d-2640-fe0f.svg index 8e21aecde..9cec3f994 100644 --- a/public/emoji/1f938-200d-2640-fe0f.svg +++ b/public/emoji/1f938-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#FFAC33" d="M24.252 30.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.565-1.851.613-.949 1.827-1.457 2.519-1.538 1.082-.127 1.781.652 1.781.652z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#FFDC5D" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#FFDC5D" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#FFDC5D" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#FFDC5D" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#FFDC5D" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#FFAC33" d="M27.846 26.049s.619.395 1.155.82c.612.487.614 1.832.235 2.856-.297.799-1.644 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.935-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.019c.44.106 1.565-.768 2.893.09 0 0 .283-.416.272-1.092-.013-.556-.569-1.507-.569-1.507z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#FFDC5D" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#FFDC5D" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#FFAC33" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#FFDC5D" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#FFDC5D" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#FFDC5D" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#FFAC33" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#FFDC5D" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#FFDC5D" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#FFDC5D" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#FFDC5D" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938-200d-2642-fe0f.svg b/public/emoji/1f938-200d-2642-fe0f.svg index 0895523c3..7aa23feb9 100644 --- a/public/emoji/1f938-200d-2642-fe0f.svg +++ b/public/emoji/1f938-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#4289C1" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#FFDC5D" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#FFDC5D" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#FFDC5D" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#FFDC5D" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#FFDC5D" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#FFAC33" d="M29.062 29.647c-.25 1.188-1.471 2.025-2.812 2.189-1.516.185-2.541-.699-3.126-1.935-.538-1.137-.437-2.316-.312-2.629s.926.075.797.712c-.151.747.229 1.413.678 1.291.317-.086.576-.391.383-.631-.232-.289-.149-.476-.149-.476s.182-.276.729.391c.287.35 1.565-.768 2.893.09 0 0 .283-.416.272-1.092-.004-.199-.078-.448-.171-.687-.168-.428 1.342.29.818 2.777z"/><path fill="#2A6797" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#FFDC5D" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#FFDC5D" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#4289C1" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.77-.921-1.801-2.296-1.662-2.676-1.73-3.039c0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 1.985 2.412 2.572 3.315.812 1.25 1.855 3.152 1.418 3.639-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#FFDC5D" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#FFDC5D" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#FFDC5D" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#FFAC33" d="M25.36 28.167s.236.077.49.713c.223.557.267 1.248 0 1.871-.336.783-1.515 1.537-2.606 1.515-1.527-.031-2.378-.501-2.963-1.738-.538-1.137-.377-2.306-.377-2.306s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.34-.542-.139-.676s.361.205.691.512c.334.312.557.713 1.203 1.069 0 0 1.803-.434 1.96-1.092.133-.555-.023-1.29-.023-1.29z"/><path fill="#FFDC5D" d="M20.926 8.62c-.168.504-.934 1.145-1.116 1.322-.822.803-2.361 2.536-3.141 3.099l2.927 2.037c.571-.547 1.504-1.719 2.309-2.726.48-.6 1.16-1.419 1.458-2.328 0 0 .484-2.929 1.486-5.51.32-.825-1.304-1.405-1.67-.718-.363.681-.776 1.496-1.015 2.137-.161.439-1.162 2.459-1.238 2.687z"/><path fill="#269" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#3B88C3" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#FFDC5D" d="M10.141 9.777c.528.627 1.938 1.882 2.115 2.065.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.833-2.663-2.476-3.332 0 0-1.266-1.767-2.555-4.217-.413-.784.991-1.416 1.577-.904.627.548 1.394 1.44 1.978 2.103.308.35 1.282 1.553 1.438 1.737z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#269" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#269" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#FFDC5D" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#FFDC5D" d="M13.976 34.214s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.294.066.863-.959 3.206-.867 4.121.03.297.935.551.683.743-.111.085-.853.164-1.01.149l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#3B88C3" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.341-.402-.546-.989c-.142-.404-.479-1.167-.624-1.515-.446-1.069-.73-1.909-.799-2.272 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.307 2.352 1.823 3.297 1.094 2.003 2.734 3.803 2.297 4.289-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.646-1.102.998-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f938.svg b/public/emoji/1f938.svg index 8e21aecde..9cec3f994 100644 --- a/public/emoji/1f938.svg +++ b/public/emoji/1f938.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M23.535 29.045c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#FFAC33" d="M24.252 30.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.565-1.851.613-.949 1.827-1.457 2.519-1.538 1.082-.127 1.781.652 1.781.652z"/><path fill="#DD2E44" d="M33.129 2.987c0-.55-.451-.998-1.003-.995l-3.002.014c-.55.002-.995.452-.993 1.003.004.552.452.998 1.005.995l2.999-.012c.552-.003 1-.452.994-1.005zM4.977 8.375c.034-.215.003-.447-.11-.655-.268-.481-.874-.658-1.36-.392L1.02 8.697c-.481.267-.66.872-.394 1.356.266.485.876.661 1.358.394L4.472 9.08c.277-.154.452-.415.505-.705z"/><path fill="#FFDC5D" d="M24.254 23.543l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.435-2.134c-.142-.22-.265-.531-.364-.964-.605-2.623-2.103-8.281-2.103-8.281 1.815-1.262 4.851 2.379 6.27 4.421.344.495.676.448.789.791 1.049-.544.782 1.323 1.153.909-.001.001.491 1.327-1.396 2.407z"/><path fill="#FFDC5D" d="M9.982 12.741c-.145.59.162 1.212.742 1.446l8.148 3.285c.637.256 1.361-.052 1.618-.688.251-.64-.052-1.36-.688-1.617l-8.148-3.284c-.637-.257-1.361.052-1.617.689-.022.056-.04.112-.055.169z"/><path fill="#FFDC5D" d="M3.749 8.474c-.221.506-.073 1.097.368 1.376l6.183 3.931c.483.305 1.136.124 1.455-.41.316-.536.19-1.213-.294-1.521L5.277 7.922c-.483-.308-1.134-.125-1.455.408-.03.047-.052.095-.073.144zm25.355-5.947c-.478-.18-1.019-.023-1.257.39l-3.318 5.801c-.263.453-.058 1.042.449 1.313.514.27 1.135.125 1.394-.329l3.323-5.801c.259-.451.055-1.042-.455-1.312-.045-.025-.09-.044-.136-.062z"/><path fill="#FFDC5D" d="M26.091 8.32c-.427-.37-1.071-.38-1.51.001l-6.164 5.347c-.482.417-.534 1.146-.118 1.629.423.476 1.148.533 1.628.114l6.165-5.347c.482-.418.534-1.146.115-1.628-.035-.042-.075-.081-.116-.116zm3.768 12.111l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.004-.515-.43-.934-.946-.931z"/><path fill="#FFDC5D" d="M35.382 22.302l-5.077-1.722c-.487-.165-1.022.098-1.188.587-.166.486.098 1.023.587 1.188l5.076 1.722c.487.166 1.022-.1 1.188-.586.166-.49-.098-1.025-.586-1.189z"/><path fill="#FFAC33" d="M27.846 26.049s.619.395 1.155.82c.612.487.614 1.832.235 2.856-.297.799-1.644 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.935-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.019c.44.106 1.565-.768 2.893.09 0 0 .283-.416.272-1.092-.013-.556-.569-1.507-.569-1.507z"/><path fill="#A0041E" d="M16.551 18.119s-1.816-1.205-2.518-1.744c-.699-.539-1.703-1.006-1.703-1.006s.549-2.18 1.638-2.891l3.439.682 3.711-2.142s1.646.918 2.334 2.065c0 0-1.634 1.235-2.308 1.627.318.502-.363 1.586-.363 1.586l-4.23 1.823z"/><path fill="#FFDC5D" d="M17.595 28.238l1.825-3.94c.215-.468.773-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.215-.672-.776-.457-1.245z"/><path fill="#FFDC5D" d="M17.019 34.041l.529-5.335c.051-.513.51-.89 1.024-.839.511.049.89.511.839 1.025l-.53 5.333c-.049.513-.512.89-1.023.841-.513-.051-.892-.513-.839-1.025z"/><path fill="#DD2E44" d="M21.428 25.835s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.822-.342-1.07-.626-.691-.791-1.863-3.126-1.932-3.489 0 0-.959.754-2.635 1.664-1.025.559-3.113.997-3.113.997.481.655 2.098 1.985 2.822 2.782.707.777 1.605 3.685 1.168 4.172-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.998-1.441z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M20.533 30.046c-.945-1.361-.746-3.135.443-3.963 1.189-.826 2.922-.395 3.867.967.946 1.359.747 3.134-.443 3.961-1.189.827-2.922.395-3.867-.965z"/><path fill="#FFAC33" d="M21.25 31.724s.75.742-.372 1.669c-.925.764-1.932-.128-2.909-.018-.737.083-1.357.5-1.584 1.086 0 0 .092-1.121.564-1.852.613-.949 1.827-1.457 2.52-1.538 1.081-.125 1.781.653 1.781.653z"/><path fill="#FFDC5D" d="M21.251 24.544l1.871 3.49c.264.486.082 1.127-.4 1.384-.484.264-1.09.097-1.354-.389l-1.75-3.22-2.281 1.586-.436-2.134c-.142-.22 5.374-2.71 5.745-3.124.001.001.492 1.327-1.395 2.407z"/><path fill="#FFDC5D" d="M26.857 21.431l-4.341.033c-.516.004-.934.428-.931.943.004.515.43.935.945.93l4.342-.031c.516-.004.934-.429.931-.944-.005-.515-.43-.934-.946-.931z"/><path fill="#FFDC5D" d="M30.852 22.974c-.743-.149-3.178-1.455-3.772-1.485-.594-.03-.799.189-.965.679-.166.486.223.747 1.025 1.311.802.564 2.911.505 3.386.624.135.034.398.385.653.505.505.238.833-.071 1.129-.059.442.018.76.209.832 0l.148-.267c.119-.416-.471-.753-1.069-1.129-.303-.191-1.117-.129-1.367-.179z"/><path fill="#FFAC33" d="M24.843 27.05s.619.395 1.155.82c.612.487.614 1.832.235 2.857-.297.799-1.645 1.946-2.986 2.11-1.516.185-2.541-.699-3.126-1.936-.538-1.137-.218-2.679-.218-2.679s.947.638.805.762c-.264.229.176 1.224.576 1.291.421.071.492-.343.383-.631-.11-.289-.43-1.104-.43-1.104s.571.914 1.01 1.02c.439.106 1.565-.768 2.893.09 0 0 .283-.416.271-1.092-.011-.557-.568-1.508-.568-1.508z"/><path fill="#FFDC5D" d="M21.078 8.847c-.168.504-.728.966-.91 1.143-.822.803-2.415 2.375-3.194 2.938l2.622 2.15c.571-.547 1.504-1.719 2.309-2.726.48-.6.976-.907 1.274-1.816 0 0 .668-3.441 1.67-6.022.32-.825-1.304-1.405-1.67-.718-.363.681-.824 1.654-1.063 2.295-.162.439-.962 2.528-1.038 2.756z"/><path fill="#BE1931" d="M23.011 2.446c-.055.164-.202.758-.202.984l-.24 1.347c-.014.067.032.132.099.142.197.031.834-.084 1.225.272.262.238.292.663.443.728.048.02.102-.005.119-.054 0 0 .048-.246.11-.456.13-.166.283-.5.519-.634.14-.024.291-.151.66-.174.219-.014 1.224-.085 1.224-.085.255-.014.335-.093.472-.102.282-.02 1.02.002 1.26-.017.239-.018.374-.165.423-.292.048-.126.035-.208.035-.208s-.233-.403-1.596-.956c-.8-.324-4.189-1.074-4.189-1.074l-.127.1c-.125.1-.177.307-.235.479z"/><path fill="#CCD6DD" d="M25.017 4.972c-.007.028-.021.055-.041.078-.066.072-.177.078-.249.012l-.229-.208c-.073-.066-.076-.179-.012-.249.066-.072.177-.078.249-.012l.229.208c.049.044.067.11.053.171z"/><path fill="#DD2E44" d="M25.098 2.587c-.133.188-.556.591-.925.646-.332.05-1.174-.059-1.334-.08.036-.26.144-.649.185-.772.055-.162.131-.375.255-.467.013-.009 1.365.52 1.819.673z"/><path fill="#CCD6DD" d="M23.26 1.913s.14.035.221.123c.081.089.308.19.481.248.173.058.82.288 1.291.379.471.091 1.349.142 1.633.201.284.059.72.167 1.031.302.31.135.585.266.751.357.215.116.382.245.491.374 0 0 .061-.375-.419-.784-.38-.323-.765-.544-1.159-.684-.03-.011-1.085-.357-1.613-.528-.386-.124-1.001-.327-1.001-.327-.728-.245-1.103-.35-1.253-.351-.027 0-.133-.02-.261.035-.084.035-.286.624-.193.655zm2.321 2.786c-.015.064-.065.116-.134.132-.095.021-.189-.039-.21-.134l-.067-.302c-.02-.097.039-.189.134-.211.095-.021.189.039.21.134l.067.302c.007.027.006.054 0 .079zm.618-.098c-.017.073-.08.13-.159.136-.097.006-.182-.067-.188-.164l-.023-.326c-.007-.101.066-.182.164-.189.097-.006.181.067.188.164l.023.326c0 .019-.001.036-.005.053zm.628-.061c-.019.081-.094.14-.18.135-.097-.004-.172-.087-.167-.185l.015-.299c.007-.104.088-.172.185-.167.097.004.172.087.167.185l-.015.299c-.001.012-.002.022-.005.032z"/><path fill="#FFDC5D" d="M9.959 9.913c.528.627 2.12 1.746 2.296 1.929.858.887 1.814 1.427 2.462 2.275l-2.361 2.434c-.63-.478-1.263-1.253-2.178-2.161-.545-.541-1.597-2.568-2.24-3.238 0 0-1.501-1.862-2.791-4.312-.412-.783.992-1.415 1.578-.903.627.548 1.394 1.44 1.978 2.103.308.35 1.101 1.689 1.256 1.873z"/><path fill="#CCD6DD" d="M3.126 1.742c.72-.945 2.329-.518 2.762.695.291.816.305 2.096.709 2.499.403.404.557 1.034.564 1.244.007.21-.226.356-.443.153 0 0 .587.633-.079.709-.665.075-.213.506-.649.398-.436-.108-.371-.43-.371-.43s.003.777-.318.443c-.321-.335-1.899-2.64-2.247-3.716-.228-.706-.453-1.306.072-1.995z"/><path fill="#BE1931" d="M3.37 1.971c.68-.974 2.206-.218 2.442.615.236.833.295 1.916.699 2.319.403.403.945 1.181.951 1.391.007.21-.308.354-.525.151 0 0 .702.676.036.751-.666.075-.492.662-.928.554-.436-.108-.512-.774-.512-.774s.003.777-.318.443c-.321-.335-1.64-2.454-1.968-3.536s-.197-1.456.123-1.914z"/><path fill="#CCD6DD" d="M5.26 6.328c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.16-.595c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.16.595c-.025.012-.046.027-.064.046zm-.395-.779c-.044.049-.058.12-.032.185.037.09.14.133.23.096l1.09-.48c.091-.039.133-.14.096-.231-.037-.09-.14-.133-.23-.096l-1.09.48c-.025.012-.047.027-.064.046zm-.318-.737c-.059.047-.083.128-.055.202.036.091.138.136.228.1l.974-.415c.094-.037.136-.137.101-.229-.035-.09-.137-.135-.228-.099l-.974.415c-.018.006-.033.015-.046.026zm-.244-.697c-.073.041-.107.13-.079.211.032.092.133.14.224.108l.934-.349c.098-.036.14-.133.108-.225-.032-.092-.133-.14-.224-.108l-.934.35c-.011.003-.02.008-.029.013z"/><path fill="#A0041E" d="M14.549 19.12s-1.718-1.063-2.419-1.602c-.699-.539-2.317-2.941-2.317-2.941s1.985-2.051 3.074-2.762l2.584 1.916 2.391-2.222s2.49.991 3.178 2.139c0 0-1.129 1.842-1.485 2.436-.017.458.008 1.039.238 1.069l-5.244 1.967z"/><path fill="#FFDC5D" d="M14.593 29.239l1.825-3.939c.215-.468.774-.673 1.242-.458.467.217.674.778.457 1.245l-1.822 3.941c-.217.468-.776.674-1.245.457-.467-.217-.672-.777-.457-1.246z"/><path fill="#FFDC5D" d="M14.07 34.202s.297-3.515.386-4.188c.089-.673.599-1.197 1.114-1.146.511.049.75.431.817 1.295.067.863-.959 3.206-.867 4.121.03.297.934.551.683.743-.111.085-.853.164-1.01.148l-.564.03c-.252-.025-.888.031-1.04-.149-.158-.188.454-.593.481-.854z"/><path fill="#DD2E44" d="M18.425 26.836s.568-.446.979-.776c0 0-.409-.721.615-1.479 1.025-.758 1.688-.396 1.688-.396s.231.09 1.038-.153c.383-.115 1.147-.307 1.147-.307s-.041-1.617-.267-2.601l-1.951-.077s-.203-.944-.529-1.22c-.328-.274-.523-.51-.771-.794-.691-.791-.6-2.399-.668-2.762 0 0-2.408.956-4.149 1.446-1.348.38-3.291.024-3.291.024.481.655 1.548 1.386 2.272 2.183.707.777 2.285 4.916 1.848 5.403-.438.487-1.062 1.535-1.062 1.535s.615.449 1.032.802c.584.493 1.072.613 1.072.613s.645-1.102.997-1.441z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f93e-1f3fb-200d-2640-fe0f.svg index a5921b505..46d9bdcab 100644 --- a/public/emoji/1f93e-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f93e-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#F7DECE" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#F7DECE" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#F7DECE" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#F7DECE" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#F7DECE" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#F7DECE" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#292F33" d="M20.292 1.188c-.699-.487-2.461-.66-3.656-.029-.615.325-1.011.778-1.248 1.298-.181-.193-.488-.359-1.016-.403-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.258-.138.452-.314.604-.498.01.089.015.177.03.266.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.388.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.308.462.395 1.561.395 1.561s.283-.678.479-1.333c.225-.75-.542-1.855-1.437-2.479z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#F7DECE"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#292F33" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#F7DECE" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f93e-1f3fb-200d-2642-fe0f.svg index af8a0563d..029896345 100644 --- a/public/emoji/1f93e-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f93e-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M21.25 5c0-1.657-1.175-3-2.625-3C17.176 2 16 3.343 16 5s.984 3 2.719 3c.661 0 1.736-.132 2.198-.594.55-.55.333-1.505.333-2.406z"/><path fill="#2A6797" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#F7DECE" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#F7DECE" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#F7DECE" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#F7DECE" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#F7DECE" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#2A6797" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#4289C1" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.135.417.198 1.198c.094 1.174-.202 4.902-.052 5.24 0 0-1.292-.333-3.188-.125-1.16.128-3.323.958-3.323.958.302-1.26.483-3.152.531-4.229.094-2.115-.389-3.609-1.026-3.759-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.075 1.613-.15z"/><circle fill="#269" cx="5" cy="8" r="2"/><path fill="#292F33" d="M20.292 1.188c-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24.803 1.754.803 1.754.229.247.837-.402.488-.95-.409-.643-.294-1.401.169-1.448.327-.034.678.158.584.451-.113.353.032.498.032.498s.269.192.54-.627c.142-.429 1.157-.362 2.648-1.038.176-.08.625.422.752 1.539.027.241.477-.502.54-1.044.103-.899-.543-1.855-1.438-2.479z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M28.648 31.324c.294.944.323 1.49.512 2.473.139.722.656 1.525 1.252 1.381.472-.114.821-.587.675-1.614-.078-.55-.238-.916-.45-1.477-.122-.324-.297-.771-.401-1.202-.114-.47-.484-.963-1.091-.816-.45.107-.693.627-.497 1.255z"/><path fill="#3B94D9" d="M29.952 31.074c-.026-.017-.255-.137-.58-.031-.325.106-.434.3-.448.328-.013.028.339.801.394 1.019.057.232.254.882.263.909.016.056.076.087.134.07l.62-.179c.059-.017.092-.076.076-.132l-.254-.878c-.071-.243-.178-1.089-.205-1.106z"/><path fill="#CCD6DD" d="M29.463 33.264c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.087.105.144.192.144zm-.22-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144zm-.218-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144z"/><path fill="#1C6399" d="M21.01 30.366c.189.97.423 1.465.723 2.419.22.701.146 1.653-.446 1.809-.469.124-1.001-.127-1.36-1.101-.192-.521-.225-.919-.306-1.514-.046-.343-.105-.819-.218-1.249-.123-.468-.031-1.077.573-1.236.447-.116.908.226 1.034.872z"/><path fill="#3B94D9" d="M20.725 30.544c-.026-.018-.252-.143-.579-.045-.327.098-.441.289-.456.317-.014.028.319.809.369 1.028.051.233.233.888.241.915.015.056.074.089.132.073l.624-.164c.059-.016.094-.074.079-.13l-.233-.883c-.064-.245-.15-1.093-.177-1.111z"/><path fill="#CCD6DD" d="M20.18 32.705c.017 0 .034-.002.051-.007l.951-.25c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.951.25c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.198-.752c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.199-.753c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.105.149.193.149z"/><g fill="#F7DECE"><path d="M20.093 24.067l2.664-1.668 1.149 2.757c.24.185.28.276 1.615 1.052 1.203.699 3.041 2.897 3.791 3.832.213.198.504.544.646 1.061-.566.137-1.023.266-1.023.266s-.171-.202-.466-.396c-1.438-.821-6.319-3.633-6.319-3.633-.394-.283-.64-.478-.78-.72l-.01.006c-.954-1.365-1.048-2.063-1.267-2.557zm-6.532-2.196l2.815 1.487c-.171.271-.513.854-.797 1.59-.083.213-.132.49.223.746.2.146.433.331.731.568.204.163.438.349.714.563.997.778 2.582 2.469 2.694 2.575.059.056.145.12.239.202.08.07.165.163.248.278.002.004.005.005.007.008l.002.005c.12.17.231.388.292.673-.087.019-.965.233-.965.233s-.164-.223-.464-.399c-.907-.513-5.677-3.215-6.356-3.703l-.062-.044c-.69-.495-.977-.699-.915-1.409.108-1.241 1.264-2.916 1.594-3.373zm8.389-11.505c-.03-.672.209-1.616 1.772-1.616 1.699 0 3.246.172 3.686.298.651.186.707-.9 1.002-1.952.295-1.056.577-2.448.546-2.676-.053-.384.461-3.239.505-3.282.072-.07.275.067.413.075.111.007.19.098.308.176.682.447.906 1.376.974 2 .042.386-.597 1.118-.661 1.525-.047.301-.154 4.237-.231 4.678-.095.539-.207 1.278-1.122 1.502-.916.223-4.298.317-5.205.406-1.039.102-1.947-.243-1.987-1.134zM2.177 12.341c.285-.018.335-.066.612-.059.406.01.393.062.577.059.399-.007.967-.038 1.387-.094.31-.041 1.968-.32 2.419-.413.614-.126 1.372-.353 2.786-.23v-.001c1.217-.728 3.875-1.827 4.754-2.147 1.009-.367 2.187 2.707.602 2.97-1.277.211-3.237 1.018-5.292 1.425l-.001-.032c-.023.016-.037.039-.062.052 0 0-1.491-.204-2.303-.259-1.124-.076-2.682-.406-3.092-.267-.518.176-1.068.34-1.715-.034-1.106-.639-2.212-.265-2.095-.794.026-.124.88-.142 1.423-.176zm15.996-7.515c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.328.048s.391 1.056-1.422 1.056-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><path d="M16.142 4.648c0-1.702 1.208-3.083 2.697-3.083s2.697 1.38 2.697 3.083-1.011 3.082-2.794 3.082c-.68 0-1.784-.136-2.258-.61-.565-.565-.342-1.547-.342-2.472z"/></g><path fill="#292F33" d="M17.126.73c.718-.5 2.529-.678 3.757-.029 1.386.732 1.733 2.08 1.502 3.466-.212 1.274-.825 1.802-.825 1.802-.235.254-.86-.413-.502-.977.42-.66.302-1.439-.174-1.488-.336-.034-.697.162-.6.464.116.363-.033.512-.033.512s-.277.197-.555-.644c-.146-.441-1.189-.372-2.721-1.066-.181-.082-.642.433-.772 1.581-.028.248-.491-.516-.555-1.073-.105-.923.558-1.906 1.478-2.548z"/><g fill="#1C6399"><path d="M21.211 17.894s.826 2.083 1.101 2.948c.275.865.848 1.848.848 1.848s-1.729 1.586-3.066 1.546l-1.843-3.299-2.021 2.896s-1.959-1.333-3.167-1.542c0 0 1.709-3.03 2.062-3.698.354-.668.75-1.094.75-1.094l5.336.395z"/><path d="M20.089 24.411c-.062-.002-.118-.036-.148-.09l-1.707-3.055-1.86 2.667c-.055.077-.163.097-.242.044-.019-.013-1.941-1.313-3.099-1.513-.056-.01-.104-.047-.128-.098-.024-.052-.022-.111.006-.161.017-.03 1.712-3.036 2.061-3.694.359-.681.76-1.113.776-1.131.036-.038.085-.06.141-.055l5.335.394c.067.005.125.047.15.11.034.085.831 2.099 1.105 2.96.266.836.827 1.804.833 1.813.042.071.027.161-.033.217-.072.066-1.754 1.593-3.136 1.593l-.054-.001zm2.055-3.516c-.235-.74-.887-2.406-1.056-2.834l-5.139-.379c-.118.138-.407.499-.67.995-.296.561-1.557 2.802-1.948 3.496 1.036.27 2.407 1.13 2.853 1.421l1.923-2.756c.034-.049.092-.072.152-.074.06.003.115.037.144.09l1.793 3.209c1.054-.035 2.366-1.089 2.741-1.409-.164-.298-.57-1.059-.793-1.759z"/></g><path fill="#4289C1" d="M22.141 8.562c-.812 0-1.45.072-1.99.111 0 0-.077.847-1.387.886-1.309.039-1.656-.655-1.656-.655s-1.411-.055-2.143.407l-1.606.685s.915 1.338.821 2.719l.74-.212s-.032.025-.068.525c-.088 1.207.208 5.343.054 5.69 0 0 1.521.536 3.469.75 1.192.131 3.703.106 3.703.106-.31-1.295-.529-3.545-.578-4.652-.096-2.173.497-3.318.708-3.298.896.083 1.729-.125 1.729-.125s-.375-.688-.292-1.458c.083-.771.312-1.292.312-1.292s-1.004-.187-1.816-.187z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#F7DECE" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.067-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fb.svg b/public/emoji/1f93e-1f3fb.svg index a5921b505..46d9bdcab 100644 --- a/public/emoji/1f93e-1f3fb.svg +++ b/public/emoji/1f93e-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#F7DECE" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#F7DECE" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#F7DECE" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#F7DECE" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#F7DECE" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#F7DECE" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#292F33" d="M20.292 1.188c-.699-.487-2.461-.66-3.656-.029-.615.325-1.011.778-1.248 1.298-.181-.193-.488-.359-1.016-.403-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.258-.138.452-.314.604-.498.01.089.015.177.03.266.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.388.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.308.462.395 1.561.395 1.561s.283-.678.479-1.333c.225-.75-.542-1.855-1.437-2.479z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#F7DECE"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#292F33" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#F7DECE" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f93e-1f3fc-200d-2640-fe0f.svg index c20722f95..2a6191fd9 100644 --- a/public/emoji/1f93e-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f93e-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#F3D2A2" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#FFE51E" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#F3D2A2" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#F3D2A2" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#F3D2A2" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#F3D2A2" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#F3D2A2" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#FFE51E" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#F3D2A2"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#FFE51E" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#F3D2A2" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f93e-1f3fc-200d-2642-fe0f.svg index f0d16c6cd..ac5a4bb89 100644 --- a/public/emoji/1f93e-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f93e-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M21.25 5c0-1.657-1.175-3-2.625-3C17.176 2 16 3.343 16 5s.984 3 2.719 3c.661 0 1.736-.132 2.198-.594.55-.55.333-1.505.333-2.406z"/><path fill="#4289C1" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#F3D2A2" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#F3D2A2" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#F3D2A2" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#F3D2A2" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#F3D2A2" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#2A6797" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#4289C1" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.135.417.198 1.198c.094 1.174-.202 4.902-.052 5.24 0 0-1.292-.333-3.188-.125-1.16.128-3.323.958-3.323.958.302-1.26.483-3.152.531-4.229.094-2.115-.389-3.609-1.026-3.759-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.075 1.613-.15z"/><circle fill="#269" cx="5" cy="8" r="2"/><path fill="#FFE51E" d="M20.292 1.188c-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24.803 1.754.803 1.754.229.247.837-.402.488-.95-.409-.643-.294-1.401.169-1.448.327-.034.678.158.584.451-.113.353.032.498.032.498s.269.192.54-.627c.142-.429 1.157-.362 2.648-1.038.176-.08.625.422.752 1.539.027.241.477-.502.54-1.044.103-.899-.543-1.855-1.438-2.479z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M28.648 31.324c.294.944.323 1.49.512 2.473.139.722.656 1.525 1.252 1.381.472-.114.821-.587.675-1.614-.078-.55-.238-.916-.45-1.477-.122-.324-.297-.771-.401-1.202-.114-.47-.484-.963-1.091-.816-.45.107-.693.627-.497 1.255z"/><path fill="#3B94D9" d="M29.952 31.074c-.026-.017-.255-.137-.58-.031-.325.106-.434.3-.448.328-.013.028.339.801.394 1.019.057.232.254.882.263.909.016.056.076.087.134.07l.62-.179c.059-.017.092-.076.076-.132l-.254-.878c-.071-.243-.178-1.089-.205-1.106z"/><path fill="#CCD6DD" d="M29.463 33.264c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.087.105.144.192.144zm-.22-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144zm-.218-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144z"/><path fill="#1C6399" d="M21.01 30.366c.189.97.423 1.465.723 2.419.22.701.146 1.653-.446 1.809-.469.124-1.001-.127-1.36-1.101-.192-.521-.225-.919-.306-1.514-.046-.343-.105-.819-.218-1.249-.123-.468-.031-1.077.573-1.236.447-.116.908.226 1.034.872z"/><path fill="#3B94D9" d="M20.725 30.544c-.026-.018-.252-.143-.579-.045-.327.098-.441.289-.456.317-.014.028.319.809.369 1.028.051.233.233.888.241.915.015.056.074.089.132.073l.624-.164c.059-.016.094-.074.079-.13l-.233-.883c-.064-.245-.15-1.093-.177-1.111z"/><path fill="#CCD6DD" d="M20.18 32.705c.017 0 .034-.002.051-.007l.951-.25c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.951.25c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.198-.752c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.199-.753c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.105.149.193.149z"/><g fill="#F3D2A2"><path d="M20.093 24.067l2.664-1.668 1.149 2.757c.24.185.28.276 1.615 1.052 1.203.699 3.041 2.897 3.791 3.832.213.198.504.544.646 1.061-.566.137-1.023.266-1.023.266s-.171-.202-.466-.396c-1.438-.821-6.319-3.633-6.319-3.633-.394-.283-.64-.478-.78-.72l-.01.006c-.954-1.365-1.048-2.063-1.267-2.557zm-6.532-2.196l2.815 1.487c-.171.271-.513.854-.797 1.59-.083.213-.132.49.223.746.2.146.433.331.731.568.204.163.438.349.714.563.997.778 2.582 2.469 2.694 2.575.059.056.145.12.239.202.08.07.165.163.248.278.002.004.005.005.007.008l.002.005c.12.17.231.388.292.673-.087.019-.965.233-.965.233s-.164-.223-.464-.399c-.907-.513-5.677-3.215-6.356-3.703l-.062-.044c-.69-.495-.977-.699-.915-1.409.108-1.241 1.264-2.916 1.594-3.373zm8.389-11.505c-.03-.672.209-1.616 1.772-1.616 1.699 0 3.246.172 3.686.298.651.186.707-.9 1.002-1.952.295-1.056.577-2.448.546-2.676-.053-.384.461-3.239.505-3.282.072-.07.275.067.413.075.111.007.19.098.308.176.682.447.906 1.376.974 2 .042.386-.597 1.118-.661 1.525-.047.301-.154 4.237-.231 4.678-.095.539-.207 1.278-1.122 1.502-.916.223-4.298.317-5.205.406-1.039.102-1.947-.243-1.987-1.134zM2.177 12.341c.285-.018.335-.066.612-.059.406.01.393.062.577.059.399-.007.967-.038 1.387-.094.31-.041 1.968-.32 2.419-.413.614-.126 1.372-.353 2.786-.23v-.001c1.217-.728 3.875-1.827 4.754-2.147 1.009-.367 2.187 2.707.602 2.97-1.277.211-3.237 1.018-5.292 1.425l-.001-.032c-.023.016-.037.039-.062.052 0 0-1.491-.204-2.303-.259-1.124-.076-2.682-.406-3.092-.267-.518.176-1.068.34-1.715-.034-1.106-.639-2.212-.265-2.095-.794.026-.124.88-.142 1.423-.176zm15.996-7.515c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.328.048s.391 1.056-1.422 1.056-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><path d="M16.142 4.648c0-1.702 1.208-3.083 2.697-3.083s2.697 1.38 2.697 3.083-1.011 3.082-2.794 3.082c-.68 0-1.784-.136-2.258-.61-.565-.565-.342-1.547-.342-2.472z"/></g><path fill="#FFE51E" d="M17.126.73c.718-.5 2.529-.678 3.757-.029 1.386.732 1.733 2.08 1.502 3.466-.212 1.274-.825 1.802-.825 1.802-.235.254-.86-.413-.502-.977.42-.66.302-1.439-.174-1.488-.336-.034-.697.162-.6.464.116.363-.033.512-.033.512s-.277.197-.555-.644c-.146-.441-1.189-.372-2.721-1.066-.181-.082-.642.433-.772 1.581-.028.248-.491-.516-.555-1.073-.105-.923.558-1.906 1.478-2.548z"/><g fill="#1C6399"><path d="M21.211 17.894s.826 2.083 1.101 2.948c.275.865.848 1.848.848 1.848s-1.729 1.586-3.066 1.546l-1.843-3.299-2.021 2.896s-1.959-1.333-3.167-1.542c0 0 1.709-3.03 2.062-3.698.354-.668.75-1.094.75-1.094l5.336.395z"/><path d="M20.089 24.411c-.062-.002-.118-.036-.148-.09l-1.707-3.055-1.86 2.667c-.055.077-.163.097-.242.044-.019-.013-1.941-1.313-3.099-1.513-.056-.01-.104-.047-.128-.098-.024-.052-.022-.111.006-.161.017-.03 1.712-3.036 2.061-3.694.359-.681.76-1.113.776-1.131.036-.038.085-.06.141-.055l5.335.394c.067.005.125.047.15.11.034.085.831 2.099 1.105 2.96.266.836.827 1.804.833 1.813.042.071.027.161-.033.217-.072.066-1.754 1.593-3.136 1.593l-.054-.001zm2.055-3.516c-.235-.74-.887-2.406-1.056-2.834l-5.139-.379c-.118.138-.407.499-.67.995-.296.561-1.557 2.802-1.948 3.496 1.036.27 2.407 1.13 2.853 1.421l1.923-2.756c.034-.049.092-.072.152-.074.06.003.115.037.144.09l1.793 3.209c1.054-.035 2.366-1.089 2.741-1.409-.164-.298-.57-1.059-.793-1.759z"/></g><path fill="#4289C1" d="M22.141 8.562c-.812 0-1.45.072-1.99.111 0 0-.077.847-1.387.886-1.309.039-1.656-.655-1.656-.655s-1.411-.055-2.143.407l-1.606.685s.915 1.338.821 2.719l.74-.212s-.032.025-.068.525c-.088 1.207.208 5.343.054 5.69 0 0 1.521.536 3.469.75 1.192.131 3.703.106 3.703.106-.31-1.295-.529-3.545-.578-4.652-.096-2.173.497-3.318.708-3.298.896.083 1.729-.125 1.729-.125s-.375-.688-.292-1.458c.083-.771.312-1.292.312-1.292s-1.004-.187-1.816-.187z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#F3D2A2" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.067-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fc.svg b/public/emoji/1f93e-1f3fc.svg index c20722f95..2a6191fd9 100644 --- a/public/emoji/1f93e-1f3fc.svg +++ b/public/emoji/1f93e-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#F3D2A2" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#FFE51E" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#F3D2A2" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#F3D2A2" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#F3D2A2" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#F3D2A2" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#F3D2A2" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#FFE51E" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#F3D2A2"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#FFE51E" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#F3D2A2" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f93e-1f3fd-200d-2640-fe0f.svg index 41c4eae0f..ca6f6c27c 100644 --- a/public/emoji/1f93e-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f93e-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#D5AB88" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#963B22" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#D5AB88" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#D5AB88" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#D5AB88" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#D5AB88" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#D5AB88" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#963B22" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#D4AB88"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#963B22" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#D4AB88" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f93e-1f3fd-200d-2642-fe0f.svg index 1c03769e9..63fe0d4c0 100644 --- a/public/emoji/1f93e-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f93e-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M21.25 5c0-1.657-1.175-3-2.625-3C17.176 2 16 3.343 16 5s.984 3 2.719 3c.661 0 1.736-.132 2.198-.594.55-.55.333-1.505.333-2.406z"/><path fill="#4289C1" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#D5AB88" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#D5AB88" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#D5AB88" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#D5AB88" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#D5AB88" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#2A6797" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#4289C1" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.135.417.198 1.198c.094 1.174-.202 4.902-.052 5.24 0 0-1.292-.333-3.188-.125-1.16.128-3.323.958-3.323.958.302-1.26.483-3.152.531-4.229.094-2.115-.389-3.609-1.026-3.759-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.075 1.613-.15z"/><circle fill="#269" cx="5" cy="8" r="2"/><path fill="#963B22" d="M20.292 1.188c-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24.803 1.754.803 1.754.229.247.837-.402.488-.95-.409-.643-.294-1.401.169-1.448.327-.034.678.158.584.451-.113.353.032.498.032.498s.269.192.54-.627c.142-.429 1.157-.362 2.648-1.038.176-.08.625.422.752 1.539.027.241.477-.502.54-1.044.103-.899-.543-1.855-1.438-2.479z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M28.648 31.324c.294.944.323 1.49.512 2.473.139.722.656 1.525 1.252 1.381.472-.114.821-.587.675-1.614-.078-.55-.238-.916-.45-1.477-.122-.324-.297-.771-.401-1.202-.114-.47-.484-.963-1.091-.816-.45.107-.693.627-.497 1.255z"/><path fill="#3B94D9" d="M29.952 31.074c-.026-.017-.255-.137-.58-.031-.325.106-.434.3-.448.328-.013.028.339.801.394 1.019.057.232.254.882.263.909.016.056.076.087.134.07l.62-.179c.059-.017.092-.076.076-.132l-.254-.878c-.071-.243-.178-1.089-.205-1.106z"/><path fill="#CCD6DD" d="M29.463 33.264c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.087.105.144.192.144zm-.22-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144zm-.218-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144z"/><path fill="#1C6399" d="M21.01 30.366c.189.97.423 1.465.723 2.419.22.701.146 1.653-.446 1.809-.469.124-1.001-.127-1.36-1.101-.192-.521-.225-.919-.306-1.514-.046-.343-.105-.819-.218-1.249-.123-.468-.031-1.077.573-1.236.447-.116.908.226 1.034.872z"/><path fill="#3B94D9" d="M20.725 30.544c-.026-.018-.252-.143-.579-.045-.327.098-.441.289-.456.317-.014.028.319.809.369 1.028.051.233.233.888.241.915.015.056.074.089.132.073l.624-.164c.059-.016.094-.074.079-.13l-.233-.883c-.064-.245-.15-1.093-.177-1.111z"/><path fill="#CCD6DD" d="M20.18 32.705c.017 0 .034-.002.051-.007l.951-.25c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.951.25c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.198-.752c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.199-.753c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.105.149.193.149z"/><g fill="#D4AB88"><path d="M20.093 24.067l2.664-1.668 1.149 2.757c.24.185.28.276 1.615 1.052 1.203.699 3.041 2.897 3.791 3.832.213.198.504.544.646 1.061-.566.137-1.023.266-1.023.266s-.171-.202-.466-.396c-1.438-.821-6.319-3.633-6.319-3.633-.394-.283-.64-.478-.78-.72l-.01.006c-.954-1.365-1.048-2.063-1.267-2.557zm-6.532-2.196l2.815 1.487c-.171.271-.513.854-.797 1.59-.083.213-.132.49.223.746.2.146.433.331.731.568.204.163.438.349.714.563.997.778 2.582 2.469 2.694 2.575.059.056.145.12.239.202.08.07.165.163.248.278.002.004.005.005.007.008l.002.005c.12.17.231.388.292.673-.087.019-.965.233-.965.233s-.164-.223-.464-.399c-.907-.513-5.677-3.215-6.356-3.703l-.062-.044c-.69-.495-.977-.699-.915-1.409.108-1.241 1.264-2.916 1.594-3.373zm8.389-11.505c-.03-.672.209-1.616 1.772-1.616 1.699 0 3.246.172 3.686.298.651.186.707-.9 1.002-1.952.295-1.056.577-2.448.546-2.676-.053-.384.461-3.239.505-3.282.072-.07.275.067.413.075.111.007.19.098.308.176.682.447.906 1.376.974 2 .042.386-.597 1.118-.661 1.525-.047.301-.154 4.237-.231 4.678-.095.539-.207 1.278-1.122 1.502-.916.223-4.298.317-5.205.406-1.039.102-1.947-.243-1.987-1.134zM2.177 12.341c.285-.018.335-.066.612-.059.406.01.393.062.577.059.399-.007.967-.038 1.387-.094.31-.041 1.968-.32 2.419-.413.614-.126 1.372-.353 2.786-.23v-.001c1.217-.728 3.875-1.827 4.754-2.147 1.009-.367 2.187 2.707.602 2.97-1.277.211-3.237 1.018-5.292 1.425l-.001-.032c-.023.016-.037.039-.062.052 0 0-1.491-.204-2.303-.259-1.124-.076-2.682-.406-3.092-.267-.518.176-1.068.34-1.715-.034-1.106-.639-2.212-.265-2.095-.794.026-.124.88-.142 1.423-.176zm15.996-7.515c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.328.048s.391 1.056-1.422 1.056-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><path d="M16.142 4.648c0-1.702 1.208-3.083 2.697-3.083s2.697 1.38 2.697 3.083-1.011 3.082-2.794 3.082c-.68 0-1.784-.136-2.258-.61-.565-.565-.342-1.547-.342-2.472z"/></g><path fill="#963B22" d="M17.126.73c.718-.5 2.529-.678 3.757-.029 1.386.732 1.733 2.08 1.502 3.466-.212 1.274-.825 1.802-.825 1.802-.235.254-.86-.413-.502-.977.42-.66.302-1.439-.174-1.488-.336-.034-.697.162-.6.464.116.363-.033.512-.033.512s-.277.197-.555-.644c-.146-.441-1.189-.372-2.721-1.066-.181-.082-.642.433-.772 1.581-.028.248-.491-.516-.555-1.073-.105-.923.558-1.906 1.478-2.548z"/><g fill="#1C6399"><path d="M21.211 17.894s.826 2.083 1.101 2.948c.275.865.848 1.848.848 1.848s-1.729 1.586-3.066 1.546l-1.843-3.299-2.021 2.896s-1.959-1.333-3.167-1.542c0 0 1.709-3.03 2.062-3.698.354-.668.75-1.094.75-1.094l5.336.395z"/><path d="M20.089 24.411c-.062-.002-.118-.036-.148-.09l-1.707-3.055-1.86 2.667c-.055.077-.163.097-.242.044-.019-.013-1.941-1.313-3.099-1.513-.056-.01-.104-.047-.128-.098-.024-.052-.022-.111.006-.161.017-.03 1.712-3.036 2.061-3.694.359-.681.76-1.113.776-1.131.036-.038.085-.06.141-.055l5.335.394c.067.005.125.047.15.11.034.085.831 2.099 1.105 2.96.266.836.827 1.804.833 1.813.042.071.027.161-.033.217-.072.066-1.754 1.593-3.136 1.593l-.054-.001zm2.055-3.516c-.235-.74-.887-2.406-1.056-2.834l-5.139-.379c-.118.138-.407.499-.67.995-.296.561-1.557 2.802-1.948 3.496 1.036.27 2.407 1.13 2.853 1.421l1.923-2.756c.034-.049.092-.072.152-.074.06.003.115.037.144.09l1.793 3.209c1.054-.035 2.366-1.089 2.741-1.409-.164-.298-.57-1.059-.793-1.759z"/></g><path fill="#4289C1" d="M22.141 8.562c-.812 0-1.45.072-1.99.111 0 0-.077.847-1.387.886-1.309.039-1.656-.655-1.656-.655s-1.411-.055-2.143.407l-1.606.685s.915 1.338.821 2.719l.74-.212s-.032.025-.068.525c-.088 1.207.208 5.343.054 5.69 0 0 1.521.536 3.469.75 1.192.131 3.703.106 3.703.106-.31-1.295-.529-3.545-.578-4.652-.096-2.173.497-3.318.708-3.298.896.083 1.729-.125 1.729-.125s-.375-.688-.292-1.458c.083-.771.312-1.292.312-1.292s-1.004-.187-1.816-.187z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#D4AB88" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.067-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fd.svg b/public/emoji/1f93e-1f3fd.svg index 41c4eae0f..ca6f6c27c 100644 --- a/public/emoji/1f93e-1f3fd.svg +++ b/public/emoji/1f93e-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#D5AB88" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#963B22" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#D5AB88" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#D5AB88" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#D5AB88" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#D5AB88" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#D5AB88" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#963B22" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#D4AB88"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#963B22" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#D4AB88" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f93e-1f3fe-200d-2640-fe0f.svg index 9cec4cdc3..692ed9d36 100644 --- a/public/emoji/1f93e-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f93e-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#AF7E57" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#60352A" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#AF7E57" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#AF7E57" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#AF7E57" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#AF7E57" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#AF7E57" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#60352A" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#AF7E57"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#60352A" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#AF7E57" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f93e-1f3fe-200d-2642-fe0f.svg index ec690db9d..5639542ce 100644 --- a/public/emoji/1f93e-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f93e-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M21.25 5c0-1.657-1.175-3-2.625-3C17.176 2 16 3.343 16 5s.984 3 2.719 3c.661 0 1.736-.132 2.198-.594.55-.55.333-1.505.333-2.406z"/><path fill="#4289C1" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#AF7E57" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#AF7E57" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#AF7E57" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#AF7E57" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#AF7E57" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#2A6797" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#4289C1" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.135.417.198 1.198c.094 1.174-.202 4.902-.052 5.24 0 0-1.292-.333-3.188-.125-1.16.128-3.323.958-3.323.958.302-1.26.483-3.152.531-4.229.094-2.115-.389-3.609-1.026-3.759-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.075 1.613-.15z"/><circle fill="#269" cx="5" cy="8" r="2"/><path fill="#60352A" d="M20.292 1.188c-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24.803 1.754.803 1.754.229.247.837-.402.488-.95-.409-.643-.294-1.401.169-1.448.327-.034.678.158.584.451-.113.353.032.498.032.498s.269.192.54-.627c.142-.429 1.157-.362 2.648-1.038.176-.08.625.422.752 1.539.027.241.477-.502.54-1.044.103-.899-.543-1.855-1.438-2.479z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M28.648 31.324c.294.944.323 1.49.512 2.473.139.722.656 1.525 1.252 1.381.472-.114.821-.587.675-1.614-.078-.55-.238-.916-.45-1.477-.122-.324-.297-.771-.401-1.202-.114-.47-.484-.963-1.091-.816-.45.107-.693.627-.497 1.255z"/><path fill="#3B94D9" d="M29.952 31.074c-.026-.017-.255-.137-.58-.031-.325.106-.434.3-.448.328-.013.028.339.801.394 1.019.057.232.254.882.263.909.016.056.076.087.134.07l.62-.179c.059-.017.092-.076.076-.132l-.254-.878c-.071-.243-.178-1.089-.205-1.106z"/><path fill="#CCD6DD" d="M29.463 33.264c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.087.105.144.192.144zm-.22-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144zm-.218-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144z"/><path fill="#1C6399" d="M21.01 30.366c.189.97.423 1.465.723 2.419.22.701.146 1.653-.446 1.809-.469.124-1.001-.127-1.36-1.101-.192-.521-.225-.919-.306-1.514-.046-.343-.105-.819-.218-1.249-.123-.468-.031-1.077.573-1.236.447-.116.908.226 1.034.872z"/><path fill="#3B94D9" d="M20.725 30.544c-.026-.018-.252-.143-.579-.045-.327.098-.441.289-.456.317-.014.028.319.809.369 1.028.051.233.233.888.241.915.015.056.074.089.132.073l.624-.164c.059-.016.094-.074.079-.13l-.233-.883c-.064-.245-.15-1.093-.177-1.111z"/><path fill="#CCD6DD" d="M20.18 32.705c.017 0 .034-.002.051-.007l.951-.25c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.951.25c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.198-.752c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.199-.753c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.105.149.193.149z"/><g fill="#AF7E57"><path d="M20.093 24.067l2.664-1.668 1.149 2.757c.24.185.28.276 1.615 1.052 1.203.699 3.041 2.897 3.791 3.832.213.198.504.544.646 1.061-.566.137-1.023.266-1.023.266s-.171-.202-.466-.396c-1.438-.821-6.319-3.633-6.319-3.633-.394-.283-.64-.478-.78-.72l-.01.006c-.954-1.365-1.048-2.063-1.267-2.557zm-6.532-2.196l2.815 1.487c-.171.271-.513.854-.797 1.59-.083.213-.132.49.223.746.2.146.433.331.731.568.204.163.438.349.714.563.997.778 2.582 2.469 2.694 2.575.059.056.145.12.239.202.08.07.165.163.248.278.002.004.005.005.007.008l.002.005c.12.17.231.388.292.673-.087.019-.965.233-.965.233s-.164-.223-.464-.399c-.907-.513-5.677-3.215-6.356-3.703l-.062-.044c-.69-.495-.977-.699-.915-1.409.108-1.241 1.264-2.916 1.594-3.373zm8.389-11.505c-.03-.672.209-1.616 1.772-1.616 1.699 0 3.246.172 3.686.298.651.186.707-.9 1.002-1.952.295-1.056.577-2.448.546-2.676-.053-.384.461-3.239.505-3.282.072-.07.275.067.413.075.111.007.19.098.308.176.682.447.906 1.376.974 2 .042.386-.597 1.118-.661 1.525-.047.301-.154 4.237-.231 4.678-.095.539-.207 1.278-1.122 1.502-.916.223-4.298.317-5.205.406-1.039.102-1.947-.243-1.987-1.134zM2.177 12.341c.285-.018.335-.066.612-.059.406.01.393.062.577.059.399-.007.967-.038 1.387-.094.31-.041 1.968-.32 2.419-.413.614-.126 1.372-.353 2.786-.23v-.001c1.217-.728 3.875-1.827 4.754-2.147 1.009-.367 2.187 2.707.602 2.97-1.277.211-3.237 1.018-5.292 1.425l-.001-.032c-.023.016-.037.039-.062.052 0 0-1.491-.204-2.303-.259-1.124-.076-2.682-.406-3.092-.267-.518.176-1.068.34-1.715-.034-1.106-.639-2.212-.265-2.095-.794.026-.124.88-.142 1.423-.176zm15.996-7.515c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.328.048s.391 1.056-1.422 1.056-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><path d="M16.142 4.648c0-1.702 1.208-3.083 2.697-3.083s2.697 1.38 2.697 3.083-1.011 3.082-2.794 3.082c-.68 0-1.784-.136-2.258-.61-.565-.565-.342-1.547-.342-2.472z"/></g><path fill="#60352A" d="M17.126.73c.718-.5 2.529-.678 3.757-.029 1.386.732 1.733 2.08 1.502 3.466-.212 1.274-.825 1.802-.825 1.802-.235.254-.86-.413-.502-.977.42-.66.302-1.439-.174-1.488-.336-.034-.697.162-.6.464.116.363-.033.512-.033.512s-.277.197-.555-.644c-.146-.441-1.189-.372-2.721-1.066-.181-.082-.642.433-.772 1.581-.028.248-.491-.516-.555-1.073-.105-.923.558-1.906 1.478-2.548z"/><g fill="#1C6399"><path d="M21.211 17.894s.826 2.083 1.101 2.948c.275.865.848 1.848.848 1.848s-1.729 1.586-3.066 1.546l-1.843-3.299-2.021 2.896s-1.959-1.333-3.167-1.542c0 0 1.709-3.03 2.062-3.698.354-.668.75-1.094.75-1.094l5.336.395z"/><path d="M20.089 24.411c-.062-.002-.118-.036-.148-.09l-1.707-3.055-1.86 2.667c-.055.077-.163.097-.242.044-.019-.013-1.941-1.313-3.099-1.513-.056-.01-.104-.047-.128-.098-.024-.052-.022-.111.006-.161.017-.03 1.712-3.036 2.061-3.694.359-.681.76-1.113.776-1.131.036-.038.085-.06.141-.055l5.335.394c.067.005.125.047.15.11.034.085.831 2.099 1.105 2.96.266.836.827 1.804.833 1.813.042.071.027.161-.033.217-.072.066-1.754 1.593-3.136 1.593l-.054-.001zm2.055-3.516c-.235-.74-.887-2.406-1.056-2.834l-5.139-.379c-.118.138-.407.499-.67.995-.296.561-1.557 2.802-1.948 3.496 1.036.27 2.407 1.13 2.853 1.421l1.923-2.756c.034-.049.092-.072.152-.074.06.003.115.037.144.09l1.793 3.209c1.054-.035 2.366-1.089 2.741-1.409-.164-.298-.57-1.059-.793-1.759z"/></g><path fill="#4289C1" d="M22.141 8.562c-.812 0-1.45.072-1.99.111 0 0-.077.847-1.387.886-1.309.039-1.656-.655-1.656-.655s-1.411-.055-2.143.407l-1.606.685s.915 1.338.821 2.719l.74-.212s-.032.025-.068.525c-.088 1.207.208 5.343.054 5.69 0 0 1.521.536 3.469.75 1.192.131 3.703.106 3.703.106-.31-1.295-.529-3.545-.578-4.652-.096-2.173.497-3.318.708-3.298.896.083 1.729-.125 1.729-.125s-.375-.688-.292-1.458c.083-.771.312-1.292.312-1.292s-1.004-.187-1.816-.187z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#AF7E57" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.067-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3fe.svg b/public/emoji/1f93e-1f3fe.svg index 9cec4cdc3..692ed9d36 100644 --- a/public/emoji/1f93e-1f3fe.svg +++ b/public/emoji/1f93e-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#AF7E57" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#60352A" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#AF7E57" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#AF7E57" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#AF7E57" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#AF7E57" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#AF7E57" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#60352A" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#AF7E57"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#60352A" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#AF7E57" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f93e-1f3ff-200d-2640-fe0f.svg index 70e6b8a7d..ec3b45f83 100644 --- a/public/emoji/1f93e-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f93e-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#7C533E" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#0B0200" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#7C533E" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#7C533E" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#7C533E" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#7C533E" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#7C533E" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#0B0200" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#7C533E"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#0B0200" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#7C533E" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f93e-1f3ff-200d-2642-fe0f.svg index b88ab08eb..1d547f9be 100644 --- a/public/emoji/1f93e-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f93e-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M21.25 5c0-1.657-1.175-3-2.625-3C17.176 2 16 3.343 16 5s.984 3 2.719 3c.661 0 1.736-.132 2.198-.594.55-.55.333-1.505.333-2.406z"/><path fill="#4289C1" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#7C533E" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#7C533E" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#7C533E" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#7C533E" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#7C533E" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#2A6797" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#4289C1" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.135.417.198 1.198c.094 1.174-.202 4.902-.052 5.24 0 0-1.292-.333-3.188-.125-1.16.128-3.323.958-3.323.958.302-1.26.483-3.152.531-4.229.094-2.115-.389-3.609-1.026-3.759-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.075 1.613-.15z"/><circle fill="#269" cx="5" cy="8" r="2"/><path fill="#0B0200" d="M20.292 1.188c-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24.803 1.754.803 1.754.229.247.837-.402.488-.95-.409-.643-.294-1.401.169-1.448.327-.034.678.158.584.451-.113.353.032.498.032.498s.269.192.54-.627c.142-.429 1.157-.362 2.648-1.038.176-.08.625.422.752 1.539.027.241.477-.502.54-1.044.103-.899-.543-1.855-1.438-2.479z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M28.648 31.324c.294.944.323 1.49.512 2.473.139.722.656 1.525 1.252 1.381.472-.114.821-.587.675-1.614-.078-.55-.238-.916-.45-1.477-.122-.324-.297-.771-.401-1.202-.114-.47-.484-.963-1.091-.816-.45.107-.693.627-.497 1.255z"/><path fill="#3B94D9" d="M29.952 31.074c-.026-.017-.255-.137-.58-.031-.325.106-.434.3-.448.328-.013.028.339.801.394 1.019.057.232.254.882.263.909.016.056.076.087.134.07l.62-.179c.059-.017.092-.076.076-.132l-.254-.878c-.071-.243-.178-1.089-.205-1.106z"/><path fill="#CCD6DD" d="M29.463 33.264c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.087.105.144.192.144zm-.22-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144zm-.218-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144z"/><path fill="#1C6399" d="M21.01 30.366c.189.97.423 1.465.723 2.419.22.701.146 1.653-.446 1.809-.469.124-1.001-.127-1.36-1.101-.192-.521-.225-.919-.306-1.514-.046-.343-.105-.819-.218-1.249-.123-.468-.031-1.077.573-1.236.447-.116.908.226 1.034.872z"/><path fill="#3B94D9" d="M20.725 30.544c-.026-.018-.252-.143-.579-.045-.327.098-.441.289-.456.317-.014.028.319.809.369 1.028.051.233.233.888.241.915.015.056.074.089.132.073l.624-.164c.059-.016.094-.074.079-.13l-.233-.883c-.064-.245-.15-1.093-.177-1.111z"/><path fill="#CCD6DD" d="M20.18 32.705c.017 0 .034-.002.051-.007l.951-.25c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.951.25c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.198-.752c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.199-.753c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.105.149.193.149z"/><g fill="#7C533E"><path d="M20.093 24.067l2.664-1.668 1.149 2.757c.24.185.28.276 1.615 1.052 1.203.699 3.041 2.897 3.791 3.832.213.198.504.544.646 1.061-.566.137-1.023.266-1.023.266s-.171-.202-.466-.396c-1.438-.821-6.319-3.633-6.319-3.633-.394-.283-.64-.478-.78-.72l-.01.006c-.954-1.365-1.048-2.063-1.267-2.557zm-6.532-2.196l2.815 1.487c-.171.271-.513.854-.797 1.59-.083.213-.132.49.223.746.2.146.433.331.731.568.204.163.438.349.714.563.997.778 2.582 2.469 2.694 2.575.059.056.145.12.239.202.08.07.165.163.248.278.002.004.005.005.007.008l.002.005c.12.17.231.388.292.673-.087.019-.965.233-.965.233s-.164-.223-.464-.399c-.907-.513-5.677-3.215-6.356-3.703l-.062-.044c-.69-.495-.977-.699-.915-1.409.108-1.241 1.264-2.916 1.594-3.373zm8.389-11.505c-.03-.672.209-1.616 1.772-1.616 1.699 0 3.246.172 3.686.298.651.186.707-.9 1.002-1.952.295-1.056.577-2.448.546-2.676-.053-.384.461-3.239.505-3.282.072-.07.275.067.413.075.111.007.19.098.308.176.682.447.906 1.376.974 2 .042.386-.597 1.118-.661 1.525-.047.301-.154 4.237-.231 4.678-.095.539-.207 1.278-1.122 1.502-.916.223-4.298.317-5.205.406-1.039.102-1.947-.243-1.987-1.134zM2.177 12.341c.285-.018.335-.066.612-.059.406.01.393.062.577.059.399-.007.967-.038 1.387-.094.31-.041 1.968-.32 2.419-.413.614-.126 1.372-.353 2.786-.23v-.001c1.217-.728 3.875-1.827 4.754-2.147 1.009-.367 2.187 2.707.602 2.97-1.277.211-3.237 1.018-5.292 1.425l-.001-.032c-.023.016-.037.039-.062.052 0 0-1.491-.204-2.303-.259-1.124-.076-2.682-.406-3.092-.267-.518.176-1.068.34-1.715-.034-1.106-.639-2.212-.265-2.095-.794.026-.124.88-.142 1.423-.176zm15.996-7.515c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.328.048s.391 1.056-1.422 1.056-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><path d="M16.142 4.648c0-1.702 1.208-3.083 2.697-3.083s2.697 1.38 2.697 3.083-1.011 3.082-2.794 3.082c-.68 0-1.784-.136-2.258-.61-.565-.565-.342-1.547-.342-2.472z"/></g><path fill="#0B0200" d="M17.126.73c.718-.5 2.529-.678 3.757-.029 1.386.732 1.733 2.08 1.502 3.466-.212 1.274-.825 1.802-.825 1.802-.235.254-.86-.413-.502-.977.42-.66.302-1.439-.174-1.488-.336-.034-.697.162-.6.464.116.363-.033.512-.033.512s-.277.197-.555-.644c-.146-.441-1.189-.372-2.721-1.066-.181-.082-.642.433-.772 1.581-.028.248-.491-.516-.555-1.073-.105-.923.558-1.906 1.478-2.548z"/><g fill="#1C6399"><path d="M21.211 17.894s.826 2.083 1.101 2.948c.275.865.848 1.848.848 1.848s-1.729 1.586-3.066 1.546l-1.843-3.299-2.021 2.896s-1.959-1.333-3.167-1.542c0 0 1.709-3.03 2.062-3.698.354-.668.75-1.094.75-1.094l5.336.395z"/><path d="M20.089 24.411c-.062-.002-.118-.036-.148-.09l-1.707-3.055-1.86 2.667c-.055.077-.163.097-.242.044-.019-.013-1.941-1.313-3.099-1.513-.056-.01-.104-.047-.128-.098-.024-.052-.022-.111.006-.161.017-.03 1.712-3.036 2.061-3.694.359-.681.76-1.113.776-1.131.036-.038.085-.06.141-.055l5.335.394c.067.005.125.047.15.11.034.085.831 2.099 1.105 2.96.266.836.827 1.804.833 1.813.042.071.027.161-.033.217-.072.066-1.754 1.593-3.136 1.593l-.054-.001zm2.055-3.516c-.235-.74-.887-2.406-1.056-2.834l-5.139-.379c-.118.138-.407.499-.67.995-.296.561-1.557 2.802-1.948 3.496 1.036.27 2.407 1.13 2.853 1.421l1.923-2.756c.034-.049.092-.072.152-.074.06.003.115.037.144.09l1.793 3.209c1.054-.035 2.366-1.089 2.741-1.409-.164-.298-.57-1.059-.793-1.759z"/></g><path fill="#4289C1" d="M22.141 8.562c-.812 0-1.45.072-1.99.111 0 0-.077.847-1.387.886-1.309.039-1.656-.655-1.656-.655s-1.411-.055-2.143.407l-1.606.685s.915 1.338.821 2.719l.74-.212s-.032.025-.068.525c-.088 1.207.208 5.343.054 5.69 0 0 1.521.536 3.469.75 1.192.131 3.703.106 3.703.106-.31-1.295-.529-3.545-.578-4.652-.096-2.173.497-3.318.708-3.298.896.083 1.729-.125 1.729-.125s-.375-.688-.292-1.458c.083-.771.312-1.292.312-1.292s-1.004-.187-1.816-.187z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#7C533E" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.067-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-1f3ff.svg b/public/emoji/1f93e-1f3ff.svg index 70e6b8a7d..ec3b45f83 100644 --- a/public/emoji/1f93e-1f3ff.svg +++ b/public/emoji/1f93e-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#7C533E" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#0B0200" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#7C533E" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#7C533E" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#7C533E" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#7C533E" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#7C533E" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#0B0200" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#7C533E"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#0B0200" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#7C533E" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-200d-2640-fe0f.svg b/public/emoji/1f93e-200d-2640-fe0f.svg index f1a18f046..28e86b3ef 100644 --- a/public/emoji/1f93e-200d-2640-fe0f.svg +++ b/public/emoji/1f93e-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#FFDC5D" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#FFAC33" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#FFDC5D" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#FFDC5D" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#FFDC5D" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#FFDC5D" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#FFDC5D" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#FFAC33" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#FFDC5D"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#FFAC33" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#FFDC5D" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e-200d-2642-fe0f.svg b/public/emoji/1f93e-200d-2642-fe0f.svg index 823171390..3efb4668b 100644 --- a/public/emoji/1f93e-200d-2642-fe0f.svg +++ b/public/emoji/1f93e-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M21.25 5c0-1.657-1.175-3-2.625-3C17.176 2 16 3.343 16 5s.984 3 2.719 3c.661 0 1.736-.132 2.198-.594.55-.55.333-1.505.333-2.406z"/><path fill="#4289C1" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#FFDC5D" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#FFDC5D" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#FFDC5D" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#FFDC5D" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#FFDC5D" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#2A6797" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#4289C1" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.135.417.198 1.198c.094 1.174-.202 4.902-.052 5.24 0 0-1.292-.333-3.188-.125-1.16.128-3.323.958-3.323.958.302-1.26.483-3.152.531-4.229.094-2.115-.389-3.609-1.026-3.759-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.075 1.613-.15z"/><circle fill="#269" cx="5" cy="8" r="2"/><path fill="#FFAC33" d="M20.292 1.188c-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24.803 1.754.803 1.754.229.247.837-.402.488-.95-.409-.643-.294-1.401.169-1.448.327-.034.678.158.584.451-.113.353.032.498.032.498s.269.192.54-.627c.142-.429 1.157-.362 2.648-1.038.176-.08.625.422.752 1.539.027.241.477-.502.54-1.044.103-.899-.543-1.855-1.438-2.479z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M28.648 31.324c.294.944.323 1.49.512 2.473.139.722.656 1.525 1.252 1.381.472-.114.821-.587.675-1.614-.078-.55-.238-.916-.45-1.477-.122-.324-.297-.771-.401-1.202-.114-.47-.484-.963-1.091-.816-.45.107-.693.627-.497 1.255z"/><path fill="#3B94D9" d="M29.952 31.074c-.026-.017-.255-.137-.58-.031-.325.106-.434.3-.448.328-.013.028.339.801.394 1.019.057.232.254.882.263.909.016.056.076.087.134.07l.62-.179c.059-.017.092-.076.076-.132l-.254-.878c-.071-.243-.178-1.089-.205-1.106z"/><path fill="#CCD6DD" d="M29.463 33.264c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.087.105.144.192.144zm-.22-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144zm-.218-.747c.019 0 .037-.002.057-.008l.944-.277c.105-.031.166-.142.136-.248-.031-.106-.137-.167-.249-.136l-.944.277c-.105.031-.166.142-.136.248.026.088.105.144.192.144z"/><path fill="#1C6399" d="M21.01 30.366c.189.97.423 1.465.723 2.419.22.701.146 1.653-.446 1.809-.469.124-1.001-.127-1.36-1.101-.192-.521-.225-.919-.306-1.514-.046-.343-.105-.819-.218-1.249-.123-.468-.031-1.077.573-1.236.447-.116.908.226 1.034.872z"/><path fill="#3B94D9" d="M20.725 30.544c-.026-.018-.252-.143-.579-.045-.327.098-.441.289-.456.317-.014.028.319.809.369 1.028.051.233.233.888.241.915.015.056.074.089.132.073l.624-.164c.059-.016.094-.074.079-.13l-.233-.883c-.064-.245-.15-1.093-.177-1.111z"/><path fill="#CCD6DD" d="M20.18 32.705c.017 0 .034-.002.051-.007l.951-.25c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.951.25c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.198-.752c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.104.149.193.149zm-.199-.753c.017 0 .034-.002.051-.007l.951-.251c.107-.028.171-.137.143-.244-.028-.106-.138-.172-.244-.142l-.951.251c-.107.028-.171.137-.143.244.023.09.105.149.193.149z"/><g fill="#FFDC5D"><path d="M20.093 24.067l2.664-1.668 1.149 2.757c.24.185.28.276 1.615 1.052 1.203.699 3.041 2.897 3.791 3.832.213.198.504.544.646 1.061-.566.137-1.023.266-1.023.266s-.171-.202-.466-.396c-1.438-.821-6.319-3.633-6.319-3.633-.394-.283-.64-.478-.78-.72l-.01.006c-.954-1.365-1.048-2.063-1.267-2.557zm-6.532-2.196l2.815 1.487c-.171.271-.513.854-.797 1.59-.083.213-.132.49.223.746.2.146.433.331.731.568.204.163.438.349.714.563.997.778 2.582 2.469 2.694 2.575.059.056.145.12.239.202.08.07.165.163.248.278.002.004.005.005.007.008l.002.005c.12.17.231.388.292.673-.087.019-.965.233-.965.233s-.164-.223-.464-.399c-.907-.513-5.677-3.215-6.356-3.703l-.062-.044c-.69-.495-.977-.699-.915-1.409.108-1.241 1.264-2.916 1.594-3.373zm8.389-11.505c-.03-.672.209-1.616 1.772-1.616 1.699 0 3.246.172 3.686.298.651.186.707-.9 1.002-1.952.295-1.056.577-2.448.546-2.676-.053-.384.461-3.239.505-3.282.072-.07.275.067.413.075.111.007.19.098.308.176.682.447.906 1.376.974 2 .042.386-.597 1.118-.661 1.525-.047.301-.154 4.237-.231 4.678-.095.539-.207 1.278-1.122 1.502-.916.223-4.298.317-5.205.406-1.039.102-1.947-.243-1.987-1.134zM2.177 12.341c.285-.018.335-.066.612-.059.406.01.393.062.577.059.399-.007.967-.038 1.387-.094.31-.041 1.968-.32 2.419-.413.614-.126 1.372-.353 2.786-.23v-.001c1.217-.728 3.875-1.827 4.754-2.147 1.009-.367 2.187 2.707.602 2.97-1.277.211-3.237 1.018-5.292 1.425l-.001-.032c-.023.016-.037.039-.062.052 0 0-1.491-.204-2.303-.259-1.124-.076-2.682-.406-3.092-.267-.518.176-1.068.34-1.715-.034-1.106-.639-2.212-.265-2.095-.794.026-.124.88-.142 1.423-.176zm15.996-7.515c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.328.048s.391 1.056-1.422 1.056-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><path d="M16.142 4.648c0-1.702 1.208-3.083 2.697-3.083s2.697 1.38 2.697 3.083-1.011 3.082-2.794 3.082c-.68 0-1.784-.136-2.258-.61-.565-.565-.342-1.547-.342-2.472z"/></g><path fill="#FFAC33" d="M17.126.73c.718-.5 2.529-.678 3.757-.029 1.386.732 1.733 2.08 1.502 3.466-.212 1.274-.825 1.802-.825 1.802-.235.254-.86-.413-.502-.977.42-.66.302-1.439-.174-1.488-.336-.034-.697.162-.6.464.116.363-.033.512-.033.512s-.277.197-.555-.644c-.146-.441-1.189-.372-2.721-1.066-.181-.082-.642.433-.772 1.581-.028.248-.491-.516-.555-1.073-.105-.923.558-1.906 1.478-2.548z"/><g fill="#1C6399"><path d="M21.211 17.894s.826 2.083 1.101 2.948c.275.865.848 1.848.848 1.848s-1.729 1.586-3.066 1.546l-1.843-3.299-2.021 2.896s-1.959-1.333-3.167-1.542c0 0 1.709-3.03 2.062-3.698.354-.668.75-1.094.75-1.094l5.336.395z"/><path d="M20.089 24.411c-.062-.002-.118-.036-.148-.09l-1.707-3.055-1.86 2.667c-.055.077-.163.097-.242.044-.019-.013-1.941-1.313-3.099-1.513-.056-.01-.104-.047-.128-.098-.024-.052-.022-.111.006-.161.017-.03 1.712-3.036 2.061-3.694.359-.681.76-1.113.776-1.131.036-.038.085-.06.141-.055l5.335.394c.067.005.125.047.15.11.034.085.831 2.099 1.105 2.96.266.836.827 1.804.833 1.813.042.071.027.161-.033.217-.072.066-1.754 1.593-3.136 1.593l-.054-.001zm2.055-3.516c-.235-.74-.887-2.406-1.056-2.834l-5.139-.379c-.118.138-.407.499-.67.995-.296.561-1.557 2.802-1.948 3.496 1.036.27 2.407 1.13 2.853 1.421l1.923-2.756c.034-.049.092-.072.152-.074.06.003.115.037.144.09l1.793 3.209c1.054-.035 2.366-1.089 2.741-1.409-.164-.298-.57-1.059-.793-1.759z"/></g><path fill="#4289C1" d="M22.141 8.562c-.812 0-1.45.072-1.99.111 0 0-.077.847-1.387.886-1.309.039-1.656-.655-1.656-.655s-1.411-.055-2.143.407l-1.606.685s.915 1.338.821 2.719l.74-.212s-.032.025-.068.525c-.088 1.207.208 5.343.054 5.69 0 0 1.521.536 3.469.75 1.192.131 3.703.106 3.703.106-.31-1.295-.529-3.545-.578-4.652-.096-2.173.497-3.318.708-3.298.896.083 1.729-.125 1.729-.125s-.375-.688-.292-1.458c.083-.771.312-1.292.312-1.292s-1.004-.187-1.816-.187z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#FFDC5D" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.067-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93e.svg b/public/emoji/1f93e.svg index f1a18f046..28e86b3ef 100644 --- a/public/emoji/1f93e.svg +++ b/public/emoji/1f93e.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#FFDC5D" cx="18.625" cy="5" rx="2.625" ry="3"/><path fill="#FFAC33" d="M15.63 3.212s.193-1.038-1.258-1.158c-1.196-.099-1.513 1.208-2.378 1.675-.653.352-1.4.364-1.921.013 0 0 .716.867 1.52 1.198 1.045.43 2.333.154 2.947-.175.96-.515 1.09-1.553 1.09-1.553z"/><path fill="#DD2E44" d="M17.967 33.355c-.552 0-1-.447-1-1v-3c0-.553.448-1 1-1s1 .447 1 1v3c0 .553-.448 1-1 1zm-9.431 1.076c-.199.094-.43.123-.661.067-.537-.13-.866-.671-.736-1.208l.669-2.76c.13-.535.669-.866 1.207-.736.537.13.866.671.736 1.208l-.669 2.76c-.074.306-.281.544-.546.669z"/><path fill="#FFDC5D" d="M19.73 9.107l-.457-3.933c-.061-.549-.574-.973-1.117-.908-.549.061-.951.543-.889 1.092l.4 3.642h-4.584L7.228 6.106c-.55-.091-1.06.278-1.151.822-.091.545.277 1.06.822 1.151l5.389 2.787c.054.01.657.134.712.134h2.749c.009.262.086.588.251 1 1 2.5 3 8 3 8 2.209 0 2.625-4.723 2.625-7.208 0-.604.299-.753.197-1.101 1.171-.152 1.334.359 1.874.487 0 0-1.799-3.26-3.966-3.071z"/><path fill="#FFDC5D" d="M14.177 26.122c-.456-.402-.56-1.088-.216-1.612l4.817-7.347c.376-.574 1.147-.735 1.72-.359.571.382.734 1.147.358 1.72l-4.817 7.347c-.376.574-1.147.735-1.72.359-.052-.032-.098-.069-.142-.108z"/><path fill="#FFDC5D" d="M8.628 31.08c-.308-.458-.268-1.066.116-1.42l5.382-4.971c.42-.389 1.094-.325 1.505.142.407.471.403 1.161-.018 1.549l-5.382 4.971c-.42.388-1.095.325-1.505-.142-.036-.042-.068-.085-.098-.129zm8.861-1.75c-.184-.479-.029-1.019.384-1.257l5.786-3.347c.452-.262 1.041-.062 1.315.447.271.511.131 1.133-.322 1.394l-5.786 3.347c-.452.261-1.041.061-1.315-.447-.024-.045-.044-.09-.062-.137z"/><path fill="#FFDC5D" d="M24.304 26.637c-.533.185-1.136-.044-1.403-.561l-3.745-7.25c-.293-.566-.071-1.263.495-1.555.569-.288 1.263-.071 1.555.496l3.745 7.25c.293.566.071 1.263-.495 1.555-.05.026-.1.047-.152.065zm0-13.611l-3.85-2.008c-.457-.238-.636-.807-.398-1.264.238-.457.807-.636 1.264-.397l3.85 2.008c.457.238.636.807.398 1.264-.238.457-.807.636-1.264.397z"/><path fill="#FFDC5D" d="M30.07 13.88l-5.302-.783c-.51-.075-.865-.554-.79-1.064.075-.51.554-.865 1.064-.79l5.302.783c.51.075.865.554.79 1.064-.075.51-.554.865-1.064.79z"/><path fill="#FFAC33" d="M21.25 5s.283-.678.479-1.333c.225-.75-.542-1.855-1.438-2.479-.699-.487-2.461-.66-3.656-.029-1.349.713-1.687 2.024-1.462 3.373.207 1.24 1.349 2.324 1.349 2.324s.414-1.064.227-1.085c-.347-.039-.555-1.105-.264-1.389.306-.299.6 0 .675.3.075.3.277 1.151.277 1.151s-.052-1.076.248-1.414c.3-.337 1.724-.262 2.324-1.724 0 0 .47.179.845.742.309.464.396 1.563.396 1.563z"/><path fill="#A0041E" d="M16.5 17.957s-.803 2.028-1.071 2.869c-.268.842-.825 1.799-.825 1.799s1.694 1.477 2.995 1.438l1.885-2.74 1.674 2.359s1.708-1.229 2.884-1.433c0 0-1.497-3.069-1.841-3.719-.344-.65-1.186-1.492-1.186-1.492l-4.515.919z"/><path fill="#DD2E44" d="M15.549 8.805s1.274.075 1.799.112c0 0 .075.825 1.349.862 1.274.037 1.612-.637 1.612-.637s.975.075 1.687.525c.712.45 1.799.975 1.799.975s-1.012.862-.637 1.799l-1.012-.483s.3.671.188 1.083c-.112.412-.479.75-.521 1.125-.116 1.044.329 3.892.479 4.229 0 0-1.292-.333-3.188-.125-1.16.128-3.125.958-3.125.958.021-.812.589-2.827.729-3.896.137-1.041-.785-3.942-1.422-4.092-.637-.15-1.125-.187-1.125-.187s.15-.675 0-1.199c-.15-.525-.225-.9-.225-.9s1.163-.074 1.613-.149z"/><circle fill="#269" cx="5" cy="8" r="2"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M28.65 31.29c.257.905.272 1.425.428 2.365.115.69.588 1.466 1.158 1.343.452-.097.795-.538.68-1.52-.061-.525-.205-.877-.393-1.416-.108-.311-.264-.74-.353-1.153-.097-.45-.438-.928-1.018-.802-.43.091-.674.58-.502 1.183z"/><path fill="#A0041E" d="M29.941 31.084c-.024-.017-.237-.141-.55-.054s-.425.267-.44.293c-.014.027.289.776.332.985.044.223.205.849.212.876.013.054.069.086.125.072l.597-.144c.056-.014.09-.068.077-.122l-.205-.845c-.058-.235-.123-1.044-.148-1.061z"/><path fill="#CCD6DD" d="M29.384 33.14c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.026-.107-.134-.173-.241-.147l-.91.22c-.107.026-.174.134-.147.241.023.091.104.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241-.025-.107-.135-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153zm-.174-.72c.016 0 .031-.002.047-.006l.91-.22c.107-.026.174-.134.147-.241s-.134-.174-.241-.147l-.91.22c-.107.026-.174.134-.147.241.022.092.103.153.194.153z"/><path fill="#DD2E44" d="M21.133 30.401c.18.923.402 1.394.688 2.302.21.667.139 1.573-.425 1.722-.447.118-.953-.12-1.294-1.047-.183-.496-.214-.875-.291-1.441-.044-.326-.1-.78-.207-1.188-.117-.445-.029-1.025.545-1.176.425-.113.864.213.984.828z"/><path fill="#A0041E" d="M20.862 30.571c-.024-.017-.24-.136-.551-.043-.311.094-.42.275-.434.302-.013.027.304.77.351.978.049.222.221.845.229.871.014.054.071.084.126.07l.594-.156c.056-.015.089-.07.075-.124l-.221-.841c-.062-.233-.144-1.041-.169-1.057z"/><path fill="#CCD6DD" d="M20.342 32.637c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.137-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149zm-.188-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.027-.106-.138-.172-.244-.142l-.905.239c-.107.028-.171.137-.143.244.023.089.104.149.193.149zm-.189-.716c.017 0 .034-.002.051-.007l.905-.239c.107-.028.171-.137.143-.244-.028-.106-.139-.173-.244-.142l-.905.239c-.107.028-.171.137-.143.244.024.089.105.149.193.149z"/><g fill="#FFDC5D"><path d="M19.958 24.146l2.5-1.438 1.281 2.614c.24.185.28.276 1.615 1.052 1.203.699 3.46 3.091 4.21 4.025.213.198.259.341.393.701l-1.023.266s-.182-.34-.476-.533c-1.438-.821-6.309-3.495-6.309-3.495-.394-.283-.64-.478-.78-.72 0 0-1.192-1.979-1.411-2.472zm-6.037-2.159l2.501 1.313c-.171.271-.513.854-.797 1.59-.083.213-.191.618.163.874.2.146.59.466.889.704.204.163.438.349.714.563.997.778 3.032 2.787 3.198 2.951.166.164.283.377.344.662-.087.019-.965.233-.965.233s-.123-.307-.421-.487c-.929-.561-6.214-3.599-6.214-3.599-.69-.495-1.067-.722-1.005-1.432.107-1.24 1.263-2.915 1.593-3.372zm8.503-12.665c.268-.28.705-.422 1.299-.422 1.689 0 3.358.215 3.783.3.118.023.173.024.301-.052.318-.188.435-.697.583-1.341.049-.217.102-.445.165-.672.279-1.001.588-2.46.55-2.736-.053-.384.312-3.219.356-3.262.071-.07.274.067.413.075.111.007.19.098.308.176.682.447.78 1.376.849 2 .042.386-.62 1.095-.684 1.502-.021.133-.048.804-.09 1.888-.044 1.135-.099 2.549-.141 2.788-.101.572-.208 1.186-1.01 1.382-.604.147-2.378.241-3.673.309-.65.035-1.213.064-1.512.093-.647.062-1.198-.058-1.515-.331-.192-.167-.296-.389-.309-.66-.016-.443.092-.793.327-1.037zM2.393 12.423c.285-.016.335-.059.612-.053.406.009.393.056.577.053.399-.006.967-.034 1.387-.084.31-.037 1.968-.116 2.419-.198.614-.113 1.384-.261 2.798-.152.794-.409 1.869-.87 2.823-1.279.699-.3 1.359-.583 1.802-.8.223-.109.442-.165.652-.165.156 0 .308.031.449.092.325.141.568.43.686.813.043.142.162.638-.108 1.073-.216.347-.624.573-1.214.671-.618.102-1.367.333-2.234.6-.857.265-1.82.561-2.804.772 0 0-1.555-.164-2.367-.213-1.124-.068-2.682-.362-3.092-.238-.518.157-1.068.303-1.715-.03-1.106-.569-2.212-.236-2.095-.707.027-.109.881-.125 1.424-.155zm15.779-7.43c.062-.564.59-1 1.148-.934.564.062.977.558.914 1.122l-.411 3.61.355.047s.363 1.057-1.449 1.057-1.621-.825-1.621-.825l.595-.113.469-3.964z"/><ellipse cx="18.833" cy="4.917" rx="2.625" ry="3"/></g><path fill="#FFAC33" d="M17.166 1.104c.699-.487 2.461-.66 3.656-.029.615.325 1.011.778 1.248 1.298.181-.193.487-.359 1.016-.403 1.196-.099 1.513 1.208 2.378 1.675.653.352 1.4.364 1.921.013 0 0-.716.867-1.52 1.198-1.045.43-2.333.154-2.947-.175-.258-.138-.452-.314-.604-.498-.01.089-.015.177-.03.266-.207 1.24-1.349 2.324-1.349 2.324s-.414-1.064-.227-1.085c.347-.039.555-1.105.264-1.389-.306-.299-.6 0-.675.3S20.02 5.75 20.02 5.75s.052-1.076-.248-1.414c-.3-.337-1.724-.262-2.324-1.724 0 0-.47.179-.845.742-.309.464-.396 1.562-.396 1.562s-.283-.678-.479-1.333c-.224-.749.543-1.855 1.438-2.479z"/><g fill="#A0041E"><path d="M20.896 18.375c.318 1.396 2.009 4.729 2.009 4.729s-1.639 1.477-2.987 1.437L17.963 21.7l-1.735 2.446s-1.713-1.274-2.931-1.485c0 0 1.666-3.182 2.023-3.856.357-.674 1.057-1.547 1.057-1.547s4.271.028 4.519 1.117z"/><path d="M19.815 24.612l-1.853-2.693-1.632 2.3c-.02.027-.049.046-.082.051-.032.004-.066-.003-.094-.022-.018-.013-1.703-1.259-2.879-1.463-.039-.007-.073-.032-.091-.067-.018-.036-.017-.078.002-.113 0 0 1.666-3.183 2.022-3.857.358-.676 1.042-1.53 1.07-1.566.023-.03.06-.047.098-.047h.001c.447.003 4.377.062 4.64 1.214.31 1.365 1.981 4.667 1.998 4.7.026.051.014.111-.028.149-.067.061-1.646 1.471-3.016 1.471-.058-.001-.123-.008-.156-.057zm.959-6.209c-.163-.714-2.72-1.001-4.336-1.019-.149.19-.707.912-1.008 1.479-.311.587-1.613 3.076-1.945 3.709 1.05.248 2.342 1.132 2.715 1.398l1.662-2.343c.023-.033.062-.053.102-.053h.001c.041 0 .079.021.102.054l1.918 2.788c1.115-.008 2.444-1.073 2.765-1.345-.275-.545-1.684-3.383-1.976-4.668z"/></g><path fill="#DD2E44" d="M22.043 8.722c-.549-.02-1.321.078-1.865.117 0 0-.078.855-1.399.894-1.321.039-1.671-.661-1.671-.661s-1.01.078-1.749.544c-.738.466-1.865.884-1.865.884s1.049 1.197.661 2.169l1.049-.315s-.352.593-.235 1.021c.117.427.538.88.581 1.269.12 1.082-.227 3.672-.383 4.021 0 0 1.225-.346 3.191-.13 1.202.133 3.042.965 3.042.965-.022-.842-.413-2.902-.559-4.01-.142-1.079.814-3.793 1.474-3.948.661-.155 1.166-.194 1.166-.194s-.155-.994 0-1.538.233-.933.233-.933-1.121-.135-1.671-.155z"/><circle fill="#269" cx="28.5" cy="2.917" r="2.055"/><path fill="#FFDC5D" d="M29.282 1.82l.079-.014c-.134.021-.261-.069-.284-.203-.023-.135.068-.265.204-.289l.513-.092.825.901.25.922-.817.15c-.135.023-.265-.068-.288-.204-.022-.129.064-.248.189-.279l-.22.038c-.135.023-.265-.068-.288-.204-.023-.131.065-.253.194-.282l-.271.046c-.135.023-.265-.068-.288-.204s.066-.263.202-.286z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f93f.svg b/public/emoji/1f93f.svg new file mode 100644 index 000000000..01239db87 --- /dev/null +++ b/public/emoji/1f93f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M21 25c-2.556 0-4.062-3.128-5.161-4.676-.412-.58-1.266-.58-1.677 0C13.062 21.872 11.557 25 9 25c-4.551 0-7.923-3.033-8.784-7.619C-.804 11.955 3.589 7 9.11 7h11.78c5.521 0 9.914 4.955 8.894 10.381C28.923 21.967 25.551 25 21 25z"/><path fill="#292F33" d="M18 22l-3-3-3 3-2 2c2 0 3 3 5 3s3-3 5-3l-2-2z"/><path fill="#4E9322" d="M21 25c-2.556 0-4.062-3.128-5.161-4.676-.412-.58-1.266-.58-1.677 0C13.062 21.872 11.557 25 9 25c-4.551 0-7.923-3.033-8.784-7.619C-.804 11.955 3.589 7 9.11 7h11.78c5.521 0 9.914 4.955 8.894 10.381C28.923 21.967 25.551 25 21 25z"/><path fill="#88C9F9" d="M21 23c-1.041 0-2.113-1.664-2.896-2.88-.226-.35-.437-.676-.635-.954-.568-.8-1.491-1.277-2.469-1.277-.979 0-1.901.477-2.469 1.275-.199.281-.41.606-.635.957C11.113 21.336 10.042 23 9 23c-3.512 0-6.125-2.295-6.819-5.988-.365-1.941.147-3.87 1.442-5.431C4.984 9.941 6.984 9 9.11 9h11.78c2.126 0 4.126.941 5.486 2.581 1.295 1.561 1.808 3.49 1.442 5.431C27.125 20.706 24.512 23 21 23z"/><path fill="#292F33" d="M26.761 11.262C25.305 9.507 23.165 8.5 20.89 8.5H9.11c-2.275 0-4.415 1.007-5.871 2.762-1.392 1.678-1.942 3.752-1.549 5.842C2.431 21.049 5.232 23.5 9 23.5c1.314 0 2.424-1.723 3.316-3.108.221-.344.428-.663.622-.938.475-.667 1.245-1.065 2.062-1.065s1.587.398 2.062 1.067c.194.272.401.593.622.935.892 1.385 2.002 3.109 3.316 3.109 3.769 0 6.569-2.45 7.31-6.396.393-2.089-.158-4.164-1.549-5.842zm.566 5.658c-.646 3.442-3.07 5.58-6.327 5.58-.769 0-1.837-1.659-2.476-2.651-.23-.356-.445-.688-.647-.972-.662-.931-1.737-1.487-2.877-1.487-1.14 0-2.215.555-2.877 1.486-.203.287-.417.618-.648.976-.639.99-1.706 2.648-2.475 2.648-3.256 0-5.681-2.139-6.328-5.581-.336-1.792.138-3.574 1.336-5.019 1.266-1.525 3.125-2.4 5.102-2.4h11.78c1.977 0 3.836.875 5.102 2.4 1.197 1.445 1.672 3.228 1.335 5.02z"/><path fill="#BBDDF5" d="M12.495 9.505l-8.977 8.977c.436 1.29 1.091 2.313 1.996 3.004L17.495 9.505h-5z"/><path fill="#3C96CE" d="M15 15c-1.837 0-3.674 4.215-5.511 7.227.827-.557 1.732-1.831 2.286-2.692.209-.325.405-.627.589-.888.527-.741 1.515-1.277 2.635-1.277 1.315 0 2.352.719 2.879 1.461.184.258.38.561.589.885.561.871 1.127 2.044 2.058 2.537C18.685 19.24 16.842 15 15 15z"/><path fill="#F4900C" d="M26 36c-3.557 0-6.874-1.914-8.659-4.995-.553-.956-.227-2.179.729-2.732.958-.554 2.18-.228 2.733.729C21.874 30.851 23.865 32 26 32c3.309 0 6-2.691 6-6V2c0-1.104.896-2 2-2s2 .896 2 2v24c0 5.514-4.486 10-10 10z"/><path fill="#292F33" d="M21.586 30.146l-3.732 1.44c-1.026.396-2.19-.12-2.586-1.146-.396-1.026.12-2.19 1.146-2.586l3.732-1.44c1.026-.396 2.19.12 2.586 1.146.396 1.027-.12 2.19-1.146 2.586z"/><path fill="#FFCC4D" d="M32 5h4v4h-4zm0 7h4v4h-4z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f947.svg b/public/emoji/1f947.svg index 94215a2d7..c67af77c6 100644 --- a/public/emoji/1f947.svg +++ b/public/emoji/1f947.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M28 0H8C5.042 0 2 5 3 7c1.612 3.225 12 13 12 13h6S31 10 33 7c1-2-2.333-7-5-7zm-4 8l-6 6-6-6c-.532-.532-.843-.919-.894-1.206C10.965 6.003 12.862 6 18 6c6.916 0 7.476.375 6.532 1.446-.147.168-.329.351-.532.554z"/><path fill="#3B88C3" d="M11.106 6.794C10.965 6.003 12.862 6 18 6c6.916 0 7.476.375 6.532 1.446C29.866 1.885 28.195 0 26 0H10c-3.579 0-1.01 4.097 1.106 6.794z"/><path fill="#FFAC33" d="M21.902 21.02c.06-.163.098-.337.098-.52 0-.828-.672-1.5-1.5-1.5h-5c-.829 0-1.5.672-1.5 1.5 0 .183.038.357.098.52C11.654 22.389 10 25 10 28c0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8 0-3-1.654-5.611-4.098-6.98z"/><path fill="#9E5200" d="M19.052 22.95h-1.291l-2.047 1.599c-.042.042-.084.154-.084.21v.884c0 .14.112.266.252.266h1.346v6.311c0 .141.112.267.267.267h1.557c.14 0 .252-.126.252-.267v-9.003c0-.141-.113-.267-.252-.267z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M18 8l-7-8H0l14 17 11.521-4.75z"/><path fill="#3B88C3" d="M25 0l-7 8 5.39 7.312 1.227-1.489L36 0z"/><path fill="#FFAC33" d="M23.205 16.026c.08-.217.131-.448.131-.693 0-1.104-.896-2-2-2h-6.667c-1.105 0-2 .896-2 2 0 .245.05.476.131.693-3.258 1.826-5.464 5.307-5.464 9.307C7.335 31.224 12.111 36 18.002 36s10.667-4.776 10.667-10.667c0-4-2.206-7.481-5.464-9.307z"/><path fill="#9E5200" d="M19.404 18.6h-1.721l-2.73 2.132c-.056.056-.112.206-.112.28v1.178c0 .186.15.354.337.354h1.795v8.414c0 .188.15.355.355.355h2.076c.186 0 .336-.168.336-.355V18.954c0-.186-.149-.354-.336-.354z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f948.svg b/public/emoji/1f948.svg index da0690fd9..685db6d15 100644 --- a/public/emoji/1f948.svg +++ b/public/emoji/1f948.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M28 0H8C5.042 0 2 5 3 7c1.612 3.225 12 13 12 13h6S31 10 33 7c1-2-2.333-7-5-7zm-4 8l-6 6-6-6c-.532-.532-.843-.919-.894-1.206C10.965 6.003 12.862 6 18 6c6.916 0 7.476.375 6.532 1.446-.147.168-.329.351-.532.554z"/><path fill="#3B88C3" d="M11.106 6.794C10.965 6.003 12.862 6 18 6c6.916 0 7.476.375 6.532 1.446C29.866 1.885 28.195 0 26 0H10c-3.579 0-1.01 4.097 1.106 6.794z"/><path fill="#CCD6DD" d="M21.902 21.02c.06-.163.098-.337.098-.52 0-.828-.672-1.5-1.5-1.5h-5c-.829 0-1.5.672-1.5 1.5 0 .183.038.357.098.52C11.654 22.389 10 25 10 28c0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8 0-3-1.654-5.611-4.098-6.98z"/><path fill="#627077" d="M21 30.69h-2.657c.659-.926 1.809-2.426 2.257-3.226.337-.659.547-1.079.547-1.822 0-1.557-1.178-2.833-3.183-2.833-1.669 0-2.805 1.374-2.805 1.374-.098.112-.084.28.014.365l.855.869c.112.112.28.112.393 0 .266-.295.785-.701 1.36-.701.785 0 1.235.477 1.235 1.01 0 .393-.183.785-.365 1.065-.828 1.262-2.903 4.081-3.716 5.146v.28c0 .141.112.267.266.267H21c.14 0 .267-.126.267-.267v-1.262c0-.139-.127-.265-.267-.265z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M18 8l-7-8H0l14 17 11.521-4.75z"/><path fill="#3B88C3" d="M25 0l-7 8 5.39 7.312 1.227-1.489L36 0z"/><path fill="#CCD6DD" d="M23.205 16.026c.08-.217.131-.448.131-.693 0-1.104-.896-2-2-2h-6.667c-1.105 0-2 .896-2 2 0 .245.05.476.131.693-3.258 1.826-5.464 5.307-5.464 9.307C7.335 31.224 12.111 36 18.002 36s10.667-4.776 10.667-10.667c0-4-2.206-7.481-5.464-9.307z"/><path fill="#627077" d="M22.002 28.921h-3.543c.878-1.234 2.412-3.234 3.01-4.301.449-.879.729-1.439.729-2.43 0-2.076-1.57-3.777-4.244-3.777-2.225 0-3.74 1.832-3.74 1.832-.131.15-.112.374.019.487l1.141 1.159c.149.15.374.15.523 0 .355-.393 1.047-.935 1.813-.935 1.047 0 1.646.635 1.646 1.346 0 .523-.243 1.047-.486 1.421-1.104 1.682-3.871 5.441-4.955 6.862v.374c0 .188.149.355.355.355h7.732c.186 0 .355-.168.355-.355v-1.682c.001-.188-.169-.356-.355-.356z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f949.svg b/public/emoji/1f949.svg index 3e56363e7..6bb5f773c 100644 --- a/public/emoji/1f949.svg +++ b/public/emoji/1f949.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M28 0H8C5.042 0 2 5 3 7c1.612 3.225 12 13 12 13h6S31 10 33 7c1-2-2.333-7-5-7zm-4 8l-6 6-6-6c-.532-.532-.843-.919-.894-1.206C10.965 6.003 12.862 6 18 6c6.916 0 7.476.375 6.532 1.446-.147.168-.329.351-.532.554z"/><path fill="#3B88C3" d="M11.106 6.794C10.965 6.003 12.862 6 18 6c6.916 0 7.476.375 6.532 1.446C29.866 1.885 28.195 0 26 0H10c-3.579 0-1.01 4.097 1.106 6.794z"/><path fill="#FF8A3B" d="M21.902 21.02c.06-.163.098-.337.098-.52 0-.828-.672-1.5-1.5-1.5h-5c-.829 0-1.5.672-1.5 1.5 0 .183.038.357.098.52C11.654 22.389 10 25 10 28c0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8 0-3-1.654-5.611-4.098-6.98z"/><path fill="#7C4119" d="M15.089 31.013l.884-.884c.098-.099.238-.112.351-.028 0 0 .869.646 1.542.646.604 0 1.221-.505 1.221-1.122s-.632-1.136-1.669-1.136h-.479c-.14 0-.266-.126-.266-.267v-1.164c0-.154.126-.267.266-.267h.479c.981 0 1.5-.477 1.5-1.079 0-.604-.519-1.052-1.122-1.052-.617 0-1.01.322-1.22.561-.099.112-.267.112-.378.015l-.855-.842c-.113-.099-.099-.267 0-.364 0 0 1.149-1.234 2.678-1.234 1.627 0 3.029.996 3.029 2.566 0 1.079-.813 1.879-1.444 2.173v.043c.659.28 1.696 1.149 1.696 2.355 0 1.528-1.332 2.679-3.268 2.679-1.766 0-2.664-.87-2.958-1.248-.086-.099-.071-.254.013-.351z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M18 8l-7-8H0l14 17 11.521-4.75z"/><path fill="#3B88C3" d="M25 0l-7 8 5.39 7.312 1.227-1.489L36 0z"/><path fill="#FF8A3B" d="M23.205 16.026c.08-.217.131-.448.131-.693 0-1.104-.896-2-2-2h-6.667c-1.105 0-2 .896-2 2 0 .245.05.476.131.693-3.258 1.826-5.464 5.307-5.464 9.307C7.335 31.224 12.111 36 18.002 36s10.667-4.776 10.667-10.667c0-4-2.206-7.481-5.464-9.307z"/><path fill="#7C4119" d="M14.121 29.35l1.178-1.178c.13-.132.318-.15.467-.038 0 0 1.159.861 2.056.861.805 0 1.628-.673 1.628-1.496s-.842-1.514-2.225-1.514h-.639c-.186 0-.354-.168-.354-.355v-1.552c0-.206.168-.355.354-.355h.639c1.309 0 2-.635 2-1.439 0-.805-.691-1.402-1.496-1.402-.823 0-1.346.43-1.626.747-.132.15-.355.15-.504.02l-1.141-1.122c-.151-.132-.132-.355 0-.486 0 0 1.533-1.646 3.57-1.646 2.169 0 4.039 1.328 4.039 3.422 0 1.439-1.085 2.505-1.926 2.897v.057c.879.374 2.262 1.533 2.262 3.141 0 2.038-1.776 3.572-4.357 3.572-2.354 0-3.552-1.16-3.944-1.664-.113-.134-.093-.34.019-.47z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f970.svg b/public/emoji/1f970.svg index 46c9627b9..6b063dfc8 100644 --- a/public/emoji/1f970.svg +++ b/public/emoji/1f970.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="18" cy="18" r="18"/><path fill="#664500" d="M16 16.958c-.419 0-.809-.265-.949-.684-.203-.599-1.018-2.316-2.051-2.316-1.062 0-1.888 1.827-2.051 2.316-.175.523-.738.808-1.265.632-.524-.174-.807-.741-.632-1.265.125-.377 1.304-3.684 3.949-3.684s3.823 3.307 3.949 3.684c.175.524-.108 1.091-.632 1.265-.106.036-.213.052-.318.052zm10 0c-.419 0-.809-.265-.948-.684-.203-.599-1.019-2.316-2.052-2.316-1.062 0-1.889 1.827-2.052 2.316-.175.523-.736.808-1.265.632-.523-.174-.807-.741-.632-1.265.125-.377 1.304-3.684 3.948-3.684s3.823 3.307 3.948 3.684c.175.524-.108 1.091-.632 1.265-.104.036-.21.052-.315.052zm1.335 3.733c-.178-.161-.444-.171-.635-.029-.039.029-3.922 2.9-8.7 2.9-4.766 0-8.662-2.871-8.7-2.9-.191-.142-.457-.13-.635.029-.177.16-.217.424-.094.628.129.215 3.217 5.243 9.429 5.243s9.301-5.028 9.429-5.243c.123-.205.084-.467-.094-.628z"/><path fill="#FFAC33" d="M21.229 3.947c0 .24.03.472.082.696.425 2.643 3.364 5.431 5.47 6.197 1.665-.605 3.846-2.476 4.898-4.539C29.59 3.861 26.86 1.987 23.75.939c-1.432.257-2.521 1.502-2.521 3.008zm-7.486 25.131c.057-.242.09-.494.09-.754 0-1.833-1.486-3.319-3.319-3.319-1.113 0-2.094.549-2.697 1.389-.602-.839-1.584-1.389-2.697-1.389-1.241 0-2.311.689-2.88 1.698 1.824 3.295 4.65 5.957 8.068 7.574 1.637-1.351 3.131-3.307 3.435-5.199zm20.558-3.436c-.282-.95-1.152-1.647-2.194-1.647-.771 0-1.451.38-1.868.962-.417-.582-1.097-.962-1.868-.962-1.27 0-2.299 1.029-2.299 2.299 0 .18.023.354.062.522.307 1.905 2.348 3.896 3.909 4.561 1.776-1.6 3.231-3.547 4.258-5.735z"/><path fill="#BE1931" d="M33.625 3.269c0-1.692-1.372-3.063-3.063-3.063-1.027 0-1.933.507-2.489 1.282C27.517.713 26.611.206 25.584.206c-1.692 0-3.063 1.371-3.063 3.063 0 .24.03.472.082.696.426 2.643 3.364 5.431 5.47 6.197 2.106-.766 5.044-3.554 5.469-6.196.053-.225.083-.457.083-.697zM12.208 28.408c0-1.833-1.486-3.319-3.319-3.319-1.113 0-2.094.549-2.697 1.389-.602-.84-1.584-1.389-2.697-1.389-1.833 0-3.319 1.486-3.319 3.319 0 .26.033.511.089.754.461 2.863 3.644 5.884 5.926 6.714 2.282-.829 5.465-3.85 5.926-6.713.058-.244.091-.496.091-.755zm23.74-2.281c0-1.27-1.029-2.299-2.299-2.299-.771 0-1.451.38-1.868.962-.417-.582-1.097-.962-1.868-.962-1.27 0-2.299 1.029-2.299 2.299 0 .18.023.354.062.522.319 1.983 2.524 4.076 4.105 4.65 1.58-.574 3.786-2.667 4.104-4.65.04-.168.063-.342.063-.522z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="18" cy="18" r="18"/><path fill="#664500" d="M16 16.958c-.419 0-.809-.265-.949-.684-.203-.599-1.018-2.316-2.051-2.316-1.062 0-1.888 1.827-2.051 2.316-.175.523-.738.808-1.265.632-.524-.174-.807-.741-.632-1.265.125-.377 1.304-3.684 3.949-3.684s3.823 3.307 3.949 3.684c.175.524-.108 1.091-.632 1.265-.106.036-.213.052-.318.052zm10 0c-.419 0-.809-.265-.948-.684-.203-.599-1.019-2.316-2.052-2.316-1.062 0-1.889 1.827-2.052 2.316-.175.523-.736.808-1.265.632-.523-.174-.807-.741-.632-1.265.125-.377 1.304-3.684 3.948-3.684s3.823 3.307 3.948 3.684c.175.524-.108 1.091-.632 1.265-.104.036-.21.052-.315.052zm1.335 3.733c-.178-.161-.444-.171-.635-.029-.039.029-3.922 2.9-8.7 2.9-4.766 0-8.662-2.871-8.7-2.9-.191-.142-.457-.13-.635.029-.177.16-.217.424-.094.628.129.215 3.217 5.243 9.429 5.243s9.301-5.028 9.429-5.243c.123-.205.084-.467-.094-.628z"/><path fill="#FFAC33" d="M21.229 3.947c0 .24.03.472.082.696.425 2.643 3.364 5.431 5.47 6.197 1.665-.605 3.846-2.476 4.898-4.539C29.59 3.861 26.86 1.987 23.75.939c-1.432.257-2.521 1.502-2.521 3.008zm-7.486 25.131c.057-.242.09-.494.09-.754 0-1.833-1.486-3.319-3.319-3.319-1.113 0-2.094.549-2.697 1.389-.602-.839-1.584-1.389-2.697-1.389-1.241 0-2.311.689-2.88 1.698 1.824 3.295 4.65 5.957 8.068 7.574 1.637-1.351 3.131-3.307 3.435-5.199zm20.558-3.436c-.282-.95-1.152-1.647-2.194-1.647-.771 0-1.451.38-1.868.962-.417-.582-1.097-.962-1.868-.962-1.27 0-2.299 1.029-2.299 2.299 0 .18.023.354.062.522.307 1.905 2.348 3.896 3.909 4.561 1.776-1.6 3.231-3.547 4.258-5.735z"/><path fill="#DD2E44" d="M33.625 3.269c0-1.692-1.372-3.063-3.063-3.063-1.027 0-1.933.507-2.489 1.282C27.517.713 26.611.206 25.584.206c-1.692 0-3.063 1.371-3.063 3.063 0 .24.03.472.082.696.426 2.643 3.364 5.431 5.47 6.197 2.106-.766 5.044-3.554 5.469-6.196.053-.225.083-.457.083-.697zM12.208 28.408c0-1.833-1.486-3.319-3.319-3.319-1.113 0-2.094.549-2.697 1.389-.602-.84-1.584-1.389-2.697-1.389-1.833 0-3.319 1.486-3.319 3.319 0 .26.033.511.089.754.461 2.863 3.644 5.884 5.926 6.714 2.282-.829 5.465-3.85 5.926-6.713.058-.244.091-.496.091-.755zm23.74-2.281c0-1.27-1.029-2.299-2.299-2.299-.771 0-1.451.38-1.868.962-.417-.582-1.097-.962-1.868-.962-1.27 0-2.299 1.029-2.299 2.299 0 .18.023.354.062.522.319 1.983 2.524 4.076 4.105 4.65 1.58-.574 3.786-2.667 4.104-4.65.04-.168.063-.342.063-.522z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f971.svg b/public/emoji/1f971.svg new file mode 100644 index 000000000..26444c6a2 --- /dev/null +++ b/public/emoji/1f971.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M35 17c0 9.389-7.611 17-17 17-9.388 0-17-7.611-17-17C1 7.612 8.612 0 18 0c9.389 0 17 7.612 17 17"/><ellipse fill="#664500" cx="18" cy="19.5" rx="7" ry="7.5"/><path fill="#F4900C" d="M22.468 27.371s.997-.721.165-1.614c-.832-.893-1.621.052-1.621.052l-4.148 3.866c-.069-.205-.459-.743-.55-.947l5.755-5.366s.998-.721.164-1.615c-.832-.892-1.622.051-1.622.051l-5.413 5.046c-.125-.158-.461-.54-.594-.698l6.276-5.85s.997-.722.164-1.614c-.832-.893-1.621.051-1.621.051l-6.278 5.848c-.15-.145-.612-.609-.764-.746l5.866-5.468s.996-.722.164-1.614c-.833-.893-1.621.051-1.621.051l-6.203 5.781-.497.464-.22.207s-.538.744-1.087.179l1.842-4.158s.58-1.074-.493-1.655c-1.075-.581-1.655.493-1.655.493l-1.668 2.758c-.663 1.093-1.349 2.178-2.159 3.167-2.284 2.793-2.211 6.914.318 9.629 2.759 2.959 7.396 3.122 10.355.364l.447-.418 6.698-6.244z"/><path fill="#664500" d="M11.016 6.08c-2.255.604-3.48 1.965-3.555 2.05-.364.415-.323 1.047.091 1.412.415.365 1.046.325 1.411-.091.079-.087 2.09-2.253 5.81-1.492.542.111 1.07-.239 1.18-.779.111-.541-.238-1.07-.779-1.18-1.635-.336-3.026-.223-4.158.08zm13.968.001c-1.132-.303-2.523-.416-4.159-.082-.541.111-.89.639-.779 1.18.112.541.639.89 1.18.779 3.724-.762 5.731 1.405 5.814 1.497.367.407 1 .444 1.41.078.41-.366.451-.991.088-1.404-.075-.084-1.3-1.444-3.554-2.048z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f97b.svg b/public/emoji/1f97b.svg new file mode 100644 index 000000000..d69d53d17 --- /dev/null +++ b/public/emoji/1f97b.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M26.785 9.606c-.071 3.25 1.712 8.071 4.491 14.867-1.01.423-6.747 2.074-8.961-.596s4.47-14.271 4.47-14.271z"/><path fill="#5C913B" d="M27.08 9.151c-.071 3.25 1.042 7.553 3.821 14.35-1.01.423-5.943 1.906-8.157-.764C20.53 20.066 27.08 9.151 27.08 9.151z"/><path fill="#FFAC33" d="M26.261 13.896c-.071 3.25 1.379 8.063 4.159 14.859-1.01.423-6.747 2.074-8.961-.596-2.215-2.67 4.802-14.263 4.802-14.263z"/><path fill="#77B255" d="M26.268 13.366c.34 2.964 1.042 7.553 3.821 14.35-1.01.423-5.943 1.906-8.157-.765-1.516-1.829-.556-11.372 1.23-14.78.821-1.567 3.106 1.195 3.106 1.195z"/><path fill="#9266CC" d="M26.916 15l4.389-1.379c.892-.28 1.355-1.257 1.005-2.124C30.977 8.198 27.541 1 22.916 1H13C8.374 1 4.936 8.203 3.605 11.501c-.349.865.113 1.84 1.003 2.119L9 15l1.726-.844C10.469 19.918 9.97 29.37 9 33.736c8 3 10 3 18 0-.968-4.355-1.467-13.785-1.724-19.538l1.64.802z"/><path fill="#553788" d="M25.271 14.182L24.916 7l2 8z"/><path fill="#FFAC33" d="M24.677 10.865C23.521 21.85 9.899 27.186 9.899 27.186s.531-7.102.754-11.469c10-5 12.39-14.685 12.39-14.685s.861-.149 1.381.252c.371 1.383.737 4.971.253 9.581z"/><path fill="#77B255" d="M24.201 6.587c0 11.851-14.166 18.754-14.166 18.754l.518-7.812s2.939-.973 7.322-4.823C22.65 8.512 23.34 1.063 23.34 1.063s.357-.104.683.074c.254.799.178 3.131.178 5.45z"/><path fill="#553788" d="M10.716 14.211L11 7l-2 8zM18 5.088c2.257 0 4.087-1.83 4.087-4.088h-8.175c.001 2.257 1.831 4.088 4.088 4.088z"/><path fill="#FFAC33" d="M3.843 10.926c-.085.2-.166.396-.238.575-.349.865.112 1.84 1.003 2.12L9 15l.046-.022c.121-.561.245-1.071.319-1.403-4.053-.952-5.396-1.267-5.522-2.649zm22.749 2.649c.075.335.201.855.324 1.425l4.362-1.37c.906-.285 1.377-1.277 1.021-2.158L32.103 11c-.168 1.318-1.534 1.641-5.511 2.575zM9.253 32.404c-.081.478-.164.932-.253 1.332 8 3 10 3 18 0-.094-.422-.182-.904-.267-1.414-7.803 3.829-14.327 1.451-17.48.082z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f983.svg b/public/emoji/1f983.svg index 550b5bbf7..e9de7de9e 100644 --- a/public/emoji/1f983.svg +++ b/public/emoji/1f983.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M22.88 33.097c-.098-.18-.25-.302-.418-.391C20.865 31 22 28.999 22 28.999c0-.553 1-2 0-2l-1 1c-1 1-1 4-1 4h-2c-.553 0-1 .447-1 1 0 .553.447 1 1 1h1.107l-.222.12c-.486.263-.667.869-.404 1.356.263.486.869.667 1.356.404l2.639-1.427c.486-.263.667-.869.404-1.355zm-7 0c-.097-.18-.25-.302-.417-.391C13.866 31 15 28.999 15 28.999c0-.553 1-2 0-2l-1 1c-1 1-1 4-1 4h-2c-.553 0-1 .447-1 1 0 .553.447 1 1 1h1.108l-.222.12c-.486.263-.667.869-.404 1.356.263.486.869.667 1.356.404l2.639-1.427c.485-.263.666-.869.403-1.355z"/><path fill="#BE1931" d="M5.134 7c2 5-3 5-2 7s5-2 3-7-1 0-1 0z"/><path fill="#FFAC33" d="M7 6c0 1.104 1.933 2 0 2S0 7 0 6s1.067-3 3-3 4 1.896 4 3z"/><path fill="#C1694F" d="M6 21C6 15 9.209 8 7 8 3 8 3 6.209 3 4s1.791-4 4-4c7 0 6 9 4 13-1.674 3.348-2.022 8-5 8z"/><path fill="#292F33" d="M36 17c0 7.959-5 11.3-10 11.249C23.966 30.045 21.073 31 18 31c-6.627 0-12-4.836-12-10.8 0-5.965 5.373-10.8 12-10.8 3-2.7 7-6.5 10-7.4 6 3.6 8 7.8 8 15z"/><circle fill="#292F33" cx="6" cy="3" r="1"/><path fill="#66757F" d="M17.984 9.4c-1.626.002-3.174.297-4.585.829 3.914-.229 6.351-.042 9.602 1.552-.923-1.515-3.392-2.381-5.017-2.381zm17.942 5.435c-.086-1.278-.254-2.456-.52-3.545-6.25 1.272-3.404 3.545.52 3.545zm-1.985-7.223c-.676-1.154-1.541-2.205-2.623-3.186-7.162 3.574-3.006 4.73 2.623 3.186zm1.212 14.473c-3.402-1.085-4.247.821-2.215 3.415-2.5-2.344-4.031-1.062-3.344 2-1.469-2.188-2.969-.208-3.594.749 3.761.038 7.52-1.844 9.153-6.164zM31.315 4.424C30.378 3.574 29.286 2.771 28 2c-7 3.688-2 4.406 3.315 2.424zm3.838 17.66C35.691 20.66 36 18.973 36 17c0-.755-.027-1.471-.074-2.163-4.61.382-3.801 2.882.006 3.351-3.557.062-4.181 2.25-.779 3.896zm-1.21-14.469c-6.427 2.385-3.693 4.291 1.462 3.673-.328-1.344-.808-2.557-1.462-3.673z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M22.88 33.097c-.098-.18-.25-.302-.418-.391C20.865 31 22 28.999 22 28.999c0-.553 1-2 0-2l-1 1c-1 1-1 4-1 4h-2c-.553 0-1 .447-1 1 0 .553.447 1 1 1h1.107l-.222.12c-.486.263-.667.869-.404 1.356.263.486.869.667 1.356.404l2.639-1.427c.486-.263.667-.869.404-1.355zm-7 0c-.097-.18-.25-.302-.417-.391C13.866 31 15 28.999 15 28.999c0-.553 1-2 0-2l-1 1c-1 1-1 4-1 4h-2c-.553 0-1 .447-1 1 0 .553.447 1 1 1h1.108l-.222.12c-.486.263-.667.869-.404 1.356.263.486.869.667 1.356.404l2.639-1.427c.485-.263.666-.869.403-1.355z"/><path fill="#BE1931" d="M5.134 7c2 5-3 5-2 7s5-2 3-7-1 0-1 0z"/><path fill="#FFAC33" d="M7 6c0 1.104 1.933 2 0 2S0 7 0 6s1.067-3 3-3 4 1.896 4 3z"/><path fill="#C1694F" d="M6 21C6 15 9.209 8 7 8 3 8 3 6.209 3 4s1.791-4 4-4c7 0 6 9 4 13-1.674 3.348-2.022 8-5 8z"/><path fill="#31373D" d="M36 17c0 7.959-5 11.3-10 11.249C23.966 30.045 21.073 31 18 31c-6.627 0-12-4.836-12-10.8 0-5.965 5.373-10.8 12-10.8 3-2.7 7-6.5 10-7.4 6 3.6 8 7.8 8 15z"/><circle fill="#292F33" cx="6" cy="3" r="1"/><path fill="#66757F" d="M17.984 9.4c-1.626.002-3.174.297-4.585.829 3.914-.229 6.351-.042 9.602 1.552-.923-1.515-3.392-2.381-5.017-2.381zm17.942 5.435c-.086-1.278-.254-2.456-.52-3.545-6.25 1.272-3.404 3.545.52 3.545zm-1.985-7.223c-.676-1.154-1.541-2.205-2.623-3.186-7.162 3.574-3.006 4.73 2.623 3.186zm1.212 14.473c-3.402-1.085-4.247.821-2.215 3.415-2.5-2.344-4.031-1.062-3.344 2-1.469-2.188-2.969-.208-3.594.749 3.761.038 7.52-1.844 9.153-6.164zM31.315 4.424C30.378 3.574 29.286 2.771 28 2c-7 3.688-2 4.406 3.315 2.424zm3.838 17.66C35.691 20.66 36 18.973 36 17c0-.755-.027-1.471-.074-2.163-4.61.382-3.801 2.882.006 3.351-3.557.062-4.181 2.25-.779 3.896zm-1.21-14.469c-6.427 2.385-3.693 4.291 1.462 3.673-.328-1.344-.808-2.557-1.462-3.673z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f984.svg b/public/emoji/1f984.svg index 81f0633e5..19d9ff161 100644 --- a/public/emoji/1f984.svg +++ b/public/emoji/1f984.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9266CC" d="M36 19.854C33.518 9.923 25.006 1.909 16.031 6.832c0 0-4.521-1.496-5.174-1.948-.635-.44-1.635-.904-.912.436.423.782.875 1.672 2.403 3.317C8 12.958 9.279 18.262 7.743 21.75c-1.304 2.962-2.577 4.733-1.31 6.976 1.317 2.33 4.73 3.462 7.018 1.06 1.244-1.307.471-1.937 3.132-4.202 2.723-.543 4.394-1.791 4.394-4.375 0 0 .795-.382 1.826 6.009.456 2.818-.157 5.632-.039 8.783H36V19.854z"/><path fill="#55ACEE" d="M36 10.956c-.749-1.038-1.281-3.019-4.094-4.894.531 1.312.848 3.71.595 5.318-.15-3.923-3.188-6.581-4.376-7.193-2.202-1.137-4.372-.979-6.799-.772.111.168.403.814.32 1.547-.479-.875-1.604-1.42-2.333-1.271-3.499.713-5.974 2.232-5.091 3.856 8.937-3.477 14.643 2.161 17.736 8.704.769 1.625 2.611 7.132 4.041 10.292V10.956z"/><path fill="#55ACEE" d="M16.897 6.731c-2.12.564-5.26 2.509-6.537 4.573 0 0-2.589.655-3.631-1.845 2.563.827 4.826-2.339 6.737-3.511 4.028-2.468 3.314-.186 3.314-.186l.117.969z"/><path fill="#F4900C" d="M13.848 8.122l-.005-.007C13.127 7.406.948-.51.219.219s10.224 9.523 10.93 10.061l.011.006c.738-.806 1.69-1.551 2.688-2.164z"/><path fill="#9266CC" d="M13.789 3.662c.573.788 3.236.794 4.596 3.82 1.359 3.026-1.943 2.63-3.14 1.23-1.334-1.561-1.931-2.863-2.165-3.992-.124-.596-.451-2.649.709-1.058z"/><path fill="#744EAA" d="M14.209 4.962c.956.573 2.164 1.515 2.517 2.596.352 1.081-.707.891-1.349-.042-.641-.934-.939-1.975-1.285-2.263-.346-.289.117-.291.117-.291z"/><path fill="#292F33" d="M16.185 14.396c.093.514-.248 1.006-.762 1.099-.514.093-1.006-.248-1.099-.761-.093-.513.248-1.006.762-1.099.515-.093 1.006.248 1.099.761z"/><path fill="#744EAA" d="M8.63 26.877c.119.658-.181 1.263-.67 1.351-.49.089-.984-.372-1.104-1.03-.119-.659.182-1.265.671-1.354.49-.088.984.373 1.103 1.033z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1CDD5" d="M36 19.854C33.518 9.923 25.006 1.909 16.031 6.832c0 0-4.522-1.496-5.174-1.948-.635-.44-1.635-.904-.912.436.423.782.875 1.672 2.403 3.317C8 12.958 9.279 18.262 7.743 21.75c-1.304 2.962-2.577 4.733-1.31 6.976 1.317 2.33 4.729 3.462 7.018 1.06 1.244-1.307.471-1.937 3.132-4.202 2.723-.543 4.394-1.791 4.394-4.375 0 0 .795-.382 1.826 6.009.456 2.818-.157 5.632-.039 8.783H36V19.854z"/><path fill="#60379A" d="M31.906 6.062c.531 1.312.848 3.71.595 5.318-.15-3.923-3.188-6.581-4.376-7.193-2.202-1.137-4.372-.979-6.799-.772.111.168.403.814.32 1.547-.479-.875-1.604-1.42-2.333-1.271-1.36.277-2.561.677-3.475 1.156-.504.102-1.249.413-2.372 1.101-1.911 1.171-4.175 4.338-6.737 3.511 1.042 2.5 3.631 1.845 3.631 1.845 1.207-1.95 4.067-3.779 6.168-4.452 7.619-1.745 12.614 3.439 15.431 9.398.768 1.625 2.611 7.132 4.041 10.292V10.956c-.749-1.038-1.281-3.018-4.094-4.894z"/><path fill="#C1CDD5" d="M13.789 3.662c.573.788 3.236.794 4.596 3.82 1.359 3.026-1.943 2.63-3.14 1.23-1.334-1.561-1.931-2.863-2.165-3.992-.124-.596-.451-2.649.709-1.058z"/><path fill="#758795" d="M14.209 4.962c.956.573 2.164 1.515 2.517 2.596.351 1.081-.707.891-1.349-.042-.641-.934-.94-1.975-1.285-2.263-.346-.289.117-.291.117-.291z"/><circle fill="#292F33" cx="15.255" cy="14.565" r=".946"/><path fill="#53626C" d="M8.63 26.877c.119.658-.181 1.263-.67 1.351-.49.089-.984-.372-1.104-1.03-.119-.659.182-1.265.671-1.354.49-.088.984.373 1.103 1.033z"/><path fill="#EE7C0E" d="M13.844 8.124l.003-.002-.005-.007-.016-.014c-.008-.007-.011-.019-.019-.025-.009-.007-.021-.011-.031-.018C12.621 7.078.933-.495.219.219-.51.948 10.443 9.742 11.149 10.28l.011.006.541.439c.008.007.01.018.018.024.013.01.028.015.042.024l.047.038-.009-.016c.565.361 1.427.114 1.979-.592.559-.715.577-1.625.066-2.079z"/><path fill="#C43512" d="M4.677 2.25l.009-.025c-.301-.174-.594-.341-.878-.5-.016.038-.022.069-.041.11-.112.243-.256.484-.429.716-.166.224-.349.424-.541.595-.02.018-.036.026-.056.043.238.22.489.446.745.676.234-.21.456-.449.654-.717.214-.287.395-.589.537-.898zm2.275 2.945c.306-.41.521-.822.66-1.212-.292-.181-.584-.36-.876-.538-.076.298-.247.699-.586 1.152-.31.417-.613.681-.864.845.259.223.52.445.779.665.314-.244.619-.552.887-.912zM9.87 7.32c.365-.49.609-.983.734-1.437l-.906-.586c-.023.296-.172.81-.631 1.425-.412.554-.821.847-1.1.978l.814.671c.381-.256.761-.611 1.089-1.051z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f98d.svg b/public/emoji/1f98d.svg index fcfe2cf7f..aa5992325 100644 --- a/public/emoji/1f98d.svg +++ b/public/emoji/1f98d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M5 16c0-4-5-3-4 1s3 5 3 5l1-6zm26 0c0-4 5-3 4 1s-3 5-3 5l-1-6z"/><path fill="#292F33" d="M32.65 21.736c0 10.892-4.691 14.087-14.65 14.087-9.958 0-14.651-3.195-14.651-14.087S8.042.323 18 .323c9.959 0 14.65 10.521 14.65 21.413z"/><path fill="#66757F" d="M27.567 23c1.49-4.458 2.088-7.312-.443-7.312H8.876c-2.532 0-1.933 2.854-.444 7.312C3.504 34.201 17.166 34.823 18 34.823S32.303 33.764 27.567 23z"/><path fill="#292F33" d="M15 18.003c0 1.105-.896 2-2 2s-2-.895-2-2c0-1.104.896-1 2-1s2-.105 2 1zm10 0c0 1.105-.896 2-2 2s-2-.895-2-2c0-1.104.896-1 2-1s2-.105 2 1z"/><ellipse fill="#292F33" cx="15.572" cy="23.655" rx="1.428" ry="1"/><path fill="#292F33" d="M21.856 23.655c0 .553-.639 1-1.428 1-.79 0-1.429-.447-1.429-1 0-.553.639-1 1.429-1s1.428.448 1.428 1z"/><path fill="#99AAB5" d="M21.02 21.04c-1.965-.26-3.02.834-3.02.834s-1.055-1.094-3.021-.834c-3.156.417-3.285 3.287-1.939 3.105.766-.104.135-.938 1.713-1.556 1.579-.616 3.247.66 3.247.66s1.667-1.276 3.246-.659.947 1.452 1.714 1.556c1.346.181 1.218-2.689-1.94-3.106z"/><path fill="#292F33" d="M24.835 30.021c-1.209.323-3.204.596-6.835.596s-5.625-.272-6.835-.596c-3.205-.854-1.923-1.735 0-1.477 1.923.259 3.631.415 6.835.415 3.205 0 4.914-.156 6.835-.415 1.923-.258 3.204.623 0 1.477z"/><path fill="#66757F" d="M4.253 16.625c1.403-1.225-1.078-3.766-2.196-2.544-.341.373.921-.188 1.336 1.086.308.942.001 2.208.86 1.458zm27.493 0c-1.402-1.225 1.078-3.766 2.196-2.544.341.373-.921-.188-1.337 1.086-.306.942 0 2.208-.859 1.458z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M5 16c0-4-5-3-4 1s3 5 3 5l1-6zm26 0c0-4 5-3 4 1s-3 5-3 5l-1-6z"/><path fill="#31373D" d="M32.65 21.736c0 10.892-4.691 14.087-14.65 14.087-9.958 0-14.651-3.195-14.651-14.087S8.042.323 18 .323c9.959 0 14.65 10.521 14.65 21.413z"/><path fill="#66757F" d="M27.567 23c1.49-4.458 2.088-7.312-.443-7.312H8.876c-2.532 0-1.933 2.854-.444 7.312C3.504 34.201 17.166 34.823 18 34.823S32.303 33.764 27.567 23z"/><path fill="#31373D" d="M15 18.003c0 1.105-.896 2-2 2s-2-.895-2-2c0-1.104.896-1 2-1s2-.105 2 1zm10 0c0 1.105-.896 2-2 2s-2-.895-2-2c0-1.104.896-1 2-1s2-.105 2 1z"/><ellipse fill="#31373D" cx="15.572" cy="23.655" rx="1.428" ry="1"/><path fill="#31373D" d="M21.856 23.655c0 .553-.639 1-1.428 1-.79 0-1.429-.447-1.429-1 0-.553.639-1 1.429-1s1.428.448 1.428 1z"/><path fill="#99AAB5" d="M21.02 21.04c-1.965-.26-3.02.834-3.02.834s-1.055-1.094-3.021-.834c-3.156.417-3.285 3.287-1.939 3.105.766-.104.135-.938 1.713-1.556 1.579-.616 3.247.66 3.247.66s1.667-1.276 3.246-.659.947 1.452 1.714 1.556c1.346.181 1.218-2.689-1.94-3.106z"/><path fill="#31373D" d="M24.835 30.021c-1.209.323-3.204.596-6.835.596s-5.625-.272-6.835-.596c-3.205-.854-1.923-1.735 0-1.477 1.923.259 3.631.415 6.835.415 3.205 0 4.914-.156 6.835-.415 1.923-.258 3.204.623 0 1.477z"/><path fill="#66757F" d="M4.253 16.625c1.403-1.225-1.078-3.766-2.196-2.544-.341.373.921-.188 1.336 1.086.308.942.001 2.208.86 1.458zm27.493 0c-1.402-1.225 1.078-3.766 2.196-2.544.341.373-.921-.188-1.337 1.086-.306.942 0 2.208-.859 1.458z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f992.svg b/public/emoji/1f992.svg index 594e4e5ba..233e3c989 100644 --- a/public/emoji/1f992.svg +++ b/public/emoji/1f992.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M36 36V21.833l-6.667-10.167c-3.617-2.864-8.01-7.425-14.011-5.421 0 0-2.958-.135-4.143 1.215C8.484 9.422 6.3 16.272 5 18.667 2.778 22.756.28 25.689.986 27.772c.932 2.752 1.883 4.695 4.792 2.573 1.582-1.155 1.874-3.798 5.156-5.703 3.013-.053 7.066-.475 8.478-3.896 0 0 2.643 3.387 5.254 10.587.195.539 1.025 3.121 1.391 4.667H36z"/><path fill="#FFCC4D" d="M11.771 7.916s-.192-3.23-.988-4.512c-.795-1.283-.649-1.882.404-2.383 1.055-.502 1.93-.241 1.402 1.327-.441 1.311.071 3.392 1.023 4.251l-1.841 1.317zm2.525-5.019c.46.952 3.304 1.476 4.169 4.971.866 3.496-2.584 2.434-3.593.705-1.122-1.924-1.507-3.432-1.538-4.682-.018-.661.031-2.917.962-.994z"/><path fill="#754C29" d="M36 18.333C27.666 5 17.667 2.5 13.332 6.658 21.249 5.122 26.666 8.667 36 21.833v-3.5z"/><path fill="#F4900C" d="M16.428 6.306c-2.374.192-6.061 4.647-7.825 6.604 0 0-1.983-6.025 1.064-6.409 5.09-.643 5.656-.255 5.656-.255l1.105.06z"/><path fill="#FFCC4D" d="M20.745 2.289c-.419.971 1.047 3.463-1.029 6.405-2.077 2.943-3.531-.361-2.885-2.255.72-2.107 1.608-3.385 2.533-4.227.489-.446 2.227-1.886 1.381.077z"/><path fill="#F4900C" d="M19.764 3.399c-.005.605-.06 1.32-.215 2-.156.679-.413 1.324-.821 1.786-.815.927-1.222-.167-.705-1.283.518-1.115 1.326-1.969 1.404-2.452.078-.482.337-.051.337-.051z"/><path fill="#292F33" d="M13.056 13.85c0 .776-.629 1.405-1.407 1.405-.776 0-1.405-.629-1.405-1.405 0-.778.629-1.407 1.405-1.407.778 0 1.407.629 1.407 1.407z"/><path fill="#603913" d="M3.694 26.222c0 .726-.438 1.315-.979 1.315-.539 0-.978-.589-.978-1.315s.438-1.315.978-1.315c.541-.001.979.589.979 1.315z"/><path fill="#F4900C" d="M25.445 9.685s-3.611 1.314-2.945 3.481S24.666 19 25.833 19s4.529-4.482 4.529-4.482-2.444-2.922-4.917-4.833zm6.281 6.465S28.5 17.5 28.5 19.334s-1.168 4.833.166 6.333 4.334 1.166 5.834.166 1.5-1.666 1.5-1.666v-2.334s-1.337-1.939-1.945-2.669c-.859-1.239-2.329-3.014-2.329-3.014zm-6.06 4.517c1.518.414 1.667 2.834.667 4s-2.834 2.499-3.667-.334 1.166-4.166 3-3.666zm5.5 8c-3.745-2.007-4.499 1.166-4.666 3.166S27 34.667 29 35s6.832-3.833 2.166-6.333zM36 27.333s-2.666-.499-2.5.834S36 33 36 33v-5.667zM2.26 23.319s3.379-5.312 4.601-9.001C8.082 10.628 10.5 9 10.5 9S9 14.334 7.667 17.333c-1.334 3-4.313 7.306-5.407 5.986zM17.833 16.5c1.499.167 3.001 2.833.833 3.333-2.167.5-4-.667-3.667-2s2.834-1.333 2.834-1.333zm-2.167 5.834c-1.447 1.298-3 1.001-3.333.167s-.833-3.667 1-3.167 3.314 2.12 2.333 3zm-4.409.836c-1.022.805-2.118.62-2.353.103-.235-.517-.589-2.272.705-1.963 1.296.31 2.342 1.315 1.648 1.86zm7.636-9.351c-.168 1.29-1.082 1.925-1.611 1.719-.529-.206-2.009-1.214-.868-1.897 1.142-.683 2.594-.696 2.479.178z"/><path fill="#FFCC4D" d="M14.569 7.101s1.215-2.999 1.048-4.499.419-2.187 1.477-2.187c1.167 0 1.471.791.607 2.01-.962.994-1.394 3.093-.904 4.278l-2.228.398z"/><path fill="#8B5E3C" d="M17.094.415c2.239.002 1.072 1.358.607 2.01-.465.651-2.085.177-2.085.177S15.17.414 17.094.415zM10.579 3.05s-1.288-1.878.598-2.256c2.196-.44 2.393.826 1.441 1.641-.951.815-2.039.615-2.039.615z"/><path fill="#F4900C" d="M36 36v-2s-1.334 0-3 .667c-.788.315-1.346.853-1.722 1.333H36z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M22.217 35.615h-.002c-.804-.142-1.34-.908-1.198-1.712l.59-3.344s.68-3.165-1.076-5.449c1.259-1.171 5.024.085 5.024.085l-1.626 9.221c-.142.804-.908 1.34-1.712 1.199zm-12.692-.021h-.002c-.804-.142-1.34-.908-1.198-1.712l1.312-7.025s.503-2.419.503-4.439c1.142-.439 2.723 2.757 2.723 2.757l-1.626 9.221c-.143.803-.909 1.339-1.712 1.198zm21.277-9.823c-.537 0-.977-.431-.985-.969-.012-.723-.304-4.326-4.925-4.326-.545 0-.985-.441-.985-.985s.441-.985.985-.985c5.363 0 6.858 3.938 6.896 6.264.009.545-.425.993-.969 1.002l-.017-.001z" fill="#F4900C"/><g fill="#754C29"><path d="M15.226 17.252l-3.46-11.98 1.687-1.02c.369.61.628 1.722 1.054 3.633.569 2.558 1.349 6.06 2.657 7.876.318.442.218 1.058-.224 1.376-.175.126-1.714.115-1.714.115zM7.615 2.71V.739c0-.408.331-.739.739-.739s.739.331.739.739V2.71H7.615zm2.332 0V.739c0-.408.331-.739.739-.739s.739.331.739.739V2.71H9.947z"/><ellipse cx="30.802" cy="26.263" rx="1.971" ry="2.464"/></g><path fill="#FFCC4D" d="M28.935 34.094s-.647-2.515-.998-4.154c-.332-1.549-1.025-3.981-1.171-8.225-.01-.145-.039-.512-.138-.779-.122-.33-.567-.933-.766-1.203-.777-1.052-2.012-1.691-3.526-1.847-1.283-.132-2.573-.185-3.854-.339-.59-.071-1.1-.156-1.422-.272-1.636-.589-1.962-2.502-2.414-3.965-.8-2.59-1.508-5.225-1.961-7.9l-.036.009.036-.009-.027-.165V4.84c1.567-.714 2.79-2.888 1.971-3.706-1.416-.708-2.827.11-3.513.992-.02-.001-.039-.006-.059-.006H8.459c-.655 0-1.304.16-1.872.51-.584.359-.986.907-1.633 1.19-.786.344-1.721.093-2.417.64-1.189.933-.625 2.525.854 2.578.201.577.745.993 1.39.993h2.106c.055.011.108.021.173.029.604.071 1.088.525 1.477 1.215 1.047 1.856 1.244 4.244 1.415 6.324.119 1.448.177 2.906.158 4.36-.293 1.566-.12 3.377-.12 3.377.044.419.186.777.394 1.095l-.01.011c1.99 2.81 2.449 5.97 2.449 5.97l.784 4.193c.142.804.908 1.341 1.713 1.199.804-.142 1.341-.908 1.199-1.712l-1.262-7.159c1.977.534 4.609.932 6.449.852 0 .006-.003.014-.002.02 2.371-.146 3.26 1.73 3.454 2.576.194.846.868 4.228.868 4.228.142.804.909 1.341 1.712 1.199.802-.143 1.339-.91 1.197-1.714z"/><path fill="#F4900C" d="M11.975 22.1c-.985.985-1.16 2.408-.391 3.178.77.77 2.193.595 3.178-.391s1.16-2.408.391-3.178c-.77-.77-2.193-.595-3.178.391zm1.088-6.185c0 1.633 1.324 2.956 2.956 2.956 1.029 0 1.933-.526 2.462-1.323-.59-.071-1.1-.156-1.422-.272-1.564-.563-1.872-2.237-2.253-3.441-.057-.179-.108-.349-.162-.523-.935.496-1.581 1.469-1.581 2.603zm-.986-4.434c0-1.361-1.103-2.464-2.464-2.464-.388 0-.75.098-1.077.257.635 1.126 1.015 2.885 1.242 4.653 1.282-.086 2.299-1.142 2.299-2.446zm-1.093-4.079c0 1.118.906 2.023 2.023 2.023.182 0 .355-.032.523-.077-.449-1.787-.709-3.122-.847-3.937-.961.156-1.699.985-1.699 1.991zm8.977 12.456c0 1.633 1.324 2.956 2.956 2.956 1.633 0 2.956-1.324 2.956-2.956 0-.043-.011-.082-.013-.124-.777-1.052-2.012-1.691-3.526-1.847-.457-.047-.972-.088-1.499-.128-.538.536-.874 1.277-.874 2.099zM11.598 2.613c.505-.483 1.317-1.089 1.778-.856.461.233.258 1.273-1.166 2.151.113-.439.551-1.215-.612-1.295z"/><circle fill="#292F33" cx="8.772" cy="4.09" r=".985"/><path d="M21.047 33.545s-1.142 1.351-.985 1.781 2.741.491 3.249.022-1.951-1.842-2.264-1.803zm-12.623 0s-1.142 1.351-.985 1.781c.156.43 2.741.491 3.249.022s-1.951-1.842-2.264-1.803zm4.547 2.22c.136.391 2.766.329 3.205-.461.439-.79-2.678-1.317-2.678-1.317s-.703 1.273-.527 1.778zm12.404 0c.136.391 2.766.329 3.205-.461.439-.79-2.678-1.317-2.678-1.317s-.703 1.273-.527 1.778z" fill="#754C29"/></svg> \ No newline at end of file diff --git a/public/emoji/1f99d.svg b/public/emoji/1f99d.svg index 7f8676d6b..30c88720f 100644 --- a/public/emoji/1f99d.svg +++ b/public/emoji/1f99d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M10.819 6.833c-1.608-3.083-6.12-4.531-6.96-3.261s.695 9.976 1.727 9.794 5.233-6.533 5.233-6.533zm14.362 0c1.608-3.083 6.12-4.531 6.96-3.261.84 1.27-.695 9.976-1.727 9.794s-5.233-6.533-5.233-6.533z"/><path fill="#292F33" d="M10.007 8.856C8.759 6.223 5.393 4.12 4.796 5.176s.704 9.229 1.464 9.095 3.747-5.415 3.747-5.415zm16.232 0c1.21-2.64 4.423-4.77 4.982-3.72s-.742 9.223-1.464 9.095-3.518-5.375-3.518-5.375z"/><path fill="#99AAB5" d="M33 14.756C29.464 10.599 24 3 18 3S6.536 10.599 3 14.756c-3 3.527-3 8.229-2 10.58 1.042 2.45 3 4.702 9 7.053 2.029.795 5.606 2.351 8 2.351s5.971-1.556 8-2.351c6-2.351 7.958-4.603 9-7.053 1-2.352 1-7.054-2-10.58z"/><path fill="#E1E8ED" d="M18 15.472c0-4.827-4.007-4.771-6.429-4.493C7.139 11.488.449 17.59.449 21.493c0 3.739.506 5.284 5.396 8.769C9.275 22.055 18 19.211 18 15.472z"/><path fill="#292F33" d="M18 16.817c0-2.357-4.313-2.987-6.533-2.631-4.805.77-10.568 7.42-10.568 10.793.618 1.855 2.586 4.103 4.947 5.34 2.901-3.796 6.689-6.239 9.781-7.42C17.359 22.237 18 19.458 18 16.817z"/><path fill="#E1E8ED" d="M18 15.472c0-4.827 4.007-4.771 6.429-4.493 4.433.509 11.122 6.611 11.122 10.514 0 3.739-.506 5.284-5.396 8.769C26.725 22.055 18 19.211 18 15.472z"/><path fill="#292F33" d="M18 16.817c0-2.357 4.313-2.987 6.533-2.631 4.805.77 10.568 7.42 10.568 10.793-.618 1.855-2.586 4.103-4.947 5.34-2.901-3.796-6.689-6.239-9.781-7.42C18.641 22.237 18 19.458 18 16.817z"/><path fill="#E1E8ED" d="M24.819 25.078c-1.607-2.024-4.091-3.641-6.819-3.641s-5.212 1.617-6.819 3.641c-1.364 1.717-1.364 3.007-.909 4.152.474 1.193 1.364 2.772 4.091 3.917.923.387 2.548 1.145 3.637 1.145s2.714-.758 3.637-1.145c2.728-1.145 3.618-2.724 4.091-3.917.455-1.145.455-2.435-.909-4.152z"/><path fill="#66757F" d="M20.722 23.032c1.181 1.372-1.72 1.165-2.722 1.165s-3.903.208-2.722-1.165C17.093 20.924 16.998 4.329 18 4.329s1.815 17.649 2.722 18.703z"/><circle fill="#99AAB5" cx="13.5" cy="18.5" r="1.5"/><circle fill="#99AAB5" cx="22.5" cy="18.5" r="1.5"/><path fill="#292F33" d="M21.575 23.172c0 1.735-2.495 3.167-3.575 3.167s-3.575-1.432-3.575-3.167 1.601-1.778 3.575-1.778 3.575.043 3.575 1.778zm0 6.021c-.677-.552-1.601.181-3.575.181s-2.898-.733-3.575-.181S15 31.461 18 31.461s4.252-1.716 3.575-2.268z"/><path fill="#66757F" d="M13.273 25.653c-.131 0-.263-.034-.384-.105-2.95-1.761-8.211-.897-9.496-.281-.372.181-.821.022-1.001-.351-.179-.374-.022-.822.352-1.001 1.713-.823 7.491-1.695 10.914.344.355.213.472.673.26 1.028-.141.235-.39.366-.645.366z"/><path fill="#66757F" d="M2.441 30.5c-.165 0-.332-.055-.47-.166-.323-.26-.374-.731-.114-1.055 1.43-1.775 4.811-4.803 11.379-5.125.412-.034.766.299.786.712.021.414-.298.766-.712.786-5.983.294-9.012 2.988-10.285 4.568-.148.184-.365.28-.584.28zm20.287-4.847c-.256 0-.505-.131-.646-.366-.212-.355-.096-.815.26-1.028 3.422-2.04 9.203-1.167 10.914-.344.374.179.531.627.352 1-.179.374-.625.534-1 .352-1.287-.617-6.548-1.479-9.496.281-.122.071-.254.105-.384.105z"/><path fill="#66757F" d="M33.559 30.5c-.219 0-.436-.096-.584-.279-1.272-1.58-4.301-4.274-10.285-4.568-.413-.021-.732-.372-.712-.786.021-.413.376-.75.786-.712 6.568.322 9.948 3.35 11.379 5.125.26.323.209.795-.113 1.055-.139.11-.305.165-.471.165z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M10.668 5.616C9.032 2.479 4.439 1.005 3.584 2.298s.707 10.152 1.757 9.967c1.051-.185 5.327-6.649 5.327-6.649z"/><path fill="#292F33" d="M9.841 7.674c-1.27-2.68-4.696-4.82-5.304-3.745-.435.771.122 5.263.757 7.696l4.547-3.951z"/><path fill="#99AAB5" d="M25.284 5.616c1.636-3.137 6.228-4.611 7.084-3.318s-.708 10.152-1.758 9.967c-1.051-.185-5.326-6.649-5.326-6.649z"/><path fill="#292F33" d="M26.36 7.674c1.231-2.686 4.501-4.854 5.07-3.786.416.78-.178 5.425-.815 7.825L26.36 7.674z"/><path fill="#99AAB5" d="M33.13 13.316c-2.583-3.164-9.048-11.601-15.155-11.601S5.404 10.152 2.821 13.316C-.317 17.16-.23 21.613.573 24.193c.805 2.587 3.155 5.038 9.261 7.431 2.065.809 5.705 2.393 8.142 2.393s6.076-1.583 8.142-2.393c6.106-2.393 8.457-4.843 9.261-7.431.802-2.58.89-7.033-2.249-10.877z"/><path fill="#E1E8ED" d="M17.976 14.408c0-4.913-4.078-4.855-6.542-4.572C6.922 10.353.076 16.597.076 20.569c0 1.39.16 2.631.496 3.624.584 1.726 1.875 3.015 5.034 5.266 3.49-8.351 12.37-11.246 12.37-15.051z"/><path fill="#292F33" d="M17.976 15.777c0-2.399-4.389-3.04-6.649-2.678C6.443 13.882.587 20.633.572 24.07v.013c.002.006.001.111.001.111s.384 1.401 1.623 2.815c.867.991 2.346 2.068 3.333 2.584l.01-.011c2.952-3.861 6.877-6.416 10.022-7.617 1.763-.673 2.415-3.5 2.415-6.188z"/><circle fill="#99AAB5" cx="13.396" cy="17.489" r="1.527"/><path fill="#E1E8ED" d="M17.976 14.408c0-4.913 4.078-4.855 6.542-4.572 4.511.518 11.357 6.762 11.357 10.734 0 1.39-.16 2.631-.496 3.624-.584 1.726-1.875 3.015-5.034 5.266-3.489-8.352-12.369-11.247-12.369-15.052z"/><path fill="#292F33" d="M17.976 15.777c0-2.399 4.389-3.04 6.649-2.678 4.884.783 10.74 7.534 10.755 10.971v.013c-.002.006-.001.111-.001.111s-.384 1.401-1.623 2.815c-.868.991-2.347 2.068-3.333 2.584l-.01-.011c-2.952-3.861-6.877-6.416-10.022-7.617-1.763-.673-2.415-3.5-2.415-6.188z"/><circle fill="#99AAB5" cx="22.555" cy="17.489" r="1.527"/><path fill="#66757F" d="M20.746 22.102c-.923-1.073-1.75-19.035-2.77-19.035s-1.847 17.962-2.77 19.035h5.54z"/><path fill="#E1E8ED" d="M24.915 24.184c-1.636-2.06-4.164-3.705-6.94-3.705s-5.304 1.646-6.94 3.705c-1.388 1.748-1.388 3.061-.925 4.226.482 1.214 1.388 2.821 4.164 3.986.939.394 2.594 1.165 3.701 1.165 1.108 0 2.762-.771 3.701-1.165 2.776-1.165 3.682-2.772 4.164-3.986.463-1.165.463-2.478-.925-4.226z"/><path fill="#292F33" d="M21.614 28.372c-.689-.562-1.629.184-3.639.184s-2.95-.746-3.639-.184c-.689.562.585 2.308 3.639 2.308s4.328-1.746 3.639-2.308z"/><path fill="#66757F" d="M13.165 24.769c-.133 0-.268-.035-.391-.107-3.002-1.792-8.357-.913-9.664-.286-.378.184-.835.023-1.019-.357-.182-.381-.022-.837.358-1.019 1.744-.838 7.624-1.725 11.107.35.362.217.481.685.264 1.047-.142.239-.395.372-.655.372z"/><path fill="#66757F" d="M2.141 29.702c-.168 0-.337-.056-.478-.169-.328-.264-.38-.744-.116-1.073 1.455-1.807 4.896-4.888 11.581-5.216.419-.035.779.304.8.725.021.421-.304.779-.725.8-6.089.299-9.171 3.041-10.467 4.649-.151.187-.372.284-.595.284zm31.669 0c-.223 0-.443-.097-.594-.284-1.295-1.608-4.377-4.35-10.467-4.649-.42-.021-.745-.379-.725-.8.021-.42.383-.763.8-.725 6.685.328 10.124 3.409 11.58 5.216.264.329.213.809-.115 1.073-.141.113-.31.169-.479.169z"/><path fill="#66757F" d="M22.787 24.769c-.26 0-.514-.133-.657-.373-.216-.362-.097-.83.264-1.047 3.482-2.076 9.366-1.188 11.107-.35.381.182.541.638.358 1.018-.182.381-.636.544-1.018.358-1.31-.628-6.664-1.505-9.664.286-.123.074-.257.108-.39.108z"/><path fill="#292F33" d="M21.614 22.244c0 1.765-2.539 3.223-3.639 3.223-1.1 0-3.639-1.458-3.639-3.223s1.629-1.81 3.639-1.81 3.639.045 3.639 1.81z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f99e.svg b/public/emoji/1f99e.svg index 2b29844a7..8df2a7467 100644 --- a/public/emoji/1f99e.svg +++ b/public/emoji/1f99e.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M15.137 22.946l-.064-.003c-2.111-.169-4.866-1.238-5.998-5.368-.115-.419.13-.859.549-.974.42-.115.852.126.967.545l.003.011c.267.973 1.078 3.931 4.605 4.214.434.035.757.414.722.848-.033.415-.378.727-.784.727zm-4.586 7.139c-.138 0-.277-.036-.404-.112-.373-.224-.494-.708-.27-1.081 1.331-2.22 3.468-3.389 6.35-3.475.426.014.798.329.811.764.013.435-.329.798-.764.811-.861.026-3.483.104-5.046 2.711-.148.245-.409.382-.677.382z"/><path fill="#BE1931" d="M14.39 25.107c-1.542 0-4.02-.34-6.377-2.575-.315-.299-.329-.798-.03-1.113.301-.315.799-.328 1.114-.029 2.502 2.373 5.106 2.182 6.219 2.102l.197-.014c.438-.023.808.302.836.736.027.435-.302.809-.736.836l-.182.013c-.262.019-.616.044-1.041.044zm7.164-2.161c-.406 0-.751-.312-.784-.726-.035-.434.289-.812.723-.848 3.526-.282 4.338-3.242 4.604-4.214l1.52.417c-1.133 4.129-3.888 5.199-5.999 5.368-.021.002-.043.003-.064.003zm4.587 7.139c-.268 0-.528-.137-.677-.383-1.563-2.606-4.185-2.685-5.046-2.711-.435-.013-.777-.376-.764-.811.013-.435.383-.764.811-.764 2.882.086 5.019 1.255 6.351 3.475.224.373.103.857-.271 1.081-.127.077-.267.113-.404.113z"/><path fill="#BE1931" d="M22.302 25.107c-.426 0-.779-.025-1.04-.045l-.183-.013c-.435-.027-.764-.401-.736-.836.027-.434.405-.768.836-.736l.197.014c1.111.08 3.717.271 6.219-2.102.315-.299.815-.286 1.113.029.3.315.286.814-.029 1.113-2.358 2.237-4.835 2.576-6.377 2.576zM8.983 6.922c.752-.779 2.316-2.461 1.59-3.954.949.077 6.757 6.159-.06 9.073-1.072-.137-1.53-5.119-1.53-5.119zm8.772 23.394c-.726.329-4.25 2.171-4.354 5.46.069.789 2.73-1.25 5.01-1.25v-3.454l-.656-.756z"/><path fill="#BE1931" d="M19.035 30.316c.726.329 4.25 2.171 4.354 5.46-.069.789-2.73-1.25-5.01-1.25v-3.454l.656-.756zm-11.4-18.303c.133 1.429 2.975 2.889 5.023 3.227.262-.57-1.354-2.237-2.227-3.246-.488-.564-.701-1.904-2.185-1.321s-.611 1.34-.611 1.34z"/><path fill="#BE1931" d="M11.742 13.793c-.655 0-.83 1.754 2.489 2.544s1.56-.878 1.048-1.667c-.656-1.009-3.537-.877-3.537-.877z"/><path fill="#89021F" d="M15.465 25.382c-.187.987-.075 6.217 2.961 6.612v-7.006l-2.961.394z"/><path fill="#BE1931" d="M27.629 6.922c-.752-.779-2.316-2.461-1.59-3.954-.949.077-6.757 6.159.06 9.073 1.072-.137 1.53-5.119 1.53-5.119z"/><path fill="#BE1931" d="M28.976 12.013c-.133 1.429-2.975 2.889-5.023 3.227-.262-.57 1.354-2.237 2.227-3.246.488-.564.701-1.904 2.185-1.321s.611 1.34.611 1.34z"/><path fill="#BE1931" d="M24.87 13.793c.655 0 .83 1.754-2.489 2.544s-1.56-.878-1.048-1.667c.655-1.009 3.537-.877 3.537-.877z"/><path fill="#DD2E44" d="M28.391.042c2.633.67 4.675 5.092 4.174 7.847-.782 4.302-2.992 5.787-5.428 6.164-.748-.058-3.293-3.474-.576-6.272s2.505-5.856 1.83-7.739z"/><path fill="#BE1931" d="M17.541 12.5c-.258 0-.478-.199-.498-.461-.498-6.35-2.635-10.064-6.018-10.459-.274-.032-.471-.28-.438-.555.032-.273.274-.468.555-.438 2.264.264 6.17 2.093 6.898 11.374.021.275-.184.516-.459.538l-.04.001zm1.418 0l-.04-.001c-.275-.021-.481-.262-.459-.538C19.188 2.68 23.095.851 25.359.587c.27-.038.522.164.555.438.031.274-.165.523-.439.555-3.383.395-5.52 4.109-6.018 10.459-.02.262-.239.461-.498.461z"/><path fill="#A0041E" d="M18.381 23.04c0 1 .019 3.326.019 4.876-.576 0-1.491-.016-2.438-.3-1.497-.45-1.113-3.901-.614-4.701l3.033.125z"/><path fill="#BE1931" d="M18.335 19.239c0 1.113.022 3.702.022 5.428-.655 0-1.696-.017-2.773-.334-1.703-.501-1.266-4.342-.699-5.233l3.45.139z"/><path fill="#DD2E44" d="M18.335 11.731c0 2.169.279 8.822.279 9.497-1.397 0-5.301.337-5.082-3.134.218-3.47 2.358-6.363 4.803-6.363z"/><path fill="#89021F" d="M21.152 25.382c.187.987.075 6.217-2.961 6.612v-7.006l2.961.394z"/><path fill="#A0041E" d="M18.235 23.04c0 1-.152 3.326-.152 4.876.576 0 1.624-.016 2.57-.3 1.497-.45 1.113-3.901.614-4.701l-3.032.125z"/><path fill="#BE1931" d="M18.282 19.239c0 1.113-.165 3.702-.165 5.428.655 0 1.84-.017 2.916-.334 1.703-.501 1.266-4.342.699-5.233l-3.45.139z"/><path fill="#DD2E44" d="M18.282 11.731c0 2.169-.21 8.822-.21 9.497 1.397 0 5.231.337 5.013-3.134s-2.358-6.363-4.803-6.363zM8.22.042c-2.633.67-4.675 5.092-4.174 7.847.782 4.302 2.992 5.787 5.428 6.164.748-.058 3.293-3.474.576-6.272S7.546 1.925 8.22.042z"/><ellipse transform="rotate(-10.068 16.574 12.941)" fill="#BE1931" cx="16.578" cy="12.94" rx="1.015" ry="1.435"/><ellipse transform="rotate(-79.939 19.875 12.896)" fill="#BE1931" cx="19.875" cy="12.896" rx="1.435" ry="1.015"/><ellipse transform="rotate(-10.068 16.45 12.233)" fill="#292F33" cx="16.453" cy="12.232" rx="1.015" ry="1.435"/><ellipse transform="rotate(-79.939 19.99 12.232)" fill="#292F33" cx="19.99" cy="12.232" rx="1.435" ry="1.015"/><path fill="#EA596E" d="M14.375 18.906c.281.844.844 1.75 3.844 1.75 2.094 0 4.156-.375 4.094-1.906-.781.656-1.75.938-4.094.938-2.5 0-3.844-.782-3.844-.782z"/><path fill="#DD2E44" d="M15.272 22.923c.218.595.653 1.234 2.975 1.234 1.62 0 3.217-.264 3.168-1.344-.605.463-1.354.661-3.168.661-1.935-.001-2.975-.551-2.975-.551z"/><path fill="#BE1931" d="M15.376 26.089c.205.595.615 1.234 2.803 1.234 1.527 0 3.031-.264 2.986-1.344-.57.463-1.276.661-2.986.661-1.823 0-2.803-.551-2.803-.551z"/><path fill="#EA596E" d="M8.812 12.781c-.106 0-.214-.022-.316-.07-2.026-.944-3.157-2.62-3.361-4.98-.036-.412.265-.812.677-.848.413-.036.773.231.81.643l.006.076c.064.737.233 2.693 2.501 3.75.375.175.538.621.363.997-.127.272-.397.432-.68.432zm18.938 0c-.282 0-.553-.16-.68-.433-.175-.375-.013-.822.363-.997 2.268-1.057 2.437-3.013 2.5-3.75l.754-.008.741.137c-.205 2.36-1.336 4.036-3.362 4.98-.102.049-.21.071-.316.071z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#BE1931"><path d="M14.847 22.402h-.064c-2.117-.069-4.919-1.006-6.246-5.077-.135-.413.089-.864.503-.999.414-.135.857.085.992.499l.003.011c.312.959 1.263 3.876 4.8 3.991.435.015.776.378.762.812-.014.415-.344.743-.75.763zm-5.348 5.637c.151-.221.411-.359.698-.342 3.034.181 4.578-1.938 5.086-2.634.256-.352.749-.429 1.1-.173.352.256.414.747.173 1.1-1.698 2.33-3.869 3.434-6.453 3.28-.434-.026-.766-.399-.74-.834.01-.148.059-.284.136-.397z"/><path d="M14.362 23.967c.421-.064.767-.141 1.022-.2l.179-.04c.426-.092.695-.511.603-.937-.092-.425-.515-.698-.937-.603l-.193.043c-1.087.245-3.635.824-6.463-1.149-.357-.248-.849-.161-1.096.195-.249.357-.161.848.195 1.096 2.665 1.86 5.165 1.826 6.69 1.595z"/><path d="M15.403 25.298c.376-.199 1.053-.624 1.053-.624.371-.228.487-.712.259-1.084-.227-.37-.718-.488-1.084-.259l-.168.105c-.944.591-3.156 1.981-6.479 1.057-.419-.116-.854.129-.97.548-.117.419.129.854.548.97 3.131.87 5.479.009 6.841-.713z"/></g><g fill="#BE1931"><path d="M21.833 22.402h.064c2.117-.069 4.919-1.006 6.246-5.077.135-.413-.089-.864-.503-.999-.414-.135-.857.085-.992.499l-.003.011c-.312.959-1.263 3.876-4.8 3.991-.435.015-.776.378-.762.812.015.415.344.743.75.763zm5.348 5.637c-.151-.221-.411-.359-.698-.342-3.034.181-4.578-1.938-5.086-2.634-.256-.352-.749-.429-1.1-.173-.352.256-.414.747-.173 1.1 1.698 2.33 3.869 3.434 6.453 3.28.434-.026.766-.399.74-.834-.009-.148-.058-.284-.136-.397z"/><path d="M22.318 23.967c-.421-.064-.767-.141-1.022-.2l-.179-.04c-.426-.092-.695-.511-.603-.937.092-.425.515-.698.937-.603l.193.043c1.087.245 3.635.824 6.463-1.149.357-.248.849-.161 1.096.195.249.357.161.848-.195 1.096-2.664 1.86-5.165 1.826-6.69 1.595z"/><path d="M21.277 25.298c-.376-.199-1.053-.624-1.053-.624-.371-.228-.487-.712-.259-1.084.227-.37.718-.488 1.084-.259l.168.105c.944.591 3.156 1.981 6.479 1.057.419-.116.854.129.97.548.117.419-.129.854-.548.97-3.131.87-5.479.009-6.841-.713z"/></g><path fill="#BE1931" d="M8.983 6.922c.752-.779 2.316-2.461 1.59-3.954.949.077 6.757 6.159-.06 9.073-1.072-.137-1.53-5.119-1.53-5.119zm8.772 23.394c-.726.329-4.25 2.171-4.354 5.46.069.789 2.73-1.25 5.01-1.25v-3.454l-.656-.756z"/><path fill="#BE1931" d="M19.035 30.316c.726.329 4.25 2.171 4.354 5.46-.069.789-2.73-1.25-5.01-1.25v-3.454l.656-.756zm-11.4-18.303c.133 1.429 2.975 2.889 5.023 3.227.262-.57-1.354-2.237-2.227-3.246-.488-.564-.701-1.904-2.185-1.321s-.611 1.34-.611 1.34z"/><path fill="#BE1931" d="M11.742 13.793c-.655 0-.83 1.754 2.489 2.544s1.56-.878 1.048-1.667c-.656-1.009-3.537-.877-3.537-.877z"/><path fill="#89021F" d="M15.465 25.382c-.187.987-.075 6.217 2.961 6.612v-7.006l-2.961.394z"/><path fill="#BE1931" d="M27.629 6.922c-.752-.779-2.316-2.461-1.59-3.954-.949.077-6.757 6.159.06 9.073 1.072-.137 1.53-5.119 1.53-5.119z"/><path fill="#BE1931" d="M28.976 12.013c-.133 1.429-2.975 2.889-5.023 3.227-.262-.57 1.354-2.237 2.227-3.246.488-.564.701-1.904 2.185-1.321s.611 1.34.611 1.34z"/><path fill="#BE1931" d="M24.87 13.793c.655 0 .83 1.754-2.489 2.544s-1.56-.878-1.048-1.667c.655-1.009 3.537-.877 3.537-.877z"/><path fill="#DD2E44" d="M28.391.042c2.633.67 4.675 5.092 4.174 7.847-.782 4.302-2.992 5.787-5.428 6.164-.748-.058-3.293-3.474-.576-6.272s2.505-5.856 1.83-7.739z"/><path fill="#BE1931" d="M17.541 12.5c-.258 0-.478-.199-.498-.461-.498-6.35-2.635-10.064-6.018-10.459-.274-.032-.471-.28-.438-.555.032-.273.274-.468.555-.438 2.264.264 6.17 2.093 6.898 11.374.021.275-.184.516-.459.538l-.04.001zm1.418 0l-.04-.001c-.275-.021-.481-.262-.459-.538C19.188 2.68 23.095.851 25.359.587c.27-.038.522.164.555.438.031.274-.165.523-.439.555-3.383.395-5.52 4.109-6.018 10.459-.02.262-.239.461-.498.461z"/><path fill="#A0041E" d="M18.381 23.04c0 1 .019 3.326.019 4.876-.576 0-1.491-.016-2.438-.3-1.497-.45-1.113-3.901-.614-4.701l3.033.125z"/><path fill="#BE1931" d="M18.335 19.239c0 1.113.022 3.702.022 5.428-.655 0-1.696-.017-2.773-.334-1.703-.501-1.266-4.342-.699-5.233l3.45.139z"/><path fill="#DD2E44" d="M18.335 11.731c0 2.169.279 8.822.279 9.497-1.397 0-5.301.337-5.082-3.134.218-3.47 2.358-6.363 4.803-6.363z"/><path fill="#89021F" d="M21.152 25.382c.187.987.075 6.217-2.961 6.612v-7.006l2.961.394z"/><path fill="#A0041E" d="M18.235 23.04c0 1-.152 3.326-.152 4.876.576 0 1.624-.016 2.57-.3 1.497-.45 1.113-3.901.614-4.701l-3.032.125z"/><path fill="#BE1931" d="M18.282 19.239c0 1.113-.165 3.702-.165 5.428.655 0 1.84-.017 2.916-.334 1.703-.501 1.266-4.342.699-5.233l-3.45.139z"/><path fill="#DD2E44" d="M18.282 11.731c0 2.169-.21 8.822-.21 9.497 1.397 0 5.231.337 5.013-3.134s-2.358-6.363-4.803-6.363zM8.22.042c-2.633.67-4.675 5.092-4.174 7.847.782 4.302 2.992 5.787 5.428 6.164.748-.058 3.293-3.474.576-6.272S7.546 1.925 8.22.042z"/><ellipse transform="rotate(-10.068 16.574 12.941)" fill="#BE1931" cx="16.578" cy="12.94" rx="1.015" ry="1.435"/><ellipse transform="rotate(-79.939 19.875 12.896)" fill="#BE1931" cx="19.875" cy="12.896" rx="1.435" ry="1.015"/><ellipse transform="rotate(-10.068 16.45 12.233)" fill="#292F33" cx="16.453" cy="12.232" rx="1.015" ry="1.435"/><ellipse transform="rotate(-79.939 19.99 12.232)" fill="#292F33" cx="19.99" cy="12.232" rx="1.435" ry="1.015"/><path fill="#EA596E" d="M14.375 18.906c.281.844.844 1.75 3.844 1.75 2.094 0 4.156-.375 4.094-1.906-.781.656-1.75.938-4.094.938-2.5 0-3.844-.782-3.844-.782z"/><path fill="#DD2E44" d="M15.272 22.923c.218.595.653 1.234 2.975 1.234 1.62 0 3.217-.264 3.168-1.344-.605.463-1.354.661-3.168.661-1.935-.001-2.975-.551-2.975-.551z"/><path fill="#BE1931" d="M15.376 26.089c.205.595.615 1.234 2.803 1.234 1.527 0 3.031-.264 2.986-1.344-.57.463-1.276.661-2.986.661-1.823 0-2.803-.551-2.803-.551z"/><path fill="#EA596E" d="M8.812 12.781c-.106 0-.214-.022-.316-.07-2.026-.944-3.157-2.62-3.361-4.98-.036-.412.265-.812.677-.848.413-.036.773.231.81.643l.006.076c.064.737.233 2.693 2.501 3.75.375.175.538.621.363.997-.127.272-.397.432-.68.432zm18.938 0c-.282 0-.553-.16-.68-.433-.175-.375-.013-.822.363-.997 2.268-1.057 2.437-3.013 2.5-3.75l.754-.008.741.137c-.205 2.36-1.336 4.036-3.362 4.98-.102.049-.21.071-.316.071z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f99f.svg b/public/emoji/1f99f.svg index 80258274f..588815125 100644 --- a/public/emoji/1f99f.svg +++ b/public/emoji/1f99f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M15.245 11c-2.036 0-4.296-.088-5.354-1.146-.585-.586-.361-1.687-.124-2.852.152-.75.383-1.883.12-2.153-.205-.209-1.078-.664-1.849-1.065-1.187-.617-2.533-1.317-3.147-1.93-.195-.195-.195-.512 0-.707s.512-.195.707 0c.505.505 1.833 1.195 2.901 1.75 1.108.576 1.802.945 2.104 1.254.633.649.396 1.815.145 3.05-.133.651-.354 1.74-.149 1.945.853.854 3.415.854 4.646.854.276 0 .5.224.5.5s-.224.5-.5.5zM1.244 26c-.075 0-.151-.017-.223-.053-.247-.124-.347-.424-.224-.671.896-1.791 3.218-3.082 4.465-3.775.315-.176.559-.308.679-.398.079-.15.215-1.123.325-1.904.284-2.025.605-4.32 1.685-5.103 2.917-2.117 7.71-2.092 8.188-1.499l.298.371-.36.351c-.191.17-.479.166-.666-.001-.759-.146-4.4-.206-6.873 1.588-.735.533-1.064 2.88-1.281 4.432-.226 1.608-.332 2.273-.709 2.561-.159.121-.428.271-.799.478-1.153.641-3.299 1.834-4.057 3.349-.088.172-.264.274-.448.274z"/><path fill="#292F33" d="M5.245 36c-.184 0-.36-.102-.448-.276-.124-.247-.023-.547.224-.671.582-.365 4.724-5.776 4.724-7.553 0-1.126-.343-2.984-.619-4.478-.213-1.152-.381-2.062-.381-2.522 0-1.315 4.287-5.524 6.29-6.454.25-.116.548-.007.664.243.116.25.007.548-.243.664-1.926.894-5.629 4.774-5.711 5.553 0 .361.177 1.319.365 2.334.283 1.533.636 3.441.636 4.659 0 2.146-4.355 7.986-5.276 8.447-.074.037-.15.054-.225.054zm15.51-25c-.276 0-.5-.224-.5-.5s.224-.5.5-.5c1.231 0 3.793 0 4.646-.854.206-.206-.016-1.295-.148-1.946-.251-1.235-.488-2.401.144-3.05.302-.309.996-.678 2.104-1.254 1.067-.555 2.396-1.246 2.9-1.75.195-.195.512-.195.707 0s.195.512 0 .707c-.613.614-1.959 1.313-3.146 1.931-.771.401-1.645.855-1.85 1.065-.263.27-.032 1.402.12 2.152.237 1.166.462 2.267-.124 2.853C25.051 10.912 22.79 11 20.755 11zm14 15c-.183 0-.359-.102-.447-.276-.757-1.515-2.903-2.708-4.058-3.35-.371-.206-.64-.355-.798-.477-.377-.288-.483-.951-.709-2.559-.218-1.553-.546-3.9-1.282-4.434-2.471-1.793-6.112-1.734-6.873-1.587-.187.167-.474.171-.666 0-.198-.177-.228-.514-.061-.721.476-.595 5.272-.617 8.188 1.499 1.079.783 1.401 3.079 1.685 5.105.109.78.246 1.752.374 1.951.07.042.313.174.629.349 1.248.694 3.57 1.985 4.466 3.776.123.247.023.548-.224.671-.073.036-.149.053-.224.053z"/><path fill="#292F33" d="M30.744 35.998c-.071 0-.144-.017-.213-.051-.922-.462-5.276-6.301-5.276-8.447 0-1.218.353-3.126.636-4.659.188-1.015.364-1.973.364-2.341-.081-.772-3.784-4.652-5.711-5.546-.25-.116-.358-.414-.242-.664.115-.251.413-.359.664-.243 2.002.929 6.289 5.138 6.289 6.454 0 .46-.168 1.37-.381 2.522-.275 1.493-.619 3.352-.619 4.478 0 1.775 4.143 7.188 4.734 7.559.227.142.316.445.186.678-.092.163-.258.26-.431.26z"/><circle fill="#292F33" cx="15" cy="7" r="1"/><circle fill="#292F33" cx="21" cy="7" r="1"/><path fill="#292F33" d="M17 6s.438-6 1-6 1 6 1 6h-2z"/><path fill="#66757F" d="M21 8c0 1.657-1.757 2-3 2s-3-.343-3-2 1.757-3 3-3 3 1.343 3 3zm2 14c0 2.761-2.239 10-5 10s-5-7.239-5-10 2.239-8 5-8 5 5.239 5 8z"/><ellipse fill="#66757F" cx="18" cy="12.5" rx="4" ry="3.5"/><path fill="#CCD6DD" d="M20 11s13 2 15 3-3 4-7 3c-4.947-1.237-10-6-8-6z"/><path fill="#E1E8ED" d="M20 11s13 2 15 3-3 1-7 0c-4.947-1.237-10-3-8-3z"/><path fill="#CCD6DD" d="M16.007 11s-13 2-15 3 3 4 7 3c4.947-1.237 10-6 8-6z"/><path fill="#E1E8ED" d="M16.007 11s-13 2-15 3 3 1 7 0c4.947-1.237 10-3 8-3z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M15.245 11c-2.036 0-4.296-.088-5.354-1.146-.585-.586-.361-1.687-.124-2.852.152-.75.383-1.883.12-2.153-.205-.209-1.078-.664-1.849-1.065-1.187-.617-2.533-1.317-3.147-1.93-.195-.195-.195-.512 0-.707s.512-.195.707 0c.505.505 1.833 1.195 2.901 1.75 1.108.576 1.802.945 2.104 1.254.633.649.396 1.815.145 3.05-.133.651-.354 1.74-.149 1.945.853.854 3.415.854 4.646.854.276 0 .5.224.5.5s-.224.5-.5.5zM1.244 26c-.075 0-.151-.017-.223-.053-.247-.124-.347-.424-.224-.671.896-1.791 3.218-3.082 4.465-3.775.315-.176.559-.308.679-.398.079-.15.215-1.123.325-1.904.284-2.025.605-4.32 1.685-5.103 2.917-2.117 7.71-2.092 8.188-1.499l.298.371-.36.351c-.191.17-.479.166-.666-.001-.759-.146-4.4-.206-6.873 1.588-.735.533-1.064 2.88-1.281 4.432-.226 1.608-.332 2.273-.709 2.561-.159.121-.428.271-.799.478-1.153.641-3.299 1.834-4.057 3.349-.088.172-.264.274-.448.274z"/><path fill="#31373D" d="M5.245 36c-.184 0-.36-.102-.448-.276-.124-.247-.023-.547.224-.671.582-.365 4.724-5.776 4.724-7.553 0-1.126-.343-2.984-.619-4.478-.213-1.152-.381-2.062-.381-2.522 0-1.315 4.287-5.524 6.29-6.454.25-.116.548-.007.664.243.116.25.007.548-.243.664-1.926.894-5.629 4.774-5.711 5.553 0 .361.177 1.319.365 2.334.283 1.533.636 3.441.636 4.659 0 2.146-4.355 7.986-5.276 8.447-.074.037-.15.054-.225.054zm15.51-25c-.276 0-.5-.224-.5-.5s.224-.5.5-.5c1.231 0 3.793 0 4.646-.854.206-.206-.016-1.295-.148-1.946-.251-1.235-.488-2.401.144-3.05.302-.309.996-.678 2.104-1.254 1.067-.555 2.396-1.246 2.9-1.75.195-.195.512-.195.707 0s.195.512 0 .707c-.613.614-1.959 1.313-3.146 1.931-.771.401-1.645.855-1.85 1.065-.263.27-.032 1.402.12 2.152.237 1.166.462 2.267-.124 2.853C25.051 10.912 22.79 11 20.755 11zm14 15c-.183 0-.359-.102-.447-.276-.757-1.515-2.903-2.708-4.058-3.35-.371-.206-.64-.355-.798-.477-.377-.288-.483-.951-.709-2.559-.218-1.553-.546-3.9-1.282-4.434-2.471-1.793-6.112-1.734-6.873-1.587-.187.167-.474.171-.666 0-.198-.177-.228-.514-.061-.721.476-.595 5.272-.617 8.188 1.499 1.079.783 1.401 3.079 1.685 5.105.109.78.246 1.752.374 1.951.07.042.313.174.629.349 1.248.694 3.57 1.985 4.466 3.776.123.247.023.548-.224.671-.073.036-.149.053-.224.053z"/><path fill="#31373D" d="M30.744 35.998c-.071 0-.144-.017-.213-.051-.922-.462-5.276-6.301-5.276-8.447 0-1.218.353-3.126.636-4.659.188-1.015.364-1.973.364-2.341-.081-.772-3.784-4.652-5.711-5.546-.25-.116-.358-.414-.242-.664.115-.251.413-.359.664-.243 2.002.929 6.289 5.138 6.289 6.454 0 .46-.168 1.37-.381 2.522-.275 1.493-.619 3.352-.619 4.478 0 1.775 4.143 7.188 4.734 7.559.227.142.316.445.186.678-.092.163-.258.26-.431.26z"/><circle cx="15" cy="7" r="1"/><circle cx="21" cy="7" r="1"/><path fill="#66757F" d="M17 6s.438-6 1-6 1 6 1 6h-2z"/><path fill="#66757F" d="M21 8c0 1.657-1.757 2-3 2s-3-.343-3-2 1.757-3 3-3 3 1.343 3 3zm2 14c0 2.761-2.239 10-5 10s-5-7.239-5-10 2.239-8 5-8 5 5.239 5 8z"/><ellipse fill="#66757F" cx="18" cy="12.5" rx="4" ry="3.5"/><path fill="#CCD6DD" d="M20 11s13 2 15 3-3 4-7 3c-4.947-1.237-10-6-8-6z"/><path fill="#E1E8ED" d="M20 11s13 2 15 3-3 1-7 0c-4.947-1.237-10-3-8-3z"/><path fill="#CCD6DD" d="M16.007 11s-13 2-15 3 3 4 7 3c4.947-1.237 10-6 8-6z"/><path fill="#E1E8ED" d="M16.007 11s-13 2-15 3 3 1 7 0c4.947-1.237 10-3 8-3z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9a1.svg b/public/emoji/1f9a1.svg index 4e1a21fa1..92f42fd8b 100644 --- a/public/emoji/1f9a1.svg +++ b/public/emoji/1f9a1.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M34.157 20.709c-.807-1.404-1.932-2.604-3.565-3.526-.431-.244-1.826-.275-1.826-.275s-.707-.809-1.344-.978c-3.476-.923-8.798.434-10.427 1.086-1.628.652-1.914.299-3.995-.016-.277-.042-.586-.066-.918-.073-.503-.431-.114-1.509-1.114-1.509S9.535 16.465 9 17c-.226.031-.456.074-.688.125-.207.042-.412.097-.621.155-.32-.673-.774-1.347-1.222-1.28-.402.06-.466 1.098-.421 1.943-.272.152-1.946 3.729-3.019 6.198-.092.212-1.882.83-2.064 1.011-.616.612-1.062 1.152-.653 1.642.631.757 2.649.694 3.91.505 1.261-.189 3.847-1.513 5.108-1.513 3.443 0 3.925 3.154 4.353 5.505.387 2.128.339 4.763 1.317 4.709s3-2 3-5c1 0 7.728.674 8 1s1 4 2 4 5-7 5-13c1 2 .668 4.172.668 4.878S34 30 35 30s1-2.009 1-3-.594-4.119-1.843-6.291z"/><path fill="#99AAB5" d="M32.62 20.788c-.43-1.59-1.333-2.86-2.031-3.598-.895-.506-1.934-.933-3.166-1.26.261 1.098-.923 6.903-8.923 11.133-.94.497.857 2.652 3.469 3.312 4.907 1.241 8.457.855 10.098-1.79.553-1.802.933-3.74.933-5.585.02.04.032.081.051.121v-.001c-.097-.937-.277-1.761-.431-2.332z"/><path fill="#E1E8ED" d="M4.958 22c.853-2.352 1.615-3.78 4.042-5-1.229.167-2.579.554-3.75 1.458-2.775 2.144-1.659 3.795-3.235 5.624-.329.381-.714.736-1.049 1.069C2.75 25 4.11 24.34 4.958 22zm11.596-3.809c-2.504.888-5.941 3.094-7.679 4.553C6.5 24.74 4.559 25.473 3.562 26c-1.631.863.755 1.177 3.438 0 2.108-.925 5.94-2.519 8.875-2.5 6.462.041 9.625-5.292 11.548-7.57-3.792-.334-8.162 1.301-10.869 2.261z"/><circle fill="#E1E8ED" cx="7" cy="21" r="1"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M34.157 20.709c-.807-1.404-1.932-2.604-3.565-3.526-.431-.244-1.826-.275-1.826-.275s-.707-.809-1.344-.978c-3.476-.923-8.798.434-10.427 1.086-1.628.652-1.914.299-3.995-.016-.277-.042-.586-.066-.918-.073-.503-.431-.114-1.509-1.114-1.509S9.535 16.465 9 17c-.226.031-.456.074-.688.125-.207.042-.412.097-.621.155-.32-.673-.774-1.347-1.222-1.28-.402.06-.466 1.098-.421 1.943-.272.152-1.946 3.729-3.019 6.198-.092.212-1.882.83-2.064 1.011-.616.612-1.062 1.152-.653 1.642.631.757 2.649.694 3.91.505 1.261-.189 3.847-1.513 5.108-1.513 3.443 0 3.925 3.154 4.353 5.505.387 2.128.339 4.763 1.317 4.709s3-2 3-5c1 0 7.728.674 8 1s1 4 2 4 5-7 5-13c1 2 .668 4.172.668 4.878S34 30 35 30s1-2.009 1-3-.594-4.119-1.843-6.291z"/><path fill="#99AAB5" d="M32.62 20.788c-.43-1.59-1.333-2.86-2.031-3.598-.895-.506-1.934-.933-3.166-1.26.261 1.098-.923 6.903-8.923 11.133-.94.497.857 2.652 3.469 3.312 4.907 1.241 8.457.855 10.098-1.79.553-1.802.933-3.74.933-5.585.02.04.032.081.051.121v-.001c-.097-.937-.277-1.761-.431-2.332z"/><path fill="#E1E8ED" d="M4.958 22c.853-2.352 1.615-3.78 4.042-5-1.229.167-2.579.554-3.75 1.458-2.775 2.144-1.659 3.795-3.235 5.624-.329.381-.714.736-1.049 1.069C2.75 25 4.11 24.34 4.958 22zm11.596-3.809c-2.504.888-5.941 3.094-7.679 4.553C6.5 24.74 4.559 25.473 3.562 26c-1.631.863.755 1.177 3.438 0 2.108-.925 5.94-2.519 8.875-2.5 6.462.041 9.625-5.292 11.548-7.57-3.792-.334-8.162 1.301-10.869 2.261z"/><circle fill="#E1E8ED" cx="7" cy="21" r="1"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9a5.svg b/public/emoji/1f9a5.svg new file mode 100644 index 000000000..7371a8ed1 --- /dev/null +++ b/public/emoji/1f9a5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7A5C44" d="M6 21c-1.105 0-2-.895-2-2V4c0-1.105.895-1 2-1s2-.105 2 1c0 0-.606 6.424 0 11.997C8.54 20.971 12 22 12 22c0 1.105-4.895-1-6-1zm14 4.999c-1.105 0-2-.895-2-2v-21c0-1.105.895-1 2-1s2-.105 2 1c0 0-.446 5.108-.125 9.297.32 4.187.125 11.703.125 11.703 0 1.104-.895 2-2 2z"/><path fill="#662113" d="M36 4L0 8V4l36-2z"/><path fill="#A78E81" d="M22.644 18.406c-.633 1.126-1.363 1.809-2.16 2.193-.402.041-1.132-.085-1.417-1.443-.332-1.587-.668-3.833-.668-6.594 0-4.144.601-8.742.601-8.742 0-.929 1.412-.936 2.086-.991-.156-.832-1.749-.83-3.684-.83-1.453 0-2.256 1.074-2.402 2.301-.147 1.228-.789 6.347-.744 10 .024 1.984.154 4.161.315 6.016-.792-.201-1.585-.393-2.364-.491-2.807-.356-6.505-.535-7.129-5.881C4.584 9.712 5 4.82 5 4.82c0-.929 1.412-1.158 2.086-1.213-.156-.832-1.678-.911-3.61-.783C2.026 2.92 1.235 3.668 1 5.3.622 7.929.578 13.988.8 18.176c.124 2.338.49 10.76 4.099 14.035C7.007 34.123 10.587 35.253 15 35c4.185-.24 7.623-1.796 9.548-3.413 3.342-2.807 4.09-4.837 4.229-7.035C29 21 24.02 15.959 22.644 18.406z"/><path fill="#A78E81" d="M35.025 22.671c-2.101 3.201-6.277 4.173-10.759 1.232s-5.253-7.159-3.152-10.36 7.488-2.584 10.384-.624 5.628 6.551 3.527 9.752z"/><path fill="#E2D2C7" d="M33.271 23.178c-1.5 2.287-5.164 2.984-9.005.464s-4.419-6.001-2.918-8.288c1.5-2.287 4.294-1.921 8.135.6s5.288 4.938 3.788 7.224z"/><path fill="#292F33" d="M20.565 14.564c-.499 1.126-.677 2.336-.491 3.55 1.498.439 3.637.97 4.65.759 1.646-.342 2.198-1.817 1.956-2.981-.335-1.616-3.191-2.544-6.115-1.328z"/><circle fill="#F5F8FA" cx="23.389" cy="16.576" r="1.188"/><path fill="#292F33" d="M34.307 23.581c-.834.906-1.873 1.551-3.061 1.864-.999-1.199-2.337-2.951-2.548-3.964-.342-1.646.792-2.739 1.956-2.981 1.617-.335 3.605 1.915 3.653 5.081z"/><circle fill="#F5F8FA" cx="31.338" cy="21.792" r="1.188"/><path fill="#292F33" d="M28.047 22.475c-.72 1.098-2.194 1.403-3.291.683-1.098-.72-1.403-2.194-.683-3.291.72-1.098 1.542-.41 2.639.31 1.097.72 2.055 1.2 1.335 2.298z"/><path fill="#292F33" d="M27.979 25.122c-.024 0-.049-.002-.073-.005-4.479-.654-6.297-4.07-6.372-4.216-.126-.244-.031-.545.214-.672.246-.13.546-.031.674.211.017.031 1.673 3.109 5.629 3.687.273.04.462.294.423.567-.037.249-.25.428-.495.428z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9a6.svg b/public/emoji/1f9a6.svg new file mode 100644 index 000000000..5ea0173a5 --- /dev/null +++ b/public/emoji/1f9a6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A78E81" d="M2.381 8.671c-1.573 0-2.359.786-1.573 1.573 1.573 1.573 3.145 1.573 3.931.786L2.381 8.671zm6.29-6.29c0-1.573.786-2.359 1.573-1.573 1.573 1.573 1.573 3.145.786 3.931L8.671 2.381zm-4.717 9.435s8.547 14.433 14.939 16.512c3.344 1.087 5.692.599 7.863-1.573s2.406-4.447 1.573-7.863C26.937 13.188 11.816 3.954 11.816 3.954l-7.862 7.862z"/><path fill="#A78E81" d="M16.129 26.852c4.231 5.36 8.793 7.807 10.465 6.519 1.624-1.25-.324-2.578-2.174-6.954-1.936-4.58-10.526-2.397-8.291.435zM26.85 16.07c5.36 4.231 7.803 8.858 6.516 10.53-1.25 1.624-2.578-.324-6.954-2.174-4.581-1.936-2.394-10.591.438-8.356z"/><path fill="#846659" d="M17.008 21.564c.699-1.287-.914-3.363-2.504-3.314-1.172.036-3.617 1.934-5.883-.746-.209.209-.304.496-.311.829 1.158 1.577 2.472 3.242 3.848 4.765 1.656.479 3.913.192 4.85-1.534zm1.242-7.06c-.049 1.589 2.028 3.203 3.314 2.504 1.712-.93 2.007-3.159 1.544-4.81-1.545-1.372-3.246-2.703-4.851-3.882-.3.02-.56.113-.753.306 2.679 2.265.782 4.71.746 5.882z"/><path fill="#CAB8AC" d="M13.341 16.895c1.589-.049 3.203 2.028 2.504 3.314-1.12 2.061-4.135 2.086-5.74 1.183-1.79-1.007-3.732-4.157-2.646-5.243 2.265 2.68 4.709.783 5.882.746zm3.553-3.553c-.049 1.589 2.028 3.203 3.314 2.504 2.061-1.12 2.086-4.135 1.183-5.74-1.007-1.79-4.157-3.732-5.243-2.646 2.679 2.265.782 4.71.746 5.882z"/><path fill="#A78E81" d="M27.542 24.397c3.474 3.474 8.731 10.139 7.863 11.008-.868.868-7.534-4.389-11.008-7.863s-4.014-5.422-3.145-6.29c.868-.869 2.816-.329 6.29 3.145zM12.603 3.167c2.171 2.171 1.554 4.736-1.573 7.863s-5.692 3.744-7.863 1.573-2.34-5.523.787-8.649 6.477-2.958 8.649-.787z"/><path fill="#CAB8AC" d="M13.738 4.303c1.223 1.223 1.991 5.173-1.136 8.3s-7.076 2.359-8.3 1.136c-1.93-1.93 1.223-5.067 2.796-6.64s4.71-4.726 6.64-2.796z"/><path fill="#292F33" d="M9.457 6.312c.868.868.868 2.277 0 3.145s-2.277.868-3.145 0-.082-1.49.787-2.358 1.49-1.655 2.358-.787z"/><circle fill="#292F33" cx="4.74" cy="9.457" r="1.112"/><circle fill="#292F33" cx="9.457" cy="4.74" r="1.112"/><path fill="#A78E81" d="M10.655 10.401c-.426 0-.82-.101-1.132-.308-.189-.125-.241-.38-.116-.57.125-.19.38-.242.57-.116.452.299 1.339.188 2.019-.253.276-.179.906-.674.785-1.399-.037-.224.114-.436.338-.473.225-.036.436.114.473.338.139.836-.291 1.668-1.15 2.224-.565.368-1.205.557-1.787.557z"/><path fill="#A78E81" d="M7.931 13.619c-.103 0-.207-.009-.31-.026-.224-.038-.376-.249-.338-.473.038-.224.251-.375.473-.338.722.121 1.22-.509 1.399-.786.441-.681.553-1.568.253-2.019-.125-.189-.074-.444.116-.57.189-.126.445-.074.57.116.489.739.387 1.939-.249 2.92-.488.753-1.187 1.176-1.914 1.176z"/><path fill="#846659" d="M25.635 28.904c-1.021-1.634-1.501-3.563-.898-4.166.613-.613 2.073-.745 4.186.878-1.348-1.286-3.757-2.695-4.186-5.044.123 2.164-.419 4.625-4.125 4.043 2.082.614 5.023 4.289 5.023 4.289z"/><g fill="#67757F"><path d="M2.928 15.73c-.028 0-.057-.002-.086-.008-.264-.047-.44-.3-.393-.564.407-2.269 1.793-3.891 3.707-4.338.261-.06.523.102.584.363.061.262-.101.523-.363.584-1.524.356-2.634 1.689-2.971 3.564-.042.233-.246.399-.478.399z"/><path d="M5.072 15.974c-.253 0-.466-.195-.484-.451-.079-1.078.493-2.498 1.586-3.008.244-.113.533-.009.646.235.113.243.009.533-.235.646-.671.313-1.08 1.335-1.028 2.056.02.268-.181.501-.449.52-.013.002-.024.002-.036.002zm6.208-9.209c-.037 0-.074-.004-.111-.013-.262-.061-.424-.323-.363-.584.448-1.914 2.07-3.299 4.338-3.707.264-.047.517.129.564.393.047.264-.128.517-.393.564-1.875.337-3.207 1.447-3.564 2.971-.05.225-.25.376-.471.376z"/><path d="M12.944 6.877c-.069 0-.139-.015-.205-.046-.244-.113-.348-.403-.235-.646.51-1.093 1.919-1.664 3.008-1.586.268.019.469.253.449.52-.019.267-.248.468-.52.449-.712-.048-1.742.357-2.056 1.028-.083.177-.258.281-.441.281z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f9a7.svg b/public/emoji/1f9a7.svg new file mode 100644 index 000000000..038284558 --- /dev/null +++ b/public/emoji/1f9a7.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E26000" d="M36 32c0-12-2-28-18-28S0 20 0 32h8v-5c0-1 1-1 1 0 0 7 4 6 4 6l2 2 1-1c0-.552 1.448-1 2-1s2 .448 2 1l1 1 2-2s4 1 4-6c0-1 1-1 1 0v5h8z"/><circle fill="#E26000" cx="18" cy="13.5" r="11.5"/><path fill="#D9B981" d="M32 31c-3 0-4 1-4 1v1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1v-1s-1-1-4-1zM4 31c-3 0-4 1-4 1v1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1v-1s-1-1-4-1z"/><path fill="#C45400" d="M6.5 19.607C6.5 25.051 14.167 27 18 27s11.5-1.949 11.5-7.393c0-2.366-.974-4.536-2.595-6.235.023-.244.04-.491.04-.747C26.944 7.862 24.9 4 18 4s-8.944 3.862-8.944 8.625c0 .256.017.503.04.747C7.474 15.071 6.5 17.241 6.5 19.607z"/><path fill="#D9B981" d="M8 17.571C8 22.305 14.667 24 18 24s10-1.695 10-6.429c0-2.057-.847-3.944-2.257-5.422.02-.212.035-.427.035-.65C25.778 7.358 24 4 18 4s-7.778 3.358-7.778 7.5c0 .223.015.438.035.65C8.847 13.627 8 15.514 8 17.571z"/><circle fill="#292F33" cx="16" cy="11" r="1"/><circle fill="#292F33" cx="20" cy="11" r="1"/><path fill="#FFE8B6" d="M12.67 11.073c-.042 0-.084-.005-.127-.016-.267-.07-.427-.343-.357-.61.488-1.867 2.405-2.988 4.271-2.503.267.07.427.343.357.61-.07.267-.343.424-.61.357-1.332-.347-2.702.455-3.05 1.788-.059.225-.262.374-.484.374zm10.66 0c-.223 0-.425-.149-.483-.374-.169-.646-.579-1.188-1.155-1.525-.576-.339-1.249-.432-1.896-.262-.269.069-.54-.091-.609-.357-.07-.268.09-.541.357-.61.901-.236 1.846-.106 2.653.367.807.473 1.381 1.231 1.616 2.136.07.267-.09.54-.357.61-.042.009-.085.015-.126.015z"/><path fill="#C09154" d="M13 5l2 3 1-1 2 3 2-3 1 1 2-3s-2-1-5-1-5 1-5 1z"/><path fill="#E26000" d="M13 5l2 2 1-2 2 3 2-3 1 2 2-2s-2-2-5-2-5 2-5 2z"/><circle fill="#C09154" cx="17.5" cy="13.5" r=".5"/><circle fill="#C09154" cx="18.5" cy="13.5" r=".5"/><path fill="#292F33" d="M18 21c-3.665 0-5.286-1.579-5.354-1.646-.195-.195-.195-.512 0-.707.195-.194.51-.195.705-.002C13.365 18.658 14.783 20 18 20c3.218 0 4.635-1.342 4.648-1.356.197-.191.514-.189.706.006.193.195.193.509-.001.703C23.286 19.421 21.665 21 18 21z"/><path fill="#D9B981" d="M17.295 33c-.235 2.224-5 4-6 2-.247-.494-2.341-4.936-2.535-5.453-.194-.517.068-1.094.586-1.287s1.094.068 1.287.586c-.194-.517.068-1.094.586-1.287.517-.194 1.094.068 1.287.586-.194-.517.068-1.094.586-1.287.517-.194 1.094.068 1.287.586-.194-.517.068-1.094.586-1.287s1.094.068 1.287.586c.193.514 1.148 5.263 1.043 6.257zm1.41 0c.235 2.224 5 4 6 2 .247-.494 2.341-4.936 2.535-5.453.194-.517-.068-1.094-.586-1.287s-1.094.068-1.287.586c.194-.517-.068-1.094-.586-1.287-.517-.194-1.094.068-1.287.586.194-.517-.068-1.094-.586-1.287-.517-.194-1.094.068-1.287.586.194-.517-.068-1.094-.586-1.287s-1.094.068-1.287.586c-.193.514-1.148 5.263-1.043 6.257z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9a8.svg b/public/emoji/1f9a8.svg new file mode 100644 index 000000000..47478ffe3 --- /dev/null +++ b/public/emoji/1f9a8.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M35.876 23.572c0-3.299-1.021-5.408-4.901-9.145-2.746-2.645-2.088-5.807-.237-5.365s2.229 2.293 2.229 2.293 1.133-1.448-.378-2.937c1.096.362 1.73 1.158 2.005 2.271 1.431-1.817 2.426-6.125-1.376-8.94C29.695-.86 24.025-.332 20.915 3.361c-3.516 4.175-1.506 8.346 1.266 10.672 1.676 1.406 3.089 2.617 3.878 3.925-3.408-.743-7.49.538-9.063 1.167-1.629.652-2.544-.231-2.863-.324 1.077-2.555-2.966-2.347-2.997-.726-.39-.05-.802-.07-1.22-.071-.023-1.44-2.206-.909-2.111.295-.223.066-.447.123-.669.216-3.235 1.355-2.583 3.237-4.578 4.597-1.179.803-2.345.388-2.345 2.18 0 .985 1.584 1.759 3.171 1.835 3.058.146 4.583-.806 5.801-.48 3.326.89 4.07 4.401 4.498 6.752.387 2.13.339 2.597 1.317 2.542.978-.054 3 .168 3-2.832 1.704-.273 3.974.717 7 .387.422-.046.697 2.074 1.272 2.339.515.238 2.15.147 2.931-.634.569-.569.59-1.485.595-2.466 4.87-2.039 6.078-6.188 6.078-9.163z"/><g fill="#E1E8ED"><circle cx="8.17" cy="21.424" r="1"/><path d="M4.951 21.424c.413-1.834 1.85-3.156 4.073-3.374 1.541-.151 2.111.026 2.111.026s-.692 1.065-1.502 1.285c-1.134.31-2.783-.18-4.682 2.063zm10.629-1.99c2.747 1.123 4.557 4.732 7.591 6.159 6.083 2.862 9.112-.932 9.826-3.385.853-2.932-1.514-6.22-4.541-9.067-3.595-3.381-2.754-7.868-.798-9.456 1.899-1.541 4.23-2.085 7.122-.364-2.415-2.553-5.112-2.596-7.534-1.59s-5.036 4.145-3.605 7.982c1.294 3.468 5.367 5.672 6.33 8.397.492 1.393-.282 4.22-2.835 4.566-4.223.572-6.579-2.725-11.556-3.242z"/><path d="M17.117 19.373s2.972-.699 5.835-.534c2.862.165 4.156.534 4.156.534s.734-1.84-2.394-4.569c-3.557-3.103-5.712-5.296-4.483-9.159 1.085-3.41 6.272-6.86 11.46-4.779-5.463-1.2-8.463 2.02-9.564 3.974-1.101 1.954-1.183 4.761 1.624 7.872s5.367 4.761 4.183 6.853c-.401.709-2.175 1.472-4.679.816-1.882-.491-3.992-1.228-6.138-1.008z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1f9a9.svg b/public/emoji/1f9a9.svg new file mode 100644 index 000000000..aaa5cfa26 --- /dev/null +++ b/public/emoji/1f9a9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EA596E" d="M22.903 27.55c1.218-.812 2.232-.783 3.073-.058-.435-1.131-2.348-3.624-2.348-3.624l-.725 3.682z"/><path fill="#F4ABBA" d="M22.949 27.679c-.03 0-.06-.002-.091-.006-.401-.05-.686-.415-.637-.816l.426-3.448c.023-.188.117-.358.264-.478l4.448-3.624-7.108-3.833c-.356-.192-.488-.636-.296-.992.193-.356.636-.489.992-.297l8.072 4.353c.214.116.357.332.381.575.023.244-.077.482-.267.636l-5.07 4.13-.39 3.156c-.044.373-.36.644-.724.644z"/><path fill="#E1E8ED" d="M5.38 3.523L1.476 7.427C.5 8.403.5 11.331.5 13.283s1.952 1.952 1.952 0 3.904-4.88 6.832-5.856S5.38 3.523 5.38 3.523z"/><path fill="#292F33" d="M1.476 7.427C.5 8.403.5 11.331.5 13.283s1.952 1.952 1.952 0c0-.671.461-1.456 1.184-2.238 1.383-1.495-2.16-.69-2.16-3.618z"/><path fill="#EA596E" d="M16.598 31.913c.522.87.478 2.283.283 3.087.957-.457 2.435-2.827 2.435-2.827l-2.718-.26z"/><path fill="#EA596E" d="M17.366 35.203c.928-.616 2.595-.573 3.58-.138.986.435-.681-2.529-.681-2.529l-2.435 1.507-.464 1.16z"/><path fill="#F4ABBA" d="M25.877 27.679c-.236 0-.469-.114-.61-.326l-1.952-2.928c-.224-.336-.133-.791.203-1.015.337-.224.791-.133 1.015.203l1.952 2.928c.224.336.133.791-.203 1.015-.125.083-.266.123-.405.123zm-5.857 4.88h-2.928c-.404 0-.732-.328-.732-.732s.328-.732.732-.732h2.196V16.211c0-.404.328-.732.732-.732s.732.328.732.732v15.616c0 .404-.328.732-.732.732z"/><path fill="#F4ABBA" d="M20.996 35.487c-.307 0-.592-.193-.695-.5l-.601-1.804-2.09 2.09c-.286.286-.749.286-1.035 0-.286-.286-.286-.749 0-1.035l2.928-2.928c.18-.18.443-.252.685-.194.247.058.446.24.527.48l.976 2.928c.128.384-.08.798-.463.926-.077.025-.156.037-.232.037z"/><circle fill="#EA596E" cx="8.308" cy="4.499" r="3.904"/><path fill="#EA596E" d="M12.579 20.716c-.573 0-1.14-.098-1.688-.3-2.025-.748-3.217-2.756-3.036-5.115.223-2.908 1.853-4.853 3.164-6.415 1.175-1.402 1.833-2.241 1.696-3.203-.163-1.143-.848-1.673-1.393-1.917-1.068-.477-2.506-.286-3.666.488L6.032 1.817C8.039.479 10.524.201 12.517 1.092c1.697.759 2.826 2.281 3.096 4.176.329 2.303-1.034 3.928-2.351 5.499-1.201 1.433-2.337 2.786-2.488 4.758-.081 1.051.342 1.852 1.131 2.144.858.315 2.341.04 3.68-1.792l2.364 1.727c-1.461 1.997-3.442 3.112-5.37 3.112z"/><path fill="#EA596E" d="M15.14 17.187c-2.166-3.248 0-7.808 2.928-9.76s10.736-2.928 15.616 4.88c5.401 8.641-2.763 4.433-4.88 3.904-7.808-1.952-11.712 3.904-13.664.976z"/><circle fill="#292F33" cx="6.356" cy="4.499" r=".976"/><path fill="#EA596E" d="M9.284 6.451c1.952-.976 4.255-.997 1.327 2.907-1.171 1.562 5.282-4.671 1.957-8.175-.536-.565-4.407-1.087-5.943-.174-.982.584 2.659 5.442 2.659 5.442z"/><circle fill="#EA596E" cx="28.804" cy="19.139" r=".976"/><circle fill="#EA596E" cx="20.02" cy="24.995" r=".976"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9aa.svg b/public/emoji/1f9aa.svg new file mode 100644 index 000000000..f0f477867 --- /dev/null +++ b/public/emoji/1f9aa.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M33.495 16.378C33.268 11.612.614 12.279.614 12.279c0 3 1.524 4.057 1.396 5.465-.119 1.307 1.96 1.782 1.96 1.782s1.644.753 1.644 2.753c0 1.311 1.151 2.763 2.162 6.17.297 3.149 3.773 3.988 5.347 3.535 1.699-.49 3.072-.207 3.564.267 1.172 1.128 3.189.715 4.396.208.784-.33 1.285-1.398 3.089-.535 1.366.653 2.355.151 3.568-.898l-.007.026c.043-.064.111-.108.166-.163l.208-.19c.972-.633 2.905-.467 3.369-1.548.552-1.288 2.589-1.876 2.796-2.246.832-1.485-.582-2.043-.479-2.685.598-.404 1.4-.701 1.905-1.682 1.11-2.157-2.113-4.25-2.203-6.16z"/><path fill="#C1694F" d="M.613 8.279c1-3 5-4 8-4s13 1 16 3 9 7 9 8 2 4 2 5-1 3-2 3 1 1 0 3c-.447.894-4 3-5 3s-2 2-3 2-3-1-4 0-3 1-5 0-3 0-4 0-4-2-4-3-1-6-2-7-2-4-4-5-3-5-2-8z"/><path fill="#CCD6DD" d="M3.127 8.141c1.817-2.312 4.486-2.862 7.486-2.862s12 1 15 3c1.543 1.029 3.615 2.851 5.264 4.515 1.557 1.571 2.736 3 2.736 3.485 0 1 2 3 2 4s-1 2-2 2-.608 1.799-1 4c-.222 1.246-2.846 2.24-4 2-.979-.204-2 2-3 2s-3-1-4 0-2 2-4 1-3-1-4-1-4-1-4-2-1-6-2-7-2-4-4-5-2.44-5.651-.486-8.138z"/><path fill="#E1E8ED" d="M4.201 9.05c1.985-2.462 5.422-2.394 8.422-2.394s9.633.394 12.633 2.394 7.358 6.229 7.358 7.229 2.303 3.578 2.303 4.578-1.303.422-2.303.422.495 2.945-.505 4.945c-.447.894-2.495 1.055-3.495 1.055s-1.945 2.495-2.945 2.495-3.055-1.495-4.055-.495-1.541 2.734-3.541 1.734-3.582-2.216-4.459-1.734c-1.651.908-3-1-3-2s-1.697-6.578-2.697-7.578-1.303-3.872-3.303-4.872-1.634-4.266-.413-5.779z"/><path fill="#FFAC33" d="M3.486 8.392c1.232-2.293 5.088-2.356 7.216-2.265s8.418.997 10.083 2.99 3.885 3.625 5.273 4.259c1.388.634 5.458 2.084 5.365 4.078-.093 1.994-1.573 2.809-1.573 2.809s2.128 1.994 1.11 3.534c-1.018 1.54-4.903 2.084-6.568 1.087s-3.238 1.087-5.92.634c-2.683-.453-4.995-1.54-6.846-4.803s-4.81-5.346-6.383-6.705-2.682-3.896-1.757-5.618z"/><path fill="#FFD983" d="M26.894 23.627c-.58 0-1.096-.122-1.451-.342-.569-.354-1.154-.527-1.784-.527-.643 0-1.214.181-1.764.356-.569.18-1.106.35-1.766.35-.22 0-.455-.019-.707-.063-2.894-.506-4.914-1.975-6.357-4.619-1.521-2.785-3.505-4.196-5.099-5.33-.553-.393-1.03-.733-1.414-1.077-1.2-1.077-2.088-2.871-1.499-4.01.492-.951 1.611-1.375 3.627-1.375.511 0 1.011.025 1.472.047l.407.019c4.172.185 7.588 1.072 8.501 2.207 1.848 2.296 4.961 4.531 6.5 5.261.262.124.595.262.968.414.906.37 3.314 1.355 3.28 2.14-.051 1.128-1.015 1.537-1.125 1.579l-2.397.937 2.125 1.462c.57.394 1.31 1.22 1.137 1.49-.393.617-1.534 1.081-2.654 1.081z"/><ellipse fill="#FFAC33" cx="16.867" cy="15.184" rx="3.587" ry="2.143"/><circle fill="#E1E8ED" cx="16.867" cy="12.403" r="3.5"/><ellipse fill="#FFF" cx="16.867" cy="11.229" rx="2.166" ry="1.832"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ae.svg b/public/emoji/1f9ae.svg new file mode 100644 index 000000000..fc635872c --- /dev/null +++ b/public/emoji/1f9ae.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M33.425 17.472c.942 2.443 2.837 7.953 2.326 11.488 0 0-2.903-1.618-3.349-7.349-.368-4.731-1.163-7.395-1.163-7.395s1.51 1.501 2.186 3.256z"/><path fill="#C1694F" d="M10.321 21.935s1.016 2.352.676 8.242c-.061 1.057-.209 2.136-.242 3.022-1.812 0-1.652 2.064-1.268 2.064h2.902c.683 0 1.893-3.438 2.212-8.209.319-4.772-4.28-5.119-4.28-5.119zm11.89-.331s.575 3.528 3.651 6.413c.257 1.163.769 4.232.949 5.195-1.889 0-1.282 2.047-.731 2.047h2.646c.951 0 1.092-3.442.206-7.694-.885-4.251-6.721-5.961-6.721-5.961z"/><path fill="#D99E82" d="M32.202 15.654c-1.253-3.752-7.214-3.628-13.997-2.765-3.055.389-3.64-4.453-3.64-5.286 0-3.626-3.244-5.455-6.496-4.229-.779.293-1.402 1.33-1.754 1.872-1.977 3.037-4.658.015-4.917 2.822-.313 3.395 1.721 4.534 5.051 4.821 1.892.163 2.425 1.069 2.838 5.018.154 1.472.739 5.67 3.421 7.102.78 2.959 1.836 6.615 2.25 8.475-2.252.476-1.341 2.179-1.341 2.179s3.151-.043 3.836-.043c.814 0 .191-5.976-.935-9.787 4.764.043 7.828-1.337 8.799-1.762 1.028 2.96 4.152 3.633 4.851 4.892.433.78 1.878 3.383 2.001 4.496-1.602.52-1.091 1.732-.909 2.122 1.083-.043 3.22-.043 3.498-.043 1.11 0-1.137-6.904-2.083-8.713-1.082-2.071.781-7.419-.473-11.171z"/><path fill="#F4C7B5" d="M16.266 24.464c.044.371.141.891.253 1.369 4.764.043 7.828-1.337 8.799-1.762-.215-.78-.23-1.27-.171-1.538-3.394.557-4.548 2.205-8.881 1.931zM6.449 12.889c1.892.163 2.425 1.069 2.838 5.018.154 1.472.739 5.67 3.421 7.102-.72-2.788-1.959-12.388-6.259-12.12z"/><path fill="#272B2B" d="M2.503 8.326c-.109.762-.494 1.192-.879 1.133C.864 9.342.232 8.372.232 7.603s.624-.963 1.392-.928c1.043.048 1.002.788.879 1.651z"/><path fill="#662113" d="M15.167 9.495c.348 2.515-1.157 2.898-2.383 2.898s-3.054-1.25-2.748-3.77c.134-1.107.555-2.193.809-3.175.336-1.303 1.199-1.732 1.894-1.367 1.665.873 2.203 3.796 2.428 5.414z"/><circle fill="#292F33" cx="8.069" cy="6.675" r=".928"/><circle fill="#C1694F" cx="3.053" cy="10.503" r=".488"/><circle fill="#C1694F" cx="3.695" cy="9.804" r=".269"/><circle fill="#C1694F" cx="4.1" cy="10.503" r=".269"/><path fill="#377700" d="M9.39 18.53c.872.105 2.605-.141 3.384-.314.779-.173 9.14-2.651 9.14-2.651l.419 1.395s-8.623 2.671-9.488 2.93c-.865.26-2.93 1.291-2.93 1.291s-.352-.566-.525-1.221c-.174-.663 0-1.43 0-1.43zm9.246.483l1.605-.488s1.465 4.395.977 6.977l-1.745.215s.126-1.56-.139-3.215c-.28-1.745-.698-3.489-.698-3.489z"/><path fill="#292F33" d="M8.379 14.17c1.045-.392 4.858-.33 7.395-2.233.558-.419 1.442.867 1.047 1.116-3.209 2.023-7.042 2.267-7.884 2.372-.558.07-1.116-1.046-.558-1.255z"/><path fill="#489C00" d="M18.206 12.889s.638 1.838-.129 2.676c-.767.837-2.163.907-2.163 2.093s.837 2.163 1.465 2.023c.628-.14 3.907-.419 5.093-1.256s-.349-6-.349-6-1.047-.279-2.163 0c-1.116.279-1.754.464-1.754.464z"/><path fill="#377700" d="M20.692 16.854c-.496.127-.996-.189-1.085-.693-.202-1.138-.393-3.119.543-3.829 1.343-1.019 8.617-4.4 9.314-4.68.678-.272.576-1.027.888-2.075.258-.869 1.984-.913 1.563.481-.464 1.535-.594 2.318-1.312 2.624-1.595.678-7.833 3.833-9.032 4.449-.455.234-.328 1.803-.204 2.76.056.436-.224.846-.649.955-.009.004-.018.006-.026.008z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9af.svg b/public/emoji/1f9af.svg new file mode 100644 index 000000000..aba8a9807 --- /dev/null +++ b/public/emoji/1f9af.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M25.45 6.842l1.274 1.274L7.6 27.241l-1.275-1.275zM.587 32.979c-.351-.351-.351-.924 0-1.275l3.825-3.825c.351-.351.924-.351 1.275 0 .351.351.351.924 0 1.275l-3.825 3.825c-.351.35-.924.35-1.275 0z"/><path fill="#DD2E44" d="M7.599 24.691l1.275 1.275-5.1 5.1L2.5 29.79z"/><path fill="#292F33" d="M24.812 8.754c-.351-.351-.351-.924 0-1.275l3.825-3.825c.351-.351.924-.351 1.275 0 .351.351.351.924 0 1.275l-3.825 3.825c-.351.351-.925.351-1.275 0z"/><path fill="#292F33" d="M25.606 9.548L24.018 7.96c-.194-.194-.194-.513 0-.707l.568-.568c.194-.194.513-.194.707 0l1.588 1.588c.194.194.194.513 0 .707l-.568.568c-.195.194-.513.194-.707 0zm6.924-3.259c-1.527-.215-3.042-1.485-3.114-1.545l-.328-.278.261-.34c1.04-1.354 3.855-1.973 5.366-1.189 1.138.591 1.179 1.318 1.103 1.698-.175.872-1.263 1.561-2.648 1.677-.21.016-.425.007-.64-.023zM30.382 4.35c.664.474 1.815 1.134 2.713 1.062 1.002-.084 1.76-.562 1.839-.955.064-.321-.423-.612-.635-.721-1.021-.534-2.947-.189-3.917.614z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9b0.svg b/public/emoji/1f9b0.svg new file mode 100644 index 000000000..5cb487ef0 --- /dev/null +++ b/public/emoji/1f9b0.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M0 21h30v15H0z"/><path fill="#E95F28" d="M4.5 1c-1.567 0-3.061.086-4.5.235v23.416c13.81 13.743 6.846-.189 6.846-.189 4.692 4.692 18.769 4.692 18.769 4.692L29.038 36h5.28c.424-2.252.682-5.332.682-9.192C35 15.077 23.269 1 4.5 1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9b1.svg b/public/emoji/1f9b1.svg new file mode 100644 index 000000000..414422b83 --- /dev/null +++ b/public/emoji/1f9b1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M0 21h30v15H0z"/><path fill="#FFAC33" d="M35 26.417c0-1.812-.954-3.39-2.381-4.29.216-.563.348-1.169.348-1.81 0-2.595-1.95-4.709-4.459-5.02.239-.657.392-1.357.392-2.097 0-3.369-2.731-6.1-6.1-6.1-.803 0-1.566.165-2.267.447-.704-2.595-3.05-4.514-5.866-4.514-1.769 0-3.347.765-4.461 1.966C9.347 2.669 7.127 1 4.5 1 2.704 1 1.111 1.792 0 3.03v27.447c1.289.645 2.834 1.023 4.5 1.023 2.635 0 4.955-.956 6.44-2.414.968 2.56 4.071 4.447 7.794 4.447 2.188 0 4.166-.655 5.626-1.71.4 1.394.511 2.668.542 4.177h6.948c.688-.911 1.117-2.131 1.117-3.483 0-.653-.108-1.271-.285-1.842C34.075 29.768 35 28.202 35 26.417z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9b2.svg b/public/emoji/1f9b2.svg new file mode 100644 index 000000000..035b6919f --- /dev/null +++ b/public/emoji/1f9b2.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M34.896 36C30.618 13.677 16.169 2.725 0 1.195V36h34.896z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9b3.svg b/public/emoji/1f9b3.svg new file mode 100644 index 000000000..ea3072c4d --- /dev/null +++ b/public/emoji/1f9b3.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M0 21h30v15H0z"/><path fill="#E1E8ED" d="M4.5 1c-1.567 0-3.061.086-4.5.235v23.416c13.81 13.743 6.846-.189 6.846-.189 4.692 4.692 18.769 4.692 18.769 4.692L29.038 36h5.28c.424-2.252.682-5.332.682-9.192C35 15.077 23.269 1 4.5 1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ba.svg b/public/emoji/1f9ba.svg new file mode 100644 index 000000000..50bf8e37b --- /dev/null +++ b/public/emoji/1f9ba.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#994308" d="M17.988 2.184C15 2.184 12.679 1.092 11.618 0v15.292h12.741V0C23.297 1.092 21 2.184 17.988 2.184z"/><path fill="#EB7421" d="M28.909 7.958v-4.79c0-1.083-.674-2.026-1.635-2.289L24.055 0l-6.067 14.589L11.921 0 8.702.879c-.961.263-1.635 1.207-1.635 2.289v4.789c0 3.663-2.716 6.632-6.067 6.632v19.036c0 1.206.951 2.185 2.123 2.185h11.831c1.675 0 3.034-1.485 3.034-3.316 0 1.831 1.358 3.316 3.034 3.316h11.831c1.173 0 2.124-.978 2.124-2.185V14.589c-3.352 0-6.068-2.969-6.068-6.631z"/><path fill="#FCFB65" d="M1 29h16.988v3H1zm33.976 3H17.988v-3h16.988zM1 22h16.988v3H1zm33.976 3H17.988v-3h16.988z"/><path fill="#FCFB65" d="M12 23V.19L11.921 0 9 .798V23zm15 0V.805L24.055 0 24 .133V23z"/><path fill="#994308" d="M16.926 11v23.995c.645-.608 1.062-1.497 1.062-2.501 0 .979.395 1.849 1.012 2.456V11h-2.074z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9bb-1f3fb.svg b/public/emoji/1f9bb-1f3fb.svg new file mode 100644 index 000000000..b94d484ae --- /dev/null +++ b/public/emoji/1f9bb-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M30.405 23.361c-.449-.318-.555-.946-.237-1.394l1.736-2.447c.318-.449.946-.555 1.394-.237.449.318.555.946.237 1.394l-1.736 2.447c-.318.448-.945.555-1.394.237z"/><path fill="#99AAB5" d="M18 0c7 0 17 2 17 12 0 7-8 17-14 17S18 0 18 0z"/><path fill="#F7DECE" d="M29 15c-1 6-4.599 8.097-6 13-2 7-7 8-11 8-7 0-3.856-6.568-7-16-3-9-2.716-15.899 7-18 9.25-2 18.634 3.194 17 13z"/><path fill="#E0AA94" d="M23.948 6.211c-2.643-2.178-6.912-3.018-11.14-2.192-2.396.467-4.207 1.644-5.381 3.497-2.517 3.973-1.124 9.618-1.063 9.856.136.535.678.862 1.215.723.535-.136.859-.68.723-1.215-.004-.016-.134-.545-.24-1.358.059-.004.117.007.177-.008 3.049-.751 5.129-.051 5.701 1.922.533 1.841-.446 4.513-2.442 5.181-1.008.264-2.379.997-2.924 2.199-.251.554-.435 1.446.116 2.549.175.351.528.553.895.553.15 0 .303-.034.446-.106.494-.247.694-.848.447-1.342-.216-.432-.151-.679-.084-.828.238-.524 1.084-.953 1.672-1.109 3.23-1.076 4.592-4.898 3.794-7.653-.685-2.366-3.133-4.466-7.932-3.343-.008-1.584.238-3.45 1.189-4.95.88-1.389 2.213-2.241 4.074-2.604 3.659-.713 7.292-.033 9.485 1.773C24.218 9.025 25 10.79 25 13c0 3.48-1.008 4.756-2.403 6.522-.461.583-.938 1.186-1.429 1.923-.307.46-.183 1.08.277 1.387.171.113.364.168.554.168.323 0 .641-.156.833-.445.446-.67.898-1.24 1.333-1.792C25.623 18.917 27 17.175 27 13c0-2.797-1.056-5.145-3.052-6.789z"/><circle fill="#66757F" cx="11" cy="18" r="5"/><circle fill="#99AAB5" cx="11" cy="18" r="3"/><path fill="#CCD6DD" d="M11.001 19c-.072 0-.145-.008-.218-.024-4.18-.929-6.665-4.504-6.183-8.897C5.134 5.225 9.554 0 18 0c.552 0 1 .448 1 1s-.448 1-1 1C10.747 2 7.042 6.167 6.589 10.297c-.282 2.566.761 5.868 4.628 6.727.539.12.879.654.759 1.193-.103.466-.517.783-.975.783z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9bb-1f3fc.svg b/public/emoji/1f9bb-1f3fc.svg new file mode 100644 index 000000000..d187bad0a --- /dev/null +++ b/public/emoji/1f9bb-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M30.405 23.361c-.449-.318-.555-.946-.237-1.394l1.736-2.447c.318-.449.946-.555 1.394-.237.449.318.555.946.237 1.394l-1.736 2.447c-.318.448-.945.555-1.394.237z"/><path fill="#99AAB5" d="M18 0c7 0 17 2 17 12 0 7-8 17-14 17S18 0 18 0z"/><path fill="#F3D2A2" d="M29 15c-1 6-4.599 8.097-6 13-2 7-7 8-11 8-7 0-3.856-6.568-7-16-3-9-2.716-15.899 7-18 9.25-2 18.634 3.194 17 13z"/><path fill="#D2A077" d="M23.948 6.211c-2.643-2.178-6.912-3.018-11.14-2.192-2.396.467-4.207 1.644-5.381 3.497-2.517 3.973-1.124 9.618-1.063 9.856.136.535.678.862 1.215.723.535-.136.859-.68.723-1.215-.004-.016-.134-.545-.24-1.358.059-.004.117.007.177-.008 3.049-.751 5.129-.051 5.701 1.922.533 1.841-.446 4.513-2.442 5.181-1.008.264-2.379.997-2.924 2.199-.251.554-.435 1.446.116 2.549.175.351.528.553.895.553.15 0 .303-.034.446-.106.494-.247.694-.848.447-1.342-.216-.432-.151-.679-.084-.828.238-.524 1.084-.953 1.672-1.109 3.23-1.076 4.592-4.898 3.794-7.653-.685-2.366-3.133-4.466-7.932-3.343-.008-1.584.238-3.45 1.189-4.95.88-1.389 2.213-2.241 4.074-2.604 3.659-.713 7.292-.033 9.485 1.773C24.218 9.025 25 10.79 25 13c0 3.48-1.008 4.756-2.403 6.522-.461.583-.938 1.186-1.429 1.923-.307.46-.183 1.08.277 1.387.171.113.364.168.554.168.323 0 .641-.156.833-.445.446-.67.898-1.24 1.333-1.792C25.623 18.917 27 17.175 27 13c0-2.797-1.056-5.145-3.052-6.789z"/><circle fill="#66757F" cx="11" cy="18" r="5"/><circle fill="#99AAB5" cx="11" cy="18" r="3"/><path fill="#CCD6DD" d="M11.001 19c-.072 0-.145-.008-.218-.024-4.18-.929-6.665-4.504-6.183-8.897C5.134 5.225 9.554 0 18 0c.552 0 1 .448 1 1s-.448 1-1 1C10.747 2 7.042 6.167 6.589 10.297c-.282 2.566.761 5.868 4.628 6.727.539.12.879.654.759 1.193-.103.466-.517.783-.975.783z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9bb-1f3fd.svg b/public/emoji/1f9bb-1f3fd.svg new file mode 100644 index 000000000..51ed272c8 --- /dev/null +++ b/public/emoji/1f9bb-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M30.405 23.361c-.449-.318-.555-.946-.237-1.394l1.736-2.447c.318-.449.946-.555 1.394-.237.449.318.555.946.237 1.394l-1.736 2.447c-.318.448-.945.555-1.394.237z"/><path fill="#99AAB5" d="M18 0c7 0 17 2 17 12 0 7-8 17-14 17S18 0 18 0z"/><path fill="#D4AB88" d="M29 15c-1 6-4.599 8.097-6 13-2 7-7 8-11 8-7 0-3.856-6.568-7-16-3-9-2.716-15.899 7-18 9.25-2 18.634 3.194 17 13z"/><path fill="#B78B60" d="M23.948 6.211c-2.643-2.178-6.912-3.018-11.14-2.192-2.396.467-4.207 1.644-5.381 3.497-2.517 3.973-1.124 9.618-1.063 9.856.136.535.678.862 1.215.723.535-.136.859-.68.723-1.215-.004-.016-.134-.545-.24-1.358.059-.004.117.007.177-.008 3.049-.751 5.129-.051 5.701 1.922.533 1.841-.446 4.513-2.442 5.181-1.008.264-2.379.997-2.924 2.199-.251.554-.435 1.446.116 2.549.175.351.528.553.895.553.15 0 .303-.034.446-.106.494-.247.694-.848.447-1.342-.216-.432-.151-.679-.084-.828.238-.524 1.084-.953 1.672-1.109 3.23-1.076 4.592-4.898 3.794-7.653-.685-2.366-3.133-4.466-7.932-3.343-.008-1.584.238-3.45 1.189-4.95.88-1.389 2.213-2.241 4.074-2.604 3.659-.713 7.292-.033 9.485 1.773C24.218 9.025 25 10.79 25 13c0 3.48-1.008 4.756-2.403 6.522-.461.583-.938 1.186-1.429 1.923-.307.46-.183 1.08.277 1.387.171.113.364.168.554.168.323 0 .641-.156.833-.445.446-.67.898-1.24 1.333-1.792C25.623 18.917 27 17.175 27 13c0-2.797-1.056-5.145-3.052-6.789z"/><circle fill="#66757F" cx="11" cy="18" r="5"/><circle fill="#99AAB5" cx="11" cy="18" r="3"/><path fill="#CCD6DD" d="M11.001 19c-.072 0-.145-.008-.218-.024-4.18-.929-6.665-4.504-6.183-8.897C5.134 5.225 9.554 0 18 0c.552 0 1 .448 1 1s-.448 1-1 1C10.747 2 7.042 6.167 6.589 10.297c-.282 2.566.761 5.868 4.628 6.727.539.12.879.654.759 1.193-.103.466-.517.783-.975.783z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9bb-1f3fe.svg b/public/emoji/1f9bb-1f3fe.svg new file mode 100644 index 000000000..af889ade4 --- /dev/null +++ b/public/emoji/1f9bb-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M30.405 23.361c-.449-.318-.555-.946-.237-1.394l1.736-2.447c.318-.449.946-.555 1.394-.237.449.318.555.946.237 1.394l-1.736 2.447c-.318.448-.945.555-1.394.237z"/><path fill="#99AAB5" d="M18 0c7 0 17 2 17 12 0 7-8 17-14 17S18 0 18 0z"/><path fill="#AF7E57" d="M29 15c-1 6-4.599 8.097-6 13-2 7-7 8-11 8-7 0-3.856-6.568-7-16-3-9-2.716-15.899 7-18 9.25-2 18.634 3.194 17 13z"/><path fill="#90603E" d="M23.948 6.211c-2.643-2.178-6.912-3.018-11.14-2.192-2.396.467-4.207 1.644-5.381 3.497-2.517 3.973-1.124 9.618-1.063 9.856.136.535.678.862 1.215.723.535-.136.859-.68.723-1.215-.004-.016-.134-.545-.24-1.358.059-.004.117.007.177-.008 3.049-.751 5.129-.051 5.701 1.922.533 1.841-.446 4.513-2.442 5.181-1.008.264-2.379.997-2.924 2.199-.251.554-.435 1.446.116 2.549.175.351.528.553.895.553.15 0 .303-.034.446-.106.494-.247.694-.848.447-1.342-.216-.432-.151-.679-.084-.828.238-.524 1.084-.953 1.672-1.109 3.23-1.076 4.592-4.898 3.794-7.653-.685-2.366-3.133-4.466-7.932-3.343-.008-1.584.238-3.45 1.189-4.95.88-1.389 2.213-2.241 4.074-2.604 3.659-.713 7.292-.033 9.485 1.773C24.218 9.025 25 10.79 25 13c0 3.48-1.008 4.756-2.403 6.522-.461.583-.938 1.186-1.429 1.923-.307.46-.183 1.08.277 1.387.171.113.364.168.554.168.323 0 .641-.156.833-.445.446-.67.898-1.24 1.333-1.792C25.623 18.917 27 17.175 27 13c0-2.797-1.056-5.145-3.052-6.789z"/><circle fill="#66757F" cx="11" cy="18" r="5"/><circle fill="#99AAB5" cx="11" cy="18" r="3"/><path fill="#CCD6DD" d="M11.001 19c-.072 0-.145-.008-.218-.024-4.18-.929-6.665-4.504-6.183-8.897C5.134 5.225 9.554 0 18 0c.552 0 1 .448 1 1s-.448 1-1 1C10.747 2 7.042 6.167 6.589 10.297c-.282 2.566.761 5.868 4.628 6.727.539.12.879.654.759 1.193-.103.466-.517.783-.975.783z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9bb-1f3ff.svg b/public/emoji/1f9bb-1f3ff.svg new file mode 100644 index 000000000..818e532d3 --- /dev/null +++ b/public/emoji/1f9bb-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M30.405 23.361c-.449-.318-.555-.946-.237-1.394l1.736-2.447c.318-.449.946-.555 1.394-.237.449.318.555.946.237 1.394l-1.736 2.447c-.318.448-.945.555-1.394.237z"/><path fill="#99AAB5" d="M18 0c7 0 17 2 17 12 0 7-8 17-14 17S18 0 18 0z"/><path fill="#7C533E" d="M29 15c-1 6-4.599 8.097-6 13-2 7-7 8-11 8-7 0-3.856-6.568-7-16-3-9-2.716-15.899 7-18 9.25-2 18.634 3.194 17 13z"/><path fill="#583529" d="M23.948 6.211c-2.643-2.178-6.912-3.018-11.14-2.192-2.396.467-4.207 1.644-5.381 3.497-2.517 3.973-1.124 9.618-1.063 9.856.136.535.678.862 1.215.723.535-.136.859-.68.723-1.215-.004-.016-.134-.545-.24-1.358.059-.004.117.007.177-.008 3.049-.751 5.129-.051 5.701 1.922.533 1.841-.446 4.513-2.442 5.181-1.008.264-2.379.997-2.924 2.199-.251.554-.435 1.446.116 2.549.175.351.528.553.895.553.15 0 .303-.034.446-.106.494-.247.694-.848.447-1.342-.216-.432-.151-.679-.084-.828.238-.524 1.084-.953 1.672-1.109 3.23-1.076 4.592-4.898 3.794-7.653-.685-2.366-3.133-4.466-7.932-3.343-.008-1.584.238-3.45 1.189-4.95.88-1.389 2.213-2.241 4.074-2.604 3.659-.713 7.292-.033 9.485 1.773C24.218 9.025 25 10.79 25 13c0 3.48-1.008 4.756-2.403 6.522-.461.583-.938 1.186-1.429 1.923-.307.46-.183 1.08.277 1.387.171.113.364.168.554.168.323 0 .641-.156.833-.445.446-.67.898-1.24 1.333-1.792C25.623 18.917 27 17.175 27 13c0-2.797-1.056-5.145-3.052-6.789z"/><circle fill="#66757F" cx="11" cy="18" r="5"/><circle fill="#99AAB5" cx="11" cy="18" r="3"/><path fill="#CCD6DD" d="M11.001 19c-.072 0-.145-.008-.218-.024-4.18-.929-6.665-4.504-6.183-8.897C5.134 5.225 9.554 0 18 0c.552 0 1 .448 1 1s-.448 1-1 1C10.747 2 7.042 6.167 6.589 10.297c-.282 2.566.761 5.868 4.628 6.727.539.12.879.654.759 1.193-.103.466-.517.783-.975.783z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9bb.svg b/public/emoji/1f9bb.svg new file mode 100644 index 000000000..05bc02011 --- /dev/null +++ b/public/emoji/1f9bb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M30.405 23.361c-.449-.318-.555-.946-.237-1.394l1.736-2.447c.318-.449.946-.555 1.394-.237.449.318.555.946.237 1.394l-1.736 2.447c-.318.448-.945.555-1.394.237z"/><path fill="#99AAB5" d="M18 0c7 0 17 2 17 12 0 7-8 17-14 17S18 0 18 0z"/><path fill="#FFDC5D" d="M29 15c-1 6-4.599 8.097-6 13-2 7-7 8-11 8-7 0-3.856-6.568-7-16-3-9-2.716-15.899 7-18 9.25-2 18.634 3.194 17 13z"/><path fill="#EF9645" d="M23.948 6.211c-2.643-2.178-6.912-3.018-11.14-2.192-2.396.467-4.207 1.644-5.381 3.497-2.517 3.973-1.124 9.618-1.063 9.856.136.535.678.862 1.215.723.535-.136.859-.68.723-1.215-.004-.016-.134-.545-.24-1.358.059-.004.117.007.177-.008 3.049-.751 5.129-.051 5.701 1.922.533 1.841-.446 4.513-2.442 5.181-1.008.264-2.379.997-2.924 2.199-.251.554-.435 1.446.116 2.549.175.351.528.553.895.553.15 0 .303-.034.446-.106.494-.247.694-.848.447-1.342-.216-.432-.151-.679-.084-.828.238-.524 1.084-.953 1.672-1.109 3.23-1.076 4.592-4.898 3.794-7.653-.685-2.366-3.133-4.466-7.932-3.343-.008-1.584.238-3.45 1.189-4.95.88-1.389 2.213-2.241 4.074-2.604 3.659-.713 7.292-.033 9.485 1.773C24.218 9.025 25 10.79 25 13c0 3.48-1.008 4.756-2.403 6.522-.461.583-.938 1.186-1.429 1.923-.307.46-.183 1.08.277 1.387.171.113.364.168.554.168.323 0 .641-.156.833-.445.446-.67.898-1.24 1.333-1.792C25.623 18.917 27 17.175 27 13c0-2.797-1.056-5.145-3.052-6.789z"/><circle fill="#66757F" cx="11" cy="18" r="5"/><circle fill="#99AAB5" cx="11" cy="18" r="3"/><path fill="#CCD6DD" d="M11.001 19c-.072 0-.145-.008-.218-.024-4.18-.929-6.665-4.504-6.183-8.897C5.134 5.225 9.554 0 18 0c.552 0 1 .448 1 1s-.448 1-1 1C10.747 2 7.042 6.167 6.589 10.297c-.282 2.566.761 5.868 4.628 6.727.539.12.879.654.759 1.193-.103.466-.517.783-.975.783z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9bc.svg b/public/emoji/1f9bc.svg new file mode 100644 index 000000000..153f55312 --- /dev/null +++ b/public/emoji/1f9bc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M26.623 9.859l.44-5.43c.022-.274.265-.48.539-.458l.03.002c.274.022.48.265.458.539l-.44 5.43c-.022.274-.265.48-.539.458l-.03-.002c-.275-.023-.481-.265-.458-.539z"/><path fill="#292F33" d="M14.457 20.548v2.06s-2.06 0-2.06 2.06v3.09c0 1.03 1.03 2.06 2.06 2.06h10.302c1.03 0 2.06-1.03 2.06-2.06v-5.151c0-1.03-1.03-2.06-2.06-2.06l-10.302.001z"/><path fill="#292F33" d="M21.622 22.154l-10.145-1.789c-1.014-.179-1.014-.179-.836-1.193.098-.558.635-.934 1.193-.836l10.145 1.789c.558.098.934.635.836 1.193-.178 1.015-.178 1.015-1.193.836z"/><path fill="#292F33" d="M23.974 18.511c-.199.949-.574 1.882-2.157 1.583-1.583-.298-1.836 1.262-.849 1.538.987.275 3.35.666 4.039-.459.688-1.124.803-2.203.734-2.685-.069-.481-1.62-.679-1.767.023z"/><path fill="#DD2E44" d="M22.137 22.504l-11.189-1.973c-.271-.048-.453-.308-.406-.579l.005-.03c.048-.271.308-.453.579-.406l11.189 1.973c.271.048.453.308.406.579l-.005.03c-.047.271-.308.453-.579.406z"/><path fill="#292F33" d="M27.778 8.848l-1.789 10.145c-.179 1.014-.179 1.014-1.193.836-.558-.098-.934-.635-.836-1.193L25.749 8.49c.098-.558.635-.934 1.193-.836 1.015.179 1.015.179.836 1.194zM28.8 1.132l-.734 4.146c-.09.508-.173 1.038-1.188.859-.558-.099-.908-.737-.786-1.441L26.75.978c.168-.597.645-1.034 1.203-.936 1.014.18.937.582.847 1.09z"/><path fill="#DD2E44" d="M28.27 8.402l-1.973 11.189c-.048.271-.308.453-.579.406l-.03-.005c-.271-.048-.453-.308-.406-.579l1.973-11.189c.048-.271.308-.453.579-.406l.03.005c.271.048.453.308.406.579zm1.28-7.68l-.943 5.366c-.048.271-.308.454-.579.406l-.03-.005c-.271-.048-.453-.308-.406-.579l.943-5.366c.048-.271.308-.453.579-.406l.03.005c.271.048.453.308.406.579z"/><path fill="#292F33" d="M24.237 17.912l-7.691-1.356c-.769-.136-.769-.136-.635-.895.074-.418.48-.698.903-.624l7.691 1.356c.423.075.709.477.635.895-.134.759-.134.759-.903.624z"/><path fill="#DD2E44" d="M21.794 21.397c1.023.18 3.043.537 3.58-2.507.537-3.043 1.551-2.865 1.014.179s-2.304 3.778-4.773 3.342c-2.029-.357-1.85-1.372.179-1.014zm-10.641-1.876c2.03.35 2.345 1.465.317 1.102-.899-.161-1.014.218-1.289.987-.259.723-.63 1.81-1.178 3.328-.403 1.115-1.317.621-.979-.352.568-1.636 1.093-3.058 1.434-3.962.348-.924.632-1.286 1.695-1.103z"/><path fill="#DD2E44" d="M8.929 23.654l-.029-.011c-.258-.094-.547.04-.641.299l-2.124 5.836c-.094.258.04.547.299.641l.028.01c.258.094.547-.04.641-.299l2.124-5.836c.094-.258-.04-.546-.298-.64z"/><path fill="#66757F" d="M6.462 30.43l-3.9-1.42c-.258-.094-.393-.382-.299-.641l.01-.028c.094-.258.382-.393.641-.299l3.9 1.42c.258.094.393.382.299.641l-.01.028c-.094.258-.382.393-.641.299z"/><path fill="#DD2E44" d="M12.225 30.718l3.06-3.06c.194-.194.194-.513 0-.707l-.021-.021c-.194-.194-.513-.194-.707 0l-3.06 3.06c-.194.194-.194.513 0 .707l.021.021c.194.194.512.194.707 0zm18.744 3.222h-.06c-.55 0-1-.45-1-1v-3.151c0-.55.45-1 1-1h.06c.55 0 1 .45 1 1v3.151c0 .55-.45 1-1 1z"/><path fill="#DD2E44" d="M11.911 33.94h-.06c-.55 0-1-.45-1-1v-3.151c0-.55.45-1 1-1h.06c.55 0 1 .45 1 1v3.151c0 .55-.45 1-1 1zm13.329-6.186h2.09c.275 0 .5-.225.5-.5v-.03c0-.275-.225-.5-.5-.5h-2.09c-.275 0-.5.225-.5.5v.03c0 .275.225.5.5.5z"/><path fill="#DD2E44" d="M30.047 30.657l-3.06-3.06c-.194-.194-.194-.513 0-.707l.021-.021c.194-.194.513-.194.707 0l3.06 3.06c.194.194.194.513 0 .707l-.021.021c-.195.195-.513.195-.707 0z"/><path fill="#292F33" d="M9.998 15.528c.765.328 2.111.964 2.41 1.079 0 0 .138-.918.505-.918 0 0 .138-.482.229-.688.092-.207.367-.138.39.252.023.39-.092.528-.092.528s.344.436.138 1.033c0 0 .459.069.367.643-.092.574.069 1.01-.344 1.124-.413.115-1.974.551-1.997-.069-.023-.62-.413-1.102-1.17-1.561-.757-.459-1.308-.964-1.216-1.216.091-.253.137-.482.78-.207z"/><path fill="#DD2E44" d="M25.288 24.668H13.927c-.275 0-.5-.225-.5-.5v-.03c0-.275.225-.5.5-.5h11.362c.275 0 .5.225.5.5v.03c-.001.275-.226.5-.501.5z"/><circle fill="#66757F" cx="20.122" cy="31.364" r="4.636"/><circle fill="#66757F" cx="11.881" cy="33.425" r="2.575"/><circle fill="#66757F" cx="30.939" cy="33.94" r="2.06"/><circle fill="#CCD6DD" cx="20.122" cy="31.364" r="2.575"/><circle fill="#CCD6DD" cx="11.881" cy="33.425" r="1.545"/><circle fill="#292F33" cx="30.939" cy="33.94" r="1.03"/><g fill="#292F33"><circle cx="20.638" cy="30.472" r=".515"/><circle cx="19.607" cy="32.256" r=".515"/><circle cx="19.23" cy="30.849" r=".515"/><circle cx="21.015" cy="31.879" r=".515"/></g><circle fill="#292F33" cx="11.881" cy="33.425" r=".773"/><circle fill="#66757F" cx="30.939" cy="33.94" r=".515"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9bd.svg b/public/emoji/1f9bd.svg new file mode 100644 index 000000000..c371d4bf8 --- /dev/null +++ b/public/emoji/1f9bd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#DD2E44"><path d="M11.83 26.822l11.18.981c.274.024.518-.18.542-.454l.003-.03c.024-.274-.181-.518-.455-.542l-11.18-.981c-.274-.024-.518.18-.542.455l-.003.03c-.024.273.181.517.455.541z"/><path d="M23.01 27.803l-.03-.003c-.274-.024-.478-.268-.455-.542l.452-5.161c.024-.274.268-.478.542-.455l.03.003c.274.024.478.268.455.542l-.452 5.161c-.024.274-.268.479-.542.455zm-11.062-7.809l-.03-.003c-.274-.024-.518.181-.542.454l-1.048 11.977c-.024.274.181.518.455.542l.03.003c.274.024.518-.181.542-.454l1.048-11.977c.023-.274-.181-.518-.455-.542z"/></g><path fill="#292F33" d="M22.207 20.128c1.475-.212 2.919-.152 2.416.56-.504.713-1.623 1.963-3.521 1.759-1.899-.204.191-2.188 1.105-2.319z"/><path fill="#292F33" d="M21.101 22.447l-10.262-.898c-1.026-.09-1.026-.09-.936-1.116.049-.564.552-.986 1.116-.936l10.262.898c.564.049.986.552.936 1.116-.089 1.025-.089 1.025-1.116.936z"/><path fill="#DD2E44" d="M21.645 22.75l-11.318-.99c-.274-.024-.478-.268-.455-.542l.003-.03c.024-.274.268-.478.542-.455l11.318.99c.274.024.478.268.455.542l-.003.03c-.024.274-.268.479-.542.455z"/><path fill="#292F33" d="M26.074 8.654l-.898 10.262c-.09 1.026-.09 1.026-1.116.936-.564-.049-.986-.552-.936-1.116l.898-10.262c.049-.564.552-.986 1.116-.936 1.026.09 1.026.09.936 1.116z"/><path fill="#DD2E44" d="M26.525 8.167l-.99 11.318c-.024.274-.268.478-.542.455l-.03-.003c-.274-.024-.478-.268-.455-.542l.99-11.318c.024-.274.268-.478.542-.455l.03.003c.274.025.479.268.455.542z"/><path fill="#292F33" d="M23.337 17.992l-7.78-.681c-.778-.068-.778-.068-.711-.836.037-.423.417-.738.845-.7l7.78.681c.428.037.748.414.711.836-.067.768-.067.768-.845.7z"/><path fill="#DD2E44" d="M21.207 21.677c1.035.091 3.079.269 3.348-2.809s1.296-2.989 1.026.09-1.966 3.964-4.464 3.746c-2.052-.18-1.963-1.206.09-1.027zm-10.764-.941c2.053.171 2.464 1.255.412 1.07-.909-.082-.991.305-1.198 1.095-.195.743-.469 1.858-.884 3.418-.304 1.146-1.258.734-1.006-.265.423-1.679.822-3.142 1.083-4.072.267-.95.517-1.336 1.593-1.246z"/><g fill="#66757F"><circle cx="23.213" cy="27.244" r="1.545"/><path d="M30.161 30.661l-6.245-3.606 3.606-6.245-.892-.515-3.606 6.245-6.245-3.605-.515.892 6.245 3.605-3.605 6.245.892.515 3.605-6.245 6.245 3.606z"/><path d="M25.71 34.573l-1.866-6.965 6.965-1.866-.267-.995-6.965 1.866-1.866-6.965-.995.266 1.866 6.966-6.965 1.866.266.995 6.966-1.866 1.866 6.965z"/></g><path fill="#292F33" d="M23.213 18.488c-4.836 0-8.756 3.92-8.756 8.756S18.377 36 23.213 36s8.756-3.92 8.756-8.756-3.92-8.756-8.756-8.756zm0 15.452c-3.698 0-6.696-2.998-6.696-6.696s2.998-6.696 6.696-6.696 6.696 2.998 6.696 6.696-2.998 6.696-6.696 6.696z"/><path fill="#66757F" d="M23.213 19.518c-4.267 0-7.726 3.459-7.726 7.726s3.459 7.726 7.726 7.726 7.726-3.459 7.726-7.726-3.459-7.726-7.726-7.726zm0 14.422c-3.698 0-6.696-2.998-6.696-6.696s2.998-6.696 6.696-6.696 6.696 2.998 6.696 6.696-2.998 6.696-6.696 6.696zm-9.428-.446l-2.23-1.288 1.287-2.23-.892-.515-1.287 2.23-2.231-1.288-.515.892 2.231 1.288-1.288 2.23.892.515 1.288-2.23 2.23 1.288z"/><path fill="#292F33" d="M10.851 28.789c-1.991 0-3.605 1.614-3.605 3.605S8.86 36 10.851 36s3.605-1.614 3.605-3.605-1.614-3.606-3.605-3.606zm0 6.181c-1.422 0-2.575-1.153-2.575-2.575 0-1.422 1.153-2.575 2.575-2.575s2.575 1.153 2.575 2.575c.001 1.422-1.152 2.575-2.575 2.575z"/><path fill="#DD2E44" d="M8.587 25.046l-.029-.008c-.266-.071-.541.088-.612.354l-1.608 5.999c-.071.266.088.541.354.612l.029.008c.266.071.541-.088.612-.354l1.608-5.999c.07-.265-.089-.54-.354-.612z"/><path fill="#66757F" d="M6.72 32.012l-4.009-1.074c-.266-.071-.425-.347-.354-.612l.008-.029c.071-.266.347-.425.612-.354l4.009 1.074c.266.071.425.347.354.612l-.008.029c-.07.266-.346.425-.612.354z"/><path fill="#DD2E44" d="M29 9.187l-3.073-.542c-.271-.048-.453-.308-.406-.579l.005-.03c.048-.271.308-.453.579-.406l3.073.542c.271.048.453.308.406.579l-.005.03c-.048.272-.309.454-.579.406z"/><path fill="#292F33" d="M29.999 9.364l-2.694-.482c-.279-.049-.268-.283-.219-.562.049-.279.119-.502.398-.453l2.694.482c.279.049.467.318.418.597-.049.279-.318.467-.597.418z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9be.svg b/public/emoji/1f9be.svg new file mode 100644 index 000000000..c3d2db4f0 --- /dev/null +++ b/public/emoji/1f9be.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#66757F" cx="8.553" cy="29.973" r="4.478"/><path fill="#CCD6DD" d="M10.482 34.451c5.29 2 17 1 20-1s5.658-4.054 5-8c-1-6-9-7-14-6-4.903.981-9 4-10 6-.632 1.265 0 3 0 5 0 3-1.936 3.646-1 4z"/><path fill="#99AAB5" d="M30.482 33.451c3-2 5.658-4.054 5-8l-.005-.02c-2.609 1.493-6.824 3.435-12.309 4.37-4.599.784-8.938.861-11.692.798-.064 2.869-1.913 3.505-.994 3.852 5.29 2 17 1 20-1z"/><circle fill="#66757F" cx="8.489" cy="9.789" r="2.42"/><path fill="#99AAB5" d="M2.495 31.311c-3.926-5.609-1.447-12.69.586-17.247 1.559-3.495 3.025-4.696 3.025-4.696l4.557 2.033s-1.724 4.645-1.192 8.237c.561 3.786 1.227 6.976-.596 10.341s-5.399 2.734-6.38 1.332z"/><path fill="#CCD6DD" d="M7.952 10.192l2.711 1.21s-1.724 4.645-1.192 8.237c.561 3.786 1.227 6.976-.596 10.341-.754 1.392-1.808 2.1-2.855 2.353-4.436-9.786 1.932-22.141 1.932-22.141z"/><path fill="#99AAB5" d="M6.316 8.176C6.737 5.792 10.172.254 11.364.464s6.94 2.454 7.922 3.856-1.052 5.959-2.244 5.749c-1.192-.21-.771-2.594-.771-2.594s.21-1.192-1.192-.21l-2.804 1.963c-1.402.982-5.959-1.052-5.959-1.052z"/><path fill="#99AAB5" d="M6.316 8.176c-.981-1.402-.35-4.978-.14-6.169.21-1.192 2.594-.771 2.173 1.613-.42 2.383.771 2.594.771 2.594L6.316 8.176z"/><path fill="#CCD6DD" d="M6.316 8.176C6.737 5.792 10.172.254 11.364.464s6.94 2.454 7.922 3.856c-5.749-2.244-7.782 2.313-8.192 5.174-1.886-.027-4.778-1.318-4.778-1.318z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9bf.svg b/public/emoji/1f9bf.svg new file mode 100644 index 000000000..db17a633b --- /dev/null +++ b/public/emoji/1f9bf.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#66757F" cx="17.221" cy="29.784" r="2.5"/><circle fill="#66757F" cx="10.517" cy="9.871" r="4.592"/><path fill="#CCD6DD" d="M9.914 4.746c3.03-2.02 12.594-4.04 14.733-4.218s4.517.295 5.347 1.069c.891.832 2.131 2.311 1.96 4.693-.178 2.495-1.485 4.634-4.218 5.049-2.733.416-8.554-.832-11.168.238-1.583.648-1.901.178-2.317-.95-.416-1.129-1.423-2.677-2.203-3.62-1.183-1.429-3.4-1.417-2.134-2.261z"/><path fill="#99AAB5" d="M27.736 11.34c2.733-.416 4.04-2.554 4.218-5.049.03-.415.004-.793-.042-1.155-5.661-.212-14.809 1.095-18.741 3.45.446.697.854 1.427 1.081 2.042.416 1.129.734 1.598 2.317.951 2.613-1.071 8.434.177 11.167-.239zm-20.955.698c-1.1 2.201-.505 6.034 3.301 11.003 2.287 2.986 3.658 4.841 4.758 5.941s5.501 0 4.401-2.201c-3.301-6.602.744-10.343-6.552-15.049-3.161-2.039-5.156-1.198-5.908.306z"/><path fill="#CCD6DD" d="M17.289 29.293c1.358-.315 2.595-1.225 1.952-2.511-3.301-6.602.744-10.343-6.552-15.049-1.373-.886-2.526-1.228-3.453-1.209 6.347 5.916 3.403 9.656 8.053 18.769z"/><path fill="#8899A6" d="M13.726 29.713c.278.253 1.134.43 1.677.6-.162-.236-.574-.917-.735-1.257-.051-.108-.187-.15-.298-.094l-.677.426c-.131.064-.073.229.033.325zm-6.869 5.581c1.108.427 2.151.629 3.153.652.076.002 2.741 0 4.072-.007.974-.005 1.809-.01 2.091-.008l.174.001.263.002c1.844.011 3.116.105 3.668-.382.081-.072.112-.18.116-.3.006-.166-.008-.341-.008-.341-.035.125-5.57.481-7.417.58-6.101.326-7.589-1.435-7.656-1.586 0-.001.142.848 1.544 1.389z"/><path fill="#BE1931" d="M9.667 34.83c2.065.131 10.352-.655 10.352-.655l.214-.305c.215-.305.178-.785.181-1.198.003-.413-.119-1.959-.302-2.359-.183-.4-.555-.856-.899-.711-.432.181-1.221 1.125-1.89 1.12-.968-.006-3.215-1.482-3.533-1.485-.477-.003-.592.519-1.64.914-.49.185-2.727 1.049-2.727 1.049-.572.21-.608.322-.914.44-.628.242-1.996.653-2.528.863-.532.21-.729.622-.745.928-.016.306.076.473.076.473s.833.702 4.355.926z"/><path fill="#A0041E" d="M17.318 31.102c.81.005 1.764-1.19 2.297-1.433-.13-.088-.268-.124-.402-.068-.431.181-1.221 1.125-1.89 1.12-.969-.006-3.215-1.482-3.533-1.485-.132-.001-.237.041-.341.107.789.491 2.893 1.753 3.869 1.759z"/><path fill="#DD2E44" d="M20.079 34.068s.067-.022.145-.125c.217-.285.204-.733.207-1.121.002-.294-.043-1.205-.156-1.791-.38.068-2.38.431-3.1.773-.768.365-1.411 1.457-1.603 1.984-.008.021 4.507.28 4.507.28z"/><path fill="#CCD6DD" d="M12.974 30.691l-.379-.604c-.089-.143-.039-.327.112-.412.151-.085.347-.037.436.105l.379.604c.089.143.039.327-.112.412-.116.065-.258.053-.358-.021-.03-.023-.057-.051-.078-.084zm-1.139.529l-.296-.687c-.066-.154.012-.329.175-.392.163-.063.349.011.415.165l.296.687c.066.154-.012.329-.175.392-.109.042-.229.023-.316-.041-.043-.031-.077-.073-.099-.124zm-1.2.343l-.19-.652c-.046-.16.053-.325.223-.369.17-.044.345.05.391.21l.19.653c.046.16-.053.325-.223.369-.101.026-.204.004-.28-.053-.052-.039-.092-.093-.111-.158zm-1.187.284l-.125-.522c-.038-.162.069-.323.241-.359.172-.036.342.066.381.227l.125.522c.038.162-.069.323-.241.359-.097.021-.193-.003-.266-.056-.056-.041-.097-.1-.115-.171zM20.4 35.008c-.001.119-.139.316-.802.511-.466.138-2.68.115-3.423.111-.743-.005-5.333.033-6.156.015-.822-.018-1.731-.145-2.955-.545-1.28-.419-1.692-1.054-1.752-1.196.344.2.822.357 1.399.456.447.077 1.171.165 1.979.236.809.071 1.886-.005 2.576-.08.691-.075 2.731-.586 3.873-.724 1.142-.138 2.79-.101 3.228-.099.438.003 1.031.059 1.282.192.251.133.596.109.596.109.253.003.158.724.155 1.014z"/><path fill="#DD2E44" d="M5.436 32.906c.378.267 1.401.317 2.282.054 1.099-.328 1.244-.825 1.083-1.303-.011-.033-.043-.093-.062-.123-.251.102-.665.239-.749.28-.628.242-1.476.48-2.008.69-.253.098-.428.244-.546.402z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9c3.svg b/public/emoji/1f9c3.svg new file mode 100644 index 000000000..51a3f26d4 --- /dev/null +++ b/public/emoji/1f9c3.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E3A919" d="M28.337 32.563l-2.579 3.082c-.552.553-1.758.007-1.758-.545V12.001c0-.552 2.372-4.501 5-4.501l-.028 23.007c0 1.134-.093 1.308-.635 2.056z"/><path fill="#FFD983" d="M26 10.454H9l.194-.348L12.74 7.5c.486-.379.831-.5 1.383-.5h14.363c.188 0 .514.277.344.47L26 10.454z"/><path fill="#FFCC4D" d="M25 36H10c-.552 0-1-.448-1-1V10.454S9.448 10 10 10h15c.552 0 1 .454 1 .454V35c0 .552-.448 1-1 1z"/><circle fill="#F4900C" cx="15" cy="27" r="3"/><circle fill="#EA596E" cx="15" cy="21" r="4"/><circle fill="#FFE8B6" cx="19.5" cy="23.5" r="4.5"/><circle fill="#FFCC4D" cx="19.5" cy="23.5" r="2.5"/><path fill="#CCD6DD" d="M22.999 8.464s-.21.431-.967.431-1.033-.431-1.033-.431V4.342c0-1.993.532-3.309 1.582-3.911 1.005-.576 2.326-.398 3.922.535 1.274.743 4.421 2.972 4.496 3.034 0 0 .165.565-.303 1.1-.468.535-.965.447-.965.447-.018-.014-3.101-2.191-4.236-2.855-.881-.515-1.584-.623-1.904-.436-.279.16-.592.726-.592 2.086v4.122z"/><path fill="#99AAB5" d="M25.434.44c-1.124-.446-2.082-.451-2.853-.01-.791.454-1.287 1.314-1.484 2.562l1.975.367c.108-.664.322-.989.52-1.103.22-.129.63-.105 1.146.082L25.434.44z"/><path fill="#FFE8B6" d="M25.931 11H9.5c-.275 0-.5-.225-.5-.5s.225-.5.5-.5h16.431c.275 0 .5.225.5.5s-.225.5-.5.5z"/><path fill="#FFE8B6" d="M28.908 7.796l-2.536 3.036c-.163.201-.471.223-.684.05-.214-.173-.255-.479-.093-.68l2.536-3.036c.163-.201.471-.223.684-.05.214.174.255.479.093.68z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9c4.svg b/public/emoji/1f9c4.svg new file mode 100644 index 000000000..37a9f36e8 --- /dev/null +++ b/public/emoji/1f9c4.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M25.786 32.106c-.018-.035-.334-.608-.918-1.05.092-.377.05-.748-.275-.988-.806-.593-7.902.202-8.409 2.739-.21 1.049.527 1.049.93.724-.123.447-.19.905-.152 1.335.021.241.234.419.475.398.026-.002.051-.007.075-.013.202-.054.342-.247.323-.462-.026-.299.02-.622.099-.942.18.161.38.293.614.241.28-.063.457-.338.574-.638.014.19.042.312.045.326.062.232.299.369.531.309l.005-.001c.23-.062.368-.298.312-.53-.004-.015-.046-.205-.017-.506.396.239.896.456 1.305.356.521-.127.769-.566.893-.997.393.369.625.801.859 1.303.091.196.308.293.51.239.025-.007.048-.015.072-.026.22-.102.315-.363.213-.582-.166-.357-.371-.789-.711-1.208.31.207.637.352.851.227.149-.087.326-.271.488-.495.338.301.528.646.53.652.099.183.308.269.501.217.031-.008.062-.02.092-.036.216-.116.298-.379.185-.592z"/><path fill="#E1E8ED" d="M22.92 11.745c-3.324-.292-4.921-2.163-5.906-3.983-.19-.352-1.706-3.665-2.486-5.804-.74-2.029-1.983-.958-2.553-.805-.571.153-1.483.171-1.31 1.84.259 2.503.708 5.872.749 6.269.234 2.243-.391 4.487-3.123 6.402-5.12 3.588-6.648 6.939-5.656 10.642 1.42 5.299 4.566 9.254 17.872 5.688S34.56 23.431 33.14 18.132c-.993-3.701-3.992-5.84-10.22-6.387z"/><path fill="#99AAB5" d="M11.29 32.904c-2.744-1.233-5.845-3.48-5.898-7.615-.058-4.524 4.073-7.097 4.567-9.714.173 3.065-2.752 5.037-2.722 8.946.028 3.541 1.019 6.223 4.053 8.383zm6.984-.497c-2.612-1.34-5.792-4.185-6.488-8.1-1.002-5.636 1.365-9.11.782-13.372 1.415 4.899.563 7.254 1.436 12.126.568 3.17 2.161 7.531 4.27 9.346zm10.667-4.233c1.759-2.44 3.322-5.937 1.3-9.544-2.212-3.947-7.076-4.11-8.812-6.129 1.383 2.741 4.902 2.986 6.83 6.386 1.748 3.081 2.23 5.9.682 9.287zm-6.296 3.061c1.592-2.466 2.924-6.52 1.569-10.259-1.951-5.382-5.737-7.207-7.363-11.19 1.224 4.951 3.139 6.564 4.819 11.22 1.092 3.03 1.894 7.603.975 10.229z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9c5.svg b/public/emoji/1f9c5.svg new file mode 100644 index 000000000..ab68cb1d6 --- /dev/null +++ b/public/emoji/1f9c5.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D39954" d="M26.617 32.441c-.02-.039-.373-.678-1.025-1.172.103-.421.056-.835-.307-1.103-.9-.662-8.82.226-9.386 3.057-.234 1.171.588 1.171 1.038.809-.137.499-.212 1.011-.169 1.49.024.269.261.467.531.444.029-.002.057-.007.084-.015.225-.06.381-.275.36-.516-.03-.334.022-.694.111-1.051.201.18.424.327.686.269.312-.07.51-.378.64-.712.015.212.046.348.05.363.069.259.333.411.593.345l.006-.002c.257-.069.411-.333.348-.591-.004-.017-.051-.229-.019-.565.442.267 1 .509 1.457.398.581-.142.859-.631.997-1.113.439.412.698.895.958 1.454.101.219.344.327.569.267.028-.007.054-.016.08-.029.246-.113.352-.405.238-.65-.185-.399-.414-.88-.793-1.348.346.231.711.393.95.253.166-.097.364-.302.545-.553.377.336.589.721.592.727.11.204.344.3.559.242.035-.009.069-.023.103-.04.239-.126.33-.419.204-.658z"/><path fill="#EDD6A6" d="M21.708 6.32c-2.741-.932-5.978-3.134-6.754-6.03-.273-1.02-.952 1.29-1.891 1.541-.939.252-2.682-1.409-2.408-.389.776 2.896-.926 6.422-2.834 8.599-3.575 4.08-6.287 8.95-4.89 14.165 2 7.465 10.1 10.746 18.41 8.519s13.684-9.118 11.684-16.582c-1.398-5.215-6.182-8.077-11.317-9.823z"/><path fill="#E2A759" d="M13.66 32.585c-3.296-1.993-7.838-5.273-8.227-11.23-.425-6.519 4.936-10.098 5.304-13.826.444 4.428-3.559 7.236-3.214 12.866.313 5.101 2.429 8.841 6.137 12.19z"/><path fill="#E2A759" d="M19.764 32.885c-3.097-1.934-6.932-5.916-7.944-11.203-1.457-7.611 1.103-12.145.203-17.89 1.897 6.644 1.034 9.757 2.302 16.336.825 4.282 2.9 10.213 5.439 12.757zm8.158-4.121c1.858-3.374 4.302-8.526 1.66-13.88-2.891-5.858-9.474-6.237-11.657-9.281 1.829 4.057 6.85 4.447 9.367 9.495 2.28 4.574 2.166 8.912.63 13.666z"/><path fill="#E2A759" d="M22.786 32.076c1.715-3.223 3.045-8.589 1.278-13.674-2.543-7.32-7.027-9.966-9.121-15.392 1.679 6.703 3.983 8.966 6.174 15.298 1.427 4.12 2.596 10.295 1.669 13.768z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9c6.svg b/public/emoji/1f9c6.svg new file mode 100644 index 000000000..c360564eb --- /dev/null +++ b/public/emoji/1f9c6.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#C15829" cx="10.757" cy="8.247" rx="8.032" ry="6.884"/><path fill="#933813" d="M15.347 13.984c0-.972.144-1.874.395-2.71-1.43-.467-2.983-.732-4.626-.732-2.628 0-5.057.628-7.053 1.785 1.438 1.83 3.898 2.805 6.694 2.805 1.714 0 3.291-.378 4.593-1.084 0-.022-.003-.042-.003-.064z"/><path fill="#933813" d="M13.052 13.984c0 .308.02.606.046.901 3.294-.721 5.691-3.017 5.691-6.638 0-.889-.15-1.695-.417-2.42-3.172 1.423-5.32 4.271-5.32 8.157z"/><ellipse fill="#C15829" cx="25.673" cy="13.984" rx="10.327" ry="9.179"/><path fill="#933813" d="M25.673 22.59c0-6.029-4.354-9.953-10.088-10.745-.153.673-.239 1.385-.239 2.139 0 5.693 4.608 9.166 10.297 9.178.01-.191.03-.377.03-.572z"/><ellipse fill="#C15829" cx="12.263" cy="23.737" rx="12.263" ry="10.9"/><path fill="#A0AD55" d="M34.709 13.984c0-4.621-3.471-7.566-7.946-7.977-.107.032-.216.059-.321.101-2.761 1.102-3.698 5.254-2.094 9.275 1.274 3.192 3.767 5.334 6.123 5.533 2.543-1.302 4.238-3.707 4.238-6.932z"/><path fill="#C4CE89" d="M26.442 6.108c-2.761 1.102-3.698 5.254-2.094 9.275 1.274 3.192 3.767 5.334 6.123 5.533-5.945-10.374-3.924-14.85-4.029-14.808z"/><circle fill="#FFAC33" cx="3.873" cy="19.721" r="1.147"/><circle fill="#77B255" cx="5.594" cy="16.853" r=".574"/><circle fill="#77B255" cx="8.462" cy="18.574" r="1.147"/><circle fill="#FFAC33" cx="10.757" cy="15.131" r="1.147"/><circle fill="#FFAC33" cx="5.594" cy="5.378" r=".574"/><circle fill="#77B255" cx="7.315" cy="3.657" r="1.147"/><circle fill="#FFAC33" cx="10.183" cy="3.084" r=".574"/><circle fill="#77B255" cx="20.51" cy="7.673" r=".574"/><circle fill="#FFAC33" cx="18.789" cy="9.394" r="1.147"/><circle fill="#A6D388" cx="29" cy="10" r="1"/><circle fill="#A6D388" cx="33" cy="14" r="1"/><circle fill="#77B255" cx="4" cy="27" r="1"/><circle fill="#77B255" cx="10" cy="30" r="1"/><circle fill="#77B255" cx="19" cy="25" r="1"/><circle fill="#77B255" cx="22" cy="13" r="1"/><circle fill="#77B255" cx="15" cy="5" r="1"/><circle fill="#77B255" cx="8" cy="9" r="1"/><circle fill="#FFAC33" cx="14" cy="22" r="1"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9c7.svg b/public/emoji/1f9c7.svg new file mode 100644 index 000000000..cc92a9d18 --- /dev/null +++ b/public/emoji/1f9c7.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#939598" cx="18" cy="26" rx="18" ry="10"/><ellipse fill="#CCD6DD" cx="18" cy="24" rx="18" ry="10"/><path fill="#F4900C" d="M15.714 32.54L2.575 24.857c-1.262-.738-.929-3.558-.929-4.785l14.069-6.657c1.262-.738 3.308-.738 4.57 0L34.37 20.26c0 1.689.316 3.859-.947 4.597L20.285 32.54c-1.262.738-3.309.738-4.571 0z"/><path fill="#FFAC33" d="M15.714 29.279L2.575 21.596c-1.262-.738-1.262-1.934 0-2.672l13.139-7.683c1.262-.738 3.308-.738 4.57 0l13.139 7.683c1.262.738 1.262 1.934 0 2.672l-13.139 7.683c-1.261.738-3.308.738-4.57 0z"/><path d="M17.463 14.416l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.174-.778.174-1.074 0zm3.757 2.197l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.174-.777.174-1.074 0zm3.757 2.197l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.174-.777.174-1.074 0zm3.758 2.198l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.778.173-1.074 0zm-15.03-4.395l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.174-.777.174-1.074 0zm3.758 2.197l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.174-.778.174-1.074 0zm3.757 2.198l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.777.173-1.074 0zm3.757 2.197l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.777.173-1.074 0zM9.948 18.81l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.174-.778.174-1.074 0zm3.757 2.198l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.777.173-1.074 0zm3.758 2.197l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.778.173-1.074 0zm3.757 2.197l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.777.173-1.074 0zM6.191 21.008l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.778.173-1.074 0zm3.757 2.197l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.778.173-1.074 0zm3.757 2.197l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.777.173-1.074 0zm3.758 2.197l-1.61-.942c-.296-.173-.296-.454 0-.628l1.61-.942c.296-.173.777-.173 1.074 0l1.61.942c.296.173.296.454 0 .628l-1.61.942c-.297.173-.778.173-1.074 0z" fill="#F4900C"/><path fill="#D3790D" d="M15.72 16.354c-3.406-1.039-4.841-.515-4.618 2.165.058.693-.895 1.847-1.847 2.511-2.215 1.544-1.263 4.124 2.54 2.222 1.905-.952 4.682-.887 8.052.144 2.828.866 4.589 2.05 4.82 3.32 1.122-.367 1.732-.847 2.28-1.309-.233-.526-1.27-2.04-2.915-2.761-3.112-1.365-.106-3.331 2.222-3.81 2.107-.433.029-2.02-3.175-1.963-3.202.058-2.397.995-7.359-.519z"/><path opacity=".5" fill="#D3790D" d="M24.668 26.542c0 .456.058.468.058 1.387 0 1.789 2.194 1.472 2.194-1.501 0-.346.029-1.021.029-1.021l-2.281 1.135z"/><path fill="#FFAC33" d="M22.16 17.651c.46.262.461 1.863 0 2.125l-3.328 1.897c-.46.262-1.204.262-1.664 0l-3.329-1.897c-.46-.262-.46-1.863 0-2.125l3.329-.721c.46-.262 1.204-.262 1.664 0l3.328.721z"/><path fill="#FFD983" d="M22.16 17.651c.46.262.461.686 0 .948l-3.328 1.897c-.46.262-1.204.262-1.664 0l-3.329-1.897c-.46-.262-.46-.686 0-.948l3.329-1.897c.46-.262 1.204-.262 1.664 0l3.328 1.897z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9c8.svg b/public/emoji/1f9c8.svg new file mode 100644 index 000000000..d7a5674c6 --- /dev/null +++ b/public/emoji/1f9c8.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M35.145 22.16l-22.86 13.219c-.902.521-2.364.521-3.266 0L.855 30.658c-.451-.261-.676-.602-.676-.944v-1.843l23.535-12.32c.902-.521 2.364-.521 3.266 0l8.84 3.819c0 .558-.005 1.497 0 1.834.006.345-.219.692-.675.956z"/><path fill="#CCD6DD" d="M35.145 20.344l-22.86 13.219c-.902.521-2.364.521-3.266 0L.855 28.842c-.902-.521-.902-1.367 0-1.888l22.86-13.219c.902-.521 2.364-.521 3.266 0l8.164 4.721c.901.521.901 1.367 0 1.888z"/><path fill="#FFE8B6" d="M33 19.011v-8.083l-7-4.041-13.042 7.502v8.083l7 4.042z"/><path fill="#FFD983" d="M33 19.011v-8.083l-13.042 7.503-7-4.042v8.083l7 4.042z"/><path fill="#FFCC4D" d="M33 19.011v-8.083l-13.042 7.503v8.083z"/><path fill="#FFE8B6" d="M17.182 28.302V26.29l-7-4.041L3 26.325v2.012l7 4.041z"/><path fill="#FFD983" d="M17.182 28.302V26.29l-7 4.059L3 26.325v2.012l7 4.041z"/><path fill="#FFCC4D" d="M17.182 28.302V26.29l-7 4.059L10 32.378z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9c9.svg b/public/emoji/1f9c9.svg new file mode 100644 index 000000000..16b0db823 --- /dev/null +++ b/public/emoji/1f9c9.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8A4B38" d="M26.875 14.6C25.1 12.778 21.55 12.778 18 12.778s-7.1 0-8.875 1.822c-2.663 2.733-5.325 9.72-3.55 15.186C7.35 35.252 15.132 35.814 18 35.814s10.65-.562 12.425-6.028c1.775-5.465-.887-12.453-3.55-15.186z"/><path fill="#A5503C" d="M25.58 14.412c-1.516-1.556-4.548-1.556-7.58-1.556s-6.064 0-7.58 1.556c-2.274 2.334-4.548 8.302-3.032 12.969C8.904 32.049 15.55 32.529 18 32.529s9.096-.48 10.611-5.148c1.516-4.668-.757-10.635-3.031-12.969z"/><path fill="#CCD6DD" d="M27.453 13.025c-.383-1.616-2.263-3.17-9.437-3.17h-.032c-7.175 0-9.055 1.554-9.437 3.17-.733 3.093 2.263 4.278 9.437 4.278h.032c7.174-.001 10.17-1.185 9.437-4.278z"/><path fill="#66757F" d="M25.622 12.355c.293.72-1.832 1.658-7.64 1.658s-7.938-.941-7.64-1.658c.323-.779 3.869-1.55 7.64-1.55 3.771 0 7.324.771 7.64 1.55z"/><path fill="#77B255" d="M10.993 13.144c1.015.473 3.226.869 6.99.869 3.767 0 5.976-.395 6.99-.869-.734-.635-2.76-1.27-6.99-1.27-4.23.001-6.256.635-6.99 1.27z"/><path fill="#FFF" d="M25 14.231c-.156-.424-.429-.393-.814-.276-1.779.537-4.36.641-6.211.652-1.851-.011-4.676-.162-6.211-.652-.384-.122-.701-.172-.862.276-.156.436.306.852.697.947 2.366.576 4.313.746 6.376.759 2.062-.013 3.765-.159 6.131-.735.392-.096 1.075-.476.894-.971z"/><path fill="#CCD6DD" d="M22.894 13.686l5.315-7.93 5.296-3.743s.141-.297-.78-1.01C31.804.29 31.388.587 31.388.587L26.84 4.204 20.348 13.9c.994-.051 1.839-.124 2.546-.214z"/><path fill="#99AAB5" d="M22.894 13.686l5.315-7.93 5.296-3.743-.067-.089-5.792 3.208-5.8 8.674c.431-.034.635-.06 1.048-.12z"/><circle fill="#99AAB5" cx="27.617" cy="4.945" r="1.668"/><path fill="#CCD6DD" d="M26.213 4.639c0-.697.565-1.262 1.262-1.262s1.262.565 1.262 1.262-.565 1.262-1.262 1.262-1.262-.565-1.262-1.262z"/><path fill="#E1E8ED" d="M11.459 10.865c1.604-.639 4.544-.802 5.569-.757 1.025.045.571.757-.015.757-1.693 0-3.787.401-5.228.772-.851.219-1.143-.447-.326-.772z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ca.svg b/public/emoji/1f9ca.svg new file mode 100644 index 000000000..569fe039b --- /dev/null +++ b/public/emoji/1f9ca.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F5F8FA" d="M4.66 7.479c1.928.786 5.193 1.693 8.25 2.556 2.76.78 4.727 1.8 4.727 4.279 0 1.126-.136 4.519-.185 8.533.41-.104.791-.153 1.196-.117l-.001-.134c-.038-4.321-.179-8.044-.178-9.239.003-2.529 1.817-2.208 4.667-2.996 1.297-.359 7.232-1.686 9.209-2.103 1.658-.35 1.012-1.059.494-1.617-.034.107-.147.202-.383.273-1.51.453-10.716 2.236-12.941 2.859-1.569.439-3.591-.367-6.007-1.349-2.416-.981-8.53-2.416-9.738-2.869-.25-.094-.432-.222-.57-.362-.094.052-.19.103-.278.161.066-.003.12-.011.19-.012.477-.008-.195 1.427 1.548 2.137z"/><path fill="#ADD3E0" d="M1.009 10.872c.096 2.553.356 9.03.119 11.941-.157 1.923.24 3.361.996 4.403.204-.333.64-.608 1.36-.736 3.752-.669 9.878-2.385 12.344-3.136.654-.199 1.16-.378 1.625-.496.049-4.014.185-7.407.185-8.533 0-2.479-1.967-3.499-4.727-4.279-3.058-.864-6.323-1.771-8.251-2.557-1.743-.71-1.071-2.145-1.548-2.138-.069.001-.123.01-.19.012C1.293 6.432.919 8.508 1.009 10.872z"/><path fill="#C1E1EA" d="M33.208 27.8c.425.097.866.309 1.268.583.438-.907.341-2.082.275-3.431-.119-2.436.059-10.099.238-13.604.148-2.909-.822-4.267-2.167-4.907.037.071.038.137.019.2.517.558 1.163 1.267-.494 1.617-1.978.417-7.912 1.745-9.209 2.103-2.85.788-4.664.467-4.667 2.996-.001 1.195.14 4.919.178 9.239l.001.134c.47.042.98.194 1.638.526 1.367.691 10.883 4.079 12.92 4.544z"/><path fill="#D2ECF3" d="M13.509 8.424c2.416.981 4.437 1.788 6.007 1.349 2.225-.622 11.431-2.406 12.941-2.859.237-.071.35-.166.383-.273-.109-.117-.211-.228-.286-.327-.193-.076-.391-.142-.595-.194-2.554-.654-8.436-2.495-10.931-3.386-1.977-.706-4.487-.591-6.594-.119-2.34.524-7.081 1.706-9.446 2.02-.71.094-1.296.289-1.788.559.138.139.32.268.57.362 1.209.452 7.323 1.886 9.739 2.868z"/><path opacity=".5" fill="#CFE1EA" d="M18.648 22.73c-.405-.036-.786.014-1.196.117l-.006.493c-.048 4.716.194 8.644.127 9.281-.046.438-.315.814-.717 1.072.821.1 1.641.088 2.424-.042-.451-.385-.71-.998-.771-1.608-.064-.655.176-4.556.139-9.313z"/><path fill="#9BC2D4" d="M17.573 32.621c.067-.637-.176-4.564-.127-9.281l.006-.493c-.465.117-.971.297-1.625.496-2.466.751-8.592 2.467-12.344 3.136-.719.128-1.156.404-1.36.736.548.754 1.279 1.308 2.152 1.657 2.079.832 6.772 2.495 9.743 3.98.9.45 1.868.721 2.838.84.403-.257.671-.633.717-1.071zm14.505-2.62c1.347-.331 2.046-.888 2.398-1.618-.402-.274-.843-.486-1.268-.583-2.037-.465-11.554-3.853-12.922-4.544-.658-.332-1.168-.485-1.638-.526.037 4.758-.203 8.658-.138 9.313.061.611.32 1.223.771 1.608.503-.083.991-.207 1.451-.382 2.019-.773 8.197-2.496 11.346-3.268z"/><path fill="#C1E1EA" d="M7.571 18.69c-3.911 3.322-5.322 9.72-5.206 6.824.096-2.391-.017-9.487-.006-12.439.009-2.491.416-4.634 3.725-3.095 2.538 1.18 7.2 2.114 9.384 3.59 1.411.954-2.464.505-7.897 5.12z"/><path fill="#D2ECF3" d="M30.169 15.439c2.65 1.793 3.569 5.587 3.497 3.781-.06-1.491.006-4.939 0-6.779-.006-1.553.19-2.874-1.997-2.245-1.88.54-5.124.847-6.486 1.767-.88.594 1.408 1.056 4.986 3.476z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f9cd-1f3fb-200d-2640-fe0f.svg new file mode 100644 index 000000000..d5981e340 --- /dev/null +++ b/public/emoji/1f9cd-1f3fb-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M13.449 22.569c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.404-2.185.878-4.137.055-.228-.274-2.776.007-4.528.076-.473.958-1.066 1.495-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787zm9.102 0c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.404-2.185-.878-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-.958-1.066-1.495-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787z"/><path fill="#4289C1" d="M21.717 25.17c0-1.012.084-3.628-.241-5.198-.325-1.57-6.687-1.605-7.012 0-.325 1.605-.075 4.081-.075 5.158 0 2.141 1.159 7.747.862 9.903-.066.479 2.492.937 2.449-.125-.078-1.969-.104-5.193-.04-6.18.035-.547.171-4.771.265-6.105.011-.018.295-.018.306 0 .094 1.333.387 5.558.423 6.105.064.987.137 4.212.059 6.18-.042 1.062 2.525.604 2.459.125-.296-2.156.545-9.514.545-9.863z"/><path fill="#292F33" d="M19.744 5.553c.814.198 1.151.895 1.116 1.616-.024.488.384.93.384.93s-2.07.419-2.481-1.409c-.371-1.641.981-1.137.981-1.137z"/><path fill="#9268CA" d="M22.131 9.371c-.665-.794-3.019-1.356-3.019-1.356h-2.225s-2.355.561-3.019 1.356c-.807.964-.982 2.71-.982 2.71l1.608.298s.461 1.862.461 3.3c0 1.147-.422 3.328-.593 4.163-.043.211-.035.227 0 .279s.233.057.233.057h6.814s.128.022.198-.036.051-.084.002-.286c-.203-.833-.722-3.073-.722-4.176 0-1.371.65-3.301.65-3.301l1.58-.298c-.004-.001-.179-1.746-.986-2.71z"/><path fill="#F7DECE" d="M19.36 4.361l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#EEC2AD" d="M19.36 3.851l-2.688.019v3.901s1.17 1.151 2.688.035V3.851z"/><path fill="#292F33" d="M15.11 3.437c0-1.753 1.335-2.651 2.983-2.651 1.647 0 2.983.898 2.983 2.651s-1.335 3.174-2.983 3.174c-1.648 0-2.983-1.421-2.983-3.174z"/><path fill="#F7DECE" d="M20.702 2.283h-5.21v2.738c0 1.337 1.447 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.283z"/><path fill="#292F33" d="M18.199 2.233s-.967 1.739-2.707 1.739V2.233h2.707z"/><path fill="#292F33" d="M17.937 2.233s1.033 1.739 2.772 1.739V2.233h-2.772z"/><circle fill="#662113" cx="17.049" cy="4.777" r=".339"/><circle fill="#662113" cx="19.165" cy="4.777" r=".339"/><path fill="#DF1F32" d="M18.112 7.03c-.404 0-.616-.2-.639-.223-.067-.067-.067-.176 0-.243s.174-.067.242-.002c.009.008.139.124.397.124.261 0 .391-.119.397-.124.069-.064.177-.062.242.005.065.068.065.174-.001.24-.022.023-.233.223-.638.223"/><path fill="#C1694F" d="M18.31 6.138h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198-.001.109-.09.198-.198.198z"/><path fill="#292F33" d="M14.173 35.898c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.029 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f9cd-1f3fb-200d-2642-fe0f.svg new file mode 100644 index 000000000..8fbd6c034 --- /dev/null +++ b/public/emoji/1f9cd-1f3fb-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#F7DECE" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#EEC2AD" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#292F33" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#F7DECE" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#292F33" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#C1694F" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fb.svg b/public/emoji/1f9cd-1f3fb.svg new file mode 100644 index 000000000..8fbd6c034 --- /dev/null +++ b/public/emoji/1f9cd-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#F7DECE" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#EEC2AD" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#292F33" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#F7DECE" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#292F33" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#C1694F" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f9cd-1f3fc-200d-2640-fe0f.svg new file mode 100644 index 000000000..7f81ff85b --- /dev/null +++ b/public/emoji/1f9cd-1f3fc-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M13.449 22.569c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.404-2.185.878-4.137.055-.228-.274-2.776.007-4.528.076-.473.958-1.066 1.495-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787zm9.102 0c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.404-2.185-.878-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-.958-1.066-1.495-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787z"/><path fill="#4289C1" d="M21.717 25.17c0-1.012.084-3.628-.241-5.198-.325-1.57-6.687-1.605-7.012 0-.325 1.605-.075 4.081-.075 5.158 0 2.141 1.159 7.747.862 9.903-.066.479 2.492.937 2.449-.125-.078-1.969-.104-5.193-.04-6.18.035-.547.171-4.771.265-6.105.011-.018.295-.018.306 0 .094 1.333.387 5.558.423 6.105.064.987.137 4.212.059 6.18-.042 1.062 2.525.604 2.459.125-.296-2.156.545-9.514.545-9.863z"/><path fill="#FFE51E" d="M19.744 5.553c.814.198 1.151.895 1.116 1.616-.024.488.384.93.384.93s-2.07.419-2.481-1.409c-.371-1.641.981-1.137.981-1.137z"/><path fill="#9268CA" d="M22.131 9.371c-.665-.794-3.019-1.356-3.019-1.356h-2.225s-2.355.561-3.019 1.356c-.807.964-.982 2.71-.982 2.71l1.608.298s.461 1.862.461 3.3c0 1.147-.422 3.328-.593 4.163-.043.211-.035.227 0 .279s.233.057.233.057h6.814s.128.022.198-.036.051-.084.002-.286c-.203-.833-.722-3.073-.722-4.176 0-1.371.65-3.301.65-3.301l1.58-.298c-.004-.001-.179-1.746-.986-2.71z"/><path fill="#F3D2A2" d="M19.36 4.361l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#E2C196" d="M19.36 3.851l-2.688.019v3.901s1.17 1.151 2.688.035V3.851z"/><path fill="#FFE51E" d="M15.11 3.437c0-1.753 1.335-2.651 2.983-2.651 1.647 0 2.983.898 2.983 2.651s-1.335 3.174-2.983 3.174c-1.648 0-2.983-1.421-2.983-3.174z"/><path fill="#F3D2A2" d="M20.702 2.283h-5.21v2.738c0 1.337 1.447 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.283z"/><path fill="#FFE51E" d="M18.199 2.233s-.967 1.739-2.707 1.739V2.233h2.707z"/><path fill="#FFE51E" d="M17.937 2.233s1.033 1.739 2.772 1.739V2.233h-2.772z"/><circle fill="#662113" cx="17.049" cy="4.777" r=".339"/><circle fill="#662113" cx="19.165" cy="4.777" r=".339"/><path fill="#DF1F32" d="M18.112 7.03c-.404 0-.616-.2-.639-.223-.067-.067-.067-.176 0-.243s.174-.067.242-.002c.009.008.139.124.397.124.261 0 .391-.119.397-.124.069-.064.177-.062.242.005.065.068.065.174-.001.24-.022.023-.233.223-.638.223"/><path fill="#C1694F" d="M18.31 6.138h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198-.001.109-.09.198-.198.198z"/><path fill="#292F33" d="M14.173 35.898c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.029 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f9cd-1f3fc-200d-2642-fe0f.svg new file mode 100644 index 000000000..0ea6dafdc --- /dev/null +++ b/public/emoji/1f9cd-1f3fc-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#F3D2A2" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#E2C196" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#FFE51E" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#F3D2A2" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#FFE51E" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#C1694F" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fc.svg b/public/emoji/1f9cd-1f3fc.svg new file mode 100644 index 000000000..0ea6dafdc --- /dev/null +++ b/public/emoji/1f9cd-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#F3D2A2" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#E2C196" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#FFE51E" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#F3D2A2" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#FFE51E" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#C1694F" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f9cd-1f3fd-200d-2640-fe0f.svg new file mode 100644 index 000000000..48329af5f --- /dev/null +++ b/public/emoji/1f9cd-1f3fd-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M13.449 22.569c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.404-2.185.878-4.137.055-.228-.274-2.776.007-4.528.076-.473.958-1.066 1.495-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787zm9.102 0c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.404-2.185-.878-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-.958-1.066-1.495-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787z"/><path fill="#4289C1" d="M21.717 25.17c0-1.012.084-3.628-.241-5.198-.325-1.57-6.687-1.605-7.012 0-.325 1.605-.075 4.081-.075 5.158 0 2.141 1.159 7.747.862 9.903-.066.479 2.492.937 2.449-.125-.078-1.969-.104-5.193-.04-6.18.035-.547.171-4.771.265-6.105.011-.018.295-.018.306 0 .094 1.333.387 5.558.423 6.105.064.987.137 4.212.059 6.18-.042 1.062 2.525.604 2.459.125-.296-2.156.545-9.514.545-9.863z"/><path fill="#963B22" d="M19.744 5.553c.814.198 1.151.895 1.116 1.616-.024.488.384.93.384.93s-2.07.419-2.481-1.409c-.371-1.641.981-1.137.981-1.137z"/><path fill="#9268CA" d="M22.131 9.371c-.665-.794-3.019-1.356-3.019-1.356h-2.225s-2.355.561-3.019 1.356c-.807.964-.982 2.71-.982 2.71l1.608.298s.461 1.862.461 3.3c0 1.147-.422 3.328-.593 4.163-.043.211-.035.227 0 .279s.233.057.233.057h6.814s.128.022.198-.036.051-.084.002-.286c-.203-.833-.722-3.073-.722-4.176 0-1.371.65-3.301.65-3.301l1.58-.298c-.004-.001-.179-1.746-.986-2.71z"/><path fill="#D4AB88" d="M19.36 4.361l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#CC9B7A" d="M19.36 3.851l-2.688.019v3.901s1.17 1.151 2.688.035V3.851z"/><path fill="#963B22" d="M15.11 3.437c0-1.753 1.335-2.651 2.983-2.651 1.647 0 2.983.898 2.983 2.651s-1.335 3.174-2.983 3.174c-1.648 0-2.983-1.421-2.983-3.174z"/><path fill="#D4AB88" d="M20.702 2.283h-5.21v2.738c0 1.337 1.447 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.283z"/><path fill="#963B22" d="M18.199 2.233s-.967 1.739-2.707 1.739V2.233h2.707z"/><path fill="#963B22" d="M17.937 2.233s1.033 1.739 2.772 1.739V2.233h-2.772z"/><circle fill="#662113" cx="17.049" cy="4.777" r=".339"/><circle fill="#662113" cx="19.165" cy="4.777" r=".339"/><path fill="#DF1F32" d="M18.112 7.03c-.404 0-.616-.2-.639-.223-.067-.067-.067-.176 0-.243s.174-.067.242-.002c.009.008.139.124.397.124.261 0 .391-.119.397-.124.069-.064.177-.062.242.005.065.068.065.174-.001.24-.022.023-.233.223-.638.223"/><path fill="#C1694F" d="M18.31 6.138h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198-.001.109-.09.198-.198.198z"/><path fill="#292F33" d="M14.173 35.898c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.029 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f9cd-1f3fd-200d-2642-fe0f.svg new file mode 100644 index 000000000..3197184b7 --- /dev/null +++ b/public/emoji/1f9cd-1f3fd-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#D4AB88" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#CC9B7A" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#963B22" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#D4AB88" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#963B22" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#C1694F" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fd.svg b/public/emoji/1f9cd-1f3fd.svg new file mode 100644 index 000000000..3197184b7 --- /dev/null +++ b/public/emoji/1f9cd-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#D4AB88" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#CC9B7A" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#963B22" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#D4AB88" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#963B22" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#C1694F" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f9cd-1f3fe-200d-2640-fe0f.svg new file mode 100644 index 000000000..696243dc0 --- /dev/null +++ b/public/emoji/1f9cd-1f3fe-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M13.449 22.569c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.404-2.185.878-4.137.055-.228-.274-2.776.007-4.528.076-.473.958-1.066 1.495-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787zm9.102 0c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.404-2.185-.878-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-.958-1.066-1.495-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787z"/><path fill="#4289C1" d="M21.717 25.17c0-1.012.084-3.628-.241-5.198-.325-1.57-6.687-1.605-7.012 0-.325 1.605-.075 4.081-.075 5.158 0 2.141 1.159 7.747.862 9.903-.066.479 2.492.937 2.449-.125-.078-1.969-.104-5.193-.04-6.18.035-.547.171-4.771.265-6.105.011-.018.295-.018.306 0 .094 1.333.387 5.558.423 6.105.064.987.137 4.212.059 6.18-.042 1.062 2.525.604 2.459.125-.296-2.156.545-9.514.545-9.863z"/><path fill="#60352A" d="M19.744 5.553c.814.198 1.151.895 1.116 1.616-.024.488.384.93.384.93s-2.07.419-2.481-1.409c-.371-1.641.981-1.137.981-1.137z"/><path fill="#9268CA" d="M22.131 9.371c-.665-.794-3.019-1.356-3.019-1.356h-2.225s-2.355.561-3.019 1.356c-.807.964-.982 2.71-.982 2.71l1.608.298s.461 1.862.461 3.3c0 1.147-.422 3.328-.593 4.163-.043.211-.035.227 0 .279s.233.057.233.057h6.814s.128.022.198-.036.051-.084.002-.286c-.203-.833-.722-3.073-.722-4.176 0-1.371.65-3.301.65-3.301l1.58-.298c-.004-.001-.179-1.746-.986-2.71z"/><path fill="#AF7E57" d="M19.36 4.361l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#9B6A49" d="M19.36 3.851l-2.688.019v3.901s1.17 1.151 2.688.035V3.851z"/><path fill="#60352A" d="M15.11 3.437c0-1.753 1.335-2.651 2.983-2.651 1.647 0 2.983.898 2.983 2.651s-1.335 3.174-2.983 3.174c-1.648 0-2.983-1.421-2.983-3.174z"/><path fill="#AF7E57" d="M20.702 2.283h-5.21v2.738c0 1.337 1.447 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.283z"/><path fill="#60352A" d="M18.199 2.233s-.967 1.739-2.707 1.739V2.233h2.707z"/><path fill="#60352A" d="M17.937 2.233s1.033 1.739 2.772 1.739V2.233h-2.772z"/><circle fill="#662113" cx="17.049" cy="4.777" r=".339"/><circle fill="#662113" cx="19.165" cy="4.777" r=".339"/><path fill="#DF1F32" d="M18.112 7.03c-.404 0-.616-.2-.639-.223-.067-.067-.067-.176 0-.243s.174-.067.242-.002c.009.008.139.124.397.124.261 0 .391-.119.397-.124.069-.064.177-.062.242.005.065.068.065.174-.001.24-.022.023-.233.223-.638.223"/><path fill="#915A34" d="M18.31 6.138h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198-.001.109-.09.198-.198.198z"/><path fill="#292F33" d="M14.173 35.898c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.029 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f9cd-1f3fe-200d-2642-fe0f.svg new file mode 100644 index 000000000..8b05543d0 --- /dev/null +++ b/public/emoji/1f9cd-1f3fe-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#AF7E57" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#9B6A49" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#60352A" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#AF7E57" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#60352A" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#915A34" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3fe.svg b/public/emoji/1f9cd-1f3fe.svg new file mode 100644 index 000000000..8b05543d0 --- /dev/null +++ b/public/emoji/1f9cd-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#AF7E57" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#9B6A49" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#60352A" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#AF7E57" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#60352A" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#915A34" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f9cd-1f3ff-200d-2640-fe0f.svg new file mode 100644 index 000000000..c96659cea --- /dev/null +++ b/public/emoji/1f9cd-1f3ff-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M13.449 22.569c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.404-2.185.878-4.137.055-.228-.274-2.776.007-4.528.076-.473.958-1.066 1.495-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787zm9.102 0c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.404-2.185-.878-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-.958-1.066-1.495-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787z"/><path fill="#4289C1" d="M21.717 25.17c0-1.012.084-3.628-.241-5.198-.325-1.57-6.687-1.605-7.012 0-.325 1.605-.075 4.081-.075 5.158 0 2.141 1.159 7.747.862 9.903-.066.479 2.492.937 2.449-.125-.078-1.969-.104-5.193-.04-6.18.035-.547.171-4.771.265-6.105.011-.018.295-.018.306 0 .094 1.333.387 5.558.423 6.105.064.987.137 4.212.059 6.18-.042 1.062 2.525.604 2.459.125-.296-2.156.545-9.514.545-9.863z"/><path fill="#0B0200" d="M19.744 5.553c.814.198 1.151.895 1.116 1.616-.024.488.384.93.384.93s-2.07.419-2.481-1.409c-.371-1.641.981-1.137.981-1.137z"/><path fill="#9268CA" d="M22.131 9.371c-.665-.794-3.019-1.356-3.019-1.356h-2.225s-2.355.561-3.019 1.356c-.807.964-.982 2.71-.982 2.71l1.608.298s.461 1.862.461 3.3c0 1.147-.422 3.328-.593 4.163-.043.211-.035.227 0 .279s.233.057.233.057h6.814s.128.022.198-.036.051-.084.002-.286c-.203-.833-.722-3.073-.722-4.176 0-1.371.65-3.301.65-3.301l1.58-.298c-.004-.001-.179-1.746-.986-2.71z"/><path fill="#7C533E" d="M19.36 4.361l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#664131" d="M19.36 3.851l-2.688.019v3.901s1.17 1.151 2.688.035V3.851z"/><path fill="#0B0200" d="M15.11 3.437c0-1.753 1.335-2.651 2.983-2.651 1.647 0 2.983.898 2.983 2.651s-1.335 3.174-2.983 3.174c-1.648 0-2.983-1.421-2.983-3.174z"/><path fill="#7C533E" d="M20.702 2.283h-5.21v2.738c0 1.337 1.447 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.283z"/><path fill="#0B0200" d="M18.199 2.233s-.967 1.739-2.707 1.739V2.233h2.707z"/><path fill="#0B0200" d="M17.937 2.233s1.033 1.739 2.772 1.739V2.233h-2.772z"/><circle cx="17.049" cy="4.777" r=".339"/><circle cx="19.165" cy="4.777" r=".339"/><path fill="#DF1F32" d="M18.112 7.03c-.404 0-.616-.2-.639-.223-.067-.067-.067-.176 0-.243s.174-.067.242-.002c.009.008.139.124.397.124.261 0 .391-.119.397-.124.069-.064.177-.062.242.005.065.068.065.174-.001.24-.022.023-.233.223-.638.223"/><path fill="#3D2E24" d="M18.31 6.138h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198-.001.109-.09.198-.198.198z"/><path fill="#292F33" d="M14.173 35.898c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.029 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f9cd-1f3ff-200d-2642-fe0f.svg new file mode 100644 index 000000000..59fb6a930 --- /dev/null +++ b/public/emoji/1f9cd-1f3ff-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#7C533E" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#664131" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#0B0200" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#7C533E" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#0B0200" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle cx="17.033" cy="4.786" r=".339"/><circle cx="19.15" cy="4.786" r=".339"/><path fill="#3D2E24" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-1f3ff.svg b/public/emoji/1f9cd-1f3ff.svg new file mode 100644 index 000000000..59fb6a930 --- /dev/null +++ b/public/emoji/1f9cd-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#7C533E" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#664131" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#0B0200" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#7C533E" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#0B0200" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle cx="17.033" cy="4.786" r=".339"/><circle cx="19.15" cy="4.786" r=".339"/><path fill="#3D2E24" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-200d-2640-fe0f.svg b/public/emoji/1f9cd-200d-2640-fe0f.svg new file mode 100644 index 000000000..1b8bfc388 --- /dev/null +++ b/public/emoji/1f9cd-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M13.449 22.569c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.404-2.185.878-4.137.055-.228-.274-2.776.007-4.528.076-.473.958-1.066 1.495-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787zm9.102 0c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.404-2.185-.878-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-.958-1.066-1.495-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787z"/><path fill="#4289C1" d="M21.717 25.17c0-1.012.084-3.628-.241-5.198-.325-1.57-6.687-1.605-7.012 0-.325 1.605-.075 4.081-.075 5.158 0 2.141 1.159 7.747.862 9.903-.066.479 2.492.937 2.449-.125-.078-1.969-.104-5.193-.04-6.18.035-.547.171-4.771.265-6.105.011-.018.295-.018.306 0 .094 1.333.387 5.558.423 6.105.064.987.137 4.212.059 6.18-.042 1.062 2.525.604 2.459.125-.296-2.156.545-9.514.545-9.863z"/><path fill="#FFAC33" d="M19.744 5.553c.814.198 1.151.895 1.116 1.616-.024.488.384.93.384.93s-2.07.419-2.481-1.409c-.371-1.641.981-1.137.981-1.137z"/><path fill="#9268CA" d="M22.131 9.371c-.665-.794-3.019-1.356-3.019-1.356h-2.225s-2.355.561-3.019 1.356c-.807.964-.982 2.71-.982 2.71l1.608.298s.461 1.862.461 3.3c0 1.147-.422 3.328-.593 4.163-.043.211-.035.227 0 .279s.233.057.233.057h6.814s.128.022.198-.036.051-.084.002-.286c-.203-.833-.722-3.073-.722-4.176 0-1.371.65-3.301.65-3.301l1.58-.298c-.004-.001-.179-1.746-.986-2.71z"/><path fill="#FFDC5D" d="M19.36 4.361l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#F9CA55" d="M19.36 3.851l-2.688.019v3.901s1.17 1.151 2.688.035V3.851z"/><path fill="#FFAC33" d="M15.11 3.437c0-1.753 1.335-2.651 2.983-2.651 1.647 0 2.983.898 2.983 2.651s-1.335 3.174-2.983 3.174c-1.648 0-2.983-1.421-2.983-3.174z"/><path fill="#FFDC5D" d="M20.702 2.283h-5.21v2.738c0 1.337 1.447 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.283z"/><path fill="#FFAC33" d="M18.199 2.233s-.967 1.739-2.707 1.739V2.233h2.707z"/><path fill="#FFAC33" d="M17.937 2.233s1.033 1.739 2.772 1.739V2.233h-2.772z"/><circle fill="#662113" cx="17.049" cy="4.777" r=".339"/><circle fill="#662113" cx="19.165" cy="4.777" r=".339"/><path fill="#DF1F32" d="M18.112 7.03c-.404 0-.616-.2-.639-.223-.067-.067-.067-.176 0-.243s.174-.067.242-.002c.009.008.139.124.397.124.261 0 .391-.119.397-.124.069-.064.177-.062.242.005.065.068.065.174-.001.24-.022.023-.233.223-.638.223"/><path fill="#C1694F" d="M18.31 6.138h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198-.001.109-.09.198-.198.198z"/><path fill="#292F33" d="M14.173 35.898c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.029 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd-200d-2642-fe0f.svg b/public/emoji/1f9cd-200d-2642-fe0f.svg new file mode 100644 index 000000000..450561e2a --- /dev/null +++ b/public/emoji/1f9cd-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#FFDC5D" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#F9CA55" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#FFAC33" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#FFDC5D" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#FFAC33" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#C1694F" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cd.svg b/public/emoji/1f9cd.svg new file mode 100644 index 000000000..450561e2a --- /dev/null +++ b/public/emoji/1f9cd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M22.933 22.368c.236.161.512-.02.646-.131.379-.313.763-1.144.611-2.142-.154-1.008-.11-2.185-.584-4.137-.055-.228.274-2.776-.007-4.528-.076-.473-1.251-1.066-1.789-1.057-.536.008-.263.944-.274 1.101-.12 1.682.143 4.279.193 4.632.277 1.956 1.239 2.835.981 4.13-.135.679-.154 1.293.242 1.345-.004.366-.105.728-.019.787zm-9.866-.192c-.236.161-.512-.02-.646-.131-.379-.313-.763-1.144-.611-2.142.154-1.008.11-2.185.584-4.137.055-.228-.274-2.776.007-4.528.076-.473 1.251-1.066 1.789-1.057.536.008.263.944.274 1.101.12 1.682-.143 4.279-.193 4.632-.277 1.956-1.239 2.835-.981 4.13.135.679.154 1.293-.242 1.345.004.366.105.728.019.787z"/><path fill="#4289C1" d="M21.702 26.733c.021-3.063.014-6.5.014-6.5h-7.465s.035 3.747.123 6.46c.07 2.14.396 6.193.1 8.349-.066.479 2.886.937 2.844-.125-.078-1.969.264-6.322.328-7.309.035-.547.25-2.326.344-3.659.011-.018.295-.018.306 0 .094 1.333.308 3.112.344 3.659.064.987.406 5.34.328 7.309-.042 1.062 2.91.604 2.844.125-.298-2.157-.113-7.96-.11-8.309z"/><path fill="#77B255" d="M22.822 9.472c-.778-.849-3.536-1.449-3.536-1.449h-2.605s-2.757.6-3.536 1.449c-.945 1.031-1.15 2.895-1.15 2.895l1.882.318s.283.9.283 2.436-.177 5.896-.177 5.896h8.032s-.209-4.43-.209-5.895.315-2.437.315-2.437l1.85-.318c.001 0-.205-1.865-1.149-2.895z"/><path fill="#FFDC5D" d="M19.344 4.369l-2.688.019v3.981c0 .963 2.688.998 2.688 0v-4z"/><path fill="#F9CA55" d="M19.344 3.86l-2.688.019V7.78s1.17 1.151 2.688.035V3.86z"/><path fill="#FFAC33" d="M18.402.716c-.613-.078-1.567.093-2.032.605-.651-.233-1.415.479-1.415 1.453 0 1.116.164 2.206.857 2.64.52.723 1.571 1.046 2.53 1.046 1.582 0 2.703-.756 2.703-3.093 0-1.883-.992-2.442-2.643-2.651z"/><path fill="#FFDC5D" d="M20.687 2.292h-5.21V5.03c0 1.337 1.166 2.993 2.605 2.993s2.605-1.516 2.605-2.912V2.292z"/><path fill="#FFAC33" d="M17.146 1.588l-1.67.704v2.084c0-.799.545-.846.871-1.358.012.322.658.628 1.636.628.744 0 2.703-1.291 2.703.73V2.007l-3.54-.419z"/><circle fill="#662113" cx="17.033" cy="4.786" r=".339"/><circle fill="#662113" cx="19.15" cy="4.786" r=".339"/><path fill="#C1694F" d="M18.573 6.984h-.953c-.102 0-.186-.084-.186-.186s.084-.186.186-.186h.953c.102 0 .186.084.186.186s-.084.186-.186.186zm-.279-.838h-.395c-.109 0-.198-.089-.198-.198 0-.109.089-.198.198-.198h.395c.109 0 .198.089.198.198 0 .109-.089.198-.198.198z"/><path fill="#292F33" d="M13.789 35.907c-.558-.051-.192-.684.062-.897.282-.238.734-.441.961-.852.251-.455 1.465-.395 1.721-.023.457.664.66.179.792.488.212.494.05 1.284.05 1.284h-3.586zm8.666 0c.558-.051.192-.684-.062-.897-.282-.238-.734-.441-.961-.852-.251-.455-1.465-.395-1.721-.023-.457.664-.66.179-.792.488-.212.494-.05 1.284-.05 1.284h3.586z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f9ce-1f3fb-200d-2640-fe0f.svg new file mode 100644 index 000000000..77c8b9ba1 --- /dev/null +++ b/public/emoji/1f9ce-1f3fb-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M20.591.985c-2.139-.842-5.474.244-5.861 2.743-.385 2.482.321 6.374 2.501 6.138 2.286-.247 4.63-.744 5.556-3.097.927-2.352-.056-4.942-2.196-5.784z"/><path fill="#F7DECE" d="M22.18 7.376c3.112-3.657-4.386-3.3-4.386-3.3-1.419.052-.442 2.416-1.11 3.707-.458.894 1.47 1.367 1.47 1.367s.885-.013.932 1.06v.01c.011.273-.018.598-.145 1.032-.635 2.149 2.252 3.467 2.885 1.313.251-.852.153-1.602.026-2.294l-.012-.061c-.191-1.028-.429-1.93.34-2.834z"/><path fill="#292F33" d="M23.035 1.848C21.611.181 19.652-.511 16.296.786c-2.931 1.133-1.988 3.463-1.306 3.065 1.882-1.097 3.131-.16 4.089 1.371.279-.752 1.507-1.214 1.755-.114.279 1.236-.869 1.775-.716 2.113.051.113-.058-.102 0 0 .734 1.289 1.929 1.694 1.929 1.694s.453.177 1.226-1.345c.773-1.522 1.177-4.067-.238-5.722z"/><path fill="#292F33" d="M22.264 3.601c2.904.626 1.712 5.155 1.997 6.821.35 2.051 2.364 2.124 2.364 2.124s-.332-1.429-.155-2.923c.246-2.072 1.597-3.745.171-5.768-1.821-2.584-6.182-.643-4.377-.254zm-2.012 28.637c-.937.204-1.397.837-1.522 1.423s.419 1.633.963 1.842 5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.51 31.844c-.521.24-.552 1.313.159 2.024.846.846 2.409 1.519 3.34 1.769s2.548-.27 2.539-.923c-.009-.701-1.545-1.829-2.238-1.859-.693-.031-1.505-.042-1.868-.464-.362-.421-1.391-.796-1.932-.547z"/><path fill="#4289C1" d="M25.336 26.113c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061-1.587-.041-2.272.113-3.998.076-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.873-.285 7.813-2.441 8.383-.57z"/><path fill="#2A6797" d="M11.014 32.461c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.925-.491 1.424-.447z"/><path fill="#9268CA" d="M25.28 24.097c0 1.946.508 2.792.592 3.638.047.47-1.553-.275-2.603-.41-2.727-.351-6.408-.309-6.408-.309-.557-2.685.576-4.818-.306-8.419-1.138-4.646 3.231-9.23 5.127-8.621 2.478.797 3.937 3.064 3.936 7.395 0 2.998-.338 4.78-.338 6.726z"/><path fill="#F7DECE" d="M19.3 15.532c-.341 2.345-.225 6.209-.58 6.395-2.051 1.072-4.163 3.421-5.517 3.961-.981.392-1.967.635-2.378 1.031-.659.634-1.453 1.184-1.497 1.8-.045.625.681.819 1.908.241.901-.424 1.624-.403 2.419-1.032 1.132-.896 6.19-1.666 7.84-4.348.557-.905.927-3.403 1.588-7.744-1.11-.401-3.783-.304-3.783-.304z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f9ce-1f3fb-200d-2642-fe0f.svg new file mode 100644 index 000000000..09e6f4d9b --- /dev/null +++ b/public/emoji/1f9ce-1f3fb-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#F7DECE" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#292F33" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84zm-2.732 30.242c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#F7DECE" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fb.svg b/public/emoji/1f9ce-1f3fb.svg new file mode 100644 index 000000000..09e6f4d9b --- /dev/null +++ b/public/emoji/1f9ce-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#F7DECE" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#292F33" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84zm-2.732 30.242c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#F7DECE" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f9ce-1f3fc-200d-2640-fe0f.svg new file mode 100644 index 000000000..cf2ca0cc9 --- /dev/null +++ b/public/emoji/1f9ce-1f3fc-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M20.591.985c-2.139-.842-5.474.244-5.861 2.743-.385 2.482.321 6.374 2.501 6.138 2.286-.247 4.63-.744 5.556-3.097.927-2.352-.056-4.942-2.196-5.784z"/><path fill="#F3D2A2" d="M22.18 7.376c3.112-3.657-4.386-3.3-4.386-3.3-1.419.052-.442 2.416-1.11 3.707-.458.894 1.47 1.367 1.47 1.367s.885-.013.932 1.06v.01c.011.273-.018.598-.145 1.032-.635 2.149 2.252 3.467 2.885 1.313.251-.852.153-1.602.026-2.294l-.012-.061c-.191-1.028-.429-1.93.34-2.834z"/><path fill="#FFE51E" d="M23.035 1.848C21.611.181 19.652-.511 16.296.786c-2.931 1.133-1.988 3.463-1.306 3.065 1.882-1.097 3.131-.16 4.089 1.371.279-.752 1.507-1.214 1.755-.114.279 1.236-.869 1.775-.716 2.113.051.113-.058-.102 0 0 .734 1.289 1.929 1.694 1.929 1.694s.453.177 1.226-1.345c.773-1.522 1.177-4.067-.238-5.722z"/><path fill="#FFE51E" d="M22.264 3.601c2.904.626 1.712 5.155 1.997 6.821.35 2.051 2.364 2.124 2.364 2.124s-.332-1.429-.155-2.923c.246-2.072 1.597-3.745.171-5.768-1.821-2.584-6.182-.643-4.377-.254z"/><path fill="#292F33" d="M20.252 32.238c-.937.204-1.397.837-1.522 1.423s.419 1.633.963 1.842 5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.51 31.844c-.521.24-.552 1.313.159 2.024.846.846 2.409 1.519 3.34 1.769s2.548-.27 2.539-.923c-.009-.701-1.545-1.829-2.238-1.859-.693-.031-1.505-.042-1.868-.464-.362-.421-1.391-.796-1.932-.547z"/><path fill="#4289C1" d="M25.336 26.113c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061-1.587-.041-2.272.113-3.998.076-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.873-.285 7.813-2.441 8.383-.57z"/><path fill="#2A6797" d="M11.014 32.461c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.925-.491 1.424-.447z"/><path fill="#9268CA" d="M25.28 24.097c0 1.946.508 2.792.592 3.638.047.47-1.553-.275-2.603-.41-2.727-.351-6.408-.309-6.408-.309-.557-2.685.576-4.818-.306-8.419-1.138-4.646 3.231-9.23 5.127-8.621 2.478.797 3.937 3.064 3.936 7.395 0 2.998-.338 4.78-.338 6.726z"/><path fill="#F3D2A2" d="M19.3 15.532c-.341 2.345-.225 6.209-.58 6.395-2.051 1.072-4.163 3.421-5.517 3.961-.981.392-1.967.635-2.378 1.031-.659.634-1.453 1.184-1.497 1.8-.045.625.681.819 1.908.241.901-.424 1.624-.403 2.419-1.032 1.132-.896 6.19-1.666 7.84-4.348.557-.905.927-3.403 1.588-7.744-1.11-.401-3.783-.304-3.783-.304z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f9ce-1f3fc-200d-2642-fe0f.svg new file mode 100644 index 000000000..9bd2fc01d --- /dev/null +++ b/public/emoji/1f9ce-1f3fc-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#F3D2A2" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#FFE51E" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#F3D2A2" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fc.svg b/public/emoji/1f9ce-1f3fc.svg new file mode 100644 index 000000000..9bd2fc01d --- /dev/null +++ b/public/emoji/1f9ce-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#F3D2A2" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#FFE51E" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#F3D2A2" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f9ce-1f3fd-200d-2640-fe0f.svg new file mode 100644 index 000000000..ed058b9d9 --- /dev/null +++ b/public/emoji/1f9ce-1f3fd-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M20.591.985c-2.139-.842-5.474.244-5.861 2.743-.385 2.482.321 6.374 2.501 6.138 2.286-.247 4.63-.744 5.556-3.097.927-2.352-.056-4.942-2.196-5.784z"/><path fill="#D4AB88" d="M22.18 7.376c3.112-3.657-4.386-3.3-4.386-3.3-1.419.052-.442 2.416-1.11 3.707-.458.894 1.47 1.367 1.47 1.367s.885-.013.932 1.06v.01c.011.273-.018.598-.145 1.032-.635 2.149 2.252 3.467 2.885 1.313.251-.852.153-1.602.026-2.294l-.012-.061c-.191-1.028-.429-1.93.34-2.834z"/><path fill="#963B22" d="M23.035 1.848C21.611.181 19.652-.511 16.296.786c-2.931 1.133-1.988 3.463-1.306 3.065 1.882-1.097 3.131-.16 4.089 1.371.279-.752 1.507-1.214 1.755-.114.279 1.236-.869 1.775-.716 2.113.051.113-.058-.102 0 0 .734 1.289 1.929 1.694 1.929 1.694s.453.177 1.226-1.345c.773-1.522 1.177-4.067-.238-5.722z"/><path fill="#963B22" d="M22.264 3.601c2.904.626 1.712 5.155 1.997 6.821.35 2.051 2.364 2.124 2.364 2.124s-.332-1.429-.155-2.923c.246-2.072 1.597-3.745.171-5.768-1.821-2.584-6.182-.643-4.377-.254z"/><path fill="#292F33" d="M20.252 32.238c-.937.204-1.397.837-1.522 1.423s.419 1.633.963 1.842 5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.51 31.844c-.521.24-.552 1.313.159 2.024.846.846 2.409 1.519 3.34 1.769s2.548-.27 2.539-.923c-.009-.701-1.545-1.829-2.238-1.859-.693-.031-1.505-.042-1.868-.464-.362-.421-1.391-.796-1.932-.547z"/><path fill="#4289C1" d="M25.336 26.113c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061-1.587-.041-2.272.113-3.998.076-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.873-.285 7.813-2.441 8.383-.57z"/><path fill="#2A6797" d="M11.014 32.461c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.925-.491 1.424-.447z"/><path fill="#9268CA" d="M25.28 24.097c0 1.946.508 2.792.592 3.638.047.47-1.553-.275-2.603-.41-2.727-.351-6.408-.309-6.408-.309-.557-2.685.576-4.818-.306-8.419-1.138-4.646 3.231-9.23 5.127-8.621 2.478.797 3.937 3.064 3.936 7.395 0 2.998-.338 4.78-.338 6.726z"/><path fill="#D4AB88" d="M19.3 15.532c-.341 2.345-.225 6.209-.58 6.395-2.051 1.072-4.163 3.421-5.517 3.961-.981.392-1.967.635-2.378 1.031-.659.634-1.453 1.184-1.497 1.8-.045.625.681.819 1.908.241.901-.424 1.624-.403 2.419-1.032 1.132-.896 6.19-1.666 7.84-4.348.557-.905.927-3.403 1.588-7.744-1.11-.401-3.783-.304-3.783-.304z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f9ce-1f3fd-200d-2642-fe0f.svg new file mode 100644 index 000000000..10df60c9b --- /dev/null +++ b/public/emoji/1f9ce-1f3fd-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#D4AB88" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#963B22" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#D4AB88" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fd.svg b/public/emoji/1f9ce-1f3fd.svg new file mode 100644 index 000000000..10df60c9b --- /dev/null +++ b/public/emoji/1f9ce-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#D4AB88" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#963B22" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#D4AB88" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f9ce-1f3fe-200d-2640-fe0f.svg new file mode 100644 index 000000000..83206f8d2 --- /dev/null +++ b/public/emoji/1f9ce-1f3fe-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M20.591.985c-2.139-.842-5.474.244-5.861 2.743-.385 2.482.321 6.374 2.501 6.138 2.286-.247 4.63-.744 5.556-3.097.927-2.352-.056-4.942-2.196-5.784z"/><path fill="#AF7E57" d="M22.18 7.376c3.112-3.657-4.386-3.3-4.386-3.3-1.419.052-.442 2.416-1.11 3.707-.458.894 1.47 1.367 1.47 1.367s.885-.013.932 1.06v.01c.011.273-.018.598-.145 1.032-.635 2.149 2.252 3.467 2.885 1.313.251-.852.153-1.602.026-2.294l-.012-.061c-.191-1.028-.429-1.93.34-2.834z"/><path fill="#60352A" d="M23.035 1.848C21.611.181 19.652-.511 16.296.786c-2.931 1.133-1.988 3.463-1.306 3.065 1.882-1.097 3.131-.16 4.089 1.371.279-.752 1.507-1.214 1.755-.114.279 1.236-.869 1.775-.716 2.113.051.113-.058-.102 0 0 .734 1.289 1.929 1.694 1.929 1.694s.453.177 1.226-1.345c.773-1.522 1.177-4.067-.238-5.722z"/><path fill="#60352A" d="M22.264 3.601c2.904.626 1.712 5.155 1.997 6.821.35 2.051 2.364 2.124 2.364 2.124s-.332-1.429-.155-2.923c.246-2.072 1.597-3.745.171-5.768-1.821-2.584-6.182-.643-4.377-.254z"/><path fill="#292F33" d="M20.252 32.238c-.937.204-1.397.837-1.522 1.423s.419 1.633.963 1.842 5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.51 31.844c-.521.24-.552 1.313.159 2.024.846.846 2.409 1.519 3.34 1.769s2.548-.27 2.539-.923c-.009-.701-1.545-1.829-2.238-1.859-.693-.031-1.505-.042-1.868-.464-.362-.421-1.391-.796-1.932-.547z"/><path fill="#4289C1" d="M25.336 26.113c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061-1.587-.041-2.272.113-3.998.076-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.873-.285 7.813-2.441 8.383-.57z"/><path fill="#2A6797" d="M11.014 32.461c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.925-.491 1.424-.447z"/><path fill="#9268CA" d="M25.28 24.097c0 1.946.508 2.792.592 3.638.047.47-1.553-.275-2.603-.41-2.727-.351-6.408-.309-6.408-.309-.557-2.685.576-4.818-.306-8.419-1.138-4.646 3.231-9.23 5.127-8.621 2.478.797 3.937 3.064 3.936 7.395 0 2.998-.338 4.78-.338 6.726z"/><path fill="#AF7E57" d="M19.3 15.532c-.341 2.345-.225 6.209-.58 6.395-2.051 1.072-4.163 3.421-5.517 3.961-.981.392-1.967.635-2.378 1.031-.659.634-1.453 1.184-1.497 1.8-.045.625.681.819 1.908.241.901-.424 1.624-.403 2.419-1.032 1.132-.896 6.19-1.666 7.84-4.348.557-.905.927-3.403 1.588-7.744-1.11-.401-3.783-.304-3.783-.304z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f9ce-1f3fe-200d-2642-fe0f.svg new file mode 100644 index 000000000..fb24b6dfb --- /dev/null +++ b/public/emoji/1f9ce-1f3fe-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#AF7E57" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#60352A" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#AF7E57" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3fe.svg b/public/emoji/1f9ce-1f3fe.svg new file mode 100644 index 000000000..fb24b6dfb --- /dev/null +++ b/public/emoji/1f9ce-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#AF7E57" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#60352A" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#AF7E57" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f9ce-1f3ff-200d-2640-fe0f.svg new file mode 100644 index 000000000..442cb9c49 --- /dev/null +++ b/public/emoji/1f9ce-1f3ff-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M20.591.985c-2.139-.842-5.474.244-5.861 2.743-.385 2.482.321 6.374 2.501 6.138 2.286-.247 4.63-.744 5.556-3.097.927-2.352-.056-4.942-2.196-5.784z"/><path fill="#7C533E" d="M22.18 7.376c3.112-3.657-4.386-3.3-4.386-3.3-1.419.052-.442 2.416-1.11 3.707-.458.894 1.47 1.367 1.47 1.367s.885-.013.932 1.06v.01c.011.273-.018.598-.145 1.032-.635 2.149 2.252 3.467 2.885 1.313.251-.852.153-1.602.026-2.294l-.012-.061c-.191-1.028-.429-1.93.34-2.834z"/><path fill="#0B0200" d="M23.035 1.848C21.611.181 19.652-.511 16.296.786c-2.931 1.133-1.988 3.463-1.306 3.065 1.882-1.097 3.131-.16 4.089 1.371.279-.752 1.507-1.214 1.755-.114.279 1.236-.869 1.775-.716 2.113.051.113-.058-.102 0 0 .734 1.289 1.929 1.694 1.929 1.694s.453.177 1.226-1.345c.773-1.522 1.177-4.067-.238-5.722z"/><path fill="#0B0200" d="M22.264 3.601c2.904.626 1.712 5.155 1.997 6.821.35 2.051 2.364 2.124 2.364 2.124s-.332-1.429-.155-2.923c.246-2.072 1.597-3.745.171-5.768-1.821-2.584-6.182-.643-4.377-.254z"/><path fill="#292F33" d="M20.252 32.238c-.937.204-1.397.837-1.522 1.423s.419 1.633.963 1.842 5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.51 31.844c-.521.24-.552 1.313.159 2.024.846.846 2.409 1.519 3.34 1.769s2.548-.27 2.539-.923c-.009-.701-1.545-1.829-2.238-1.859-.693-.031-1.505-.042-1.868-.464-.362-.421-1.391-.796-1.932-.547z"/><path fill="#4289C1" d="M25.336 26.113c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061-1.587-.041-2.272.113-3.998.076-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.873-.285 7.813-2.441 8.383-.57z"/><path fill="#2A6797" d="M11.014 32.461c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.925-.491 1.424-.447z"/><path fill="#9268CA" d="M25.28 24.097c0 1.946.508 2.792.592 3.638.047.47-1.553-.275-2.603-.41-2.727-.351-6.408-.309-6.408-.309-.557-2.685.576-4.818-.306-8.419-1.138-4.646 3.231-9.23 5.127-8.621 2.478.797 3.937 3.064 3.936 7.395 0 2.998-.338 4.78-.338 6.726z"/><path fill="#7C533E" d="M19.3 15.532c-.341 2.345-.225 6.209-.58 6.395-2.051 1.072-4.163 3.421-5.517 3.961-.981.392-1.967.635-2.378 1.031-.659.634-1.453 1.184-1.497 1.8-.045.625.681.819 1.908.241.901-.424 1.624-.403 2.419-1.032 1.132-.896 6.19-1.666 7.84-4.348.557-.905.927-3.403 1.588-7.744-1.11-.401-3.783-.304-3.783-.304z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f9ce-1f3ff-200d-2642-fe0f.svg new file mode 100644 index 000000000..aba0cb467 --- /dev/null +++ b/public/emoji/1f9ce-1f3ff-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#7C533E" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#0B0200" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#7C533E" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-1f3ff.svg b/public/emoji/1f9ce-1f3ff.svg new file mode 100644 index 000000000..aba0cb467 --- /dev/null +++ b/public/emoji/1f9ce-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#7C533E" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#0B0200" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#7C533E" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-200d-2640-fe0f.svg b/public/emoji/1f9ce-200d-2640-fe0f.svg new file mode 100644 index 000000000..89c9ff428 --- /dev/null +++ b/public/emoji/1f9ce-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M20.591.985c-2.139-.842-5.474.244-5.861 2.743-.385 2.482.321 6.374 2.501 6.138 2.286-.247 4.63-.744 5.556-3.097.927-2.352-.056-4.942-2.196-5.784z"/><path fill="#FFDC5D" d="M22.18 7.376c3.112-3.657-4.386-3.3-4.386-3.3-1.419.052-.442 2.416-1.11 3.707-.458.894 1.47 1.367 1.47 1.367s.885-.013.932 1.06v.01c.011.273-.018.598-.145 1.032-.635 2.149 2.252 3.467 2.885 1.313.251-.852.153-1.602.026-2.294l-.012-.061c-.191-1.028-.429-1.93.34-2.834z"/><path fill="#FFAC33" d="M23.035 1.848C21.611.181 19.652-.511 16.296.786c-2.931 1.133-1.988 3.463-1.306 3.065 1.882-1.097 3.131-.16 4.089 1.371.279-.752 1.507-1.214 1.755-.114.279 1.236-.869 1.775-.716 2.113.051.113-.058-.102 0 0 .734 1.289 1.929 1.694 1.929 1.694s.453.177 1.226-1.345c.773-1.522 1.177-4.067-.238-5.722z"/><path fill="#FFAC33" d="M22.264 3.601c2.904.626 1.712 5.155 1.997 6.821.35 2.051 2.364 2.124 2.364 2.124s-.332-1.429-.155-2.923c.246-2.072 1.597-3.745.171-5.768-1.821-2.584-6.182-.643-4.377-.254z"/><path fill="#292F33" d="M20.252 32.238c-.937.204-1.397.837-1.522 1.423s.419 1.633.963 1.842 5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.51 31.844c-.521.24-.552 1.313.159 2.024.846.846 2.409 1.519 3.34 1.769s2.548-.27 2.539-.923c-.009-.701-1.545-1.829-2.238-1.859-.693-.031-1.505-.042-1.868-.464-.362-.421-1.391-.796-1.932-.547z"/><path fill="#4289C1" d="M25.336 26.113c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061-1.587-.041-2.272.113-3.998.076-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.873-.285 7.813-2.441 8.383-.57z"/><path fill="#2A6797" d="M11.014 32.461c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.925-.491 1.424-.447z"/><path fill="#9268CA" d="M25.28 24.097c0 1.946.508 2.792.592 3.638.047.47-1.553-.275-2.603-.41-2.727-.351-6.408-.309-6.408-.309-.557-2.685.576-4.818-.306-8.419-1.138-4.646 3.231-9.23 5.127-8.621 2.478.797 3.937 3.064 3.936 7.395 0 2.998-.338 4.78-.338 6.726z"/><path fill="#FFDC5D" d="M19.3 15.532c-.341 2.345-.225 6.209-.58 6.395-2.051 1.072-4.163 3.421-5.517 3.961-.981.392-1.967.635-2.378 1.031-.659.634-1.453 1.184-1.497 1.8-.045.625.681.819 1.908.241.901-.424 1.624-.403 2.419-1.032 1.132-.896 6.19-1.666 7.84-4.348.557-.905.927-3.403 1.588-7.744-1.11-.401-3.783-.304-3.783-.304z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce-200d-2642-fe0f.svg b/public/emoji/1f9ce-200d-2642-fe0f.svg new file mode 100644 index 000000000..403d73eb3 --- /dev/null +++ b/public/emoji/1f9ce-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#FFDC5D" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#FFAC33" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#FFDC5D" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9ce.svg b/public/emoji/1f9ce.svg new file mode 100644 index 000000000..403d73eb3 --- /dev/null +++ b/public/emoji/1f9ce.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M20.905 1.103c-2.182-.859-5.584.249-5.979 2.799-.393 2.532.328 6.502 2.552 6.262 2.332-.252 4.724-.759 5.668-3.16.944-2.399-.059-5.042-2.241-5.901z"/><path fill="#FFDC5D" d="M22.526 7.623c3.175-3.73-4.474-3.367-4.474-3.367-1.448.053-.451 2.465-1.133 3.782-.467.912 1.499 1.395 1.499 1.395s.903-.013.951 1.082v.01c.011.279-.018.61-.148 1.053-.648 2.192 2.297 3.537 2.944 1.34.256-.869.157-1.634.027-2.34l-.012-.063c-.196-1.049-.44-1.969.346-2.892z"/><path fill="#FFAC33" d="M23.398 1.983C21.945.282 19.863-.621 16.523.9c-1.361.62-1.971.391-2.165.663-.93 1.306.337 2.753.833 2.464 1.572-.917 2.99-.644 3.352.019s.028 1.854.321 1.862c.792.021.664-.755.977-1.202.514-.731 1.296-.318 1.467.496.136.645 0 1.741-1.054 1.934.717 1.577 2.136 2.058 2.136 2.058s.461.181 1.25-1.371c.789-1.554 1.201-4.151-.242-5.84z"/><path fill="#292F33" d="M20.666 32.225c-.937.204-1.397.837-1.522 1.423-.126.586.419 1.633.963 1.842s5.354.548 6.132-.078c1.162-.934-4.804-3.354-5.573-3.187z"/><path fill="#3A4449" d="M20.924 31.831c-.521.24-.593 1.505.045 2.283.721.879 2.524 1.26 3.455 1.51s2.442-.001 2.446-1.322c.004-1.115-1.452-1.429-2.145-1.46-.693-.031-1.505-.042-1.868-.464s-1.391-.796-1.933-.547z"/><path fill="#4289C1" d="M25.75 26.1c.655 2.154.529 4.598-1.058 5.452-1.52.818-4.71.946-4.71.946s-.905.89-.351 2.014c.315.639.649.921.58 1.007-.061.076-.748.153-1.053.214-.814.163-1.755.102-3.341.061s-2.272.113-3.998.076c-1.912-.041-3.344-.507-4.298-2.08-.814-1.343-.395-3.338 1.505-4.638 1.546-1.058 6.469-2.197 8.341-2.482 1.874-.285 7.814-2.441 8.383-.57z"/><path fill="#77B255" d="M26.377 25.554c-.057 1.128.391 2.499-.26 2.27-2.565-.9-9.188-.988-9.188-.988-.568-2.564-.037-6.416.008-9.956.059-4.645 3.148-7.192 5.082-6.61 2.528.761 3.689 3.387 4.016 7.511s.398 6.646.342 7.773z"/><path fill="#FFDC5D" d="M19.382 16.204c-.442 2.329-.227 6.078-.59 6.249-2.095.984-3.883 3.239-5.259 3.722-.997.349-1.992.55-2.42.928-.686.605-1.503 1.121-1.573 1.735-.072.623.645.847 1.896.323.919-.385 1.64-.333 2.461-.928 1.17-.847 5.832-1.399 7.596-4.008.595-.881 1.227-2.94 2.074-7.249-1.091-.449-4.185-.772-4.185-.772z"/><path fill="#2A6797" d="M11.429 32.448c.718.062 6.591.163 8.137.081 0 0 0 .57-1.505.651-1.505.081-4.516-.407-6.469-.244-.538.045-1.485.121-1.587-.041-.117-.185.924-.491 1.424-.447z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f9cf-1f3fb-200d-2640-fe0f.svg new file mode 100644 index 000000000..9605fac0a --- /dev/null +++ b/public/emoji/1f9cf-1f3fb-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9268CA" d="M33.944 36v-3.5c0-3.314-3.686-5.5-7-5.5h-12c-3.313 0-7 2.186-7 5.5V36h26z"/><path fill="#292F33" d="M20.889 5.069c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.894 6.844-10.947 10.949-10.947"/><path fill="#F7DECE" d="M21.041 29.414c2.008 0 3.563-1.484 3.563-2.491v-3.108h-7.332v2.998c0 1.326 1.761 2.601 3.769 2.601z"/><path fill="#EEC2AD" d="M17.266 25.179c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.936h-7.338v2.936z"/><path fill="#F7DECE" d="M12.678 15.718c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M20.889 23.543c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.09.091-.929.885-2.535.885"/><path fill="#292F33" d="M10.669 19c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202 0-8.895-6.842-11.672-10.948-11.672-4.104 0-10.947 2.722-10.947 11.617 0 .793-.02 1.257.008 3.257h.719z"/><path fill="#662113" d="M17.552 17.887c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M21.78 20.5h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .233-.191.423-.424.423"/><path fill="#7450A8" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#9268CA" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#F7DECE" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.022C1.321 21.593.366 17.586.327 17.416c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.214-.265.352-.479.352z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f9cf-1f3fb-200d-2642-fe0f.svg new file mode 100644 index 000000000..be0cd9005 --- /dev/null +++ b/public/emoji/1f9cf-1f3fb-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#F7DECE" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#EEC2AD" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#F7DECE" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#F7DECE" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#C1694F" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#292F33" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#F7DECE" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fb.svg b/public/emoji/1f9cf-1f3fb.svg new file mode 100644 index 000000000..be0cd9005 --- /dev/null +++ b/public/emoji/1f9cf-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#F7DECE" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#EEC2AD" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#F7DECE" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#F7DECE" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#C1694F" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#292F33" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#F7DECE" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f9cf-1f3fc-200d-2640-fe0f.svg new file mode 100644 index 000000000..a463bd6ef --- /dev/null +++ b/public/emoji/1f9cf-1f3fc-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9268CA" d="M33.944 36v-3.5c0-3.314-3.686-5.5-7-5.5h-12c-3.313 0-7 2.186-7 5.5V36h26z"/><path fill="#FFE51E" d="M20.889 5.069c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.894 6.844-10.947 10.949-10.947"/><path fill="#F3D2A2" d="M21.041 29.414c2.008 0 3.563-1.484 3.563-2.491v-3.108h-7.332v2.998c0 1.326 1.761 2.601 3.769 2.601z"/><path fill="#E2C196" d="M17.266 25.179c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.936h-7.338v2.936z"/><path fill="#F3D2A2" d="M12.678 15.718c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M20.889 23.543c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.09.091-.929.885-2.535.885"/><path fill="#FFE51E" d="M10.669 19c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202 0-8.895-6.842-11.672-10.948-11.672-4.104 0-10.947 2.722-10.947 11.617 0 .793-.02 1.257.008 3.257h.719z"/><path fill="#662113" d="M17.552 17.887c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M21.78 20.5h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .233-.191.423-.424.423"/><path fill="#7450A8" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#9268CA" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#F3D2A2" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.022C1.321 21.593.366 17.586.327 17.416c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.214-.265.352-.479.352z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f9cf-1f3fc-200d-2642-fe0f.svg new file mode 100644 index 000000000..312364641 --- /dev/null +++ b/public/emoji/1f9cf-1f3fc-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#F3D2A2" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#E2C196" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#F3D2A2" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#F3D2A2" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#C1694F" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#FFE51E" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#F3D2A2" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fc.svg b/public/emoji/1f9cf-1f3fc.svg new file mode 100644 index 000000000..312364641 --- /dev/null +++ b/public/emoji/1f9cf-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#F3D2A2" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#E2C196" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#F3D2A2" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#F3D2A2" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#C1694F" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#FFE51E" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#F3D2A2" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f9cf-1f3fd-200d-2640-fe0f.svg new file mode 100644 index 000000000..623b34451 --- /dev/null +++ b/public/emoji/1f9cf-1f3fd-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9268CA" d="M33.944 36v-3.5c0-3.314-3.686-5.5-7-5.5h-12c-3.313 0-7 2.186-7 5.5V36h26z"/><path fill="#963B22" d="M20.889 5.069c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.894 6.844-10.947 10.949-10.947"/><path fill="#D4AB88" d="M21.041 29.414c2.008 0 3.563-1.484 3.563-2.491v-3.108h-7.332v2.998c0 1.326 1.761 2.601 3.769 2.601z"/><path fill="#CC9B7A" d="M17.266 25.179c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.936h-7.338v2.936z"/><path fill="#D4AB88" d="M12.678 15.718c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M20.889 23.543c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.09.091-.929.885-2.535.885"/><path fill="#963B22" d="M10.669 19c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202 0-8.895-6.842-11.672-10.948-11.672-4.104 0-10.947 2.722-10.947 11.617 0 .793-.02 1.257.008 3.257h.719z"/><path fill="#662113" d="M17.552 17.887c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M21.78 20.5h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .233-.191.423-.424.423"/><path fill="#7450A8" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#9268CA" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#D4AB88" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.022C1.321 21.593.366 17.586.327 17.416c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.214-.265.352-.479.352z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f9cf-1f3fd-200d-2642-fe0f.svg new file mode 100644 index 000000000..d41a0fa60 --- /dev/null +++ b/public/emoji/1f9cf-1f3fd-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#D4AB88" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#CC9B7A" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#D4AB88" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#D4AB88" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#C1694F" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#963B22" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#D4AB88" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fd.svg b/public/emoji/1f9cf-1f3fd.svg new file mode 100644 index 000000000..d41a0fa60 --- /dev/null +++ b/public/emoji/1f9cf-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#D4AB88" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#CC9B7A" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#D4AB88" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#D4AB88" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#C1694F" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#963B22" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#D4AB88" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f9cf-1f3fe-200d-2640-fe0f.svg new file mode 100644 index 000000000..d63eee453 --- /dev/null +++ b/public/emoji/1f9cf-1f3fe-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9268CA" d="M33.944 36v-3.5c0-3.314-3.686-5.5-7-5.5h-12c-3.313 0-7 2.186-7 5.5V36h26z"/><path fill="#60352A" d="M20.889 5.069c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.894 6.844-10.947 10.949-10.947"/><path fill="#AF7E57" d="M21.041 29.414c2.008 0 3.563-1.484 3.563-2.491v-3.108h-7.332v2.998c0 1.326 1.761 2.601 3.769 2.601z"/><path fill="#9B6A49" d="M17.266 25.179c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.936h-7.338v2.936z"/><path fill="#AF7E57" d="M12.678 15.718c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M20.889 23.543c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.09.091-.929.885-2.535.885"/><path fill="#60352A" d="M10.669 19c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202 0-8.895-6.842-11.672-10.948-11.672-4.104 0-10.947 2.722-10.947 11.617 0 .793-.02 1.257.008 3.257h.719z"/><path fill="#662113" d="M17.552 17.887c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#915A34" d="M21.78 20.5h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .233-.191.423-.424.423"/><path fill="#7450A8" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#9268CA" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#AF7E57" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.022C1.321 21.593.366 17.586.327 17.416c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.214-.265.352-.479.352z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f9cf-1f3fe-200d-2642-fe0f.svg new file mode 100644 index 000000000..dd4392664 --- /dev/null +++ b/public/emoji/1f9cf-1f3fe-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#AF7E57" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#9B6A49" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#AF7E57" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#AF7E57" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#915A34" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#60352A" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#915A34" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#AF7E57" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3fe.svg b/public/emoji/1f9cf-1f3fe.svg new file mode 100644 index 000000000..dd4392664 --- /dev/null +++ b/public/emoji/1f9cf-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#AF7E57" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#9B6A49" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#AF7E57" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#AF7E57" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#915A34" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#60352A" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#915A34" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#AF7E57" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f9cf-1f3ff-200d-2640-fe0f.svg new file mode 100644 index 000000000..6064882a7 --- /dev/null +++ b/public/emoji/1f9cf-1f3ff-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9268CA" d="M33.944 36v-3.5c0-3.314-3.686-5.5-7-5.5h-12c-3.313 0-7 2.186-7 5.5V36h26z"/><path fill="#0B0200" d="M20.889 5.069c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.894 6.844-10.947 10.949-10.947"/><path fill="#7C533E" d="M21.041 29.414c2.008 0 3.563-1.484 3.563-2.491v-3.108h-7.332v2.998c0 1.326 1.761 2.601 3.769 2.601z"/><path fill="#664131" d="M17.266 25.179c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.936h-7.338v2.936z"/><path fill="#7C533E" d="M12.678 15.718c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M20.889 23.543c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.09.091-.929.885-2.535.885"/><path fill="#0B0200" d="M10.669 19c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202 0-8.895-6.842-11.672-10.948-11.672-4.104 0-10.947 2.722-10.947 11.617 0 .793-.02 1.257.008 3.257h.719z"/><path d="M17.552 17.887c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#3D2E24" d="M21.78 20.5h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .233-.191.423-.424.423"/><path fill="#7450A8" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#9268CA" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#7C533E" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.022C1.321 21.593.366 17.586.327 17.416c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.214-.265.352-.479.352z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f9cf-1f3ff-200d-2642-fe0f.svg new file mode 100644 index 000000000..748ab421b --- /dev/null +++ b/public/emoji/1f9cf-1f3ff-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#7C533E" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#664131" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#7C533E" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#7C533E" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#3D2E24" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#0B0200" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#3D2E24" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#7C533E" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-1f3ff.svg b/public/emoji/1f9cf-1f3ff.svg new file mode 100644 index 000000000..748ab421b --- /dev/null +++ b/public/emoji/1f9cf-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#7C533E" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#664131" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#7C533E" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#7C533E" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#3D2E24" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#0B0200" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#3D2E24" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#7C533E" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-200d-2640-fe0f.svg b/public/emoji/1f9cf-200d-2640-fe0f.svg new file mode 100644 index 000000000..7d8f058a8 --- /dev/null +++ b/public/emoji/1f9cf-200d-2640-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9268CA" d="M33.944 36v-3.5c0-3.314-3.686-5.5-7-5.5h-12c-3.313 0-7 2.186-7 5.5V36h26z"/><path fill="#FFAC33" d="M20.889 5.069c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948 0-8.894 6.844-10.947 10.949-10.947"/><path fill="#FFDC5D" d="M21.041 29.414c2.008 0 3.563-1.484 3.563-2.491v-3.108h-7.332v2.998c0 1.326 1.761 2.601 3.769 2.601z"/><path fill="#F9CA55" d="M17.266 25.179c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.936h-7.338v2.936z"/><path fill="#FFDC5D" d="M12.678 15.718c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.729 8.209 10.563 0 5.833-3.676 10.285-8.209 10.285-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M20.889 23.543c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.09.091-.929.885-2.535.885"/><path fill="#FFAC33" d="M10.669 19c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.685-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.022-.531-.04.469h.719c.006-2 .006-1.924.006-3.202 0-8.895-6.842-11.672-10.948-11.672-4.104 0-10.947 2.722-10.947 11.617 0 .793-.02 1.257.008 3.257h.719z"/><path fill="#662113" d="M17.552 17.887c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M21.78 20.5h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .233-.191.423-.424.423"/><path fill="#7450A8" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#9268CA" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#FFDC5D" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.022C1.321 21.593.366 17.586.327 17.416c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.214-.265.352-.479.352z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf-200d-2642-fe0f.svg b/public/emoji/1f9cf-200d-2642-fe0f.svg new file mode 100644 index 000000000..8c119c990 --- /dev/null +++ b/public/emoji/1f9cf-200d-2642-fe0f.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#FFDC5D" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#F9CA55" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#FFDC5D" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#FFDC5D" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#C1694F" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#FFAC33" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#FFDC5D" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9cf.svg b/public/emoji/1f9cf.svg new file mode 100644 index 000000000..8c119c990 --- /dev/null +++ b/public/emoji/1f9cf.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M35.002 36v-2c0-3.314-2.686-6-6-6h-16c-3.313 0-6 2.686-6 6v2h28z"/><path fill="#FFDC5D" d="M16.642 28.101c0 .736 1.965 1.963 4.36 1.963s4.359-1.157 4.359-1.963V24.29h-8.72v3.811z"/><path fill="#F9CA55" d="M16.634 25.973c1.216 1.374 2.724 1.746 4.364 1.746 1.639 0 3.146-.373 4.363-1.746v-3.491h-8.728v3.491z"/><path fill="#FFDC5D" d="M14.447 15.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.388 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#FFDC5D" d="M12.48 16.959c0-5.589 3.816-10.121 8.522-10.121 4.707 0 8.523 4.532 8.523 10.121S25.709 27.08 21.002 27.08c-4.706 0-8.522-4.531-8.522-10.121"/><path fill="#C1694F" d="M21.002 23.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#FFAC33" d="M21 3.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C11.822 7.648 14.646 3.48 21 3.48"/><path fill="#662113" d="M17.002 17c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M21.752 19.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.336.75-.75.75"/><path fill="#2A6797" d="M8.002 28.558V36h1l.303-7.442z"/><path fill="#4289C1" d="M4.335 28.053L3.002 36h5l.721-7.588z"/><path fill="#FFDC5D" d="M6.789 22.258c.923-.923 3.558-2.964 4.215-3.637.658-.672 1.53.097 1.068.918-.462.821-3.129 3.847-3.129 3.847s1.59.462 1.949.872 1.026 3.078.41 3.488-1.539.103-1.539.103-.973 2.411-3.487 2.257c-1.044-.064-2.103-.975-2.001-2.514.103-1.539.904-2.969 1.18-3.796.308-.923 1.334-1.538 1.334-1.538z"/><path d="M6.103 20.705c-.048 0-.097-.007-.146-.021-2.429-.74-2.859-3.564-2.876-3.684-.039-.273.15-.525.423-.565.272-.038.526.149.566.422.003.023.362 2.316 2.178 2.869.264.081.413.36.333.624-.066.216-.264.355-.478.355zm-1.077 2.012c-.049 0-.099-.007-.148-.023C1.321 21.593.366 17.585.327 17.415c-.062-.269.106-.537.375-.599.271-.062.537.106.6.375.008.036.872 3.618 3.873 4.548.264.082.411.361.33.625-.067.215-.265.353-.479.353z" fill="#5DADEC"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb.svg b/public/emoji/1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb.svg new file mode 100644 index 000000000..5fedd969b --- /dev/null +++ b/public/emoji/1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F7DECE" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#EEC2AD" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F7DECE" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F7DECE" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#EEC2AD" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb.svg b/public/emoji/1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb.svg new file mode 100644 index 000000000..53e58734c --- /dev/null +++ b/public/emoji/1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F3D2A2" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#E2C196" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#E2C196" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc.svg b/public/emoji/1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc.svg new file mode 100644 index 000000000..d5be6fe59 --- /dev/null +++ b/public/emoji/1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#F3D2A2" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#E2C196" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#F3D2A2" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#F3D2A2" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#E2C196" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb.svg b/public/emoji/1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb.svg new file mode 100644 index 000000000..adf04f14e --- /dev/null +++ b/public/emoji/1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc.svg b/public/emoji/1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc.svg new file mode 100644 index 000000000..724aede5b --- /dev/null +++ b/public/emoji/1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd.svg b/public/emoji/1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd.svg new file mode 100644 index 000000000..15c9bdfed --- /dev/null +++ b/public/emoji/1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#D4AB88" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#CC9B7A" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#D4AB88" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#D4AB88" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#CC9B7A" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb.svg b/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb.svg new file mode 100644 index 000000000..c14a8e794 --- /dev/null +++ b/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc.svg b/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc.svg new file mode 100644 index 000000000..dff165ed5 --- /dev/null +++ b/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd.svg b/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd.svg new file mode 100644 index 000000000..19a8dab4c --- /dev/null +++ b/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe.svg b/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe.svg new file mode 100644 index 000000000..54c46de87 --- /dev/null +++ b/public/emoji/1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#AF7E57" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#9B6A49" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#AF7E57" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#AF7E57" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#9B6A49" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#915A34" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#AF7E57" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#915A34" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb.svg b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb.svg new file mode 100644 index 000000000..cbcfecadc --- /dev/null +++ b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F7DECE" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F7DECE" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#EEC2AD" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F7DECE" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#292F33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc.svg b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc.svg new file mode 100644 index 000000000..fce4c9184 --- /dev/null +++ b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#F3D2A2" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#F3D2A2" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#E2C196" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#F3D2A2" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFE51E" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd.svg b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd.svg new file mode 100644 index 000000000..84e2b2bd8 --- /dev/null +++ b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#D4AB88" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#D4AB88" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#CC9B7A" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#D4AB88" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#963B22" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe.svg b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe.svg new file mode 100644 index 000000000..d0ba4cd18 --- /dev/null +++ b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#AF7E57" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#AF7E57" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#9B6A49" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#AF7E57" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#60352A" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#915A34" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#915A34" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff.svg b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff.svg new file mode 100644 index 000000000..e0cb1e2bb --- /dev/null +++ b/public/emoji/1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#7C533E" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#664131" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#7C533E" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#7C533E" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#664131" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle cx="7.5" cy="8.5" r=".5"/><circle cx="12.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#0B0200" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#7C533E" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#7C533E" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#664131" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#7C533E" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#0B0200" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#3D2E24" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="23.5" cy="8.5" r=".5"/><circle cx="28.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d1-200d-1f91d-200d-1f9d1.svg b/public/emoji/1f9d1-200d-1f91d-200d-1f9d1.svg new file mode 100644 index 000000000..f7e46f210 --- /dev/null +++ b/public/emoji/1f9d1-200d-1f91d-200d-1f9d1.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M11 0C9.736 0 8.565.393 7.598 1.061 7.401 1.031 7.205 1 7 1 4.791 1 3 2.791 3 5v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C17 2.687 14.314 0 11 0z"/><path fill="#FFDC5D" d="M11.213 34.309c-.052.682 1.849.953 2.129.791.299-.173-.698-.623-.702-.977-.019-1.797.53-1.648.311-3.492.443-1.625.672-2.592.672-3.131 0-1.25-3.312-.766-3.312 0 0 .344.365 1.681.417 3.131-.313 1.659.641 1.615.485 3.678zm-2.448 0c.052.682-1.849.953-2.129.791-.299-.173.698-.623.702-.977.019-1.797-.53-1.648-.311-3.492-.443-1.625-.672-2.592-.672-3.131 0-1.25 3.313-.766 3.313 0 0 .344-.365 1.681-.417 3.131.311 1.659-.642 1.615-.486 3.678z"/><path fill="#F9CA55" d="M10.311 27.5c0 .206.13.771.246 1.5h2.817c.164-.689.249-1.175.249-1.5 0-1.25-3.312-.766-3.312 0zm-3.957 0c0 .325.085.811.249 1.5H9.42c.116-.729.247-1.294.247-1.5 0-.766-3.313-1.25-3.313 0z"/><path fill="#FFDC5D" d="M3.258 26.96c-.258.124-.503-.097-.619-.227-.328-.367-.583-1.246-.282-2.209.303-.973.6-2.384 1.199-4.002.081-.22.499-3.764.805-4.445.197-.437 1.28-.896 1.81-.807.529.089.246.651.105 1.13 0 0-.916 3.953-1.016 4.296-.316 1.079-1.624 2.918-1.565 4.237.031.692.06 1.255-.339 1.246-.049.362-.003.735-.098.781zm14.984-.2c.271.091.487-.159.586-.302.279-.405.422-1.309.004-2.227-.423-.927-.894-2.29-1.69-3.821-.108-.208-.966-3.672-1.355-4.309-.25-.409-1.382-.729-1.897-.574-.513.154-.162.676.037 1.134 0 0 1.403 3.807 1.546 4.135.449 1.031 1.977 2.691 2.082 4.008.056.69.097 1.253.492 1.194.094.353.095.729.195.762z"/><path fill="#292F33" d="M13.945 36c.305 0 .372-.418.089-.629-.379-.285-.88-1.371-1.561-1.371h-1.245c-.229 0-.49 1.209-.41 1.48.102.345.433.52.812.52h2.315zm-7.913 0c-.305 0-.372-.418-.089-.629.379-.285.88-1.371 1.561-1.371h1.245c.229 0 .49 1.209.41 1.48-.102.345-.433.52-.811.52H6.032z"/><path fill="#E75A70" d="M14.354 17.771L16 16c-1.438-1.792-4-2-4-2H8s-2.562.208-4 2l1.646 1.771S6.25 20.688 6.25 21 5 25.75 5 28h10c0-2.25-1.25-6.688-1.25-7s.604-3.229.604-3.229z"/><path fill="#DA2F47" d="M13.75 21c0-.106.07-.512.161-1H6.089c.092.488.161.894.161 1 0 .083-.122.509-.223 1h7.942c-.108-.558-.219-.917-.219-1z"/><path fill="#FFDC5D" d="M8 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4H8z"/><path fill="#F9CA55" d="M12 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M15 3H5v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M15 2H5L4 7c4 0 4-4 4-4s0 4 8 4l-1-5z"/><path fill="#DF1F32" d="M12 12H8s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="7.5" cy="8.5" r=".5"/><circle fill="#662113" cx="12.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M9 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFAC33" d="M26.5 0c-1.187 0-2.282.379-3.181 1.018C21.473 1.114 20 2.629 20 4.5c0 1.542.007 3.484 2.038 4.208C23.036 10.094 24.66 11 26.5 11c3.037 0 5.5-2.462 5.5-5.499C32 2.463 29.537 0 26.5 0z"/><path fill="#FFDC5D" d="M18.117 26.76c-.271.091-.487-.159-.586-.302-.279-.405-.422-1.309-.004-2.227.423-.927.702-2.072 1.69-3.821.115-.204.494-2.746 1.242-4.354.202-.435 1.495-.684 2.009-.529.513.154-.005.98-.037 1.134-.344 1.651-1.305 4.077-1.45 4.404-.8 1.806-1.965 2.389-2.071 3.706-.055.69-.205 1.286-.6 1.228-.092.352-.094.728-.193.761zm14.595.204c.257.126.504-.094.62-.222.33-.365.591-1.242.296-2.208-.297-.975-.424-2.146-1.174-4.01-.087-.217-.129-2.787-.66-4.479-.143-.457-1.392-.875-1.922-.789-.529.086-.124.972-.112 1.129.124 1.682.758 4.213.859 4.556.556 1.895 1.634 2.627 1.566 3.946-.036.692.034 1.302.433 1.296.048.363 0 .735.094.781z"/><path fill="#AAB8C2" d="M29.555 29.5c.5-2.734.422-6.5.422-6.5h-7.963s-.078 3.766.422 6.5c.063.344.188 3.344-.109 5.5-.066.479 2.886.937 2.844-.125-.078-1.969.264-3.513.328-4.5.035-.547.25-1.875.344-3.208.011-.018.295-.018.306 0 .094 1.333.308 2.661.344 3.208.064.987.406 2.531.328 4.5-.042 1.062 2.91.604 2.844.125-.297-2.156-.172-5.156-.11-5.5z"/><path fill="#292F33" d="M30.54 36c.499-.406-.041-1.161-1.42-1.402-1.163-.203-2.2-.032-2.363.35-.212.493-.05 1.052-.05 1.052h3.833zm-9.117 0c-.499-.406.041-1.161 1.42-1.402 1.163-.203 2.2-.032 2.363.35.212.494.05 1.053.05 1.053L21.423 36z"/><path fill="#4289C1" d="M30.797 14.766C29.578 14 28 14 28 14h-4s-1.578 0-2.797.766c-1.201.754-1.656 3-1.656 3l2.203.688.109 5.546h8.281l.109-5.547 2.203-.688c.001.001-.454-2.245-1.655-2.999z"/><path fill="#FFDC5D" d="M24 10.042v4c0 .682.896 1.305 2 1.305s2-.668 2-1.305v-4h-4z"/><path fill="#F9CA55" d="M24 14.042c0 .682.896 1.305 2 1.305s2-.668 2-1.305V11l-4 .019v3.023z"/><path fill="#FFDC5D" d="M31 3H21v6c0 2.762 2.238 5 5 5s5-2.237 5-5V3z"/><path fill="#FFAC33" d="M21 2.5L20.5 5l.5 2c2.333 0 2.85-2.412 2.965-3.488C24.004 4.588 24.779 7 31 7l.5-2-.5-2.5H21z"/><path fill="#C1694F" d="M28 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="23.5" cy="8.5" r=".5"/><circle fill="#662113" cx="28.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M25 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f9d6-1f3fb-200d-2640-fe0f.svg index fee0d3eda..98c29804f 100644 --- a/public/emoji/1f9d6-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f9d6-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#292F33" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#F7DECE" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#EEC2AD" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#F7DECE" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#C1694F" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#F7DECE" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#292F33" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#F7DECE" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#EEC2AD" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#F7DECE" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#292F33" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f9d6-1f3fb-200d-2642-fe0f.svg index 759ae189a..d3aff3dc1 100644 --- a/public/emoji/1f9d6-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f9d6-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#F7DECE" d="M26 22c0-2-1.531-3-3-3h-1.975v-2h-5.929v2H13c-1.469 0-3 1-3 3v12l.024-.004c-.005.041-.024.076-.024.118 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.164-.04-.317-.103-.457h11.75c-.064.14-.103.293-.103.457 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.042-.019-.077-.024-.118L26 34V22z"/><path fill="#EEC2AD" d="M12.5 32c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5zm11 0c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5z"/><path fill="#77B255" d="M12 29h12v7H12z"/><path fill="#5C913B" d="M18 29h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#A6D388" d="M23 36h-4v-3s0-3-2-4h6v7z"/><path fill="#5C913B" d="M24 36h-4v-3s0-3-2-4h6v7z"/><path fill="#77B255" d="M18.121 30h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#3E721D" d="M18 29c.481.24.844.598 1.121 1H24v-1h-6z"/><path fill="#EEC2AD" d="M21.025 16.972L15.096 17v1.553s2.965 1.482 5.929 0v-1.581z"/><path fill="#F7DECE" d="M24.356 6h-12.59v6.147c0 3.478 2.818 6.295 6.295 6.295s6.295-2.817 6.295-6.295V6z"/><path fill="#C1694F" d="M20.579 15.923h-5.036s0 1.259 2.518 1.259 2.518-1.259 2.518-1.259z"/><circle fill="#662113" cx="14.913" cy="11.517" r=".629"/><circle fill="#662113" cx="21.208" cy="11.517" r=".629"/><path fill="#C1694F" d="M16.802 13.405h2.518s0 1.259-1.259 1.259-1.259-1.259-1.259-1.259z"/><path fill="#292F33" d="M18 2c4.328 0 7.033 3.221 7.033 5.905s-.541 3.758-1.082 2.684l-1.082-2.147s-3.246 0-4.328-1.074c0 0 1.623 3.221-1.623 0 0 0 .541 2.148-2.705-.536 0 0-1.623 1.074-2.164 3.757-.15.745-1.082 0-1.082-2.684S13.131 2 18 2"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path d="M23.35 20c1.014.324 2.845 1.15 2.65 2.941 1.924.357 2.306 1.966 2.436 2.907.248 1.79-7.436-.198-7.436-.198l-1-3.482L23.35 20zm-10.38.5c-.769.185-2.749.5-3.64 2.793-1.99 0-2.33 2.02-2.33 3.538 0 2.253 7.336 1.955 8.495.678 1.158-1.277.784-5.36.784-5.36L12.97 20.5z" fill="#77B255"/><path fill="#F7DECE" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#F7DECE" d="M13.667 27.122L18 31.001l4.316-2.627L22 22h-8z"/><path fill="#EEC2AD" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F7DECE" d="M11.444 13.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#F7DECE" d="M9.477 14.96c0-5.589 3.816-10.121 8.523-10.121s8.522 4.532 8.522 10.121S22.707 25.081 18 25.081c-4.707-.001-8.523-4.532-8.523-10.121"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#292F33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/><path fill="#662113" d="M14 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M18.75 17.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#77B255" d="M13.758 25.712c-.269 3.395.314 5.641.636 6.672.158.505-.201 1.016-.729 1.045-.714.039-1.591.08-2.116.08-1 0-3.477 2.243-3.942-.193C7.143 30.88 7 28.711 7 27.909s-.158-3.166 1.167-3.17c1.817-.005 2.155-.153 2.917-.705.857-.622 2.738.879 2.674 1.678zm8.426.007c.247 3.305-.257 5.437-.553 6.44-.145.492-.261.897.099 1.237.698.66 2.007-.07 2.49-.07.92 0 2.935 2.261 3.612-.991.633-3.039.604-5.475.604-6.255s-.468-1.038-1.077-1.363c-1.486-.792-1.982-.149-2.683-.687-.788-.605-2.55.911-2.492 1.689z"/><path fill="#A6D388" d="M8.002 25.236c.156-.67.885-1.175 1.063-.623.177.55.233 3.471.295 4.387s-.608-.184-.861-.898c-.254-.714-.644-2.234-.497-2.866zm19.115-.849c-.175-.579-.846-.279-1.003.176s.021 1.692-.01 2.465c-.031.773.325.014.551-.574.227-.588.627-1.521.462-2.067zm-16.802-.852c.024-.521.923-1.192 1.004-.656.081.536.571 6.09.845 7.289.274 1.199-.196.978-.522.124s-1.401-5.186-1.327-6.757zm14.802-.853c-.245-.141-.842.207-.89.639-.047.432-.005 4.021-.202 4.982-.196.961.115.81.383.133s1.831-5.106.709-5.754z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fb.svg b/public/emoji/1f9d6-1f3fb.svg index fee0d3eda..98c29804f 100644 --- a/public/emoji/1f9d6-1f3fb.svg +++ b/public/emoji/1f9d6-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#292F33" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#F7DECE" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#EEC2AD" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#F7DECE" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#C1694F" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#F7DECE" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#292F33" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#F7DECE" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#EEC2AD" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#F7DECE" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#292F33" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f9d6-1f3fc-200d-2640-fe0f.svg index 880e61dc3..976146def 100644 --- a/public/emoji/1f9d6-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f9d6-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#FFE51E" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#F3D2A2" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#E2C196" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#F3D2A2" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#C1694F" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#F3D2A2" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#FFE51E" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#F3D2A2" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#E2C196" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#F3D2A2" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#FFE51E" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f9d6-1f3fc-200d-2642-fe0f.svg index d64529775..35f7e555f 100644 --- a/public/emoji/1f9d6-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f9d6-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#F3D2A2" d="M26 22c0-2-1.531-3-3-3h-1.975v-2h-5.929v2H13c-1.469 0-3 1-3 3v12l.024-.004c-.005.041-.024.076-.024.118 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.164-.04-.317-.103-.457h11.75c-.064.14-.103.293-.103.457 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.042-.019-.077-.024-.118L26 34V22z"/><path fill="#E2C196" d="M12.5 32c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5zm11 0c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5z"/><path fill="#77B255" d="M12 29h12v7H12z"/><path fill="#5C913B" d="M18 29h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#A6D388" d="M23 36h-4v-3s0-3-2-4h6v7z"/><path fill="#5C913B" d="M24 36h-4v-3s0-3-2-4h6v7z"/><path fill="#77B255" d="M18.121 30h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#3E721D" d="M18 29c.481.24.844.598 1.121 1H24v-1h-6z"/><path fill="#E2C196" d="M21.025 16.972L15.096 17v1.553s2.965 1.482 5.929 0v-1.581z"/><path fill="#F3D2A2" d="M24.356 6h-12.59v6.147c0 3.478 2.818 6.295 6.295 6.295s6.295-2.817 6.295-6.295V6z"/><path fill="#C1694F" d="M20.579 15.923h-5.036s0 1.259 2.518 1.259 2.518-1.259 2.518-1.259z"/><circle fill="#662113" cx="14.913" cy="11.517" r=".629"/><circle fill="#662113" cx="21.208" cy="11.517" r=".629"/><path fill="#C1694F" d="M16.802 13.405h2.518s0 1.259-1.259 1.259-1.259-1.259-1.259-1.259z"/><path fill="#FFE51E" d="M18 2c4.328 0 7.033 3.221 7.033 5.905s-.541 3.758-1.082 2.684l-1.082-2.147s-3.246 0-4.328-1.074c0 0 1.623 3.221-1.623 0 0 0 .541 2.148-2.705-.536 0 0-1.623 1.074-2.164 3.757-.15.745-1.082 0-1.082-2.684S13.131 2 18 2"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path d="M23.35 20c1.014.324 2.845 1.15 2.65 2.941 1.924.357 2.306 1.966 2.436 2.907.248 1.79-7.436-.198-7.436-.198l-1-3.482L23.35 20zm-10.38.5c-.769.185-2.749.5-3.64 2.793-1.99 0-2.33 2.02-2.33 3.538 0 2.253 7.336 1.955 8.495.678 1.158-1.277.784-5.36.784-5.36L12.97 20.5z" fill="#77B255"/><path fill="#F3D2A2" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#F3D2A2" d="M13.667 27.122L18 31.001l4.316-2.627L22 22h-8z"/><path fill="#E2C196" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#F3D2A2" d="M11.444 13.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#F3D2A2" d="M9.477 14.96c0-5.589 3.816-10.121 8.523-10.121s8.522 4.532 8.522 10.121S22.707 25.081 18 25.081c-4.707-.001-8.523-4.532-8.523-10.121"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#FFE51E" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/><path fill="#662113" d="M14 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M18.75 17.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#77B255" d="M13.758 25.712c-.269 3.395.314 5.641.636 6.672.158.505-.201 1.016-.729 1.045-.714.039-1.591.08-2.116.08-1 0-3.477 2.243-3.942-.193C7.143 30.88 7 28.711 7 27.909s-.158-3.166 1.167-3.17c1.817-.005 2.155-.153 2.917-.705.857-.622 2.738.879 2.674 1.678zm8.426.007c.247 3.305-.257 5.437-.553 6.44-.145.492-.261.897.099 1.237.698.66 2.007-.07 2.49-.07.92 0 2.935 2.261 3.612-.991.633-3.039.604-5.475.604-6.255s-.468-1.038-1.077-1.363c-1.486-.792-1.982-.149-2.683-.687-.788-.605-2.55.911-2.492 1.689z"/><path fill="#A6D388" d="M8.002 25.236c.156-.67.885-1.175 1.063-.623.177.55.233 3.471.295 4.387s-.608-.184-.861-.898c-.254-.714-.644-2.234-.497-2.866zm19.115-.849c-.175-.579-.846-.279-1.003.176s.021 1.692-.01 2.465c-.031.773.325.014.551-.574.227-.588.627-1.521.462-2.067zm-16.802-.852c.024-.521.923-1.192 1.004-.656.081.536.571 6.09.845 7.289.274 1.199-.196.978-.522.124s-1.401-5.186-1.327-6.757zm14.802-.853c-.245-.141-.842.207-.89.639-.047.432-.005 4.021-.202 4.982-.196.961.115.81.383.133s1.831-5.106.709-5.754z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fc.svg b/public/emoji/1f9d6-1f3fc.svg index 880e61dc3..976146def 100644 --- a/public/emoji/1f9d6-1f3fc.svg +++ b/public/emoji/1f9d6-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#FFE51E" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#F3D2A2" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#E2C196" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#F3D2A2" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#C1694F" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#F3D2A2" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#FFE51E" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#F3D2A2" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#E2C196" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#F3D2A2" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#FFE51E" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f9d6-1f3fd-200d-2640-fe0f.svg index 25da28dbd..b29750071 100644 --- a/public/emoji/1f9d6-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f9d6-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#963B22" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#D5AB88" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#CC9B7A" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#D5AB88" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#C1694F" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#D4AB88" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#963B22" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#D4AB88" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#CC9B7A" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#D4AB88" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#963B22" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f9d6-1f3fd-200d-2642-fe0f.svg index 1825b641a..42772b46e 100644 --- a/public/emoji/1f9d6-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f9d6-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#D5AB88" d="M26 22c0-2-1.531-3-3-3h-1.975v-2h-5.929v2H13c-1.469 0-3 1-3 3v12l.024-.004c-.005.041-.024.076-.024.118 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.164-.04-.317-.103-.457h11.75c-.064.14-.103.293-.103.457 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.042-.019-.077-.024-.118L26 34V22z"/><path fill="#CC9B7A" d="M12.5 32c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5zm11 0c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5z"/><path fill="#77B255" d="M12 29h12v7H12z"/><path fill="#5C913B" d="M18 29h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#A6D388" d="M23 36h-4v-3s0-3-2-4h6v7z"/><path fill="#5C913B" d="M24 36h-4v-3s0-3-2-4h6v7z"/><path fill="#77B255" d="M18.121 30h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#3E721D" d="M18 29c.481.24.844.598 1.121 1H24v-1h-6z"/><path fill="#CC9B7A" d="M21.025 16.972L15.096 17v1.553s2.965 1.482 5.929 0v-1.581z"/><path fill="#D5AB88" d="M24.356 6h-12.59v6.147c0 3.478 2.818 6.295 6.295 6.295s6.295-2.817 6.295-6.295V6z"/><path fill="#C1694F" d="M20.579 15.923h-5.036s0 1.259 2.518 1.259 2.518-1.259 2.518-1.259z"/><circle fill="#662113" cx="14.913" cy="11.517" r=".629"/><circle fill="#662113" cx="21.208" cy="11.517" r=".629"/><path fill="#C1694F" d="M16.802 13.405h2.518s0 1.259-1.259 1.259-1.259-1.259-1.259-1.259z"/><path fill="#963B22" d="M18 2c4.328 0 7.033 3.221 7.033 5.905s-.541 3.758-1.082 2.684l-1.082-2.147s-3.246 0-4.328-1.074c0 0 1.623 3.221-1.623 0 0 0 .541 2.148-2.705-.536 0 0-1.623 1.074-2.164 3.757-.15.745-1.082 0-1.082-2.684S13.131 2 18 2"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path d="M23.35 20c1.014.324 2.845 1.15 2.65 2.941 1.924.357 2.306 1.966 2.436 2.907.248 1.79-7.436-.198-7.436-.198l-1-3.482L23.35 20zm-10.38.5c-.769.185-2.749.5-3.64 2.793-1.99 0-2.33 2.02-2.33 3.538 0 2.253 7.336 1.955 8.495.678 1.158-1.277.784-5.36.784-5.36L12.97 20.5z" fill="#77B255"/><path fill="#D4AB88" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#D4AB88" d="M13.667 27.122L18 31.001l4.316-2.627L22 22h-8z"/><path fill="#CC9B7A" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#D4AB88" d="M11.444 13.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#D4AB88" d="M9.477 14.96c0-5.589 3.816-10.121 8.523-10.121s8.522 4.532 8.522 10.121S22.707 25.081 18 25.081c-4.707-.001-8.523-4.532-8.523-10.121"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#963B22" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/><path fill="#662113" d="M14 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M18.75 17.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#77B255" d="M13.758 25.712c-.269 3.395.314 5.641.636 6.672.158.505-.201 1.016-.729 1.045-.714.039-1.591.08-2.116.08-1 0-3.477 2.243-3.942-.193C7.143 30.88 7 28.711 7 27.909s-.158-3.166 1.167-3.17c1.817-.005 2.155-.153 2.917-.705.857-.622 2.738.879 2.674 1.678zm8.426.007c.247 3.305-.257 5.437-.553 6.44-.145.492-.261.897.099 1.237.698.66 2.007-.07 2.49-.07.92 0 2.935 2.261 3.612-.991.633-3.039.604-5.475.604-6.255s-.468-1.038-1.077-1.363c-1.486-.792-1.982-.149-2.683-.687-.788-.605-2.55.911-2.492 1.689z"/><path fill="#A6D388" d="M8.002 25.236c.156-.67.885-1.175 1.063-.623.177.55.233 3.471.295 4.387s-.608-.184-.861-.898c-.254-.714-.644-2.234-.497-2.866zm19.115-.849c-.175-.579-.846-.279-1.003.176s.021 1.692-.01 2.465c-.031.773.325.014.551-.574.227-.588.627-1.521.462-2.067zm-16.802-.852c.024-.521.923-1.192 1.004-.656.081.536.571 6.09.845 7.289.274 1.199-.196.978-.522.124s-1.401-5.186-1.327-6.757zm14.802-.853c-.245-.141-.842.207-.89.639-.047.432-.005 4.021-.202 4.982-.196.961.115.81.383.133s1.831-5.106.709-5.754z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fd.svg b/public/emoji/1f9d6-1f3fd.svg index 25da28dbd..b29750071 100644 --- a/public/emoji/1f9d6-1f3fd.svg +++ b/public/emoji/1f9d6-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#963B22" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#D5AB88" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#CC9B7A" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#D5AB88" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#C1694F" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#D4AB88" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#963B22" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#D4AB88" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#CC9B7A" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#D4AB88" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#963B22" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f9d6-1f3fe-200d-2640-fe0f.svg index 6fb5efd1a..935ff3290 100644 --- a/public/emoji/1f9d6-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f9d6-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#60352A" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#AF7E57" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#9B6A49" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#AF7E57" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#915A34" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#AF7E57" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#60352A" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#AF7E57" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#9B6A49" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#AF7E57" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#60352A" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#915A34" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f9d6-1f3fe-200d-2642-fe0f.svg index 767cf703d..4846f7336 100644 --- a/public/emoji/1f9d6-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f9d6-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#AF7E57" d="M26 22c0-2-1.531-3-3-3h-1.975v-2h-5.929v2H13c-1.469 0-3 1-3 3v12l.024-.004c-.005.041-.024.076-.024.118 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.164-.04-.317-.103-.457h11.75c-.064.14-.103.293-.103.457 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.042-.019-.077-.024-.118L26 34V22z"/><path fill="#9B6A49" d="M12.5 32c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5zm11 0c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5z"/><path fill="#77B255" d="M12 29h12v7H12z"/><path fill="#5C913B" d="M18 29h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#A6D388" d="M23 36h-4v-3s0-3-2-4h6v7z"/><path fill="#5C913B" d="M24 36h-4v-3s0-3-2-4h6v7z"/><path fill="#77B255" d="M18.121 30h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#3E721D" d="M18 29c.481.24.844.598 1.121 1H24v-1h-6z"/><path fill="#9B6A49" d="M21.025 16.972L15.096 17v1.553s2.965 1.482 5.929 0v-1.581z"/><path fill="#AF7E57" d="M24.356 6h-12.59v6.147c0 3.478 2.818 6.295 6.295 6.295s6.295-2.817 6.295-6.295V6z"/><path fill="#915A34" d="M20.579 15.923h-5.036s0 1.259 2.518 1.259 2.518-1.259 2.518-1.259z"/><circle fill="#662113" cx="14.913" cy="11.517" r=".629"/><circle fill="#662113" cx="21.208" cy="11.517" r=".629"/><path fill="#915A34" d="M16.802 13.405h2.518s0 1.259-1.259 1.259-1.259-1.259-1.259-1.259z"/><path fill="#60352A" d="M18 2c4.328 0 7.033 3.221 7.033 5.905s-.541 3.758-1.082 2.684l-1.082-2.147s-3.246 0-4.328-1.074c0 0 1.623 3.221-1.623 0 0 0 .541 2.148-2.705-.536 0 0-1.623 1.074-2.164 3.757-.15.745-1.082 0-1.082-2.684S13.131 2 18 2"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path d="M23.35 20c1.014.324 2.845 1.15 2.65 2.941 1.924.357 2.306 1.966 2.436 2.907.248 1.79-7.436-.198-7.436-.198l-1-3.482L23.35 20zm-10.38.5c-.769.185-2.749.5-3.64 2.793-1.99 0-2.33 2.02-2.33 3.538 0 2.253 7.336 1.955 8.495.678 1.158-1.277.784-5.36.784-5.36L12.97 20.5z" fill="#77B255"/><path fill="#AF7E57" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#AF7E57" d="M13.667 27.122L18 31.001l4.316-2.627L22 22h-8z"/><path fill="#9B6A49" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#AF7E57" d="M11.444 13.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#AF7E57" d="M9.477 14.96c0-5.589 3.816-10.121 8.523-10.121s8.522 4.532 8.522 10.121S22.707 25.081 18 25.081c-4.707-.001-8.523-4.532-8.523-10.121"/><path fill="#915A34" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#60352A" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/><path fill="#662113" d="M14 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#915A34" d="M18.75 17.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#77B255" d="M13.758 25.712c-.269 3.395.314 5.641.636 6.672.158.505-.201 1.016-.729 1.045-.714.039-1.591.08-2.116.08-1 0-3.477 2.243-3.942-.193C7.143 30.88 7 28.711 7 27.909s-.158-3.166 1.167-3.17c1.817-.005 2.155-.153 2.917-.705.857-.622 2.738.879 2.674 1.678zm8.426.007c.247 3.305-.257 5.437-.553 6.44-.145.492-.261.897.099 1.237.698.66 2.007-.07 2.49-.07.92 0 2.935 2.261 3.612-.991.633-3.039.604-5.475.604-6.255s-.468-1.038-1.077-1.363c-1.486-.792-1.982-.149-2.683-.687-.788-.605-2.55.911-2.492 1.689z"/><path fill="#A6D388" d="M8.002 25.236c.156-.67.885-1.175 1.063-.623.177.55.233 3.471.295 4.387s-.608-.184-.861-.898c-.254-.714-.644-2.234-.497-2.866zm19.115-.849c-.175-.579-.846-.279-1.003.176s.021 1.692-.01 2.465c-.031.773.325.014.551-.574.227-.588.627-1.521.462-2.067zm-16.802-.852c.024-.521.923-1.192 1.004-.656.081.536.571 6.09.845 7.289.274 1.199-.196.978-.522.124s-1.401-5.186-1.327-6.757zm14.802-.853c-.245-.141-.842.207-.89.639-.047.432-.005 4.021-.202 4.982-.196.961.115.81.383.133s1.831-5.106.709-5.754z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3fe.svg b/public/emoji/1f9d6-1f3fe.svg index 6fb5efd1a..935ff3290 100644 --- a/public/emoji/1f9d6-1f3fe.svg +++ b/public/emoji/1f9d6-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#60352A" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#AF7E57" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#9B6A49" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#AF7E57" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#915A34" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#AF7E57" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#60352A" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#AF7E57" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#9B6A49" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#AF7E57" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#60352A" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#915A34" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f9d6-1f3ff-200d-2640-fe0f.svg index 963f6cabd..1c0862f7a 100644 --- a/public/emoji/1f9d6-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f9d6-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#0B0200" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#7C533E" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#664131" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#7C533E" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle cx="15.145" cy="12.726" r=".726"/><circle cx="20.855" cy="12.726" r=".726"/><path fill="#3D2E24" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#7C533E" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#0B0200" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#7C533E" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#664131" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#7C533E" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#0B0200" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#3D2E24" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f9d6-1f3ff-200d-2642-fe0f.svg index d0a9f4d71..7512a609d 100644 --- a/public/emoji/1f9d6-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f9d6-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#7C533E" d="M26 22c0-2-1.531-3-3-3h-1.975v-2h-5.929v2H13c-1.469 0-3 1-3 3v12l.024-.004c-.005.041-.024.076-.024.118 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.164-.04-.317-.103-.457h11.75c-.064.14-.103.293-.103.457 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.042-.019-.077-.024-.118L26 34V22z"/><path fill="#664131" d="M12.5 32c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5zm11 0c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5z"/><path fill="#77B255" d="M12 29h12v7H12z"/><path fill="#5C913B" d="M18 29h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#A6D388" d="M23 36h-4v-3s0-3-2-4h6v7z"/><path fill="#5C913B" d="M24 36h-4v-3s0-3-2-4h6v7z"/><path fill="#77B255" d="M18.121 30h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#3E721D" d="M18 29c.481.24.844.598 1.121 1H24v-1h-6z"/><path fill="#664131" d="M21.025 16.972L15.096 17v1.553s2.965 1.482 5.929 0v-1.581z"/><path fill="#7C533E" d="M24.356 6h-12.59v6.147c0 3.478 2.818 6.295 6.295 6.295s6.295-2.817 6.295-6.295V6z"/><path fill="#3D2E24" d="M20.579 15.923h-5.036s0 1.259 2.518 1.259 2.518-1.259 2.518-1.259z"/><circle cx="14.913" cy="11.517" r=".629"/><circle cx="21.208" cy="11.517" r=".629"/><path fill="#3D2E24" d="M16.802 13.405h2.518s0 1.259-1.259 1.259-1.259-1.259-1.259-1.259z"/><path fill="#0B0200" d="M18 2c4.328 0 7.033 3.221 7.033 5.905s-.541 3.758-1.082 2.684l-1.082-2.147s-3.246 0-4.328-1.074c0 0 1.623 3.221-1.623 0 0 0 .541 2.148-2.705-.536 0 0-1.623 1.074-2.164 3.757-.15.745-1.082 0-1.082-2.684S13.131 2 18 2"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path d="M23.35 20c1.014.324 2.845 1.15 2.65 2.941 1.924.357 2.306 1.966 2.436 2.907.248 1.79-7.436-.198-7.436-.198l-1-3.482L23.35 20zm-10.38.5c-.769.185-2.749.5-3.64 2.793-1.99 0-2.33 2.02-2.33 3.538 0 2.253 7.336 1.955 8.495.678 1.158-1.277.784-5.36.784-5.36L12.97 20.5z" fill="#77B255"/><path fill="#7C533E" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#7C533E" d="M13.667 27.122L18 31.001l4.316-2.627L22 22h-8z"/><path fill="#664131" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#7C533E" d="M11.444 13.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#7C533E" d="M9.477 14.96c0-5.589 3.816-10.121 8.523-10.121s8.522 4.532 8.522 10.121S22.707 25.081 18 25.081c-4.707-.001-8.523-4.532-8.523-10.121"/><path fill="#3D2E24" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#0B0200" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/><path d="M14 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#3D2E24" d="M18.75 17.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#77B255" d="M13.758 25.712c-.269 3.395.314 5.641.636 6.672.158.505-.201 1.016-.729 1.045-.714.039-1.591.08-2.116.08-1 0-3.477 2.243-3.942-.193C7.143 30.88 7 28.711 7 27.909s-.158-3.166 1.167-3.17c1.817-.005 2.155-.153 2.917-.705.857-.622 2.738.879 2.674 1.678zm8.426.007c.247 3.305-.257 5.437-.553 6.44-.145.492-.261.897.099 1.237.698.66 2.007-.07 2.49-.07.92 0 2.935 2.261 3.612-.991.633-3.039.604-5.475.604-6.255s-.468-1.038-1.077-1.363c-1.486-.792-1.982-.149-2.683-.687-.788-.605-2.55.911-2.492 1.689z"/><path fill="#A6D388" d="M8.002 25.236c.156-.67.885-1.175 1.063-.623.177.55.233 3.471.295 4.387s-.608-.184-.861-.898c-.254-.714-.644-2.234-.497-2.866zm19.115-.849c-.175-.579-.846-.279-1.003.176s.021 1.692-.01 2.465c-.031.773.325.014.551-.574.227-.588.627-1.521.462-2.067zm-16.802-.852c.024-.521.923-1.192 1.004-.656.081.536.571 6.09.845 7.289.274 1.199-.196.978-.522.124s-1.401-5.186-1.327-6.757zm14.802-.853c-.245-.141-.842.207-.89.639-.047.432-.005 4.021-.202 4.982-.196.961.115.81.383.133s1.831-5.106.709-5.754z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-1f3ff.svg b/public/emoji/1f9d6-1f3ff.svg index 963f6cabd..1c0862f7a 100644 --- a/public/emoji/1f9d6-1f3ff.svg +++ b/public/emoji/1f9d6-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#0B0200" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#7C533E" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#664131" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#7C533E" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle cx="15.145" cy="12.726" r=".726"/><circle cx="20.855" cy="12.726" r=".726"/><path fill="#3D2E24" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#7C533E" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#0B0200" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#7C533E" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#664131" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#7C533E" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#0B0200" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#3D2E24" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-200d-2640-fe0f.svg b/public/emoji/1f9d6-200d-2640-fe0f.svg index c587685a6..f1d0343e3 100644 --- a/public/emoji/1f9d6-200d-2640-fe0f.svg +++ b/public/emoji/1f9d6-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#FFAC33" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#FFDC5D" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#F9CA55" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#FFDC5D" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#C1694F" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#FFDC5D" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#FFAC33" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#FFDC5D" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#F9CA55" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#FFDC5D" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#FFAC33" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6-200d-2642-fe0f.svg b/public/emoji/1f9d6-200d-2642-fe0f.svg index d161c4917..3ecdeee76 100644 --- a/public/emoji/1f9d6-200d-2642-fe0f.svg +++ b/public/emoji/1f9d6-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#FFDC5D" d="M26 22c0-2-1.531-3-3-3h-1.975v-2h-5.929v2H13c-1.469 0-3 1-3 3v12l.024-.004c-.005.041-.024.076-.024.118 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.164-.04-.317-.103-.457h11.75c-.064.14-.103.293-.103.457 0 .615.499 1.114 1.114 1.114.615 0 1.114-.499 1.114-1.114 0-.042-.019-.077-.024-.118L26 34V22z"/><path fill="#F9CA55" d="M12.5 32c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5zm11 0c-.275 0-.5-.225-.5-.5v-8c0-.275.225-.5.5-.5s.5.225.5.5v8c0 .275-.225.5-.5.5z"/><path fill="#77B255" d="M12 29h12v7H12z"/><path fill="#5C913B" d="M18 29h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#A6D388" d="M23 36h-4v-3s0-3-2-4h6v7z"/><path fill="#5C913B" d="M24 36h-4v-3s0-3-2-4h6v7z"/><path fill="#77B255" d="M18.121 30h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#3E721D" d="M18 29c.481.24.844.598 1.121 1H24v-1h-6z"/><path fill="#F9CA55" d="M21.025 16.972L15.096 17v1.553s2.965 1.482 5.929 0v-1.581z"/><path fill="#FFDC5D" d="M24.356 6h-12.59v6.147c0 3.478 2.818 6.295 6.295 6.295s6.295-2.817 6.295-6.295V6z"/><path fill="#C1694F" d="M20.579 15.923h-5.036s0 1.259 2.518 1.259 2.518-1.259 2.518-1.259z"/><circle fill="#662113" cx="14.913" cy="11.517" r=".629"/><circle fill="#662113" cx="21.208" cy="11.517" r=".629"/><path fill="#C1694F" d="M16.802 13.405h2.518s0 1.259-1.259 1.259-1.259-1.259-1.259-1.259z"/><path fill="#FFAC33" d="M18 2c4.328 0 7.033 3.221 7.033 5.905s-.541 3.758-1.082 2.684l-1.082-2.147s-3.246 0-4.328-1.074c0 0 1.623 3.221-1.623 0 0 0 .541 2.148-2.705-.536 0 0-1.623 1.074-2.164 3.757-.15.745-1.082 0-1.082-2.684S13.131 2 18 2"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path d="M23.35 20c1.014.324 2.845 1.15 2.65 2.941 1.924.357 2.306 1.966 2.436 2.907.248 1.79-7.436-.198-7.436-.198l-1-3.482L23.35 20zm-10.38.5c-.769.185-2.749.5-3.64 2.793-1.99 0-2.33 2.02-2.33 3.538 0 2.253 7.336 1.955 8.495.678 1.158-1.277.784-5.36.784-5.36L12.97 20.5z" fill="#77B255"/><path fill="#FFDC5D" d="M32 36v-4c0-3.314-2.685-6-6-6H10c-3.313 0-6 2.686-6 6v4h28z"/><path fill="#FFDC5D" d="M13.667 27.122L18 31.001l4.316-2.627L22 22h-8z"/><path fill="#F9CA55" d="M14 24c1.216 1.374 2.355 1.719 3.996 1.719 1.639 0 2.787-.346 4.004-1.719v-4h-8v4z"/><path fill="#FFDC5D" d="M11.444 13.936c0 1.448-.734 2.622-1.639 2.622s-1.639-1.174-1.639-2.622.734-2.623 1.639-2.623c.905-.001 1.639 1.174 1.639 2.623m16.389 0c0 1.448-.733 2.622-1.639 2.622-.905 0-1.639-1.174-1.639-2.622s.733-2.623 1.639-2.623c.906-.001 1.639 1.174 1.639 2.623"/><path fill="#FFDC5D" d="M9.477 14.96c0-5.589 3.816-10.121 8.523-10.121s8.522 4.532 8.522 10.121S22.707 25.081 18 25.081c-4.707-.001-8.523-4.532-8.523-10.121"/><path fill="#C1694F" d="M18 21.802c-2.754 0-3.6-.705-3.741-.848-.256-.256-.256-.671 0-.927.248-.248.646-.255.902-.023.052.037.721.487 2.839.487 2.2 0 2.836-.485 2.842-.49.256-.255.657-.243.913.015.256.256.242.683-.014.938-.141.143-.987.848-3.741.848"/><path fill="#FFAC33" d="M18 1.48c5.648 0 9.178 4.168 9.178 7.641s-.706 4.863-1.412 3.473l-1.412-2.778s-4.235 0-5.647-1.39c0 0 2.118 4.168-2.118 0 0 0 .706 2.779-3.53-.694 0 0-2.118 1.389-2.824 4.862-.196.964-1.412 0-1.412-3.473C8.822 5.648 11.646 1.48 18 1.48"/><path fill="#662113" d="M14 15c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1m8 0c-.55 0-1-.45-1-1v-1c0-.55.45-1 1-1s1 .45 1 1v1c0 .55-.45 1-1 1"/><path fill="#C1694F" d="M18.75 17.75h-1.5c-.413 0-.75-.337-.75-.75s.337-.75.75-.75h1.5c.413 0 .75.337.75.75s-.337.75-.75.75"/><path fill="#77B255" d="M13.758 25.712c-.269 3.395.314 5.641.636 6.672.158.505-.201 1.016-.729 1.045-.714.039-1.591.08-2.116.08-1 0-3.477 2.243-3.942-.193C7.143 30.88 7 28.711 7 27.909s-.158-3.166 1.167-3.17c1.817-.005 2.155-.153 2.917-.705.857-.622 2.738.879 2.674 1.678zm8.426.007c.247 3.305-.257 5.437-.553 6.44-.145.492-.261.897.099 1.237.698.66 2.007-.07 2.49-.07.92 0 2.935 2.261 3.612-.991.633-3.039.604-5.475.604-6.255s-.468-1.038-1.077-1.363c-1.486-.792-1.982-.149-2.683-.687-.788-.605-2.55.911-2.492 1.689z"/><path fill="#A6D388" d="M8.002 25.236c.156-.67.885-1.175 1.063-.623.177.55.233 3.471.295 4.387s-.608-.184-.861-.898c-.254-.714-.644-2.234-.497-2.866zm19.115-.849c-.175-.579-.846-.279-1.003.176s.021 1.692-.01 2.465c-.031.773.325.014.551-.574.227-.588.627-1.521.462-2.067zm-16.802-.852c.024-.521.923-1.192 1.004-.656.081.536.571 6.09.845 7.289.274 1.199-.196.978-.522.124s-1.401-5.186-1.327-6.757zm14.802-.853c-.245-.141-.842.207-.89.639-.047.432-.005 4.021-.202 4.982-.196.961.115.81.383.133s1.831-5.106.709-5.754z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d6.svg b/public/emoji/1f9d6.svg index c587685a6..f1d0343e3 100644 --- a/public/emoji/1f9d6.svg +++ b/public/emoji/1f9d6.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#D99E82" d="M0 4h36v4H0zm0 8h36v4H0zm0 8h36v4H0zm0 8h36v4H0z"/><path opacity=".75" fill="#E1E8ED" d="M33.47 15.4c-.436-.247-.933-.4-1.47-.4-1.657 0-3 1.343-3 3 0 .061.014.118.018.178-.863.301-1.539.977-1.84 1.84-.06-.004-.117-.018-.178-.018-1.311 0-2.414.846-2.822 2.018C24.118 22.014 12.657 22 11 22c-.395 0-.77.081-1.116.22-.259-.957-.974-1.718-1.902-2.041.004-.061.018-.118.018-.179 0-1.657-1.343-3-3-3-.537 0-1.034.153-1.47.4C2.998 16.561 2.067 16 1 16c-.355 0-.685.081-1 .195V32c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V14c-1.067 0-1.998.561-2.53 1.4z"/><path fill="#FFAC33" d="M19.329 1c-1.681 0-3.238.523-4.524 1.41-.261-.039-.523-.08-.795-.08C11.072 2.33 9 5.062 9 8v8c0 5.142 3.858 8.939 9 8.939 5.142 0 8.914-4.312 8.998-8.87L27 9c-.083-4.991-3.263-8-7.671-8z"/><path fill="#FFDC5D" d="M23 20h-3v-1h-4v1h-3c-1.469 0-3 1-3 3v12l.022-.004c.058.561.516 1.004 1.092 1.004.615 0 1.114-.499 1.114-1.114 0-.084-.03-.159-.048-.237h11.639c-.018.079-.048.153-.048.237 0 .615.499 1.114 1.114 1.114.576 0 1.034-.443 1.092-1.004L26 35V23c0-2-1.531-3-3-3z"/><path fill="#F9CA55" d="M20 19h-4v1s2 1 4 0v-1z"/><path fill="#FFDC5D" d="M15 6s-1 3-4 4v3c0 3.674 3.327 6.619 6.999 6.619C21.672 19.619 25 16.674 25 13v-3c-8 0-10-4-10-4z"/><path fill="#DF1F32" d="M21 16h-6s.613 1.552 3 1.552S21 16 21 16z"/><circle fill="#662113" cx="15.145" cy="12.726" r=".726"/><circle fill="#662113" cx="20.855" cy="12.726" r=".726"/><path fill="#C1694F" d="M17 14h2s0 1-1 1-1-1-1-1z"/><path fill="#9266CC" d="M12 23h12v13H12z"/><path fill="#CBB7EA" d="M23 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M24 36h-4v-9s0-3-2-4h6v13z"/><path fill="#744EAA" d="M18 23h-6v1h7.121c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M18.121 24h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M18 23c.481.24.844.598 1.121 1H24v-1h-6z"/><path d="M0 32c0 2.209 1.791 4 4 4h12.816c.112-.314.184-.647.184-1 0-1.657-1.343-3-3-3-.36 0-.7.074-1.019.19.004-.064.019-.125.019-.19 0-1.067-.561-1.998-1.4-2.53.247-.436.4-.933.4-1.47 0-1.657-1.343-3-3-3-.781 0-1.487.306-2.021.796C6.872 24.236 5.587 23 4 23c-1.385 0-2.539.944-2.884 2.22C.77 25.081.395 25 0 25v7zm34-7c-.87 0-1.646.376-2.194.967C31.384 24.821 30.292 24 29 24c-1.657 0-3 1.343-3 3-1.657 0-3 1.343-3 3 0 .537.153 1.034.4 1.47-.839.532-1.4 1.463-1.4 2.53-1.304 0-2.403.837-2.816 2H32c2.209 0 4-1.791 4-4v-6.221C35.468 25.3 34.772 25 34 25z" opacity=".85" fill="#F5F8FA"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#E1E8ED"><circle cx="4.5" cy="25.5" r="4.5"/><circle cx="25.5" cy="20.5" r="5.5"/><circle cx="31" cy="26.5" r="5"/><circle cx="12" cy="24" r="5"/><path d="M33 30c-1.657 0-3 1.343-3 3H6c0-1.657-1.343-3-3-3s-3 1.343-3 3 1.343 3 3 3h29v-.184c.314.112.647.184 1 .184 1.657 0 3-1.343 3-3s-1.343-3-3-3z"/><path d="M0 25.5h9V33H0zM20 23h9v4h-9zm11 3.5h5V33h-5z"/></g><path fill="#FFDC5D" d="M31 36v-4.5c0-3.314-3.56-5.5-6.875-5.5h-12C8.812 26 5 28.186 5 31.5V36h26z"/><path fill="#FFAC33" d="M17.945 3.978c4.105 0 10.947 2.053 10.947 10.947 0 8.896 0 10.948-2.053 10.948s-4.79-2.053-8.895-2.053c-4.105 0-6.785 2.053-8.895 2.053-2.287 0-2.053-8.211-2.053-10.948.001-8.894 6.844-10.947 10.949-10.947"/><path fill="#FFDC5D" d="M14.5 26c1 1.982 2.792 4.5 3.5 4.5s2.512-2.549 3.5-4.5v-3.591h-7V26z"/><path fill="#F9CA55" d="M14.322 24.088c1.022 1.155 2.29 1.468 3.668 1.468 1.379 0 2.647-.312 3.67-1.468v-2.937h-7.338v2.937z"/><path fill="#FFDC5D" d="M9.734 14.627c0-5.834 3.676-10.563 8.211-10.563 4.533 0 8.209 4.73 8.209 10.563s-3.676 10.285-8.209 10.285c-4.535 0-8.211-4.452-8.211-10.285"/><path fill="#DF1F32" d="M17.945 22.452c-1.606 0-2.447-.794-2.537-.885-.268-.267-.268-.7 0-.967.266-.265.692-.267.961-.007.035.032.551.491 1.576.491 1.038 0 1.555-.473 1.576-.492.273-.256.703-.248.963.02.26.269.26.691-.004.955-.089.091-.929.885-2.535.885"/><path fill="#FFAC33" d="M7.735 17.909c-.021-1-.044-.224-.044-.465 0-3.422 2.053.494 2.053-1.943 0-2.439 1.368-2.683 2.736-4.051.684-.685 2.053-2.026 2.053-2.026s3.421 2.067 6.158 2.067c2.736 0 5.474 1.375 5.474 4.112 0 2.736 2.053-1.584 2.053 1.837 0 .244-.023-.531-.04.469h.719c.006-2 .006-1.924.006-3.202C28.902 5.812 22.06 2.5 17.954 2.5 13.85 2.5 7.007 5.757 7.007 14.652c0 .793-.02 1.257.008 3.257h.72z"/><path fill="#662113" d="M14.608 16.796c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.466 0 .847.381.847.846v.845c0 .466-.381.847-.847.847m6.765 0c-.465 0-.846-.381-.846-.847v-.845c0-.465.381-.846.846-.846.465 0 .846.381.846.846v.845c0 .466-.381.847-.846.847"/><path fill="#C1694F" d="M18.836 19.409h-1.69c-.233 0-.423-.19-.423-.423v-.153c0-.233.189-.424.423-.424h1.69c.233 0 .424.19.424.424v.153c0 .234-.191.423-.424.423"/><path fill="#9266CC" d="M9.75 31.5V36h11.5v-.5h5v-4z"/><path fill="#A47DE2" d="M19.25 31.5c2 1 2 4 2 4v.5h1v-.5h3v-4h-6z"/><path fill="#744EAA" d="M20.25 31.5c2 1 2 4 2 4v.5h4v-4.5h-6z"/><path fill="#744EAA" d="M20.25 31.5H9.75v1h11.621c-.277-.402-.64-.76-1.121-1z"/><path fill="#9266CC" d="M20.371 32.5h1c-.277-.402-.64-.76-1.121-1h-1c.481.24.844.598 1.121 1z"/><path fill="#553788" d="M20.25 31.5c.481.24.844.598 1.121 1h4.879v-1h-6z"/><path d="M32 28c-2.975 0-5.438 2.168-5.911 5.009C26.058 33.008 26.03 33 26 33c-2.049 0-3.806 1.236-4.578 3H33c1.65 0 3-1.35 3-3v-3.463C34.938 28.584 33.539 28 32 28zm-18.422 8c-.772-1.764-2.529-3-4.578-3-.78 0-1.509.194-2.166.512.098-.322.166-.657.166-1.012C7 30.567 5.433 29 3.5 29 1.738 29 .295 30.306.05 32H0v1c0 1.65 1.35 3 3 3h10.578z" opacity=".7" fill="#FFF"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f9d8-1f3fb-200d-2640-fe0f.svg index b40f1d8b6..e51d2e439 100644 --- a/public/emoji/1f9d8-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f9d8-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#292F33" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#F7DECE" d="M16 3s-.011 3.285-3 3.894V9c0 2.05 1.236 3.806 3 4.578V15c0 1.104.896 2 2 2s2-.896 2-2v-1.422c1.764-.772 3-2.528 3-4.577V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#F7DECE" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#EEC2AD" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#F7DECE" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#EEC2AD" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#F7DECE" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#F7DECE" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#EEC2AD" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#EEC2AD" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#F7DECE" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#292F33" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#F7DECE" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#C1694F" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f9d8-1f3fb-200d-2642-fe0f.svg index 15bbacb55..ce17dc94b 100644 --- a/public/emoji/1f9d8-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f9d8-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#F7DECE"><path d="M11.561 24.806L5.82 27.855c-.607.322-1.368.089-1.69-.518-.322-.607-.089-1.368.518-1.69l5.741-3.048c.607-.322 1.368-.089 1.69.518.322.606.089 1.367-.518 1.689z"/><path d="M13.48 17.493l-1.266 6.375c-.134.674-.795 1.116-1.47.983-.674-.134-1.116-.795-.983-1.47l1.266-6.375c.134-.674.795-1.116 1.47-.983.674.135 1.117.796.983 1.47z"/></g><g fill="#F7DECE"><path d="M24.439 24.806l5.741 3.048c.607.322 1.368.089 1.69-.518.322-.607.089-1.368-.518-1.69l-5.741-3.048c-.607-.322-1.368-.089-1.69.518-.322.607-.089 1.368.518 1.69z"/><path d="M22.52 17.493l1.266 6.375c.134.674.795 1.116 1.47.983.674-.134 1.116-.795.983-1.47l-1.266-6.375c-.134-.674-.795-1.116-1.47-.983-.674.135-1.117.796-.983 1.47z"/></g><path fill="#4289B1" d="M22.999 31.75s0 1.25-5 1.25-5-1.25-5-1.25v-5.5h10v5.5z"/><path fill="#77B255" d="M22.999 15h-10c-2.562 0-2.458 4-2.458 4h2.458v9h10v-9h2.458s.105-4-2.458-4z"/><path fill="#F7DECE" d="M15.667 10.389v4.666c0 .312 1.045 1.093 2.333 1.093 1.288 0 2.333-.819 2.333-1.093v-4.666h-4.666z"/><path fill="#F7DECE" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#C1694F" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".495"/><circle fill="#662113" cx="20.5" cy="8.5" r=".495"/><path fill="#C1694F" d="M17.009 10.076h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#292F33" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/><path fill="#F7DECE" d="M26.587 29.054s-1.533-.374-2.532-.349c-.23-.03-.469-.016-.706.051l-12.977 3.721c-.925.265-1.465 1.239-1.2 2.165.265.925 1.239 1.465 2.165 1.2l11.942-3.425c.883-.253 1.988-.044 2.826-.061.838-.017 1.632-.478 1.766-1.431.134-.953-.331-1.737-1.284-1.871z"/><path fill="#EEC2AD" d="M27.136 31.402c-.196-.694-2.206-.474-2.644-.365s-12.556 3.551-13.547 3.844c-.93.275-.388 1.051.063 1.028.033-.007.066-.008.1-.018l11.942-3.425c.883-.253 1.99-.003 2.826-.061.397-.027.806-.148.881-.181.168-.071.518-.328.379-.822z"/><path fill="#F7DECE" d="M9.413 29.054s1.533-.374 2.532-.349c.23-.03.469-.016.706.051l12.977 3.721c.925.265 1.465 1.239 1.2 2.165-.265.925-1.239 1.465-2.165 1.2L12.72 32.418c-.883-.253-1.988-.044-2.826-.061-.838-.017-1.632-.478-1.766-1.431-.133-.954.332-1.738 1.285-1.872z"/><path fill="#EEC2AD" d="M8.864 31.402c.196-.694 2.206-.474 2.644-.365s12.556 3.551 13.547 3.844c.93.275.388 1.051-.063 1.028-.033-.007-.066-.008-.1-.018L12.95 32.467c-.883-.253-1.99-.003-2.826-.061-.397-.027-.806-.148-.881-.181-.168-.072-.518-.329-.379-.823z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#F7DECE" d="M12.497 16.024c-.674-.134-1.336 1.309-1.47 1.983L9.846 23.02c-1.619 1.166-1.57 3.454-2.808 4.512-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.006-.017.007-.029.013-.046.097-.138.169-.294.204-.469l1.266-6.375c.135-.674-.308-1.335-.982-1.469zm17.59 13.588c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.246-1.064-1.133-3.377-2.781-4.535l-1.176-4.99c-.134-.674-.795-2.117-1.47-1.983-.674.134-1.116.795-.983 1.47l1.266 6.375c.038.191.125.355.236.501l.004.014c.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.29-.21.226-1.044-.181-1.628z"/><path fill="#F7DECE" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#EEC2AD" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#EEC2AD" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#F7DECE" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#77B255" d="M22.543 15h-9.06c-2.562 0-2.943 4.394-2.943 4.394l2.458.535s.31 3.589.271 5.27c-.038 1.682-.27 2.801-.27 2.801s1.912.394 5 .394 5-.394 5-.394-.349-1.606-.349-2.978.349-5.093.349-5.093l2.458-.535S25.105 15 22.543 15z"/><path fill="#F7DECE" d="M15.667 10.389v4.666c0 .312.553 1.488 2.333 1.488 1.781 0 2.333-1.214 2.333-1.488v-4.666h-4.666z"/><path fill="#EEC2AD" d="M20.333 9.774l-4.666.022v4.644s2.333 1.167 4.666 0V9.774z"/><path fill="#F7DECE" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#C1694F" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991zM16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm-4.241 1.326h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#292F33" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fb.svg b/public/emoji/1f9d8-1f3fb.svg index b40f1d8b6..e51d2e439 100644 --- a/public/emoji/1f9d8-1f3fb.svg +++ b/public/emoji/1f9d8-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#292F33" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#F7DECE" d="M16 3s-.011 3.285-3 3.894V9c0 2.05 1.236 3.806 3 4.578V15c0 1.104.896 2 2 2s2-.896 2-2v-1.422c1.764-.772 3-2.528 3-4.577V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#F7DECE" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#EEC2AD" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#F7DECE" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#EEC2AD" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#F7DECE" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#F7DECE" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#EEC2AD" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#EEC2AD" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#F7DECE" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#292F33" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#F7DECE" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F7DECE" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#C1694F" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f9d8-1f3fc-200d-2640-fe0f.svg index fb0b3cb98..079727076 100644 --- a/public/emoji/1f9d8-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f9d8-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#FFE51E" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#F3D2A2" d="M16 3s-.011 3.285-3 3.894V9c0 2.05 1.236 3.806 3 4.578V15c0 1.104.896 2 2 2s2-.896 2-2v-1.422c1.764-.772 3-2.528 3-4.577V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#F3D2A2" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#E2C196" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#F3D2A2" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#E2C196" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#F3D2A2" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#F3D2A2" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#E2C196" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#E2C196" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#F3D2A2" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#FFE51E" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#F3D2A2" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#E2C196" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#C1694F" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f9d8-1f3fc-200d-2642-fe0f.svg index 5c4a81ada..9e4c8d068 100644 --- a/public/emoji/1f9d8-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f9d8-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#F3D2A2"><path d="M11.561 24.806L5.82 27.855c-.607.322-1.368.089-1.69-.518-.322-.607-.089-1.368.518-1.69l5.741-3.048c.607-.322 1.368-.089 1.69.518.322.606.089 1.367-.518 1.689z"/><path d="M13.48 17.493l-1.266 6.375c-.134.674-.795 1.116-1.47.983-.674-.134-1.116-.795-.983-1.47l1.266-6.375c.134-.674.795-1.116 1.47-.983.674.135 1.117.796.983 1.47z"/></g><g fill="#F3D2A2"><path d="M24.439 24.806l5.741 3.048c.607.322 1.368.089 1.69-.518.322-.607.089-1.368-.518-1.69l-5.741-3.048c-.607-.322-1.368-.089-1.69.518-.322.607-.089 1.368.518 1.69z"/><path d="M22.52 17.493l1.266 6.375c.134.674.795 1.116 1.47.983.674-.134 1.116-.795.983-1.47l-1.266-6.375c-.134-.674-.795-1.116-1.47-.983-.674.135-1.117.796-.983 1.47z"/></g><path fill="#4289B1" d="M22.999 31.75s0 1.25-5 1.25-5-1.25-5-1.25v-5.5h10v5.5z"/><path fill="#77B255" d="M22.999 15h-10c-2.562 0-2.458 4-2.458 4h2.458v9h10v-9h2.458s.105-4-2.458-4z"/><path fill="#F3D2A2" d="M15.667 10.389v4.666c0 .312 1.045 1.093 2.333 1.093 1.288 0 2.333-.819 2.333-1.093v-4.666h-4.666z"/><path fill="#F3D2A2" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#C1694F" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".495"/><circle fill="#662113" cx="20.5" cy="8.5" r=".495"/><path fill="#C1694F" d="M17.009 10.076h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#FFE51E" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/><path fill="#F3D2A2" d="M26.587 29.054s-1.533-.374-2.532-.349c-.23-.03-.469-.016-.706.051l-12.977 3.721c-.925.265-1.465 1.239-1.2 2.165.265.925 1.239 1.465 2.165 1.2l11.942-3.425c.883-.253 1.988-.044 2.826-.061.838-.017 1.632-.478 1.766-1.431.134-.953-.331-1.737-1.284-1.871z"/><path fill="#E2C196" d="M27.136 31.402c-.196-.694-2.206-.474-2.644-.365s-12.556 3.551-13.547 3.844c-.93.275-.388 1.051.063 1.028.033-.007.066-.008.1-.018l11.942-3.425c.883-.253 1.99-.003 2.826-.061.397-.027.806-.148.881-.181.168-.071.518-.328.379-.822z"/><path fill="#F3D2A2" d="M9.413 29.054s1.533-.374 2.532-.349c.23-.03.469-.016.706.051l12.977 3.721c.925.265 1.465 1.239 1.2 2.165-.265.925-1.239 1.465-2.165 1.2L12.72 32.418c-.883-.253-1.988-.044-2.826-.061-.838-.017-1.632-.478-1.766-1.431-.133-.954.332-1.738 1.285-1.872z"/><path fill="#E2C196" d="M8.864 31.402c.196-.694 2.206-.474 2.644-.365s12.556 3.551 13.547 3.844c.93.275.388 1.051-.063 1.028-.033-.007-.066-.008-.1-.018L12.95 32.467c-.883-.253-1.99-.003-2.826-.061-.397-.027-.806-.148-.881-.181-.168-.072-.518-.329-.379-.823z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#F3D2A2" d="M12.497 16.024c-.674-.134-1.336 1.309-1.47 1.983L9.846 23.02c-1.619 1.166-1.57 3.454-2.808 4.512-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.006-.017.007-.029.013-.046.097-.138.169-.294.204-.469l1.266-6.375c.135-.674-.308-1.335-.982-1.469zm17.59 13.588c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.246-1.064-1.133-3.377-2.781-4.535l-1.176-4.99c-.134-.674-.795-2.117-1.47-1.983-.674.134-1.116.795-.983 1.47l1.266 6.375c.038.191.125.355.236.501l.004.014c.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.29-.21.226-1.044-.181-1.628z"/><path fill="#F3D2A2" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#E2C196" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#E2C196" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#F3D2A2" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#77B255" d="M22.543 15h-9.06c-2.562 0-2.943 4.394-2.943 4.394l2.458.535s.31 3.589.271 5.27c-.038 1.682-.27 2.801-.27 2.801s1.912.394 5 .394 5-.394 5-.394-.349-1.606-.349-2.978.349-5.093.349-5.093l2.458-.535S25.105 15 22.543 15z"/><path fill="#F3D2A2" d="M15.667 10.389v4.666c0 .312.553 1.488 2.333 1.488 1.781 0 2.333-1.214 2.333-1.488v-4.666h-4.666z"/><path fill="#E2C196" d="M20.333 9.774l-4.666.022v4.644s2.333 1.167 4.666 0V9.774z"/><path fill="#F3D2A2" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#C1694F" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991zM16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm-4.241 1.326h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#FFE51E" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fc.svg b/public/emoji/1f9d8-1f3fc.svg index fb0b3cb98..079727076 100644 --- a/public/emoji/1f9d8-1f3fc.svg +++ b/public/emoji/1f9d8-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#FFE51E" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#F3D2A2" d="M16 3s-.011 3.285-3 3.894V9c0 2.05 1.236 3.806 3 4.578V15c0 1.104.896 2 2 2s2-.896 2-2v-1.422c1.764-.772 3-2.528 3-4.577V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#F3D2A2" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#E2C196" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#F3D2A2" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#E2C196" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#F3D2A2" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#F3D2A2" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#E2C196" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#E2C196" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#F3D2A2" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#FFE51E" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#F3D2A2" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#E2C196" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#C1694F" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f9d8-1f3fd-200d-2640-fe0f.svg index 6e5be98c9..010541a1e 100644 --- a/public/emoji/1f9d8-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f9d8-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#963B22" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#D5AB88" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#D5AB88" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#D5AB88" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#CC9B7A" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#D5AB88" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#CC9B7A" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#D4AB88" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#D4AB88" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#CC9B7A" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#CC9B7A" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#D4AB88" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#963B22" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#D4AB88" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#CC9B7A" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#C1694F" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f9d8-1f3fd-200d-2642-fe0f.svg index 586840250..6c3b34f59 100644 --- a/public/emoji/1f9d8-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f9d8-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#D5AB88"><path d="M11.561 24.806L5.82 27.855c-.607.322-1.368.089-1.69-.518-.322-.607-.089-1.368.518-1.69l5.741-3.048c.607-.322 1.368-.089 1.69.518.322.606.089 1.367-.518 1.689z"/><path d="M13.48 17.493l-1.266 6.375c-.134.674-.795 1.116-1.47.983-.674-.134-1.116-.795-.983-1.47l1.266-6.375c.134-.674.795-1.116 1.47-.983.674.135 1.117.796.983 1.47z"/></g><g fill="#D5AB88"><path d="M24.439 24.806l5.741 3.048c.607.322 1.368.089 1.69-.518.322-.607.089-1.368-.518-1.69l-5.741-3.048c-.607-.322-1.368-.089-1.69.518-.322.607-.089 1.368.518 1.69z"/><path d="M22.52 17.493l1.266 6.375c.134.674.795 1.116 1.47.983.674-.134 1.116-.795.983-1.47l-1.266-6.375c-.134-.674-.795-1.116-1.47-.983-.674.135-1.117.796-.983 1.47z"/></g><path fill="#4289B1" d="M22.999 31.75s0 1.25-5 1.25-5-1.25-5-1.25v-5.5h10v5.5z"/><path fill="#77B255" d="M22.999 15h-10c-2.562 0-2.458 4-2.458 4h2.458v9h10v-9h2.458s.105-4-2.458-4z"/><path fill="#D5AB88" d="M15.667 10.389v4.666c0 .312 1.045 1.093 2.333 1.093 1.288 0 2.333-.819 2.333-1.093v-4.666h-4.666z"/><path fill="#D5AB88" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#C1694F" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".495"/><circle fill="#662113" cx="20.5" cy="8.5" r=".495"/><path fill="#C1694F" d="M17.009 10.076h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#963B22" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/><path fill="#D5AB88" d="M26.587 29.054s-1.533-.374-2.532-.349c-.23-.03-.469-.016-.706.051l-12.977 3.721c-.925.265-1.465 1.239-1.2 2.165.265.925 1.239 1.465 2.165 1.2l11.942-3.425c.883-.253 1.988-.044 2.826-.061.838-.017 1.632-.478 1.766-1.431.134-.953-.331-1.737-1.284-1.871z"/><path fill="#CC9B7A" d="M27.136 31.402c-.196-.694-2.206-.474-2.644-.365s-12.556 3.551-13.547 3.844c-.93.275-.388 1.051.063 1.028.033-.007.066-.008.1-.018l11.942-3.425c.883-.253 1.99-.003 2.826-.061.397-.027.806-.148.881-.181.168-.071.518-.328.379-.822z"/><path fill="#D5AB88" d="M9.413 29.054s1.533-.374 2.532-.349c.23-.03.469-.016.706.051l12.977 3.721c.925.265 1.465 1.239 1.2 2.165-.265.925-1.239 1.465-2.165 1.2L12.72 32.418c-.883-.253-1.988-.044-2.826-.061-.838-.017-1.632-.478-1.766-1.431-.133-.954.332-1.738 1.285-1.872z"/><path fill="#CC9B7A" d="M8.864 31.402c.196-.694 2.206-.474 2.644-.365s12.556 3.551 13.547 3.844c.93.275.388 1.051-.063 1.028-.033-.007-.066-.008-.1-.018L12.95 32.467c-.883-.253-1.99-.003-2.826-.061-.397-.027-.806-.148-.881-.181-.168-.072-.518-.329-.379-.823z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#D4AB88" d="M12.497 16.024c-.674-.134-1.336 1.309-1.47 1.983L9.846 23.02c-1.619 1.166-1.57 3.454-2.808 4.512-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.006-.017.007-.029.013-.046.097-.138.169-.294.204-.469l1.266-6.375c.135-.674-.308-1.335-.982-1.469zm17.59 13.588c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.246-1.064-1.133-3.377-2.781-4.535l-1.176-4.99c-.134-.674-.795-2.117-1.47-1.983-.674.134-1.116.795-.983 1.47l1.266 6.375c.038.191.125.355.236.501l.004.014c.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.29-.21.226-1.044-.181-1.628z"/><path fill="#D4AB88" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#CC9B7A" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#CC9B7A" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#D4AB88" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#77B255" d="M22.543 15h-9.06c-2.562 0-2.943 4.394-2.943 4.394l2.458.535s.31 3.589.271 5.27c-.038 1.682-.27 2.801-.27 2.801s1.912.394 5 .394 5-.394 5-.394-.349-1.606-.349-2.978.349-5.093.349-5.093l2.458-.535S25.105 15 22.543 15z"/><path fill="#D4AB88" d="M15.667 10.389v4.666c0 .312.553 1.488 2.333 1.488 1.781 0 2.333-1.214 2.333-1.488v-4.666h-4.666z"/><path fill="#CC9B7A" d="M20.333 9.774l-4.666.022v4.644s2.333 1.167 4.666 0V9.774z"/><path fill="#D4AB88" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#C1694F" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991zM16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm-4.241 1.326h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#963B22" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fd.svg b/public/emoji/1f9d8-1f3fd.svg index 6e5be98c9..010541a1e 100644 --- a/public/emoji/1f9d8-1f3fd.svg +++ b/public/emoji/1f9d8-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#963B22" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#D5AB88" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#D5AB88" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#D5AB88" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#CC9B7A" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#D5AB88" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#CC9B7A" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#D4AB88" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#D4AB88" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#CC9B7A" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#CC9B7A" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#D4AB88" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#963B22" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#D4AB88" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#CC9B7A" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#D4AB88" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#C1694F" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f9d8-1f3fe-200d-2640-fe0f.svg index 220b92fe2..71bc5ad76 100644 --- a/public/emoji/1f9d8-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f9d8-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#60352A" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#AF7E57" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#AF7E57" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#915A34" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#AF7E57" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#9B6A49" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#AF7E57" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#9B6A49" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#AF7E57" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#AF7E57" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#9B6A49" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#9B6A49" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#AF7E57" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#60352A" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#AF7E57" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#9B6A49" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#915A34" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f9d8-1f3fe-200d-2642-fe0f.svg index 63897507f..c3629c6c7 100644 --- a/public/emoji/1f9d8-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f9d8-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#AF7E57"><path d="M11.561 24.806L5.82 27.855c-.607.322-1.368.089-1.69-.518-.322-.607-.089-1.368.518-1.69l5.741-3.048c.607-.322 1.368-.089 1.69.518.322.606.089 1.367-.518 1.689z"/><path d="M13.48 17.493l-1.266 6.375c-.134.674-.795 1.116-1.47.983-.674-.134-1.116-.795-.983-1.47l1.266-6.375c.134-.674.795-1.116 1.47-.983.674.135 1.117.796.983 1.47z"/></g><g fill="#AF7E57"><path d="M24.439 24.806l5.741 3.048c.607.322 1.368.089 1.69-.518.322-.607.089-1.368-.518-1.69l-5.741-3.048c-.607-.322-1.368-.089-1.69.518-.322.607-.089 1.368.518 1.69z"/><path d="M22.52 17.493l1.266 6.375c.134.674.795 1.116 1.47.983.674-.134 1.116-.795.983-1.47l-1.266-6.375c-.134-.674-.795-1.116-1.47-.983-.674.135-1.117.796-.983 1.47z"/></g><path fill="#4289B1" d="M22.999 31.75s0 1.25-5 1.25-5-1.25-5-1.25v-5.5h10v5.5z"/><path fill="#77B255" d="M22.999 15h-10c-2.562 0-2.458 4-2.458 4h2.458v9h10v-9h2.458s.105-4-2.458-4z"/><path fill="#AF7E57" d="M15.667 10.389v4.666c0 .312 1.045 1.093 2.333 1.093 1.288 0 2.333-.819 2.333-1.093v-4.666h-4.666z"/><path fill="#AF7E57" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#915A34" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".495"/><circle fill="#662113" cx="20.5" cy="8.5" r=".495"/><path fill="#915A34" d="M17.009 10.076h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#60352A" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/><path fill="#AF7E57" d="M26.587 29.054s-1.533-.374-2.532-.349c-.23-.03-.469-.016-.706.051l-12.977 3.721c-.925.265-1.465 1.239-1.2 2.165.265.925 1.239 1.465 2.165 1.2l11.942-3.425c.883-.253 1.988-.044 2.826-.061.838-.017 1.632-.478 1.766-1.431.134-.953-.331-1.737-1.284-1.871z"/><path fill="#9B6A49" d="M27.136 31.402c-.196-.694-2.206-.474-2.644-.365s-12.556 3.551-13.547 3.844c-.93.275-.388 1.051.063 1.028.033-.007.066-.008.1-.018l11.942-3.425c.883-.253 1.99-.003 2.826-.061.397-.027.806-.148.881-.181.168-.071.518-.328.379-.822z"/><path fill="#AF7E57" d="M9.413 29.054s1.533-.374 2.532-.349c.23-.03.469-.016.706.051l12.977 3.721c.925.265 1.465 1.239 1.2 2.165-.265.925-1.239 1.465-2.165 1.2L12.72 32.418c-.883-.253-1.988-.044-2.826-.061-.838-.017-1.632-.478-1.766-1.431-.133-.954.332-1.738 1.285-1.872z"/><path fill="#9B6A49" d="M8.864 31.402c.196-.694 2.206-.474 2.644-.365s12.556 3.551 13.547 3.844c.93.275.388 1.051-.063 1.028-.033-.007-.066-.008-.1-.018L12.95 32.467c-.883-.253-1.99-.003-2.826-.061-.397-.027-.806-.148-.881-.181-.168-.072-.518-.329-.379-.823z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#AF7E57" d="M12.497 16.024c-.674-.134-1.336 1.309-1.47 1.983L9.846 23.02c-1.619 1.166-1.57 3.454-2.808 4.512-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.006-.017.007-.029.013-.046.097-.138.169-.294.204-.469l1.266-6.375c.135-.674-.308-1.335-.982-1.469zm17.59 13.588c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.246-1.064-1.133-3.377-2.781-4.535l-1.176-4.99c-.134-.674-.795-2.117-1.47-1.983-.674.134-1.116.795-.983 1.47l1.266 6.375c.038.191.125.355.236.501l.004.014c.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.29-.21.226-1.044-.181-1.628z"/><path fill="#AF7E57" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#9B6A49" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#9B6A49" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#AF7E57" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#77B255" d="M22.543 15h-9.06c-2.562 0-2.943 4.394-2.943 4.394l2.458.535s.31 3.589.271 5.27c-.038 1.682-.27 2.801-.27 2.801s1.912.394 5 .394 5-.394 5-.394-.349-1.606-.349-2.978.349-5.093.349-5.093l2.458-.535S25.105 15 22.543 15z"/><path fill="#AF7E57" d="M15.667 10.389v4.666c0 .312.553 1.488 2.333 1.488 1.781 0 2.333-1.214 2.333-1.488v-4.666h-4.666z"/><path fill="#9B6A49" d="M20.333 9.774l-4.666.022v4.644s2.333 1.167 4.666 0V9.774z"/><path fill="#AF7E57" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#915A34" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991zM16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm-4.241 1.326h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#60352A" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3fe.svg b/public/emoji/1f9d8-1f3fe.svg index 220b92fe2..71bc5ad76 100644 --- a/public/emoji/1f9d8-1f3fe.svg +++ b/public/emoji/1f9d8-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#60352A" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#AF7E57" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#AF7E57" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#915A34" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#AF7E57" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#9B6A49" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#AF7E57" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#9B6A49" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#AF7E57" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#AF7E57" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#9B6A49" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#9B6A49" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#AF7E57" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#60352A" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#AF7E57" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#9B6A49" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#AF7E57" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#915A34" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f9d8-1f3ff-200d-2640-fe0f.svg index ab672b006..5cc0fb7d4 100644 --- a/public/emoji/1f9d8-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f9d8-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#0B0200" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#7C533E" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#7C533E" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="15.5" cy="8.5" r=".5"/><circle cx="20.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#7C533E" d="M8.418 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.769.309-1.143 1.182-.834 1.951z"/><path fill="#664131" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.167-.075.511-.34.36-.83z"/><path fill="#7C533E" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.769.309 1.142 1.182.834 1.951z"/><path fill="#664131" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#7C533E" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#7C533E" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#664131" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#664131" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#7C533E" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#0B0200" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#7C533E" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#664131" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#3D2E24" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f9d8-1f3ff-200d-2642-fe0f.svg index b49b1a5a4..33acb8085 100644 --- a/public/emoji/1f9d8-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f9d8-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#7C533E"><path d="M11.561 24.806L5.82 27.855c-.607.322-1.368.089-1.69-.518-.322-.607-.089-1.368.518-1.69l5.741-3.048c.607-.322 1.368-.089 1.69.518.322.606.089 1.367-.518 1.689z"/><path d="M13.48 17.493l-1.266 6.375c-.134.674-.795 1.116-1.47.983-.674-.134-1.116-.795-.983-1.47l1.266-6.375c.134-.674.795-1.116 1.47-.983.674.135 1.117.796.983 1.47z"/></g><g fill="#7C533E"><path d="M24.439 24.806l5.741 3.048c.607.322 1.368.089 1.69-.518.322-.607.089-1.368-.518-1.69l-5.741-3.048c-.607-.322-1.368-.089-1.69.518-.322.607-.089 1.368.518 1.69z"/><path d="M22.52 17.493l1.266 6.375c.134.674.795 1.116 1.47.983.674-.134 1.116-.795.983-1.47l-1.266-6.375c-.134-.674-.795-1.116-1.47-.983-.674.135-1.117.796-.983 1.47z"/></g><path fill="#4289B1" d="M22.999 31.75s0 1.25-5 1.25-5-1.25-5-1.25v-5.5h10v5.5z"/><path fill="#77B255" d="M22.999 15h-10c-2.562 0-2.458 4-2.458 4h2.458v9h10v-9h2.458s.105-4-2.458-4z"/><path fill="#7C533E" d="M15.667 10.389v4.666c0 .312 1.045 1.093 2.333 1.093 1.288 0 2.333-.819 2.333-1.093v-4.666h-4.666z"/><path fill="#7C533E" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#3D2E24" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991z"/><circle cx="15.5" cy="8.5" r=".495"/><circle cx="20.5" cy="8.5" r=".495"/><path fill="#3D2E24" d="M17.009 10.076h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#0B0200" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/><path fill="#7C533E" d="M26.587 29.054s-1.533-.374-2.532-.349c-.23-.03-.469-.016-.706.051l-12.977 3.721c-.925.265-1.465 1.239-1.2 2.165.265.925 1.239 1.465 2.165 1.2l11.942-3.425c.883-.253 1.988-.044 2.826-.061.838-.017 1.632-.478 1.766-1.431.134-.953-.331-1.737-1.284-1.871z"/><path fill="#664131" d="M27.136 31.402c-.196-.694-2.206-.474-2.644-.365s-12.556 3.551-13.547 3.844c-.93.275-.388 1.051.063 1.028.033-.007.066-.008.1-.018l11.942-3.425c.883-.253 1.99-.003 2.826-.061.397-.027.806-.148.881-.181.168-.071.518-.328.379-.822z"/><path fill="#7C533E" d="M9.413 29.054s1.533-.374 2.532-.349c.23-.03.469-.016.706.051l12.977 3.721c.925.265 1.465 1.239 1.2 2.165-.265.925-1.239 1.465-2.165 1.2L12.72 32.418c-.883-.253-1.988-.044-2.826-.061-.838-.017-1.632-.478-1.766-1.431-.133-.954.332-1.738 1.285-1.872z"/><path fill="#664131" d="M8.864 31.402c.196-.694 2.206-.474 2.644-.365s12.556 3.551 13.547 3.844c.93.275.388 1.051-.063 1.028-.033-.007-.066-.008-.1-.018L12.95 32.467c-.883-.253-1.99-.003-2.826-.061-.397-.027-.806-.148-.881-.181-.168-.072-.518-.329-.379-.823z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#7C533E" d="M12.497 16.024c-.674-.134-1.336 1.309-1.47 1.983L9.846 23.02c-1.619 1.166-1.57 3.454-2.808 4.512-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.006-.017.007-.029.013-.046.097-.138.169-.294.204-.469l1.266-6.375c.135-.674-.308-1.335-.982-1.469zm17.59 13.588c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.246-1.064-1.133-3.377-2.781-4.535l-1.176-4.99c-.134-.674-.795-2.117-1.47-1.983-.674.134-1.116.795-.983 1.47l1.266 6.375c.038.191.125.355.236.501l.004.014c.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.29-.21.226-1.044-.181-1.628z"/><path fill="#7C533E" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#664131" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#664131" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#7C533E" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#77B255" d="M22.543 15h-9.06c-2.562 0-2.943 4.394-2.943 4.394l2.458.535s.31 3.589.271 5.27c-.038 1.682-.27 2.801-.27 2.801s1.912.394 5 .394 5-.394 5-.394-.349-1.606-.349-2.978.349-5.093.349-5.093l2.458-.535S25.105 15 22.543 15z"/><path fill="#7C533E" d="M15.667 10.389v4.666c0 .312.553 1.488 2.333 1.488 1.781 0 2.333-1.214 2.333-1.488v-4.666h-4.666z"/><path fill="#664131" d="M20.333 9.774l-4.666.022v4.644s2.333 1.167 4.666 0V9.774z"/><path fill="#7C533E" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#3D2E24" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991zM16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm-4.241 1.326h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#0B0200" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-1f3ff.svg b/public/emoji/1f9d8-1f3ff.svg index ab672b006..5cc0fb7d4 100644 --- a/public/emoji/1f9d8-1f3ff.svg +++ b/public/emoji/1f9d8-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#0B0200" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#7C533E" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#7C533E" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="15.5" cy="8.5" r=".5"/><circle cx="20.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#7C533E" d="M8.418 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.769.309-1.143 1.182-.834 1.951z"/><path fill="#664131" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.167-.075.511-.34.36-.83z"/><path fill="#7C533E" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.769.309 1.142 1.182.834 1.951z"/><path fill="#664131" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#7C533E" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#7C533E" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#664131" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#664131" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#7C533E" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#0B0200" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#7C533E" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#664131" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#7C533E" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#3D2E24" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-200d-2640-fe0f.svg b/public/emoji/1f9d8-200d-2640-fe0f.svg index 241b3d23a..8fcb70fb6 100644 --- a/public/emoji/1f9d8-200d-2640-fe0f.svg +++ b/public/emoji/1f9d8-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#FFAC33" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#FFDC5D" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#FFDC5D" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFDC5D" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#F9CA55" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#FFDC5D" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#F9CA55" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#FFDC5D" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#FFDC5D" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#F9CA55" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#F9CA55" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#FFDC5D" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#FFAC33" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#FFDC5D" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#F9CA55" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#C1694F" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8-200d-2642-fe0f.svg b/public/emoji/1f9d8-200d-2642-fe0f.svg index bf60483af..e0c1f483a 100644 --- a/public/emoji/1f9d8-200d-2642-fe0f.svg +++ b/public/emoji/1f9d8-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#FFDC5D"><path d="M11.561 24.806L5.82 27.855c-.607.322-1.368.089-1.69-.518-.322-.607-.089-1.368.518-1.69l5.741-3.048c.607-.322 1.368-.089 1.69.518.322.606.089 1.367-.518 1.689z"/><path d="M13.48 17.493l-1.266 6.375c-.134.674-.795 1.116-1.47.983-.674-.134-1.116-.795-.983-1.47l1.266-6.375c.134-.674.795-1.116 1.47-.983.674.135 1.117.796.983 1.47z"/></g><g fill="#FFDC5D"><path d="M24.439 24.806l5.741 3.048c.607.322 1.368.089 1.69-.518.322-.607.089-1.368-.518-1.69l-5.741-3.048c-.607-.322-1.368-.089-1.69.518-.322.607-.089 1.368.518 1.69z"/><path d="M22.52 17.493l1.266 6.375c.134.674.795 1.116 1.47.983.674-.134 1.116-.795.983-1.47l-1.266-6.375c-.134-.674-.795-1.116-1.47-.983-.674.135-1.117.796-.983 1.47z"/></g><path fill="#4289B1" d="M22.999 31.75s0 1.25-5 1.25-5-1.25-5-1.25v-5.5h10v5.5z"/><path fill="#77B255" d="M22.999 15h-10c-2.562 0-2.458 4-2.458 4h2.458v9h10v-9h2.458s.105-4-2.458-4z"/><path fill="#FFDC5D" d="M26.587 29.054s-1.533-.374-2.532-.349c-.23-.03-.469-.016-.706.051l-12.977 3.721c-.925.265-1.465 1.239-1.2 2.165.265.925 1.239 1.465 2.165 1.2l11.942-3.425c.883-.253 1.988-.044 2.826-.061.838-.017 1.632-.478 1.766-1.431.134-.953-.331-1.737-1.284-1.871z"/><path fill="#FFCC4D" d="M27.136 31.402c-.196-.694-2.206-.474-2.644-.365s-12.556 3.551-13.547 3.844c-.93.275-.388 1.051.063 1.028.033-.007.066-.008.1-.018l11.942-3.425c.883-.253 1.99-.003 2.826-.061.397-.027.806-.148.881-.181.168-.071.518-.328.379-.822z"/><path fill="#FFDC5D" d="M9.413 29.054s1.533-.374 2.532-.349c.23-.03.469-.016.706.051l12.977 3.721c.925.265 1.465 1.239 1.2 2.165-.265.925-1.239 1.465-2.165 1.2L12.72 32.418c-.883-.253-1.988-.044-2.826-.061-.838-.017-1.632-.478-1.766-1.431-.133-.954.332-1.738 1.285-1.872z"/><path fill="#FFCC4D" d="M8.864 31.402c.196-.694 2.206-.474 2.644-.365s12.556 3.551 13.547 3.844c.93.275.388 1.051-.063 1.028-.033-.007-.066-.008-.1-.018L12.95 32.467c-.883-.253-1.99-.003-2.826-.061-.397-.027-.806-.148-.881-.181-.168-.072-.518-.329-.379-.823z"/><path fill="#FFDC5D" d="M15.667 10.389v4.666c0 .312 1.045 1.093 2.333 1.093 1.288 0 2.333-.819 2.333-1.093v-4.666h-4.666z"/><path fill="#FFDC5D" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#C1694F" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".495"/><circle fill="#662113" cx="20.5" cy="8.5" r=".495"/><path fill="#C1694F" d="M17.009 10.076h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#FFAC33" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#FFDC5D" d="M12.497 16.024c-.674-.134-1.336 1.309-1.47 1.983L9.846 23.02c-1.619 1.166-1.57 3.454-2.808 4.512-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.006-.017.007-.029.013-.046.097-.138.169-.294.204-.469l1.266-6.375c.135-.674-.308-1.335-.982-1.469zm17.59 13.588c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.246-1.064-1.133-3.377-2.781-4.535l-1.176-4.99c-.134-.674-.795-2.117-1.47-1.983-.674.134-1.116.795-.983 1.47l1.266 6.375c.038.191.125.355.236.501l.004.014c.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.29-.21.226-1.044-.181-1.628z"/><path fill="#FFDC5D" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#F9CA55" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#F9CA55" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#FFDC5D" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#77B255" d="M22.543 15h-9.06c-2.562 0-2.943 4.394-2.943 4.394l2.458.535s.31 3.589.271 5.27c-.038 1.682-.27 2.801-.27 2.801s1.912.394 5 .394 5-.394 5-.394-.349-1.606-.349-2.978.349-5.093.349-5.093l2.458-.535S25.105 15 22.543 15z"/><path fill="#FFDC5D" d="M15.667 10.389v4.666c0 .312.553 1.488 2.333 1.488 1.781 0 2.333-1.214 2.333-1.488v-4.666h-4.666z"/><path fill="#F9CA55" d="M20.333 9.774l-4.666.022v4.644s2.333 1.167 4.666 0V9.774z"/><path fill="#FFDC5D" d="M22.954 3.966h-9.908v5.433c0 2.737 2.218 4.954 4.954 4.954 2.736 0 4.954-2.217 4.954-4.954V3.966z"/><path fill="#C1694F" d="M19.982 12.057h-3.964s0 .991 1.982.991 1.982-.991 1.982-.991zM16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm-4.241 1.326h1.982s0 .991-.991.991-.991-.991-.991-.991z"/><path fill="#FFAC33" d="M18 .953c3.385 0 5.5 2.579 5.5 4.728 0 2.149-.423 3.009-.846 2.149l-.846-1.719s-2.538 0-3.384-.86c0 0 1.269 2.579-1.269 0 0 0 .423 1.72-2.115-.429 0 0-1.269.86-1.692 3.008-.117.597-.846 0-.846-2.149C12.5 3.532 14.192.953 18 .953"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9d8.svg b/public/emoji/1f9d8.svg index 241b3d23a..8fcb70fb6 100644 --- a/public/emoji/1f9d8.svg +++ b/public/emoji/1f9d8.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M5.001 28c-.367 0-.72-.202-.896-.553-.247-.494-.047-1.095.447-1.342l5.544-2.772.917-5.498c.091-.544.605-.913 1.151-.822.544.091.913.606.822 1.151l-1 6c-.053.315-.253.587-.539.73l-6 3c-.143.072-.296.106-.446.106zm25.998 0c-.15 0-.303-.034-.446-.105l-6-3c-.286-.144-.486-.415-.539-.73l-1-6c-.091-.545.277-1.06.822-1.151.543-.09 1.061.277 1.15.822l.916 5.498 5.545 2.772c.494.247.694.848.447 1.342-.175.35-.528.552-.895.552z"/><path fill="#4289C1" d="M13 27.25h10v4.5H13z"/><path fill="#FFAC33" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M23 15H13c-2.562 0-2.458 4-2.458 4H13v9h10v-9h2.458s.104-4-2.458-4z"/><path fill="#FFDC5D" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#FFDC5D" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="15.5" cy="8.5" r=".5"/><circle fill="#662113" cx="20.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M17 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFDC5D" d="M8.417 34.556c.308.769 1.181 1.142 1.95.834l12.395-3.803s3.49.701 3.351-1.294c-.106-1.52-2.586-2.245-4.467-1.491-1.881.754-12.395 3.803-12.395 3.803-.768.309-1.142 1.182-.834 1.951z"/><path fill="#F9CA55" d="M25.756 30.608c-.212-.689-2.021-.422-2.456-.303-.435.12-12.47 3.844-13.453 4.16-.924.296-.364 1.06.087 1.026.033-.008.066-.01.099-.02L21.8 31.884c.877-.274 1.884-.166 2.719-.244.396-.037.802-.167.877-.202.166-.075.511-.34.36-.83z"/><path fill="#FFDC5D" d="M27.583 34.556c-.308.769-1.181 1.142-1.95.834l-12.395-3.803s-3.49.701-3.351-1.294c.106-1.52 2.586-2.245 4.467-1.491 1.881.754 12.395 3.803 12.395 3.803.768.309 1.142 1.182.834 1.951z"/><path fill="#F9CA55" d="M10.244 30.608c.212-.689 2.021-.422 2.456-.303.435.12 12.47 3.844 13.453 4.16.924.296.364 1.06-.087 1.026-.033-.008-.066-.01-.099-.02L14.2 31.884c-.877-.274-1.884-.166-2.719-.244-.396-.037-.802-.167-.877-.202-.166-.075-.511-.34-.36-.83z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M28.632 30.563c-.178-1.426-1.568-1.931-2.257-1.931-.884 0-2.992 1.106-3.375-.585l-.037-.183-9.91-.012-.053.184c-.375 1.708-2.492.596-3.378.596-.689 0-2.079.505-2.257 1.931C7.365 30.563 14.13 33 18 33c3.873 0 10.632-2.437 10.632-2.437z"/><path fill="#FFDC5D" d="M12.165 17.014c-.546-.091-1.06.278-1.151.822l-.825 4.947c-.071.043-.142.087-.217.135-1.762 1.131-1.661 3.529-2.934 4.616-.171.146-.949.766-1.203 1.325-.336.738.22.444.045.695-.406.584-.414 1.478-.127 1.686l.373.1c.557.403 2.081-1.336 2.281-2.302.3-1.443 3.075-3.25 3.589-4.653.162-.444.224-.787.173-1.074l1.106-5.145c.091-.546-.566-1.062-1.11-1.152zm17.922 12.598c-.175-.251.437-.016.101-.754-.255-.56-1.089-1.179-1.259-1.325-1.273-1.087-1.116-3.485-2.878-4.616-.083-.054-.164-.104-.243-.151l-.822-4.93c-.09-.544-.607-.912-1.15-.822-.545.091-1.235.606-1.145 1.151l1.151 5.222c-.028.272.036.592.184.998.513 1.402 3.289 3.209 3.589 4.653.201.967 1.725 2.706 2.281 2.302l.373-.1c.289-.21.225-1.044-.182-1.628z"/><path fill="#FFDC5D" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s-8.287-1.515-9.713-2.465c-.658-.439-1.662-1.54-1.396-2.465.263-.913 1.139-1.429 2.198-1.455 2.065-.051 6 2.941 8.851 4.04.518.2.948-.052 1.604.119.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.094.974-.861 1.395-1.901 1.484z"/><path fill="#F9CA55" d="M22.757 35.82c-1.04.089-2.02-.208-3 0-.475.03-.802 0-1.277-.416s.889-2.399 1.545-2.228c.683.178 2.317-.555 3.149-.446 1.129.149 1.574.683 1.485 1.604-.095.976-.862 1.397-1.902 1.486zm-11.561-2.614c.238-.624 1.188-.891 1.634-.95s1.188.208 1.693.416c.505.208 1.118.234 1.504.085.386-.149.668-.124.958 0 .078.033.423 0 .546-.067 0 0 1.79.616 1.136.824-.653.208-5.421.524-6.074.524s-1.397-.832-1.397-.832z"/><path fill="#F9CA55" d="M7.371 30.474c.006-.02.016-.037.022-.056.201.762.76 1.66 1.401 1.898.802.297 7.247 2.198 8.049 2.287.802.089 1.99.208 2.228.386.238.178.861.238 1.366.119.505-.119 1.782.356 2.436.208.653-.148 1.604-.445 1.782-1.247.003-.015.007-.022.011-.034.004.096.003.195-.007.302-.094.975-.861 1.396-1.901 1.485s-2.02-.208-3 0c-.475.03-.802 0-1.277-.416-.475-.416-8.287-1.515-9.713-2.465-.659-.441-1.663-1.543-1.397-2.467z"/><path fill="#FFDC5D" d="M13.243 35.82c1.04.089 2.02-.208 3 0 .475.03.802 0 1.277-.416s8.287-1.515 9.713-2.465c.658-.439 1.662-1.54 1.396-2.465-.263-.913-1.139-1.429-2.198-1.455-2.065-.051-6 2.941-8.851 4.04-.518.2-.948-.052-1.604.119-.683.178-2.317-.555-3.149-.446-1.129.149-1.574.683-1.485 1.604.094.974.861 1.395 1.901 1.484z"/><path fill="#FFAC33" d="M19 0c-1.264 0-2.435.393-3.402 1.061C15.402 1.031 15.205 1 15 1c-2.209 0-4 1.791-4 4v4c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C25 2.687 22.314 0 19 0z"/><path fill="#9268CA" d="M22.543 15h-9.089c-2.562 0-2.912 4-2.912 4l2.458.632s.454 2.376.454 4.337S13 28 13 28s2.031.335 5 .335S23 28 23 28s-.487-2.071-.487-4.061.487-4.307.487-4.307L25.458 19s-.353-4-2.915-4z"/><path fill="#FFDC5D" d="M16 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#F9CA55" d="M20 11l-4 .019V15s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M16 3s-.011 3.285-3 3.894V9c0 2.762 2.238 5 5 5s5-2.237 5-5V6.968C16.019 6.644 16 3 16 3z"/><path fill="#DF1F32" d="M20 12h-4s0 1 2 1 2-1 2-1z"/><path fill="#C1694F" d="M16.25 8.75h-1.5c-.137 0-.25-.113-.25-.25s.113-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zm5 0h-1.5c-.138 0-.25-.113-.25-.25s.112-.25.25-.25h1.5c.138 0 .25.113.25.25s-.112.25-.25.25zM17 10h2s0 1-1 1-1-1-1-1z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fb-200d-2640-fe0f.svg b/public/emoji/1f9dc-1f3fb-200d-2640-fe0f.svg index 3e624eb93..e211b06a1 100644 --- a/public/emoji/1f9dc-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/1f9dc-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#F7DECE" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#F7DECE" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#F7DECE" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#292F33" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#F7DECE" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#F7DECE" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#EEC2AD" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#F7DECE" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#C1694F" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fb-200d-2642-fe0f.svg b/public/emoji/1f9dc-1f3fb-200d-2642-fe0f.svg index d2167b4ae..4263e6a86 100644 --- a/public/emoji/1f9dc-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/1f9dc-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-1.718-3.444.012-.009c-.171-.34-.336-.669-.502-.972l-.011-.023c-.002-.003-.005-.005-.006-.008-.457-.834-.924-1.455-1.549-1.455H11.044c-.365.004-.688.167-.93.474l-.797 1.01c-.25.289-.494.597-.713.904l-5.199 6.589c-.426.54-.333 1.33.207 1.756s1.33.333 1.756-.207l5.821-7.378.811 6.856-.725 3.971h9.387L20 24.004l.77-7.128 2.664 5.34c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.328.784-1.097.478-1.708z"/><path fill="#F7DECE" d="M14 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#F7DECE" d="M21 5l-10-.952V9c0 2.762 2.238 5 5 5s5-2.237 5-5V5z"/><path fill="#C1694F" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#292F33" d="M16 1.043c3.433 0 5.578 2.533 5.578 4.644s-.429 2.955-.858 2.111l-.858-1.688s-2.574 0-3.432-.845c0 0 1.287 2.533-1.287 0 0 0 .429 1.689-2.145-.422 0 0-1.287.844-1.716 2.955-.119.586-.858 0-.858-2.111-.002-2.111 1.714-4.644 5.576-4.644"/><path fill="#3B88C3" d="M10 31h8c1.65 0 3-1.35 3-3v-1c0-1.1-.9-2-2-2h-9c-1.65 0-3 1.35-3 3s1.35 3 3 3z"/><path fill="#3B88C3" d="M7.278 26.749C6.235 29.211 7.468 32.826 11 34c1.979.658 6.075 1.291 9.662.658 4.291-.757 7.397-3.473 7.397-3.473l-1.725-1.492s-2.22.764-4.334.861c-3.894.178-8.488-2.926-11-3.554-2.878-.719-3.722-.251-3.722-.251z"/><path fill="#3B88C3" d="M25.756 31.674c-.651-.742-.535-2.842.968-4.161 2.254-1.98 2.912-3.982 3.664-4.642 0 0 .88 3.988-1.374 5.968 0 0 3.832-2.537 6.382-1.701-3.719 1.581-3.803 4.089-6.075 4.905-1.882.675-2.913.373-3.565-.369z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M16.703 13.234c-2.061-.088-4.3-.078-4.3-.078s-2.24-.01-4.3.078c-.501.021-.979.233-1.35.456-.439.264-.728.544-.728.544.105 1.368 1.219 3.286 1.368 3.564.418.78.922 4.264.922 4.264.114 1.201 0 2 0 2h8.176s-.114-.799 0-2c0 0 .504-3.484.922-4.264.149-.278 1.263-2.196 1.368-3.564 0 0-.984-.953-2.078-1z"/><path fill="#E0AA94" d="M14.985 18.332c-1.131 0-1.968-.354-2.014-.374-.126-.055-.185-.202-.13-.328.054-.126.2-.187.328-.131.014.006 1.35.565 2.857.215.137-.029.269.053.3.187.031.134-.053.269-.187.3-.403.095-.793.131-1.154.131zm-5.324 0c-.36 0-.75-.036-1.155-.13-.134-.031-.218-.166-.187-.3.031-.134.164-.216.3-.187 1.516.353 2.844-.209 2.857-.215.127-.056.274.003.329.13s-.004.274-.13.329c-.047.02-.883.373-2.014.373z"/><path fill="#184F87" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#4292E0" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#184F87" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#F7DECE" d="M7.482 17.392c-1.878 1.035-3.267 2.429-3.38 2.58-.477.637-.324 1.509-.251 2.345.086.995.112 2.231.595 2.908.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.348-3.094-1.622-4.431-.148-.722-.186-1.381.379-2.263.621-.971 1.939-2.945 3.117-3.885.989-.789 1.564-1.189 1.914-1.38 1.57-.857 1.389 3.338.729 3.702zm22.917-6.74c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.462-1.74-3.322-2.833-1.124-.661-2.733-.866-2.733-.866-.807.662.226 3.019.812 3.647.981 1.051 4.341 2.844 5.388 3.31s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zm-19.86-.361v3.727c0 1.029.834 1.864 1.864 1.864 1.029 0 1.864-.834 1.864-1.864v-3.727h-3.728z"/><path fill="#EEC2AD" d="M14.267 9.36l-3.727.017v3.71s1.864.932 3.727 0V9.36z"/><path fill="#F7DECE" d="M17.062 4.701l-9.318-.827v4.554c0 2.574 2.086 4.659 4.659 4.659s4.659-2.085 4.659-4.659V4.701z"/><path fill="#C1694F" d="M14.267 11.223h-3.728s0 .932 1.864.932 1.864-.932 1.864-.932z"/><circle fill="#662113" cx="10.073" cy="7.962" r=".466"/><circle fill="#662113" cx="14.733" cy="7.962" r=".466"/><path fill="#C1694F" d="M11.471 9.36h1.864s0 .932-.932.932-.932-.932-.932-.932z"/><path fill="#4292E0" d="M12.403 1.013c3.199 0 5.198 2.36 5.198 4.327s-.4 2.754-.8 1.967l-.8-1.573s-2.399 0-3.198-.787c0 0 1.2 2.36-1.2 0 0 0 .4 1.574-1.999-.393 0 0-1.2.787-1.599 2.753-.111.546-.8 0-.8-1.967 0-1.966 1.6-4.327 5.198-4.327"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fb.svg b/public/emoji/1f9dc-1f3fb.svg index 3e624eb93..e211b06a1 100644 --- a/public/emoji/1f9dc-1f3fb.svg +++ b/public/emoji/1f9dc-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#F7DECE" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#F7DECE" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#EEC2AD" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#F7DECE" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#292F33" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#F7DECE" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#F7DECE" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#EEC2AD" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#F7DECE" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#C1694F" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fc-200d-2640-fe0f.svg b/public/emoji/1f9dc-1f3fc-200d-2640-fe0f.svg index c0c2c6212..de8fa7329 100644 --- a/public/emoji/1f9dc-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/1f9dc-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#F3D2A2" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#F3D2A2" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#E2C196" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#FFE51E" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#F3D2A2" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#F3D2A2" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#E2C196" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#F3D2A2" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#C1694F" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fc-200d-2642-fe0f.svg b/public/emoji/1f9dc-1f3fc-200d-2642-fe0f.svg index 7a7ea8b2a..18637d961 100644 --- a/public/emoji/1f9dc-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/1f9dc-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-1.718-3.444.012-.009c-.171-.34-.336-.669-.502-.972l-.011-.023c-.002-.003-.005-.005-.006-.008-.457-.834-.924-1.455-1.549-1.455H11.044c-.365.004-.688.167-.93.474l-.797 1.01c-.25.289-.494.597-.713.904l-5.199 6.589c-.426.54-.333 1.33.207 1.756s1.33.333 1.756-.207l5.821-7.378.811 6.856-.725 3.971h9.387L20 24.004l.77-7.128 2.664 5.34c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.328.784-1.097.478-1.708z"/><path fill="#F3D2A2" d="M14 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#E2C196" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M21 5l-10-.952V9c0 2.762 2.238 5 5 5s5-2.237 5-5V5z"/><path fill="#C1694F" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFE51E" d="M16 1.043c3.433 0 5.578 2.533 5.578 4.644s-.429 2.955-.858 2.111l-.858-1.688s-2.574 0-3.432-.845c0 0 1.287 2.533-1.287 0 0 0 .429 1.689-2.145-.422 0 0-1.287.844-1.716 2.955-.119.586-.858 0-.858-2.111-.002-2.111 1.714-4.644 5.576-4.644"/><path fill="#3B88C3" d="M10 31h8c1.65 0 3-1.35 3-3v-1c0-1.1-.9-2-2-2h-9c-1.65 0-3 1.35-3 3s1.35 3 3 3z"/><path fill="#3B88C3" d="M7.278 26.749C6.235 29.211 7.468 32.826 11 34c1.979.658 6.075 1.291 9.662.658 4.291-.757 7.397-3.473 7.397-3.473l-1.725-1.492s-2.22.764-4.334.861c-3.894.178-8.488-2.926-11-3.554-2.878-.719-3.722-.251-3.722-.251z"/><path fill="#3B88C3" d="M25.756 31.674c-.651-.742-.535-2.842.968-4.161 2.254-1.98 2.912-3.982 3.664-4.642 0 0 .88 3.988-1.374 5.968 0 0 3.832-2.537 6.382-1.701-3.719 1.581-3.803 4.089-6.075 4.905-1.882.675-2.913.373-3.565-.369z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M16.703 13.234c-2.061-.088-4.3-.078-4.3-.078s-2.24-.01-4.3.078c-.501.021-.979.233-1.35.456-.439.264-.728.544-.728.544.105 1.368 1.219 3.286 1.368 3.564.418.78.922 4.264.922 4.264.114 1.201 0 2 0 2h8.176s-.114-.799 0-2c0 0 .504-3.484.922-4.264.149-.278 1.263-2.196 1.368-3.564 0 0-.984-.953-2.078-1z"/><path fill="#D2A077" d="M14.985 18.332c-1.131 0-1.968-.354-2.014-.374-.126-.055-.185-.202-.13-.328.054-.126.2-.187.328-.131.014.006 1.35.565 2.857.215.137-.029.269.053.3.187.031.134-.053.269-.187.3-.403.095-.793.131-1.154.131zm-5.324 0c-.36 0-.75-.036-1.155-.13-.134-.031-.218-.166-.187-.3.031-.134.164-.216.3-.187 1.516.353 2.844-.209 2.857-.215.127-.056.274.003.329.13s-.004.274-.13.329c-.047.02-.883.373-2.014.373z"/><path fill="#184F87" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#4292E0" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#184F87" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#F3D2A2" d="M7.482 17.392c-1.878 1.035-3.267 2.429-3.38 2.58-.477.637-.324 1.509-.251 2.345.086.995.112 2.231.595 2.908.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.348-3.094-1.622-4.431-.148-.722-.186-1.381.379-2.263.621-.971 1.939-2.945 3.117-3.885.989-.789 1.564-1.189 1.914-1.38 1.57-.857 1.389 3.338.729 3.702zm22.917-6.74c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.462-1.74-3.322-2.833-1.124-.661-2.733-.866-2.733-.866-.807.662.226 3.019.812 3.647.981 1.051 4.341 2.844 5.388 3.31s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zm-19.86-.361v3.727c0 1.029.834 1.864 1.864 1.864 1.029 0 1.864-.834 1.864-1.864v-3.727h-3.728z"/><path fill="#E2C196" d="M14.267 9.36l-3.727.017v3.71s1.864.932 3.727 0V9.36z"/><path fill="#F3D2A2" d="M17.062 4.701l-9.318-.827v4.554c0 2.574 2.086 4.659 4.659 4.659s4.659-2.085 4.659-4.659V4.701z"/><path fill="#C1694F" d="M14.267 11.223h-3.728s0 .932 1.864.932 1.864-.932 1.864-.932z"/><circle fill="#662113" cx="10.073" cy="7.962" r=".466"/><circle fill="#662113" cx="14.733" cy="7.962" r=".466"/><path fill="#C1694F" d="M11.471 9.36h1.864s0 .932-.932.932-.932-.932-.932-.932z"/><path fill="#4292E0" d="M12.403 1.013c3.199 0 5.198 2.36 5.198 4.327s-.4 2.754-.8 1.967l-.8-1.573s-2.399 0-3.198-.787c0 0 1.2 2.36-1.2 0 0 0 .4 1.574-1.999-.393 0 0-1.2.787-1.599 2.753-.111.546-.8 0-.8-1.967 0-1.966 1.6-4.327 5.198-4.327"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fc.svg b/public/emoji/1f9dc-1f3fc.svg index c0c2c6212..de8fa7329 100644 --- a/public/emoji/1f9dc-1f3fc.svg +++ b/public/emoji/1f9dc-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE51E" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#F3D2A2" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#F3D2A2" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#E2C196" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#F3D2A2" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#FFE51E" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#F3D2A2" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#F3D2A2" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#E2C196" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#F3D2A2" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#C1694F" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fd-200d-2640-fe0f.svg b/public/emoji/1f9dc-1f3fd-200d-2640-fe0f.svg index 04bda3d0b..0ad162b31 100644 --- a/public/emoji/1f9dc-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/1f9dc-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#D5AB88" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#D5AB88" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#CC9B7A" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#D5AB88" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#963B22" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#D4AB88" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#D4AB88" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#CC9B7A" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#D4AB88" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#C1694F" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fd-200d-2642-fe0f.svg b/public/emoji/1f9dc-1f3fd-200d-2642-fe0f.svg index 8f5f00424..727971080 100644 --- a/public/emoji/1f9dc-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/1f9dc-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-1.718-3.444.012-.009c-.171-.34-.336-.669-.502-.972l-.011-.023c-.002-.003-.005-.005-.006-.008-.457-.834-.924-1.455-1.549-1.455H11.044c-.365.004-.688.167-.93.474l-.797 1.01c-.25.289-.494.597-.713.904l-5.199 6.589c-.426.54-.333 1.33.207 1.756s1.33.333 1.756-.207l5.821-7.378.811 6.856-.725 3.971h9.387L20 24.004l.77-7.128 2.664 5.34c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.328.784-1.097.478-1.708z"/><path fill="#D5AB88" d="M14 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#CC9B7A" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#D5AB88" d="M21 5L11 3.993V9c0 2.762 2.238 5 5 5s5-2.237 5-5V5z"/><path fill="#C1694F" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#963B22" d="M16 1.043c3.433 0 5.578 2.533 5.578 4.644s-.429 2.955-.858 2.111l-.858-1.688s-2.574 0-3.432-.845c0 0 1.287 2.533-1.287 0 0 0 .429 1.689-2.145-.422 0 0-1.287.844-1.716 2.955-.119.586-.858 0-.858-2.111-.002-2.111 1.714-4.644 5.576-4.644"/><path fill="#3B88C3" d="M10 31h8c1.65 0 3-1.35 3-3v-1c0-1.1-.9-2-2-2h-9c-1.65 0-3 1.35-3 3s1.35 3 3 3z"/><path fill="#3B88C3" d="M7.278 26.749C6.235 29.211 7.468 32.826 11 34c1.979.658 6.075 1.291 9.662.658 4.291-.757 7.397-3.473 7.397-3.473l-1.725-1.492s-2.22.764-4.334.861c-3.894.178-8.488-2.926-11-3.554-2.878-.719-3.722-.251-3.722-.251z"/><path fill="#3B88C3" d="M25.756 31.674c-.651-.742-.535-2.842.968-4.161 2.254-1.98 2.912-3.982 3.664-4.642 0 0 .88 3.988-1.374 5.968 0 0 3.832-2.537 6.382-1.701-3.719 1.581-3.803 4.089-6.075 4.905-1.882.675-2.913.373-3.565-.369z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M16.703 13.234c-2.061-.088-4.3-.078-4.3-.078s-2.24-.01-4.3.078c-.501.021-.979.233-1.35.456-.439.264-.728.544-.728.544.105 1.368 1.219 3.286 1.368 3.564.418.78.922 4.264.922 4.264.114 1.201 0 2 0 2h8.176s-.114-.799 0-2c0 0 .504-3.484.922-4.264.149-.278 1.263-2.196 1.368-3.564 0 0-.984-.953-2.078-1z"/><path fill="#B78B60" d="M14.985 18.332c-1.131 0-1.968-.354-2.014-.374-.126-.055-.185-.202-.13-.328.054-.126.2-.187.328-.131.014.006 1.35.565 2.857.215.137-.029.269.053.3.187.031.134-.053.269-.187.3-.403.095-.793.131-1.154.131zm-5.324 0c-.36 0-.75-.036-1.155-.13-.134-.031-.218-.166-.187-.3.031-.134.164-.216.3-.187 1.516.353 2.844-.209 2.857-.215.127-.056.274.003.329.13s-.004.274-.13.329c-.047.02-.883.373-2.014.373z"/><path fill="#184F87" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#4292E0" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#184F87" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#D4AB88" d="M7.482 17.392c-1.878 1.035-3.267 2.429-3.38 2.58-.477.637-.324 1.509-.251 2.345.086.995.112 2.231.595 2.908.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.348-3.094-1.622-4.431-.148-.722-.186-1.381.379-2.263.621-.971 1.939-2.945 3.117-3.885.989-.789 1.564-1.189 1.914-1.38 1.57-.857 1.389 3.338.729 3.702zm22.917-6.74c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.462-1.74-3.322-2.833-1.124-.661-2.733-.866-2.733-.866-.807.662.226 3.019.812 3.647.981 1.051 4.341 2.844 5.388 3.31s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zm-19.86-.361v3.727c0 1.029.834 1.864 1.864 1.864 1.029 0 1.864-.834 1.864-1.864v-3.727h-3.728z"/><path fill="#CC9B7A" d="M14.267 9.36l-3.727.017v3.71s1.864.932 3.727 0V9.36z"/><path fill="#D4AB88" d="M17.062 4.701l-9.318-.827v4.554c0 2.574 2.086 4.659 4.659 4.659s4.659-2.085 4.659-4.659V4.701z"/><path fill="#C1694F" d="M14.267 11.223h-3.728s0 .932 1.864.932 1.864-.932 1.864-.932z"/><circle fill="#662113" cx="10.073" cy="7.962" r=".466"/><circle fill="#662113" cx="14.733" cy="7.962" r=".466"/><path fill="#C1694F" d="M11.471 9.36h1.864s0 .932-.932.932-.932-.932-.932-.932z"/><path fill="#4292E0" d="M12.403 1.013c3.199 0 5.198 2.36 5.198 4.327s-.4 2.754-.8 1.967l-.8-1.573s-2.399 0-3.198-.787c0 0 1.2 2.36-1.2 0 0 0 .4 1.574-1.999-.393 0 0-1.2.787-1.599 2.753-.111.546-.8 0-.8-1.967 0-1.966 1.6-4.327 5.198-4.327"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fd.svg b/public/emoji/1f9dc-1f3fd.svg index 04bda3d0b..0ad162b31 100644 --- a/public/emoji/1f9dc-1f3fd.svg +++ b/public/emoji/1f9dc-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#963B22" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#D5AB88" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#D5AB88" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#CC9B7A" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#D5AB88" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#963B22" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#D4AB88" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#D4AB88" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#CC9B7A" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#D4AB88" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#C1694F" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fe-200d-2640-fe0f.svg b/public/emoji/1f9dc-1f3fe-200d-2640-fe0f.svg index eb04d4715..5f71af9d0 100644 --- a/public/emoji/1f9dc-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/1f9dc-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#AF7E57" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#AF7E57" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#9B6A49" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#AF7E57" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#60352A" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#915A34" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#AF7E57" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#AF7E57" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#9B6A49" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#AF7E57" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#915A34" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fe-200d-2642-fe0f.svg b/public/emoji/1f9dc-1f3fe-200d-2642-fe0f.svg index bc61ced36..faeb2fa9e 100644 --- a/public/emoji/1f9dc-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/1f9dc-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-1.718-3.444.012-.009c-.171-.34-.336-.669-.502-.972l-.011-.023c-.002-.003-.005-.005-.006-.008-.457-.834-.924-1.455-1.549-1.455H11.044c-.365.004-.688.167-.93.474l-.797 1.01c-.25.289-.494.597-.713.904l-5.199 6.589c-.426.54-.333 1.33.207 1.756s1.33.333 1.756-.207l5.821-7.378.811 6.856-.725 3.971h9.387L20 24.004l.77-7.128 2.664 5.34c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.328.784-1.097.478-1.708z"/><path fill="#AF7E57" d="M14 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#9B6A49" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#AF7E57" d="M21 5l-10-.967V9c0 2.762 2.238 5 5 5s5-2.237 5-5V5z"/><path fill="#915A34" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#915A34" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#60352A" d="M16 1.043c3.433 0 5.578 2.533 5.578 4.644s-.429 2.955-.858 2.111l-.858-1.688s-2.574 0-3.432-.845c0 0 1.287 2.533-1.287 0 0 0 .429 1.689-2.145-.422 0 0-1.287.844-1.716 2.955-.119.586-.858 0-.858-2.111-.002-2.111 1.714-4.644 5.576-4.644"/><path fill="#3B88C3" d="M10 31h8c1.65 0 3-1.35 3-3v-1c0-1.1-.9-2-2-2h-9c-1.65 0-3 1.35-3 3s1.35 3 3 3z"/><path fill="#3B88C3" d="M7.278 26.749C6.235 29.211 7.468 32.826 11 34c1.979.658 6.075 1.291 9.662.658 4.291-.757 7.397-3.473 7.397-3.473l-1.725-1.492s-2.22.764-4.334.861c-3.894.178-8.488-2.926-11-3.554-2.878-.719-3.722-.251-3.722-.251z"/><path fill="#3B88C3" d="M25.756 31.674c-.651-.742-.535-2.842.968-4.161 2.254-1.98 2.912-3.982 3.664-4.642 0 0 .88 3.988-1.374 5.968 0 0 3.832-2.537 6.382-1.701-3.719 1.581-3.803 4.089-6.075 4.905-1.882.675-2.913.373-3.565-.369z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M16.703 13.234c-2.061-.088-4.3-.078-4.3-.078s-2.24-.01-4.3.078c-.501.021-.979.233-1.35.456-.439.264-.728.544-.728.544.105 1.368 1.219 3.286 1.368 3.564.418.78.922 4.264.922 4.264.114 1.201 0 2 0 2h8.176s-.114-.799 0-2c0 0 .504-3.484.922-4.264.149-.278 1.263-2.196 1.368-3.564 0 0-.984-.953-2.078-1z"/><path fill="#90603E" d="M14.985 18.332c-1.131 0-1.968-.354-2.014-.374-.126-.055-.185-.202-.13-.328.054-.126.2-.187.328-.131.014.006 1.35.565 2.857.215.137-.029.269.053.3.187.031.134-.053.269-.187.3-.403.095-.793.131-1.154.131zm-5.324 0c-.36 0-.75-.036-1.155-.13-.134-.031-.218-.166-.187-.3.031-.134.164-.216.3-.187 1.516.353 2.844-.209 2.857-.215.127-.056.274.003.329.13s-.004.274-.13.329c-.047.02-.883.373-2.014.373z"/><path fill="#184F87" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#4292E0" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#184F87" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#AF7E57" d="M7.482 17.392c-1.878 1.035-3.267 2.429-3.38 2.58-.477.637-.324 1.509-.251 2.345.086.995.112 2.231.595 2.908.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.348-3.094-1.622-4.431-.148-.722-.186-1.381.379-2.263.621-.971 1.939-2.945 3.117-3.885.989-.789 1.564-1.189 1.914-1.38 1.57-.857 1.389 3.338.729 3.702zm22.917-6.74c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.462-1.74-3.322-2.833-1.124-.661-2.733-.866-2.733-.866-.807.662.226 3.019.812 3.647.981 1.051 4.341 2.844 5.388 3.31s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zm-19.86-.361v3.727c0 1.029.834 1.864 1.864 1.864 1.029 0 1.864-.834 1.864-1.864v-3.727h-3.728z"/><path fill="#9B6A49" d="M14.267 9.36l-3.727.017v3.71s1.864.932 3.727 0V9.36z"/><path fill="#AF7E57" d="M17.062 4.701l-9.318-.827v4.554c0 2.574 2.086 4.659 4.659 4.659s4.659-2.085 4.659-4.659V4.701z"/><path fill="#915A34" d="M14.267 11.223h-3.728s0 .932 1.864.932 1.864-.932 1.864-.932z"/><circle fill="#662113" cx="10.073" cy="7.962" r=".466"/><circle fill="#662113" cx="14.733" cy="7.962" r=".466"/><path fill="#915A34" d="M11.471 9.36h1.864s0 .932-.932.932-.932-.932-.932-.932z"/><path fill="#4292E0" d="M12.403 1.013c3.199 0 5.198 2.36 5.198 4.327s-.4 2.754-.8 1.967l-.8-1.573s-2.399 0-3.198-.787c0 0 1.2 2.36-1.2 0 0 0 .4 1.574-1.999-.393 0 0-1.2.787-1.599 2.753-.111.546-.8 0-.8-1.967 0-1.966 1.6-4.327 5.198-4.327"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3fe.svg b/public/emoji/1f9dc-1f3fe.svg index eb04d4715..5f71af9d0 100644 --- a/public/emoji/1f9dc-1f3fe.svg +++ b/public/emoji/1f9dc-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#60352A" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#AF7E57" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#AF7E57" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#9B6A49" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#AF7E57" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#60352A" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#915A34" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#AF7E57" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#AF7E57" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#9B6A49" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#AF7E57" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#915A34" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3ff-200d-2640-fe0f.svg b/public/emoji/1f9dc-1f3ff-200d-2640-fe0f.svg index 2fc30a85c..f2932edee 100644 --- a/public/emoji/1f9dc-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/1f9dc-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#7C533E" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#7C533E" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#664131" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#7C533E" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#0B0200" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="13.5" cy="8.5" r=".5"/><circle cx="18.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#7C533E" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#7C533E" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#664131" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#7C533E" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle cx="10.241" cy="7.994" r=".464"/><circle cx="14.884" cy="7.994" r=".464"/><path fill="#3D2E24" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3ff-200d-2642-fe0f.svg b/public/emoji/1f9dc-1f3ff-200d-2642-fe0f.svg index d671d743e..2d28d8d39 100644 --- a/public/emoji/1f9dc-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/1f9dc-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-1.718-3.444.012-.009c-.171-.34-.336-.669-.502-.972l-.011-.023c-.002-.003-.005-.005-.006-.008-.457-.834-.924-1.455-1.549-1.455H11.044c-.365.004-.688.167-.93.474l-.797 1.01c-.25.289-.494.597-.713.904l-5.199 6.589c-.426.54-.333 1.33.207 1.756s1.33.333 1.756-.207l5.821-7.378.811 6.856-.725 3.971h9.387L20 24.004l.77-7.128 2.664 5.34c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.328.784-1.097.478-1.708z"/><path fill="#7C533E" d="M14 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#664131" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#7C533E" d="M21 5l-10-.887V9c0 2.762 2.238 5 5 5s5-2.237 5-5V5z"/><path fill="#3D2E24" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="13.5" cy="8.5" r=".5"/><circle cx="18.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#0B0200" d="M16 1.043c3.433 0 5.578 2.533 5.578 4.644s-.429 2.955-.858 2.111l-.858-1.688s-2.574 0-3.432-.845c0 0 1.287 2.533-1.287 0 0 0 .429 1.689-2.145-.422 0 0-1.287.844-1.716 2.955-.119.586-.858 0-.858-2.111-.002-2.111 1.714-4.644 5.576-4.644"/><path fill="#3B88C3" d="M10 31h8c1.65 0 3-1.35 3-3v-1c0-1.1-.9-2-2-2h-9c-1.65 0-3 1.35-3 3s1.35 3 3 3z"/><path fill="#3B88C3" d="M7.278 26.749C6.235 29.211 7.468 32.826 11 34c1.979.658 6.075 1.291 9.662.658 4.291-.757 7.397-3.473 7.397-3.473l-1.725-1.492s-2.22.764-4.334.861c-3.894.178-8.488-2.926-11-3.554-2.878-.719-3.722-.251-3.722-.251z"/><path fill="#3B88C3" d="M25.756 31.674c-.651-.742-.535-2.842.968-4.161 2.254-1.98 2.912-3.982 3.664-4.642 0 0 .88 3.988-1.374 5.968 0 0 3.832-2.537 6.382-1.701-3.719 1.581-3.803 4.089-6.075 4.905-1.882.675-2.913.373-3.565-.369z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M16.703 13.234c-2.061-.088-4.3-.078-4.3-.078s-2.24-.01-4.3.078c-.501.021-.979.233-1.35.456-.439.264-.728.544-.728.544.105 1.368 1.219 3.286 1.368 3.564.418.78.922 4.264.922 4.264.114 1.201 0 2 0 2h8.176s-.114-.799 0-2c0 0 .504-3.484.922-4.264.149-.278 1.263-2.196 1.368-3.564 0 0-.984-.953-2.078-1z"/><path fill="#583529" d="M14.985 18.332c-1.131 0-1.968-.354-2.014-.374-.126-.055-.185-.202-.13-.328.054-.126.2-.187.328-.131.014.006 1.35.565 2.857.215.137-.029.269.053.3.187.031.134-.053.269-.187.3-.403.095-.793.131-1.154.131zm-5.324 0c-.36 0-.75-.036-1.155-.13-.134-.031-.218-.166-.187-.3.031-.134.164-.216.3-.187 1.516.353 2.844-.209 2.857-.215.127-.056.274.003.329.13s-.004.274-.13.329c-.047.02-.883.373-2.014.373z"/><path fill="#184F87" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#4292E0" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#184F87" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#7C533E" d="M7.482 17.392c-1.878 1.035-3.267 2.429-3.38 2.58-.477.637-.324 1.509-.251 2.345.086.995.112 2.231.595 2.908.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.348-3.094-1.622-4.431-.148-.722-.186-1.381.379-2.263.621-.971 1.939-2.945 3.117-3.885.989-.789 1.564-1.189 1.914-1.38 1.57-.857 1.389 3.338.729 3.702zm22.917-6.74c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.462-1.74-3.322-2.833-1.124-.661-2.733-.866-2.733-.866-.807.662.226 3.019.812 3.647.981 1.051 4.341 2.844 5.388 3.31s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zm-19.86-.361v3.727c0 1.029.834 1.864 1.864 1.864 1.029 0 1.864-.834 1.864-1.864v-3.727h-3.728z"/><path fill="#664131" d="M14.267 9.36l-3.727.017v3.71s1.864.932 3.727 0V9.36z"/><path fill="#7C533E" d="M17.062 4.701l-9.318-.827v4.554c0 2.574 2.086 4.659 4.659 4.659s4.659-2.085 4.659-4.659V4.701z"/><path fill="#3D2E24" d="M14.267 11.223h-3.728s0 .932 1.864.932 1.864-.932 1.864-.932z"/><circle cx="10.073" cy="7.962" r=".466"/><circle cx="14.733" cy="7.962" r=".466"/><path fill="#3D2E24" d="M11.471 9.36h1.864s0 .932-.932.932-.932-.932-.932-.932z"/><path fill="#4292E0" d="M12.403 1.013c3.199 0 5.198 2.36 5.198 4.327s-.4 2.754-.8 1.967l-.8-1.573s-2.399 0-3.198-.787c0 0 1.2 2.36-1.2 0 0 0 .4 1.574-1.999-.393 0 0-1.2.787-1.599 2.753-.111.546-.8 0-.8-1.967 0-1.966 1.6-4.327 5.198-4.327"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-1f3ff.svg b/public/emoji/1f9dc-1f3ff.svg index 2fc30a85c..f2932edee 100644 --- a/public/emoji/1f9dc-1f3ff.svg +++ b/public/emoji/1f9dc-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#0B0200" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#7C533E" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#7C533E" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#664131" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#7C533E" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#0B0200" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle cx="13.5" cy="8.5" r=".5"/><circle cx="18.5" cy="8.5" r=".5"/><path fill="#3D2E24" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#7C533E" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#7C533E" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#664131" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#7C533E" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle cx="10.241" cy="7.994" r=".464"/><circle cx="14.884" cy="7.994" r=".464"/><path fill="#3D2E24" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-200d-2640-fe0f.svg b/public/emoji/1f9dc-200d-2640-fe0f.svg index 2a7eba55a..750f24335 100644 --- a/public/emoji/1f9dc-200d-2640-fe0f.svg +++ b/public/emoji/1f9dc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#FFDC5D" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#FFDC5D" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#F9CA55" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#FFAC33" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#FFDC5D" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#FFDC5D" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#F9CA55" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#FFDC5D" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#C1694F" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc-200d-2642-fe0f.svg b/public/emoji/1f9dc-200d-2642-fe0f.svg index b003edae9..07111b5dd 100644 --- a/public/emoji/1f9dc-200d-2642-fe0f.svg +++ b/public/emoji/1f9dc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-1.718-3.444.012-.009c-.171-.34-.336-.669-.502-.972l-.011-.023c-.002-.003-.005-.005-.006-.008-.457-.834-.924-1.455-1.549-1.455H11.044c-.365.004-.688.167-.93.474l-.797 1.01c-.25.289-.494.597-.713.904l-5.199 6.589c-.426.54-.333 1.33.207 1.756s1.33.333 1.756-.207l5.821-7.378.811 6.856-.725 3.971h9.387L20 24.004l.77-7.128 2.664 5.34c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.328.784-1.097.478-1.708z"/><path fill="#FFDC5D" d="M14 11v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#F9CA55" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M21 5l-10-.887V9c0 2.762 2.238 5 5 5s5-2.237 5-5V5z"/><path fill="#C1694F" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#FFAC33" d="M16 1.043c3.433 0 5.578 2.533 5.578 4.644s-.429 2.955-.858 2.111l-.858-1.688s-2.574 0-3.432-.845c0 0 1.287 2.533-1.287 0 0 0 .429 1.689-2.145-.422 0 0-1.287.844-1.716 2.955-.119.586-.858 0-.858-2.111-.002-2.111 1.714-4.644 5.576-4.644"/><path fill="#3B88C3" d="M10 31h8c1.65 0 3-1.35 3-3v-1c0-1.1-.9-2-2-2h-9c-1.65 0-3 1.35-3 3s1.35 3 3 3z"/><path fill="#3B88C3" d="M7.278 26.749C6.235 29.211 7.468 32.826 11 34c1.979.658 6.075 1.291 9.662.658 4.291-.757 7.397-3.473 7.397-3.473l-1.725-1.492s-2.22.764-4.334.861c-3.894.178-8.488-2.926-11-3.554-2.878-.719-3.722-.251-3.722-.251z"/><path fill="#3B88C3" d="M25.756 31.674c-.651-.742-.535-2.842.968-4.161 2.254-1.98 2.912-3.982 3.664-4.642 0 0 .88 3.988-1.374 5.968 0 0 3.832-2.537 6.382-1.701-3.719 1.581-3.803 4.089-6.075 4.905-1.882.675-2.913.373-3.565-.369z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M16.703 13.234c-2.061-.088-4.3-.078-4.3-.078s-2.24-.01-4.3.078c-.501.021-.979.233-1.35.456-.439.264-.728.544-.728.544.105 1.368 1.219 3.286 1.368 3.564.418.78.922 4.264.922 4.264.114 1.201 0 2 0 2h8.176s-.114-.799 0-2c0 0 .504-3.484.922-4.264.149-.278 1.263-2.196 1.368-3.564 0 0-.984-.953-2.078-1z"/><path fill="#EF9645" d="M14.985 18.332c-1.131 0-1.968-.354-2.014-.374-.126-.055-.185-.202-.13-.328.054-.126.2-.187.328-.131.014.006 1.35.565 2.857.215.137-.029.269.053.3.187.031.134-.053.269-.187.3-.403.095-.793.131-1.154.131zm-5.324 0c-.36 0-.75-.036-1.155-.13-.134-.031-.218-.166-.187-.3.031-.134.164-.216.3-.187 1.516.353 2.844-.209 2.857-.215.127-.056.274.003.329.13s-.004.274-.13.329c-.047.02-.883.373-2.014.373z"/><path fill="#184F87" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#4292E0" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#184F87" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#FFDC5D" d="M7.482 17.392c-1.878 1.035-3.267 2.429-3.38 2.58-.477.637-.324 1.509-.251 2.345.086.995.112 2.231.595 2.908.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.348-3.094-1.622-4.431-.148-.722-.186-1.381.379-2.263.621-.971 1.939-2.945 3.117-3.885.989-.789 1.564-1.189 1.914-1.38 1.57-.857 1.389 3.338.729 3.702zm22.917-6.74c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.462-1.74-3.322-2.833-1.124-.661-2.733-.866-2.733-.866-.807.662.226 3.019.812 3.647.981 1.051 4.341 2.844 5.388 3.31s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zm-19.86-.361v3.727c0 1.029.834 1.864 1.864 1.864 1.029 0 1.864-.834 1.864-1.864v-3.727h-3.728z"/><path fill="#F9CA55" d="M14.267 9.36l-3.727.017v3.71s1.864.932 3.727 0V9.36z"/><path fill="#FFDC5D" d="M17.062 4.701l-9.318-.827v4.554c0 2.574 2.086 4.659 4.659 4.659s4.659-2.085 4.659-4.659V4.701z"/><path fill="#C1694F" d="M14.267 11.223h-3.728s0 .932 1.864.932 1.864-.932 1.864-.932z"/><circle fill="#662113" cx="10.073" cy="7.962" r=".466"/><circle fill="#662113" cx="14.733" cy="7.962" r=".466"/><path fill="#C1694F" d="M11.471 9.36h1.864s0 .932-.932.932-.932-.932-.932-.932z"/><path fill="#4292E0" d="M12.403 1.013c3.199 0 5.198 2.36 5.198 4.327s-.4 2.754-.8 1.967l-.8-1.573s-2.399 0-3.198-.787c0 0 1.2 2.36-1.2 0 0 0 .4 1.574-1.999-.393 0 0-1.2.787-1.599 2.753-.111.546-.8 0-.8-1.967 0-1.966 1.6-4.327 5.198-4.327"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9dc.svg b/public/emoji/1f9dc.svg index 2a7eba55a..750f24335 100644 --- a/public/emoji/1f9dc.svg +++ b/public/emoji/1f9dc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M17 0c-1.264 0-2.435.393-3.402 1.061C13.401 1.031 13.205 1 13 1c-2.209 0-4 1.791-4 4v6c0 3.866 3.134 7 7 7s7-3.134 7-7V6.001C23 2.687 20.313 0 17 0z"/><path fill="#FFDC5D" d="M29.637 18.636c-.305-.612-1.02-.844-1.589-.515l-3.102 1.79-2.11-4.23c-.346-.929-1.188-1.587-2.175-1.587h-9.49c-1.016 0-1.454.595-1.656.938L3.244 25.656c-.347.588-.184 1.368.363 1.741.174.12.367.182.559.194.412.026.824-.183 1.06-.585l5.539-9.401.51.274 1.173 5.048-1.173 5.048h9.387l-1.173-5.048 1.173-5.048.48-.258 2.292 4.594c.305.612 1.02.844 1.589.515l4.136-2.387c.568-.327.784-1.096.478-1.707z"/><path fill="#E75A70" d="M15.968 17.879s-1.173-1.262-2.347-1.262-2.347 1.262-2.347 1.262l.88 3.786h7.627l.88-3.786s-1.173-1.262-2.347-1.262c-1.172 0-2.346 1.262-2.346 1.262z"/><path fill="#FFDC5D" d="M14 10v4c0 1.104.896 2 2 2s2-.896 2-2v-4h-4z"/><path fill="#F9CA55" d="M18 10l-4 .019V14s2 1 4 0v-4z"/><path fill="#FFDC5D" d="M21 3.05H11v5.973C11 11.773 13.238 14 16 14s5-2.227 5-4.977V3.05z"/><path fill="#FFAC33" d="M14 3s0 4 8 4V3h-8zm0 0s0 4-4 4V3h4z"/><path fill="#DF1F32" d="M18 12h-4s0 1 2 1 2-1 2-1z"/><circle fill="#662113" cx="13.5" cy="8.5" r=".5"/><circle fill="#662113" cx="18.5" cy="8.5" r=".5"/><path fill="#C1694F" d="M15 10h2s0 1-1 1-1-1-1-1z"/><path fill="#5D9040" d="M29.014 28.838c2.254-1.98 1.374-5.968 1.374-5.968-.751.66-1.41 2.663-3.664 4.642-.803.705-1.2 1.629-1.306 2.454-.842.23-2.145.529-3.418.587-.706.032-1.436-.046-2.172-.195C20.535 29.809 21 28.96 21 28v-1c0-1.1-.9-2-2-2h-9c-1.201 0-2.236.719-2.714 1.745l-.008.003-.011.031c-.043.095-.072.196-.105.296-.025.076-.051.152-.072.23-.012.049-.025.098-.034.148-.57 2.401.735 5.48 3.944 6.547 1.979.658 6.075 1.291 9.662.658 2.511-.443 4.61-1.555 5.924-2.402.635.247 1.499.23 2.735-.214 2.272-.816 2.356-3.324 6.075-4.905-2.55-.836-6.382 1.701-6.382 1.701z"/><path fill="#292F33" d="M19.447 30.269c-.023 0-.049-.002-.073-.007-2.24-.446-6.787-2.547-6.979-2.637-.188-.087-.27-.31-.183-.497.087-.189.312-.271.498-.183.046.021 4.657 2.152 6.81 2.58.203.041.335.238.295.441-.036.18-.192.303-.368.303z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2CB4CD" d="M20.716 11.182c-.994-1.383-1.654-5.509-1.654-5.509-.155-2.715-2.494-5.572-5.571-5.572-1.173 0-2.26.365-3.159.985-.182-.027-.365-.056-.555-.056-2.051 0-3.714 1.663-3.714 3.714 0 0-.73 2.881-1.521 3.797.377-.223.706-.465.997-.724-.259 1.306-.788 3.586-1.478 4.547.765-.55 1.41-1.136 1.859-1.795-.021.647-.399 1.267-.837 3.348-.458 2.177.364 2.197 1.385 2.646 1.795.789 12.847 1.296 13.281-.969.513-2.675.068-4.112-.425-5.624.391.429.86.83 1.392 1.212z"/><path fill="#FFDC5D" d="M16.125 13.384s-2.26-.137-3.764-.137-2.959.1-3.392.137l-1.963 3.619.526.283s1.209 4.354 1.209 5.202c0 .848-1.209 5.202-1.209 5.202h9.674s-1.209-4.075-1.209-5.202 1.209-5.202 1.209-5.202l.495-.266-1.576-3.636z"/><path fill="#DD415D" d="M12.369 17.286s-1.209-1.301-2.418-1.301-2.418 1.301-2.418 1.301l.983 3.902h7.681l1.009-3.902s-1.209-1.301-2.418-1.301-2.419 1.301-2.419 1.301z"/><path fill="#316116" d="M28.744 25.545c1.738-2.783-.967-7.196-.967-7.196-.067.534-.348 1.714-.348 1.714-.163.998-.678 2.566-2.219 4.469-1.049 1.294 4.467 5.504 5.708 4.687 1.937-1.276 1.587-3.432 3.655-5.726.367-.407.8-.817 1.346-1.228-3.575-.319-7.175 3.28-7.175 3.28zm-3.123 3.078c-4.478 3.618-9.355 2.292-10.385 1.38l-7.644-5.978c-5.516 0-4.48 7.846 1.132 10.349 9.576 4.271 17.103-1.423 18.399-4.18l-1.502-1.571z"/><path fill="#66A644" d="M27.814 26.878c1.408-2.155.357-5.346-.385-6.815-.163.998-.843 2.383-2.384 4.286-1.049 1.294-.483 3.302-.021 4.199l.001.001c-3.596 2.842-7.065 2.264-8.825 1.464 1.17-.542 1.986-1.7 1.986-3.053 0-1.87-1.547-3.385-3.454-3.385h-7.14c-5.516 0-4.48 7.39 1.132 9.843 9.165 4.007 17-.67 18.793-3.448.863.096 2.363.056 3.573-.741 1.937-1.276 1.414-3.441 3.482-5.734-3.483.249-6.758 3.383-6.758 3.383z"/><path fill="#316116" d="M16.212 30.014c-2.309-.46-6.994-2.625-7.193-2.717-.194-.09-.278-.319-.188-.512.09-.195.321-.28.513-.188.048.022 5.488 2.428 7.707 2.869 0 0-.158.133-.336.267-.179.132-.503.281-.503.281z"/><path fill="#FFDC5D" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-.143.102-.203.238-.023-.164-.074-.276-.184-.264-.129.013-.201.22-.304.492-.027-.047-.062-.079-.117-.078-.261.009-.349.811-.909 1.334-.081.036-.154.078-.248.104-.059.016-.098.041-.146.061.005-.255.171-.405.271-.474.239-.166.089-.586-.314-.331-.289.183-.41.365-.501.55-.255.519-.354 1.058-.333 1.487l-.119.215c-.139.242-1.626 1.17-2.696 1.967-1.066.793-1.846 1.694-2.415 1.132-.396-.391-1.591-1.706-3.322-2.833-1.093-.712-2.733-.866-2.733-.866-.807.662.166 3.109.894 3.566.938.589 4.26 2.925 5.306 3.391s1.704-.161 2.196-.609c.403-.366 3.434-4.072 3.703-4.326.365-.344 1.063-.797 1.457-1.491.338-.596.543-1.079.667-1.855.071-.456.402-1.447.05-1.41zM10.706 9.387v3.714c0 1.026.831 1.857 1.857 1.857s1.857-.831 1.857-1.857V9.387h-3.714z"/><path fill="#F9CA55" d="M14.419 9.387l-3.714.017v3.697s1.857.928 3.714 0V9.387z"/><path fill="#FFDC5D" d="M17.205 2.934H7.92V8.48c0 2.553 2.078 4.621 4.642 4.621 2.564 0 4.643-2.068 4.643-4.621V2.934z"/><path fill="#DF1F32" d="M14.419 11.244h-3.714s0 .928 1.857.928 1.857-.928 1.857-.928z"/><circle fill="#662113" cx="10.241" cy="7.994" r=".464"/><circle fill="#662113" cx="14.884" cy="7.994" r=".464"/><path fill="#C1694F" d="M11.634 9.387h1.857s0 .928-.929.928c-.928 0-.928-.928-.928-.928z"/><path fill="#2CB4CD" d="M18.133 6.601l-.613-4.114H6.992v4.114c3.674 0 3.713-3.628 3.714-3.707.001.08.08 3.707 7.427 3.707z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9e9.svg b/public/emoji/1f9e9.svg index 5f1e0d05c..1505f6846 100644 --- a/public/emoji/1f9e9.svg +++ b/public/emoji/1f9e9.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#50A5E6" d="M34.981 26.637c-.425-.479-1.038-.732-1.773-.732-.789 0-1.313.347-1.82.682-.562.371-1.643 1.255-2.743 1.255-1.952 0-3.562-2.167-3.562-4.75s1.031-4.688 3-4.688c1.209 0 2.157 1.121 2.773 1.448.473.252.919.489 1.477.489 1.232 0 2.217-1.03 2.372-2.507.201-1.909-.371-7.584-.451-8.153-.105-.751-.792-1.181-1.576-1.127-1.2.082-8.114.236-8.337.236-2.263 0-2.592-1.03-2.075-2.675.078-.247.257-.649.257-1.5 0-2.499-2.025-4.524-4.524-4.524s-4.524 2.025-4.524 4.524c0 .852.18 1.254.257 1.5.518 1.645.188 2.675-2.075 2.675-.223 0-7.137-.153-8.337-.236-.782-.054-1.469.376-1.575 1.129-.08.569-.651 6.243-.451 8.153.155 1.477 1.14 2.507 2.372 2.507.558 0 1.004-.237 1.477-.489.616-.327 1.564-1.448 2.773-1.448 1.969 0 3 2.104 3 4.688s-1.61 4.75-3.562 4.75c-1.1 0-2.181-.884-2.743-1.255-.507-.335-1.031-.682-1.82-.682-.735 0-1.348.253-1.773.732-.518.583-.725 1.453-.598 2.514.188 1.563.702 5.495.702 5.495.153 1.059.765 1.294 1.518 1.259.011-.001 11.732-.814 15.36-.814s15.349.813 15.361.814c.753.035 1.365-.2 1.518-1.259 0 0 .514-3.932.702-5.495.126-1.061-.081-1.931-.6-2.516z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#50A5E6" d="M26.093 4.612c-.498.498-.629.839-.728 1.029-.66 1.266-1.455 1.676-2.78.351-.13-.13-4.087-4.267-4.741-5.017-.427-.49-1.081-.64-1.584-.262-.38.286-4.035 3.273-5.035 4.507-.774.955-.8 2.134-.079 2.856.326.326.727.449 1.151.578.552.169 1.763.068 2.47.775 1.133 1.133.54 2.924-.917 4.421-1.497 1.457-3.288 2.05-4.421.917-.708-.708-.606-1.918-.775-2.47-.129-.424-.252-.824-.578-1.151-.721-.721-1.9-.694-2.856.079-1.235 1-4.221 4.655-4.507 5.035-.379.503-.228 1.156.262 1.584.75.654 4.887 4.611 5.017 4.741 1.324 1.324.915 2.12-.351 2.78-.19.099-.53.229-1.029.728-1.462 1.462-1.462 3.833 0 5.295 1.462 1.462 3.833 1.462 5.295 0 .498-.498.629-.839.728-1.029.66-1.266 1.455-1.676 2.78-.351.13.13 4.087 4.267 4.741 5.017.427.49 1.081.64 1.584.262.38-.286 4.035-3.273 5.035-4.507.774-.955.8-2.134.079-2.856-.326-.326-.727-.449-1.151-.578-.552-.169-1.763-.068-2.47-.775-1.133-1.133-.54-2.924.917-4.421 1.497-1.457 3.288-2.05 4.421-.917.708.708.606 1.918.775 2.47.129.424.252.824.578 1.151.721.721 1.9.694 2.856-.079 1.235-1 4.221-4.655 4.507-5.035.379-.503.228-1.156-.262-1.584-.75-.654-4.887-4.611-5.017-4.741-1.324-1.324-.915-2.12.351-2.78.19-.099.53-.229 1.029-.728 1.462-1.462 1.462-3.833 0-5.295-1.462-1.463-3.833-1.463-5.295 0z"/></svg> \ No newline at end of file diff --git a/public/emoji/1f9eb.svg b/public/emoji/1f9eb.svg index 6bcdc55e4..8fdeaf9e0 100644 --- a/public/emoji/1f9eb.svg +++ b/public/emoji/1f9eb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#99AAB5" cx="18" cy="21" rx="17" ry="9"/><path fill="#99AAB5" d="M1 15h34v6H1z"/><ellipse fill="#CCD6DD" cx="18" cy="15" rx="17" ry="9"/><ellipse fill="#EA596E" cx="18" cy="14.5" rx="15.111" ry="7.5"/><path fill="#99AAB5" d="M18 9c7.661 0 13.974 2.832 14.961 6.5.088-.328.15-.66.15-1C33.111 10.358 26.346 7 18 7S2.889 10.358 2.889 14.5c0 .34.061.672.15 1C4.026 11.832 10.339 9 18 9z"/><path fill="#E1E8ED" d="M2 18.017v5c.858 1.275 2.226 2.421 4 3.357v-5c-1.774-.936-3.142-2.082-4-3.357zM32 25.1c.832-.639 1.499-1.34 2-2.083v-5c-.501.744-1.168 1.444-2 2.083v5z"/><ellipse fill="#F5F8FA" cx="11.5" cy="13" rx="1.5" ry="1"/><ellipse fill="#F5F8FA" cx="8.5" cy="15" rx="1.5" ry="1"/><ellipse fill="#F5F8FA" cx="15.5" cy="14" rx="1.5" ry="1"/><ellipse fill="#F5F8FA" cx="11.5" cy="17" rx="1.5" ry="1"/><ellipse fill="#F5F8FA" cx="21.5" cy="18" rx="1.5" ry="1"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M1 15h34v6H1z"/><path fill="#99AAB5" d="M18 12c-9.389 0-17 4.029-17 9 0 1.06.364 2.073 1 3.017.858 1.275 2.226 2.421 4 3.357C9.075 28.996 13.316 30 18 30c5.81 0 10.934-1.545 14-3.9.832-.639 1.499-1.34 2-2.083.636-.945 1-1.957 1-3.017 0-4.971-7.611-9-17-9z"/><path fill="#E1E8ED" d="M2 18.017v6c.858 1.275 2.226 2.421 4 3.357v-6c-1.774-.936-3.142-2.082-4-3.357zm32 6v-6c-.501.744-1.168 1.444-2 2.083v6c.832-.638 1.499-1.339 2-2.083z"/><ellipse fill="#CCD6DD" cx="18" cy="15" rx="17" ry="9"/><ellipse fill="#EA596E" cx="18" cy="14.5" rx="15.111" ry="7.5"/><path fill="#99AAB5" d="M18 9c7.661 0 13.974 2.832 14.961 6.5.088-.328.15-.66.15-1C33.111 10.358 26.346 7 18 7S2.889 10.358 2.889 14.5c0 .34.061.672.15 1C4.026 11.832 10.339 9 18 9z"/><ellipse fill="#F5F8FA" cx="11.5" cy="13" rx="1.5" ry="1"/><ellipse fill="#F5F8FA" cx="8.5" cy="15" rx="1.5" ry="1"/><ellipse fill="#F5F8FA" cx="15.5" cy="14" rx="1.5" ry="1"/><ellipse fill="#F5F8FA" cx="11.5" cy="17" rx="1.5" ry="1"/><ellipse fill="#F5F8FA" cx="21.5" cy="18" rx="1.5" ry="1"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa70.svg b/public/emoji/1fa70.svg new file mode 100644 index 000000000..a8df4c67d --- /dev/null +++ b/public/emoji/1fa70.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4ABBA" d="M23.27.108C25.631.042 32.366 2.7 32.366 18.25c-.147 2.005-.342 9.193-5.379 12.714h-5.33c-1.027-.44-2.445-2.249-2.445-8.362 0-1.809 1.43-6.741 1.467-8.118.081-3.042-.634-4.525-1.842-7.531C17.304 3.14 19.749.205 23.27.108z"/><path fill="#EA596E" d="M29.408 7.443c.631 1.565 4.066 13.431-2.491 13.529-1.649.13-4.613-.179-2.14-7.906.947-2.494-1.367-7.637-1.579-8.655-.316-1.516 2.263-3.13 3.999-.831 1.555 2.057 2.211 3.863 2.211 3.863z"/><path fill="#F4ABBA" d="M23.401 20.622c-.283 0-.558-.146-.711-.407-.23-.393-.099-.896.294-1.126 3.134-1.837 6.378-6.191 7.165-7.913.189-.414.675-.597 1.092-.406.413.189.595.678.406 1.091-.886 1.936-4.356 6.613-7.831 8.648-.13.077-.273.113-.415.113z"/><path fill="#F4ABBA" d="M31.42 17.688c-.064 0-.13-.007-.195-.023-1.504-.366-6.195-2.541-8.011-6.311-.197-.41-.025-.902.384-1.099.412-.198.902-.025 1.099.384 1.54 3.196 5.668 5.122 6.917 5.426.442.107.713.553.605.995-.092.376-.429.628-.799.628zM12.338 4.963c-2.371-.066-9.137 2.603-9.137 18.224.147 2.014.344 9.235 5.403 12.772h5.354c1.032-.442 2.456-2.26 2.456-8.4 0-1.818-1.398-6.773-1.474-8.154-.186-3.401.637-4.545 1.85-7.565 1.541-3.832-.915-6.779-4.452-6.877z"/><path fill="#EA596E" d="M6.172 12.331c-.634 1.572-4.084 13.492 2.502 13.59 1.656.131 4.634-.18 2.15-7.941-.951-2.505 1.373-7.672 1.586-8.695.317-1.523-2.273-3.144-4.017-.835-1.562 2.067-2.221 3.881-2.221 3.881z"/><path fill="#F4ABBA" d="M12.206 25.569c-.142 0-.286-.037-.417-.113-3.49-2.045-6.976-6.742-7.866-8.687-.19-.416-.007-.906.408-1.096.416-.19.906-.008 1.096.408.792 1.73 4.05 6.104 7.198 7.948.394.231.526.738.295 1.132-.153.262-.43.408-.714.408z"/><path fill="#F4ABBA" d="M4.211 22.563c-.373 0-.711-.254-.803-.632-.108-.443.164-.891.607-.999 1.247-.303 5.361-2.219 6.89-5.391.199-.412.694-.583 1.104-.386.412.198.584.693.386 1.104-1.946 4.038-6.873 6.009-7.988 6.281-.066.016-.132.023-.196.023z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa71.svg b/public/emoji/1fa71.svg new file mode 100644 index 000000000..df3ecebac --- /dev/null +++ b/public/emoji/1fa71.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9268CA" d="M27 12.964c0-3-3.198-9.355-4-12.964h-1c0 2 1 8.998-4 8.998S14 2 14 0h-1c-.802 3.609-4 9.964-4 12.964s3.34 4.144 2 8.036c-1.292 3.753-2 6-2 7 5 1 7 5 7 8h4c0-2 2-7 7-8 0-1-.708-3.247-2-7-1.34-3.893 2-5.036 2-8.036z"/><path fill="#78B159" d="M24.695 19h-13.39c.019.31-.003.645-.06 1h13.509c-.056-.355-.078-.69-.059-1zM25 21H11c-.251.728-.472 1.383-.678 2h15.356c-.206-.617-.427-1.272-.678-2z"/><path fill="#7450A8" d="M21 17h-6c-1.914 0-3.827-.007-5.741-2.635.555 1.523 1.826 2.657 2.024 4.43C12.649 18.002 16.55 18 18 18s5.351.002 6.717.795c.198-1.773 1.469-2.907 2.024-4.43C24.827 16.993 22.914 17 21 17zM9.505 25.57C9.174 26.704 9 27.506 9 28c5 1 7 5 7 8h1c0-5.476-4.884-9.105-7.495-10.43zM27 28c0-.494-.174-1.296-.505-2.43C23.884 26.895 19 30.524 19 36h1c0-2 2-7 7-8z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa72.svg b/public/emoji/1fa72.svg new file mode 100644 index 000000000..7486e6afe --- /dev/null +++ b/public/emoji/1fa72.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#2976AA" d="M36 17.96V10l-8.296-2H8.348L.052 10v7.96C.052 21.426 12.376 32 14.835 32h6.382C23.4 32 36 21.715 36 17.96z"/><g fill="#5DADEC"><path d="M4.617 18.577l-1.892-.647C4 14.201 4 10.904 4 9.32h2c0 1.692 0 5.213-1.383 9.257zm26.818.152C30 14.622 30 11.041 30 9.32h2c0 1.611 0 4.963 1.323 8.75l-1.888.659z"/><path d="M36 10H.052V8.199c0-.735.596-1.331 1.331-1.331h33.286c.735 0 1.331.596 1.331 1.331V10z"/></g><path d="M3.702 18.154l-.03.099c.011-.033.018-.065.03-.099-1.464-.547-2.75-.865-3.649-1.019v.825C.052 21.426 12.409 32 14.854 32h.934c-1.155-8.143-7.473-12.122-12.086-13.846zM36 17.96v-.747c-.897.147-2.196.459-3.677 1.005.021.061.035.12.057.181-.021-.061-.036-.12-.057-.181-4.6 1.696-10.905 5.635-12.059 13.782h.934C23.369 32 36 21.715 36 17.96z" fill="#1D567C"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa73.svg b/public/emoji/1fa73.svg new file mode 100644 index 000000000..03e70ca89 --- /dev/null +++ b/public/emoji/1fa73.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#78B159" d="M31 6V1.955c0-.527-.428-.955-.955-.955H5.955C5.428 1 5 1.428 5 1.955V6L0 31l14 4 4-10.545L22 35l14-4-5-25z"/><g fill="#5D9040"><path d="M5 4h26v2H5zm8.782 2h-2.074c-1.378 4.107-5.46 5.399-7.87 5.807l-.421 2.107c3.606-.408 8.9-2.403 10.365-7.914z"/><path d="M32.583 13.914l-.421-2.107c-2.41-.408-6.491-1.701-7.87-5.807h-2.074c1.464 5.511 6.759 7.506 10.365 7.914zM17 6v21.091l1-2.636 1 2.636V6z"/><path d="M18.149 23H18v-2h.149C19.722 21 21 19.722 21 18.149V5h2v13.149C23 20.824 20.824 23 18.149 23z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/1fa78.svg b/public/emoji/1fa78.svg new file mode 100644 index 000000000..2dc83a56d --- /dev/null +++ b/public/emoji/1fa78.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DA2F47" d="M28.344 17.768L18.148 1.09 8.7 17.654c-2.2 3.51-2.392 8.074-.081 11.854 3.285 5.373 10.363 7.098 15.811 3.857 5.446-3.24 7.199-10.22 3.914-15.597z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa79.svg b/public/emoji/1fa79.svg new file mode 100644 index 000000000..41d5722af --- /dev/null +++ b/public/emoji/1fa79.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M2.92 21.393L21.393 2.92c3.227-3.227 8.46-3.227 11.687 0 3.227 3.227 3.227 8.46 0 11.687L14.607 33.08c-3.227 3.227-8.46 3.227-11.687 0-3.227-3.228-3.227-8.46 0-11.687z"/><g fill="#C1694F"><circle cx="4.389" cy="25.778" r=".972"/><circle cx="7.306" cy="28.694" r=".972"/><circle cx="10.222" cy="31.611" r=".972"/><circle cx="7.306" cy="22.861" r=".972"/><circle cx="10.222" cy="25.778" r=".972"/><circle cx="13.139" cy="28.694" r=".972"/><path d="M21.896 7.189c.064-.533.548-.913 1.081-.849.533.064.913.548.849 1.081-.064.533-.548.913-1.081.849-.533-.063-.913-.547-.849-1.081z"/><circle cx="25.778" cy="10.222" r=".972"/><circle cx="28.694" cy="13.139" r=".972"/><circle cx="25.778" cy="4.389" r=".972"/><circle cx="28.694" cy="7.306" r=".972"/><circle cx="31.611" cy="10.222" r=".972"/></g><path fill="#EABAA7" d="M6.82 17.514L17.512 6.819 29.18 18.486 18.486 29.18z"/><path fill="#F7DED5" d="M9.799 18.423c-.249 0-.498-.095-.687-.285-.38-.38-.38-.995 0-1.375l7.715-7.715c.38-.38.995-.38 1.375 0s.38.995 0 1.375l-7.715 7.715c-.191.191-.439.285-.688.285z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa7a.svg b/public/emoji/1fa7a.svg new file mode 100644 index 000000000..848c72e6e --- /dev/null +++ b/public/emoji/1fa7a.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M28.977 16.492l.011-.006c-1.466.66-3.102.795-4.676.372-1.626-.436-3.006-1.423-3.947-2.796.019.028.034.058.054.086L19 14l-.213 1.302c1.019 1.443 2.426 2.535 4.069 3.174l-.084.311c-.408 1.521-.275 3.296-.134 5.176.184 2.45.375 4.984-.665 6.933-.978 1.829-2.921 2.919-5.205 2.919h-.032c-2.129-.01-4.063-.98-4.813-2.415-.538-1.03-.597-2.431-.66-3.912-.101-2.393-.214-5.104-2.268-7.443l-3.949-4.501-1.503 1.319 3.949 4.5c1.588 1.811 1.682 4.046 1.773 6.209.069 1.636.14 3.328.885 4.754 1.101 2.106 3.682 3.476 6.577 3.489h.042c3.035 0 5.638-1.484 6.968-3.977 1.314-2.461 1.092-5.417.895-8.025-.128-1.704-.249-3.315.071-4.506l.085-.318c.451.069.902.113 1.352.113 1.252-.001 2.487-.277 3.644-.795L30 17l-1.023-.508z"/><path fill="#99AAB5" d="M1.258 18.867c-1.457-1.66-1.292-4.188.368-5.645 1.66-1.457 4.188-1.292 5.645.368 1.457 1.661 1.292 4.188-.368 5.645-1.66 1.457-4.188 1.293-5.645-.368z"/><path fill="#31373D" d="M2.762 17.548c-.729-.83-.646-2.094.184-2.822.83-.729 2.094-.646 2.822.184.729.83.646 2.094-.184 2.822-.83.729-2.094.646-2.822-.184z"/><path fill="#99AAB5" d="M29.791 18.318l-.814-1.826c1.936-.865 3.362-2.534 3.911-4.579l.778-2.897c.286-1.065-.348-2.164-1.413-2.451l.52-1.932c2.13.573 3.397 2.771 2.825 4.901l-.778 2.897c-.707 2.63-2.54 4.775-5.029 5.887zm-11.006-3.014c-1.555-2.197-2.047-4.946-1.35-7.542l.778-2.897c.572-2.131 2.771-3.398 4.9-2.826l-.519 1.932c-1.067-.286-2.164.348-2.45 1.413l-.778 2.898c-.543 2.019-.16 4.158 1.051 5.867l-1.632 1.155z"/><path fill="#31373D" d="M22.56 6.032c-.8-.215-1.274-1.038-1.059-1.838l.778-2.897c.215-.8 1.038-1.274 1.838-1.059.8.215 1.274 1.038 1.059 1.838l-.778 2.897c-.215.8-1.038 1.274-1.838 1.059zm8.692 2.335c-.8-.215-1.274-1.038-1.059-1.838l.778-2.897c.215-.8 1.038-1.274 1.838-1.059.8.215 1.274 1.038 1.06 1.838l-.778 2.897c-.216.8-1.039 1.274-1.839 1.059z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa80.svg b/public/emoji/1fa80.svg new file mode 100644 index 000000000..fc9af9be9 --- /dev/null +++ b/public/emoji/1fa80.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#BE1931" cx="17.722" cy="21.507" rx="12.917" ry="13.993"/><ellipse fill="#A0041E" cx="15.569" cy="21.507" rx="12.917" ry="13.993"/><path fill="#99AAB5" d="M28.298 13.741c-1.643 0-3.457-.825-5.227-1.629-2.124-.966-4.322-1.966-5.46-1.113l-1.167-1.555c2.06-1.544 4.79-.303 7.431.898 2.023.92 4.117 1.868 5.327 1.263.664-.331 1.155-1.195 1.459-2.566l1.899.422c-.444 2-1.259 3.27-2.49 3.885-.558.278-1.153.395-1.772.395z"/><ellipse fill="#DD2E44" cx="13.417" cy="21.507" rx="12.917" ry="13.993"/><ellipse fill="#EA596E" cx="12.878" cy="21.507" rx="9.149" ry="10.433"/><path fill="#99AAB5" d="M31.611 10.222c-2.41 0-3.889-3.398-3.889-5.833S29.176.5 31.611.5 35.5 1.954 35.5 4.389c0 2.436-1.479 5.833-3.889 5.833zm0-7.778c-1.344 0-1.944.6-1.944 1.944 0 1.878 1.141 3.889 1.944 3.889s1.944-2.011 1.944-3.889c.001-1.344-.599-1.944-1.944-1.944z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa81.svg b/public/emoji/1fa81.svg new file mode 100644 index 000000000..fd8605e46 --- /dev/null +++ b/public/emoji/1fa81.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M22.45 32.289L.592 18.752 6.55.711l18.042 5.958z"/><path fill="#269" d="M20.543 29.5c-.366 0-.719-.201-.895-.551L6.929 3.687c-.249-.493-.05-1.095.443-1.343.494-.249 1.095-.05 1.343.443l12.72 25.264c.248.493.05 1.094-.444 1.343-.143.072-.297.106-.448.106z"/><path fill="#269" d="M3.12 18.48c-.366 0-.718-.201-.894-.55-.249-.493-.05-1.095.443-1.343l18.947-9.54c.49-.25 1.094-.05 1.343.443.248.493.05 1.095-.443 1.343l-18.947 9.54c-.145.073-.298.107-.449.107z"/><path fill="#3B88C3" d="M27.367 35.339c-2.44 0-4.521-1.268-6.199-3.784-.307-.459-.183-1.08.277-1.387.458-.307 1.079-.183 1.387.277 1.564 2.343 3.359 3.228 5.644 2.781.945-.184 1.793-.98 2.27-2.132.701-1.693.47-3.668-.62-5.282-2.006-2.971-2.777-6.787-2.063-10.21.615-2.956 2.24-5.344 4.698-6.905.466-.295 1.084-.158 1.38.308.297.466.158 1.084-.308 1.38-2.516 1.598-3.462 3.941-3.813 5.625-.604 2.905.055 6.151 1.765 8.683 1.466 2.172 1.769 4.851.811 7.167-.734 1.772-2.131 3.018-3.736 3.329-.513.1-1.009.15-1.493.15z"/><path d="M31.532 30.992c-.781-2.485-2.807-4.482-4.157-2.075-1.342 2.392 1.04 3.456 3.717 2.74.781 2.485 2.807 4.482 4.157 2.075 1.342-2.392-1.039-3.456-3.717-2.74zm-1.425-7.039c2.377 1.066 5.215.876 4.311-1.731-.898-2.592-3.275-1.517-4.517.961-2.377-1.066-5.215-.876-4.311 1.731.898 2.592 3.275 1.517 4.517-.961zm-1.261-6.597c1.355 2.225 3.802 3.676 4.534 1.015.727-2.645-1.84-3.105-4.267-1.766-1.355-2.224-3.802-3.676-4.534-1.015-.728 2.645 1.84 3.105 4.267 1.766zm2.897-6.557c-.132 2.602 1.074 5.178 3.177 3.39 2.089-1.777.226-3.602-2.534-3.861.132-2.602-1.074-5.178-3.177-3.39-2.089 1.777-.225 3.602 2.534 3.861z" fill="#9266CC"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa82.svg b/public/emoji/1fa82.svg new file mode 100644 index 000000000..acb16e264 --- /dev/null +++ b/public/emoji/1fa82.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#66757F"><path d="M11.945 32.885c-.185 0-.363-.103-.45-.28L.652 10.624c-.123-.248-.021-.549.228-.671.25-.122.549-.02.671.228l10.843 21.98c.123.248.021.549-.228.672-.071.035-.147.052-.221.052z"/><path d="M11.944 32.885c-.216 0-.416-.141-.481-.358L4.042 7.612c-.079-.265.072-.545.338-.624.268-.079.545.073.624.338l7.421 24.914c.079.266-.072.545-.338.624-.047.014-.095.021-.143.021z"/><path d="M11.944 32.885c-.259 0-.479-.199-.5-.462L9.214 4.428c-.022-.276.184-.518.46-.54.278-.02.518.184.54.46l2.23 27.995c.022.276-.184.518-.46.54l-.04.002z"/><path d="M11.945 32.885c-.17 0-.336-.087-.43-.243-.143-.237-.066-.546.171-.688l21-12.64c.237-.143.546-.066.688.171s.066.546-.171.688l-21 12.64c-.081.048-.17.072-.258.072z"/><path d="M11.944 32.885c-.141 0-.281-.06-.38-.175-.181-.21-.157-.526.053-.707l19.705-16.957c.21-.18.527-.157.707.053.181.21.157.527-.053.708L12.271 32.763c-.094.082-.21.122-.327.122z"/><path d="M11.944 32.885c-.106 0-.212-.034-.303-.103-.22-.168-.263-.482-.096-.703L28.546 9.726c.168-.221.482-.262.703-.096.221.168.264.482.096.703L12.344 32.687c-.099.129-.249.198-.4.198z"/></g><path fill="#A0041E" d="M33.25 20.343s-3.106-3.669-15.62-7.34S.521 10.741.521 10.741-1.158-4.917 20.982 1.578 33.25 20.343 33.25 20.343z"/><path fill="#F4900C" d="M15.799 29.523c-.095-.427-.489-.521-.633-.196-.144.325-.214 1.356-.214 1.356s-.337-.915-.656-1.37l-.031-.047c-.054-.072-.107-.132-.157-.167l-.02-.013c-.246-.206-.596-.356-1.034-.485s-.813-.191-1.132-.151h-.024c-.061.003-.139.025-.222.056-.018.006-.034.015-.052.022-.514.21-1.292.799-1.292.799s.498-.906.552-1.257c.054-.351-.328-.485-.639-.177-.31.308-1.13 2.047-1.011 2.449.119.402.788.23 1.217.097l.198-.064c-.07.395-.111.863-.02 1.321-.887 1.998-.811 3.811-.411 3.928.616.181 1.137-2.356 1.44-2.267.303.089-.524 2.461.092 2.642.4.117 1.339-1.323 1.671-3.484.324-.337.542-.752.697-1.123.045.055.091.113.132.161.29.344.759.85 1.077.576.318-.272.567-2.179.472-2.606z"/><path fill="#FFAC33" d="M14.531 28.329c-.174.592-.851 1.497-1.758 1.231s-.988-1.393-.815-1.985.511-1.742 1.798-1.365.949 1.527.775 2.119z"/><path fill="#292F33" d="M13.783 26.115c-1.729-.507-2.329 1.149-2.03 1.65.299.502.64.04 1.463.282.823.241.861.814 1.384.553.522-.26.913-1.977-.817-2.485z"/><path fill="#99AAB5" d="M14.665 28.462c-.117.4-.536.629-.936.511-.4-.117-.629-.536-.511-.936.117-.4.472-.411.872-.294.399.118.692.319.575.719z"/><path fill="#88C9F9" d="M14.398 28.425c-.076.258-.347.406-.605.331-.258-.076-.406-.347-.331-.605.076-.258.305-.266.564-.19.258.076.448.206.372.464z"/><path fill="#99AAB5" d="M13.219 28.038c-.117.4-.536.629-.936.511-.4-.117-.629-.536-.511-.936.117-.4.472-.411.872-.294s.693.319.575.719z"/><path fill="#88C9F9" d="M12.952 28.001c-.076.258-.347.406-.605.331-.258-.076-.406-.347-.331-.605.076-.258.305-.266.564-.19s.448.206.372.464z"/><path fill="#FFAC33" d="M13.093 32.695l-2.284-.67c-.14-.041-.22-.188-.179-.328.041-.14.188-.22.328-.179l2.284.67c.14.041.22.188.179.328-.042.14-.188.22-.328.179z"/><path fill="#F4ABBA" d="M7.156 10.73c1.122.135 2.402.336 3.854.626L11.09.012C9.606.046 8.327.244 7.228.565L7.156 10.73zm16.935 4.463c1.379.541 2.564 1.063 3.581 1.555l5.431-8.593c-.752-.864-1.721-1.721-2.951-2.552l-6.061 9.59z"/><path fill="#DD2E44" d="M24.091 15.193l6.061-9.59c-2.163-1.461-5.128-2.84-9.17-4.026S13.7-.05 11.09.011l-.08 11.344c1.907.38 4.095.907 6.62 1.647 2.525.742 4.65 1.481 6.461 2.191z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa90.svg b/public/emoji/1fa90.svg new file mode 100644 index 000000000..46a0c53ce --- /dev/null +++ b/public/emoji/1fa90.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="18" cy="18" r="10.694"/><path fill="#F4900C" d="M10.229 22.751c-.985.067-1.689-.308-2.203-.917.214.557.487 1.081.788 1.588.771.289 1.591.41 2.54-.272-.463-.227-.88-.415-1.125-.399zM23.086 8.608c.045.328-.187.5-.75.363-.955-.232-1.793.776-2.274 1.619-.947 1.657-4.854 3.524-4.857 2.087-.001-.679-3.452.843-3.893.161-.417-.644-1.663-.396-1.921-1.168-1.135 1.544-1.869 3.402-2.04 5.422.377.718.864 1.282 1.352 1.526.66.33 3.726 1.528 4.174.763.747-1.276 5.229-.373 5.122-1.044-.205-1.285 2.427-.23 3.373-1.886.482-.843 1.533-1.49 2.489-1.258 1.116.271 2.493-1.643 2.389-3.996-.871-1.057-1.951-1.931-3.164-2.589zm3.181 16.175c-.338.166-.671.293-.975.326-2.248.243-2.734 2.005-4.242 1.703-.777-.156-1.837 1.214-3.05 1.297-.611.042-1.489.141-2.386.308.768.175 1.565.277 2.386.277 3.331 0 6.305-1.523 8.267-3.911z"/><path fill="#E85E00" d="M23.225 8.674c.953.535 1.811 1.213 2.554 2.003 2.491-.157 4.01.429 3.883 1.777-.066.705-.585 1.542-1.431 2.435-2.108 2.221-6.309 4.796-11.07 6.602-3.309 1.255-6.258 1.9-8.366 1.934-2.145.035-3.418-.563-3.302-1.803.076-.815.752-1.806 1.852-2.857-.019-.255-.039-.507-.039-.765 0-.848.109-1.669.296-2.461C3.3 18.522.5 21.807.5 24.369c0 3.487 5.162 4.558 12.275 2.957 1.65-.371 3.405-.886 5.225-1.549 3.9-1.419 7.489-3.3 10.399-5.317 4.301-2.983 7.101-6.268 7.101-8.83 0-3.486-5.162-4.558-12.275-2.956z"/><path fill="#F4900C" d="M6.356 18.051c-.742.711-1.369 1.524-1.88 2.382-.49.852-.907 1.811-.844 2.671.035.856.682 1.366 1.558 1.602.874.227 1.845.287 2.834.229 1.962-.089 3.93-.415 5.841-.965 1.924-.505 3.791-1.225 5.615-2.036 3.648-1.628 7.068-3.789 10.132-6.382.368-.333.771-.649 1.124-.986.333-.337.647-.713.91-1.097.522-.768.826-1.667.335-2.352-.49-.696-1.495-1.075-2.453-1.271-.981-.187-2.01-.23-3.03-.111.992-.265 2.037-.395 3.088-.316 1.03.092 2.172.3 3.008 1.221.41.457.599 1.145.524 1.746-.057.611-.293 1.15-.563 1.635-.278.485-.59.925-.945 1.348-.352.404-.709.777-1.072 1.163-2.932 2.994-6.44 5.414-10.261 7.159-3.816 1.72-7.974 2.911-12.261 2.754-1.056-.04-2.157-.133-3.236-.548-.534-.209-1.082-.517-1.5-1.016-.429-.49-.635-1.171-.589-1.774.098-1.213.704-2.152 1.349-2.976.664-.819 1.447-1.525 2.316-2.08z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa91.svg b/public/emoji/1fa91.svg new file mode 100644 index 000000000..8db580193 --- /dev/null +++ b/public/emoji/1fa91.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A4523A" d="M12 20c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2s2-.9 2-2V22c0-1.1-.9-2-2-2zm18 0c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2s2-.9 2-2V22c0-1.1-.9-2-2-2z"/><path fill="#C1694F" d="M13 2h16v8H13z"/><path fill="#C1694F" d="M16 9h2v13h-2zm4 0h2v13h-2zm4 0h2v13h-2zM7 23c-1.1 0-2 .9-2 2v9c0 1.1.9 2 2 2s2-.9 2-2v-9c0-1.1-.9-2-2-2z"/><path fill="#C1694F" d="M25 21c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2s2-.9 2-2V23c0-1.1-.9-2-2-2zM12 0c-1.1 0-2 .9-2 2v20h4V2c0-1.1-.9-2-2-2zm18 0c-1.1 0-2 .9-2 2v20h4V2c0-1.1-.9-2-2-2z"/><path fill="#A4523A" d="M14 2h1v8h-1zm14 8h-1V2h1z"/><path fill="#D99E82" d="M30.769 20H10.341c-.223 0-.442.061-.633.175l-5.954 3.041s22.726 2.418 24.726 2.418l3.029-2.265c.309-.232.491-.597.491-.985v-1.153c0-.68-.551-1.231-1.231-1.231z"/><path fill="#A4523A" d="M16 10h2v1h-2zM5 26h4v1H5zm18 0h4v1h-4zm-3-16h2v1h-2zm4 0h2v1h-2z"/><path fill="#C1694F" d="M27.44 26H4.56C3.698 26 3 25.328 3 24.5S3.698 23 4.56 23h22.88c.862 0 1.56.672 1.56 1.5s-.698 1.5-1.56 1.5z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa92.svg b/public/emoji/1fa92.svg new file mode 100644 index 000000000..3b261c90f --- /dev/null +++ b/public/emoji/1fa92.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M8.53 21.304L21.304 8.53c1.451-1.451 1.451-3.825 0-5.276l-1.666-1.666c-1.451-1.451-3.825-1.451-5.276 0L1.588 14.362c-1.451 1.451-1.451 3.825 0 5.276l1.666 1.666c1.451 1.45 3.825 1.45 5.276 0z"/><path fill="#77B255" d="M34.355 34.355c1.145-1.145 1.145-3.02 0-4.165L14.917 10.752c-1.145-1.145-3.02-1.145-4.165 0s-1.145 3.02 0 4.165L30.19 34.355c1.145 1.145 3.019 1.145 4.165 0z"/><path fill="#5C913B" d="M24.551 18.998l9.803 9.803c1.527 1.527 1.527 4.026 0 5.554-1.527 1.527-4.026 1.527-5.554 0l-9.803-9.803c-1.534-1.534-1.534-4.02 0-5.554 1.534-1.534 4.021-1.534 5.554 0z"/><path fill="#E1E8ED" d="M5.198 17.694L17.694 5.198c.382-.382.382-1.007 0-1.388-.382-.382-1.007-.382-1.388 0L3.81 16.305c-.382.382-.382 1.007 0 1.388.381.382 1.006.382 1.388.001zm2.083 2.082L19.776 7.281c.382-.382.382-1.007 0-1.388-.382-.382-1.007-.382-1.388 0L5.892 18.388c-.382.382-.382 1.007 0 1.388.382.382 1.007.382 1.389 0z"/><path fill="#5C913B" d="M18.388 14.223l-4.165 4.166-1.39-1.39L17 12.835z"/><path fill="#3E721D" d="M23.594 25.677l2.083-2.083c.573-.573.573-1.51 0-2.083-.573-.573-1.51-.573-2.083 0l-2.083 2.083c-.573.573-.573 1.51 0 2.083.574.573 1.511.573 2.083 0zm3.471 3.471l2.083-2.083c.573-.573.573-1.51 0-2.083-.573-.573-1.51-.573-2.083 0l-2.083 2.083c-.573.573-.573 1.51 0 2.083.574.573 1.511.573 2.083 0zm3.471 3.471l2.083-2.083c.573-.573.573-1.51 0-2.083-.573-.573-1.51-.573-2.083 0l-2.083 2.083c-.573.573-.573 1.51 0 2.083.574.573 1.511.573 2.083 0z"/><path fill="#A6D388" d="M3.472 15.255L15.255 3.472c.58-.58.58-1.521 0-2.101l-.338-.338L1.033 14.917l.338.338c.58.58 1.521.58 2.101 0z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa93.svg b/public/emoji/1fa93.svg new file mode 100644 index 000000000..f886dfaee --- /dev/null +++ b/public/emoji/1fa93.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M35.22 30.741l-.024.024c-.97.97-2.542.97-3.511 0L7.835 6.915c-.582-.582-.582-1.525 0-2.107l1.429-1.429c.582-.582 1.525-.582 2.107 0l23.85 23.85c.969.97.969 2.542-.001 3.512z"/><path fill="#66757F" d="M17.765 6.946L14.229 3.41c-.586-.586-1.535-.586-2.121 0L8.573 6.946c-2.128 2.092-3.85 3.015-6.055 3.056-.171 1.573.665 5.193 1.967 6.652 1.692 1.896 4.545 2.495 7.223 2.454-.134-2.363.437-4.422 2.521-6.506l3.535-3.536c.587-.585.587-1.535.001-2.12z"/><path fill="#CCD6DD" d="M2.518 10.002C1.767 10.016.962 9.93.064 9.75c-.707 4.95 7.071 12.728 12.021 12.021-.193-.937-.328-1.819-.376-2.663-4.418-1.409-8.107-5.072-9.191-9.106z"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa94.svg b/public/emoji/1fa94.svg new file mode 100644 index 000000000..34c5f381d --- /dev/null +++ b/public/emoji/1fa94.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M33.139 21.464c.719.341.364 1.157 0 1.865-1.755 3.412-11.661 12.123-19.776 12.123C6.259 35.452.5 29.806.5 23.329c0-6.477 7.91-3.098 13.056-6.528 1.715 0 1.865-3.73 19.583 4.663z"/><path fill="#7F031E" d="M31.274 21.464c3.129 2.014-11.033 7.027-18.138 7.027C6.032 28.491.5 25.982.5 22.352c0-3.63 5.759-6.573 12.863-6.573 7.105 0 12.316 2.085 17.911 5.685z"/><path fill="#FFAC33" d="M29.409 22.396c2.655 1.8-8.492 6.201-16.046 6.201-7.03 0-11.35-2.432-11.35-5.432 0-3 5.082-5.432 11.35-5.432s12.316 2.134 16.046 4.663z"/><path d="M24.745 24.262c-.418 0-.798-.282-.904-.706-.124-.499.178-1.005.679-1.131 3.698-.925 5.061-1.766 5.849-4.917.125-.5.632-.803 1.131-.679.499.125.803.631.679 1.131-1.107 4.428-3.685 5.393-7.207 6.274-.076.019-.152.028-.227.028z"/><path fill="#F4900C" d="M26.75 12.119c0 4.296 2.496 5.833 4.375 5.833s4.375-1.538 4.375-5.833c0-4.296-1.944-8.651-4.375-11.567-2.431 2.916-4.375 7.271-4.375 11.567z"/><ellipse fill="#FFCC4D" cx="31.125" cy="13.577" rx="2.431" ry="4.375"/><ellipse fill="#FFCC4D" cx="12.167" cy="22.813" rx="6.806" ry="2.917"/></svg> \ No newline at end of file diff --git a/public/emoji/1fa95.svg b/public/emoji/1fa95.svg new file mode 100644 index 000000000..da6e25d06 --- /dev/null +++ b/public/emoji/1fa95.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#67757F" cx="10.047" cy="16.953" r="1"/><circle fill="#67757F" cx="1.047" cy="25.953" r="1"/><circle fill="#67757F" cx="19.047" cy="25.953" r="1"/><circle fill="#67757F" cx="10.047" cy="34.953" r="1"/><circle fill="#67757F" cx="3.547" cy="19.828" r="1"/><circle fill="#67757F" cx="16.214" cy="32.495" r="1"/><path fill="#292F33" d="M32.339 5.338l-15.45 17.334-3.561-3.56L30.66 3.66z"/><ellipse transform="rotate(-52.019 10.047 25.953)" fill="#F18F26" cx="10.047" cy="25.953" rx="9" ry="9"/><ellipse transform="rotate(-52.019 10.047 25.953)" fill="#F5F8FA" cx="10.047" cy="25.953" rx="7" ry="7"/><path fill="#CCD6DD" d="M4.628 29.934L28.8 5.807l.53.531L5.16 30.466zm.869.87L29.67 6.676l.531.531L6.028 31.335z"/><path fill="#292F33" d="M2.047 31.953l2-3s1 0 2 1 1 2 1 2l-3 2-2-2z"/><path fill="#67757F" d="M9.097 30.903c-.256 0-.512-.098-.707-.293l-3-3c-.391-.391-.391-1.023 0-1.414s1.023-.391 1.414 0l3 3c.391.391.391 1.023 0 1.414-.196.196-.452.293-.707.293z"/><path fill="#F18F26" d="M34.704 2.685c.438.438.438 1.155-.001 1.592l-3.186 3.186c-.438.438-1.155.438-1.593-.001l-1.39-1.389c-.438-.438-.438-1.155.001-1.592l3.187-3.186c.438-.438 1.155-.438 1.593 0l1.389 1.39z"/><circle fill="#642116" cx="33" cy="8" r="1"/><circle fill="#642116" cx="35" cy="6" r="1"/><circle fill="#642116" cx="28" cy="3" r="1"/><circle fill="#642116" cx="30" cy="1" r="1"/></svg> \ No newline at end of file diff --git a/public/emoji/2122.svg b/public/emoji/2122.svg index 00d477250..1706c28b1 100644 --- a/public/emoji/2122.svg +++ b/public/emoji/2122.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M5.208 12.674H2.374c-1.248 0-1.768-.91-1.768-1.794 0-.91.65-1.794 1.768-1.794h9.568c1.118 0 1.768.884 1.768 1.794 0 .884-.52 1.794-1.768 1.794H9.108v13.053c0 1.299-.832 2.027-1.95 2.027-1.118 0-1.95-.729-1.95-2.027V12.674zm11.258-1.742c.156-.936 1.17-2.002 2.548-2.002 1.301 0 2.314.937 2.601 1.872l3.066 10.296h.053l3.068-10.296c.285-.936 1.301-1.872 2.6-1.872 1.379 0 2.393 1.066 2.549 2.002l2.418 14.507c.025.156.025.312.025.443 0 1.143-.832 1.871-1.871 1.871-1.326 0-1.848-.598-2.029-1.82l-1.533-10.581h-.053l-3.119 10.894c-.182.623-.676 1.508-2.08 1.508s-1.899-.885-2.08-1.508l-3.121-10.894h-.051l-1.535 10.581c-.182 1.223-.702 1.82-2.028 1.82-1.04 0-1.872-.729-1.872-1.871 0-.131 0-.287.026-.443l2.418-14.507z" fill="#292F33"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M5.208 12.674H2.374c-1.248 0-1.768-.91-1.768-1.794 0-.91.65-1.794 1.768-1.794h9.568c1.118 0 1.768.884 1.768 1.794 0 .884-.52 1.794-1.768 1.794H9.108v13.053c0 1.299-.832 2.027-1.95 2.027-1.118 0-1.95-.729-1.95-2.027V12.674zm11.258-1.742c.156-.936 1.17-2.002 2.548-2.002 1.301 0 2.314.937 2.601 1.872l3.066 10.296h.053l3.068-10.296c.285-.936 1.301-1.872 2.6-1.872 1.379 0 2.393 1.066 2.549 2.002l2.418 14.507c.025.156.025.312.025.443 0 1.143-.832 1.871-1.871 1.871-1.326 0-1.848-.598-2.029-1.82l-1.533-10.581h-.053l-3.119 10.894c-.182.623-.676 1.508-2.08 1.508s-1.899-.885-2.08-1.508l-3.121-10.894h-.051l-1.535 10.581c-.182 1.223-.702 1.82-2.028 1.82-1.04 0-1.872-.729-1.872-1.871 0-.131 0-.287.026-.443l2.418-14.507z" fill="#31373D"/></svg> \ No newline at end of file diff --git a/public/emoji/231a.svg b/public/emoji/231a.svg index e36b3f5b3..53e6f6efc 100644 --- a/public/emoji/231a.svg +++ b/public/emoji/231a.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M25 32c0 2.209-1.791 4-4 4h-6c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h6c2.209 0 4 1.791 4 4v28z"/><path fill="#99AAB5" d="M32 18c0-1.104-.896-2-2-2h-1c-1.104 0-2 .896-2 2s.896 2 2 2h1c1.104 0 2-.896 2-2z"/><path fill="#CCD6DD" d="M6 18c0-6.627 5.373-12 12-12 6.628 0 12 5.373 12 12s-5.372 12-12 12c-6.627 0-12-5.373-12-12z"/><path fill="#F5F8FA" d="M10 18c0-4.418 3.582-8 8-8 4.419 0 8 3.582 8 8s-3.581 8-8 8c-4.418 0-8-3.582-8-8z"/><path fill="#66757F" d="M23 22c-.175 0-.353-.046-.514-.143l-5-3c-.301-.18-.486-.505-.486-.857v-7c0-.552.448-1 1-1s1 .448 1 1v6.434l4.516 2.708c.474.284.627.898.343 1.372-.188.313-.519.486-.859.486z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M25 32c0 2.209-1.791 4-4 4h-6c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h6c2.209 0 4 1.791 4 4v28z"/><path fill="#99AAB5" d="M32 18c0-1.104-.896-2-2-2h-1c-1.104 0-2 .896-2 2s.896 2 2 2h1c1.104 0 2-.896 2-2z"/><path fill="#CCD6DD" d="M6 18c0-6.627 5.373-12 12-12 6.628 0 12 5.373 12 12s-5.372 12-12 12c-6.627 0-12-5.373-12-12z"/><path fill="#F5F8FA" d="M10 18c0-4.418 3.582-8 8-8 4.419 0 8 3.582 8 8s-3.581 8-8 8c-4.418 0-8-3.582-8-8z"/><path fill="#66757F" d="M23 22c-.175 0-.353-.046-.514-.143l-5-3c-.301-.18-.486-.505-.486-.857v-7c0-.552.448-1 1-1s1 .448 1 1v6.434l4.516 2.708c.474.284.627.898.343 1.372-.188.313-.519.486-.859.486z"/></svg> \ No newline at end of file diff --git a/public/emoji/25aa.svg b/public/emoji/25aa.svg index aa9542245..cb4f63bc7 100644 --- a/public/emoji/25aa.svg +++ b/public/emoji/25aa.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M25 24c0 .553-.447 1-1 1H12c-.552 0-1-.447-1-1V12c0-.552.448-1 1-1h12c.553 0 1 .448 1 1v12z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M25 24c0 .553-.447 1-1 1H12c-.552 0-1-.447-1-1V12c0-.552.448-1 1-1h12c.553 0 1 .448 1 1v12z"/></svg> \ No newline at end of file diff --git a/public/emoji/25fc.svg b/public/emoji/25fc.svg index 9a19ab578..b91ca8056 100644 --- a/public/emoji/25fc.svg +++ b/public/emoji/25fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M33 30c0 1.657-1.343 3-3 3H6c-1.657 0-3-1.343-3-3V6c0-1.657 1.343-3 3-3h24c1.657 0 3 1.343 3 3v24z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M33 30c0 1.657-1.343 3-3 3H6c-1.657 0-3-1.343-3-3V6c0-1.657 1.343-3 3-3h24c1.657 0 3 1.343 3 3v24z"/></svg> \ No newline at end of file diff --git a/public/emoji/25fe.svg b/public/emoji/25fe.svg index 4185a7297..9c0abf0f9 100644 --- a/public/emoji/25fe.svg +++ b/public/emoji/25fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M29 27c0 1.104-.896 2-2 2H9c-1.104 0-2-.896-2-2V9c0-1.104.896-2 2-2h18c1.104 0 2 .896 2 2v18z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M29 27c0 1.104-.896 2-2 2H9c-1.104 0-2-.896-2-2V9c0-1.104.896-2 2-2h18c1.104 0 2 .896 2 2v18z"/></svg> \ No newline at end of file diff --git a/public/emoji/261d-1f3fb.svg b/public/emoji/261d-1f3fb.svg index ac7d39521..854b494b3 100644 --- a/public/emoji/261d-1f3fb.svg +++ b/public/emoji/261d-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D89882" d="M15.94 15.838c-.01-1.379 1.108-2.505 2.488-2.515 1.379-.01 2.423 1.1 2.433 2.479l-.006 4.303s1.844 11.797-5.428 11.797-8.414-8.673-8.414-8.673l-.025-2.241c-.01-1.29 8.952-5.15 8.952-5.15z"/><path fill="#F7DECE" d="M20.936 16.957v-2.044c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zm2.593 2.684c-1.107 0-2.013-.906-2.013-2.013V4.712c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v12.916c0 1.107-.906 2.013-2.013 2.013zM9 23c-1.107 0-2.013-.906-2.013-2.013V17.01c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v3.977C11.012 22.094 10.106 23 9 23z"/><path fill="#D89882" d="M13.193 22.033c-1.2 0-2.181-.982-2.181-2.181V15.54c0-1.2.982-2.181 2.181-2.181 1.2 0 2.181.982 2.181 2.181v4.311c0 1.2-.981 2.182-2.181 2.182zm14.773-1.889c-.013-1.814-1.494-3.274-3.308-3.261h-7.87l.013 6.992h7.907c1.814-.013 3.274-1.494 3.261-3.308l-.003-.423z"/><path fill="#F7DECE" d="M13.93 12.965c1.103-.008 2.004.88 2.012 1.983v2.793c-.605.553-.969 1.324-.963 2.209.005.752.297 1.429.758 1.951-.336.619-.982 1.047-1.736 1.052-1.103.008-2.004-.88-2.012-1.983l-.043-5.993c-.007-1.103.881-2.004 1.984-2.012z"/><path fill="#F7DECE" d="M27.873 19.273c-.39-1.145-1.422-1.403-1.921-1.399h-7.961c-1.107 0-2.013.906-2.013 2.013s.906 2.013 2.013 2.013l5.493-.003c.276-.002.501.229.503.505.002.276-.22.522-.496.522h-.125c-2.685 0-4.847 3.153-4.819 7.008.002.276-.22.482-.496.484-.276.002-.501-.22-.503-.496-.022-3.006 1.187-5.637 2.983-7.013l-2.534.018c-.999.007-1.273-.278-1.475-.391l.003.003c-.145.232-.922 1.416-2.516 1.416-1.723 0-2.37-1.154-2.494-1.335-.519.799-1.443 1.306-2.516 1.306-.714 0-1.529-.188-1.987-.731.146 6.662 5.541 11.759 12.07 11.712 5.708-.041 10.362-5.069 10.328-9.871-.098-2.659-1.537-5.761-1.537-5.761z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M26.992 19.016c-.255-.255-.799-.611-1.44-.962l-1.911-2-2.113 2h-.58l-2.509-3.634c-1.379.01-2.497 1.136-2.487 2.515l-3.556-2.112c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.168.016 2.185 9.984 10.729S27.525 19.71 27.55 19.74c-.129-.223-.513-.702-.558-.724z"/><g fill="#F7DECE"><path d="M25.552 5.81c0-1.107-.906-2.013-2.013-2.013-1.107 0-2.013.906-2.013 2.013v12.245h4.025V5.81zm-4.605 12.244V16.01c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/261d-1f3fc.svg b/public/emoji/261d-1f3fc.svg index 5ac3bbcfb..76dac4ee6 100644 --- a/public/emoji/261d-1f3fc.svg +++ b/public/emoji/261d-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C68F6A" d="M15.94 15.838c-.01-1.379 1.108-2.505 2.488-2.515 1.379-.01 2.423 1.1 2.433 2.479l-.006 4.303s1.844 11.797-5.428 11.797-8.414-8.673-8.414-8.673l-.025-2.241c-.01-1.29 8.952-5.15 8.952-5.15z"/><path fill="#F3D2A2" d="M20.936 16.957v-2.044c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zm2.593 2.684c-1.107 0-2.013-.906-2.013-2.013V4.712c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v12.916c0 1.107-.906 2.013-2.013 2.013zM9 23c-1.107 0-2.013-.906-2.013-2.013V17.01c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v3.977C11.012 22.094 10.106 23 9 23z"/><path fill="#C68F6A" d="M13.193 22.033c-1.2 0-2.181-.982-2.181-2.181V15.54c0-1.2.982-2.181 2.181-2.181 1.2 0 2.181.982 2.181 2.181v4.311c0 1.2-.981 2.182-2.181 2.182zm14.773-1.889c-.013-1.814-1.494-3.274-3.308-3.261h-7.87l.013 6.992h7.907c1.814-.013 3.274-1.494 3.261-3.308l-.003-.423z"/><path fill="#F3D2A2" d="M13.93 12.965c1.103-.008 2.004.88 2.012 1.983v2.793c-.605.553-.969 1.324-.963 2.209.005.752.297 1.429.758 1.951-.336.619-.982 1.047-1.736 1.052-1.103.008-2.004-.88-2.012-1.983l-.043-5.993c-.007-1.103.881-2.004 1.984-2.012z"/><path fill="#F3D2A2" d="M27.873 19.273c-.39-1.145-1.422-1.403-1.921-1.399h-7.961c-1.107 0-2.013.906-2.013 2.013s.906 2.013 2.013 2.013l5.493-.003c.276-.002.501.229.503.505.002.276-.22.522-.496.522h-.125c-2.685 0-4.847 3.153-4.819 7.008.002.276-.22.482-.496.484-.276.002-.501-.22-.503-.496-.022-3.006 1.187-5.637 2.983-7.013l-2.534.018c-.999.007-1.273-.278-1.475-.391l.003.003c-.145.232-.922 1.416-2.516 1.416-1.723 0-2.37-1.154-2.494-1.335-.519.799-1.443 1.306-2.516 1.306-.714 0-1.529-.188-1.987-.731.146 6.662 5.541 11.759 12.07 11.712 5.708-.041 10.362-5.069 10.328-9.871-.098-2.659-1.537-5.761-1.537-5.761z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M26.992 19.016c-.255-.255-.799-.611-1.44-.962l-1.911-2-2.113 2h-.58l-2.509-3.634c-1.379.01-2.497 1.136-2.487 2.515l-3.556-2.112c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.168.016 2.185 9.984 10.729S27.525 19.71 27.55 19.74c-.129-.223-.513-.702-.558-.724z"/><g fill="#F3D2A2"><path d="M25.552 5.81c0-1.107-.906-2.013-2.013-2.013-1.107 0-2.013.906-2.013 2.013v12.245h4.025V5.81zm-4.605 12.244V16.01c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/261d-1f3fd.svg b/public/emoji/261d-1f3fd.svg index 0b4289659..e03f60e18 100644 --- a/public/emoji/261d-1f3fd.svg +++ b/public/emoji/261d-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AA8052" d="M15.94 15.838c-.01-1.379 1.108-2.505 2.488-2.515 1.379-.01 2.423 1.1 2.433 2.479l-.006 4.303s1.844 11.797-5.428 11.797-8.414-8.673-8.414-8.673l-.025-2.241c-.01-1.29 8.952-5.15 8.952-5.15z"/><path fill="#D5AB88" d="M20.936 16.957v-2.044c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zm2.593 2.684c-1.107 0-2.013-.906-2.013-2.013V4.712c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v12.916c0 1.107-.906 2.013-2.013 2.013zM9 23c-1.107 0-2.013-.906-2.013-2.013V17.01c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v3.977C11.012 22.094 10.106 23 9 23z"/><path fill="#AA8052" d="M13.193 22.033c-1.2 0-2.181-.982-2.181-2.181V15.54c0-1.2.982-2.181 2.181-2.181 1.2 0 2.181.982 2.181 2.181v4.311c0 1.2-.981 2.182-2.181 2.182zm14.773-1.889c-.013-1.814-1.494-3.274-3.308-3.261h-7.87l.013 6.992h7.907c1.814-.013 3.274-1.494 3.261-3.308l-.003-.423z"/><path fill="#D5AB88" d="M13.93 12.965c1.103-.008 2.004.88 2.012 1.983v2.793c-.605.553-.969 1.324-.963 2.209.005.752.297 1.429.758 1.951-.336.619-.982 1.047-1.736 1.052-1.103.008-2.004-.88-2.012-1.983l-.043-5.993c-.007-1.103.881-2.004 1.984-2.012z"/><path fill="#D5AB88" d="M27.873 19.273c-.39-1.145-1.422-1.403-1.921-1.399h-7.961c-1.107 0-2.013.906-2.013 2.013s.906 2.013 2.013 2.013l5.493-.003c.276-.002.501.229.503.505.002.276-.22.522-.496.522h-.125c-2.685 0-4.847 3.153-4.819 7.008.002.276-.22.482-.496.484-.276.002-.501-.22-.503-.496-.022-3.006 1.187-5.637 2.983-7.013l-2.534.018c-.999.007-1.273-.278-1.475-.391l.003.003c-.145.232-.922 1.416-2.516 1.416-1.723 0-2.37-1.154-2.494-1.335-.519.799-1.443 1.306-2.516 1.306-.714 0-1.529-.188-1.987-.731.146 6.662 5.541 11.759 12.07 11.712 5.708-.041 10.362-5.069 10.328-9.871-.098-2.659-1.537-5.761-1.537-5.761z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M26.992 19.016c-.255-.255-.799-.611-1.44-.962l-1.911-2-2.113 2h-.58l-2.509-3.634c-1.379.01-2.497 1.136-2.487 2.515l-3.556-2.112c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.168.016 2.185 9.984 10.729S27.525 19.71 27.55 19.74c-.129-.223-.513-.702-.558-.724z"/><g fill="#D4AB88"><path d="M25.552 5.81c0-1.107-.906-2.013-2.013-2.013-1.107 0-2.013.906-2.013 2.013v12.245h4.025V5.81zm-4.605 12.244V16.01c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/261d-1f3fe.svg b/public/emoji/261d-1f3fe.svg index 026dd7182..a83945629 100644 --- a/public/emoji/261d-1f3fe.svg +++ b/public/emoji/261d-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#845636" d="M15.94 15.838c-.01-1.379 1.108-2.505 2.488-2.515 1.379-.01 2.423 1.1 2.433 2.479l-.006 4.303s1.844 11.797-5.428 11.797-8.414-8.673-8.414-8.673l-.025-2.241c-.01-1.29 8.952-5.15 8.952-5.15z"/><path fill="#AF7E57" d="M20.936 16.957v-2.044c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zm2.593 2.684c-1.107 0-2.013-.906-2.013-2.013V4.712c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v12.916c0 1.107-.906 2.013-2.013 2.013zM9 23c-1.107 0-2.013-.906-2.013-2.013V17.01c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v3.977C11.012 22.094 10.106 23 9 23z"/><path fill="#845636" d="M13.193 22.033c-1.2 0-2.181-.982-2.181-2.181V15.54c0-1.2.982-2.181 2.181-2.181 1.2 0 2.181.982 2.181 2.181v4.311c0 1.2-.981 2.182-2.181 2.182zm14.773-1.889c-.013-1.814-1.494-3.274-3.308-3.261h-7.87l.013 6.992h7.907c1.814-.013 3.274-1.494 3.261-3.308l-.003-.423z"/><path fill="#AF7E57" d="M13.93 12.965c1.103-.008 2.004.88 2.012 1.983v2.793c-.605.553-.969 1.324-.963 2.209.005.752.297 1.429.758 1.951-.336.619-.982 1.047-1.736 1.052-1.103.008-2.004-.88-2.012-1.983l-.043-5.993c-.007-1.103.881-2.004 1.984-2.012z"/><path fill="#AF7E57" d="M27.873 19.273c-.39-1.145-1.422-1.403-1.921-1.399h-7.961c-1.107 0-2.013.906-2.013 2.013s.906 2.013 2.013 2.013l5.493-.003c.276-.002.501.229.503.505.002.276-.22.522-.496.522h-.125c-2.685 0-4.847 3.153-4.819 7.008.002.276-.22.482-.496.484-.276.002-.501-.22-.503-.496-.022-3.006 1.187-5.637 2.983-7.013l-2.534.018c-.999.007-1.273-.278-1.475-.391l.003.003c-.145.232-.922 1.416-2.516 1.416-1.723 0-2.37-1.154-2.494-1.335-.519.799-1.443 1.306-2.516 1.306-.714 0-1.529-.188-1.987-.731.146 6.662 5.541 11.759 12.07 11.712 5.708-.041 10.362-5.069 10.328-9.871-.098-2.659-1.537-5.761-1.537-5.761z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M26.992 19.016c-.255-.255-.799-.611-1.44-.962l-1.911-2-2.113 2h-.58l-2.509-3.634c-1.379.01-2.497 1.136-2.487 2.515l-3.556-2.112c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.168.016 2.185 9.984 10.729S27.525 19.71 27.55 19.74c-.129-.223-.513-.702-.558-.724z"/><g fill="#AF7E57"><path d="M25.552 5.81c0-1.107-.906-2.013-2.013-2.013-1.107 0-2.013.906-2.013 2.013v12.245h4.025V5.81zm-4.605 12.244V16.01c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/261d-1f3ff.svg b/public/emoji/261d-1f3ff.svg index a9aacf2b0..858849554 100644 --- a/public/emoji/261d-1f3ff.svg +++ b/public/emoji/261d-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#543226" d="M15.94 15.838c-.01-1.379 1.108-2.505 2.488-2.515 1.379-.01 2.423 1.1 2.433 2.479l-.006 4.303s1.844 11.797-5.428 11.797-8.414-8.673-8.414-8.673l-.025-2.241c-.01-1.29 8.952-5.15 8.952-5.15z"/><path fill="#7C533E" d="M20.936 16.957v-2.044c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zm2.593 2.684c-1.107 0-2.013-.906-2.013-2.013V4.712c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v12.916c0 1.107-.906 2.013-2.013 2.013zM9 23c-1.107 0-2.013-.906-2.013-2.013V17.01c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v3.977C11.012 22.094 10.106 23 9 23z"/><path fill="#543226" d="M13.193 22.033c-1.2 0-2.181-.982-2.181-2.181V15.54c0-1.2.982-2.181 2.181-2.181 1.2 0 2.181.982 2.181 2.181v4.311c0 1.2-.981 2.182-2.181 2.182zm14.773-1.889c-.013-1.814-1.494-3.274-3.308-3.261h-7.87l.013 6.992h7.907c1.814-.013 3.274-1.494 3.261-3.308l-.003-.423z"/><path fill="#7C533E" d="M13.93 12.965c1.103-.008 2.004.88 2.012 1.983v2.793c-.605.553-.969 1.324-.963 2.209.005.752.297 1.429.758 1.951-.336.619-.982 1.047-1.736 1.052-1.103.008-2.004-.88-2.012-1.983l-.043-5.993c-.007-1.103.881-2.004 1.984-2.012z"/><path fill="#7C533E" d="M27.873 19.273c-.39-1.145-1.422-1.403-1.921-1.399h-7.961c-1.107 0-2.013.906-2.013 2.013s.906 2.013 2.013 2.013l5.493-.003c.276-.002.501.229.503.505.002.276-.22.522-.496.522h-.125c-2.685 0-4.847 3.153-4.819 7.008.002.276-.22.482-.496.484-.276.002-.501-.22-.503-.496-.022-3.006 1.187-5.637 2.983-7.013l-2.534.018c-.999.007-1.273-.278-1.475-.391l.003.003c-.145.232-.922 1.416-2.516 1.416-1.723 0-2.37-1.154-2.494-1.335-.519.799-1.443 1.306-2.516 1.306-.714 0-1.529-.188-1.987-.731.146 6.662 5.541 11.759 12.07 11.712 5.708-.041 10.362-5.069 10.328-9.871-.098-2.659-1.537-5.761-1.537-5.761z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M26.992 19.016c-.255-.255-.799-.611-1.44-.962l-1.911-2-2.113 2h-.58l-2.509-3.634c-1.379.01-2.497 1.136-2.487 2.515l-3.556-2.112c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.168.016 2.185 9.984 10.729S27.525 19.71 27.55 19.74c-.129-.223-.513-.702-.558-.724z"/><g fill="#7C533E"><path d="M25.552 5.81c0-1.107-.906-2.013-2.013-2.013-1.107 0-2.013.906-2.013 2.013v12.245h4.025V5.81zm-4.605 12.244V16.01c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/261d.svg b/public/emoji/261d.svg index a0666143a..95d8ddd17 100644 --- a/public/emoji/261d.svg +++ b/public/emoji/261d.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M15.94 15.838c-.01-1.379 1.108-2.505 2.488-2.515 1.379-.01 2.423 1.1 2.433 2.479l-.006 4.303s1.844 11.797-5.428 11.797-8.414-8.673-8.414-8.673l-.025-2.241c-.01-1.29 8.952-5.15 8.952-5.15z"/><path fill="#FFDC5D" d="M20.936 16.957v-2.044c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zm2.593 2.684c-1.107 0-2.013-.906-2.013-2.013V4.712c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v12.916c0 1.107-.906 2.013-2.013 2.013zM9 23c-1.107 0-2.013-.906-2.013-2.013V17.01c0-1.107.906-2.013 2.013-2.013 1.107 0 2.013.906 2.013 2.013v3.977C11.012 22.094 10.106 23 9 23z"/><path fill="#EF9645" d="M13.193 22.033c-1.2 0-2.181-.982-2.181-2.181V15.54c0-1.2.982-2.181 2.181-2.181 1.2 0 2.181.982 2.181 2.181v4.311c0 1.2-.981 2.182-2.181 2.182zm14.773-1.889c-.013-1.814-1.494-3.274-3.308-3.261h-7.87l.013 6.992h7.907c1.814-.013 3.274-1.494 3.261-3.308l-.003-.423z"/><path fill="#FFDC5D" d="M13.93 12.965c1.103-.008 2.004.88 2.012 1.983v2.793c-.605.553-.969 1.324-.963 2.209.005.752.297 1.429.758 1.951-.336.619-.982 1.047-1.736 1.052-1.103.008-2.004-.88-2.012-1.983l-.043-5.993c-.007-1.103.881-2.004 1.984-2.012z"/><path fill="#FFDC5D" d="M27.873 19.273c-.39-1.145-1.422-1.403-1.921-1.399h-7.961c-1.107 0-2.013.906-2.013 2.013s.906 2.013 2.013 2.013l5.493-.003c.276-.002.501.229.503.505.002.276-.22.522-.496.522h-.125c-2.685 0-4.847 3.153-4.819 7.008.002.276-.22.482-.496.484-.276.002-.501-.22-.503-.496-.022-3.006 1.187-5.637 2.983-7.013l-2.534.018c-.999.007-1.273-.278-1.475-.391l.003.003c-.145.232-.922 1.416-2.516 1.416-1.723 0-2.37-1.154-2.494-1.335-.519.799-1.443 1.306-2.516 1.306-.714 0-1.529-.188-1.987-.731.146 6.662 5.541 11.759 12.07 11.712 5.708-.041 10.362-5.069 10.328-9.871-.098-2.659-1.537-5.761-1.537-5.761z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M26.992 19.016c-.255-.255-.799-.611-1.44-.962l-1.911-2-2.113 2h-.58l-2.509-3.634c-1.379.01-2.497 1.136-2.487 2.515l-3.556-2.112c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.168.016 2.185 9.984 10.729S27.525 19.71 27.55 19.74c-.129-.223-.513-.702-.558-.724z"/><g fill="#FFDC5D"><path d="M25.552 5.81c0-1.107-.906-2.013-2.013-2.013-1.107 0-2.013.906-2.013 2.013v12.245h4.025V5.81zm-4.605 12.244V16.01c-.008-1.103-.909-1.991-2.012-1.983-1.103.008-1.991.909-1.983 2.012l.012 2.016h3.983zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/265f.svg b/public/emoji/265f.svg index e1ff6bb0c..10c880c2f 100644 --- a/public/emoji/265f.svg +++ b/public/emoji/265f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M27.819 33.653C28.46 32.997 29 32.072 29 30.801c0-3.149-3.645-6.753-5-9.801-1.333-3-2.104-5.875-.083-6.688l.17-.073c.578-.218.913-.47.913-.739 0-.46-.97-.872-2.494-1.147C24.03 11.069 25 9.149 25 7c0-3.866-3.134-7-7-7s-7 3.134-7 7c0 2.149.97 4.069 2.494 5.353C11.97 12.628 11 13.04 11 13.5c0 .269.335.521.914.739.056.024.106.048.169.073C14.104 15.125 13.333 18 12 21c-1.355 3.048-5 6.652-5 9.801 0 1.271.54 2.196 1.181 2.852C7.432 34.058 7 34.515 7 35c0 .351.233.687.639 1H28.36c.407-.313.64-.649.64-1 0-.485-.432-.942-1.181-1.347z"/><path fill="#66757F" d="M22.001 4.75c-.275 0-.54-.152-.672-.415-.03-.058-.866-1.585-3.329-1.585s-3.298 1.527-3.333 1.593c-.192.364-.644.509-1.008.32-.366-.188-.514-.631-.33-.999.049-.098 1.247-2.414 4.671-2.414 3.424 0 4.621 2.316 4.671 2.415.186.371.035.821-.336 1.006-.107.054-.222.079-.334.079zM22 14c-.075 0-.151-.017-.224-.053-.004-.001-.988-.447-3.776-.447-2.789 0-3.772.446-3.782.45-.247.117-.546.013-.665-.234-.119-.246-.021-.541.224-.664.113-.056 1.192-.552 4.223-.552 3.03 0 4.11.496 4.224.553.247.124.347.424.224.671-.089.175-.265.276-.448.276zM10 34.5c-.254 0-.471-.192-.497-.45-.027-.274.173-.52.448-.547C10 33.497 15.01 33 18 33s7.999.497 8.05.503c.274.027.476.272.447.547-.027.274-.275.479-.547.447C25.9 34.492 20.94 34 18 34c-2.941 0-7.9.492-7.95.497L10 34.5z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M27.819 33.653C28.46 32.997 29 32.072 29 30.801c0-3.149-3.645-6.753-5-9.801-1.333-3-2.104-5.875-.083-6.688l.17-.073c.578-.218.913-.47.913-.739 0-.46-.97-.872-2.494-1.147C24.03 11.069 25 9.149 25 7c0-3.866-3.134-7-7-7s-7 3.134-7 7c0 2.149.97 4.069 2.494 5.353C11.97 12.628 11 13.04 11 13.5c0 .269.335.521.914.739.056.024.106.048.169.073C14.104 15.125 13.333 18 12 21c-1.355 3.048-5 6.652-5 9.801 0 1.271.54 2.196 1.181 2.852C7.432 34.058 7 34.515 7 35c0 .351.233.687.639 1H28.36c.407-.313.64-.649.64-1 0-.485-.432-.942-1.181-1.347z"/><path fill="#66757F" d="M22.001 4.75c-.275 0-.54-.152-.672-.415-.03-.058-.866-1.585-3.329-1.585s-3.298 1.527-3.333 1.593c-.192.364-.644.509-1.008.32-.366-.188-.514-.631-.33-.999.049-.098 1.247-2.414 4.671-2.414 3.424 0 4.621 2.316 4.671 2.415.186.371.035.821-.336 1.006-.107.054-.222.079-.334.079zM22 14c-.075 0-.151-.017-.224-.053-.004-.001-.988-.447-3.776-.447-2.789 0-3.772.446-3.782.45-.247.117-.546.013-.665-.234-.119-.246-.021-.541.224-.664.113-.056 1.192-.552 4.223-.552 3.03 0 4.11.496 4.224.553.247.124.347.424.224.671-.089.175-.265.276-.448.276zM10 34.5c-.254 0-.471-.192-.497-.45-.027-.274.173-.52.448-.547C10 33.497 15.01 33 18 33s7.999.497 8.05.503c.274.027.476.272.447.547-.027.274-.275.479-.547.447C25.9 34.492 20.94 34 18 34c-2.941 0-7.9.492-7.95.497L10 34.5z"/></svg> \ No newline at end of file diff --git a/public/emoji/2660.svg b/public/emoji/2660.svg index 96c1139a8..5f7b10914 100644 --- a/public/emoji/2660.svg +++ b/public/emoji/2660.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M32.799 20.336C32.799 11.456 18 .198 18 .198S3.201 11.456 3.201 20.336c0 6.946 8.175 10.172 12.766 5.173C15.631 29.688 11.247 33 7 33h.5c-.829 0-1.5.672-1.5 1.5S6.671 36 7.5 36h21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5h.5c-4.246 0-8.632-3.312-8.967-7.491 4.591 4.999 12.766 1.773 12.766-5.173z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M32.799 20.336C32.799 11.456 18 .198 18 .198S3.201 11.456 3.201 20.336c0 6.946 8.175 10.172 12.766 5.173C15.631 29.688 11.247 33 7 33h.5c-.829 0-1.5.672-1.5 1.5S6.671 36 7.5 36h21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5h.5c-4.246 0-8.632-3.312-8.967-7.491 4.591 4.999 12.766 1.773 12.766-5.173z"/></svg> \ No newline at end of file diff --git a/public/emoji/2663.svg b/public/emoji/2663.svg index 29e2ff937..a9dce6f24 100644 --- a/public/emoji/2663.svg +++ b/public/emoji/2663.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M25.5 28c4.143 0 7.5-3.358 7.5-7.5 0-4.142-3.357-7.5-7.5-7.5-1.359 0-2.631.367-3.73 1h-.21c2.047-1.217 3.423-3.445 3.423-6 0-3.857-3.126-6.984-6.983-6.984S11.016 4.143 11.016 8c0 2.555 1.376 4.783 3.423 6h-.208c-1.1-.633-2.371-1-3.731-1C6.358 13 3 16.358 3 20.5c0 4.142 3.358 7.5 7.5 7.5 2.155 0 4.091-.914 5.46-2.368C15.549 29.753 11.205 33 7 33h.5c-.829 0-1.5.672-1.5 1.5S6.671 36 7.5 36h21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5h.5c-4.205 0-8.549-3.248-8.959-7.369C21.408 27.086 23.346 28 25.5 28z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M25.5 28c4.143 0 7.5-3.358 7.5-7.5 0-4.142-3.357-7.5-7.5-7.5-1.359 0-2.631.367-3.73 1h-.21c2.047-1.217 3.423-3.445 3.423-6 0-3.857-3.126-6.984-6.983-6.984S11.016 4.143 11.016 8c0 2.555 1.376 4.783 3.423 6h-.208c-1.1-.633-2.371-1-3.731-1C6.358 13 3 16.358 3 20.5c0 4.142 3.358 7.5 7.5 7.5 2.155 0 4.091-.914 5.46-2.368C15.549 29.753 11.205 33 7 33h.5c-.829 0-1.5.672-1.5 1.5S6.671 36 7.5 36h21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5h.5c-4.205 0-8.549-3.248-8.959-7.369C21.408 27.086 23.346 28 25.5 28z"/></svg> \ No newline at end of file diff --git a/public/emoji/2665.svg b/public/emoji/2665.svg index f05d460cd..67f49c3d3 100644 --- a/public/emoji/2665.svg +++ b/public/emoji/2665.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M2.067 11.319C2.067 2.521 14.251-.74 18 9.445 21.749-.741 33.933 2.52 33.933 11.319 33.933 20.879 18 33 18 33S2.067 20.879 2.067 11.319z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M2.067 11.319C2.067 2.521 14.251-.74 18 9.445 21.749-.741 33.933 2.52 33.933 11.319 33.933 20.879 18 33 18 33S2.067 20.879 2.067 11.319z"/></svg> \ No newline at end of file diff --git a/public/emoji/2666.svg b/public/emoji/2666.svg index c2706b607..02f93aadd 100644 --- a/public/emoji/2666.svg +++ b/public/emoji/2666.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M18.437 35.747c-.242.337-.632.337-.874 0L5.314 18.612c-.242-.338-.242-.886 0-1.224L17.563.253c.242-.338.632-.338.874 0l12.25 17.135c.241.338.241.886 0 1.224l-12.25 17.135z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M18.437 35.747c-.242.337-.632.337-.874 0L5.314 18.612c-.242-.338-.242-.886 0-1.224L17.563.253c.242-.338.632-.338.874 0l12.25 17.135c.241.338.241.886 0 1.224l-12.25 17.135z"/></svg> \ No newline at end of file diff --git a/public/emoji/26a7.svg b/public/emoji/26a7.svg new file mode 100644 index 000000000..0d0b230b5 --- /dev/null +++ b/public/emoji/26a7.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9266CC" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/><path fill="#FFF" d="M18 24.3c-3.749 0-6.8-3.051-6.8-6.8s3.051-6.8 6.8-6.8 6.8 3.051 6.8 6.8-3.051 6.8-6.8 6.8zm0-11.2c-2.426 0-4.4 1.974-4.4 4.4s1.974 4.4 4.4 4.4 4.4-1.974 4.4-4.4-1.974-4.4-4.4-4.4z"/><path fill="#FFF" d="M18 31.5c-.663 0-1.2-.538-1.2-1.2v-7.2c0-.663.537-1.2 1.2-1.2s1.2.538 1.2 1.2v7.2c0 .662-.537 1.2-1.2 1.2z"/><path fill="#FFF" d="M21.9 28.3h-7.8c-.663 0-1.2-.537-1.2-1.2s.537-1.2 1.2-1.2h7.8c.663 0 1.2.538 1.2 1.2s-.537 1.2-1.2 1.2zm6.9-22.8h-7.175c-.663 0-1.2.537-1.2 1.2s.537 1.2 1.2 1.2h4.278l-5.6 5.503L22 15.1l5.6-5.503V13.9c0 .662.538 1.2 1.2 1.2.663 0 1.2-.538 1.2-1.2V6.7c0-.663-.538-1.2-1.2-1.2zm-15.194 5.291l-2.315 2.315c-.469.469-1.229.468-1.697 0-.468-.468-.469-1.228 0-1.697l2.315-2.315c.469-.469 1.229-.468 1.697 0 .469.468.469 1.228 0 1.697z"/><path fill="#FFF" d="M7.2 5.5h7.175c.663 0 1.2.537 1.2 1.2s-.537 1.2-1.2 1.2h-4.278l5.6 5.503L14 15.1 8.4 9.597V13.9c0 .662-.537 1.2-1.2 1.2S6 14.562 6 13.9V6.7c0-.663.537-1.2 1.2-1.2z"/></svg> \ No newline at end of file diff --git a/public/emoji/26ab.svg b/public/emoji/26ab.svg index 8f1a63a0d..169b72cc9 100644 --- a/public/emoji/26ab.svg +++ b/public/emoji/26ab.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#292F33" cx="18" cy="18" r="18"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#31373D" cx="18" cy="18" r="18"/></svg> \ No newline at end of file diff --git a/public/emoji/26bd.svg b/public/emoji/26bd.svg index b7ab49521..f24749cb5 100644 --- a/public/emoji/26bd.svg +++ b/public/emoji/26bd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#F5F8FA" cx="18" cy="18" r="18"/><path d="M18 11c-.552 0-1-.448-1-1V3c0-.552.448-1 1-1s1 .448 1 1v7c0 .552-.448 1-1 1zm-6.583 4.5c-.1 0-.202-.015-.302-.047l-8.041-2.542c-.527-.167-.819-.728-.652-1.255.166-.527.73-.818 1.255-.652l8.042 2.542c.527.167.819.729.652 1.255-.136.426-.53.699-.954.699zm13.625-.291c-.434 0-.833-.285-.96-.722-.154-.531.151-1.085.682-1.239l6.75-1.958c.531-.153 1.085.153 1.238.682.154.531-.151 1.085-.682 1.239l-6.75 1.958c-.092.027-.186.04-.278.04zm2.001 14.958c-.306 0-.606-.14-.803-.403l-5.459-7.333c-.33-.442-.238-1.069.205-1.399.442-.331 1.069-.238 1.399.205l5.459 7.333c.33.442.238 1.069-.205 1.399-.179.134-.389.198-.596.198zm-18.294-.083c-.197 0-.395-.058-.57-.179-.454-.316-.565-.938-.25-1.392l5.125-7.375c.315-.454.938-.566 1.392-.251.454.315.565.939.25 1.392l-5.125 7.375c-.194.281-.506.43-.822.43zM3.5 27.062c-.44 0-.844-.293-.965-.738L.347 18.262c-.145-.533.17-1.082.704-1.227.535-.141 1.083.171 1.227.704l2.188 8.062c.145.533-.17 1.082-.704 1.226-.088.025-.176.035-.262.035zM22 34h-9c-.552 0-1-.447-1-1s.448-1 1-1h9c.553 0 1 .447 1 1s-.447 1-1 1zm10.126-6.875c-.079 0-.16-.009-.24-.029-.536-.132-.864-.674-.731-1.21l2.125-8.625c.133-.536.679-.862 1.21-.732.536.132.864.674.731 1.211l-2.125 8.625c-.113.455-.521.76-.97.76zM30.312 7.688c-.17 0-.342-.043-.5-.134L22.25 3.179c-.478-.277-.642-.888-.364-1.367.275-.478.886-.643 1.366-.365l7.562 4.375c.478.277.642.888.364 1.367-.185.32-.521.499-.866.499zm-24.811 0c-.312 0-.618-.145-.813-.417-.322-.45-.22-1.074.229-1.396l6.188-4.438c.449-.322 1.074-.219 1.396.229.322.449.219 1.074-.229 1.396L6.083 7.5c-.177.126-.38.188-.582.188z" fill="#CCD6DD"/><path d="M25.493 13.516l-7.208-5.083c-.348-.245-.814-.243-1.161.006l-7.167 5.167c-.343.248-.494.684-.375 1.091l2.5 8.583c.124.426.515.72.96.72H22c.43 0 .81-.274.948-.681l2.917-8.667c.141-.419-.011-.881-.372-1.136zM1.292 19.542c.058 0 .117-.005.175-.016.294-.052.55-.233.697-.494l3.375-6c.051-.091.087-.188.108-.291L6.98 6.2c.06-.294-.016-.6-.206-.832C6.584 5.135 6.3 5 6 5h-.428C2.145 8.277 0 12.884 0 18c0 .266.028.525.04.788l.602.514c.182.156.413.24.65.24zm9.325-16.547c.106.219.313.373.553.412l6.375 1.042c.04.006.081.01.121.01.04 0 .081-.003.122-.01l6.084-1c.2-.033.38-.146.495-.314.116-.168.158-.375.118-.575l-.292-1.443C22.26.407 20.18 0 18 0c-2.425 0-4.734.486-6.845 1.356l-.521.95c-.117.213-.123.47-.017.689zm20.517 2.724l-1.504-.095c-.228-.013-.455.076-.609.249-.152.173-.218.402-.175.63l1.167 6.198c.017.086.048.148.093.224 1.492 2.504 3.152 5.301 3.381 5.782.024.084.062.079.114.151.14.195.372.142.612.142h.007c.198 0 .323.094 1.768-.753.001-.083.012-.164.012-.247 0-4.753-1.856-9.064-4.866-12.281zM14.541 33.376c.011-.199-.058-.395-.191-.544l-4.5-5c-.06-.066-.131-.122-.211-.163-5.885-3.069-5.994-3.105-6.066-3.13-.078-.025-.161-.039-.242-.039-.537 0-.695.065-1.185 2.024 2.236 4.149 6.053 7.316 10.644 8.703l1.5-1.333c.149-.132.239-.319.251-.518zm17.833-8.567c-.189-.08-.405-.078-.592.005l-6.083 2.667c-.106.046-.2.116-.274.205l-4.25 5.083c-.129.154-.19.352-.172.552.02.2.117.384.272.51.683.559 1.261 1.03 1.767 1.44 4.437-1.294 8.154-4.248 10.454-8.146l-.712-1.889c-.072-.193-.221-.347-.41-.427z" fill="#292F33"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#F5F8FA" cx="18" cy="18" r="18"/><path d="M18 11c-.552 0-1-.448-1-1V3c0-.552.448-1 1-1s1 .448 1 1v7c0 .552-.448 1-1 1zm-6.583 4.5c-.1 0-.202-.015-.302-.047l-8.041-2.542c-.527-.167-.819-.728-.652-1.255.166-.527.73-.818 1.255-.652l8.042 2.542c.527.167.819.729.652 1.255-.136.426-.53.699-.954.699zm13.625-.291c-.434 0-.833-.285-.96-.722-.154-.531.151-1.085.682-1.239l6.75-1.958c.531-.153 1.085.153 1.238.682.154.531-.151 1.085-.682 1.239l-6.75 1.958c-.092.027-.186.04-.278.04zm2.001 14.958c-.306 0-.606-.14-.803-.403l-5.459-7.333c-.33-.442-.238-1.069.205-1.399.442-.331 1.069-.238 1.399.205l5.459 7.333c.33.442.238 1.069-.205 1.399-.179.134-.389.198-.596.198zm-18.294-.083c-.197 0-.395-.058-.57-.179-.454-.316-.565-.938-.25-1.392l5.125-7.375c.315-.454.938-.566 1.392-.251.454.315.565.939.25 1.392l-5.125 7.375c-.194.281-.506.43-.822.43zM3.5 27.062c-.44 0-.844-.293-.965-.738L.347 18.262c-.145-.533.17-1.082.704-1.227.535-.141 1.083.171 1.227.704l2.188 8.062c.145.533-.17 1.082-.704 1.226-.088.025-.176.035-.262.035zM22 34h-9c-.552 0-1-.447-1-1s.448-1 1-1h9c.553 0 1 .447 1 1s-.447 1-1 1zm10.126-6.875c-.079 0-.16-.009-.24-.029-.536-.132-.864-.674-.731-1.21l2.125-8.625c.133-.536.679-.862 1.21-.732.536.132.864.674.731 1.211l-2.125 8.625c-.113.455-.521.76-.97.76zM30.312 7.688c-.17 0-.342-.043-.5-.134L22.25 3.179c-.478-.277-.642-.888-.364-1.367.275-.478.886-.643 1.366-.365l7.562 4.375c.478.277.642.888.364 1.367-.185.32-.521.499-.866.499zm-24.811 0c-.312 0-.618-.145-.813-.417-.322-.45-.22-1.074.229-1.396l6.188-4.438c.449-.322 1.074-.219 1.396.229.322.449.219 1.074-.229 1.396L6.083 7.5c-.177.126-.38.188-.582.188z" fill="#CCD6DD"/><path d="M25.493 13.516l-7.208-5.083c-.348-.245-.814-.243-1.161.006l-7.167 5.167c-.343.248-.494.684-.375 1.091l2.5 8.583c.124.426.515.72.96.72H22c.43 0 .81-.274.948-.681l2.917-8.667c.141-.419-.011-.881-.372-1.136zM1.292 19.542c.058 0 .117-.005.175-.016.294-.052.55-.233.697-.494l3.375-6c.051-.091.087-.188.108-.291L6.98 6.2c.06-.294-.016-.6-.206-.832C6.584 5.135 6.3 5 6 5h-.428C2.145 8.277 0 12.884 0 18c0 .266.028.525.04.788l.602.514c.182.156.413.24.65.24zm9.325-16.547c.106.219.313.373.553.412l6.375 1.042c.04.006.081.01.121.01.04 0 .081-.003.122-.01l6.084-1c.2-.033.38-.146.495-.314.116-.168.158-.375.118-.575l-.292-1.443C22.26.407 20.18 0 18 0c-2.425 0-4.734.486-6.845 1.356l-.521.95c-.117.213-.123.47-.017.689zm20.517 2.724l-1.504-.095c-.228-.013-.455.076-.609.249-.152.173-.218.402-.175.63l1.167 6.198c.017.086.048.148.093.224 1.492 2.504 3.152 5.301 3.381 5.782.024.084.062.079.114.151.14.195.372.142.612.142h.007c.198 0 .323.094 1.768-.753.001-.083.012-.164.012-.247 0-4.753-1.856-9.064-4.866-12.281zM14.541 33.376c.011-.199-.058-.395-.191-.544l-4.5-5c-.06-.066-.131-.122-.211-.163-5.885-3.069-5.994-3.105-6.066-3.13-.078-.025-.161-.039-.242-.039-.537 0-.695.065-1.185 2.024 2.236 4.149 6.053 7.316 10.644 8.703l1.5-1.333c.149-.132.239-.319.251-.518zm17.833-8.567c-.189-.08-.405-.078-.592.005l-6.083 2.667c-.106.046-.2.116-.274.205l-4.25 5.083c-.129.154-.19.352-.172.552.02.2.117.384.272.51.683.559 1.261 1.03 1.767 1.44 4.437-1.294 8.154-4.248 10.454-8.146l-.712-1.889c-.072-.193-.221-.347-.41-.427z" fill="#31373D"/></svg> \ No newline at end of file diff --git a/public/emoji/26f7-1f3fb.svg b/public/emoji/26f7-1f3fb.svg index fc070edb9..e62b3406b 100644 --- a/public/emoji/26f7-1f3fb.svg +++ b/public/emoji/26f7-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A6" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936zm5.013 4.535c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#67757F" d="M13.497 25.772c.273-.041.543-.143.787-.311l2.151-1.189c1.08-.562.68-1.912.614-2.359l-.621-2.793 2.564-3.298c.627-.804.48-3.3-.324-3.926-.806-.626-1.965-.479-2.589.325l-3.05 3.922c-.31.398-.443.907-.368 1.406l.633 4.218-1.118.664c-.837.582-1.043 1.732-.462 2.568.414.596 1.112.871 1.783.773z"/><path fill="#67757F" d="M19.594 29.781c.264-.083 2.75-1.562 2.75-1.562.865-.688.323-2.444.168-2.869l-1.438-3.923 1.85-3.745c.451-.913.076-2.021-.838-2.471-.914-.452-2.021-.075-2.471.837l-2.2 4.455c-.224.454-.251.978-.079 1.452l1.469 4.005-1.004.779c-.731.71-.747 1.878-.037 2.609.506.518 1.183.639 1.83.433z"/><path fill="#BBDDF5" d="M9.639 19.396c3.667-1.292 5.389-6.467 5.573-7.052.331-1.054-.254-2.177-1.308-2.508-1.053-.331-2.174.252-2.507 1.304-.507 1.588-1.8 4.03-3.088 4.484-1.042.367-1.589 1.509-1.222 2.551.368 1.042 1.51 1.589 2.552 1.221z"/><path fill="#8899A6" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#BBDDF5" d="M27.002 17.521c.791-.279 1.351-1.038 1.335-1.921-.058-3.346-1.616-5.92-4.392-7.249-1.964-.94-3.863-.937-4.073-.933-1.103.019-1.985.929-1.966 2.034.019 1.101.923 1.978 2.022 1.966 1.02-.002 4.342.301 4.409 4.251.02 1.104.93 1.984 2.033 1.965.223-.004.436-.044.632-.113z"/><path fill="#67757F" d="M15.132 16.931c.642 1.824 2.641 2.781 4.464 2.138 1.823-.642 2.78-2.641 2.138-4.464l-1.329-3.773c-.643-1.823-2.641-2.78-4.464-2.138-1.823.643-2.78 2.641-2.138 4.464l1.329 3.773z"/><path fill="#BBDDF5" d="M11.417 12.409c.367 1.042 1.509 1.588 2.551 1.222l6.601-2.327c1.042-.367 1.589-1.509 1.222-2.551-.366-1.042-1.509-1.589-2.551-1.222l-6.602 2.326c-1.04.368-1.587 1.51-1.221 2.552z"/><path fill="#BBDDF5" d="M17 18c-2.614-.366-3.175-1.493-3.244-1.69l-1.15-3.261c-.83-2.358 1.723-3.258 3.414-3.854 1.69-.595 3.61-.074 5.075.863 2.822 1.804 2.347 6.303 2.347 6.303.005.343-.075.859-.171.993-.061.084-2.188 1.218-6.271.646z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#F7DECE" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><path fill="#BDDDF4" d="M11.471 6.559c.275.781-.135 1.638-.917 1.913-.781.275-1.637-.135-1.913-.917-.275-.781.135-1.637.916-1.913.782-.275 1.638.135 1.914.917z"/><path fill="#67757F" d="M10.721 8.943c-1.041.367-2.185-.181-2.552-1.221-.366-1.041.182-2.185 1.222-2.552s2.185.182 2.551 1.222c.367 1.041-.181 2.185-1.221 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.183-.52-.755-.794-1.275-.611z"/><path fill="#BDDDF4" d="M14.3 5.562c.275.781-.135 1.638-.917 1.913-.781.275-1.638-.135-1.913-.916-.275-.782.135-1.638.916-1.914.782-.275 1.639.135 1.914.917z"/><path fill="#67757F" d="M13.55 7.946c-1.04.367-2.184-.182-2.551-1.222s.181-2.185 1.222-2.551c1.04-.366 2.185.182 2.551 1.222.366 1.041-.182 2.185-1.222 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.182-.521-.755-.794-1.275-.611z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A7" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936z"/><path fill="#1C6399" d="M13.562 21.828c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853s-3.047.094-3.047.094z"/><path fill="#AA8ED6" d="M31.825 22.344c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#1C6399" d="M19.344 26c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853S19.344 26 19.344 26z"/><path fill="#55ACEE" d="M18.558 26.942c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.153-.347-.806-.877-1.429-.895zm-.69.505c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.138-.313-.726-.789-1.287-.805z"/><path fill="#8899A7" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#1C6399" d="M24.688 14.404c-.312.958-.676 1.875-.312 2.412.359.531 1.672 1.382 2.406 1.278s1.469-1.75.927-3.21c-.312-.841-3.021-.48-3.021-.48z"/><path fill="#67757F" d="M21.733 14.605l-7.449-.077-1.255 1.614c-.31.398-.467 1.01-.467 1.337-.001.833.562 2.792.732 4.287.181 1.598 3.542.793 3.497.192-.073-.972.11-1.64-.302-2.511-.078-.165.199-.662.199-.662.415.24.872.395 1.353.449l-.627 1.269c-.224.454-.259 1.109-.086 1.584 0 0 1.328 3.135 1.476 3.874.323 1.602 4.206.488 3.706-.61-.595-1.308-.553-2.954-1.438-3.923.905-1.135 2.197-2.59 2.041-3.979.002-.001-1.319-2.672-1.38-2.844z"/><path fill="#BBDDF5" d="M21.062 7.057c-.524-.108-6.586 2.12-8.108 2.69-1.959.733-1.381 2.407-2.238 3.944-.459.823-1.578 1.197-2.252 1.815-.7.643-.278 1.564.196 2.262.794 1.169 1.585 1.244 2.766.487.916-.587 1.594-1.51 2.162-2.422.724 2.055 3.283 2.263 5.183 2.32 1.193.036 2.42-.056 3.566-.407.837-.257 1.119-.397 1.105-1.385 0 0 .222-2.11-.544-4.019.385.302.737.501.927.959.152.369.08.794.196 1.156.165.511.585.7 1.087.866.607.201 1.322.321 1.963.252.87-.094.849-.441.778-1.294-.129-1.561-.546-3.25-1.748-4.316-1.411-1.25-3.16-2.52-5.039-2.908z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#F7DECE" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><circle fill="#67757F" cx="10.056" cy="7.057" r="2"/><circle fill="#BDDDF4" cx="10.056" cy="7.057" r="1"/><circle fill="#67757F" cx="12.891" cy="6.062" r="2"/><circle fill="#BDDDF4" cx="12.891" cy="6.062" r="1"/><path fill="#1C6399" d="M8.312 16.373c-.907.382-1.531 1.127-1.703 1.517s.358 1.815 1.703 2.219 1.485-1.297 1.813-1.609-.844-2.535-1.813-2.127z"/><path fill="#8899A7" d="M7.387 18.082l-.151-.161c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022 0 0 .092.095.151.161.22.245-.539.892-.728.686z"/><path fill="#004A77" d="M9.818 19.122c.117-.394-.157-1.006-.338-1.249-.337.439-.792.91-1.184.808.084.314.578.204.885.016.307-.189.637.425.637.425z"/><path fill="#55ACEE" d="M12.776 22.771c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.152-.348-.805-.878-1.429-.895zm-.69.504c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.137-.313-.725-.789-1.287-.805z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f7-1f3fc.svg b/public/emoji/26f7-1f3fc.svg index e3f08e7cc..38dac4b19 100644 --- a/public/emoji/26f7-1f3fc.svg +++ b/public/emoji/26f7-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A6" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936zm5.013 4.535c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#67757F" d="M13.497 25.772c.273-.041.543-.143.787-.311l2.151-1.189c1.08-.562.68-1.912.614-2.359l-.621-2.793 2.564-3.298c.627-.804.48-3.3-.324-3.926-.806-.626-1.965-.479-2.589.325l-3.05 3.922c-.31.398-.443.907-.368 1.406l.633 4.218-1.118.664c-.837.582-1.043 1.732-.462 2.568.414.596 1.112.871 1.783.773z"/><path fill="#67757F" d="M19.594 29.781c.264-.083 2.75-1.562 2.75-1.562.865-.688.323-2.444.168-2.869l-1.438-3.923 1.85-3.745c.451-.913.076-2.021-.838-2.471-.914-.452-2.021-.075-2.471.837l-2.2 4.455c-.224.454-.251.978-.079 1.452l1.469 4.005-1.004.779c-.731.71-.747 1.878-.037 2.609.506.518 1.183.639 1.83.433z"/><path fill="#BBDDF5" d="M9.639 19.396c3.667-1.292 5.389-6.467 5.573-7.052.331-1.054-.254-2.177-1.308-2.508-1.053-.331-2.174.252-2.507 1.304-.507 1.588-1.8 4.03-3.088 4.484-1.042.367-1.589 1.509-1.222 2.551.368 1.042 1.51 1.589 2.552 1.221z"/><path fill="#8899A6" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#BBDDF5" d="M27.002 17.521c.791-.279 1.351-1.038 1.335-1.921-.058-3.346-1.616-5.92-4.392-7.249-1.964-.94-3.863-.937-4.073-.933-1.103.019-1.985.929-1.966 2.034.019 1.101.923 1.978 2.022 1.966 1.02-.002 4.342.301 4.409 4.251.02 1.104.93 1.984 2.033 1.965.223-.004.436-.044.632-.113z"/><path fill="#67757F" d="M15.132 16.931c.642 1.824 2.641 2.781 4.464 2.138 1.823-.642 2.78-2.641 2.138-4.464l-1.329-3.773c-.643-1.823-2.641-2.78-4.464-2.138-1.823.643-2.78 2.641-2.138 4.464l1.329 3.773z"/><path fill="#BBDDF5" d="M11.417 12.409c.367 1.042 1.509 1.588 2.551 1.222l6.601-2.327c1.042-.367 1.589-1.509 1.222-2.551-.366-1.042-1.509-1.589-2.551-1.222l-6.602 2.326c-1.04.368-1.587 1.51-1.221 2.552z"/><path fill="#BBDDF5" d="M17 18c-2.614-.366-3.175-1.493-3.244-1.69l-1.15-3.261c-.83-2.358 1.723-3.258 3.414-3.854 1.69-.595 3.61-.074 5.075.863 2.822 1.804 2.347 6.303 2.347 6.303.005.343-.075.859-.171.993-.061.084-2.188 1.218-6.271.646z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#F3D2A2" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><path fill="#BDDDF4" d="M11.471 6.559c.275.781-.135 1.638-.917 1.913-.781.275-1.637-.135-1.913-.917-.275-.781.135-1.637.916-1.913.782-.275 1.638.135 1.914.917z"/><path fill="#67757F" d="M10.721 8.943c-1.041.367-2.185-.181-2.552-1.221-.366-1.041.182-2.185 1.222-2.552s2.185.182 2.551 1.222c.367 1.041-.181 2.185-1.221 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.183-.52-.755-.794-1.275-.611z"/><path fill="#BDDDF4" d="M14.3 5.562c.275.781-.135 1.638-.917 1.913-.781.275-1.638-.135-1.913-.916-.275-.782.135-1.638.916-1.914.782-.275 1.639.135 1.914.917z"/><path fill="#67757F" d="M13.55 7.946c-1.04.367-2.184-.182-2.551-1.222s.181-2.185 1.222-2.551c1.04-.366 2.185.182 2.551 1.222.366 1.041-.182 2.185-1.222 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.182-.521-.755-.794-1.275-.611z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A7" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936z"/><path fill="#1C6399" d="M13.562 21.828c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853s-3.047.094-3.047.094z"/><path fill="#AA8ED6" d="M31.825 22.344c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#1C6399" d="M19.344 26c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853S19.344 26 19.344 26z"/><path fill="#55ACEE" d="M18.558 26.942c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.153-.347-.806-.877-1.429-.895zm-.69.505c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.138-.313-.726-.789-1.287-.805z"/><path fill="#8899A7" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#1C6399" d="M24.688 14.404c-.312.958-.676 1.875-.312 2.412.359.531 1.672 1.382 2.406 1.278s1.469-1.75.927-3.21c-.312-.841-3.021-.48-3.021-.48z"/><path fill="#67757F" d="M21.733 14.605l-7.449-.077-1.255 1.614c-.31.398-.467 1.01-.467 1.337-.001.833.562 2.792.732 4.287.181 1.598 3.542.793 3.497.192-.073-.972.11-1.64-.302-2.511-.078-.165.199-.662.199-.662.415.24.872.395 1.353.449l-.627 1.269c-.224.454-.259 1.109-.086 1.584 0 0 1.328 3.135 1.476 3.874.323 1.602 4.206.488 3.706-.61-.595-1.308-.553-2.954-1.438-3.923.905-1.135 2.197-2.59 2.041-3.979.002-.001-1.319-2.672-1.38-2.844z"/><path fill="#BBDDF5" d="M21.062 7.057c-.524-.108-6.586 2.12-8.108 2.69-1.959.733-1.381 2.407-2.238 3.944-.459.823-1.578 1.197-2.252 1.815-.7.643-.278 1.564.196 2.262.794 1.169 1.585 1.244 2.766.487.916-.587 1.594-1.51 2.162-2.422.724 2.055 3.283 2.263 5.183 2.32 1.193.036 2.42-.056 3.566-.407.837-.257 1.119-.397 1.105-1.385 0 0 .222-2.11-.544-4.019.385.302.737.501.927.959.152.369.08.794.196 1.156.165.511.585.7 1.087.866.607.201 1.322.321 1.963.252.87-.094.849-.441.778-1.294-.129-1.561-.546-3.25-1.748-4.316-1.411-1.25-3.16-2.52-5.039-2.908z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#F3D2A2" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><circle fill="#67757F" cx="10.056" cy="7.057" r="2"/><circle fill="#BDDDF4" cx="10.056" cy="7.057" r="1"/><circle fill="#67757F" cx="12.891" cy="6.062" r="2"/><circle fill="#BDDDF4" cx="12.891" cy="6.062" r="1"/><path fill="#1C6399" d="M8.312 16.373c-.907.382-1.531 1.127-1.703 1.517s.358 1.815 1.703 2.219 1.485-1.297 1.813-1.609-.844-2.535-1.813-2.127z"/><path fill="#8899A7" d="M7.387 18.082l-.151-.161c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022 0 0 .092.095.151.161.22.245-.539.892-.728.686z"/><path fill="#004A77" d="M9.818 19.122c.117-.394-.157-1.006-.338-1.249-.337.439-.792.91-1.184.808.084.314.578.204.885.016.307-.189.637.425.637.425z"/><path fill="#55ACEE" d="M12.776 22.771c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.152-.348-.805-.878-1.429-.895zm-.69.504c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.137-.313-.725-.789-1.287-.805z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f7-1f3fd.svg b/public/emoji/26f7-1f3fd.svg index f0acc1ae5..88013381f 100644 --- a/public/emoji/26f7-1f3fd.svg +++ b/public/emoji/26f7-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A6" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936zm5.013 4.535c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#67757F" d="M13.497 25.772c.273-.041.543-.143.787-.311l2.151-1.189c1.08-.562.68-1.912.614-2.359l-.621-2.793 2.564-3.298c.627-.804.48-3.3-.324-3.926-.806-.626-1.965-.479-2.589.325l-3.05 3.922c-.31.398-.443.907-.368 1.406l.633 4.218-1.118.664c-.837.582-1.043 1.732-.462 2.568.414.596 1.112.871 1.783.773z"/><path fill="#67757F" d="M19.594 29.781c.264-.083 2.75-1.562 2.75-1.562.865-.688.323-2.444.168-2.869l-1.438-3.923 1.85-3.745c.451-.913.076-2.021-.838-2.471-.914-.452-2.021-.075-2.471.837l-2.2 4.455c-.224.454-.251.978-.079 1.452l1.469 4.005-1.004.779c-.731.71-.747 1.878-.037 2.609.506.518 1.183.639 1.83.433z"/><path fill="#BBDDF5" d="M9.639 19.396c3.667-1.292 5.389-6.467 5.573-7.052.331-1.054-.254-2.177-1.308-2.508-1.053-.331-2.174.252-2.507 1.304-.507 1.588-1.8 4.03-3.088 4.484-1.042.367-1.589 1.509-1.222 2.551.368 1.042 1.51 1.589 2.552 1.221z"/><path fill="#8899A6" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#BBDDF5" d="M27.002 17.521c.791-.279 1.351-1.038 1.335-1.921-.058-3.346-1.616-5.92-4.392-7.249-1.964-.94-3.863-.937-4.073-.933-1.103.019-1.985.929-1.966 2.034.019 1.101.923 1.978 2.022 1.966 1.02-.002 4.342.301 4.409 4.251.02 1.104.93 1.984 2.033 1.965.223-.004.436-.044.632-.113z"/><path fill="#67757F" d="M15.132 16.931c.642 1.824 2.641 2.781 4.464 2.138 1.823-.642 2.78-2.641 2.138-4.464l-1.329-3.773c-.643-1.823-2.641-2.78-4.464-2.138-1.823.643-2.78 2.641-2.138 4.464l1.329 3.773z"/><path fill="#BBDDF5" d="M11.417 12.409c.367 1.042 1.509 1.588 2.551 1.222l6.601-2.327c1.042-.367 1.589-1.509 1.222-2.551-.366-1.042-1.509-1.589-2.551-1.222l-6.602 2.326c-1.04.368-1.587 1.51-1.221 2.552z"/><path fill="#BBDDF5" d="M17 18c-2.614-.366-3.175-1.493-3.244-1.69l-1.15-3.261c-.83-2.358 1.723-3.258 3.414-3.854 1.69-.595 3.61-.074 5.075.863 2.822 1.804 2.347 6.303 2.347 6.303.005.343-.075.859-.171.993-.061.084-2.188 1.218-6.271.646z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#D5AB88" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><path fill="#BDDDF4" d="M11.471 6.559c.275.781-.135 1.638-.917 1.913-.781.275-1.637-.135-1.913-.917-.275-.781.135-1.637.916-1.913.782-.275 1.638.135 1.914.917z"/><path fill="#67757F" d="M10.721 8.943c-1.041.367-2.185-.181-2.552-1.221-.366-1.041.182-2.185 1.222-2.552s2.185.182 2.551 1.222c.367 1.041-.181 2.185-1.221 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.183-.52-.755-.794-1.275-.611z"/><path fill="#BDDDF4" d="M14.3 5.562c.275.781-.135 1.638-.917 1.913-.781.275-1.638-.135-1.913-.916-.275-.782.135-1.638.916-1.914.782-.275 1.639.135 1.914.917z"/><path fill="#67757F" d="M13.55 7.946c-1.04.367-2.184-.182-2.551-1.222s.181-2.185 1.222-2.551c1.04-.366 2.185.182 2.551 1.222.366 1.041-.182 2.185-1.222 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.182-.521-.755-.794-1.275-.611z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A7" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936z"/><path fill="#1C6399" d="M13.562 21.828c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853s-3.047.094-3.047.094z"/><path fill="#AA8ED6" d="M31.825 22.344c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#1C6399" d="M19.344 26c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853S19.344 26 19.344 26z"/><path fill="#55ACEE" d="M18.558 26.942c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.153-.347-.806-.877-1.429-.895zm-.69.505c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.138-.313-.726-.789-1.287-.805z"/><path fill="#8899A7" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#1C6399" d="M24.688 14.404c-.312.958-.676 1.875-.312 2.412.359.531 1.672 1.382 2.406 1.278s1.469-1.75.927-3.21c-.312-.841-3.021-.48-3.021-.48z"/><path fill="#67757F" d="M21.733 14.605l-7.449-.077-1.255 1.614c-.31.398-.467 1.01-.467 1.337-.001.833.562 2.792.732 4.287.181 1.598 3.542.793 3.497.192-.073-.972.11-1.64-.302-2.511-.078-.165.199-.662.199-.662.415.24.872.395 1.353.449l-.627 1.269c-.224.454-.259 1.109-.086 1.584 0 0 1.328 3.135 1.476 3.874.323 1.602 4.206.488 3.706-.61-.595-1.308-.553-2.954-1.438-3.923.905-1.135 2.197-2.59 2.041-3.979.002-.001-1.319-2.672-1.38-2.844z"/><path fill="#BBDDF5" d="M21.062 7.057c-.524-.108-6.586 2.12-8.108 2.69-1.959.733-1.381 2.407-2.238 3.944-.459.823-1.578 1.197-2.252 1.815-.7.643-.278 1.564.196 2.262.794 1.169 1.585 1.244 2.766.487.916-.587 1.594-1.51 2.162-2.422.724 2.055 3.283 2.263 5.183 2.32 1.193.036 2.42-.056 3.566-.407.837-.257 1.119-.397 1.105-1.385 0 0 .222-2.11-.544-4.019.385.302.737.501.927.959.152.369.08.794.196 1.156.165.511.585.7 1.087.866.607.201 1.322.321 1.963.252.87-.094.849-.441.778-1.294-.129-1.561-.546-3.25-1.748-4.316-1.411-1.25-3.16-2.52-5.039-2.908z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#D4AB88" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><circle fill="#67757F" cx="10.056" cy="7.057" r="2"/><circle fill="#BDDDF4" cx="10.056" cy="7.057" r="1"/><circle fill="#67757F" cx="12.891" cy="6.062" r="2"/><circle fill="#BDDDF4" cx="12.891" cy="6.062" r="1"/><path fill="#1C6399" d="M8.312 16.373c-.907.382-1.531 1.127-1.703 1.517s.358 1.815 1.703 2.219 1.485-1.297 1.813-1.609-.844-2.535-1.813-2.127z"/><path fill="#8899A7" d="M7.387 18.082l-.151-.161c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022 0 0 .092.095.151.161.22.245-.539.892-.728.686z"/><path fill="#004A77" d="M9.818 19.122c.117-.394-.157-1.006-.338-1.249-.337.439-.792.91-1.184.808.084.314.578.204.885.016.307-.189.637.425.637.425z"/><path fill="#55ACEE" d="M12.776 22.771c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.152-.348-.805-.878-1.429-.895zm-.69.504c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.137-.313-.725-.789-1.287-.805z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f7-1f3fe.svg b/public/emoji/26f7-1f3fe.svg index 658c3dba6..cb4c3011a 100644 --- a/public/emoji/26f7-1f3fe.svg +++ b/public/emoji/26f7-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A6" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936zm5.013 4.535c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#67757F" d="M13.497 25.772c.273-.041.543-.143.787-.311l2.151-1.189c1.08-.562.68-1.912.614-2.359l-.621-2.793 2.564-3.298c.627-.804.48-3.3-.324-3.926-.806-.626-1.965-.479-2.589.325l-3.05 3.922c-.31.398-.443.907-.368 1.406l.633 4.218-1.118.664c-.837.582-1.043 1.732-.462 2.568.414.596 1.112.871 1.783.773z"/><path fill="#67757F" d="M19.594 29.781c.264-.083 2.75-1.562 2.75-1.562.865-.688.323-2.444.168-2.869l-1.438-3.923 1.85-3.745c.451-.913.076-2.021-.838-2.471-.914-.452-2.021-.075-2.471.837l-2.2 4.455c-.224.454-.251.978-.079 1.452l1.469 4.005-1.004.779c-.731.71-.747 1.878-.037 2.609.506.518 1.183.639 1.83.433z"/><path fill="#BBDDF5" d="M9.639 19.396c3.667-1.292 5.389-6.467 5.573-7.052.331-1.054-.254-2.177-1.308-2.508-1.053-.331-2.174.252-2.507 1.304-.507 1.588-1.8 4.03-3.088 4.484-1.042.367-1.589 1.509-1.222 2.551.368 1.042 1.51 1.589 2.552 1.221z"/><path fill="#8899A6" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#BBDDF5" d="M27.002 17.521c.791-.279 1.351-1.038 1.335-1.921-.058-3.346-1.616-5.92-4.392-7.249-1.964-.94-3.863-.937-4.073-.933-1.103.019-1.985.929-1.966 2.034.019 1.101.923 1.978 2.022 1.966 1.02-.002 4.342.301 4.409 4.251.02 1.104.93 1.984 2.033 1.965.223-.004.436-.044.632-.113z"/><path fill="#67757F" d="M15.132 16.931c.642 1.824 2.641 2.781 4.464 2.138 1.823-.642 2.78-2.641 2.138-4.464l-1.329-3.773c-.643-1.823-2.641-2.78-4.464-2.138-1.823.643-2.78 2.641-2.138 4.464l1.329 3.773z"/><path fill="#BBDDF5" d="M11.417 12.409c.367 1.042 1.509 1.588 2.551 1.222l6.601-2.327c1.042-.367 1.589-1.509 1.222-2.551-.366-1.042-1.509-1.589-2.551-1.222l-6.602 2.326c-1.04.368-1.587 1.51-1.221 2.552z"/><path fill="#BBDDF5" d="M17 18c-2.614-.366-3.175-1.493-3.244-1.69l-1.15-3.261c-.83-2.358 1.723-3.258 3.414-3.854 1.69-.595 3.61-.074 5.075.863 2.822 1.804 2.347 6.303 2.347 6.303.005.343-.075.859-.171.993-.061.084-2.188 1.218-6.271.646z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#AF7E57" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><path fill="#BDDDF4" d="M11.471 6.559c.275.781-.135 1.638-.917 1.913-.781.275-1.637-.135-1.913-.917-.275-.781.135-1.637.916-1.913.782-.275 1.638.135 1.914.917z"/><path fill="#67757F" d="M10.721 8.943c-1.041.367-2.185-.181-2.552-1.221-.366-1.041.182-2.185 1.222-2.552s2.185.182 2.551 1.222c.367 1.041-.181 2.185-1.221 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.183-.52-.755-.794-1.275-.611z"/><path fill="#BDDDF4" d="M14.3 5.562c.275.781-.135 1.638-.917 1.913-.781.275-1.638-.135-1.913-.916-.275-.782.135-1.638.916-1.914.782-.275 1.639.135 1.914.917z"/><path fill="#67757F" d="M13.55 7.946c-1.04.367-2.184-.182-2.551-1.222s.181-2.185 1.222-2.551c1.04-.366 2.185.182 2.551 1.222.366 1.041-.182 2.185-1.222 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.182-.521-.755-.794-1.275-.611z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A7" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936z"/><path fill="#1C6399" d="M13.562 21.828c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853s-3.047.094-3.047.094z"/><path fill="#AA8ED6" d="M31.825 22.344c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#1C6399" d="M19.344 26c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853S19.344 26 19.344 26z"/><path fill="#55ACEE" d="M18.558 26.942c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.153-.347-.806-.877-1.429-.895zm-.69.505c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.138-.313-.726-.789-1.287-.805z"/><path fill="#8899A7" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#1C6399" d="M24.688 14.404c-.312.958-.676 1.875-.312 2.412.359.531 1.672 1.382 2.406 1.278s1.469-1.75.927-3.21c-.312-.841-3.021-.48-3.021-.48z"/><path fill="#67757F" d="M21.733 14.605l-7.449-.077-1.255 1.614c-.31.398-.467 1.01-.467 1.337-.001.833.562 2.792.732 4.287.181 1.598 3.542.793 3.497.192-.073-.972.11-1.64-.302-2.511-.078-.165.199-.662.199-.662.415.24.872.395 1.353.449l-.627 1.269c-.224.454-.259 1.109-.086 1.584 0 0 1.328 3.135 1.476 3.874.323 1.602 4.206.488 3.706-.61-.595-1.308-.553-2.954-1.438-3.923.905-1.135 2.197-2.59 2.041-3.979.002-.001-1.319-2.672-1.38-2.844z"/><path fill="#BBDDF5" d="M21.062 7.057c-.524-.108-6.586 2.12-8.108 2.69-1.959.733-1.381 2.407-2.238 3.944-.459.823-1.578 1.197-2.252 1.815-.7.643-.278 1.564.196 2.262.794 1.169 1.585 1.244 2.766.487.916-.587 1.594-1.51 2.162-2.422.724 2.055 3.283 2.263 5.183 2.32 1.193.036 2.42-.056 3.566-.407.837-.257 1.119-.397 1.105-1.385 0 0 .222-2.11-.544-4.019.385.302.737.501.927.959.152.369.08.794.196 1.156.165.511.585.7 1.087.866.607.201 1.322.321 1.963.252.87-.094.849-.441.778-1.294-.129-1.561-.546-3.25-1.748-4.316-1.411-1.25-3.16-2.52-5.039-2.908z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#AF7E57" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><circle fill="#67757F" cx="10.056" cy="7.057" r="2"/><circle fill="#BDDDF4" cx="10.056" cy="7.057" r="1"/><circle fill="#67757F" cx="12.891" cy="6.062" r="2"/><circle fill="#BDDDF4" cx="12.891" cy="6.062" r="1"/><path fill="#1C6399" d="M8.312 16.373c-.907.382-1.531 1.127-1.703 1.517s.358 1.815 1.703 2.219 1.485-1.297 1.813-1.609-.844-2.535-1.813-2.127z"/><path fill="#8899A7" d="M7.387 18.082l-.151-.161c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022 0 0 .092.095.151.161.22.245-.539.892-.728.686z"/><path fill="#004A77" d="M9.818 19.122c.117-.394-.157-1.006-.338-1.249-.337.439-.792.91-1.184.808.084.314.578.204.885.016.307-.189.637.425.637.425z"/><path fill="#55ACEE" d="M12.776 22.771c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.152-.348-.805-.878-1.429-.895zm-.69.504c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.137-.313-.725-.789-1.287-.805z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f7-1f3ff.svg b/public/emoji/26f7-1f3ff.svg index 115102215..4184e4a47 100644 --- a/public/emoji/26f7-1f3ff.svg +++ b/public/emoji/26f7-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A6" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936zm5.013 4.535c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#67757F" d="M13.497 25.772c.273-.041.543-.143.787-.311l2.151-1.189c1.08-.562.68-1.912.614-2.359l-.621-2.793 2.564-3.298c.627-.804.48-3.3-.324-3.926-.806-.626-1.965-.479-2.589.325l-3.05 3.922c-.31.398-.443.907-.368 1.406l.633 4.218-1.118.664c-.837.582-1.043 1.732-.462 2.568.414.596 1.112.871 1.783.773z"/><path fill="#67757F" d="M19.594 29.781c.264-.083 2.75-1.562 2.75-1.562.865-.688.323-2.444.168-2.869l-1.438-3.923 1.85-3.745c.451-.913.076-2.021-.838-2.471-.914-.452-2.021-.075-2.471.837l-2.2 4.455c-.224.454-.251.978-.079 1.452l1.469 4.005-1.004.779c-.731.71-.747 1.878-.037 2.609.506.518 1.183.639 1.83.433z"/><path fill="#BBDDF5" d="M9.639 19.396c3.667-1.292 5.389-6.467 5.573-7.052.331-1.054-.254-2.177-1.308-2.508-1.053-.331-2.174.252-2.507 1.304-.507 1.588-1.8 4.03-3.088 4.484-1.042.367-1.589 1.509-1.222 2.551.368 1.042 1.51 1.589 2.552 1.221z"/><path fill="#8899A6" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#BBDDF5" d="M27.002 17.521c.791-.279 1.351-1.038 1.335-1.921-.058-3.346-1.616-5.92-4.392-7.249-1.964-.94-3.863-.937-4.073-.933-1.103.019-1.985.929-1.966 2.034.019 1.101.923 1.978 2.022 1.966 1.02-.002 4.342.301 4.409 4.251.02 1.104.93 1.984 2.033 1.965.223-.004.436-.044.632-.113z"/><path fill="#67757F" d="M15.132 16.931c.642 1.824 2.641 2.781 4.464 2.138 1.823-.642 2.78-2.641 2.138-4.464l-1.329-3.773c-.643-1.823-2.641-2.78-4.464-2.138-1.823.643-2.78 2.641-2.138 4.464l1.329 3.773z"/><path fill="#BBDDF5" d="M11.417 12.409c.367 1.042 1.509 1.588 2.551 1.222l6.601-2.327c1.042-.367 1.589-1.509 1.222-2.551-.366-1.042-1.509-1.589-2.551-1.222l-6.602 2.326c-1.04.368-1.587 1.51-1.221 2.552z"/><path fill="#BBDDF5" d="M17 18c-2.614-.366-3.175-1.493-3.244-1.69l-1.15-3.261c-.83-2.358 1.723-3.258 3.414-3.854 1.69-.595 3.61-.074 5.075.863 2.822 1.804 2.347 6.303 2.347 6.303.005.343-.075.859-.171.993-.061.084-2.188 1.218-6.271.646z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#7C533E" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><path fill="#BDDDF4" d="M11.471 6.559c.275.781-.135 1.638-.917 1.913-.781.275-1.637-.135-1.913-.917-.275-.781.135-1.637.916-1.913.782-.275 1.638.135 1.914.917z"/><path fill="#67757F" d="M10.721 8.943c-1.041.367-2.185-.181-2.552-1.221-.366-1.041.182-2.185 1.222-2.552s2.185.182 2.551 1.222c.367 1.041-.181 2.185-1.221 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.183-.52-.755-.794-1.275-.611z"/><path fill="#BDDDF4" d="M14.3 5.562c.275.781-.135 1.638-.917 1.913-.781.275-1.638-.135-1.913-.916-.275-.782.135-1.638.916-1.914.782-.275 1.639.135 1.914.917z"/><path fill="#67757F" d="M13.55 7.946c-1.04.367-2.184-.182-2.551-1.222s.181-2.185 1.222-2.551c1.04-.366 2.185.182 2.551 1.222.366 1.041-.182 2.185-1.222 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.182-.521-.755-.794-1.275-.611z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A7" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936z"/><path fill="#1C6399" d="M13.562 21.828c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853s-3.047.094-3.047.094z"/><path fill="#AA8ED6" d="M31.825 22.344c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#1C6399" d="M19.344 26c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853S19.344 26 19.344 26z"/><path fill="#55ACEE" d="M18.558 26.942c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.153-.347-.806-.877-1.429-.895zm-.69.505c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.138-.313-.726-.789-1.287-.805z"/><path fill="#8899A7" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#1C6399" d="M24.688 14.404c-.312.958-.676 1.875-.312 2.412.359.531 1.672 1.382 2.406 1.278s1.469-1.75.927-3.21c-.312-.841-3.021-.48-3.021-.48z"/><path fill="#67757F" d="M21.733 14.605l-7.449-.077-1.255 1.614c-.31.398-.467 1.01-.467 1.337-.001.833.562 2.792.732 4.287.181 1.598 3.542.793 3.497.192-.073-.972.11-1.64-.302-2.511-.078-.165.199-.662.199-.662.415.24.872.395 1.353.449l-.627 1.269c-.224.454-.259 1.109-.086 1.584 0 0 1.328 3.135 1.476 3.874.323 1.602 4.206.488 3.706-.61-.595-1.308-.553-2.954-1.438-3.923.905-1.135 2.197-2.59 2.041-3.979.002-.001-1.319-2.672-1.38-2.844z"/><path fill="#BBDDF5" d="M21.062 7.057c-.524-.108-6.586 2.12-8.108 2.69-1.959.733-1.381 2.407-2.238 3.944-.459.823-1.578 1.197-2.252 1.815-.7.643-.278 1.564.196 2.262.794 1.169 1.585 1.244 2.766.487.916-.587 1.594-1.51 2.162-2.422.724 2.055 3.283 2.263 5.183 2.32 1.193.036 2.42-.056 3.566-.407.837-.257 1.119-.397 1.105-1.385 0 0 .222-2.11-.544-4.019.385.302.737.501.927.959.152.369.08.794.196 1.156.165.511.585.7 1.087.866.607.201 1.322.321 1.963.252.87-.094.849-.441.778-1.294-.129-1.561-.546-3.25-1.748-4.316-1.411-1.25-3.16-2.52-5.039-2.908z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#7C533E" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><circle fill="#67757F" cx="10.056" cy="7.057" r="2"/><circle fill="#BDDDF4" cx="10.056" cy="7.057" r="1"/><circle fill="#67757F" cx="12.891" cy="6.062" r="2"/><circle fill="#BDDDF4" cx="12.891" cy="6.062" r="1"/><path fill="#1C6399" d="M8.312 16.373c-.907.382-1.531 1.127-1.703 1.517s.358 1.815 1.703 2.219 1.485-1.297 1.813-1.609-.844-2.535-1.813-2.127z"/><path fill="#8899A7" d="M7.387 18.082l-.151-.161c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022 0 0 .092.095.151.161.22.245-.539.892-.728.686z"/><path fill="#004A77" d="M9.818 19.122c.117-.394-.157-1.006-.338-1.249-.337.439-.792.91-1.184.808.084.314.578.204.885.016.307-.189.637.425.637.425z"/><path fill="#55ACEE" d="M12.776 22.771c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.152-.348-.805-.878-1.429-.895zm-.69.504c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.137-.313-.725-.789-1.287-.805z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f7.svg b/public/emoji/26f7.svg index 641d07275..ade6f21bd 100644 --- a/public/emoji/26f7.svg +++ b/public/emoji/26f7.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A6" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936zm5.013 4.535c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#67757F" d="M13.497 25.772c.273-.041.543-.143.787-.311l2.151-1.189c1.08-.562.68-1.912.614-2.359l-.621-2.793 2.564-3.298c.627-.804.48-3.3-.324-3.926-.806-.626-1.965-.479-2.589.325l-3.05 3.922c-.31.398-.443.907-.368 1.406l.633 4.218-1.118.664c-.837.582-1.043 1.732-.462 2.568.414.596 1.112.871 1.783.773z"/><path fill="#67757F" d="M19.594 29.781c.264-.083 2.75-1.562 2.75-1.562.865-.688.323-2.444.168-2.869l-1.438-3.923 1.85-3.745c.451-.913.076-2.021-.838-2.471-.914-.452-2.021-.075-2.471.837l-2.2 4.455c-.224.454-.251.978-.079 1.452l1.469 4.005-1.004.779c-.731.71-.747 1.878-.037 2.609.506.518 1.183.639 1.83.433z"/><path fill="#BBDDF5" d="M9.639 19.396c3.667-1.292 5.389-6.467 5.573-7.052.331-1.054-.254-2.177-1.308-2.508-1.053-.331-2.174.252-2.507 1.304-.507 1.588-1.8 4.03-3.088 4.484-1.042.367-1.589 1.509-1.222 2.551.368 1.042 1.51 1.589 2.552 1.221z"/><path fill="#8899A6" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#BBDDF5" d="M27.002 17.521c.791-.279 1.351-1.038 1.335-1.921-.058-3.346-1.616-5.92-4.392-7.249-1.964-.94-3.863-.937-4.073-.933-1.103.019-1.985.929-1.966 2.034.019 1.101.923 1.978 2.022 1.966 1.02-.002 4.342.301 4.409 4.251.02 1.104.93 1.984 2.033 1.965.223-.004.436-.044.632-.113z"/><path fill="#67757F" d="M15.132 16.931c.642 1.824 2.641 2.781 4.464 2.138 1.823-.642 2.78-2.641 2.138-4.464l-1.329-3.773c-.643-1.823-2.641-2.78-4.464-2.138-1.823.643-2.78 2.641-2.138 4.464l1.329 3.773z"/><path fill="#BBDDF5" d="M11.417 12.409c.367 1.042 1.509 1.588 2.551 1.222l6.601-2.327c1.042-.367 1.589-1.509 1.222-2.551-.366-1.042-1.509-1.589-2.551-1.222l-6.602 2.326c-1.04.368-1.587 1.51-1.221 2.552z"/><path fill="#BBDDF5" d="M17 18c-2.614-.366-3.175-1.493-3.244-1.69l-1.15-3.261c-.83-2.358 1.723-3.258 3.414-3.854 1.69-.595 3.61-.074 5.075.863 2.822 1.804 2.347 6.303 2.347 6.303.005.343-.075.859-.171.993-.061.084-2.188 1.218-6.271.646z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#FFDC5D" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><path fill="#BDDDF4" d="M11.471 6.559c.275.781-.135 1.638-.917 1.913-.781.275-1.637-.135-1.913-.917-.275-.781.135-1.637.916-1.913.782-.275 1.638.135 1.914.917z"/><path fill="#67757F" d="M10.721 8.943c-1.041.367-2.185-.181-2.552-1.221-.366-1.041.182-2.185 1.222-2.552s2.185.182 2.551 1.222c.367 1.041-.181 2.185-1.221 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.183-.52-.755-.794-1.275-.611z"/><path fill="#BDDDF4" d="M14.3 5.562c.275.781-.135 1.638-.917 1.913-.781.275-1.638-.135-1.913-.916-.275-.782.135-1.638.916-1.914.782-.275 1.639.135 1.914.917z"/><path fill="#67757F" d="M13.55 7.946c-1.04.367-2.184-.182-2.551-1.222s.181-2.185 1.222-2.551c1.04-.366 2.185.182 2.551 1.222.366 1.041-.182 2.185-1.222 2.551zm-.997-2.829c-.52.183-.794.755-.611 1.275.183.52.755.794 1.275.611.52-.183.794-.755.611-1.275-.182-.521-.755-.794-1.275-.611z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M36 13.062V32s0 4-4 4H4c-4 0-4-4-4-4v-4.938s17-10 36-14z"/><path fill="#8899A7" d="M14.751 24.46c.167.177.14.473-.062.662-.201.189-.5.2-.666.023l-6.647-7.052c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022l6.647 7.053z"/><path fill="#AA8ED6" d="M26.812 17.809c.435.516.086 1.301-.777 1.756L6.571 29.783c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.401 2.349.113l.784.936z"/><path fill="#1C6399" d="M13.562 21.828c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853s-3.047.094-3.047.094z"/><path fill="#AA8ED6" d="M31.825 22.344c.435.516.086 1.301-.777 1.756L11.583 34.318c-1.812.876-4.896-.04-5.271-.79-.416-.832 1.193-1.11 2.057-1.563l20.322-10.67c.863-.453 1.914-.4 2.349.113l.785.936z"/><path fill="#1C6399" d="M19.344 26c-.234.641-1.078 1.061-1.625 1.468s-.641.766-.641 1.204.328 1.047 1.656 1 2.125-.703 2.391-.969.531-.375.547-.328.859-.372.938-.616c.078-.243.047-1.29-.219-1.853S19.344 26 19.344 26z"/><path fill="#55ACEE" d="M18.558 26.942c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.153-.347-.806-.877-1.429-.895zm-.69.505c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.138-.313-.726-.789-1.287-.805z"/><path fill="#8899A7" d="M34.844 21.326c.228.156.285.467.129.693-.157.228-.468.287-.694.129l-9.062-6.236c-.228-.157-.286-.468-.129-.696.156-.227.468-.285.695-.128l9.061 6.238z"/><path fill="#1C6399" d="M24.688 14.404c-.312.958-.676 1.875-.312 2.412.359.531 1.672 1.382 2.406 1.278s1.469-1.75.927-3.21c-.312-.841-3.021-.48-3.021-.48z"/><path fill="#67757F" d="M21.733 14.605l-7.449-.077-1.255 1.614c-.31.398-.467 1.01-.467 1.337-.001.833.562 2.792.732 4.287.181 1.598 3.542.793 3.497.192-.073-.972.11-1.64-.302-2.511-.078-.165.199-.662.199-.662.415.24.872.395 1.353.449l-.627 1.269c-.224.454-.259 1.109-.086 1.584 0 0 1.328 3.135 1.476 3.874.323 1.602 4.206.488 3.706-.61-.595-1.308-.553-2.954-1.438-3.923.905-1.135 2.197-2.59 2.041-3.979.002-.001-1.319-2.672-1.38-2.844z"/><path fill="#BBDDF5" d="M21.062 7.057c-.524-.108-6.586 2.12-8.108 2.69-1.959.733-1.381 2.407-2.238 3.944-.459.823-1.578 1.197-2.252 1.815-.7.643-.278 1.564.196 2.262.794 1.169 1.585 1.244 2.766.487.916-.587 1.594-1.51 2.162-2.422.724 2.055 3.283 2.263 5.183 2.32 1.193.036 2.42-.056 3.566-.407.837-.257 1.119-.397 1.105-1.385 0 0 .222-2.11-.544-4.019.385.302.737.501.927.959.152.369.08.794.196 1.156.165.511.585.7 1.087.866.607.201 1.322.321 1.963.252.87-.094.849-.441.778-1.294-.129-1.561-.546-3.25-1.748-4.316-1.411-1.25-3.16-2.52-5.039-2.908z"/><path fill="#1C6399" d="M29.996 3.938l-1.119-2.653c-.076-.181-.273-.295-.487-.286-.129.006-3.21.174-7.169 3.112-3.748 2.78-4.634 2.82-6.578 2.906l-2.997.133c-.133.006-.257.059-.347.148-.506.498-.615 1.17-.291 1.799.411.796 1.623 1.614 3.795 1.517 1.437-.064 3.482-1.196 5.851-2.507 2.91-1.61 6.208-3.436 8.894-3.555.161-.007.309-.083.396-.205.09-.122.11-.274.052-.409z"/><path fill="#FFDC5D" d="M16.405 4.29c.734 2.083-.36 4.368-2.443 5.102s-4.368-.36-5.102-2.443c-.734-2.084.692-3.425 2.776-4.159 2.083-.735 4.035-.584 4.769 1.5z"/><path fill="#9AAAB4" d="M10.361 6.419c1.886-.665 3.44-2.272 3.772-1.329.333.943.997 2.83 2.883 2.165 1.886-.665.503-7.599-5.156-5.605-5.657 1.994-4.328 5.766-1.499 4.769z"/><circle fill="#67757F" cx="10.056" cy="7.057" r="2"/><circle fill="#BDDDF4" cx="10.056" cy="7.057" r="1"/><circle fill="#67757F" cx="12.891" cy="6.062" r="2"/><circle fill="#BDDDF4" cx="12.891" cy="6.062" r="1"/><path fill="#1C6399" d="M8.312 16.373c-.907.382-1.531 1.127-1.703 1.517s.358 1.815 1.703 2.219 1.485-1.297 1.813-1.609-.844-2.535-1.813-2.127z"/><path fill="#8899A7" d="M7.387 18.082l-.151-.161c-.167-.177-.139-.474.062-.664.201-.189.499-.199.666-.022 0 0 .092.095.151.161.22.245-.539.892-.728.686z"/><path fill="#004A77" d="M9.818 19.122c.117-.394-.157-1.006-.338-1.249-.337.439-.792.91-1.184.808.084.314.578.204.885.016.307-.189.637.425.637.425z"/><path fill="#55ACEE" d="M12.776 22.771c.4-.141.798-.159 1.159.017.436.212.673.642.673.799 0 .077-.266.391-.403.079-.152-.348-.805-.878-1.429-.895zm-.69.504c.36-.127.719-.143 1.044.015.393.191.606.578.606.719 0 .069-.239.352-.363.071-.137-.313-.725-.789-1.287-.805z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fb-200d-2640-fe0f.svg b/public/emoji/26f9-1f3fb-200d-2640-fe0f.svg index 9f29fcee8..8a00ebc80 100644 --- a/public/emoji/26f9-1f3fb-200d-2640-fe0f.svg +++ b/public/emoji/26f9-1f3fb-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#F7DECE" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#A0041E" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#BE1931" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#F7DECE" d="M17.259 3.842c.537 2.238-.842 4.489-3.081 5.026-2.239.537-4.489-.842-5.026-3.081-.538-2.239.842-4.49 3.08-5.027 2.239-.537 4.49.842 5.027 3.082z"/><path fill="#292F33" d="M21.375 4.462c-1.083.083-2.14.092-4.208-1.976C15.792 1.111 14.564.273 11.834.643c-2.899.394-5.018 3.169-3 4.17.88.437 1.529.095 2.88.295 2.121.315 2.707 2.456 4.62 2.711 3.743.501 6.124-3.44 5.041-3.357z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.126c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#DD2E44" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#DD2E44" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#DD2E44" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/><path fill="#F7DECE" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M26.29 26.753c-.53-.033-.658-.368-.708-.617-.16-.802-.275-1.489-.333-1.845l-3.604.707c.168.654.657 2.438 1.271 3.619.354.682.711.703 1.666.758 0 0 3.975-.139 6.542-.237.885-.034.973-1.48.215-1.657-.751-.176-1.595-.346-2.276-.413-.465-.044-2.533-.3-2.773-.315zm-12.431-3.068c-.57.514-.5.865-.312 1.803 0 0 1.113 3.738 1.854 6.2.265.881 1.698.641 1.679-.138-.019-.771-.067-1.63-.174-2.305-.073-.463-.346-2.528-.392-2.764-.102-.523.19-.73.419-.84.736-.356 1.371-.642 1.7-.786l-1.591-3.311c-.59.327-2.194 1.249-3.183 2.141z"/><path fill="#BE1931" d="M33.493 26.983c-.195-.018-.89-.026-1.139.032l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-.144-.114c-.143-.115-.384-.119-.59-.138z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.104.103-.174.103z"/><path fill="#DD2E44" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.448.047.582.16.012.01-.22 1.64-.27 2.182z"/><path fill="#CCD6DD" d="M34.147 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855s.003.839-.065 1.217c-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457.004-.036.112-1.291.163-1.918.037-.459.1-1.191.1-1.191.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.059-.083-.761-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.099-.006-.219.094-.267l.316-.152c.102-.047.219-.006.268.094.048.099.006.219-.094.267l-.316.152c-.028.013-.057.019-.087.019zm.269.656c-.085 0-.164-.055-.191-.141-.032-.106.026-.218.132-.25l.354-.11c.109-.034.218.026.251.132.032.106-.026.218-.132.25l-.354.11c-.021.007-.04.009-.06.009zm.23.679c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.334-.061c.117-.019.213.052.232.161.021.109-.052.213-.16.233l-.334.061-.036.003z"/><path fill="#BE1931" d="M18.11 33.515c-.031-.194-.196-.868-.314-1.095l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.774-1.125 4.774-1.125l.075-.167c.076-.168.02-.403-.013-.607z"/><path fill="#CCD6DD" d="M15.299 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.028-.107.132-.172.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.104.149-.193.149z"/><path fill="#DD2E44" d="M15.938 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.06.447-.017.606-.05.105-1.547.178-2.175.278z"/><path fill="#CCD6DD" d="M18.14 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 1.278-.212 1.899-.318.453-.078 1.178-.198 1.178-.198.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.066-.079-.041-.777-.151-.759zm-3.378-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.601.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.092-.057.218-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.653.384c-.075 0-.148-.043-.182-.116l-.142-.308c-.046-.1-.002-.219.098-.265.101-.046.22-.003.266.098l.142.308c.046.1.002.219-.098.265-.027.012-.055.018-.084.018z"/><path fill="#A0041E" d="M16.444 21.431c.754-.391 3.244-1.626 4.948-1.799.156-.016.295.078.346.218l1.259 3.435c.065.176-.033.372-.222.433-.78.251-2.74.917-4.224 1.706-.157.084-.345.045-.443-.094-.442-.624-1.591-2.328-1.848-3.543-.031-.144.047-.286.184-.356z"/><path fill="#BE1931" d="M21.42 25.547c-.187-.828-.749-3.55-.494-5.242.023-.155.147-.265.292-.279l3.581-.349c.184-.018.346.126.357.325.047.818.198 2.882.584 4.518.041.173-.043.345-.198.405-.703.27-2.609.95-3.829.892-.144-.008-.259-.12-.293-.27z"/><path fill="#F7DECE" d="M18.032 10.659c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647s.848 1.115 1.404.854 1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395-.838-.218-4.153-.593-4.985-.688-.954-.109-1.582.436-1.631 1.254z"/><path fill="#F7DECE" d="M19.132 6.366c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.481-.768-2.423-.742-3.475z"/><path fill="#292F33" d="M24.54 2.488c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.799-.648-.422-1.443-.737-2.194-.652-4.578.516-4.329 3.827-3.981 4.137.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.221.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.736-1.283 1.186-2.272 1.175z"/><path fill="#DD2E44" d="M22.418 9.749c-.897-1.578-2.174-2.314-3.528-1.683-2.437 1.136-2.644 2.853-1.828 5.349.603 1.845 2.094 3.688 2.906 6.927 0 0 2.246.202 5.436-.14 0-.001-.827-6.655-2.986-10.453z"/><path fill="#F7DECE" d="M19.923 10.158c-.603-.298-1.501-.279-2.236 1.101-.735 1.38-.969 2.5-1.173 3.36-.157.659-1.276.42-2.358.265-1.086-.156-2.742-.317-2.938-.438-.191-.118-1.507-.386-1.973-.393-.34-.005-2.01.282-2.402.612-.461.388 2.658.325 2.937.594s.914.457 1.312.562c.294.078 4.284 1.268 4.719 1.375.531.131 1.239.341 1.813-.406.574-.748 2.271-3.675 2.719-4.469.513-.91.38-1.768-.42-2.163z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fb-200d-2642-fe0f.svg b/public/emoji/26f9-1f3fb-200d-2642-fe0f.svg index b74897812..78a8b5d49 100644 --- a/public/emoji/26f9-1f3fb-200d-2642-fe0f.svg +++ b/public/emoji/26f9-1f3fb-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#F7DECE" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#F7DECE" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#F7DECE" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#292F33" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#F7DECE" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#F7DECE" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#292F33" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#F7DECE" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fb.svg b/public/emoji/26f9-1f3fb.svg index b74897812..78a8b5d49 100644 --- a/public/emoji/26f9-1f3fb.svg +++ b/public/emoji/26f9-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#F7DECE" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#F7DECE" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#F7DECE" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#292F33" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#F7DECE" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#F7DECE" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#292F33" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#F7DECE" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fc-200d-2640-fe0f.svg b/public/emoji/26f9-1f3fc-200d-2640-fe0f.svg index a40339c42..8bcada01a 100644 --- a/public/emoji/26f9-1f3fc-200d-2640-fe0f.svg +++ b/public/emoji/26f9-1f3fc-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#F3D2A2" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#A0041E" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#BE1931" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#F3D2A2" d="M17.259 3.842c.537 2.238-.842 4.489-3.081 5.026-2.239.537-4.489-.842-5.026-3.081-.538-2.239.842-4.49 3.08-5.027 2.239-.537 4.49.842 5.027 3.082z"/><path fill="#FFE51E" d="M21.375 4.462c-1.083.083-2.14.092-4.208-1.976C15.792 1.111 14.564.273 11.834.643c-2.899.394-5.018 3.169-3 4.17.88.437 1.529.095 2.88.295 2.121.315 2.707 2.456 4.62 2.711 3.743.501 6.124-3.44 5.041-3.357z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.126c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#DD2E44" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#DD2E44" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#DD2E44" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/><path fill="#F3D2A2" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M26.29 26.753c-.53-.033-.658-.368-.708-.617-.16-.802-.275-1.489-.333-1.845l-3.604.707c.168.654.657 2.438 1.271 3.619.354.682.711.703 1.666.758 0 0 3.975-.139 6.542-.237.885-.034.973-1.48.215-1.657-.751-.176-1.595-.346-2.276-.413-.465-.044-2.533-.3-2.773-.315zm-12.431-3.068c-.57.514-.5.865-.312 1.803 0 0 1.113 3.738 1.854 6.2.265.881 1.698.641 1.679-.138-.019-.771-.067-1.63-.174-2.305-.073-.463-.346-2.528-.392-2.764-.102-.523.19-.73.419-.84.736-.356 1.371-.642 1.7-.786l-1.591-3.311c-.59.327-2.194 1.249-3.183 2.141z"/><path fill="#BE1931" d="M33.493 26.983c-.195-.018-.89-.026-1.139.032l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-.144-.114c-.143-.115-.384-.119-.59-.138z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.104.103-.174.103z"/><path fill="#DD2E44" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.448.047.582.16.012.01-.22 1.64-.27 2.182z"/><path fill="#CCD6DD" d="M34.147 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855s.003.839-.065 1.217c-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457.004-.036.112-1.291.163-1.918.037-.459.1-1.191.1-1.191.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.059-.083-.761-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.099-.006-.219.094-.267l.316-.152c.102-.047.219-.006.268.094.048.099.006.219-.094.267l-.316.152c-.028.013-.057.019-.087.019zm.269.656c-.085 0-.164-.055-.191-.141-.032-.106.026-.218.132-.25l.354-.11c.109-.034.218.026.251.132.032.106-.026.218-.132.25l-.354.11c-.021.007-.04.009-.06.009zm.23.679c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.334-.061c.117-.019.213.052.232.161.021.109-.052.213-.16.233l-.334.061-.036.003z"/><path fill="#BE1931" d="M18.11 33.515c-.031-.194-.196-.868-.314-1.095l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.774-1.125 4.774-1.125l.075-.167c.076-.168.02-.403-.013-.607z"/><path fill="#CCD6DD" d="M15.299 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.028-.107.132-.172.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.104.149-.193.149z"/><path fill="#DD2E44" d="M15.938 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.06.447-.017.606-.05.105-1.547.178-2.175.278z"/><path fill="#CCD6DD" d="M18.14 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 1.278-.212 1.899-.318.453-.078 1.178-.198 1.178-.198.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.066-.079-.041-.777-.151-.759zm-3.378-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.601.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.092-.057.218-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.653.384c-.075 0-.148-.043-.182-.116l-.142-.308c-.046-.1-.002-.219.098-.265.101-.046.22-.003.266.098l.142.308c.046.1.002.219-.098.265-.027.012-.055.018-.084.018z"/><path fill="#A0041E" d="M16.444 21.431c.754-.391 3.244-1.626 4.948-1.799.156-.016.295.078.346.218l1.259 3.435c.065.176-.033.372-.222.433-.78.251-2.74.917-4.224 1.706-.157.084-.345.045-.443-.094-.442-.624-1.591-2.328-1.848-3.543-.031-.144.047-.286.184-.356z"/><path fill="#BE1931" d="M21.42 25.547c-.187-.828-.749-3.55-.494-5.242.023-.155.147-.265.292-.279l3.581-.349c.184-.018.346.126.357.325.047.818.198 2.882.584 4.518.041.173-.043.345-.198.405-.703.27-2.609.95-3.829.892-.144-.008-.259-.12-.293-.27z"/><path fill="#F3D2A2" d="M18.032 10.659c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647s.848 1.115 1.404.854 1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395-.838-.218-4.153-.593-4.985-.688-.954-.109-1.582.436-1.631 1.254z"/><path fill="#F3D2A2" d="M19.132 6.366c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.481-.768-2.423-.742-3.475z"/><path fill="#FFE51E" d="M24.54 2.488c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.799-.648-.422-1.443-.737-2.194-.652-4.578.516-4.329 3.827-3.981 4.137.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.221.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.736-1.283 1.186-2.272 1.175z"/><path fill="#DD2E44" d="M22.418 9.749c-.897-1.578-2.174-2.314-3.528-1.683-2.437 1.136-2.644 2.853-1.828 5.349.603 1.845 2.094 3.688 2.906 6.927 0 0 2.246.202 5.436-.14 0-.001-.827-6.655-2.986-10.453z"/><path fill="#F3D2A2" d="M19.923 10.158c-.603-.298-1.501-.279-2.236 1.101-.735 1.38-.969 2.5-1.173 3.36-.157.659-1.276.42-2.358.265-1.086-.156-2.742-.317-2.938-.438-.191-.118-1.507-.386-1.973-.393-.34-.005-2.01.282-2.402.612-.461.388 2.658.325 2.937.594s.914.457 1.312.562c.294.078 4.284 1.268 4.719 1.375.531.131 1.239.341 1.813-.406.574-.748 2.271-3.675 2.719-4.469.513-.91.38-1.768-.42-2.163z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fc-200d-2642-fe0f.svg b/public/emoji/26f9-1f3fc-200d-2642-fe0f.svg index 102413c1d..fb2b1e1b5 100644 --- a/public/emoji/26f9-1f3fc-200d-2642-fe0f.svg +++ b/public/emoji/26f9-1f3fc-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#F3D2A2" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#F3D2A2" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#F3D2A2" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#FFE51E" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#F3D2A2" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#F3D2A2" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#FFE51E" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#F3D2A2" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fc.svg b/public/emoji/26f9-1f3fc.svg index 102413c1d..fb2b1e1b5 100644 --- a/public/emoji/26f9-1f3fc.svg +++ b/public/emoji/26f9-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#F3D2A2" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#F3D2A2" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#F3D2A2" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#FFE51E" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#F3D2A2" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#F3D2A2" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#FFE51E" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#F3D2A2" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fd-200d-2640-fe0f.svg b/public/emoji/26f9-1f3fd-200d-2640-fe0f.svg index eecd25bce..edb6001b4 100644 --- a/public/emoji/26f9-1f3fd-200d-2640-fe0f.svg +++ b/public/emoji/26f9-1f3fd-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#D5AB88" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#A0041E" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#BE1931" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#D5AB88" d="M17.259 3.842c.537 2.238-.842 4.489-3.081 5.026-2.239.537-4.489-.842-5.026-3.081-.538-2.239.842-4.49 3.08-5.027 2.239-.537 4.49.842 5.027 3.082z"/><path fill="#963B22" d="M21.375 4.462c-1.083.083-2.14.092-4.208-1.976C15.792 1.111 14.564.273 11.834.643c-2.899.394-5.018 3.169-3 4.17.88.437 1.529.095 2.88.295 2.121.315 2.707 2.456 4.62 2.711 3.743.501 6.124-3.44 5.041-3.357z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.126c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#DD2E44" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#DD2E44" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#DD2E44" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/><path fill="#D5AB88" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M26.29 26.753c-.53-.033-.658-.368-.708-.617-.16-.802-.275-1.489-.333-1.845l-3.604.707c.168.654.657 2.438 1.271 3.619.354.682.711.703 1.666.758 0 0 3.975-.139 6.542-.237.885-.034.973-1.48.215-1.657-.751-.176-1.595-.346-2.276-.413-.465-.044-2.533-.3-2.773-.315zm-12.431-3.068c-.57.514-.5.865-.312 1.803 0 0 1.113 3.738 1.854 6.2.265.881 1.698.641 1.679-.138-.019-.771-.067-1.63-.174-2.305-.073-.463-.346-2.528-.392-2.764-.102-.523.19-.73.419-.84.736-.356 1.371-.642 1.7-.786l-1.591-3.311c-.59.327-2.194 1.249-3.183 2.141z"/><path fill="#BE1931" d="M33.493 26.983c-.195-.018-.89-.026-1.139.032l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-.144-.114c-.143-.115-.384-.119-.59-.138z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.104.103-.174.103z"/><path fill="#DD2E44" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.448.047.582.16.012.01-.22 1.64-.27 2.182z"/><path fill="#CCD6DD" d="M34.147 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855s.003.839-.065 1.217c-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457.004-.036.112-1.291.163-1.918.037-.459.1-1.191.1-1.191.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.059-.083-.761-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.099-.006-.219.094-.267l.316-.152c.102-.047.219-.006.268.094.048.099.006.219-.094.267l-.316.152c-.028.013-.057.019-.087.019zm.269.656c-.085 0-.164-.055-.191-.141-.032-.106.026-.218.132-.25l.354-.11c.109-.034.218.026.251.132.032.106-.026.218-.132.25l-.354.11c-.021.007-.04.009-.06.009zm.23.679c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.334-.061c.117-.019.213.052.232.161.021.109-.052.213-.16.233l-.334.061-.036.003z"/><path fill="#BE1931" d="M18.11 33.515c-.031-.194-.196-.868-.314-1.095l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.774-1.125 4.774-1.125l.075-.167c.076-.168.02-.403-.013-.607z"/><path fill="#CCD6DD" d="M15.299 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.028-.107.132-.172.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.104.149-.193.149z"/><path fill="#DD2E44" d="M15.938 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.06.447-.017.606-.05.105-1.547.178-2.175.278z"/><path fill="#CCD6DD" d="M18.14 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 1.278-.212 1.899-.318.453-.078 1.178-.198 1.178-.198.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.066-.079-.041-.777-.151-.759zm-3.378-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.601.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.092-.057.218-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.653.384c-.075 0-.148-.043-.182-.116l-.142-.308c-.046-.1-.002-.219.098-.265.101-.046.22-.003.266.098l.142.308c.046.1.002.219-.098.265-.027.012-.055.018-.084.018z"/><path fill="#A0041E" d="M16.444 21.431c.754-.391 3.244-1.626 4.948-1.799.156-.016.295.078.346.218l1.259 3.435c.065.176-.033.372-.222.433-.78.251-2.74.917-4.224 1.706-.157.084-.345.045-.443-.094-.442-.624-1.591-2.328-1.848-3.543-.031-.144.047-.286.184-.356z"/><path fill="#BE1931" d="M21.42 25.547c-.187-.828-.749-3.55-.494-5.242.023-.155.147-.265.292-.279l3.581-.349c.184-.018.346.126.357.325.047.818.198 2.882.584 4.518.041.173-.043.345-.198.405-.703.27-2.609.95-3.829.892-.144-.008-.259-.12-.293-.27z"/><path fill="#D4AB88" d="M18.032 10.659c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647s.848 1.115 1.404.854 1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395-.838-.218-4.153-.593-4.985-.688-.954-.109-1.582.436-1.631 1.254z"/><path fill="#D4AB88" d="M19.132 6.366c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.481-.768-2.423-.742-3.475z"/><path fill="#963B22" d="M24.54 2.488c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.799-.648-.422-1.443-.737-2.194-.652-4.578.516-4.329 3.827-3.981 4.137.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.221.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.736-1.283 1.186-2.272 1.175z"/><path fill="#DD2E44" d="M22.418 9.749c-.897-1.578-2.174-2.314-3.528-1.683-2.437 1.136-2.644 2.853-1.828 5.349.603 1.845 2.094 3.688 2.906 6.927 0 0 2.246.202 5.436-.14 0-.001-.827-6.655-2.986-10.453z"/><path fill="#D4AB88" d="M19.923 10.158c-.603-.298-1.501-.279-2.236 1.101-.735 1.38-.969 2.5-1.173 3.36-.157.659-1.276.42-2.358.265-1.086-.156-2.742-.317-2.938-.438-.191-.118-1.507-.386-1.973-.393-.34-.005-2.01.282-2.402.612-.461.388 2.658.325 2.937.594s.914.457 1.312.562c.294.078 4.284 1.268 4.719 1.375.531.131 1.239.341 1.813-.406.574-.748 2.271-3.675 2.719-4.469.513-.91.38-1.768-.42-2.163z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fd-200d-2642-fe0f.svg b/public/emoji/26f9-1f3fd-200d-2642-fe0f.svg index c7a24c37b..9282cee90 100644 --- a/public/emoji/26f9-1f3fd-200d-2642-fe0f.svg +++ b/public/emoji/26f9-1f3fd-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#D5AB88" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#D5AB88" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#D5AB88" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#963B22" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#D4AB88" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#D4AB88" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#963B22" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#D4AB88" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fd.svg b/public/emoji/26f9-1f3fd.svg index c7a24c37b..9282cee90 100644 --- a/public/emoji/26f9-1f3fd.svg +++ b/public/emoji/26f9-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#D5AB88" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#D5AB88" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#D5AB88" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#963B22" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#D4AB88" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#D4AB88" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#963B22" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#D4AB88" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fe-200d-2640-fe0f.svg b/public/emoji/26f9-1f3fe-200d-2640-fe0f.svg index 282ac545a..5eee28138 100644 --- a/public/emoji/26f9-1f3fe-200d-2640-fe0f.svg +++ b/public/emoji/26f9-1f3fe-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#AF7E57" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#A0041E" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#BE1931" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#AF7E57" d="M17.259 3.842c.537 2.238-.842 4.489-3.081 5.026-2.239.537-4.489-.842-5.026-3.081-.538-2.239.842-4.49 3.08-5.027 2.239-.537 4.49.842 5.027 3.082z"/><path fill="#60352A" d="M21.375 4.462c-1.083.083-2.14.092-4.208-1.976C15.792 1.111 14.564.273 11.834.643c-2.899.394-5.018 3.169-3 4.17.88.437 1.529.095 2.88.295 2.121.315 2.707 2.456 4.62 2.711 3.743.501 6.124-3.44 5.041-3.357z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.126c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#DD2E44" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#DD2E44" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#DD2E44" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/><path fill="#AF7E57" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M26.29 26.753c-.53-.033-.658-.368-.708-.617-.16-.802-.275-1.489-.333-1.845l-3.604.707c.168.654.657 2.438 1.271 3.619.354.682.711.703 1.666.758 0 0 3.975-.139 6.542-.237.885-.034.973-1.48.215-1.657-.751-.176-1.595-.346-2.276-.413-.465-.044-2.533-.3-2.773-.315zm-12.431-3.068c-.57.514-.5.865-.312 1.803 0 0 1.113 3.738 1.854 6.2.265.881 1.698.641 1.679-.138-.019-.771-.067-1.63-.174-2.305-.073-.463-.346-2.528-.392-2.764-.102-.523.19-.73.419-.84.736-.356 1.371-.642 1.7-.786l-1.591-3.311c-.59.327-2.194 1.249-3.183 2.141z"/><path fill="#BE1931" d="M33.493 26.983c-.195-.018-.89-.026-1.139.032l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-.144-.114c-.143-.115-.384-.119-.59-.138z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.104.103-.174.103z"/><path fill="#DD2E44" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.448.047.582.16.012.01-.22 1.64-.27 2.182z"/><path fill="#CCD6DD" d="M34.147 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855s.003.839-.065 1.217c-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457.004-.036.112-1.291.163-1.918.037-.459.1-1.191.1-1.191.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.059-.083-.761-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.099-.006-.219.094-.267l.316-.152c.102-.047.219-.006.268.094.048.099.006.219-.094.267l-.316.152c-.028.013-.057.019-.087.019zm.269.656c-.085 0-.164-.055-.191-.141-.032-.106.026-.218.132-.25l.354-.11c.109-.034.218.026.251.132.032.106-.026.218-.132.25l-.354.11c-.021.007-.04.009-.06.009zm.23.679c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.334-.061c.117-.019.213.052.232.161.021.109-.052.213-.16.233l-.334.061-.036.003z"/><path fill="#BE1931" d="M18.11 33.515c-.031-.194-.196-.868-.314-1.095l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.774-1.125 4.774-1.125l.075-.167c.076-.168.02-.403-.013-.607z"/><path fill="#CCD6DD" d="M15.299 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.028-.107.132-.172.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.104.149-.193.149z"/><path fill="#DD2E44" d="M15.938 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.06.447-.017.606-.05.105-1.547.178-2.175.278z"/><path fill="#CCD6DD" d="M18.14 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 1.278-.212 1.899-.318.453-.078 1.178-.198 1.178-.198.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.066-.079-.041-.777-.151-.759zm-3.378-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.601.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.092-.057.218-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.653.384c-.075 0-.148-.043-.182-.116l-.142-.308c-.046-.1-.002-.219.098-.265.101-.046.22-.003.266.098l.142.308c.046.1.002.219-.098.265-.027.012-.055.018-.084.018z"/><path fill="#A0041E" d="M16.444 21.431c.754-.391 3.244-1.626 4.948-1.799.156-.016.295.078.346.218l1.259 3.435c.065.176-.033.372-.222.433-.78.251-2.74.917-4.224 1.706-.157.084-.345.045-.443-.094-.442-.624-1.591-2.328-1.848-3.543-.031-.144.047-.286.184-.356z"/><path fill="#BE1931" d="M21.42 25.547c-.187-.828-.749-3.55-.494-5.242.023-.155.147-.265.292-.279l3.581-.349c.184-.018.346.126.357.325.047.818.198 2.882.584 4.518.041.173-.043.345-.198.405-.703.27-2.609.95-3.829.892-.144-.008-.259-.12-.293-.27z"/><path fill="#AF7E57" d="M18.032 10.659c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647s.848 1.115 1.404.854 1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395-.838-.218-4.153-.593-4.985-.688-.954-.109-1.582.436-1.631 1.254z"/><path fill="#AF7E57" d="M19.132 6.366c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.481-.768-2.423-.742-3.475z"/><path fill="#60352A" d="M24.54 2.488c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.799-.648-.422-1.443-.737-2.194-.652-4.578.516-4.329 3.827-3.981 4.137.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.221.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.736-1.283 1.186-2.272 1.175z"/><path fill="#DD2E44" d="M22.418 9.749c-.897-1.578-2.174-2.314-3.528-1.683-2.437 1.136-2.644 2.853-1.828 5.349.603 1.845 2.094 3.688 2.906 6.927 0 0 2.246.202 5.436-.14 0-.001-.827-6.655-2.986-10.453z"/><path fill="#AF7E57" d="M19.923 10.158c-.603-.298-1.501-.279-2.236 1.101-.735 1.38-.969 2.5-1.173 3.36-.157.659-1.276.42-2.358.265-1.086-.156-2.742-.317-2.938-.438-.191-.118-1.507-.386-1.973-.393-.34-.005-2.01.282-2.402.612-.461.388 2.658.325 2.937.594s.914.457 1.312.562c.294.078 4.284 1.268 4.719 1.375.531.131 1.239.341 1.813-.406.574-.748 2.271-3.675 2.719-4.469.513-.91.38-1.768-.42-2.163z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fe-200d-2642-fe0f.svg b/public/emoji/26f9-1f3fe-200d-2642-fe0f.svg index 7a5b647c0..d618e5a45 100644 --- a/public/emoji/26f9-1f3fe-200d-2642-fe0f.svg +++ b/public/emoji/26f9-1f3fe-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#AF7E57" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#AF7E57" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#AF7E57" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#60352A" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#AF7E57" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#AF7E57" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#60352A" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#AF7E57" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3fe.svg b/public/emoji/26f9-1f3fe.svg index 7a5b647c0..d618e5a45 100644 --- a/public/emoji/26f9-1f3fe.svg +++ b/public/emoji/26f9-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#AF7E57" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#AF7E57" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#AF7E57" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#60352A" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#AF7E57" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#AF7E57" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#60352A" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#AF7E57" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3ff-200d-2640-fe0f.svg b/public/emoji/26f9-1f3ff-200d-2640-fe0f.svg index bbc1e9fe7..52dcb9bec 100644 --- a/public/emoji/26f9-1f3ff-200d-2640-fe0f.svg +++ b/public/emoji/26f9-1f3ff-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#7C533E" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#A0041E" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#BE1931" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#7C533E" d="M17.259 3.842c.537 2.238-.842 4.489-3.081 5.026-2.239.537-4.489-.842-5.026-3.081-.538-2.239.842-4.49 3.08-5.027 2.239-.537 4.49.842 5.027 3.082z"/><path fill="#0B0200" d="M21.375 4.462c-1.083.083-2.14.092-4.208-1.976C15.792 1.111 14.564.273 11.834.643c-2.899.394-5.018 3.169-3 4.17.88.437 1.529.095 2.88.295 2.121.315 2.707 2.456 4.62 2.711 3.743.501 6.124-3.44 5.041-3.357z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.126c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#DD2E44" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#DD2E44" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#DD2E44" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/><path fill="#7C533E" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M26.29 26.753c-.53-.033-.658-.368-.708-.617-.16-.802-.275-1.489-.333-1.845l-3.604.707c.168.654.657 2.438 1.271 3.619.354.682.711.703 1.666.758 0 0 3.975-.139 6.542-.237.885-.034.973-1.48.215-1.657-.751-.176-1.595-.346-2.276-.413-.465-.044-2.533-.3-2.773-.315zm-12.431-3.068c-.57.514-.5.865-.312 1.803 0 0 1.113 3.738 1.854 6.2.265.881 1.698.641 1.679-.138-.019-.771-.067-1.63-.174-2.305-.073-.463-.346-2.528-.392-2.764-.102-.523.19-.73.419-.84.736-.356 1.371-.642 1.7-.786l-1.591-3.311c-.59.327-2.194 1.249-3.183 2.141z"/><path fill="#BE1931" d="M33.493 26.983c-.195-.018-.89-.026-1.139.032l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-.144-.114c-.143-.115-.384-.119-.59-.138z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.104.103-.174.103z"/><path fill="#DD2E44" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.448.047.582.16.012.01-.22 1.64-.27 2.182z"/><path fill="#CCD6DD" d="M34.147 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855s.003.839-.065 1.217c-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457.004-.036.112-1.291.163-1.918.037-.459.1-1.191.1-1.191.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.059-.083-.761-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.099-.006-.219.094-.267l.316-.152c.102-.047.219-.006.268.094.048.099.006.219-.094.267l-.316.152c-.028.013-.057.019-.087.019zm.269.656c-.085 0-.164-.055-.191-.141-.032-.106.026-.218.132-.25l.354-.11c.109-.034.218.026.251.132.032.106-.026.218-.132.25l-.354.11c-.021.007-.04.009-.06.009zm.23.679c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.334-.061c.117-.019.213.052.232.161.021.109-.052.213-.16.233l-.334.061-.036.003z"/><path fill="#BE1931" d="M18.11 33.515c-.031-.194-.196-.868-.314-1.095l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.774-1.125 4.774-1.125l.075-.167c.076-.168.02-.403-.013-.607z"/><path fill="#CCD6DD" d="M15.299 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.028-.107.132-.172.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.104.149-.193.149z"/><path fill="#DD2E44" d="M15.938 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.06.447-.017.606-.05.105-1.547.178-2.175.278z"/><path fill="#CCD6DD" d="M18.14 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 1.278-.212 1.899-.318.453-.078 1.178-.198 1.178-.198.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.066-.079-.041-.777-.151-.759zm-3.378-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.601.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.092-.057.218-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.653.384c-.075 0-.148-.043-.182-.116l-.142-.308c-.046-.1-.002-.219.098-.265.101-.046.22-.003.266.098l.142.308c.046.1.002.219-.098.265-.027.012-.055.018-.084.018z"/><path fill="#A0041E" d="M16.444 21.431c.754-.391 3.244-1.626 4.948-1.799.156-.016.295.078.346.218l1.259 3.435c.065.176-.033.372-.222.433-.78.251-2.74.917-4.224 1.706-.157.084-.345.045-.443-.094-.442-.624-1.591-2.328-1.848-3.543-.031-.144.047-.286.184-.356z"/><path fill="#BE1931" d="M21.42 25.547c-.187-.828-.749-3.55-.494-5.242.023-.155.147-.265.292-.279l3.581-.349c.184-.018.346.126.357.325.047.818.198 2.882.584 4.518.041.173-.043.345-.198.405-.703.27-2.609.95-3.829.892-.144-.008-.259-.12-.293-.27z"/><path fill="#7C533E" d="M18.032 10.659c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647s.848 1.115 1.404.854 1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395-.838-.218-4.153-.593-4.985-.688-.954-.109-1.582.436-1.631 1.254z"/><path fill="#7C533E" d="M19.132 6.366c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.481-.768-2.423-.742-3.475z"/><path fill="#0B0200" d="M24.54 2.488c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.799-.648-.422-1.443-.737-2.194-.652-4.578.516-4.329 3.827-3.981 4.137.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.221.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.736-1.283 1.186-2.272 1.175z"/><path fill="#DD2E44" d="M22.418 9.749c-.897-1.578-2.174-2.314-3.528-1.683-2.437 1.136-2.644 2.853-1.828 5.349.603 1.845 2.094 3.688 2.906 6.927 0 0 2.246.202 5.436-.14 0-.001-.827-6.655-2.986-10.453z"/><path fill="#7C533E" d="M19.923 10.158c-.603-.298-1.501-.279-2.236 1.101-.735 1.38-.969 2.5-1.173 3.36-.157.659-1.276.42-2.358.265-1.086-.156-2.742-.317-2.938-.438-.191-.118-1.507-.386-1.973-.393-.34-.005-2.01.282-2.402.612-.461.388 2.658.325 2.937.594s.914.457 1.312.562c.294.078 4.284 1.268 4.719 1.375.531.131 1.239.341 1.813-.406.574-.748 2.271-3.675 2.719-4.469.513-.91.38-1.768-.42-2.163z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3ff-200d-2642-fe0f.svg b/public/emoji/26f9-1f3ff-200d-2642-fe0f.svg index 601b85c1b..c174ef8bc 100644 --- a/public/emoji/26f9-1f3ff-200d-2642-fe0f.svg +++ b/public/emoji/26f9-1f3ff-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#7C533E" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#7C533E" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#7C533E" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#0B0200" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#7C533E" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#7C533E" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#0B0200" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#7C533E" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-1f3ff.svg b/public/emoji/26f9-1f3ff.svg index 601b85c1b..c174ef8bc 100644 --- a/public/emoji/26f9-1f3ff.svg +++ b/public/emoji/26f9-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#7C533E" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#7C533E" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#7C533E" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#0B0200" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#7C533E" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#7C533E" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#0B0200" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#7C533E" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-fe0f-200d-2640-fe0f.svg b/public/emoji/26f9-fe0f-200d-2640-fe0f.svg index 90080c21e..f25f03dbe 100644 --- a/public/emoji/26f9-fe0f-200d-2640-fe0f.svg +++ b/public/emoji/26f9-fe0f-200d-2640-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#FFDC5D" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#A0041E" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#BE1931" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#FFDC5D" d="M17.259 3.842c.537 2.238-.842 4.489-3.081 5.026-2.239.537-4.489-.842-5.026-3.081-.538-2.239.842-4.49 3.08-5.027 2.239-.537 4.49.842 5.027 3.082z"/><path fill="#FFAC33" d="M21.375 4.462c-1.083.083-2.14.092-4.208-1.976C15.792 1.111 14.564.273 11.834.643c-2.899.394-5.018 3.169-3 4.17.88.437 1.529.095 2.88.295 2.121.315 2.707 2.456 4.62 2.711 3.743.501 6.124-3.44 5.041-3.357z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.126c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#DD2E44" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#DD2E44" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#DD2E44" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/><path fill="#FFDC5D" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M26.29 26.753c-.53-.033-.658-.368-.708-.617-.16-.802-.275-1.489-.333-1.845l-3.604.707c.168.654.657 2.438 1.271 3.619.354.682.711.703 1.666.758 0 0 3.975-.139 6.542-.237.885-.034.973-1.48.215-1.657-.751-.176-1.595-.346-2.276-.413-.465-.044-2.533-.3-2.773-.315zm-12.431-3.068c-.57.514-.5.865-.312 1.803 0 0 1.113 3.738 1.854 6.2.265.881 1.698.641 1.679-.138-.019-.771-.067-1.63-.174-2.305-.073-.463-.346-2.528-.392-2.764-.102-.523.19-.73.419-.84.736-.356 1.371-.642 1.7-.786l-1.591-3.311c-.59.327-2.194 1.249-3.183 2.141z"/><path fill="#BE1931" d="M33.493 26.983c-.195-.018-.89-.026-1.139.032l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-.144-.114c-.143-.115-.384-.119-.59-.138z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.104.103-.174.103z"/><path fill="#DD2E44" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.448.047.582.16.012.01-.22 1.64-.27 2.182z"/><path fill="#CCD6DD" d="M34.147 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855s.003.839-.065 1.217c-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457.004-.036.112-1.291.163-1.918.037-.459.1-1.191.1-1.191.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.059-.083-.761-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.099-.006-.219.094-.267l.316-.152c.102-.047.219-.006.268.094.048.099.006.219-.094.267l-.316.152c-.028.013-.057.019-.087.019zm.269.656c-.085 0-.164-.055-.191-.141-.032-.106.026-.218.132-.25l.354-.11c.109-.034.218.026.251.132.032.106-.026.218-.132.25l-.354.11c-.021.007-.04.009-.06.009zm.23.679c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.334-.061c.117-.019.213.052.232.161.021.109-.052.213-.16.233l-.334.061-.036.003z"/><path fill="#BE1931" d="M18.11 33.515c-.031-.194-.196-.868-.314-1.095l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.774-1.125 4.774-1.125l.075-.167c.076-.168.02-.403-.013-.607z"/><path fill="#CCD6DD" d="M15.299 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.028-.107.132-.172.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.104.149-.193.149z"/><path fill="#DD2E44" d="M15.938 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.06.447-.017.606-.05.105-1.547.178-2.175.278z"/><path fill="#CCD6DD" d="M18.14 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 1.278-.212 1.899-.318.453-.078 1.178-.198 1.178-.198.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.066-.079-.041-.777-.151-.759zm-3.378-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.601.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.092-.057.218-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.653.384c-.075 0-.148-.043-.182-.116l-.142-.308c-.046-.1-.002-.219.098-.265.101-.046.22-.003.266.098l.142.308c.046.1.002.219-.098.265-.027.012-.055.018-.084.018z"/><path fill="#A0041E" d="M16.444 21.431c.754-.391 3.244-1.626 4.948-1.799.156-.016.295.078.346.218l1.259 3.435c.065.176-.033.372-.222.433-.78.251-2.74.917-4.224 1.706-.157.084-.345.045-.443-.094-.442-.624-1.591-2.328-1.848-3.543-.031-.144.047-.286.184-.356z"/><path fill="#BE1931" d="M21.42 25.547c-.187-.828-.749-3.55-.494-5.242.023-.155.147-.265.292-.279l3.581-.349c.184-.018.346.126.357.325.047.818.198 2.882.584 4.518.041.173-.043.345-.198.405-.703.27-2.609.95-3.829.892-.144-.008-.259-.12-.293-.27z"/><path fill="#FFDC5D" d="M18.032 10.659c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647s.848 1.115 1.404.854 1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395-.838-.218-4.153-.593-4.985-.688-.954-.109-1.582.436-1.631 1.254z"/><path fill="#FFDC5D" d="M19.132 6.366c.31-.401.546-.872.661-1.455.409-2.083-.794-4.073-2.688-4.444-1.893-.372-4.483 1.029-4.425 3.151.057 2.107 1.229 5.214 2.993 4.69.466-.138.932-.29 1.375-.474.189.224.325 1.081.247 1.815-.2 1.87 2.381 2.065 2.579.192.157-1.481-.768-2.423-.742-3.475z"/><path fill="#FFAC33" d="M24.54 2.488c-1.311-.014-2.496-1.36-3.845-.501-.264.168-.456.337-.604.503-.234-.711-.636-1.367-1.299-1.799-.648-.422-1.443-.737-2.194-.652-4.578.516-4.329 3.827-3.981 4.137.348.31 1.299-.572 2.002-.669.328-.046 1.041-.053 1.419.49.306.44.411 1.33.411 1.33s.012-1.012.041-1.368c.027-.332.356-.714.801-.221.387.428.19 1.268-.079 1.356-.207.068.129.575.648.961.946.704 1.681.428 1.786.389.106-.039.465-.118.648-1.333.026-.169.044-.35.055-.537.374.324.987.709 1.827.715.929.007 2.619-.466 3.586-1.621.744-.889 1.05-2.355 1.05-2.355-.395.736-1.283 1.186-2.272 1.175z"/><path fill="#DD2E44" d="M22.418 9.749c-.897-1.578-2.174-2.314-3.528-1.683-2.437 1.136-2.644 2.853-1.828 5.349.603 1.845 2.094 3.688 2.906 6.927 0 0 2.246.202 5.436-.14 0-.001-.827-6.655-2.986-10.453z"/><path fill="#FFDC5D" d="M19.923 10.158c-.603-.298-1.501-.279-2.236 1.101-.735 1.38-.969 2.5-1.173 3.36-.157.659-1.276.42-2.358.265-1.086-.156-2.742-.317-2.938-.438-.191-.118-1.507-.386-1.973-.393-.34-.005-2.01.282-2.402.612-.461.388 2.658.325 2.937.594s.914.457 1.312.562c.294.078 4.284 1.268 4.719 1.375.531.131 1.239.341 1.813-.406.574-.748 2.271-3.675 2.719-4.469.513-.91.38-1.768-.42-2.163z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9-fe0f-200d-2642-fe0f.svg b/public/emoji/26f9-fe0f-200d-2642-fe0f.svg index 4ddcf7f8e..ee014e406 100644 --- a/public/emoji/26f9-fe0f-200d-2642-fe0f.svg +++ b/public/emoji/26f9-fe0f-200d-2642-fe0f.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#FFDC5D" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#FFDC5D" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#FFDC5D" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#FFAC33" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#FFDC5D" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#FFDC5D" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#FFAC33" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#FFDC5D" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/26f9.svg b/public/emoji/26f9.svg index 4ddcf7f8e..ee014e406 100644 --- a/public/emoji/26f9.svg +++ b/public/emoji/26f9.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M30.853 27.634c-.081 0-.163-.01-.243-.028l-7.476-1.668c-.403-.094-.713-.402-.81-.805l-1.216-5.066c-.068-.282-.023-.572.129-.819.151-.247.391-.421.672-.487.085-.021.171-.031.256-.031.502 0 .935.342 1.052.832l1.06 4.415 6.821 1.517c.283.065.522.237.676.483.153.246.202.536.137.818-.094.402-.403.713-.807.81-.083.019-.167.029-.251.029zM11.318 4.474c-1.158.564.52 2.167.439 3.483-.052.909 1.722.595 1.722.595s1.159-.564 1.425 1.455c.262 2.017 3.141 2.05 2.877.03-.266-2.016-2.131-2.69-1.612-4.435 1.239-4.176-4.851-1.128-4.851-1.128z"/><path fill="#FFDC5D" d="M27.516 15.314c-.373.089-.779-.03-1.043-.342-2.682-3.189-8.798-3.763-8.859-3.769-.572-.05-.997-.556-.946-1.129.05-.572.548-.998 1.127-.947.286.024 7.034.65 10.275 4.503.37.441.313 1.098-.128 1.469-.129.107-.275.178-.426.215zM17.47 35.301c-.598.028-1.107-.435-1.135-1.031l-.448-8.575c-.011-.243.061-.486.203-.684l5.246-7.271c.184-.255.469-.417.782-.445.259-.023.518.048.73.2.235.17.391.421.438.707.046.286-.022.573-.191.806l-5.024 6.966.431 8.195c.022.48-.28.925-.737 1.079-.077.025-.158.043-.242.051l-.053.002z"/><path fill="#2A6797" d="M15.28 24.425l5.246-7.271c.672-.932 1.976-1.144 2.909-.47.934.673 1.144 1.977.471 2.909l-4.819 6.681c-.001-.001-4.083-1.467-3.807-1.849z"/><path fill="#357BAA" d="M21.352 25.366L20.136 20.3c-.27-1.119.421-2.245 1.541-2.513 1.119-.268 2.244.421 2.513 1.541l.915 3.814c-.001 0-3.569 2.993-3.753 2.224z"/><path fill="#4289C1" d="M18.333 35.988c.383-.001.591-.366.572-.758-.03-.626-.072-.881-.072-.881-.062-.299-.324-.912-.688-.912-2.642 0-5.538.879-6.23 1.5-.409.367-.146 1.061.397 1.06l6.021-.009zm6.875-17.207c-.208.365-1.473-.525-2.99.281-2.156 1.146-3.339.467-3.339.467-3.486-5.595-6.243-8.149-2.809-11.024 1.097-.918 2.454-.523 3.663.76 2.913 3.089 5.684 9.152 5.475 9.516z"/><path fill="#B39155" d="M11.456 5.045c-1.292.498-1.379-.954-.764-1.773.867-1.155 3.366-1.697 4.665-1.06 1.297.637 1.728 2.432.86 3.587-.613.817-.652 2.054-1.083.26-.43-1.793-1.083.261-1.298-.636-.216-.897-2.38-.378-2.38-.378z"/><path fill="#FFDC5D" d="M15.148 11.32c-.033.046-3.381 4.532-8.152 5.032l.002.02c-.483.051-.884.417-.931.919-.053.573.367 1.082.941 1.135.07.006.135-.014.203-.023l.003.021c5.678-.594 9.456-5.654 9.613-5.869l-1.679-1.235z"/><ellipse transform="rotate(-80.781 7 24.32)" fill="#FFAC33" cx="7" cy="24.32" rx="4" ry="4"/><path fill="#C1694F" d="M8.075 24.127c.849.786 1.747 1.413 2.586 1.793.135-.307.223-.636.277-.978-.697-.337-1.44-.862-2.156-1.521l1.448-1.448c-.197-.271-.432-.51-.69-.724l-1.465 1.465c-.717-.779-1.286-1.595-1.615-2.343-.34.046-.669.121-.976.248.014.035.018.065.033.1.373.872 1.03 1.815 1.851 2.702l-1.442 1.442c-.883-.818-1.823-1.471-2.691-1.845-.111.322-.18.661-.206 1.014.706.336 1.462.868 2.189 1.538l-1.285 1.286c.214.258.453.492.724.69l1.268-1.268c.658.714 1.136 1.401 1.448 2.002.349-.033.685-.104 1.003-.22-.396-.834-1.015-1.712-1.737-2.495l1.436-1.438z"/><path fill="#FFDC5D" d="M17.255 5.459c-.262 2.342-2.251 3.358-4.247 4.134-1.904.741-3.484-2.589-3.74-4.915C9.01 2.336 11.747.549 13.875.788s3.642 2.33 3.38 4.671z"/><path fill="#FFAC33" d="M9.962 1.651c2.704-1.981 4.635-1.834 6.321-.68 1.674 1.146 1.929 3.534 1.603 5.091-.326 1.557-.776 1.507-.776 1.507s-2.07.636-2.373-1.306c-.096-.614.567-.999-.248-1.849-.525-.547-1.574-.176-1.516.665.058.841-.384.716-.384.716L11.158 3.66s-1.095.019-1.627 1.064c-.333.657-1.931-1.343.431-3.073z"/><path fill="#4289C1" d="M18.353 34.699h-1.977c-.185 0-.595-.158-.595-.35l.188-1.084c0-.193.096-.5.376-.5s.64.235.999.235.688-.522.96-.522c.211 0 .305.084.336.35l.193 1.521c0 .193-.295.35-.48.35zm14.494-8.875c.056-.379-.275-.638-.665-.677-.624-.062-.882-.058-.882-.058-.305.017-.949.186-1.003.546-.388 2.614.055 5.607.568 6.383.303.458 1.028.301 1.107-.237l.875-5.957z"/><path fill="#4289C1" d="M31.575 25.615l-.291 1.955c-.027.183-.243.565-.434.537l-1.044-.345c-.19-.028-.481-.169-.439-.446.041-.277.326-.599.379-.954.053-.355-.415-.757-.375-1.026.031-.209.128-.289.396-.281l1.533.033c.19.029.302.344.275.527z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M26.3 26.621c-.339-.021-.504-.165-.57-.496-.187-.94-.313-1.721-.356-1.993l-3.912.767c.118.473.644 2.5 1.322 3.806.393.757.831.782 1.79.838 0 0 3.726-.134 6.305-.231 1.142-.043 1.225-1.795.253-2.014-.692-.156-1.438-.3-2.053-.36-.465-.046-2.539-.303-2.779-.317zm-7.462-1.676l-1.729-3.593c-.428.233-2.257 1.253-3.35 2.237-.635.572-.549 1.002-.36 1.944 0 0 1.087 3.639 1.831 6.111.32 1.062 2.024.713 1.995-.251-.022-.732-.07-1.523-.171-2.156-.073-.463-.348-2.534-.394-2.77-.064-.334.033-.53.337-.677.863-.416 1.588-.735 1.841-.845z"/><path fill="#1C6399" d="M32.67 26.978c-.133.007-.238.02-.315.037l-1.55.085c-.078.002-.137.069-.131.147.017.225.309.899.018 1.424-.195.351-.656.495-.688.679-.01.058.032.112.091.118 0 0 .284-.012.532.003.217.1.626.182.836.408.063.148.242.283.364.684.072.239.412 1.33.412 1.33.081.278.189.345.236.494.095.306.263 1.127.346 1.387.083.26.28.37.433.391.152.02.239-.016.239-.016s.385-.362.64-2.01c.15-.967.095-4.904.095-4.904l-1.558-.257z"/><path fill="#CCD6DD" d="M31.227 29.855c-.033 0-.066-.008-.097-.025-.097-.053-.132-.175-.078-.272l.17-.307c.054-.097.178-.131.271-.078.097.053.132.175.078.272l-.17.307c-.035.066-.103.103-.174.103z"/><path fill="#3B94D9" d="M33.882 29.325c-.243-.098-.797-.461-.953-.853-.141-.354-.241-1.312-.259-1.493.297-.028.753-.01.9.004.194.018.447.044.585.166-.001-.001-.214 1.543-.273 2.176z"/><path fill="#CCD6DD" d="M34.148 27.12s-.002.164-.079.276c-.077.113-.129.39-.149.596-.019.206-.105.981-.083 1.524.022.544.194 1.527.203 1.855.009.328.003.839-.065 1.217-.069.378-.142.715-.199.922-.073.267-.171.486-.285.639 0 0 .43-.03.757-.667.258-.503.402-.986.454-1.457l.263-3.109c.081-.868.1-1.309.061-1.475-.007-.029-.013-.152-.106-.279-.06-.083-.762-.153-.772-.042zm-2.472 3.287c-.074 0-.146-.042-.181-.113-.048-.1-.006-.219.094-.267l.317-.152c.101-.046.219-.006.268.094.048.1.006.219-.094.267l-.317.152c-.029.013-.058.019-.087.019zm.268.657c-.086 0-.164-.055-.191-.141-.032-.105.026-.218.132-.25l.354-.11c.112-.033.217.027.251.132.032.105-.026.218-.132.25l-.354.11c-.021.006-.04.009-.06.009zm.232.678c-.095 0-.179-.067-.196-.164-.021-.109.052-.213.16-.233l.333-.061c.108-.02.213.052.232.161.021.109-.052.213-.16.233l-.333.061-.036.003z"/><path fill="#1C6399" d="M17.911 32.716c-.04-.128-.078-.226-.114-.296l-.467-1.48c-.021-.075-.101-.116-.175-.09-.214.073-.794.523-1.375.371-.388-.102-.642-.513-.828-.498-.059.005-.101.059-.092.117 0 0 .082.272.129.516-.043.235-.021.651-.188.911-.128.098-.214.305-.572.522-.213.129-1.186.729-1.186.729-.25.148-.287.269-.42.351-.273.168-1.026.535-1.257.68-.231.145-.289.363-.271.516.018.152.074.228.074.228s.446.283 2.106.121c.974-.095 4.775-1.117 4.775-1.117s-.049-1.295-.139-1.581z"/><path fill="#CCD6DD" d="M15.3 32.271c-.017 0-.033-.002-.051-.006l-.34-.089c-.106-.028-.171-.137-.143-.244.027-.107.131-.171.244-.143l.34.089c.106.028.171.137.143.244-.023.09-.105.149-.193.149z"/><path fill="#3B94D9" d="M15.939 34.472c.035-.26.248-.886.59-1.135.308-.224 1.211-.559 1.382-.622.101.281.197.727.22.873.031.192.072.411-.022.609 0 .001-1.543.176-2.17.275z"/><path fill="#CCD6DD" d="M18.141 34.183s-.159.039-.287-.008-.409-.028-.614.004c-.204.033-.976.142-1.497.298-.521.157-1.431.567-1.747.657s-.812.211-1.195.239c-.383.027-.728.04-.942.036-.277-.004-.513-.045-.69-.117 0 0 .136.409.834.567.552.125 1.055.145 1.524.078.036-.005 3.077-.517 3.077-.517.861-.137 1.293-.229 1.444-.307.027-.014.144-.05.244-.172.065-.078-.042-.776-.151-.758zm-3.379-1.16c-.057 0-.113-.024-.153-.071l-.227-.269c-.071-.084-.06-.211.024-.282.084-.07.21-.061.282.024l.227.269c.071.084.06.211-.024.282-.037.032-.083.047-.129.047zm-.6.47c-.067 0-.133-.034-.17-.095l-.194-.316c-.059-.094-.029-.217.065-.275.093-.057.217-.029.274.066l.194.316c.059.094.029.217-.065.275-.032.02-.068.029-.104.029zm-.652.384c-.075 0-.147-.043-.182-.116l-.143-.308c-.046-.1-.003-.219.098-.265.1-.047.219-.003.266.097l.143.308c.046.1.003.219-.098.265-.028.013-.056.019-.084.019z"/><path fill="#1C6399" d="M16.404 21.332c.751-.398 3.235-1.653 4.947-1.804.156-.014.298.088.352.235l1.328 3.635c.068.186-.027.391-.216.451-.781.25-2.74.915-4.22 1.719-.157.085-.347.041-.448-.106-.456-.664-1.642-2.477-1.923-3.76-.032-.15.045-.298.18-.37z"/><path fill="#357BAA" d="M21.264 25.576c-.196-.827-.785-3.547-.501-5.242.026-.155.16-.266.316-.281l3.853-.37c.198-.019.371.124.382.323.046.818.196 2.882.601 4.517.043.173-.048.346-.216.407-.758.274-2.811.965-4.123.914-.153-.006-.276-.118-.312-.268z"/><path fill="#FFDC5D" d="M18.032 10.676c-.037.617.172 1.537 1.603 1.665 1.43.128 2.808-.164 3.392-.377.584-.214.637.836.892 1.807.256.974.44 1.739.407 1.947-.054.352-.726 1.071-.388 1.647.338.576.848 1.115 1.404.854s1.009-.557 1.136-.889c.127-.333-.626-1.25-.674-1.525s-.081-3.894-.146-4.3c-.08-.496-.172-1.177-1.01-1.395s-4.153-.593-4.985-.688c-.953-.109-1.582.436-1.631 1.254z"/><path fill="#FFDC5D" d="M18.885 6.217c.253-.418.429-.895.475-1.466C19.525 2.71 18.155.934 16.3.784c-1.855-.15-4.184 1.475-3.897 3.502.285 2.013 1.746 4.863 3.38 4.169.431-.183.861-.38 1.267-.604.205.194.429 1.001.435 1.713.012 1.814 2.507 1.72 2.492-.097-.013-1.437-1.002-2.239-1.092-3.25z"/><path fill="#FFAC33" d="M12.925 1.639c2.296-1.793 3.976-1.717 5.471-.76 1.485.951 1.77 3.017 1.528 4.378-.241 1.361-.633 1.329-.633 1.329s-1.781.607-2.096-1.071c-.1-.531.466-.883-.265-1.599-.47-.461-1.372-.111-1.299.618.073.729-.314.632-.314.632l-1.3-1.814s-.951.046-1.384.968c-.272.579-1.713-1.115.292-2.681z"/><path fill="#4289C1" d="M22.418 9.765c-.897-1.578-2.174-2.314-3.528-1.683-4.238 1.976-1.905 5.849.189 12.276 0 0 3.134.202 6.325-.14.001 0-.826-6.654-2.986-10.453z"/><path fill="#FFDC5D" d="M19.924 10.175c-.603-.298-1.614-.479-2.349.901-.735 1.38-1.027 2.884-1.06 3.561-.033.677-1.108.284-2.191.128-1.086-.156-2.853-.332-3.048-.453-.191-.118-1.565-.234-2.03-.242-.34-.005-2.104.282-2.496.612-.461.388 2.73.461 3.01.729.28.269.876.481 1.274.587.294.078 4.391 1.364 4.826 1.471.531.131 1.253.327 1.827-.421.574-.748 2.356-3.913 2.804-4.707.512-.909.232-1.771-.567-2.166z"/><circle fill="#FFAC33" cx="6.397" cy="21.831" r="3.603"/><path fill="#C1694F" d="M7.365 21.657c.764.708 1.573 1.273 2.329 1.615.122-.277.201-.573.25-.881-.628-.303-1.297-.777-1.942-1.37l1.304-1.304c-.178-.245-.389-.459-.621-.652l-1.32 1.32c-.646-.702-1.158-1.437-1.455-2.11-.306.042-.603.109-.879.223.013.031.016.059.03.09.336.785.927 1.635 1.667 2.434L5.43 22.319c-.796-.737-1.642-1.325-2.423-1.662-.1.29-.162.595-.185.914.636.302 1.317.782 1.972 1.385l-1.158 1.158c.193.232.408.444.652.621l1.142-1.142c.592.643 1.023 1.262 1.304 1.803.315-.03.617-.093.903-.199-.356-.751-.914-1.542-1.564-2.247l1.292-1.293z"/></svg> \ No newline at end of file diff --git a/public/emoji/270a-1f3fb.svg b/public/emoji/270a-1f3fb.svg index 953d5211a..1929efb8b 100644 --- a/public/emoji/270a-1f3fb.svg +++ b/public/emoji/270a-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D89882" d="M18 10.087l5.007-.047h6.016c.973 0 2.265-.038 3.195.873-.81-1.187-2.172-1.967-3.718-1.967H28l-.243-.094H22.1l.016-4c0-.812.531-1.578.734-1.998-1.096.592-1.85 1.737-1.85 3.07l-.087.272v2.656L18 8.868c-1.201 0-2.182.427-2.915 1.266l-.016-1.375.016-4.828c0-.758.406-1.438.669-1.954C14.71 2.669 14 3.946 14 5.424v.522l-.181.978.031 8.022c0 .891-.414 1.576-1.031 2.125-.53.472-1.053.656-1.819.656-1.657 0-2.884-1.281-2.884-2.938L8.1 5.712c0-.816.453-1.391.756-1.861C7.757 4.441 7 5.588 7 6.924V8.81l-.072.214v6.058c0 1.989-1.891 2.786-2.828 2.786-1.719 0-3.1-1.203-3.1-2.786v2.645s.185.209.194.312c.881.882 2.156 1.016 2.984 1.016 1.594 0 2.684-.851 3.337-2.062.678 1.212 1.913 2.016 3.428 2.016s3.684-.738 4.056-3.344c.141.167.506.51.678.641.703.531 1.585.734 2.322.734l1.116-.031h1.734c-.535.27-.778.552-1.203.938-1.729 1.568-2.578 4.094-2.578 7.672 0 .276.317.562.594.562.276 0 .578-.317.578-.594 0-3.962.973-6.327 3.203-7.562 1.175-.651 2.626-.969 4.516-.969.059 0 .562-.031.562-.031.276 0 .594-.333.594-.609 0-.276-.271-.547-.547-.547H20.13L18 15.853c-1.657 0-2.915-1.281-2.915-2.938 0-1.657 1.258-2.828 2.915-2.828z"/><path fill="#F7DECE" d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.022-.025.051-.043.073-.068v-.014c.185-.212.343-.448.481-.695.04-.072.069-.151.105-.227.093-.194.176-.394.236-.606.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.147.107.221.162.116.086.229.177.355.251.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path fill="#F7DECE" d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.273c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zM14 9.222v5.724c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v3.276zm4-.276c-1.201 0-2.267.541-3 1.38V3.947c0-.758.29-1.442.753-1.97C16.303 1.35 17.1.947 18 .947c1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.006h-6V4.939z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M32.218 10.913c-.81-1.187-2.172-1.967-3.718-1.967H28s-5.353-5.672-5.15-6.091C21.754 3.446 21 4.591 21 5.924c0 0-5.509-3.431-5.247-3.947C14.71 2.669 14 3.946 14 5.424v.522S8.553 4.321 8.857 3.851C7.757 4.441 7 5.588 7 6.924V8.81l-6 6.272v2.645l17.16 14.439c0 .001 13.128-22.164 14.058-21.253z"/><g fill="#F7DECE"><path d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.023-.024.073-.082.073-.082.185-.212.343-.448.481-.695.04-.072.281-.621.342-.833.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.45.339.576.413.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.272c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zm10.136 9c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v9zm4-6c-1.201 0-2.267.541-3 1.38v-6.38c0-.758.29-1.442.753-1.97.55-.627 1.347-1.03 2.247-1.03 1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.007h-6V4.939z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270a-1f3fc.svg b/public/emoji/270a-1f3fc.svg index 7e4f57598..09dc7d3b5 100644 --- a/public/emoji/270a-1f3fc.svg +++ b/public/emoji/270a-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C68F6A" d="M18 10.087l5.007-.047h6.016c.973 0 2.265-.038 3.195.873-.81-1.187-2.172-1.967-3.718-1.967H28l-.243-.094H22.1l.016-4c0-.812.531-1.578.734-1.998-1.096.592-1.85 1.737-1.85 3.07l-.087.272v2.656L18 8.868c-1.201 0-2.182.427-2.915 1.266l-.016-1.375.016-4.828c0-.758.406-1.438.669-1.954C14.71 2.669 14 3.946 14 5.424v.522l-.181.978.031 8.022c0 .891-.414 1.576-1.031 2.125-.53.472-1.053.656-1.819.656-1.657 0-2.884-1.281-2.884-2.938L8.1 5.712c0-.816.453-1.391.756-1.861C7.757 4.441 7 5.588 7 6.924V8.81l-.072.214v6.058c0 1.989-1.891 2.786-2.828 2.786-1.719 0-3.1-1.203-3.1-2.786v2.645s.185.209.194.312c.881.882 2.156 1.016 2.984 1.016 1.594 0 2.684-.851 3.337-2.062.678 1.212 1.913 2.016 3.428 2.016s3.684-.738 4.056-3.344c.141.167.506.51.678.641.703.531 1.585.734 2.322.734l1.116-.031h1.734c-.535.27-.778.552-1.203.938-1.729 1.568-2.578 4.094-2.578 7.672 0 .276.317.562.594.562.276 0 .578-.317.578-.594 0-3.962.973-6.327 3.203-7.562 1.175-.651 2.626-.969 4.516-.969.059 0 .562-.031.562-.031.276 0 .594-.333.594-.609 0-.276-.271-.547-.547-.547H20.13L18 15.853c-1.657 0-2.915-1.281-2.915-2.938 0-1.657 1.258-2.828 2.915-2.828z"/><path fill="#F3D2A2" d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.022-.025.051-.043.073-.068v-.014c.185-.212.343-.448.481-.695.04-.072.069-.151.105-.227.093-.194.176-.394.236-.606.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.147.107.221.162.116.086.229.177.355.251.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path fill="#F3D2A2" d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.273c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zM14 9.222v5.724c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v3.276zm4-.276c-1.201 0-2.267.541-3 1.38V3.947c0-.758.29-1.442.753-1.97C16.303 1.35 17.1.947 18 .947c1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.006h-6V4.939z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M32.218 10.913c-.81-1.187-2.172-1.967-3.718-1.967H28s-5.353-5.672-5.15-6.091C21.754 3.446 21 4.591 21 5.924c0 0-5.509-3.431-5.247-3.947C14.71 2.669 14 3.946 14 5.424v.522S8.553 4.321 8.857 3.851C7.757 4.441 7 5.588 7 6.924V8.81l-6 6.272v2.645l17.16 14.439c0 .001 13.128-22.164 14.058-21.253z"/><g fill="#F3D2A2"><path d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.023-.024.073-.082.073-.082.185-.212.343-.448.481-.695.04-.072.281-.621.342-.833.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.45.339.576.413.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.272c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zm10.136 9c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v9zm4-6c-1.201 0-2.267.541-3 1.38v-6.38c0-.758.29-1.442.753-1.97.55-.627 1.347-1.03 2.247-1.03 1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.007h-6V4.939z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270a-1f3fd.svg b/public/emoji/270a-1f3fd.svg index 68f4030fa..329832daf 100644 --- a/public/emoji/270a-1f3fd.svg +++ b/public/emoji/270a-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AA8052" d="M18 10.087l5.007-.047h6.016c.973 0 2.265-.038 3.195.873-.81-1.187-2.172-1.967-3.718-1.967H28l-.243-.094H22.1l.016-4c0-.812.531-1.578.734-1.998-1.096.592-1.85 1.737-1.85 3.07l-.087.272v2.656L18 8.868c-1.201 0-2.182.427-2.915 1.266l-.016-1.375.016-4.828c0-.758.406-1.438.669-1.954C14.71 2.669 14 3.946 14 5.424v.522l-.181.978.031 8.022c0 .891-.414 1.576-1.031 2.125-.53.472-1.053.656-1.819.656-1.657 0-2.884-1.281-2.884-2.938L8.1 5.712c0-.816.453-1.391.756-1.861C7.757 4.441 7 5.588 7 6.924V8.81l-.072.214v6.058c0 1.989-1.891 2.786-2.828 2.786-1.719 0-3.1-1.203-3.1-2.786v2.645s.185.209.194.312c.881.882 2.156 1.016 2.984 1.016 1.594 0 2.684-.851 3.337-2.062.678 1.212 1.913 2.016 3.428 2.016s3.684-.738 4.056-3.344c.141.167.506.51.678.641.703.531 1.585.734 2.322.734l1.116-.031h1.734c-.535.27-.778.552-1.203.938-1.729 1.568-2.578 4.094-2.578 7.672 0 .276.317.562.594.562.276 0 .578-.317.578-.594 0-3.962.973-6.327 3.203-7.562 1.175-.651 2.626-.969 4.516-.969.059 0 .562-.031.562-.031.276 0 .594-.333.594-.609 0-.276-.271-.547-.547-.547H20.13L18 15.853c-1.657 0-2.915-1.281-2.915-2.938 0-1.657 1.258-2.828 2.915-2.828z"/><path fill="#D5AB88" d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.022-.025.051-.043.073-.068v-.014c.185-.212.343-.448.481-.695.04-.072.069-.151.105-.227.093-.194.176-.394.236-.606.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.147.107.221.162.116.086.229.177.355.251.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path fill="#D5AB88" d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.273c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zM14 9.222v5.724c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v3.276zm4-.276c-1.201 0-2.267.541-3 1.38V3.947c0-.758.29-1.442.753-1.97C16.303 1.35 17.1.947 18 .947c1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.006h-6V4.939z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M32.218 10.913c-.81-1.187-2.172-1.967-3.718-1.967H28s-5.353-5.672-5.15-6.091C21.754 3.446 21 4.591 21 5.924c0 0-5.509-3.431-5.247-3.947C14.71 2.669 14 3.946 14 5.424v.522S8.553 4.321 8.857 3.851C7.757 4.441 7 5.588 7 6.924V8.81l-6 6.272v2.645l17.16 14.439c0 .001 13.128-22.164 14.058-21.253z"/><g fill="#D4AB88"><path d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.023-.024.073-.082.073-.082.185-.212.343-.448.481-.695.04-.072.281-.621.342-.833.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.45.339.576.413.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.272c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zm10.136 9c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v9zm4-6c-1.201 0-2.267.541-3 1.38v-6.38c0-.758.29-1.442.753-1.97.55-.627 1.347-1.03 2.247-1.03 1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.007h-6V4.939z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270a-1f3fe.svg b/public/emoji/270a-1f3fe.svg index a6d1fe8b5..b4bcfc5c0 100644 --- a/public/emoji/270a-1f3fe.svg +++ b/public/emoji/270a-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#845636" d="M18 10.087l5.007-.047h6.016c.973 0 2.265-.038 3.195.873-.81-1.187-2.172-1.967-3.718-1.967H28l-.243-.094H22.1l.016-4c0-.812.531-1.578.734-1.998-1.096.592-1.85 1.737-1.85 3.07l-.087.272v2.656L18 8.868c-1.201 0-2.182.427-2.915 1.266l-.016-1.375.016-4.828c0-.758.406-1.438.669-1.954C14.71 2.669 14 3.946 14 5.424v.522l-.181.978.031 8.022c0 .891-.414 1.576-1.031 2.125-.53.472-1.053.656-1.819.656-1.657 0-2.884-1.281-2.884-2.938L8.1 5.712c0-.816.453-1.391.756-1.861C7.757 4.441 7 5.588 7 6.924V8.81l-.072.214v6.058c0 1.989-1.891 2.786-2.828 2.786-1.719 0-3.1-1.203-3.1-2.786v2.645s.185.209.194.312c.881.882 2.156 1.016 2.984 1.016 1.594 0 2.684-.851 3.337-2.062.678 1.212 1.913 2.016 3.428 2.016s3.684-.738 4.056-3.344c.141.167.506.51.678.641.703.531 1.585.734 2.322.734l1.116-.031h1.734c-.535.27-.778.552-1.203.938-1.729 1.568-2.578 4.094-2.578 7.672 0 .276.317.562.594.562.276 0 .578-.317.578-.594 0-3.962.973-6.327 3.203-7.562 1.175-.651 2.626-.969 4.516-.969.059 0 .562-.031.562-.031.276 0 .594-.333.594-.609 0-.276-.271-.547-.547-.547H20.13L18 15.853c-1.657 0-2.915-1.281-2.915-2.938 0-1.657 1.258-2.828 2.915-2.828z"/><path fill="#AF7E57" d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.022-.025.051-.043.073-.068v-.014c.185-.212.343-.448.481-.695.04-.072.069-.151.105-.227.093-.194.176-.394.236-.606.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.147.107.221.162.116.086.229.177.355.251.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path fill="#AF7E57" d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.273c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zM14 9.222v5.724c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v3.276zm4-.276c-1.201 0-2.267.541-3 1.38V3.947c0-.758.29-1.442.753-1.97C16.303 1.35 17.1.947 18 .947c1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.006h-6V4.939z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M32.218 10.913c-.81-1.187-2.172-1.967-3.718-1.967H28s-5.353-5.672-5.15-6.091C21.754 3.446 21 4.591 21 5.924c0 0-5.509-3.431-5.247-3.947C14.71 2.669 14 3.946 14 5.424v.522S8.553 4.321 8.857 3.851C7.757 4.441 7 5.588 7 6.924V8.81l-6 6.272v2.645l17.16 14.439c0 .001 13.128-22.164 14.058-21.253z"/><g fill="#AF7E57"><path d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.023-.024.073-.082.073-.082.185-.212.343-.448.481-.695.04-.072.281-.621.342-.833.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.45.339.576.413.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.272c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zm10.136 9c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v9zm4-6c-1.201 0-2.267.541-3 1.38v-6.38c0-.758.29-1.442.753-1.97.55-.627 1.347-1.03 2.247-1.03 1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.007h-6V4.939z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270a-1f3ff.svg b/public/emoji/270a-1f3ff.svg index 74f881096..e7dd06eb6 100644 --- a/public/emoji/270a-1f3ff.svg +++ b/public/emoji/270a-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#543226" d="M18 10.087l5.007-.047h6.016c.973 0 2.265-.038 3.195.873-.81-1.187-2.172-1.967-3.718-1.967H28l-.243-.094H22.1l.016-4c0-.812.531-1.578.734-1.998-1.096.592-1.85 1.737-1.85 3.07l-.087.272v2.656L18 8.868c-1.201 0-2.182.427-2.915 1.266l-.016-1.375.016-4.828c0-.758.406-1.438.669-1.954C14.71 2.669 14 3.946 14 5.424v.522l-.181.978.031 8.022c0 .891-.414 1.576-1.031 2.125-.53.472-1.053.656-1.819.656-1.657 0-2.884-1.281-2.884-2.938L8.1 5.712c0-.816.453-1.391.756-1.861C7.757 4.441 7 5.588 7 6.924V8.81l-.072.214v6.058c0 1.989-1.891 2.786-2.828 2.786-1.719 0-3.1-1.203-3.1-2.786v2.645s.185.209.194.312c.881.882 2.156 1.016 2.984 1.016 1.594 0 2.684-.851 3.337-2.062.678 1.212 1.913 2.016 3.428 2.016s3.684-.738 4.056-3.344c.141.167.506.51.678.641.703.531 1.585.734 2.322.734l1.116-.031h1.734c-.535.27-.778.552-1.203.938-1.729 1.568-2.578 4.094-2.578 7.672 0 .276.317.562.594.562.276 0 .578-.317.578-.594 0-3.962.973-6.327 3.203-7.562 1.175-.651 2.626-.969 4.516-.969.059 0 .562-.031.562-.031.276 0 .594-.333.594-.609 0-.276-.271-.547-.547-.547H20.13L18 15.853c-1.657 0-2.915-1.281-2.915-2.938 0-1.657 1.258-2.828 2.915-2.828z"/><path fill="#7C533E" d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.022-.025.051-.043.073-.068v-.014c.185-.212.343-.448.481-.695.04-.072.069-.151.105-.227.093-.194.176-.394.236-.606.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.147.107.221.162.116.086.229.177.355.251.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path fill="#7C533E" d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.273c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zM14 9.222v5.724c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v3.276zm4-.276c-1.201 0-2.267.541-3 1.38V3.947c0-.758.29-1.442.753-1.97C16.303 1.35 17.1.947 18 .947c1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.006h-6V4.939z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M32.218 10.913c-.81-1.187-2.172-1.967-3.718-1.967H28s-5.353-5.672-5.15-6.091C21.754 3.446 21 4.591 21 5.924c0 0-5.509-3.431-5.247-3.947C14.71 2.669 14 3.946 14 5.424v.522S8.553 4.321 8.857 3.851C7.757 4.441 7 5.588 7 6.924V8.81l-6 6.272v2.645l17.16 14.439c0 .001 13.128-22.164 14.058-21.253z"/><g fill="#7C533E"><path d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.023-.024.073-.082.073-.082.185-.212.343-.448.481-.695.04-.072.281-.621.342-.833.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.45.339.576.413.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.272c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zm10.136 9c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v9zm4-6c-1.201 0-2.267.541-3 1.38v-6.38c0-.758.29-1.442.753-1.97.55-.627 1.347-1.03 2.247-1.03 1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.007h-6V4.939z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270a.svg b/public/emoji/270a.svg index 2e25dd39c..99910432f 100644 --- a/public/emoji/270a.svg +++ b/public/emoji/270a.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M18 10.087l5.007-.047h6.016c.973 0 2.265-.038 3.195.873-.81-1.187-2.172-1.967-3.718-1.967H28l-.243-.094H22.1l.016-4c0-.812.531-1.578.734-1.998-1.096.592-1.85 1.737-1.85 3.07l-.087.272v2.656L18 8.868c-1.201 0-2.182.427-2.915 1.266l-.016-1.375.016-4.828c0-.758.406-1.438.669-1.954C14.71 2.669 14 3.946 14 5.424v.522l-.181.978.031 8.022c0 .891-.414 1.576-1.031 2.125-.53.472-1.053.656-1.819.656-1.657 0-2.884-1.281-2.884-2.938L8.1 5.712c0-.816.453-1.391.756-1.861C7.757 4.441 7 5.588 7 6.924V8.81l-.072.214v6.058c0 1.989-1.891 2.786-2.828 2.786-1.719 0-3.1-1.203-3.1-2.786v2.645s.185.209.194.312c.881.882 2.156 1.016 2.984 1.016 1.594 0 2.684-.851 3.337-2.062.678 1.212 1.913 2.016 3.428 2.016s3.684-.738 4.056-3.344c.141.167.506.51.678.641.703.531 1.585.734 2.322.734l1.116-.031h1.734c-.535.27-.778.552-1.203.938-1.729 1.568-2.578 4.094-2.578 7.672 0 .276.317.562.594.562.276 0 .578-.317.578-.594 0-3.962.973-6.327 3.203-7.562 1.175-.651 2.626-.969 4.516-.969.059 0 .562-.031.562-.031.276 0 .594-.333.594-.609 0-.276-.271-.547-.547-.547H20.13L18 15.853c-1.657 0-2.915-1.281-2.915-2.938 0-1.657 1.258-2.828 2.915-2.828z"/><path fill="#FFDC5D" d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.022-.025.051-.043.073-.068v-.014c.185-.212.343-.448.481-.695.04-.072.069-.151.105-.227.093-.194.176-.394.236-.606.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.147.107.221.162.116.086.229.177.355.251.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path fill="#FFDC5D" d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.273c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zM14 9.222v5.724c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v3.276zm4-.276c-1.201 0-2.267.541-3 1.38V3.947c0-.758.29-1.442.753-1.97C16.303 1.35 17.1.947 18 .947c1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.006h-6V4.939z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M32.218 10.913c-.81-1.187-2.172-1.967-3.718-1.967H28s-5.353-5.672-5.15-6.091C21.754 3.446 21 4.591 21 5.924c0 0-5.509-3.431-5.247-3.947C14.71 2.669 14 3.946 14 5.424v.522S8.553 4.321 8.857 3.851C7.757 4.441 7 5.588 7 6.924V8.81l-6 6.272v2.645l17.16 14.439c0 .001 13.128-22.164 14.058-21.253z"/><g fill="#FFDC5D"><path d="M4.124 18.946c1.474 0 2.738-.831 3.392-2.043.678 1.212 1.958 2.043 3.446 2.043h.076c1.153 0 2.169-.51 2.889-1.298.023-.024.073-.082.073-.082.185-.212.343-.448.481-.695.04-.072.281-.621.342-.833.052-.173.106-.344.134-.526.141.167.296.319.46.46.069.059.45.339.576.413.589.351 1.271.56 2.008.56h3.166c-.535.27-.999.614-1.424 1-1.729 1.568-2.579 4.085-2.579 7.663 0 .276.224.5.5.5s.5-.224.5-.5c0-3.962 1.01-6.427 3.24-7.663 1.175-.651 2.682-.967 4.571-.967.059 0 .526-.033.526-.033.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.657 0-3-1.343-3-3s1.343-3 3-3h11c.973 0 2.288.056 3.218.967.325.318.604.736.803 1.297l1.659 5.472c.156.512.73 2.857.626 3.346 0 7.34-8.7 14.972-19.004 14.972C6.326 36 1 27.883 1 17.957v-.229c.01.01.021.016.031.026.881.882 1.799 1.192 2.845 1.192h.248z"/><path d="M3.864 5.946h.271C5.718 5.946 7 7.229 7 8.81v6.272c0 1.582-1.282 2.864-2.864 2.864h-.272C2.282 17.946 1 16.664 1 15.082V8.81c0-1.581 1.282-2.864 2.864-2.864zm10.136 9c0 .891-.396 1.683-1.014 2.233-.53.472-1.221.767-1.986.767-1.657 0-3-1.343-3-3v-9c0-.816.328-1.554.857-2.095.544-.557 1.302-.905 2.143-.905 1.657 0 3 1.343 3 3v9zm4-6c-1.201 0-2.267.541-3 1.38v-6.38c0-.758.29-1.442.753-1.97.55-.627 1.347-1.03 2.247-1.03 1.657 0 3 1.343 3 3v5h-3zm4-4.007c0-.812.326-1.545.85-2.085.544-.559 1.301-.909 2.143-.909h.014C26.66 1.946 28 3.286 28 4.939v4.007h-6V4.939z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270b-1f3fb.svg b/public/emoji/270b-1f3fb.svg index df49e0727..5b64565d2 100644 --- a/public/emoji/270b-1f3fb.svg +++ b/public/emoji/270b-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M10 4.965C10 3.604 11.104 2.5 12.465 2.5h.07C13.896 2.5 15 3.604 15 4.965v-2.16C15 1.532 16.032.5 17.305.5h.391C18.968.5 20 1.532 20 2.805V4c0-1.381 1.119-2.5 2.5-2.5S25 2.619 25 4v9.347c0-1.02.827-1.847 1.846-1.847h.308c1.02 0 1.846.827 1.846 1.847v9.807C29 24.173 28.173 25 27.154 25H27v1h-2.15c-.695 3.424-3.721 6-7.35 6-4.143 0-7.5-3.357-7.5-7.5v-6c0-.217.015-.431.032-.643-.013-.107-.032-.211-.032-.322V4.965z"/><path fill="#F7DECE" d="M6 8s0-2 2-2 2 2 2 2v9.286c0-.147 1-.281 1-.398V4s0-2 2-2 2 2 2 2v12.122c0-.028 1-.052 1-.069V2s0-2 2-2 2 2 2 2v14.052c0 .017 1 .053 1 .082V3s0-2 2-2 2 2 2 2v16c-6 0-10 5-10 10 0 1 1 1 1 1 0-6 4-10 10-10v-7s0-2 2-2 2 2 2 2v11c0 6.627-5.373 12-12 12S6 30.627 6 24V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M20.5 2.965c-1.381 0-2.5 1.119-2.5 2.5v.005L15.5.465c-1.381 0-2.5 1.119-2.5 2.5V4.25l-2.5-1.535c-1.381 0-2.5 1.119-2.5 2.5V8.75L7 18h13.542L20.5 2.965z"/><path fill="#F7DECE" d="M31.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.073-1.234-.313-1.234-1.397V4.5s0-2-2-2-2 2-2 2v11.633c0-.029-1-.064-1-.082V2s0-2-2-2-2 2-2 2v14.053c0 .017-1 .041-1 .069V4.25s0-2-2-2-2 2-2 2v12.638c0 .118-1 .251-1 .398V8.75s0-2-2-2-2 2-2 2V24c0 6.627 5.373 12 12 12 4.775 0 8.06-2.598 9.896-5.292 1.557-2.285 2.009-4.658 2.104-5.375 0 0 .123-1.479 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.358.625-1.706-.906-2.383z"/><path fill="#E0AA94" d="M23.439 21.471c-.297-.266-.372-.552-.417-.808-1.892.259-4.457.789-6.427 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.292-2.706 2.254-8.063 8.784-8.58.028-.002.387-.024.591-.035 0 0-.352-.06-.605-.287z"/></svg> \ No newline at end of file diff --git a/public/emoji/270b-1f3fc.svg b/public/emoji/270b-1f3fc.svg index 948e1cbd1..3f69cc709 100644 --- a/public/emoji/270b-1f3fc.svg +++ b/public/emoji/270b-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M10 4.965C10 3.604 11.104 2.5 12.465 2.5h.07C13.896 2.5 15 3.604 15 4.965v-2.16C15 1.532 16.032.5 17.305.5h.391C18.968.5 20 1.532 20 2.805V4c0-1.381 1.119-2.5 2.5-2.5S25 2.619 25 4v9.347c0-1.02.827-1.847 1.846-1.847h.308c1.02 0 1.846.827 1.846 1.847v9.807C29 24.173 28.173 25 27.154 25H27v1h-2.15c-.695 3.424-3.721 6-7.35 6-4.143 0-7.5-3.357-7.5-7.5v-6c0-.217.015-.431.032-.643-.013-.107-.032-.211-.032-.322V4.965z"/><path fill="#F3D2A2" d="M6 8s0-2 2-2 2 2 2 2v9.286c0-.147 1-.281 1-.398V4s0-2 2-2 2 2 2 2v12.122c0-.028 1-.052 1-.069V2s0-2 2-2 2 2 2 2v14.052c0 .017 1 .053 1 .082V3s0-2 2-2 2 2 2 2v16c-6 0-10 5-10 10 0 1 1 1 1 1 0-6 4-10 10-10v-7s0-2 2-2 2 2 2 2v11c0 6.627-5.373 12-12 12S6 30.627 6 24V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M20.5 2.965c-1.381 0-2.5 1.119-2.5 2.5v.005L15.5.465c-1.381 0-2.5 1.119-2.5 2.5V4.25l-2.5-1.535c-1.381 0-2.5 1.119-2.5 2.5V8.75L7 18h13.542L20.5 2.965z"/><path fill="#F3D2A2" d="M31.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.073-1.234-.313-1.234-1.397V4.5s0-2-2-2-2 2-2 2v11.633c0-.029-1-.064-1-.082V2s0-2-2-2-2 2-2 2v14.053c0 .017-1 .041-1 .069V4.25s0-2-2-2-2 2-2 2v12.638c0 .118-1 .251-1 .398V8.75s0-2-2-2-2 2-2 2V24c0 6.627 5.373 12 12 12 4.775 0 8.06-2.598 9.896-5.292 1.557-2.285 2.009-4.658 2.104-5.375 0 0 .123-1.479 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.358.625-1.706-.906-2.383z"/><path fill="#D2A077" d="M23.439 21.471c-.297-.266-.372-.552-.417-.808-1.892.259-4.457.789-6.427 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.292-2.706 2.254-8.063 8.784-8.58.028-.002.387-.024.591-.035 0 0-.352-.06-.605-.287z"/></svg> \ No newline at end of file diff --git a/public/emoji/270b-1f3fd.svg b/public/emoji/270b-1f3fd.svg index fc45ac6de..02f74174c 100644 --- a/public/emoji/270b-1f3fd.svg +++ b/public/emoji/270b-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M10 4.965C10 3.604 11.104 2.5 12.465 2.5h.07C13.896 2.5 15 3.604 15 4.965v-2.16C15 1.532 16.032.5 17.305.5h.391C18.968.5 20 1.532 20 2.805V4c0-1.381 1.119-2.5 2.5-2.5S25 2.619 25 4v9.347c0-1.02.827-1.847 1.846-1.847h.308c1.02 0 1.846.827 1.846 1.847v9.807C29 24.173 28.173 25 27.154 25H27v1h-2.15c-.695 3.424-3.721 6-7.35 6-4.143 0-7.5-3.357-7.5-7.5v-6c0-.217.015-.431.032-.643-.013-.107-.032-.211-.032-.322V4.965z"/><path fill="#D5AB88" d="M6 8s0-2 2-2 2 2 2 2v9.286c0-.147 1-.281 1-.398V4s0-2 2-2 2 2 2 2v12.122c0-.028 1-.052 1-.069V2s0-2 2-2 2 2 2 2v14.052c0 .017 1 .053 1 .082V3s0-2 2-2 2 2 2 2v16c-6 0-10 5-10 10 0 1 1 1 1 1 0-6 4-10 10-10v-7s0-2 2-2 2 2 2 2v11c0 6.627-5.373 12-12 12S6 30.627 6 24V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M20.5 2.965c-1.381 0-2.5 1.119-2.5 2.5v.005L15.5.465c-1.381 0-2.5 1.119-2.5 2.5V4.25l-2.5-1.535c-1.381 0-2.5 1.119-2.5 2.5V8.75L7 18h13.542L20.5 2.965z"/><path fill="#D5AB88" d="M31.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.073-1.234-.313-1.234-1.397V4.5s0-2-2-2-2 2-2 2v11.633c0-.029-1-.064-1-.082V2s0-2-2-2-2 2-2 2v14.053c0 .017-1 .041-1 .069V4.25s0-2-2-2-2 2-2 2v12.638c0 .118-1 .251-1 .398V8.75s0-2-2-2-2 2-2 2V24c0 6.627 5.373 12 12 12 4.775 0 8.06-2.598 9.896-5.292 1.557-2.285 2.009-4.658 2.104-5.375 0 0 .123-1.479 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.358.625-1.706-.906-2.383z"/><path fill="#B78B60" d="M23.439 21.471c-.297-.266-.372-.552-.417-.808-1.892.259-4.457.789-6.427 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.292-2.706 2.254-8.063 8.784-8.58.028-.002.387-.024.591-.035 0 0-.352-.06-.605-.287z"/></svg> \ No newline at end of file diff --git a/public/emoji/270b-1f3fe.svg b/public/emoji/270b-1f3fe.svg index 012bcd2c5..ed89dbac5 100644 --- a/public/emoji/270b-1f3fe.svg +++ b/public/emoji/270b-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M10 4.965C10 3.604 11.104 2.5 12.465 2.5h.07C13.896 2.5 15 3.604 15 4.965v-2.16C15 1.532 16.032.5 17.305.5h.391C18.968.5 20 1.532 20 2.805V4c0-1.381 1.119-2.5 2.5-2.5S25 2.619 25 4v9.347c0-1.02.827-1.847 1.846-1.847h.308c1.02 0 1.846.827 1.846 1.847v9.807C29 24.173 28.173 25 27.154 25H27v1h-2.15c-.695 3.424-3.721 6-7.35 6-4.143 0-7.5-3.357-7.5-7.5v-6c0-.217.015-.431.032-.643-.013-.107-.032-.211-.032-.322V4.965z"/><path fill="#AF7E57" d="M6 8s0-2 2-2 2 2 2 2v9.286c0-.147 1-.281 1-.398V4s0-2 2-2 2 2 2 2v12.122c0-.028 1-.052 1-.069V2s0-2 2-2 2 2 2 2v14.052c0 .017 1 .053 1 .082V3s0-2 2-2 2 2 2 2v16c-6 0-10 5-10 10 0 1 1 1 1 1 0-6 4-10 10-10v-7s0-2 2-2 2 2 2 2v11c0 6.627-5.373 12-12 12S6 30.627 6 24V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M20.5 2.965c-1.381 0-2.5 1.119-2.5 2.5v.005L15.5.465c-1.381 0-2.5 1.119-2.5 2.5V4.25l-2.5-1.535c-1.381 0-2.5 1.119-2.5 2.5V8.75L7 18h13.542L20.5 2.965z"/><path fill="#AF7E57" d="M31.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.073-1.234-.313-1.234-1.397V4.5s0-2-2-2-2 2-2 2v11.633c0-.029-1-.064-1-.082V2s0-2-2-2-2 2-2 2v14.053c0 .017-1 .041-1 .069V4.25s0-2-2-2-2 2-2 2v12.638c0 .118-1 .251-1 .398V8.75s0-2-2-2-2 2-2 2V24c0 6.627 5.373 12 12 12 4.775 0 8.06-2.598 9.896-5.292 1.557-2.285 2.009-4.658 2.104-5.375 0 0 .123-1.479 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.358.625-1.706-.906-2.383z"/><path fill="#90603E" d="M23.439 21.471c-.297-.266-.372-.552-.417-.808-1.892.259-4.457.789-6.427 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.292-2.706 2.254-8.063 8.784-8.58.028-.002.387-.024.591-.035 0 0-.352-.06-.605-.287z"/></svg> \ No newline at end of file diff --git a/public/emoji/270b-1f3ff.svg b/public/emoji/270b-1f3ff.svg index 7676af18c..74072202c 100644 --- a/public/emoji/270b-1f3ff.svg +++ b/public/emoji/270b-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M10 4.965C10 3.604 11.104 2.5 12.465 2.5h.07C13.896 2.5 15 3.604 15 4.965v-2.16C15 1.532 16.032.5 17.305.5h.391C18.968.5 20 1.532 20 2.805V4c0-1.381 1.119-2.5 2.5-2.5S25 2.619 25 4v9.347c0-1.02.827-1.847 1.846-1.847h.308c1.02 0 1.846.827 1.846 1.847v9.807C29 24.173 28.173 25 27.154 25H27v1h-2.15c-.695 3.424-3.721 6-7.35 6-4.143 0-7.5-3.357-7.5-7.5v-6c0-.217.015-.431.032-.643-.013-.107-.032-.211-.032-.322V4.965z"/><path fill="#7C533E" d="M6 8s0-2 2-2 2 2 2 2v9.286c0-.147 1-.281 1-.398V4s0-2 2-2 2 2 2 2v12.122c0-.028 1-.052 1-.069V2s0-2 2-2 2 2 2 2v14.052c0 .017 1 .053 1 .082V3s0-2 2-2 2 2 2 2v16c-6 0-10 5-10 10 0 1 1 1 1 1 0-6 4-10 10-10v-7s0-2 2-2 2 2 2 2v11c0 6.627-5.373 12-12 12S6 30.627 6 24V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M20.5 2.965c-1.381 0-2.5 1.119-2.5 2.5v.005L15.5.465c-1.381 0-2.5 1.119-2.5 2.5V4.25l-2.5-1.535c-1.381 0-2.5 1.119-2.5 2.5V8.75L7 18h13.542L20.5 2.965z"/><path fill="#7C533E" d="M31.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.073-1.234-.313-1.234-1.397V4.5s0-2-2-2-2 2-2 2v11.633c0-.029-1-.064-1-.082V2s0-2-2-2-2 2-2 2v14.053c0 .017-1 .041-1 .069V4.25s0-2-2-2-2 2-2 2v12.638c0 .118-1 .251-1 .398V8.75s0-2-2-2-2 2-2 2V24c0 6.627 5.373 12 12 12 4.775 0 8.06-2.598 9.896-5.292 1.557-2.285 2.009-4.658 2.104-5.375 0 0 .123-1.479 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.358.625-1.706-.906-2.383z"/><path fill="#583529" d="M23.439 21.471c-.297-.266-.372-.552-.417-.808-1.892.259-4.457.789-6.427 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.292-2.706 2.254-8.063 8.784-8.58.028-.002.387-.024.591-.035 0 0-.352-.06-.605-.287z"/></svg> \ No newline at end of file diff --git a/public/emoji/270b.svg b/public/emoji/270b.svg index 9bd7879da..31576f16e 100644 --- a/public/emoji/270b.svg +++ b/public/emoji/270b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M10 4.965C10 3.604 11.104 2.5 12.465 2.5h.07C13.896 2.5 15 3.604 15 4.965v-2.16C15 1.532 16.032.5 17.305.5h.391C18.968.5 20 1.532 20 2.805V4c0-1.381 1.119-2.5 2.5-2.5S25 2.619 25 4v9.347c0-1.02.827-1.847 1.846-1.847h.308c1.02 0 1.846.827 1.846 1.847v9.807C29 24.173 28.173 25 27.154 25H27v1h-2.15c-.695 3.424-3.721 6-7.35 6-4.143 0-7.5-3.357-7.5-7.5v-6c0-.217.015-.431.032-.643-.013-.107-.032-.211-.032-.322V4.965z"/><path fill="#FFDC5D" d="M6 8s0-2 2-2 2 2 2 2v9.286c0-.147 1-.281 1-.398V4s0-2 2-2 2 2 2 2v12.122c0-.028 1-.052 1-.069V2s0-2 2-2 2 2 2 2v14.052c0 .017 1 .053 1 .082V3s0-2 2-2 2 2 2 2v16c-6 0-10 5-10 10 0 1 1 1 1 1 0-6 4-10 10-10v-7s0-2 2-2 2 2 2 2v11c0 6.627-5.373 12-12 12S6 30.627 6 24V8z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M20.5 2.965c-1.381 0-2.5 1.119-2.5 2.5v.005L15.5.465c-1.381 0-2.5 1.119-2.5 2.5V4.25l-2.5-1.535c-1.381 0-2.5 1.119-2.5 2.5V8.75L7 18h13.542L20.5 2.965z"/><path fill="#FFDC5D" d="M31.375 16.219c-1.381-.611-3.354.208-4.75 2.188-.917 1.3-1.187 3.151-2.391 3.344-.46.073-1.234-.313-1.234-1.397V4.5s0-2-2-2-2 2-2 2v11.633c0-.029-1-.064-1-.082V2s0-2-2-2-2 2-2 2v14.053c0 .017-1 .041-1 .069V4.25s0-2-2-2-2 2-2 2v12.638c0 .118-1 .251-1 .398V8.75s0-2-2-2-2 2-2 2V24c0 6.627 5.373 12 12 12 4.775 0 8.06-2.598 9.896-5.292 1.557-2.285 2.009-4.658 2.104-5.375 0 0 .123-1.479 1.156-2.865 1.469-1.969 2.5-3.156 3.125-3.866.317-.358.625-1.706-.906-2.383z"/><path fill="#EF9645" d="M23.439 21.471c-.297-.266-.372-.552-.417-.808-1.892.259-4.457.789-6.427 2.715-2.556 2.499-2.992 5.2-2.971 7.007.017 1.457.812 2.147 1.045-.012.292-2.706 2.254-8.063 8.784-8.58.028-.002.387-.024.591-.035 0 0-.352-.06-.605-.287z"/></svg> \ No newline at end of file diff --git a/public/emoji/270c-1f3fb.svg b/public/emoji/270c-1f3fb.svg index b675ead64..a95327abb 100644 --- a/public/emoji/270c-1f3fb.svg +++ b/public/emoji/270c-1f3fb.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D89882" d="M8.916 23.891s1.737.109 1.94-1.808l.016-4.161.128-.005v-.96c0-.952.572-1.769 1.389-2.133-.242.331-.283 7.176-.283 7.176 0 1.104.789 1.891 1.894 1.891.755 0 1.265-.314 1.606-.932-.458-.526-.734-1.206-.734-1.959 0-1.312.781-2.141 1.128-2.222 0 0 .056-.07.082-.084.368-.306.804-.535 1.291-.634l.02.001.261-.155h6.928c1.306 0 1.558.486 1.538.475l.02.011c.591.305 1.076.773 1.404 1.35-.025-.031-.681-.633-1.543-.633s-8-.047-8-.047c-1.104 0-1.925.833-1.925 1.938s.82 1.922 1.925 1.922l5.5-.016c.276 0 .591.317.591.594 0 .276-.314.578-.591.578 0 0-1.558-.069-2.847 1.25-1.209 1.238-2.078 3.803-2.078 5.672 0 .276-.299.578-.575.578s-.582-.302-.582-.578c0-3.01.941-5.525 2.75-6.891H18c-1 0-1.273-.244-1.474-.359.001.001-.701 1.359-2.526 1.359-.237 0-1.628-.047-2.487-1.266-1.125 1.422-2.575 1.266-2.575 1.266-.733 0-1.566-.328-1.91-.833C7.015 24.185 7 24.095 7 24v-1.917c0 1.059.857 1.808 1.916 1.808z"/><path fill="#F7DECE" d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zM15 21c0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.609.549-1 1.336-1 2.222z"/><path fill="#F7DECE" d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.064.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E0AA94" d="M26.992 19.016c-.255-.255-.553-.47-.875-.636l-.4-1.356-8.012-.056-.307 1.091c-.467.095-1.041.389-1.393.718l-3.611-3.954c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.166.016 2.188 9.984 10.729s10.518-15.288 10.543-15.258c-.127-.224-.511-.703-.556-.725z"/><g fill="#F7DECE"><path d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270c-1f3fc.svg b/public/emoji/270c-1f3fc.svg index 4dcf98164..d748f2094 100644 --- a/public/emoji/270c-1f3fc.svg +++ b/public/emoji/270c-1f3fc.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C68F6A" d="M8.916 23.891s1.737.109 1.94-1.808l.016-4.161.128-.005v-.96c0-.952.572-1.769 1.389-2.133-.242.331-.283 7.176-.283 7.176 0 1.104.789 1.891 1.894 1.891.755 0 1.265-.314 1.606-.932-.458-.526-.734-1.206-.734-1.959 0-1.312.781-2.141 1.128-2.222 0 0 .056-.07.082-.084.368-.306.804-.535 1.291-.634l.02.001.261-.155h6.928c1.306 0 1.558.486 1.538.475l.02.011c.591.305 1.076.773 1.404 1.35-.025-.031-.681-.633-1.543-.633s-8-.047-8-.047c-1.104 0-1.925.833-1.925 1.938s.82 1.922 1.925 1.922l5.5-.016c.276 0 .591.317.591.594 0 .276-.314.578-.591.578 0 0-1.558-.069-2.847 1.25-1.209 1.238-2.078 3.803-2.078 5.672 0 .276-.299.578-.575.578s-.582-.302-.582-.578c0-3.01.941-5.525 2.75-6.891H18c-1 0-1.273-.244-1.474-.359.001.001-.701 1.359-2.526 1.359-.237 0-1.628-.047-2.487-1.266-1.125 1.422-2.575 1.266-2.575 1.266-.733 0-1.566-.328-1.91-.833C7.015 24.185 7 24.095 7 24v-1.917c0 1.059.857 1.808 1.916 1.808z"/><path fill="#F3D2A2" d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zM15 21c0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.609.549-1 1.336-1 2.222z"/><path fill="#F3D2A2" d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.064.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D2A077" d="M26.992 19.016c-.255-.255-.553-.47-.875-.636l-.4-1.356-8.012-.056-.307 1.091c-.467.095-1.041.389-1.393.718l-3.611-3.954c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.166.016 2.188 9.984 10.729s10.518-15.288 10.543-15.258c-.127-.224-.511-.703-.556-.725z"/><g fill="#F3D2A2"><path d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270c-1f3fd.svg b/public/emoji/270c-1f3fd.svg index b00e6af96..f93272ac3 100644 --- a/public/emoji/270c-1f3fd.svg +++ b/public/emoji/270c-1f3fd.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AA8052" d="M8.916 23.891s1.737.109 1.94-1.808l.016-4.161.128-.005v-.96c0-.952.572-1.769 1.389-2.133-.242.331-.283 7.176-.283 7.176 0 1.104.789 1.891 1.894 1.891.755 0 1.265-.314 1.606-.932-.458-.526-.734-1.206-.734-1.959 0-1.312.781-2.141 1.128-2.222 0 0 .056-.07.082-.084.368-.306.804-.535 1.291-.634l.02.001.261-.155h6.928c1.306 0 1.558.486 1.538.475l.02.011c.591.305 1.076.773 1.404 1.35-.025-.031-.681-.633-1.543-.633s-8-.047-8-.047c-1.104 0-1.925.833-1.925 1.938s.82 1.922 1.925 1.922l5.5-.016c.276 0 .591.317.591.594 0 .276-.314.578-.591.578 0 0-1.558-.069-2.847 1.25-1.209 1.238-2.078 3.803-2.078 5.672 0 .276-.299.578-.575.578s-.582-.302-.582-.578c0-3.01.941-5.525 2.75-6.891H18c-1 0-1.273-.244-1.474-.359.001.001-.701 1.359-2.526 1.359-.237 0-1.628-.047-2.487-1.266-1.125 1.422-2.575 1.266-2.575 1.266-.733 0-1.566-.328-1.91-.833C7.015 24.185 7 24.095 7 24v-1.917c0 1.059.857 1.808 1.916 1.808z"/><path fill="#D5AB88" d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zM15 21c0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.609.549-1 1.336-1 2.222z"/><path fill="#D5AB88" d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.064.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#B78B60" d="M26.992 19.016c-.255-.255-.553-.47-.875-.636l-.4-1.356-8.012-.056-.307 1.091c-.467.095-1.041.389-1.393.718l-3.611-3.954c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.166.016 2.188 9.984 10.729s10.518-15.288 10.543-15.258c-.127-.224-.511-.703-.556-.725z"/><g fill="#D4AB88"><path d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270c-1f3fe.svg b/public/emoji/270c-1f3fe.svg index 2572d7264..aca5302c7 100644 --- a/public/emoji/270c-1f3fe.svg +++ b/public/emoji/270c-1f3fe.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#845636" d="M8.916 23.891s1.737.109 1.94-1.808l.016-4.161.128-.005v-.96c0-.952.572-1.769 1.389-2.133-.242.331-.283 7.176-.283 7.176 0 1.104.789 1.891 1.894 1.891.755 0 1.265-.314 1.606-.932-.458-.526-.734-1.206-.734-1.959 0-1.312.781-2.141 1.128-2.222 0 0 .056-.07.082-.084.368-.306.804-.535 1.291-.634l.02.001.261-.155h6.928c1.306 0 1.558.486 1.538.475l.02.011c.591.305 1.076.773 1.404 1.35-.025-.031-.681-.633-1.543-.633s-8-.047-8-.047c-1.104 0-1.925.833-1.925 1.938s.82 1.922 1.925 1.922l5.5-.016c.276 0 .591.317.591.594 0 .276-.314.578-.591.578 0 0-1.558-.069-2.847 1.25-1.209 1.238-2.078 3.803-2.078 5.672 0 .276-.299.578-.575.578s-.582-.302-.582-.578c0-3.01.941-5.525 2.75-6.891H18c-1 0-1.273-.244-1.474-.359.001.001-.701 1.359-2.526 1.359-.237 0-1.628-.047-2.487-1.266-1.125 1.422-2.575 1.266-2.575 1.266-.733 0-1.566-.328-1.91-.833C7.015 24.185 7 24.095 7 24v-1.917c0 1.059.857 1.808 1.916 1.808z"/><path fill="#AF7E57" d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zM15 21c0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.609.549-1 1.336-1 2.222z"/><path fill="#AF7E57" d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.064.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#90603E" d="M26.992 19.016c-.255-.255-.553-.47-.875-.636l-.4-1.356-8.012-.056-.307 1.091c-.467.095-1.041.389-1.393.718l-3.611-3.954c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.166.016 2.188 9.984 10.729s10.518-15.288 10.543-15.258c-.127-.224-.511-.703-.556-.725z"/><g fill="#AF7E57"><path d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270c-1f3ff.svg b/public/emoji/270c-1f3ff.svg index 82b6bdb6a..3fa974296 100644 --- a/public/emoji/270c-1f3ff.svg +++ b/public/emoji/270c-1f3ff.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#543226" d="M8.916 23.891s1.737.109 1.94-1.808l.016-4.161.128-.005v-.96c0-.952.572-1.769 1.389-2.133-.242.331-.283 7.176-.283 7.176 0 1.104.789 1.891 1.894 1.891.755 0 1.265-.314 1.606-.932-.458-.526-.734-1.206-.734-1.959 0-1.312.781-2.141 1.128-2.222 0 0 .056-.07.082-.084.368-.306.804-.535 1.291-.634l.02.001.261-.155h6.928c1.306 0 1.558.486 1.538.475l.02.011c.591.305 1.076.773 1.404 1.35-.025-.031-.681-.633-1.543-.633s-8-.047-8-.047c-1.104 0-1.925.833-1.925 1.938s.82 1.922 1.925 1.922l5.5-.016c.276 0 .591.317.591.594 0 .276-.314.578-.591.578 0 0-1.558-.069-2.847 1.25-1.209 1.238-2.078 3.803-2.078 5.672 0 .276-.299.578-.575.578s-.582-.302-.582-.578c0-3.01.941-5.525 2.75-6.891H18c-1 0-1.273-.244-1.474-.359.001.001-.701 1.359-2.526 1.359-.237 0-1.628-.047-2.487-1.266-1.125 1.422-2.575 1.266-2.575 1.266-.733 0-1.566-.328-1.91-.833C7.015 24.185 7 24.095 7 24v-1.917c0 1.059.857 1.808 1.916 1.808z"/><path fill="#7C533E" d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zM15 21c0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.609.549-1 1.336-1 2.222z"/><path fill="#7C533E" d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.064.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#583529" d="M26.992 19.016c-.255-.255-.553-.47-.875-.636l-.4-1.356-8.012-.056-.307 1.091c-.467.095-1.041.389-1.393.718l-3.611-3.954c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.166.016 2.188 9.984 10.729s10.518-15.288 10.543-15.258c-.127-.224-.511-.703-.556-.725z"/><g fill="#7C533E"><path d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/270c.svg b/public/emoji/270c.svg index 552410bef..730545f57 100644 --- a/public/emoji/270c.svg +++ b/public/emoji/270c.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M8.916 23.891s1.737.109 1.94-1.808l.016-4.161.128-.005v-.96c0-.952.572-1.769 1.389-2.133-.242.331-.283 7.176-.283 7.176 0 1.104.789 1.891 1.894 1.891.755 0 1.265-.314 1.606-.932-.458-.526-.734-1.206-.734-1.959 0-1.312.781-2.141 1.128-2.222 0 0 .056-.07.082-.084.368-.306.804-.535 1.291-.634l.02.001.261-.155h6.928c1.306 0 1.558.486 1.538.475l.02.011c.591.305 1.076.773 1.404 1.35-.025-.031-.681-.633-1.543-.633s-8-.047-8-.047c-1.104 0-1.925.833-1.925 1.938s.82 1.922 1.925 1.922l5.5-.016c.276 0 .591.317.591.594 0 .276-.314.578-.591.578 0 0-1.558-.069-2.847 1.25-1.209 1.238-2.078 3.803-2.078 5.672 0 .276-.299.578-.575.578s-.582-.302-.582-.578c0-3.01.941-5.525 2.75-6.891H18c-1 0-1.273-.244-1.474-.359.001.001-.701 1.359-2.526 1.359-.237 0-1.628-.047-2.487-1.266-1.125 1.422-2.575 1.266-2.575 1.266-.733 0-1.566-.328-1.91-.833C7.015 24.185 7 24.095 7 24v-1.917c0 1.059.857 1.808 1.916 1.808z"/><path fill="#FFDC5D" d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zM15 21c0 .753.287 1.433.745 1.959C15.404 23.576 14.755 24 14 24c-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.609.549-1 1.336-1 2.222z"/><path fill="#FFDC5D" d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497.049.046.102.085.155.128.119.099.243.189.377.269.066.039.132.074.201.108.14.069.285.125.435.172.067.021.131.046.2.062.223.052.452.086.689.086.236 0 .461-.036.681-.089.076-.018.148-.042.223-.066.137-.044.269-.099.396-.161.082-.04.163-.076.24-.124.164-.1.318-.213.46-.341.202-.184.384-.387.53-.618l-.003-.003c.2.115.473.402 1.473.402h2.537c-1.809 1.365-3.037 3.99-3.037 7 0 .276.224.5.5.5s.5-.224.5-.5c0-3.859 2.187-7 4.875-7h.125c.276 0 .5-.224.5-.5s-.224-.5-.5-.5H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.032 0 .062.008.094.01.073.003.145.01.216.022.062.01.122.021.182.037.064.017.125.035.187.058.062.022.122.047.181.075.057.027.111.058.165.09.056.033.109.067.161.107.052.038.102.08.15.124.046.041.09.084.132.13.027.029.051.06.075.091l.052.063c.038.051.073.102.106.156.034.056.064.112.093.171.03.062.056.125.08.19.012.031.029.06.039.093L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EF9645" d="M26.992 19.016c-.255-.255-.553-.47-.875-.636l-.4-1.356-8.012-.056-.307 1.091c-.467.095-1.041.389-1.393.718l-3.611-3.954c-.817.364-1.389 1.18-1.389 2.133v.96l-4 4.166.016 2.188 9.984 10.729s10.518-15.288 10.543-15.258c-.127-.224-.511-.703-.556-.725z"/><g fill="#FFDC5D"><path d="M24.581 18H18c-.208 0-.411.021-.607.061l-.073-.278-3.273-12.464s-.416-1.957 1.54-2.372c1.956-.416 2.372 1.54 2.372 1.54l3.097 11.569c.446.024.878.063 1.305.107l2.061-10.512s.188-1.991 2.18-1.804c1.991.188 1.803 2.179 1.803 2.179L26.34 17.187l-.221 1.194c-.464-.235-.982-.381-1.538-.381zM8.916 16h.168c1.059 0 1.916.858 1.916 1.917v4.166C11 23.142 10.143 24 9.084 24h-.168C7.857 24 7 23.142 7 22.083v-4.166C7 16.858 7.857 16 8.916 16zm6.918 2.96l-.056.062C15.304 19.551 15 20.233 15 21c0 .063.013.123.018.185.044.678.308 1.292.728 1.774-.071.129-.163.243-.259.353-.366.417-.89.688-1.487.688-1.104 0-2-.896-2-2v-6c0-.441.147-.845.389-1.176.364-.497.947-.824 1.611-.824 1.104 0 2 .896 2 2v2.778c-.061.055-.109.123-.166.182z"/><path d="M9.062 25c1.024 0 1.925-.526 2.45-1.322.123.183.271.346.431.497 1.185 1.115 3.034 1.044 4.167-.086.152-.152.303-.305.419-.488l-.003-.003C16.727 23.713 17 24 18 24h2.537c-.37.279-.708.623-1.024 1-1.228 1.467-2.013 3.606-2.013 6 0 .276.224.5.5.5s.5-.224.5-.5c0-2.548.956-4.775 2.377-6 .732-.631 1.584-1 2.498-1 .713.079.847-1 .125-1H18c-1.104 0-2-.896-2-2s.896-2 2-2h8c.858 0 1.66.596 1.913 1.415L29 24c.103.335.479 1.871.411 2.191C29.411 31 24.715 36 19 36c-6.537 0-11.844-5.231-11.986-11.734l.014.01c.515.445 1.176.724 1.91.724h.124z"/></g></svg> \ No newline at end of file diff --git a/public/emoji/2712.svg b/public/emoji/2712.svg index 478ac14c6..8eaec690e 100644 --- a/public/emoji/2712.svg +++ b/public/emoji/2712.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M31.986 32.729c-.292.167-.626.271-.987.271-1.104 0-2-.896-2-2s.896-2 2-2 2 .896 2 2c0 .361-.104.695-.271.987l3.146 3.146L34.999 28l-9-7-5 5 7 9 7.134.876-3.147-3.147z"/><path fill="#66757F" d="M13.643 5.308c1.151 1.151 1.151 3.016 0 4.167l-4.167 4.168c-1.151 1.15-3.018 1.15-4.167 0L1.141 9.475c-1.15-1.151-1.15-3.016 0-4.167l4.167-4.167c1.15-1.151 3.016-1.151 4.167 0l4.168 4.167z"/><path fill="#292F33" d="M26.643 18.309L9.44 1.105 1.107 9.44l17.202 17.202c1.15 1.15 3.016 1.15 4.168 0l4.166-4.168c1.15-1.15 1.15-3.015 0-4.165z"/><path fill="#66757F" d="M8.225 16.56l8.334-8.335 2.124 2.125-8.333 8.334z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M31.986 32.729c-.292.167-.626.271-.987.271-1.104 0-2-.896-2-2s.896-2 2-2 2 .896 2 2c0 .361-.104.695-.271.987l3.146 3.146L34.999 28l-9-7-5 5 7 9 7.134.876-3.147-3.147z"/><path fill="#66757F" d="M13.643 5.308c1.151 1.151 1.151 3.016 0 4.167l-4.167 4.168c-1.151 1.15-3.018 1.15-4.167 0L1.141 9.475c-1.15-1.151-1.15-3.016 0-4.167l4.167-4.167c1.15-1.151 3.016-1.151 4.167 0l4.168 4.167z"/><path fill="#31373D" d="M26.643 18.309L9.44 1.105 1.107 9.44l17.202 17.202c1.15 1.15 3.016 1.15 4.168 0l4.166-4.168c1.15-1.15 1.15-3.015 0-4.165z"/><path fill="#66757F" d="M8.225 16.56l8.334-8.335 2.124 2.125-8.333 8.334z"/></svg> \ No newline at end of file diff --git a/public/emoji/2714.svg b/public/emoji/2714.svg index c50efc0bb..17972389e 100644 --- a/public/emoji/2714.svg +++ b/public/emoji/2714.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M34.459 1.375c-1.391-.902-3.248-.506-4.149.884L13.5 28.17l-8.198-7.58c-1.217-1.125-3.114-1.051-4.239.166-1.125 1.216-1.051 3.115.166 4.239l10.764 9.952s.309.266.452.359c.504.328 1.07.484 1.63.484.982 0 1.945-.482 2.52-1.368L35.343 5.524c.902-1.39.506-3.248-.884-4.149z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M34.459 1.375c-1.391-.902-3.248-.506-4.149.884L13.5 28.17l-8.198-7.58c-1.217-1.125-3.114-1.051-4.239.166-1.125 1.216-1.051 3.115.166 4.239l10.764 9.952s.309.266.452.359c.504.328 1.07.484 1.63.484.982 0 1.945-.482 2.52-1.368L35.343 5.524c.902-1.39.506-3.248-.884-4.149z"/></svg> \ No newline at end of file diff --git a/public/emoji/2716.svg b/public/emoji/2716.svg index 57b136e3a..d10237301 100644 --- a/public/emoji/2716.svg +++ b/public/emoji/2716.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M22.238 18.004l9.883-9.883c1.172-1.171 1.172-3.071 0-4.243-1.172-1.171-3.07-1.171-4.242 0l-9.883 9.883-9.883-9.882c-1.171-1.172-3.071-1.172-4.243 0-1.171 1.171-1.171 3.071 0 4.243l9.883 9.882-9.907 9.907c-1.171 1.171-1.171 3.071 0 4.242.585.586 1.354.879 2.121.879s1.536-.293 2.122-.879l9.906-9.906 9.882 9.882c.586.586 1.354.879 2.121.879s1.535-.293 2.121-.879c1.172-1.171 1.172-3.071 0-4.242l-9.881-9.883z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M22.238 18.004l9.883-9.883c1.172-1.171 1.172-3.071 0-4.243-1.172-1.171-3.07-1.171-4.242 0l-9.883 9.883-9.883-9.882c-1.171-1.172-3.071-1.172-4.243 0-1.171 1.171-1.171 3.071 0 4.243l9.883 9.882-9.907 9.907c-1.171 1.171-1.171 3.071 0 4.242.585.586 1.354.879 2.121.879s1.536-.293 2.122-.879l9.906-9.906 9.882 9.882c.586.586 1.354.879 2.121.879s1.535-.293 2.121-.879c1.172-1.171 1.172-3.071 0-4.242l-9.881-9.883z"/></svg> \ No newline at end of file diff --git a/public/emoji/2734.svg b/public/emoji/2734.svg index 0b92b0987..17ed81987 100644 --- a/public/emoji/2734.svg +++ b/public/emoji/2734.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M13.574 11.235c1.335.971 2.631.43 2.882-1.201l1.088-7.069c.251-1.631.661-1.631.912 0l1.088 7.069c.251 1.631 1.548 2.171 2.882 1.201l6.148-4.471c1.334-.971 1.632-.673.661.662l-4.471 6.147c-.971 1.335-.431 2.631 1.2 2.882l7.07 1.088c1.631.251 1.631.661 0 .912l-7.07 1.088c-1.631.251-2.171 1.548-1.2 2.882l4.471 6.148c.971 1.334.673 1.632-.661.661l-6.148-4.471c-1.334-.971-2.631-.431-2.882 1.2l-1.088 7.07c-.251 1.631-.661 1.631-.912 0l-1.088-7.07c-.251-1.631-1.548-2.171-2.882-1.2l-6.147 4.471c-1.334.971-1.581.713-.546-.573l5.085-6.324c1.034-1.286.542-2.523-1.092-2.748l-8.057-1.113c-1.634-.226-1.638-.62-.008-.876l7.228-1.135c1.63-.256 2.17-1.558 1.199-2.892L6.765 7.426c-.971-1.334-.673-1.632.661-.661l6.148 4.47z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M13.574 11.235c1.335.971 2.631.43 2.882-1.201l1.088-7.069c.251-1.631.661-1.631.912 0l1.088 7.069c.251 1.631 1.548 2.171 2.882 1.201l6.148-4.471c1.334-.971 1.632-.673.661.662l-4.471 6.147c-.971 1.335-.431 2.631 1.2 2.882l7.07 1.088c1.631.251 1.631.661 0 .912l-7.07 1.088c-1.631.251-2.171 1.548-1.2 2.882l4.471 6.148c.971 1.334.673 1.632-.661.661l-6.148-4.471c-1.334-.971-2.631-.431-2.882 1.2l-1.088 7.07c-.251 1.631-.661 1.631-.912 0l-1.088-7.07c-.251-1.631-1.548-2.171-2.882-1.2l-6.147 4.471c-1.334.971-1.581.713-.546-.573l5.085-6.324c1.034-1.286.542-2.523-1.092-2.748l-8.057-1.113c-1.634-.226-1.638-.62-.008-.876l7.228-1.135c1.63-.256 2.17-1.558 1.199-2.892L6.765 7.426c-.971-1.334-.673-1.632.661-.661l6.148 4.47z"/></svg> \ No newline at end of file diff --git a/public/emoji/2763.svg b/public/emoji/2763.svg index ba8ab02d2..b78e87834 100644 --- a/public/emoji/2763.svg +++ b/public/emoji/2763.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M18 4C14.875-2.375 6-.731 6 7c0 7.062 12 17 12 17s12-9.938 12-17c0-7.731-8.875-9.375-12-3z"/><circle fill="#BE1931" cx="18" cy="31" r="5"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M18 4C14.875-2.375 6-.731 6 7c0 7.062 12 17 12 17s12-9.938 12-17c0-7.731-8.875-9.375-12-3z"/><circle fill="#DD2E44" cx="18" cy="31" r="5"/></svg> \ No newline at end of file diff --git a/public/emoji/2764.svg b/public/emoji/2764.svg index d8577c65e..7eb5c5913 100644 --- a/public/emoji/2764.svg +++ b/public/emoji/2764.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.783-2.466 16.249-11.447 17.617-19.959.17-.721.268-1.469.268-2.242z"/></svg> \ No newline at end of file diff --git a/public/emoji/2795.svg b/public/emoji/2795.svg index 9f4535385..5d55ec2d5 100644 --- a/public/emoji/2795.svg +++ b/public/emoji/2795.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M31 15H21V5c0-1.657-1.343-3-3-3s-3 1.343-3 3v10H5c-1.657 0-3 1.343-3 3s1.343 3 3 3h10v10c0 1.657 1.343 3 3 3s3-1.343 3-3V21h10c1.657 0 3-1.343 3-3s-1.343-3-3-3z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M31 15H21V5c0-1.657-1.343-3-3-3s-3 1.343-3 3v10H5c-1.657 0-3 1.343-3 3s1.343 3 3 3h10v10c0 1.657 1.343 3 3 3s3-1.343 3-3V21h10c1.657 0 3-1.343 3-3s-1.343-3-3-3z"/></svg> \ No newline at end of file diff --git a/public/emoji/2796.svg b/public/emoji/2796.svg index a1f2581a0..589c0127c 100644 --- a/public/emoji/2796.svg +++ b/public/emoji/2796.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M34 18c0 1.657-1.343 3-3 3H5c-1.657 0-3-1.343-3-3s1.343-3 3-3h26c1.657 0 3 1.343 3 3z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M34 18c0 1.657-1.343 3-3 3H5c-1.657 0-3-1.343-3-3s1.343-3 3-3h26c1.657 0 3 1.343 3 3z"/></svg> \ No newline at end of file diff --git a/public/emoji/2797.svg b/public/emoji/2797.svg index cc7982d39..6b8a7c173 100644 --- a/public/emoji/2797.svg +++ b/public/emoji/2797.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M34 18c0 1.657-1.343 3-3 3H5c-1.657 0-3-1.343-3-3s1.343-3 3-3h26c1.657 0 3 1.343 3 3z"/><circle fill="#292F33" cx="18" cy="7" r="4"/><circle fill="#292F33" cx="18" cy="29" r="4"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M34 18c0 1.657-1.343 3-3 3H5c-1.657 0-3-1.343-3-3s1.343-3 3-3h26c1.657 0 3 1.343 3 3z"/><circle fill="#31373D" cx="18" cy="7" r="4"/><circle fill="#31373D" cx="18" cy="29" r="4"/></svg> \ No newline at end of file diff --git a/public/emoji/27b0.svg b/public/emoji/27b0.svg index 8fafa684d..33abaa91f 100644 --- a/public/emoji/27b0.svg +++ b/public/emoji/27b0.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18 32.625c-5.09 0-10.5-3.965-10.5-11.312 0-4.877 3.365-9.178 7.591-12.272C12.393 7.739 9.756 7 8 7c-2.708 0-5.499.914-5.527.923-.79.258-1.635-.165-1.896-.951-.261-.785.163-1.633.949-1.895C1.658 5.033 4.793 4 8 4c2.695 0 6.449 1.158 10.01 3.162C21.565 5.158 25.31 4 28 4c3.207 0 6.222 1.559 6.344 1.625.781.422 1.312.699 1.125 1.266-.182.551-.891.328-1.75.234-.029-.003-2.156-.391-5.688-.391-1.752 0-4.41 1.003-7.1 2.304 4.215 3.083 7.568 7.36 7.568 12.212C28.5 28.639 23.09 32.625 18 32.625zm.013-21.954c-4.03 2.585-7.513 6.345-7.513 10.642 0 6.056 4.6 8.312 7.5 8.312 2.899 0 7.5-2.273 7.5-8.375 0-4.27-3.468-8.005-7.487-10.579z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M18 32.625c-5.09 0-10.5-3.965-10.5-11.312 0-4.877 3.365-9.178 7.591-12.272C12.393 7.739 9.756 7 8 7c-2.708 0-5.499.914-5.527.923-.79.258-1.635-.165-1.896-.951-.261-.785.163-1.633.949-1.895C1.658 5.033 4.793 4 8 4c2.695 0 6.449 1.158 10.01 3.162C21.565 5.158 25.31 4 28 4c3.207 0 6.222 1.559 6.344 1.625.781.422 1.312.699 1.125 1.266-.182.551-.891.328-1.75.234-.029-.003-2.156-.391-5.688-.391-1.752 0-4.41 1.003-7.1 2.304 4.215 3.083 7.568 7.36 7.568 12.212C28.5 28.639 23.09 32.625 18 32.625zm.013-21.954c-4.03 2.585-7.513 6.345-7.513 10.642 0 6.056 4.6 8.312 7.5 8.312 2.899 0 7.5-2.273 7.5-8.375 0-4.27-3.468-8.005-7.487-10.579z"/></svg> \ No newline at end of file diff --git a/public/emoji/2b1b.svg b/public/emoji/2b1b.svg index 9c4b877cc..42b60e341 100644 --- a/public/emoji/2b1b.svg +++ b/public/emoji/2b1b.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M36 32c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4V4c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v28z"/></svg> \ No newline at end of file diff --git a/public/emoji/a9.svg b/public/emoji/a9.svg index 1cdc43a0a..afe4fedd6 100644 --- a/public/emoji/a9.svg +++ b/public/emoji/a9.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18 0C8.059 0 0 8.06 0 18c0 9.941 8.059 18 18 18s18-8.059 18-18c0-9.94-8.059-18-18-18zm0 34C9.164 34 2 26.837 2 18 2 9.164 9.164 2 18 2c8.837 0 16 7.164 16 16 0 8.837-7.163 16-16 16z"/><path fill="#292F33" d="M18.723 6.552c2.263 0 6.666.744 6.666 3.473 0 1.116-.775 2.077-1.922 2.077-1.272 0-2.139-1.085-4.744-1.085-3.845 0-5.829 3.256-5.829 7.038 0 3.689 2.015 6.852 5.829 6.852 2.605 0 3.658-1.302 4.929-1.302 1.396 0 2.047 1.395 2.047 2.107 0 2.977-4.682 3.659-6.976 3.659-6.294 0-10.666-4.992-10.666-11.41 0-6.448 4.341-11.409 10.666-11.409z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M18 0C8.059 0 0 8.06 0 18c0 9.941 8.059 18 18 18s18-8.059 18-18c0-9.94-8.059-18-18-18zm0 34C9.164 34 2 26.837 2 18 2 9.164 9.164 2 18 2c8.837 0 16 7.164 16 16 0 8.837-7.163 16-16 16z"/><path fill="#31373D" d="M18.723 6.552c2.263 0 6.666.744 6.666 3.473 0 1.116-.775 2.077-1.922 2.077-1.272 0-2.139-1.085-4.744-1.085-3.845 0-5.829 3.256-5.829 7.038 0 3.689 2.015 6.852 5.829 6.852 2.605 0 3.658-1.302 4.929-1.302 1.396 0 2.047 1.395 2.047 2.107 0 2.977-4.682 3.659-6.976 3.659-6.294 0-10.666-4.992-10.666-11.41 0-6.448 4.341-11.409 10.666-11.409z"/></svg> \ No newline at end of file diff --git a/public/emoji/ae.svg b/public/emoji/ae.svg index a41b2a210..bd51781e2 100644 --- a/public/emoji/ae.svg +++ b/public/emoji/ae.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M18 0C8.059 0 0 8.06 0 18c0 9.941 8.059 18 18 18s18-8.059 18-18c0-9.94-8.059-18-18-18zm0 34C9.164 34 2 26.837 2 18 2 9.164 9.164 2 18 2c8.837 0 16 7.164 16 16 0 8.837-7.163 16-16 16z"/><path fill="#292F33" d="M10.777 9.342c0-1.488.837-2.418 2.388-2.418h5.457c4.775 0 7.72 2.14 7.72 7.007 0 3.411-2.573 5.364-5.736 5.86l5.272 5.644c.433.465.619.93.619 1.364 0 1.209-.961 2.387-2.324 2.387-.559 0-1.303-.217-1.799-.806l-6.883-8.341h-.062v6.728c0 1.551-.992 2.418-2.326 2.418s-2.326-.867-2.326-2.418V9.342zm4.651 7.348h3.193c1.705 0 2.884-1.023 2.884-2.759 0-1.767-1.18-2.729-2.884-2.729h-3.193v5.488z"/></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M18 0C8.059 0 0 8.06 0 18c0 9.941 8.059 18 18 18s18-8.059 18-18c0-9.94-8.059-18-18-18zm0 34C9.164 34 2 26.837 2 18 2 9.164 9.164 2 18 2c8.837 0 16 7.164 16 16 0 8.837-7.163 16-16 16z"/><path fill="#31373D" d="M10.777 9.342c0-1.488.837-2.418 2.388-2.418h5.457c4.775 0 7.72 2.14 7.72 7.007 0 3.411-2.573 5.364-5.736 5.86l5.272 5.644c.433.465.619.93.619 1.364 0 1.209-.961 2.387-2.324 2.387-.559 0-1.303-.217-1.799-.806l-6.883-8.341h-.062v6.728c0 1.551-.992 2.418-2.326 2.418s-2.326-.867-2.326-2.418V9.342zm4.651 7.348h3.193c1.705 0 2.884-1.023 2.884-2.759 0-1.767-1.18-2.729-2.884-2.729h-3.193v5.488z"/></svg> \ No newline at end of file diff --git a/public/ocr/lang-data/eng.traineddata.gz b/public/ocr/lang-data/eng.traineddata.gz new file mode 100644 index 000000000..e83c12676 --- /dev/null +++ b/public/ocr/lang-data/eng.traineddata.gz Binary files differdiff --git a/scalingo.json b/scalingo.json index dd8fb5530..324356df0 100644 --- a/scalingo.json +++ b/scalingo.json @@ -8,15 +8,6 @@ "description": "The domain that your Mastodon instance will run on (this can be appname.scalingo.io or a custom domain)", "required": true }, - "LOCAL_HTTPS": { - "description": "Will your domain support HTTPS? (Automatic for *.scalingo.io, requires manual configuration for custom domains)", - "value": "true", - "required": true - }, - "PAPERCLIP_SECRET": { - "description": "The secret key for storing media files", - "generator": "secret" - }, "SECRET_KEY_BASE": { "description": "The secret key base", "generator": "secret" diff --git a/spec/controllers/accounts_controller_spec.rb b/spec/controllers/accounts_controller_spec.rb index b728d719f..3d2a0665d 100644 --- a/spec/controllers/accounts_controller_spec.rb +++ b/spec/controllers/accounts_controller_spec.rb @@ -48,37 +48,6 @@ RSpec.describe AccountsController, type: :controller do end end - context 'atom' do - let(:format) { 'atom' } - let(:content_type) { 'application/atom+xml' } - - shared_examples 'responsed streams' do - it 'assigns @entries' do - entries = assigns(:entries).to_a - expect(entries.size).to eq expected_statuses.size - entries.each.zip(expected_statuses.each) do |entry, expected_status| - expect(entry.status).to eq expected_status - end - end - end - - include_examples 'responses' - - context 'without max_id nor since_id' do - let(:expected_statuses) { [status7, status6, status5, status4, status3, status2, status1] } - - include_examples 'responsed streams' - end - - context 'with max_id and since_id' do - let(:max_id) { status4.stream_entry.id } - let(:since_id) { status1.stream_entry.id } - let(:expected_statuses) { [status3, status2] } - - include_examples 'responsed streams' - end - end - context 'activitystreams2' do let(:format) { 'json' } let(:content_type) { 'application/activity+json' } diff --git a/spec/controllers/activitypub/inboxes_controller_spec.rb b/spec/controllers/activitypub/inboxes_controller_spec.rb index eab4b8c3e..a9ee75490 100644 --- a/spec/controllers/activitypub/inboxes_controller_spec.rb +++ b/spec/controllers/activitypub/inboxes_controller_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' RSpec.describe ActivityPub::InboxesController, type: :controller do describe 'POST #create' do - context 'if signed_request_account' do + context 'with signed_request_account' do it 'returns 202' do allow(controller).to receive(:signed_request_account) do Fabricate(:account) @@ -15,7 +15,7 @@ RSpec.describe ActivityPub::InboxesController, type: :controller do end end - context 'not signed_request_account' do + context 'without signed_request_account' do it 'returns 401' do allow(controller).to receive(:signed_request_account) do false diff --git a/spec/controllers/admin/accounts_controller_spec.rb b/spec/controllers/admin/accounts_controller_spec.rb index a348ab3d7..608606ff9 100644 --- a/spec/controllers/admin/accounts_controller_spec.rb +++ b/spec/controllers/admin/accounts_controller_spec.rb @@ -75,44 +75,6 @@ RSpec.describe Admin::AccountsController, type: :controller do end end - describe 'POST #subscribe' do - subject { post :subscribe, params: { id: account.id } } - - let(:current_user) { Fabricate(:user, admin: admin) } - let(:account) { Fabricate(:account) } - - context 'when user is admin' do - let(:admin) { true } - - it { is_expected.to redirect_to admin_account_path(account.id) } - end - - context 'when user is not admin' do - let(:admin) { false } - - it { is_expected.to have_http_status :forbidden } - end - end - - describe 'POST #unsubscribe' do - subject { post :unsubscribe, params: { id: account.id } } - - let(:current_user) { Fabricate(:user, admin: admin) } - let(:account) { Fabricate(:account) } - - context 'when user is admin' do - let(:admin) { true } - - it { is_expected.to redirect_to admin_account_path(account.id) } - end - - context 'when user is not admin' do - let(:admin) { false } - - it { is_expected.to have_http_status :forbidden } - end - end - describe 'POST #memorialize' do subject { post :memorialize, params: { id: account.id } } diff --git a/spec/controllers/admin/custom_emojis_controller_spec.rb b/spec/controllers/admin/custom_emojis_controller_spec.rb index b7e2894e9..a8d96948c 100644 --- a/spec/controllers/admin/custom_emojis_controller_spec.rb +++ b/spec/controllers/admin/custom_emojis_controller_spec.rb @@ -52,64 +52,4 @@ describe Admin::CustomEmojisController do end end end - - describe 'PUT #update' do - let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test') } - let(:image) { fixture_file_upload(Rails.root.join('spec', 'fixtures', 'files', 'emojo.png'), 'image/png') } - - before do - put :update, params: { id: custom_emoji.id, custom_emoji: params } - end - - context 'when parameter is valid' do - let(:params) { { shortcode: 'updated', image: image } } - - it 'succeeds in updating custom emoji' do - expect(flash[:notice]).to eq I18n.t('admin.custom_emojis.updated_msg') - expect(custom_emoji.reload).to have_attributes(shortcode: 'updated') - end - end - - context 'when parameter is invalid' do - let(:params) { { shortcode: 'u', image: image } } - - it 'fails to update custom emoji' do - expect(flash[:alert]).to eq I18n.t('admin.custom_emojis.update_failed_msg') - expect(custom_emoji.reload).to have_attributes(shortcode: 'test') - end - end - end - - describe 'POST #copy' do - subject { post :copy, params: { id: custom_emoji.id } } - - let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test') } - - it 'copies custom emoji' do - expect { subject }.to change { CustomEmoji.where(shortcode: 'test').count }.by(1) - expect(flash[:notice]).to eq I18n.t('admin.custom_emojis.copied_msg') - end - end - - describe 'POST #enable' do - let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test', disabled: true) } - - before { post :enable, params: { id: custom_emoji.id } } - - it 'enables custom emoji' do - expect(response).to redirect_to admin_custom_emojis_path - expect(custom_emoji.reload).to have_attributes(disabled: false) - end - end - - describe 'POST #disable' do - let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test', disabled: false) } - - before { post :disable, params: { id: custom_emoji.id } } - - it 'enables custom emoji' do - expect(response).to redirect_to admin_custom_emojis_path - expect(custom_emoji.reload).to have_attributes(disabled: true) - end - end end diff --git a/spec/controllers/admin/reported_statuses_controller_spec.rb b/spec/controllers/admin/reported_statuses_controller_spec.rb index c358506d6..2a1598123 100644 --- a/spec/controllers/admin/reported_statuses_controller_spec.rb +++ b/spec/controllers/admin/reported_statuses_controller_spec.rb @@ -47,7 +47,7 @@ describe Admin::ReportedStatusesController do it 'removes a status' do allow(RemovalWorker).to receive(:perform_async) subject.call - expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first) + expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first, immediate: true) end end diff --git a/spec/controllers/admin/statuses_controller_spec.rb b/spec/controllers/admin/statuses_controller_spec.rb index 1a08c10b7..d9690d83f 100644 --- a/spec/controllers/admin/statuses_controller_spec.rb +++ b/spec/controllers/admin/statuses_controller_spec.rb @@ -65,7 +65,7 @@ describe Admin::StatusesController do it 'removes a status' do allow(RemovalWorker).to receive(:perform_async) subject.call - expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first) + expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first, immediate: true) end end diff --git a/spec/controllers/admin/subscriptions_controller_spec.rb b/spec/controllers/admin/subscriptions_controller_spec.rb deleted file mode 100644 index 967152abe..000000000 --- a/spec/controllers/admin/subscriptions_controller_spec.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true -require 'rails_helper' - -RSpec.describe Admin::SubscriptionsController, type: :controller do - render_views - - describe 'GET #index' do - around do |example| - default_per_page = Subscription.default_per_page - Subscription.paginates_per 1 - example.run - Subscription.paginates_per default_per_page - end - - before do - sign_in Fabricate(:user, admin: true), scope: :user - end - - it 'renders subscriptions' do - Fabricate(:subscription) - specified = Fabricate(:subscription) - - get :index - - subscriptions = assigns(:subscriptions) - expect(subscriptions.count).to eq 1 - expect(subscriptions[0]).to eq specified - - expect(response).to have_http_status(200) - end - end -end diff --git a/spec/controllers/admin/tags_controller_spec.rb b/spec/controllers/admin/tags_controller_spec.rb index 3af994071..5c1944fc7 100644 --- a/spec/controllers/admin/tags_controller_spec.rb +++ b/spec/controllers/admin/tags_controller_spec.rb @@ -10,62 +10,14 @@ RSpec.describe Admin::TagsController, type: :controller do end describe 'GET #index' do - before do - account_tag_stat = Fabricate(:tag).account_tag_stat - account_tag_stat.update(hidden: hidden, accounts_count: 1) - get :index, params: { hidden: hidden } - end - - context 'with hidden tags' do - let(:hidden) { true } - - it 'returns status 200' do - expect(response).to have_http_status(200) - end - end - - context 'without hidden tags' do - let(:hidden) { false } - - it 'returns status 200' do - expect(response).to have_http_status(200) - end - end - end - - describe 'POST #hide' do - let(:tag) { Fabricate(:tag) } + let!(:tag) { Fabricate(:tag) } before do - tag.account_tag_stat.update(hidden: false) - post :hide, params: { id: tag.id } - end - - it 'hides tag' do - tag.reload - expect(tag).to be_hidden - end - - it 'redirects to admin_tags_path' do - expect(response).to redirect_to(admin_tags_path(controller.instance_variable_get(:@filter_params))) - end - end - - describe 'POST #unhide' do - let(:tag) { Fabricate(:tag) } - - before do - tag.account_tag_stat.update(hidden: true) - post :unhide, params: { id: tag.id } - end - - it 'unhides tag' do - tag.reload - expect(tag).not_to be_hidden + get :index end - it 'redirects to admin_tags_path' do - expect(response).to redirect_to(admin_tags_path(controller.instance_variable_get(:@filter_params))) + it 'returns status 200' do + expect(response).to have_http_status(200) end end end diff --git a/spec/controllers/api/base_controller_spec.rb b/spec/controllers/api/base_controller_spec.rb index 750ccc8cf..05a42d1c1 100644 --- a/spec/controllers/api/base_controller_spec.rb +++ b/spec/controllers/api/base_controller_spec.rb @@ -15,7 +15,7 @@ describe Api::BaseController do end end - describe 'Forgery protection' do + describe 'forgery protection' do before do routes.draw { post 'success' => 'api/base#success' } end @@ -27,7 +27,45 @@ describe Api::BaseController do end end - describe 'Error handling' do + describe 'non-functional accounts handling' do + let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') } + + controller do + before_action :require_user! + end + + before do + routes.draw { post 'success' => 'api/base#success' } + allow(controller).to receive(:doorkeeper_token) { token } + end + + it 'returns http forbidden for unconfirmed accounts' do + user.update(confirmed_at: nil) + post 'success' + expect(response).to have_http_status(403) + end + + it 'returns http forbidden for pending accounts' do + user.update(approved: false) + post 'success' + expect(response).to have_http_status(403) + end + + it 'returns http forbidden for disabled accounts' do + user.update(disabled: true) + post 'success' + expect(response).to have_http_status(403) + end + + it 'returns http forbidden for suspended accounts' do + user.account.suspend! + post 'success' + expect(response).to have_http_status(403) + end + end + + describe 'error handling' do ERRORS_WITH_CODES = { ActiveRecord::RecordInvalid => 422, Mastodon::ValidationError => 422, diff --git a/spec/controllers/api/oembed_controller_spec.rb b/spec/controllers/api/oembed_controller_spec.rb index 7fee15a35..b9082bde1 100644 --- a/spec/controllers/api/oembed_controller_spec.rb +++ b/spec/controllers/api/oembed_controller_spec.rb @@ -9,7 +9,7 @@ RSpec.describe Api::OEmbedController, type: :controller do describe 'GET #show' do before do request.host = Rails.configuration.x.local_domain - get :show, params: { url: account_stream_entry_url(alice, status.stream_entry) }, format: :json + get :show, params: { url: short_account_status_url(alice, status) }, format: :json end it 'returns http success' do diff --git a/spec/controllers/api/push_controller_spec.rb b/spec/controllers/api/push_controller_spec.rb deleted file mode 100644 index d769d8554..000000000 --- a/spec/controllers/api/push_controller_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -require 'rails_helper' - -RSpec.describe Api::PushController, type: :controller do - describe 'POST #update' do - context 'with hub.mode=subscribe' do - it 'creates a subscription' do - service = double(call: ['', 202]) - allow(Pubsubhubbub::SubscribeService).to receive(:new).and_return(service) - account = Fabricate(:account) - account_topic_url = "https://#{Rails.configuration.x.local_domain}/users/#{account.username}.atom" - post :update, params: { - 'hub.mode' => 'subscribe', - 'hub.topic' => account_topic_url, - 'hub.callback' => 'https://callback.host/api', - 'hub.lease_seconds' => '3600', - 'hub.secret' => 'as1234df', - } - - expect(service).to have_received(:call).with( - account, - 'https://callback.host/api', - 'as1234df', - '3600', - nil - ) - expect(response).to have_http_status(202) - end - end - - context 'with hub.mode=unsubscribe' do - it 'unsubscribes the account' do - service = double(call: ['', 202]) - allow(Pubsubhubbub::UnsubscribeService).to receive(:new).and_return(service) - account = Fabricate(:account) - account_topic_url = "https://#{Rails.configuration.x.local_domain}/users/#{account.username}.atom" - post :update, params: { - 'hub.mode' => 'unsubscribe', - 'hub.topic' => account_topic_url, - 'hub.callback' => 'https://callback.host/api', - } - - expect(service).to have_received(:call).with( - account, - 'https://callback.host/api', - ) - expect(response).to have_http_status(202) - end - end - - context 'with unknown mode' do - it 'returns an unknown mode error' do - post :update, params: { 'hub.mode' => 'fake' } - - expect(response).to have_http_status(422) - expect(response.body).to match(/Unknown mode/) - end - end - end -end diff --git a/spec/controllers/api/salmon_controller_spec.rb b/spec/controllers/api/salmon_controller_spec.rb deleted file mode 100644 index 235a29af0..000000000 --- a/spec/controllers/api/salmon_controller_spec.rb +++ /dev/null @@ -1,65 +0,0 @@ -require 'rails_helper' - -RSpec.describe Api::SalmonController, type: :controller do - render_views - - let(:account) { Fabricate(:user, account: Fabricate(:account, username: 'catsrgr8')).account } - - before do - stub_request(:get, "https://quitter.no/.well-known/host-meta").to_return(request_fixture('.host-meta.txt')) - stub_request(:get, "https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no").to_return(request_fixture('webfinger.txt')) - stub_request(:get, "https://quitter.no/api/statuses/user_timeline/7477.atom").to_return(request_fixture('feed.txt')) - stub_request(:get, "https://quitter.no/avatar/7477-300-20160211190340.png").to_return(request_fixture('avatar.txt')) - end - - describe 'POST #update' do - context 'with valid post data' do - before do - post :update, params: { id: account.id }, body: File.read(Rails.root.join('spec', 'fixtures', 'salmon', 'mention.xml')) - end - - it 'contains XML in the request body' do - expect(request.body.read).to be_a String - end - - it 'returns http success' do - expect(response).to have_http_status(202) - end - - it 'creates remote account' do - expect(Account.find_by(username: 'gargron', domain: 'quitter.no')).to_not be_nil - end - - it 'creates status' do - expect(Status.find_by(uri: 'tag:quitter.no,2016-03-20:noticeId=1276923:objectType=note')).to_not be_nil - end - - it 'creates mention for target account' do - expect(account.mentions.count).to eq 1 - end - end - - context 'with empty post data' do - before do - post :update, params: { id: account.id }, body: '' - end - - it 'returns http client error' do - expect(response).to have_http_status(400) - end - end - - context 'with invalid post data' do - before do - service = double(call: false) - allow(VerifySalmonService).to receive(:new).and_return(service) - - post :update, params: { id: account.id }, body: File.read(Rails.root.join('spec', 'fixtures', 'salmon', 'mention.xml')) - end - - it 'returns http client error' do - expect(response).to have_http_status(401) - end - end - end -end diff --git a/spec/controllers/api/subscriptions_controller_spec.rb b/spec/controllers/api/subscriptions_controller_spec.rb deleted file mode 100644 index 7a4252fe6..000000000 --- a/spec/controllers/api/subscriptions_controller_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'rails_helper' - -RSpec.describe Api::SubscriptionsController, type: :controller do - render_views - - let(:account) { Fabricate(:account, username: 'gargron', domain: 'quitter.no', remote_url: 'topic_url', secret: 'abc') } - - describe 'GET #show' do - context 'with valid subscription' do - before do - get :show, params: { :id => account.id, 'hub.topic' => 'topic_url', 'hub.challenge' => '456', 'hub.lease_seconds' => "#{86400 * 30}" } - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'echoes back the challenge' do - expect(response.body).to match '456' - end - end - - context 'with invalid subscription' do - before do - expect_any_instance_of(Account).to receive_message_chain(:subscription, :valid?).and_return(false) - get :show, params: { :id => account.id } - end - - it 'returns http success' do - expect(response).to have_http_status(404) - end - end - end - - describe 'POST #update' do - let(:feed) { File.read(Rails.root.join('spec', 'fixtures', 'push', 'feed.atom')) } - - before do - stub_request(:post, "https://quitter.no/main/push/hub").to_return(:status => 200, :body => "", :headers => {}) - stub_request(:get, "https://quitter.no/avatar/7477-300-20160211190340.png").to_return(request_fixture('avatar.txt')) - stub_request(:get, "https://quitter.no/notice/1269244").to_return(status: 404) - stub_request(:get, "https://quitter.no/notice/1265331").to_return(status: 404) - stub_request(:get, "https://community.highlandarrow.com/notice/54411").to_return(status: 404) - stub_request(:get, "https://community.highlandarrow.com/notice/53857").to_return(status: 404) - stub_request(:get, "https://community.highlandarrow.com/notice/51852").to_return(status: 404) - stub_request(:get, "https://social.umeahackerspace.se/notice/424348").to_return(status: 404) - stub_request(:get, "https://community.highlandarrow.com/notice/50467").to_return(status: 404) - stub_request(:get, "https://quitter.no/notice/1243309").to_return(status: 404) - stub_request(:get, "https://quitter.no/user/7477").to_return(status: 404) - stub_request(:any, "https://community.highlandarrow.com/user/1").to_return(status: 404) - stub_request(:any, "https://social.umeahackerspace.se/user/2").to_return(status: 404) - stub_request(:any, "https://gs.kawa-kun.com/user/2").to_return(status: 404) - stub_request(:any, "https://mastodon.social/users/Gargron").to_return(status: 404) - - request.env['HTTP_X_HUB_SIGNATURE'] = "sha1=#{OpenSSL::HMAC.hexdigest('sha1', 'abc', feed)}" - - post :update, params: { id: account.id }, body: feed - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'creates statuses for feed' do - expect(account.statuses.count).to_not eq 0 - end - end -end diff --git a/spec/controllers/api/v1/accounts/credentials_controller_spec.rb b/spec/controllers/api/v1/accounts/credentials_controller_spec.rb index e9466e4ed..4fa6fbcf4 100644 --- a/spec/controllers/api/v1/accounts/credentials_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/credentials_controller_spec.rb @@ -59,6 +59,19 @@ describe Api::V1::Accounts::CredentialsController do end end + describe 'with empty source list' do + before do + patch :update, params: { + display_name: "I'm a cat", + source: {}, + }, as: :json + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + end + describe 'with invalid data' do before do note = 'This is too long. ' diff --git a/spec/controllers/api/v1/admin/account_actions_controller_spec.rb b/spec/controllers/api/v1/admin/account_actions_controller_spec.rb new file mode 100644 index 000000000..a5a8f4bb0 --- /dev/null +++ b/spec/controllers/api/v1/admin/account_actions_controller_spec.rb @@ -0,0 +1,57 @@ +require 'rails_helper' + +RSpec.describe Api::V1::Admin::AccountActionsController, type: :controller do + render_views + + let(:role) { 'moderator' } + let(:user) { Fabricate(:user, role: role, account: Fabricate(:account, username: 'alice')) } + let(:scopes) { 'admin:read admin:write' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:account) { Fabricate(:user).account } + + before do + allow(controller).to receive(:doorkeeper_token) { token } + end + + shared_examples 'forbidden for wrong scope' do |wrong_scope| + let(:scopes) { wrong_scope } + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + shared_examples 'forbidden for wrong role' do |wrong_role| + let(:role) { wrong_role } + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + describe 'POST #create' do + before do + post :create, params: { account_id: account.id, type: 'disable' } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'performs action against account' do + expect(account.reload.user_disabled?).to be true + end + + it 'logs action' do + log_item = Admin::ActionLog.last + + expect(log_item).to_not be_nil + expect(log_item.action).to eq :disable + expect(log_item.account_id).to eq user.account_id + expect(log_item.target_id).to eq account.user.id + end + end +end diff --git a/spec/controllers/api/v1/admin/accounts_controller_spec.rb b/spec/controllers/api/v1/admin/accounts_controller_spec.rb new file mode 100644 index 000000000..f3f9946ba --- /dev/null +++ b/spec/controllers/api/v1/admin/accounts_controller_spec.rb @@ -0,0 +1,147 @@ +require 'rails_helper' + +RSpec.describe Api::V1::Admin::AccountsController, type: :controller do + render_views + + let(:role) { 'moderator' } + let(:user) { Fabricate(:user, role: role, account: Fabricate(:account, username: 'alice')) } + let(:scopes) { 'admin:read admin:write' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:account) { Fabricate(:user).account } + + before do + allow(controller).to receive(:doorkeeper_token) { token } + end + + shared_examples 'forbidden for wrong scope' do |wrong_scope| + let(:scopes) { wrong_scope } + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + shared_examples 'forbidden for wrong role' do |wrong_role| + let(:role) { wrong_role } + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + describe 'GET #index' do + before do + get :index + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + end + + describe 'GET #show' do + before do + get :show, params: { id: account.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + end + + describe 'POST #approve' do + before do + account.user.update(approved: false) + post :approve, params: { id: account.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'approves user' do + expect(account.reload.user_approved?).to be true + end + end + + describe 'POST #reject' do + before do + account.user.update(approved: false) + post :reject, params: { id: account.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'removes user' do + expect(User.where(id: account.user.id).count).to eq 0 + end + end + + describe 'POST #enable' do + before do + account.user.update(disabled: true) + post :enable, params: { id: account.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'enables user' do + expect(account.reload.user_disabled?).to be false + end + end + + describe 'POST #unsuspend' do + before do + account.touch(:suspended_at) + post :unsuspend, params: { id: account.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'unsuspends account' do + expect(account.reload.suspended?).to be false + end + end + + describe 'POST #unsilence' do + before do + account.touch(:silenced_at) + post :unsilence, params: { id: account.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'unsilences account' do + expect(account.reload.silenced?).to be false + end + end +end diff --git a/spec/controllers/api/v1/admin/reports_controller_spec.rb b/spec/controllers/api/v1/admin/reports_controller_spec.rb new file mode 100644 index 000000000..4ed3c5dc4 --- /dev/null +++ b/spec/controllers/api/v1/admin/reports_controller_spec.rb @@ -0,0 +1,109 @@ +require 'rails_helper' + +RSpec.describe Api::V1::Admin::ReportsController, type: :controller do + render_views + + let(:role) { 'moderator' } + let(:user) { Fabricate(:user, role: role, account: Fabricate(:account, username: 'alice')) } + let(:scopes) { 'admin:read admin:write' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:report) { Fabricate(:report) } + + before do + allow(controller).to receive(:doorkeeper_token) { token } + end + + shared_examples 'forbidden for wrong scope' do |wrong_scope| + let(:scopes) { wrong_scope } + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + shared_examples 'forbidden for wrong role' do |wrong_role| + let(:role) { wrong_role } + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end + + describe 'GET #index' do + before do + get :index + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + end + + describe 'GET #show' do + before do + get :show, params: { id: report.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + end + + describe 'POST #resolve' do + before do + post :resolve, params: { id: report.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + end + + describe 'POST #reopen' do + before do + post :reopen, params: { id: report.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + end + + describe 'POST #assign_to_self' do + before do + post :assign_to_self, params: { id: report.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + end + + describe 'POST #unassign' do + before do + post :unassign, params: { id: report.id } + end + + it_behaves_like 'forbidden for wrong scope', 'write:statuses' + it_behaves_like 'forbidden for wrong role', 'user' + + it 'returns http success' do + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/controllers/api/v1/bookmarks_controller_spec.rb b/spec/controllers/api/v1/bookmarks_controller_spec.rb index 79601b6e6..d7c5847b0 100644 --- a/spec/controllers/api/v1/bookmarks_controller_spec.rb +++ b/spec/controllers/api/v1/bookmarks_controller_spec.rb @@ -64,7 +64,7 @@ RSpec.describe Api::V1::BookmarksController, type: :controller do get :index, params: { limit: 1 } expect(response.headers['Link'].find_link(['rel', 'next']).href).to eq "http://test.host/api/v1/bookmarks?limit=1&max_id=#{bookmark.id}" - expect(response.headers['Link'].find_link(['rel', 'prev']).href).to eq "http://test.host/api/v1/bookmarks?limit=1&since_id=#{bookmark.id}" + expect(response.headers['Link'].find_link(['rel', 'prev']).href).to eq "http://test.host/api/v1/bookmarks?limit=1&min_id=#{bookmark.id}" end it 'does not add pagination headers if not necessary' do diff --git a/spec/controllers/api/v1/follow_requests_controller_spec.rb b/spec/controllers/api/v1/follow_requests_controller_spec.rb index 87292d9ce..ae92a9627 100644 --- a/spec/controllers/api/v1/follow_requests_controller_spec.rb +++ b/spec/controllers/api/v1/follow_requests_controller_spec.rb @@ -38,6 +38,12 @@ RSpec.describe Api::V1::FollowRequestsController, type: :controller do it 'allows follower to follow' do expect(follower.following?(user.account)).to be true end + + it 'returns JSON with followed_by=true' do + json = body_as_json + + expect(json[:followed_by]).to be true + end end describe 'POST #reject' do @@ -54,5 +60,11 @@ RSpec.describe Api::V1::FollowRequestsController, type: :controller do it 'removes follow request' do expect(FollowRequest.where(target_account: user.account, account: follower).count).to eq 0 end + + it 'returns JSON with followed_by=false' do + json = body_as_json + + expect(json[:followed_by]).to be false + end end end diff --git a/spec/controllers/api/v1/follows_controller_spec.rb b/spec/controllers/api/v1/follows_controller_spec.rb deleted file mode 100644 index 089e0fe5e..000000000 --- a/spec/controllers/api/v1/follows_controller_spec.rb +++ /dev/null @@ -1,51 +0,0 @@ -require 'rails_helper' - -RSpec.describe Api::V1::FollowsController, type: :controller do - render_views - - let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'write:follows') } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'POST #create' do - before do - stub_request(:get, "https://quitter.no/.well-known/host-meta").to_return(request_fixture('.host-meta.txt')) - stub_request(:get, "https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no").to_return(request_fixture('webfinger.txt')) - stub_request(:head, "https://quitter.no/api/statuses/user_timeline/7477.atom").to_return(:status => 405, :body => "", :headers => {}) - stub_request(:get, "https://quitter.no/api/statuses/user_timeline/7477.atom").to_return(request_fixture('feed.txt')) - stub_request(:get, "https://quitter.no/avatar/7477-300-20160211190340.png").to_return(request_fixture('avatar.txt')) - stub_request(:post, "https://quitter.no/main/push/hub").to_return(:status => 200, :body => "", :headers => {}) - stub_request(:post, "https://quitter.no/main/salmon/user/7477").to_return(:status => 200, :body => "", :headers => {}) - - post :create, params: { uri: 'gargron@quitter.no' } - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - - it 'creates account for remote user' do - expect(Account.find_by(username: 'gargron', domain: 'quitter.no')).to_not be_nil - end - - it 'creates a follow relation between user and remote user' do - expect(user.account.following?(Account.find_by(username: 'gargron', domain: 'quitter.no'))).to be true - end - - it 'sends a salmon slap to the remote user' do - expect(a_request(:post, "https://quitter.no/main/salmon/user/7477")).to have_been_made - end - - it 'subscribes to remote hub' do - expect(a_request(:post, "https://quitter.no/main/push/hub")).to have_been_made - end - - it 'returns http success if already following, too' do - post :create, params: { uri: 'gargron@quitter.no' } - expect(response).to have_http_status(200) - end - end -end diff --git a/spec/controllers/api/v1/markers_controller_spec.rb b/spec/controllers/api/v1/markers_controller_spec.rb new file mode 100644 index 000000000..556a75b9b --- /dev/null +++ b/spec/controllers/api/v1/markers_controller_spec.rb @@ -0,0 +1,65 @@ +require 'rails_helper' + +RSpec.describe Api::V1::MarkersController, type: :controller do + render_views + + let!(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } + let!(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses write:statuses') } + + before { allow(controller).to receive(:doorkeeper_token) { token } } + + describe 'GET #index' do + before do + Fabricate(:marker, timeline: 'home', last_read_id: 123, user: user) + Fabricate(:marker, timeline: 'notifications', last_read_id: 456, user: user) + + get :index, params: { timeline: %w(home notifications) } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'returns markers' do + json = body_as_json + + expect(json.key?(:home)).to be true + expect(json[:home][:last_read_id]).to eq '123' + expect(json.key?(:notifications)).to be true + expect(json[:notifications][:last_read_id]).to eq '456' + end + end + + describe 'POST #create' do + context 'when no marker exists' do + before do + post :create, params: { home: { last_read_id: '69420' } } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'creates a marker' do + expect(user.markers.first.timeline).to eq 'home' + expect(user.markers.first.last_read_id).to eq 69420 + end + end + + context 'when a marker exists' do + before do + post :create, params: { home: { last_read_id: '69420' } } + post :create, params: { home: { last_read_id: '70120' } } + end + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'updates a marker' do + expect(user.markers.first.timeline).to eq 'home' + expect(user.markers.first.last_read_id).to eq 70120 + end + end + end +end diff --git a/spec/controllers/api/v1/search_controller_spec.rb b/spec/controllers/api/v1/search_controller_spec.rb deleted file mode 100644 index c9e544cc7..000000000 --- a/spec/controllers/api/v1/search_controller_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Api::V1::SearchController, type: :controller do - render_views - - let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:search') } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do - it 'returns http success' do - get :index, params: { q: 'test' } - - expect(response).to have_http_status(200) - end - end -end diff --git a/spec/controllers/api/v1/statuses_controller_spec.rb b/spec/controllers/api/v1/statuses_controller_spec.rb index 8bc3b0c67..9ff5fcd3b 100644 --- a/spec/controllers/api/v1/statuses_controller_spec.rb +++ b/spec/controllers/api/v1/statuses_controller_spec.rb @@ -91,13 +91,6 @@ RSpec.describe Api::V1::StatusesController, type: :controller do expect(response).to have_http_status(404) end end - - describe 'GET #card' do - it 'returns http unautharized' do - get :card, params: { id: status.id } - expect(response).to have_http_status(404) - end - end end context 'with a public status' do @@ -120,13 +113,6 @@ RSpec.describe Api::V1::StatusesController, type: :controller do expect(response).to have_http_status(200) end end - - describe 'GET #card' do - it 'returns http success' do - get :card, params: { id: status.id } - expect(response).to have_http_status(200) - end - end end end end diff --git a/spec/controllers/api/v1/timelines/public_controller_spec.rb b/spec/controllers/api/v1/timelines/public_controller_spec.rb index 737aedba6..b8e9d8674 100644 --- a/spec/controllers/api/v1/timelines/public_controller_spec.rb +++ b/spec/controllers/api/v1/timelines/public_controller_spec.rb @@ -44,6 +44,10 @@ describe Api::V1::Timelines::PublicController do context 'without a user context' do let(:token) { Fabricate(:accessible_access_token, resource_owner_id: nil) } + before do + Setting.timeline_preview = true + end + describe 'GET #show' do it 'returns http success' do get :show diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb index ea443b80c..686ae70fb 100644 --- a/spec/controllers/application_controller_spec.rb +++ b/spec/controllers/application_controller_spec.rb @@ -22,11 +22,6 @@ describe ApplicationController, type: :controller do end shared_examples 'respond_with_error' do |code| - it "returns http #{code} for any" do - subject - expect(response).to have_http_status(code) - end - it "returns http #{code} for http" do subject expect(response).to have_http_status(code) @@ -113,6 +108,7 @@ describe ApplicationController, type: :controller do allow(Setting).to receive(:[]).with('skin').and_return 'default' allow(Setting).to receive(:[]).with('flavour').and_return 'vanilla' + allow(Setting).to receive(:[]).with('noindex').and_return false expect(controller.view_context.current_flavour).to eq 'vanilla' end @@ -191,10 +187,10 @@ describe ApplicationController, type: :controller do expect(response).to have_http_status(200) end - it 'returns http 403 if user who signed in is suspended' do + it 'redirects to account status page' do sign_in(Fabricate(:user, account: Fabricate(:account, suspended: true))) get 'success' - expect(response).to have_http_status(403) + expect(response).to redirect_to(edit_user_registration_path) end end @@ -364,9 +360,5 @@ describe ApplicationController, type: :controller do context 'Status' do include_examples 'cacheable', :status, Status end - - context 'StreamEntry' do - include_examples 'receives :with_includes', :stream_entry, StreamEntry - end end end diff --git a/spec/controllers/auth/challenges_controller_spec.rb b/spec/controllers/auth/challenges_controller_spec.rb new file mode 100644 index 000000000..2a6ca301e --- /dev/null +++ b/spec/controllers/auth/challenges_controller_spec.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Auth::ChallengesController, type: :controller do + render_views + + let(:password) { 'foobar12345' } + let(:user) { Fabricate(:user, password: password) } + + before do + sign_in user + end + + describe 'POST #create' do + let(:return_to) { edit_user_registration_path } + + context 'with correct password' do + before { post :create, params: { form_challenge: { return_to: return_to, current_password: password } } } + + it 'redirects back' do + expect(response).to redirect_to(return_to) + end + + it 'sets session' do + expect(session[:challenge_passed_at]).to_not be_nil + end + end + + context 'with incorrect password' do + before { post :create, params: { form_challenge: { return_to: return_to, current_password: 'hhfggjjd562' } } } + + it 'renders challenge' do + expect(response).to render_template('auth/challenges/new') + end + + it 'displays error' do + expect(response.body).to include 'Invalid password' + end + + it 'does not set session' do + expect(session[:challenge_passed_at]).to be_nil + end + end + end +end diff --git a/spec/controllers/auth/confirmations_controller_spec.rb b/spec/controllers/auth/confirmations_controller_spec.rb index e9a471fc5..0b6b74ff9 100644 --- a/spec/controllers/auth/confirmations_controller_spec.rb +++ b/spec/controllers/auth/confirmations_controller_spec.rb @@ -50,45 +50,4 @@ describe Auth::ConfirmationsController, type: :controller do end end end - - describe 'GET #finish_signup' do - subject { get :finish_signup } - - let(:user) { Fabricate(:user) } - before do - sign_in user, scope: :user - @request.env['devise.mapping'] = Devise.mappings[:user] - end - - it 'renders finish_signup' do - is_expected.to render_template :finish_signup - expect(assigns(:user)).to have_attributes id: user.id - end - end - - describe 'PATCH #finish_signup' do - subject { patch :finish_signup, params: { user: { email: email } } } - - let(:user) { Fabricate(:user) } - before do - sign_in user, scope: :user - @request.env['devise.mapping'] = Devise.mappings[:user] - end - - context 'when email is valid' do - let(:email) { 'new_' + user.email } - - it 'redirects to root_path' do - is_expected.to redirect_to root_path - end - end - - context 'when email is invalid' do - let(:email) { '' } - - it 'renders finish_signup' do - is_expected.to render_template :finish_signup - end - end - end end diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb index a4337039e..3e11b34b5 100644 --- a/spec/controllers/auth/registrations_controller_spec.rb +++ b/spec/controllers/auth/registrations_controller_spec.rb @@ -46,6 +46,15 @@ RSpec.describe Auth::RegistrationsController, type: :controller do post :update expect(response).to have_http_status(200) end + + context 'when suspended' do + it 'returns http forbidden' do + request.env["devise.mapping"] = Devise.mappings[:user] + sign_in(Fabricate(:user, account_attributes: { username: 'test', suspended_at: Time.now.utc }), scope: :user) + post :update + expect(response).to have_http_status(403) + end + end end describe 'GET #new' do @@ -94,9 +103,9 @@ RSpec.describe Auth::RegistrationsController, type: :controller do post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678' } } end - it 'redirects to login page' do + it 'redirects to setup' do subject - expect(response).to redirect_to new_user_session_path + expect(response).to redirect_to auth_setup_path end it 'creates user' do @@ -120,9 +129,9 @@ RSpec.describe Auth::RegistrationsController, type: :controller do post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678' } } end - it 'redirects to login page' do + it 'redirects to setup' do subject - expect(response).to redirect_to new_user_session_path + expect(response).to redirect_to auth_setup_path end it 'creates user' do @@ -148,9 +157,9 @@ RSpec.describe Auth::RegistrationsController, type: :controller do post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', 'invite_code': invite.code } } end - it 'redirects to login page' do + it 'redirects to setup' do subject - expect(response).to redirect_to new_user_session_path + expect(response).to redirect_to auth_setup_path end it 'creates user' do @@ -176,9 +185,9 @@ RSpec.describe Auth::RegistrationsController, type: :controller do post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', 'invite_code': invite.code } } end - it 'redirects to login page' do + it 'redirects to setup' do subject - expect(response).to redirect_to new_user_session_path + expect(response).to redirect_to auth_setup_path end it 'creates user' do diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index 71fcc1a6e..1950c173a 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -5,11 +5,11 @@ require 'rails_helper' RSpec.describe Auth::SessionsController, type: :controller do render_views - describe 'GET #new' do - before do - request.env['devise.mapping'] = Devise.mappings[:user] - end + before do + request.env['devise.mapping'] = Devise.mappings[:user] + end + describe 'GET #new' do it 'returns http success' do get :new expect(response).to have_http_status(200) @@ -19,10 +19,6 @@ RSpec.describe Auth::SessionsController, type: :controller do describe 'DELETE #destroy' do let(:user) { Fabricate(:user) } - before do - request.env['devise.mapping'] = Devise.mappings[:user] - end - context 'with a regular user' do it 'redirects to home after sign out' do sign_in(user, scope: :user) @@ -51,10 +47,6 @@ RSpec.describe Auth::SessionsController, type: :controller do end describe 'POST #create' do - before do - request.env['devise.mapping'] = Devise.mappings[:user] - end - context 'using PAM authentication', if: ENV['PAM_ENABLED'] == 'true' do context 'using a valid password' do before do @@ -88,7 +80,7 @@ RSpec.describe Auth::SessionsController, type: :controller do let(:user) do account = Fabricate.build(:account, username: 'pam_user1') account.save!(validate: false) - user = Fabricate(:user, email: 'pam@example.com', password: nil, account: account) + user = Fabricate(:user, email: 'pam@example.com', password: nil, account: account, external: true) user end @@ -160,8 +152,8 @@ RSpec.describe Auth::SessionsController, type: :controller do let(:unconfirmed_user) { user.tap { |u| u.update!(confirmed_at: nil) } } let(:accept_language) { 'fr' } - it 'shows a translated login error' do - expect(flash[:alert]).to eq(I18n.t('devise.failure.unconfirmed', locale: accept_language)) + it 'redirects to home' do + expect(response).to redirect_to(root_path) end end @@ -191,11 +183,11 @@ RSpec.describe Auth::SessionsController, type: :controller do end context 'using two-factor authentication' do - let(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', - otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + let!(:user) do + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) end - let(:recovery_codes) do + + let!(:recovery_codes) do codes = user.generate_otp_backup_codes! user.save return codes diff --git a/spec/controllers/concerns/account_controller_concern_spec.rb b/spec/controllers/concerns/account_controller_concern_spec.rb index ea2b4a2a1..7ea214a7d 100644 --- a/spec/controllers/concerns/account_controller_concern_spec.rb +++ b/spec/controllers/concerns/account_controller_concern_spec.rb @@ -41,7 +41,7 @@ describe ApplicationController, type: :controller do it 'sets link headers' do account = Fabricate(:account, username: 'username', user: Fabricate(:user)) get 'success', params: { account_username: 'username' } - expect(response.headers['Link'].to_s).to eq '<http://test.host/.well-known/webfinger?resource=acct%3Ausername%40cb6e6126.ngrok.io>; rel="lrdd"; type="application/xrd+xml", <http://test.host/users/username.atom>; rel="alternate"; type="application/atom+xml", <https://cb6e6126.ngrok.io/users/username>; rel="alternate"; type="application/activity+json"' + expect(response.headers['Link'].to_s).to eq '<http://test.host/.well-known/webfinger?resource=acct%3Ausername%40cb6e6126.ngrok.io>; rel="lrdd"; type="application/jrd+json", <https://cb6e6126.ngrok.io/users/username>; rel="alternate"; type="application/activity+json"' end it 'returns http success' do diff --git a/spec/controllers/concerns/challengable_concern_spec.rb b/spec/controllers/concerns/challengable_concern_spec.rb new file mode 100644 index 000000000..4db3b740d --- /dev/null +++ b/spec/controllers/concerns/challengable_concern_spec.rb @@ -0,0 +1,114 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ChallengableConcern, type: :controller do + controller(ApplicationController) do + include ChallengableConcern + + before_action :require_challenge! + + def foo + render plain: 'foo' + end + + def bar + render plain: 'bar' + end + end + + before do + routes.draw do + get 'foo' => 'anonymous#foo' + post 'bar' => 'anonymous#bar' + end + end + + context 'with a no-password user' do + let(:user) { Fabricate(:user, external: true, password: nil) } + + before do + sign_in user + end + + context 'for GET requests' do + before { get :foo } + + it 'does not ask for password' do + expect(response.body).to eq 'foo' + end + end + + context 'for POST requests' do + before { post :bar } + + it 'does not ask for password' do + expect(response.body).to eq 'bar' + end + end + end + + context 'with recent challenge in session' do + let(:password) { 'foobar12345' } + let(:user) { Fabricate(:user, password: password) } + + before do + sign_in user + end + + context 'for GET requests' do + before { get :foo, session: { challenge_passed_at: Time.now.utc } } + + it 'does not ask for password' do + expect(response.body).to eq 'foo' + end + end + + context 'for POST requests' do + before { post :bar, session: { challenge_passed_at: Time.now.utc } } + + it 'does not ask for password' do + expect(response.body).to eq 'bar' + end + end + end + + context 'with a password user' do + let(:password) { 'foobar12345' } + let(:user) { Fabricate(:user, password: password) } + + before do + sign_in user + end + + context 'for GET requests' do + before { get :foo } + + it 'renders challenge' do + expect(response).to render_template('auth/challenges/new') + end + + # See Auth::ChallengesControllerSpec + end + + context 'for POST requests' do + before { post :bar } + + it 'renders challenge' do + expect(response).to render_template('auth/challenges/new') + end + + it 'accepts correct password' do + post :bar, params: { form_challenge: { current_password: password } } + expect(response.body).to eq 'bar' + expect(session[:challenge_passed_at]).to_not be_nil + end + + it 'rejects wrong password' do + post :bar, params: { form_challenge: { current_password: 'dddfff888123' } } + expect(response.body).to render_template('auth/challenges/new') + expect(session[:challenge_passed_at]).to be_nil + end + end + end +end diff --git a/spec/controllers/concerns/localized_spec.rb b/spec/controllers/concerns/localized_spec.rb index 76c3de118..7635d10e1 100644 --- a/spec/controllers/concerns/localized_spec.rb +++ b/spec/controllers/concerns/localized_spec.rb @@ -7,16 +7,10 @@ describe ApplicationController, type: :controller do include Localized def success - head 200 + render plain: I18n.locale, status: 200 end end - around do |example| - current_locale = I18n.locale - example.run - I18n.locale = current_locale - end - before do routes.draw { get 'success' => 'anonymous#success' } end @@ -25,19 +19,19 @@ describe ApplicationController, type: :controller do it 'sets available and preferred language' do request.headers['Accept-Language'] = 'ca-ES, fa' get 'success' - expect(I18n.locale).to eq :fa + expect(response.body).to eq 'fa' end it 'sets available and compatible language if none of available languages are preferred' do request.headers['Accept-Language'] = 'fa-IR' get 'success' - expect(I18n.locale).to eq :fa + expect(response.body).to eq 'fa' end it 'sets default locale if none of available languages are compatible' do request.headers['Accept-Language'] = '' get 'success' - expect(I18n.locale).to eq :en + expect(response.body).to eq 'en' end end @@ -48,7 +42,7 @@ describe ApplicationController, type: :controller do sign_in(user) get 'success' - expect(I18n.locale).to eq :ca + expect(response.body).to eq 'ca' end end diff --git a/spec/controllers/concerns/signature_verification_spec.rb b/spec/controllers/concerns/signature_verification_spec.rb index 720690097..1fa19f54d 100644 --- a/spec/controllers/concerns/signature_verification_spec.rb +++ b/spec/controllers/concerns/signature_verification_spec.rb @@ -38,7 +38,7 @@ describe ApplicationController, type: :controller do end context 'with signature header' do - let!(:author) { Fabricate(:account) } + let!(:author) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/actor') } context 'without body' do before do diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index f43cf0c27..941f1dd91 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -27,16 +27,6 @@ RSpec.describe HomeController, type: :controller do subject expect(assigns(:body_classes)).to eq 'app-body' end - - it 'assigns @initial_state_json' do - subject - initial_state_json = json_str_to_hash(assigns(:initial_state_json)) - expect(initial_state_json[:meta]).to_not be_nil - expect(initial_state_json[:compose]).to_not be_nil - expect(initial_state_json[:accounts]).to_not be_nil - expect(initial_state_json[:settings]).to_not be_nil - expect(initial_state_json[:media_attachments]).to_not be_nil - end end end end diff --git a/spec/controllers/remote_follow_controller_spec.rb b/spec/controllers/remote_follow_controller_spec.rb index 5088c2e65..d79dd2949 100644 --- a/spec/controllers/remote_follow_controller_spec.rb +++ b/spec/controllers/remote_follow_controller_spec.rb @@ -66,9 +66,7 @@ describe RemoteFollowController do end it 'redirects to the remote location' do - address = "http://example.com/follow_me?acct=test_user%40#{Rails.configuration.x.local_domain}" - - expect(response).to redirect_to(address) + expect(response).to redirect_to("http://example.com/follow_me?acct=https%3A%2F%2F#{Rails.configuration.x.local_domain}%2Fusers%2Ftest_user") end end end diff --git a/spec/controllers/remote_unfollows_controller_spec.rb b/spec/controllers/remote_unfollows_controller_spec.rb deleted file mode 100644 index a1a55ede0..000000000 --- a/spec/controllers/remote_unfollows_controller_spec.rb +++ /dev/null @@ -1,38 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe RemoteUnfollowsController do - render_views - - describe '#create' do - subject { post :create, params: { acct: acct } } - - let(:current_user) { Fabricate(:user, account: current_account) } - let(:current_account) { Fabricate(:account) } - let(:remote_account) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account } - before do - sign_in current_user - current_account.follow!(remote_account) - stub_request(:post, 'http://example.com/inbox') { { status: 200 } } - end - - context 'when successfully unfollow remote account' do - let(:acct) { "acct:#{remote_account.username}@#{remote_account.domain}" } - - it do - is_expected.to render_template :success - expect(current_account.following?(remote_account)).to be false - end - end - - context 'when fails to unfollow remote account' do - let(:acct) { "acct:#{remote_account.username + '_test'}@#{remote_account.domain}" } - - it do - is_expected.to render_template :error - expect(current_account.following?(remote_account)).to be true - end - end - end -end diff --git a/spec/controllers/settings/deletes_controller_spec.rb b/spec/controllers/settings/deletes_controller_spec.rb index 35fd64e9b..996872efd 100644 --- a/spec/controllers/settings/deletes_controller_spec.rb +++ b/spec/controllers/settings/deletes_controller_spec.rb @@ -15,6 +15,15 @@ describe Settings::DeletesController do get :show expect(response).to have_http_status(200) end + + context 'when suspended' do + let(:user) { Fabricate(:user, account_attributes: { username: 'alice', suspended_at: Time.now.utc }) } + + it 'returns http forbidden' do + get :show + expect(response).to have_http_status(403) + end + end end context 'when not signed in' do @@ -49,6 +58,14 @@ describe Settings::DeletesController do it 'marks account as suspended' do expect(user.account.reload).to be_suspended end + + context 'when suspended' do + let(:user) { Fabricate(:user, account_attributes: { username: 'alice', suspended_at: Time.now.utc }) } + + it 'returns http forbidden' do + expect(response).to have_http_status(403) + end + end end context 'with incorrect password' do diff --git a/spec/controllers/settings/identity_proofs_controller_spec.rb b/spec/controllers/settings/identity_proofs_controller_spec.rb index 2a0f91088..261e980d4 100644 --- a/spec/controllers/settings/identity_proofs_controller_spec.rb +++ b/spec/controllers/settings/identity_proofs_controller_spec.rb @@ -8,8 +8,8 @@ describe Settings::IdentityProofsController do let(:valid_token) { '1'*66 } let(:kbname) { 'kbuser' } let(:provider) { 'keybase' } - let(:findable_id) { Faker::Number.number(5) } - let(:unfindable_id) { Faker::Number.number(5) } + let(:findable_id) { Faker::Number.number(digits: 5) } + let(:unfindable_id) { Faker::Number.number(digits: 5) } let(:new_proof_params) do { provider: provider, provider_username: kbname, token: valid_token, username: user.account.username } end diff --git a/spec/controllers/settings/migrations_controller_spec.rb b/spec/controllers/settings/migrations_controller_spec.rb index 4d814a45e..36e4ba86e 100644 --- a/spec/controllers/settings/migrations_controller_spec.rb +++ b/spec/controllers/settings/migrations_controller_spec.rb @@ -21,6 +21,7 @@ describe Settings::MigrationsController do let(:user) { Fabricate(:user, account: account) } let(:account) { Fabricate(:account, moved_to_account: moved_to_account) } + before { sign_in user, scope: :user } context 'when user does not have moved to account' do @@ -32,7 +33,7 @@ describe Settings::MigrationsController do end end - context 'when user does not have moved to account' do + context 'when user has a moved to account' do let(:moved_to_account) { Fabricate(:account) } it 'renders show page' do @@ -43,21 +44,22 @@ describe Settings::MigrationsController do end end - describe 'PUT #update' do + describe 'POST #create' do context 'when user is not sign in' do - subject { put :update } + subject { post :create } it_behaves_like 'authenticate user' end context 'when user is sign in' do - subject { put :update, params: { migration: { acct: acct } } } + subject { post :create, params: { account_migration: { acct: acct, current_password: '12345678' } } } + + let(:user) { Fabricate(:user, password: '12345678') } - let(:user) { Fabricate(:user) } before { sign_in user, scope: :user } context 'when migration account is changed' do - let(:acct) { Fabricate(:account) } + let(:acct) { Fabricate(:account, also_known_as: [ActivityPub::TagManager.instance.uri_for(user.account)]) } it 'updates moved to account' do is_expected.to redirect_to settings_migration_path diff --git a/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb b/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb index 478f24585..336f13127 100644 --- a/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb +++ b/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb @@ -24,7 +24,7 @@ describe Settings::TwoFactorAuthentication::ConfirmationsController do context 'when signed in' do subject do sign_in user, scope: :user - get :new + get :new, session: { challenge_passed_at: Time.now.utc } end include_examples 'renders :new' @@ -37,7 +37,7 @@ describe Settings::TwoFactorAuthentication::ConfirmationsController do it 'redirects if user do not have otp_secret' do sign_in user_without_otp_secret, scope: :user - get :new + get :new, session: { challenge_passed_at: Time.now.utc } expect(response).to redirect_to('/settings/two_factor_authentication') end end @@ -50,7 +50,8 @@ describe Settings::TwoFactorAuthentication::ConfirmationsController do describe 'when form_two_factor_confirmation parameter is not provided' do it 'raises ActionController::ParameterMissing' do - expect { post :create, params: {} }.to raise_error(ActionController::ParameterMissing) + post :create, params: {}, session: { challenge_passed_at: Time.now.utc } + expect(response).to have_http_status(400) end end @@ -67,7 +68,7 @@ describe Settings::TwoFactorAuthentication::ConfirmationsController do true end - post :create, params: { form_two_factor_confirmation: { code: '123456' } } + post :create, params: { form_two_factor_confirmation: { otp_attempt: '123456' } }, session: { challenge_passed_at: Time.now.utc } expect(assigns(:recovery_codes)).to eq otp_backup_codes expect(flash[:notice]).to eq 'Two-factor authentication successfully enabled' @@ -84,7 +85,7 @@ describe Settings::TwoFactorAuthentication::ConfirmationsController do false end - post :create, params: { form_two_factor_confirmation: { code: '123456' } } + post :create, params: { form_two_factor_confirmation: { otp_attempt: '123456' } }, session: { challenge_passed_at: Time.now.utc } end it 'renders the new view' do @@ -98,7 +99,7 @@ describe Settings::TwoFactorAuthentication::ConfirmationsController do context 'when not signed in' do it 'redirects if not signed in' do - post :create, params: { form_two_factor_confirmation: { code: '123456' } } + post :create, params: { form_two_factor_confirmation: { otp_attempt: '123456' } } expect(response).to redirect_to('/auth/sign_in') end end diff --git a/spec/controllers/settings/two_factor_authentication/recovery_codes_controller_spec.rb b/spec/controllers/settings/two_factor_authentication/recovery_codes_controller_spec.rb index c04760e53..630cec428 100644 --- a/spec/controllers/settings/two_factor_authentication/recovery_codes_controller_spec.rb +++ b/spec/controllers/settings/two_factor_authentication/recovery_codes_controller_spec.rb @@ -15,7 +15,7 @@ describe Settings::TwoFactorAuthentication::RecoveryCodesController do end sign_in user, scope: :user - post :create + post :create, session: { challenge_passed_at: Time.now.utc } expect(assigns(:recovery_codes)).to eq otp_backup_codes expect(flash[:notice]).to eq 'Recovery codes successfully regenerated' diff --git a/spec/controllers/settings/two_factor_authentications_controller_spec.rb b/spec/controllers/settings/two_factor_authentications_controller_spec.rb index 9f27222ad..9df9763fd 100644 --- a/spec/controllers/settings/two_factor_authentications_controller_spec.rb +++ b/spec/controllers/settings/two_factor_authentications_controller_spec.rb @@ -58,7 +58,7 @@ describe Settings::TwoFactorAuthenticationsController do describe 'when creation succeeds' do it 'updates user secret' do before = user.otp_secret - post :create + post :create, session: { challenge_passed_at: Time.now.utc } expect(user.reload.otp_secret).not_to eq(before) expect(response).to redirect_to(new_settings_two_factor_authentication_confirmation_path) @@ -91,7 +91,7 @@ describe Settings::TwoFactorAuthenticationsController do true end - post :destroy, params: { form_two_factor_confirmation: { code: '123456' } } + post :destroy, params: { form_two_factor_confirmation: { otp_attempt: '123456' } } expect(response).to redirect_to(settings_two_factor_authentication_path) user.reload @@ -105,14 +105,15 @@ describe Settings::TwoFactorAuthenticationsController do false end - post :destroy, params: { form_two_factor_confirmation: { code: '057772' } } + post :destroy, params: { form_two_factor_confirmation: { otp_attempt: '057772' } } user.reload expect(user.otp_required_for_login).to eq(true) end it 'raises ActionController::ParameterMissing if code is missing' do - expect { post :destroy }.to raise_error(ActionController::ParameterMissing) + post :destroy + expect(response).to have_http_status(400) end end diff --git a/spec/controllers/shares_controller_spec.rb b/spec/controllers/shares_controller_spec.rb index a74e9af56..d6de3016a 100644 --- a/spec/controllers/shares_controller_spec.rb +++ b/spec/controllers/shares_controller_spec.rb @@ -7,15 +7,12 @@ describe SharesController do before { sign_in user } describe 'GTE #show' do - subject(:initial_state_json) { JSON.parse(assigns(:initial_state_json), symbolize_names: true) } subject(:body_classes) { assigns(:body_classes) } before { get :show, params: { title: 'test title', text: 'test text', url: 'url1 url2' } } - it 'assigns json' do + it 'returns http success' do expect(response).to have_http_status :ok - expect(initial_state_json[:compose][:text]).to eq 'test title test text url1 url2' - expect(initial_state_json[:meta][:me]).to eq user.account.id.to_s expect(body_classes).to eq 'modal-layout compose-standalone' end end diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb index 1bb6636c6..6905dae10 100644 --- a/spec/controllers/statuses_controller_spec.rb +++ b/spec/controllers/statuses_controller_spec.rb @@ -55,18 +55,6 @@ describe StatusesController do expect(assigns(:status)).to eq status end - it 'assigns @stream_entry' do - status = Fabricate(:status) - get :show, params: { account_username: status.account.username, id: status.id } - expect(assigns(:stream_entry)).to eq status.stream_entry - end - - it 'assigns @type' do - status = Fabricate(:status) - get :show, params: { account_username: status.account.username, id: status.id } - expect(assigns(:type)).to eq 'status' - end - it 'assigns @ancestors for ancestors of the status if it is a reply' do ancestor = Fabricate(:status) status = Fabricate(:status, in_reply_to_id: ancestor.id) @@ -104,7 +92,7 @@ describe StatusesController do end it 'assigns @max_descendant_thread_id for the last thread if it is hitting the status limit' do - stub_const 'StatusesController::DESCENDANTS_LIMIT', 1 + stub_const 'StatusControllerConcern::DESCENDANTS_LIMIT', 1 status = Fabricate(:status) child = Fabricate(:status, in_reply_to_id: status.id) @@ -115,7 +103,7 @@ describe StatusesController do end it 'assigns @descendant_threads for threads with :next_status key if they are hitting the depth limit' do - stub_const 'StatusesController::DESCENDANTS_DEPTH_LIMIT', 2 + stub_const 'StatusControllerConcern::DESCENDANTS_DEPTH_LIMIT', 2 status = Fabricate(:status) child0 = Fabricate(:status, in_reply_to_id: status.id) child1 = Fabricate(:status, in_reply_to_id: child0.id) @@ -135,10 +123,10 @@ describe StatusesController do expect(response).to have_http_status(200) end - it 'renders stream_entries/show' do + it 'renders statuses/show' do status = Fabricate(:status) get :show, params: { account_username: status.account.username, id: status.id } - expect(response).to render_template 'stream_entries/show' + expect(response).to render_template 'statuses/show' end end end diff --git a/spec/controllers/stream_entries_controller_spec.rb b/spec/controllers/stream_entries_controller_spec.rb deleted file mode 100644 index eb7fdf9d7..000000000 --- a/spec/controllers/stream_entries_controller_spec.rb +++ /dev/null @@ -1,95 +0,0 @@ -require 'rails_helper' - -RSpec.describe StreamEntriesController, type: :controller do - render_views - - shared_examples 'before_action' do |route| - context 'when account is not suspended and stream_entry is available' do - it 'assigns instance variables' do - status = Fabricate(:status) - - get route, params: { account_username: status.account.username, id: status.stream_entry.id } - - expect(assigns(:account)).to eq status.account - expect(assigns(:stream_entry)).to eq status.stream_entry - expect(assigns(:type)).to eq 'status' - end - - it 'sets Link headers' do - alice = Fabricate(:account, username: 'alice') - status = Fabricate(:status, account: alice) - - get route, params: { account_username: alice.username, id: status.stream_entry.id } - - expect(response.headers['Link'].to_s).to eq "<http://test.host/users/alice/updates/#{status.stream_entry.id}.atom>; rel=\"alternate\"; type=\"application/atom+xml\", <https://cb6e6126.ngrok.io/users/alice/statuses/#{status.id}>; rel=\"alternate\"; type=\"application/activity+json\"" - end - end - - context 'when account is suspended' do - it 'returns http status 410' do - account = Fabricate(:account, suspended: true) - status = Fabricate(:status, account: account) - - get route, params: { account_username: account.username, id: status.stream_entry.id } - - expect(response).to have_http_status(410) - end - end - - context 'when activity is nil' do - it 'raises ActiveRecord::RecordNotFound' do - account = Fabricate(:account) - stream_entry = Fabricate.build(:stream_entry, account: account, activity: nil, activity_type: 'Status') - stream_entry.save!(validate: false) - - get route, params: { account_username: account.username, id: stream_entry.id } - - expect(response).to have_http_status(404) - end - end - - context 'when it is hidden and it is not permitted' do - it 'raises ActiveRecord::RecordNotFound' do - status = Fabricate(:status) - user = Fabricate(:user) - status.account.block!(user.account) - status.stream_entry.update!(hidden: true) - - sign_in(user) - get route, params: { account_username: status.account.username, id: status.stream_entry.id } - - expect(response).to have_http_status(404) - end - end - end - - describe 'GET #show' do - include_examples 'before_action', :show - - it 'redirects to status page' do - status = Fabricate(:status) - - get :show, params: { account_username: status.account.username, id: status.stream_entry.id } - - expect(response).to redirect_to(short_account_status_url(status.account, status)) - end - - it 'returns http success with Atom' do - status = Fabricate(:status) - get :show, params: { account_username: status.account.username, id: status.stream_entry.id }, format: 'atom' - expect(response).to have_http_status(200) - end - end - - describe 'GET #embed' do - include_examples 'before_action', :embed - - it 'redirects to new embed page' do - status = Fabricate(:status) - - get :embed, params: { account_username: status.account.username, id: status.stream_entry.id } - - expect(response).to redirect_to(embed_short_account_status_url(status.account, status)) - end - end -end diff --git a/spec/controllers/well_known/nodeinfo_controller_spec.rb b/spec/controllers/well_known/nodeinfo_controller_spec.rb new file mode 100644 index 000000000..12e1fa415 --- /dev/null +++ b/spec/controllers/well_known/nodeinfo_controller_spec.rb @@ -0,0 +1,36 @@ +require 'rails_helper' + +describe WellKnown::NodeInfoController, type: :controller do + render_views + + describe 'GET #index' do + it 'returns json document pointing to node info' do + get :index + + expect(response).to have_http_status(200) + expect(response.content_type).to eq 'application/json' + + json = body_as_json + + expect(json[:links]).to be_an Array + expect(json[:links][0][:rel]).to eq 'http://nodeinfo.diaspora.software/ns/schema/2.0' + expect(json[:links][0][:href]).to include 'nodeinfo/2.0' + end + end + + describe 'GET #show' do + it 'returns json document with node info properties' do + get :show + + expect(response).to have_http_status(200) + expect(response.content_type).to eq 'application/json' + + json = body_as_json + + expect(json[:version]).to eq '2.0' + expect(json[:usage]).to be_a Hash + expect(json[:software]).to be_a Hash + expect(json[:protocols]).to be_an Array + end + end +end diff --git a/spec/controllers/well_known/webfinger_controller_spec.rb b/spec/controllers/well_known/webfinger_controller_spec.rb index b05745ea3..20275aa63 100644 --- a/spec/controllers/well_known/webfinger_controller_spec.rb +++ b/spec/controllers/well_known/webfinger_controller_spec.rb @@ -56,17 +56,6 @@ PEM expect(json[:aliases]).to include('https://cb6e6126.ngrok.io/@alice', 'https://cb6e6126.ngrok.io/users/alice') end - it 'returns JSON when account can be found' do - get :show, params: { resource: alice.to_webfinger_s }, format: :xml - - xml = Nokogiri::XML(response.body) - - expect(response).to have_http_status(200) - expect(response.content_type).to eq 'application/xrd+xml' - expect(xml.at_xpath('//xmlns:Subject').content).to eq 'acct:alice@cb6e6126.ngrok.io' - expect(xml.xpath('//xmlns:Alias').map(&:content)).to include('https://cb6e6126.ngrok.io/@alice', 'https://cb6e6126.ngrok.io/users/alice') - end - it 'returns http not found when account cannot be found' do get :show, params: { resource: 'acct:not@existing.com' }, format: :json diff --git a/spec/fabricators/account_alias_fabricator.rb b/spec/fabricators/account_alias_fabricator.rb new file mode 100644 index 000000000..94dde9bb8 --- /dev/null +++ b/spec/fabricators/account_alias_fabricator.rb @@ -0,0 +1,5 @@ +Fabricator(:account_alias) do + account + acct 'test@example.com' + uri 'https://example.com/users/test' +end diff --git a/spec/fabricators/account_fabricator.rb b/spec/fabricators/account_fabricator.rb index f12464ef3..ab900c5fa 100644 --- a/spec/fabricators/account_fabricator.rb +++ b/spec/fabricators/account_fabricator.rb @@ -4,7 +4,7 @@ private_key = keypair.to_pem Fabricator(:account) do transient :suspended, :silenced - username { sequence(:username) { |i| "#{Faker::Internet.user_name(nil, %w(_))}#{i}" } } + username { sequence(:username) { |i| "#{Faker::Internet.user_name(separators: %w(_))}#{i}" } } last_webfingered_at { Time.now.utc } public_key { public_key } private_key { private_key } diff --git a/spec/fabricators/account_identity_proof_fabricator.rb b/spec/fabricators/account_identity_proof_fabricator.rb index 94f40dfd6..7b932fa96 100644 --- a/spec/fabricators/account_identity_proof_fabricator.rb +++ b/spec/fabricators/account_identity_proof_fabricator.rb @@ -1,7 +1,7 @@ Fabricator(:account_identity_proof) do account provider 'keybase' - provider_username { sequence(:provider_username) { |i| "#{Faker::Lorem.characters(15)}" } } + provider_username { sequence(:provider_username) { |i| "#{Faker::Lorem.characters(number: 15)}" } } token { sequence(:token) { |i| "#{i}#{Faker::Crypto.sha1()*2}"[0..65] } } verified false live false diff --git a/spec/fabricators/account_migration_fabricator.rb b/spec/fabricators/account_migration_fabricator.rb new file mode 100644 index 000000000..3b3fc2077 --- /dev/null +++ b/spec/fabricators/account_migration_fabricator.rb @@ -0,0 +1,6 @@ +Fabricator(:account_migration) do + account + target_account + followers_count 1234 + acct 'test@example.com' +end diff --git a/spec/fabricators/custom_emoji_category_fabricator.rb b/spec/fabricators/custom_emoji_category_fabricator.rb new file mode 100644 index 000000000..f593b95ed --- /dev/null +++ b/spec/fabricators/custom_emoji_category_fabricator.rb @@ -0,0 +1,3 @@ +Fabricator(:custom_emoji_category) do + name "MyString" +end diff --git a/spec/fabricators/domain_allow_fabricator.rb b/spec/fabricators/domain_allow_fabricator.rb new file mode 100644 index 000000000..6226b1e20 --- /dev/null +++ b/spec/fabricators/domain_allow_fabricator.rb @@ -0,0 +1,3 @@ +Fabricator(:domain_allow) do + domain "MyString" +end diff --git a/spec/fabricators/marker_fabricator.rb b/spec/fabricators/marker_fabricator.rb new file mode 100644 index 000000000..0c94150e0 --- /dev/null +++ b/spec/fabricators/marker_fabricator.rb @@ -0,0 +1,6 @@ +Fabricator(:marker) do + user + timeline 'home' + last_read_id 0 + lock_version 0 +end diff --git a/spec/fabricators/stream_entry_fabricator.rb b/spec/fabricators/stream_entry_fabricator.rb deleted file mode 100644 index f33822c7c..000000000 --- a/spec/fabricators/stream_entry_fabricator.rb +++ /dev/null @@ -1,5 +0,0 @@ -Fabricator(:stream_entry) do - account - activity { Fabricate(:status) } - hidden { [true, false].sample } -end diff --git a/spec/fabricators/subscription_fabricator.rb b/spec/fabricators/subscription_fabricator.rb deleted file mode 100644 index 347dab5df..000000000 --- a/spec/fabricators/subscription_fabricator.rb +++ /dev/null @@ -1,7 +0,0 @@ -Fabricator(:subscription) do - account - callback_url "http://example.com/callback" - secret "foobar" - expires_at "2016-11-28 11:30:07" - confirmed false -end diff --git a/spec/features/log_in_spec.rb b/spec/features/log_in_spec.rb index 53a1f9b12..f6c26cd0f 100644 --- a/spec/features/log_in_spec.rb +++ b/spec/features/log_in_spec.rb @@ -31,12 +31,12 @@ feature "Log in" do context do given(:confirmed_at) { nil } - scenario "A unconfirmed user is not able to log in" do + scenario "A unconfirmed user is able to log in" do fill_in "user_email", with: email fill_in "user_password", with: password click_on I18n.t('auth.login') - is_expected.to have_css(".flash-message", text: failure_message("unconfirmed")) + is_expected.to have_css("div.admin-wrapper") end end diff --git a/spec/fixtures/requests/webfinger.txt b/spec/fixtures/requests/webfinger.txt index edb8a2dbb..f337ecae6 100644 --- a/spec/fixtures/requests/webfinger.txt +++ b/spec/fixtures/requests/webfinger.txt @@ -8,4 +8,4 @@ Access-Control-Allow-Origin: * Vary: Accept-Encoding,Cookie Strict-Transport-Security: max-age=31536000; includeSubdomains; -{"subject":"acct:gargron@quitter.no","aliases":["https:\/\/quitter.no\/user\/7477","https:\/\/quitter.no\/gargron","https:\/\/quitter.no\/index.php\/user\/7477","https:\/\/quitter.no\/index.php\/gargron"],"links":[{"rel":"http:\/\/webfinger.net\/rel\/profile-page","type":"text\/html","href":"https:\/\/quitter.no\/gargron"},{"rel":"http:\/\/gmpg.org\/xfn\/11","type":"text\/html","href":"https:\/\/quitter.no\/gargron"},{"rel":"describedby","type":"application\/rdf+xml","href":"https:\/\/quitter.no\/gargron\/foaf"},{"rel":"http:\/\/apinamespace.org\/atom","type":"application\/atomsvc+xml","href":"https:\/\/quitter.no\/api\/statusnet\/app\/service\/gargron.xml"},{"rel":"http:\/\/apinamespace.org\/twitter","href":"https:\/\/quitter.no\/api\/"},{"rel":"http:\/\/specs.openid.net\/auth\/2.0\/provider","href":"https:\/\/quitter.no\/gargron"},{"rel":"http:\/\/schemas.google.com\/g\/2010#updates-from","type":"application\/atom+xml","href":"https:\/\/quitter.no\/api\/statuses\/user_timeline\/7477.atom"},{"rel":"magic-public-key","href":"data:application\/magic-public-key,RSA.1ZBkHTavLvxH3FzlKv4O6WtlILKRFfNami3_Rcu8EuogtXSYiS-bB6hElZfUCSHbC4uLemOA34PEhz__CDMozax1iI_t8dzjDnh1x0iFSup7pSfW9iXk_WU3Dm74yWWW2jildY41vWgrEstuQ1dJ8vVFfSJ9T_tO4c-T9y8vDI8=.AQAB"},{"rel":"salmon","href":"https:\/\/quitter.no\/main\/salmon\/user\/7477"},{"rel":"http:\/\/salmon-protocol.org\/ns\/salmon-replies","href":"https:\/\/quitter.no\/main\/salmon\/user\/7477"},{"rel":"http:\/\/salmon-protocol.org\/ns\/salmon-mention","href":"https:\/\/quitter.no\/main\/salmon\/user\/7477"},{"rel":"http:\/\/ostatus.org\/schema\/1.0\/subscribe","template":"https:\/\/quitter.no\/main\/ostatussub?profile={uri}"}]} \ No newline at end of file +{"subject":"acct:gargron@quitter.no","aliases":["https:\/\/quitter.no\/user\/7477","https:\/\/quitter.no\/gargron","https:\/\/quitter.no\/index.php\/user\/7477","https:\/\/quitter.no\/index.php\/gargron"],"links":[{"rel":"http:\/\/webfinger.net\/rel\/profile-page","type":"text\/html","href":"https:\/\/quitter.no\/gargron"},{"rel":"http:\/\/gmpg.org\/xfn\/11","type":"text\/html","href":"https:\/\/quitter.no\/gargron"},{"rel":"describedby","type":"application\/rdf+xml","href":"https:\/\/quitter.no\/gargron\/foaf"},{"rel":"http:\/\/apinamespace.org\/atom","type":"application\/atomsvc+xml","href":"https:\/\/quitter.no\/api\/statusnet\/app\/service\/gargron.xml"},{"rel":"http:\/\/apinamespace.org\/twitter","href":"https:\/\/quitter.no\/api\/"},{"rel":"http:\/\/specs.openid.net\/auth\/2.0\/provider","href":"https:\/\/quitter.no\/gargron"},{"rel":"http:\/\/schemas.google.com\/g\/2010#updates-from","type":"application\/atom+xml","href":"https:\/\/quitter.no\/api\/statuses\/user_timeline\/7477.atom"},{"rel":"magic-public-key","href":"data:application\/magic-public-key,RSA.1ZBkHTavLvxH3FzlKv4O6WtlILKRFfNami3_Rcu8EuogtXSYiS-bB6hElZfUCSHbC4uLemOA34PEhz__CDMozax1iI_t8dzjDnh1x0iFSup7pSfW9iXk_WU3Dm74yWWW2jildY41vWgrEstuQ1dJ8vVFfSJ9T_tO4c-T9y8vDI8=.AQAB"},{"rel":"salmon","href":"https:\/\/quitter.no\/main\/salmon\/user\/7477"},{"rel":"http:\/\/salmon-protocol.org\/ns\/salmon-replies","href":"https:\/\/quitter.no\/main\/salmon\/user\/7477"},{"rel":"http:\/\/salmon-protocol.org\/ns\/salmon-mention","href":"https:\/\/quitter.no\/main\/salmon\/user\/7477"},{"rel":"http:\/\/ostatus.org\/schema\/1.0\/subscribe","template":"https:\/\/quitter.no\/main\/ostatussub?profile={uri}"}]} diff --git a/spec/fixtures/xml/mastodon.atom b/spec/fixtures/xml/mastodon.atom index 9ece3bc2e..92921a938 100644 --- a/spec/fixtures/xml/mastodon.atom +++ b/spec/fixtures/xml/mastodon.atom @@ -123,7 +123,7 @@ <published>2016-10-10T00:41:31Z</published> <updated>2016-10-10T00:41:31Z</updated> <title>Social media needs MOAR cats! http://kickass.zone/media/3</title> - <content type="html"><p>Social media needs MOAR cats! <a rel="nofollow noopener" href="http://kickass.zone/media/3">http://kickass.zone/media/3</a></p></content> + <content type="html"><p>Social media needs MOAR cats! <a rel="nofollow noopener noreferrer" href="http://kickass.zone/media/3">http://kickass.zone/media/3</a></p></content> <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/9.atom"/> <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/9"/> @@ -135,7 +135,7 @@ <published>2016-10-10T00:38:39Z</published> <updated>2016-10-10T00:38:39Z</updated> <title>http://kickass.zone/media/2</title> - <content type="html"><p><a rel="nofollow noopener" href="http://kickass.zone/media/2">http://kickass.zone/media/2</a></p></content> + <content type="html"><p><a rel="nofollow noopener noreferrer" href="http://kickass.zone/media/2">http://kickass.zone/media/2</a></p></content> <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/8.atom"/> <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/8"/> diff --git a/spec/helpers/accounts_helper_spec.rb b/spec/helpers/accounts_helper_spec.rb new file mode 100644 index 000000000..2b35b23b7 --- /dev/null +++ b/spec/helpers/accounts_helper_spec.rb @@ -0,0 +1,67 @@ +require 'rails_helper' + +RSpec.describe AccountsHelper, type: :helper do + def set_not_embedded_view + params[:controller] = "not_#{StatusesHelper::EMBEDDED_CONTROLLER}" + params[:action] = "not_#{StatusesHelper::EMBEDDED_ACTION}" + end + + def set_embedded_view + params[:controller] = StatusesHelper::EMBEDDED_CONTROLLER + params[:action] = StatusesHelper::EMBEDDED_ACTION + end + + describe '#display_name' do + it 'uses the display name when it exists' do + account = Account.new(display_name: "Display", username: "Username") + + expect(helper.display_name(account)).to eq "Display" + end + + it 'uses the username when display name is nil' do + account = Account.new(display_name: nil, username: "Username") + + expect(helper.display_name(account)).to eq "Username" + end + end + + describe '#acct' do + it 'is fully qualified for embedded local accounts' do + allow(Rails.configuration.x).to receive(:local_domain).and_return('local_domain') + set_embedded_view + account = Account.new(domain: nil, username: 'user') + + acct = helper.acct(account) + + expect(acct).to eq '@user@local_domain' + end + + it 'is fully qualified for embedded foreign accounts' do + set_embedded_view + account = Account.new(domain: 'foreign_server.com', username: 'user') + + acct = helper.acct(account) + + expect(acct).to eq '@user@foreign_server.com' + end + + it 'is fully qualified for non embedded foreign accounts' do + set_not_embedded_view + account = Account.new(domain: 'foreign_server.com', username: 'user') + + acct = helper.acct(account) + + expect(acct).to eq '@user@foreign_server.com' + end + + it 'is fully qualified for non embedded local accounts' do + allow(Rails.configuration.x).to receive(:local_domain).and_return('local_domain') + set_not_embedded_view + account = Account.new(domain: nil, username: 'user') + + acct = helper.acct(account) + + expect(acct).to eq '@user@local_domain' + end + end +end diff --git a/spec/helpers/admin/account_moderation_notes_helper_spec.rb b/spec/helpers/admin/account_moderation_notes_helper_spec.rb index c07f6c4b8..622ce8806 100644 --- a/spec/helpers/admin/account_moderation_notes_helper_spec.rb +++ b/spec/helpers/admin/account_moderation_notes_helper_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Admin::AccountModerationNotesHelper, type: :helper do - include StreamEntriesHelper + include AccountsHelper describe '#admin_account_link_to' do context 'account is nil' do diff --git a/spec/helpers/stream_entries_helper_spec.rb b/spec/helpers/statuses_helper_spec.rb index 845b9974e..940ff072e 100644 --- a/spec/helpers/stream_entries_helper_spec.rb +++ b/spec/helpers/statuses_helper_spec.rb @@ -1,20 +1,6 @@ require 'rails_helper' -RSpec.describe StreamEntriesHelper, type: :helper do - describe '#display_name' do - it 'uses the display name when it exists' do - account = Account.new(display_name: "Display", username: "Username") - - expect(helper.display_name(account)).to eq "Display" - end - - it 'uses the username when display name is nil' do - account = Account.new(display_name: nil, username: "Username") - - expect(helper.display_name(account)).to eq "Username" - end - end - +RSpec.describe StatusesHelper, type: :helper do describe '#stream_link_target' do it 'returns nil if it is not an embedded view' do set_not_embedded_view @@ -29,54 +15,14 @@ RSpec.describe StreamEntriesHelper, type: :helper do end end - describe '#acct' do - it 'is fully qualified for embedded local accounts' do - allow(Rails.configuration.x).to receive(:local_domain).and_return('local_domain') - set_embedded_view - account = Account.new(domain: nil, username: 'user') - - acct = helper.acct(account) - - expect(acct).to eq '@user@local_domain' - end - - it 'is fully qualified for embedded foreign accounts' do - set_embedded_view - account = Account.new(domain: 'foreign_server.com', username: 'user') - - acct = helper.acct(account) - - expect(acct).to eq '@user@foreign_server.com' - end - - it 'is fully qualified for non embedded foreign accounts' do - set_not_embedded_view - account = Account.new(domain: 'foreign_server.com', username: 'user') - - acct = helper.acct(account) - - expect(acct).to eq '@user@foreign_server.com' - end - - it 'is fully qualified for non embedded local accounts' do - allow(Rails.configuration.x).to receive(:local_domain).and_return('local_domain') - set_not_embedded_view - account = Account.new(domain: nil, username: 'user') - - acct = helper.acct(account) - - expect(acct).to eq '@user@local_domain' - end - end - def set_not_embedded_view - params[:controller] = "not_#{StreamEntriesHelper::EMBEDDED_CONTROLLER}" - params[:action] = "not_#{StreamEntriesHelper::EMBEDDED_ACTION}" + params[:controller] = "not_#{StatusesHelper::EMBEDDED_CONTROLLER}" + params[:action] = "not_#{StatusesHelper::EMBEDDED_ACTION}" end def set_embedded_view - params[:controller] = StreamEntriesHelper::EMBEDDED_CONTROLLER - params[:action] = StreamEntriesHelper::EMBEDDED_ACTION + params[:controller] = StatusesHelper::EMBEDDED_CONTROLLER + params[:action] = StatusesHelper::EMBEDDED_ACTION end describe '#style_classes' do diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index 412609de4..b709954a3 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -261,6 +261,32 @@ RSpec.describe ActivityPub::Activity::Create do end end + + context 'with media attachments with long description' do + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + attachment: [ + { + type: 'Document', + mediaType: 'image/png', + url: 'http://example.com/attachment.png', + name: '*' * 1500, + }, + ], + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.media_attachments.map(&:description)).to include('*' * 1500) + end + end + context 'with media attachments with focal points' do let(:object_json) do { diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb index 6bbacdbe6..05112cc18 100644 --- a/spec/lib/activitypub/activity/follow_spec.rb +++ b/spec/lib/activitypub/activity/follow_spec.rb @@ -31,6 +31,36 @@ RSpec.describe ActivityPub::Activity::Follow do end end + context 'silenced account following an unlocked account' do + before do + sender.touch(:silenced_at) + subject.perform + end + + it 'does not create a follow from sender to recipient' do + expect(sender.following?(recipient)).to be false + end + + it 'creates a follow request' do + expect(sender.requested?(recipient)).to be true + end + end + + context 'unlocked account muting the sender' do + before do + recipient.mute!(sender) + subject.perform + end + + it 'creates a follow from sender to recipient' do + expect(sender.following?(recipient)).to be true + end + + it 'does not create a follow request' do + expect(sender.requested?(recipient)).to be false + end + end + context 'locked account' do before do recipient.update(locked: true) diff --git a/spec/lib/activitypub/activity/update_spec.rb b/spec/lib/activitypub/activity/update_spec.rb index fbfc585cf..42da29860 100644 --- a/spec/lib/activitypub/activity/update_spec.rb +++ b/spec/lib/activitypub/activity/update_spec.rb @@ -19,7 +19,7 @@ RSpec.describe ActivityPub::Activity::Update do end let(:actor_json) do - ActiveModelSerializers::SerializableResource.new(modified_sender, serializer: ActivityPub::ActorSerializer, key_transform: :camel_lower).as_json + ActiveModelSerializers::SerializableResource.new(modified_sender, serializer: ActivityPub::ActorSerializer, adapter: ActivityPub::Adapter).as_json end let(:json) do diff --git a/spec/lib/activitypub/tag_manager_spec.rb b/spec/lib/activitypub/tag_manager_spec.rb index 6d246629e..1c5c6f0ed 100644 --- a/spec/lib/activitypub/tag_manager_spec.rb +++ b/spec/lib/activitypub/tag_manager_spec.rb @@ -143,12 +143,6 @@ RSpec.describe ActivityPub::TagManager do expect(subject.uri_to_resource(OStatus::TagManager.instance.uri_for(status), Status)).to eq status end - it 'returns the local status for OStatus StreamEntry URL' do - status = Fabricate(:status) - stream_entry_url = account_stream_entry_url(status.account, status.stream_entry) - expect(subject.uri_to_resource(stream_entry_url, Status)).to eq status - end - it 'returns the remote status by matching URI without fragment part' do status = Fabricate(:status, uri: 'https://example.com/123') expect(subject.uri_to_resource('https://example.com/123#456', Status)).to eq status diff --git a/spec/lib/connection_pool/shared_connection_pool_spec.rb b/spec/lib/connection_pool/shared_connection_pool_spec.rb new file mode 100644 index 000000000..114464558 --- /dev/null +++ b/spec/lib/connection_pool/shared_connection_pool_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe ConnectionPool::SharedConnectionPool do + class MiniConnection + attr_reader :site + + def initialize(site) + @site = site + end + end + + subject { described_class.new(size: 5, timeout: 5) { |site| MiniConnection.new(site) } } + + describe '#with' do + it 'runs a block with a connection' do + block_run = false + + subject.with('foo') do |connection| + expect(connection).to be_a MiniConnection + block_run = true + end + + expect(block_run).to be true + end + end +end diff --git a/spec/lib/connection_pool/shared_timed_stack_spec.rb b/spec/lib/connection_pool/shared_timed_stack_spec.rb new file mode 100644 index 000000000..f680c5966 --- /dev/null +++ b/spec/lib/connection_pool/shared_timed_stack_spec.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe ConnectionPool::SharedTimedStack do + class MiniConnection + attr_reader :site + + def initialize(site) + @site = site + end + end + + subject { described_class.new(5) { |site| MiniConnection.new(site) } } + + describe '#push' do + it 'keeps the connection in the stack' do + subject.push(MiniConnection.new('foo')) + expect(subject.size).to eq 1 + end + end + + describe '#pop' do + it 'returns a connection' do + expect(subject.pop('foo')).to be_a MiniConnection + end + + it 'returns the same connection that was pushed in' do + connection = MiniConnection.new('foo') + subject.push(connection) + expect(subject.pop('foo')).to be connection + end + + it 'does not create more than maximum amount of connections' do + expect { 6.times { subject.pop('foo', 0) } }.to raise_error Timeout::Error + end + + it 'repurposes a connection for a different site when maximum amount is reached' do + 5.times { subject.push(MiniConnection.new('foo')) } + expect(subject.pop('bar')).to be_a MiniConnection + end + end + + describe '#empty?' do + it 'returns true when no connections on the stack' do + expect(subject.empty?).to be true + end + + it 'returns false when there are connections on the stack' do + subject.push(MiniConnection.new('foo')) + expect(subject.empty?).to be false + end + end + + describe '#size' do + it 'returns the number of connections on the stack' do + 2.times { subject.push(MiniConnection.new('foo')) } + expect(subject.size).to eq 2 + end + end +end diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index 13850f807..705e577a6 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -156,6 +156,14 @@ RSpec.describe FeedManager do status = Fabricate(:status, text: 'shiitake', account: jeff) expect(FeedManager.instance.filter?(:home, status, alice.id)).to be true end + + it 'returns true if phrase is contained in a poll option' do + alice.custom_filters.create!(phrase: 'farts', context: %w(home public), irreversible: true) + alice.custom_filters.create!(phrase: 'pop tarts', context: %w(home), irreversible: true) + alice.follow!(jeff) + status = Fabricate(:status, text: 'what do you prefer', poll: Fabricate(:poll, options: %w(farts POP TARts)), account: jeff) + expect(FeedManager.instance.filter?(:home, status, alice.id)).to be true + end end end @@ -246,6 +254,23 @@ RSpec.describe FeedManager do expect(FeedManager.instance.push_to_home(account, reblogs.last)).to be false end + it 'saves a new reblog of a recently-reblogged status when previous reblog has been deleted' do + account = Fabricate(:account) + reblogged = Fabricate(:status) + old_reblog = Fabricate(:status, reblog: reblogged) + + # The first reblog should be accepted + expect(FeedManager.instance.push_to_home(account, old_reblog)).to be true + + # The first reblog should be successfully removed + expect(FeedManager.instance.unpush_from_home(account, old_reblog)).to be true + + reblog = Fabricate(:status, reblog: reblogged) + + # The second reblog should be accepted + expect(FeedManager.instance.push_to_home(account, reblog)).to be true + end + it 'does not save a new reblog of a multiply-reblogged-then-unreblogged status' do account = Fabricate(:account) reblogged = Fabricate(:status) diff --git a/spec/lib/formatter_spec.rb b/spec/lib/formatter_spec.rb index 96d2fc7e0..b8108a247 100644 --- a/spec/lib/formatter_spec.rb +++ b/spec/lib/formatter_spec.rb @@ -261,7 +261,7 @@ RSpec.describe Formatter do let(:text) { ':coolcat: Beep boop' } it 'converts the shortcode to an image tag' do - is_expected.to match(/<img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/<img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end end @@ -330,7 +330,7 @@ RSpec.describe Formatter do let(:text) { ':coolcat: Beep boop' } it 'converts the shortcode to an image tag' do - is_expected.to match(/<p><img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/<p><img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end @@ -338,7 +338,7 @@ RSpec.describe Formatter do let(:text) { 'Beep :coolcat: boop' } it 'converts the shortcode to an image tag' do - is_expected.to match(/Beep <img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/Beep <img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end @@ -354,7 +354,7 @@ RSpec.describe Formatter do let(:text) { 'Beep boop :coolcat:' } it 'converts the shortcode to an image tag' do - is_expected.to match(/boop <img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/boop <img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end end @@ -377,7 +377,7 @@ RSpec.describe Formatter do let(:text) { '<p>:coolcat: Beep boop<br />' } it 'converts the shortcode to an image tag' do - is_expected.to match(/<p><img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/<p><img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end @@ -385,7 +385,7 @@ RSpec.describe Formatter do let(:text) { '<p>Beep :coolcat: boop</p>' } it 'converts the shortcode to an image tag' do - is_expected.to match(/Beep <img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/Beep <img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end @@ -401,7 +401,7 @@ RSpec.describe Formatter do let(:text) { '<p>Beep boop<br />:coolcat:</p>' } it 'converts the shortcode to an image tag' do - is_expected.to match(/<br><img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/<br><img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end end @@ -500,7 +500,7 @@ RSpec.describe Formatter do let(:text) { ':coolcat: Beep boop' } it 'converts the shortcode to an image tag' do - is_expected.to match(/<p><img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/<p><img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end @@ -508,7 +508,7 @@ RSpec.describe Formatter do let(:text) { 'Beep :coolcat: boop' } it 'converts the shortcode to an image tag' do - is_expected.to match(/Beep <img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/Beep <img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end @@ -524,7 +524,7 @@ RSpec.describe Formatter do let(:text) { 'Beep boop :coolcat:' } it 'converts the shortcode to an image tag' do - is_expected.to match(/boop <img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/boop <img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end end @@ -551,7 +551,7 @@ RSpec.describe Formatter do let(:text) { '<p>:coolcat: Beep boop<br />' } it 'converts shortcode to image tag' do - is_expected.to match(/<p><img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/<p><img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end @@ -559,7 +559,7 @@ RSpec.describe Formatter do let(:text) { '<p>Beep :coolcat: boop</p>' } it 'converts shortcode to image tag' do - is_expected.to match(/Beep <img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/Beep <img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end @@ -575,7 +575,7 @@ RSpec.describe Formatter do let(:text) { '<p>Beep boop<br />:coolcat:</p>' } it 'converts shortcode to image tag' do - is_expected.to match(/<br><img draggable="false" class="emojione" alt=":coolcat:"/) + is_expected.to match(/<br><img draggable="false" class="emojione custom-emoji" alt=":coolcat:"/) end end end diff --git a/spec/lib/language_detector_spec.rb b/spec/lib/language_detector_spec.rb index 0cb70605a..b7ba0f6c4 100644 --- a/spec/lib/language_detector_spec.rb +++ b/spec/lib/language_detector_spec.rb @@ -32,11 +32,11 @@ describe LanguageDetector do expect(result).to eq 'Our website is and also' end - it 'strips #hashtags from strings before detection' do - string = 'Hey look at all the #animals and #fish' + it 'converts #hashtags back to normal text before detection' do + string = 'Hey look at all the #animals and #FishAndChips' result = described_class.instance.send(:prepare_text, string) - expect(result).to eq 'Hey look at all the and' + expect(result).to eq 'Hey look at all the animals and fish and chips' end end diff --git a/spec/lib/ostatus/atom_serializer_spec.rb b/spec/lib/ostatus/atom_serializer_spec.rb deleted file mode 100644 index 891871c1c..000000000 --- a/spec/lib/ostatus/atom_serializer_spec.rb +++ /dev/null @@ -1,1560 +0,0 @@ -require 'rails_helper' - -RSpec.describe OStatus::AtomSerializer do - shared_examples 'follow request salmon' do - it 'appends author element with account' do - account = Fabricate(:account, domain: nil, username: 'username') - follow_request = Fabricate(:follow_request, account: account) - - follow_request_salmon = serialize(follow_request) - - expect(follow_request_salmon.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/username' - end - - it 'appends activity:object-type element with activity type' do - follow_request = Fabricate(:follow_request) - - follow_request_salmon = serialize(follow_request) - - object_type = follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity] - end - - it 'appends activity:verb element with request_friend type' do - follow_request = Fabricate(:follow_request) - - follow_request_salmon = serialize(follow_request) - - verb = follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' } - expect(verb.text).to eq OStatus::TagManager::VERBS[:request_friend] - end - - it 'appends activity:object with target account' do - target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id') - follow_request = Fabricate(:follow_request, target_account: target_account) - - follow_request_salmon = serialize(follow_request) - - object = follow_request_salmon.nodes.find { |node| node.name == 'activity:object' } - expect(object.id.text).to eq 'https://domain.test/id' - end - end - - shared_examples 'namespaces' do - it 'adds namespaces' do - element = serialize - - expect(element['xmlns']).to eq OStatus::TagManager::XMLNS - expect(element['xmlns:thr']).to eq OStatus::TagManager::THR_XMLNS - expect(element['xmlns:activity']).to eq OStatus::TagManager::AS_XMLNS - expect(element['xmlns:poco']).to eq OStatus::TagManager::POCO_XMLNS - expect(element['xmlns:media']).to eq OStatus::TagManager::MEDIA_XMLNS - expect(element['xmlns:ostatus']).to eq OStatus::TagManager::OS_XMLNS - expect(element['xmlns:mastodon']).to eq OStatus::TagManager::MTDN_XMLNS - end - end - - shared_examples 'no namespaces' do - it 'does not add namespaces' do - expect(serialize['xmlns']).to eq nil - end - end - - shared_examples 'status attributes' do - it 'appends summary element with spoiler text if present' do - status = Fabricate(:status, language: :ca, spoiler_text: 'spoiler text') - - element = serialize(status) - - summary = element.summary - expect(summary['xml:lang']).to eq 'ca' - expect(summary.text).to eq 'spoiler text' - end - - it 'does not append summary element with spoiler text if not present' do - status = Fabricate(:status, spoiler_text: '') - element = serialize(status) - element.nodes.each { |node| expect(node.name).not_to eq 'summary' } - end - - it 'appends content element with formatted status' do - status = Fabricate(:status, language: :ca, text: 'text') - - element = serialize(status) - - content = element.content - expect(content[:type]).to eq 'html' - expect(content['xml:lang']).to eq 'ca' - expect(content.text).to eq '<p>text</p>' - end - - it 'appends link elements for mentioned accounts' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status) - Fabricate(:mention, account: account, status: status) - - element = serialize(status) - - mentioned = element.nodes.find do |node| - node.name == 'link' && - node[:rel] == 'mentioned' && - node['ostatus:object-type'] == OStatus::TagManager::TYPES[:person] - end - - expect(mentioned[:href]).to eq 'https://cb6e6126.ngrok.io/users/username' - end - - it 'appends link elements for emojis' do - Fabricate(:custom_emoji) - - status = Fabricate(:status, text: ':coolcat:') - element = serialize(status) - emoji = element.nodes.find { |node| node.name == 'link' && node[:rel] == 'emoji' } - - expect(emoji[:name]).to eq 'coolcat' - expect(emoji[:href]).to_not be_blank - end - end - - describe 'render' do - it 'returns XML with emojis' do - element = Ox::Element.new('tag') - element << '💩' - xml = OStatus::AtomSerializer.render(element) - - expect(xml).to eq "<?xml version=\"1.0\"?>\n<tag>💩</tag>\n" - end - - it 'returns XML, stripping invalid characters like \b and \v' do - element = Ox::Element.new('tag') - element << "im l33t\b haxo\b\vr" - xml = OStatus::AtomSerializer.render(element) - - expect(xml).to eq "<?xml version=\"1.0\"?>\n<tag>im l33t haxor</tag>\n" - end - end - - describe '#author' do - context 'when note is present' do - it 'appends poco:note element with note for local account' do - account = Fabricate(:account, domain: nil, note: '<p>note</p>') - - author = OStatus::AtomSerializer.new.author(account) - - note = author.nodes.find { |node| node.name == 'poco:note' } - expect(note.text).to eq '<p>note</p>' - end - - it 'appends poco:note element with tags-stripped note for remote account' do - account = Fabricate(:account, domain: 'remote', note: '<p>note</p>') - - author = OStatus::AtomSerializer.new.author(account) - - note = author.nodes.find { |node| node.name == 'poco:note' } - expect(note.text).to eq 'note' - end - - it 'appends summary element with type attribute and simplified note if present' do - account = Fabricate(:account, note: 'note') - author = OStatus::AtomSerializer.new.author(account) - expect(author.summary.text).to eq '<p>note</p>' - expect(author.summary[:type]).to eq 'html' - end - end - - context 'when note is not present' do - it 'does not append poco:note element' do - account = Fabricate(:account, note: '') - author = OStatus::AtomSerializer.new.author(account) - author.nodes.each { |node| expect(node.name).not_to eq 'poco:note' } - end - - it 'does not append summary element' do - account = Fabricate(:account, note: '') - author = OStatus::AtomSerializer.new.author(account) - author.nodes.each { |node| expect(node.name).not_to eq 'summary' } - end - end - - it 'returns author element' do - account = Fabricate(:account) - author = OStatus::AtomSerializer.new.author(account) - expect(author.name).to eq 'author' - end - - it 'appends activity:object-type element with person type' do - account = Fabricate(:account, domain: nil, username: 'username') - - author = OStatus::AtomSerializer.new.author(account) - - object_type = author.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:person] - end - - it 'appends email element with username and domain for local account' do - account = Fabricate(:account, username: 'username') - author = OStatus::AtomSerializer.new.author(account) - expect(author.email.text).to eq 'username@cb6e6126.ngrok.io' - end - - it 'appends email element with username and domain for remote user' do - account = Fabricate(:account, domain: 'domain', username: 'username') - author = OStatus::AtomSerializer.new.author(account) - expect(author.email.text).to eq 'username@domain' - end - - it 'appends link element for an alternative' do - account = Fabricate(:account, domain: nil, username: 'username') - - author = OStatus::AtomSerializer.new.author(account) - - link = author.nodes.find { |node| node.name == 'link' && node[:rel] == 'alternate' && node[:type] == 'text/html' } - expect(link[:type]).to eq 'text/html' - expect(link[:rel]).to eq 'alternate' - expect(link[:href]).to eq 'https://cb6e6126.ngrok.io/@username' - end - - it 'has link element for avatar if present' do - account = Fabricate(:account, avatar: attachment_fixture('avatar.gif')) - - author = OStatus::AtomSerializer.new.author(account) - - link = author.nodes.find { |node| node.name == 'link' && node[:rel] == 'avatar' } - expect(link[:type]).to eq 'image/gif' - expect(link['media:width']).to eq '120' - expect(link['media:height']).to eq '120' - expect(link[:href]).to match /^https:\/\/cb6e6126.ngrok.io\/system\/accounts\/avatars\/.+\/original\/avatar.gif/ - end - - it 'does not have link element for avatar if not present' do - account = Fabricate(:account, avatar: nil) - - author = OStatus::AtomSerializer.new.author(account) - - author.nodes.each do |node| - expect(node[:rel]).not_to eq 'avatar' if node.name == 'link' - end - end - - it 'appends link element for header if present' do - account = Fabricate(:account, header: attachment_fixture('avatar.gif')) - - author = OStatus::AtomSerializer.new.author(account) - - link = author.nodes.find { |node| node.name == 'link' && node[:rel] == 'header' } - expect(link[:type]).to eq 'image/gif' - expect(link['media:width']).to eq '700' - expect(link['media:height']).to eq '335' - expect(link[:href]).to match /^https:\/\/cb6e6126.ngrok.io\/system\/accounts\/headers\/.+\/original\/avatar.gif/ - end - - it 'does not append link element for header if not present' do - account = Fabricate(:account, header: nil) - - author = OStatus::AtomSerializer.new.author(account) - - author.nodes.each do |node| - expect(node[:rel]).not_to eq 'header' if node.name == 'link' - end - end - - it 'appends poco:displayName element with display name if present' do - account = Fabricate(:account, display_name: 'display name') - - author = OStatus::AtomSerializer.new.author(account) - - display_name = author.nodes.find { |node| node.name == 'poco:displayName' } - expect(display_name.text).to eq 'display name' - end - - it 'does not append poco:displayName element with display name if not present' do - account = Fabricate(:account, display_name: '') - author = OStatus::AtomSerializer.new.author(account) - author.nodes.each { |node| expect(node.name).not_to eq 'poco:displayName' } - end - - it "appends mastodon:scope element with 'private' if locked" do - account = Fabricate(:account, locked: true) - - author = OStatus::AtomSerializer.new.author(account) - - scope = author.nodes.find { |node| node.name == 'mastodon:scope' } - expect(scope.text).to eq 'private' - end - - it "appends mastodon:scope element with 'public' if unlocked" do - account = Fabricate(:account, locked: false) - - author = OStatus::AtomSerializer.new.author(account) - - scope = author.nodes.find { |node| node.name == 'mastodon:scope' } - expect(scope.text).to eq 'public' - end - - it 'includes URI' do - account = Fabricate(:account, domain: nil, username: 'username') - - author = OStatus::AtomSerializer.new.author(account) - - expect(author.id.text).to eq 'https://cb6e6126.ngrok.io/users/username' - expect(author.uri.text).to eq 'https://cb6e6126.ngrok.io/users/username' - end - - it 'includes username' do - account = Fabricate(:account, username: 'username') - - author = OStatus::AtomSerializer.new.author(account) - - name = author.nodes.find { |node| node.name == 'name' } - username = author.nodes.find { |node| node.name == 'poco:preferredUsername' } - expect(name.text).to eq 'username' - expect(username.text).to eq 'username' - end - end - - describe '#entry' do - shared_examples 'not root' do - include_examples 'no namespaces' do - def serialize - subject - end - end - - it 'does not append author element' do - subject.nodes.each { |node| expect(node.name).not_to eq 'author' } - end - end - - context 'it is root' do - include_examples 'namespaces' do - def serialize - stream_entry = Fabricate(:stream_entry) - OStatus::AtomSerializer.new.entry(stream_entry, true) - end - end - - it 'appends author element' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: account) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry, true) - - expect(entry.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/username' - end - end - - context 'if status is present' do - include_examples 'status attributes' do - def serialize(status) - OStatus::AtomSerializer.new.entry(status.stream_entry, true) - end - end - - it 'appends link element for the public collection if status is publicly visible' do - status = Fabricate(:status, visibility: :public) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - mentioned_person = entry.nodes.find do |node| - node.name == 'link' && - node[:rel] == 'mentioned' && - node['ostatus:object-type'] == OStatus::TagManager::TYPES[:collection] - end - expect(mentioned_person[:href]).to eq OStatus::TagManager::COLLECTIONS[:public] - end - - it 'does not append link element for the public collection if status is not publicly visible' do - status = Fabricate(:status, visibility: :private) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - entry.nodes.each do |node| - if node.name == 'link' && - node[:rel] == 'mentioned' && - node['ostatus:object-type'] == OStatus::TagManager::TYPES[:collection] - expect(mentioned_collection[:href]).not_to eq OStatus::TagManager::COLLECTIONS[:public] - end - end - end - - it 'appends category elements for tags' do - tag = Fabricate(:tag, name: 'tag') - status = Fabricate(:status, tags: [ tag ]) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - expect(entry.category[:term]).to eq 'tag' - end - - it 'appends link elements for media attachments' do - file = attachment_fixture('attachment.jpg') - media_attachment = Fabricate(:media_attachment, file: file) - status = Fabricate(:status, media_attachments: [ media_attachment ]) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - enclosure = entry.nodes.find { |node| node.name == 'link' && node[:rel] == 'enclosure' } - expect(enclosure[:type]).to eq 'image/jpeg' - expect(enclosure[:href]).to match /^https:\/\/cb6e6126.ngrok.io\/system\/media_attachments\/files\/.+\/original\/attachment.jpg$/ - end - - it 'appends mastodon:scope element with visibility' do - status = Fabricate(:status, visibility: :public) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - scope = entry.nodes.find { |node| node.name == 'mastodon:scope' } - expect(scope.text).to eq 'public' - end - - it 'returns element whose rendered view triggers creation when processed' do - remote_account = Account.create!(username: 'username') - remote_status = Fabricate(:status, account: remote_account, created_at: '2000-01-01T00:00:00Z') - - entry = OStatus::AtomSerializer.new.entry(remote_status.stream_entry, true) - entry.nodes.delete_if { |node| node[:type] == 'application/activity+json' } # Remove ActivityPub link to simplify test - xml = OStatus::AtomSerializer.render(entry).gsub('cb6e6126.ngrok.io', 'remote.test') - - remote_status.destroy! - remote_account.destroy! - - account = Account.create!( - domain: 'remote.test', - username: 'username', - last_webfingered_at: Time.now.utc - ) - - ProcessFeedService.new.call(xml, account) - - expect(Status.find_by(uri: "https://remote.test/users/#{remote_status.account.to_param}/statuses/#{remote_status.id}")).to be_instance_of Status - end - end - - context 'if status is not present' do - it 'appends content element saying status is deleted' do - status = Fabricate(:status) - status.destroy! - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - expect(entry.content.text).to eq 'Deleted status' - end - - it 'appends title element saying the status is deleted' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: account) - status.destroy! - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - expect(entry.title.text).to eq 'username deleted status' - end - end - - context 'it is not root' do - let(:stream_entry) { Fabricate(:stream_entry) } - subject { OStatus::AtomSerializer.new.entry(stream_entry, false) } - include_examples 'not root' - end - - context 'without root parameter' do - let(:stream_entry) { Fabricate(:stream_entry) } - subject { OStatus::AtomSerializer.new.entry(stream_entry) } - include_examples 'not root' - end - - it 'returns entry element' do - stream_entry = Fabricate(:stream_entry) - entry = OStatus::AtomSerializer.new.entry(stream_entry) - expect(entry.name).to eq 'entry' - end - - it 'appends id element with unique tag' do - status = Fabricate(:status, reblog_of_id: nil, created_at: '2000-01-01T00:00:00Z') - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - expect(entry.id.text).to eq "https://cb6e6126.ngrok.io/users/#{status.account.to_param}/statuses/#{status.id}" - end - - it 'appends published element with created date' do - stream_entry = Fabricate(:stream_entry, created_at: '2000-01-01T00:00:00Z') - entry = OStatus::AtomSerializer.new.entry(stream_entry) - expect(entry.published.text).to eq '2000-01-01T00:00:00Z' - end - - it 'appends updated element with updated date' do - stream_entry = Fabricate(:stream_entry, updated_at: '2000-01-01T00:00:00Z') - entry = OStatus::AtomSerializer.new.entry(stream_entry) - expect(entry.updated.text).to eq '2000-01-01T00:00:00Z' - end - - it 'appends title element with status title' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: account, reblog_of_id: nil) - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - expect(entry.title.text).to eq 'New status by username' - end - - it 'appends activity:object-type element with object type' do - status = Fabricate(:status) - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - object_type = entry.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:note] - end - - it 'appends activity:verb element with object type' do - status = Fabricate(:status) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - object_type = entry.nodes.find { |node| node.name == 'activity:verb' } - expect(object_type.text).to eq OStatus::TagManager::VERBS[:post] - end - - it 'appends activity:object element with target if present' do - reblogged = Fabricate(:status, created_at: '2000-01-01T00:00:00Z') - reblog = Fabricate(:status, reblog: reblogged) - - entry = OStatus::AtomSerializer.new.entry(reblog.stream_entry) - - object = entry.nodes.find { |node| node.name == 'activity:object' } - expect(object.id.text).to eq "https://cb6e6126.ngrok.io/users/#{reblogged.account.to_param}/statuses/#{reblogged.id}" - end - - it 'does not append activity:object element if target is not present' do - status = Fabricate(:status, reblog_of_id: nil) - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - entry.nodes.each { |node| expect(node.name).not_to eq 'activity:object' } - end - - it 'appends link element for an alternative' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: account) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - link = entry.nodes.find { |node| node.name == 'link' && node[:rel] == 'alternate' && node[:type] == 'text/html' } - expect(link[:type]).to eq 'text/html' - expect(link[:href]).to eq "https://cb6e6126.ngrok.io/@username/#{status.id}" - end - - it 'appends link element for itself' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: account) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - link = entry.nodes.find { |node| node.name == 'link' && node[:rel] == 'self' } - expect(link[:type]).to eq 'application/atom+xml' - expect(link[:href]).to eq "https://cb6e6126.ngrok.io/users/username/updates/#{status.stream_entry.id}.atom" - end - - it 'appends thr:in-reply-to element if threaded' do - in_reply_to_status = Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reblog_of_id: nil) - reply_status = Fabricate(:status, in_reply_to_id: in_reply_to_status.id) - - entry = OStatus::AtomSerializer.new.entry(reply_status.stream_entry) - - in_reply_to = entry.nodes.find { |node| node.name == 'thr:in-reply-to' } - expect(in_reply_to[:ref]).to eq "https://cb6e6126.ngrok.io/users/#{in_reply_to_status.account.to_param}/statuses/#{in_reply_to_status.id}" - end - - it 'does not append thr:in-reply-to element if not threaded' do - status = Fabricate(:status) - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - entry.nodes.each { |node| expect(node.name).not_to eq 'thr:in-reply-to' } - end - - it 'appends ostatus:conversation if conversation id is present' do - status = Fabricate(:status) - status.conversation.update!(created_at: '2000-01-01T00:00:00Z') - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - conversation = entry.nodes.find { |node| node.name == 'ostatus:conversation' } - expect(conversation[:ref]).to eq "tag:cb6e6126.ngrok.io,2000-01-01:objectId=#{status.conversation_id}:objectType=Conversation" - end - - it 'does not append ostatus:conversation if conversation id is not present' do - status = Fabricate.build(:status, conversation_id: nil) - status.save!(validate: false) - - entry = OStatus::AtomSerializer.new.entry(status.stream_entry) - - entry.nodes.each { |node| expect(node.name).not_to eq 'ostatus:conversation' } - end - end - - describe '#feed' do - include_examples 'namespaces' do - def serialize - account = Fabricate(:account) - OStatus::AtomSerializer.new.feed(account, []) - end - end - - it 'returns feed element' do - account = Fabricate(:account) - feed = OStatus::AtomSerializer.new.feed(account, []) - expect(feed.name).to eq 'feed' - end - - it 'appends id element with account Atom URL' do - account = Fabricate(:account, username: 'username') - feed = OStatus::AtomSerializer.new.feed(account, []) - expect(feed.id.text).to eq 'https://cb6e6126.ngrok.io/users/username.atom' - end - - it 'appends title element with account display name if present' do - account = Fabricate(:account, display_name: 'display name') - feed = OStatus::AtomSerializer.new.feed(account, []) - expect(feed.title.text).to eq 'display name' - end - - it 'does not append title element with account username if account display name is not present' do - account = Fabricate(:account, display_name: '', username: 'username') - feed = OStatus::AtomSerializer.new.feed(account, []) - expect(feed.title.text).to eq 'username' - end - - it 'appends subtitle element with account note' do - account = Fabricate(:account, note: 'note') - feed = OStatus::AtomSerializer.new.feed(account, []) - expect(feed.subtitle.text).to eq 'note' - end - - it 'appends updated element with date account got updated' do - account = Fabricate(:account, updated_at: '2000-01-01T00:00:00Z') - feed = OStatus::AtomSerializer.new.feed(account, []) - expect(feed.updated.text).to eq '2000-01-01T00:00:00Z' - end - - it 'appends logo element with full asset URL for original account avatar' do - account = Fabricate(:account, avatar: attachment_fixture('avatar.gif')) - feed = OStatus::AtomSerializer.new.feed(account, []) - expect(feed.logo.text).to match /^https:\/\/cb6e6126.ngrok.io\/system\/accounts\/avatars\/.+\/original\/avatar.gif/ - end - - it 'appends author element' do - account = Fabricate(:account, username: 'username') - feed = OStatus::AtomSerializer.new.feed(account, []) - expect(feed.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/username' - end - - it 'appends link element for an alternative' do - account = Fabricate(:account, username: 'username') - - feed = OStatus::AtomSerializer.new.feed(account, []) - - link = feed.nodes.find { |node| node.name == 'link' && node[:rel] == 'alternate' && node[:type] == 'text/html' } - expect(link[:type]).to eq 'text/html' - expect(link[:href]).to eq 'https://cb6e6126.ngrok.io/@username' - end - - it 'appends link element for itself' do - account = Fabricate(:account, username: 'username') - - feed = OStatus::AtomSerializer.new.feed(account, []) - - link = feed.nodes.find { |node| node.name == 'link' && node[:rel] == 'self' } - expect(link[:type]).to eq 'application/atom+xml' - expect(link[:href]).to eq 'https://cb6e6126.ngrok.io/users/username.atom' - end - - it 'appends link element for the next if it has 20 stream entries' do - account = Fabricate(:account, username: 'username') - stream_entry = Fabricate(:stream_entry) - - feed = OStatus::AtomSerializer.new.feed(account, Array.new(20, stream_entry)) - - link = feed.nodes.find { |node| node.name == 'link' && node[:rel] == 'next' } - expect(link[:type]).to eq 'application/atom+xml' - expect(link[:href]).to eq "https://cb6e6126.ngrok.io/users/username.atom?max_id=#{stream_entry.id}" - end - - it 'does not append link element for the next if it does not have 20 stream entries' do - account = Fabricate(:account, username: 'username') - - feed = OStatus::AtomSerializer.new.feed(account, []) - - feed.nodes.each do |node| - expect(node[:rel]).not_to eq 'next' if node.name == 'link' - end - end - - it 'appends link element for hub' do - account = Fabricate(:account, username: 'username') - - feed = OStatus::AtomSerializer.new.feed(account, []) - - link = feed.nodes.find { |node| node.name == 'link' && node[:rel] == 'hub' } - expect(link[:href]).to eq 'https://cb6e6126.ngrok.io/api/push' - end - - it 'appends link element for Salmon' do - account = Fabricate(:account, username: 'username') - - feed = OStatus::AtomSerializer.new.feed(account, []) - - link = feed.nodes.find { |node| node.name == 'link' && node[:rel] == 'salmon' } - expect(link[:href]).to start_with 'https://cb6e6126.ngrok.io/api/salmon/' - end - - it 'appends stream entries' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: account) - - feed = OStatus::AtomSerializer.new.feed(account, [status.stream_entry]) - - expect(feed.entry.title.text).to eq 'New status by username' - end - end - - describe '#block_salmon' do - include_examples 'namespaces' do - def serialize - block = Fabricate(:block) - OStatus::AtomSerializer.new.block_salmon(block) - end - end - - it 'returns entry element' do - block = Fabricate(:block) - block_salmon = OStatus::AtomSerializer.new.block_salmon(block) - expect(block_salmon.name).to eq 'entry' - end - - it 'appends id element with unique tag' do - block = Fabricate(:block) - - time_before = Time.zone.now - block_salmon = OStatus::AtomSerializer.new.block_salmon(block) - time_after = Time.zone.now - - expect(block_salmon.id.text).to( - eq(OStatus::TagManager.instance.unique_tag(time_before.utc, block.id, 'Block')) - .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, block.id, 'Block'))) - ) - end - - it 'appends title element with description' do - account = Fabricate(:account, domain: nil, username: 'account') - target_account = Fabricate(:account, domain: 'remote', username: 'target_account') - block = Fabricate(:block, account: account, target_account: target_account) - - block_salmon = OStatus::AtomSerializer.new.block_salmon(block) - - expect(block_salmon.title.text).to eq 'account no longer wishes to interact with target_account@remote' - end - - it 'appends author element with account' do - account = Fabricate(:account, domain: nil, username: 'account') - block = Fabricate(:block, account: account) - - block_salmon = OStatus::AtomSerializer.new.block_salmon(block) - - expect(block_salmon.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/account' - end - - it 'appends activity:object-type element with activity type' do - block = Fabricate(:block) - - block_salmon = OStatus::AtomSerializer.new.block_salmon(block) - - object_type = block_salmon.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity] - end - - it 'appends activity:verb element with block' do - block = Fabricate(:block) - - block_salmon = OStatus::AtomSerializer.new.block_salmon(block) - - verb = block_salmon.nodes.find { |node| node.name == 'activity:verb' } - expect(verb.text).to eq OStatus::TagManager::VERBS[:block] - end - - it 'appends activity:object element with target account' do - target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id') - block = Fabricate(:block, target_account: target_account) - - block_salmon = OStatus::AtomSerializer.new.block_salmon(block) - - object = block_salmon.nodes.find { |node| node.name == 'activity:object' } - expect(object.id.text).to eq 'https://domain.test/id' - end - - it 'returns element whose rendered view triggers block when processed' do - block = Fabricate(:block) - block_salmon = OStatus::AtomSerializer.new.block_salmon(block) - xml = OStatus::AtomSerializer.render(block_salmon) - envelope = OStatus2::Salmon.new.pack(xml, block.account.keypair) - block.destroy! - - ProcessInteractionService.new.call(envelope, block.target_account) - - expect(block.account.blocking?(block.target_account)).to be true - end - end - - describe '#unblock_salmon' do - include_examples 'namespaces' do - def serialize - block = Fabricate(:block) - OStatus::AtomSerializer.new.unblock_salmon(block) - end - end - - it 'returns entry element' do - block = Fabricate(:block) - unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) - expect(unblock_salmon.name).to eq 'entry' - end - - it 'appends id element with unique tag' do - block = Fabricate(:block) - - time_before = Time.zone.now - unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) - time_after = Time.zone.now - - expect(unblock_salmon.id.text).to( - eq(OStatus::TagManager.instance.unique_tag(time_before.utc, block.id, 'Block')) - .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, block.id, 'Block'))) - ) - end - - it 'appends title element with description' do - account = Fabricate(:account, domain: nil, username: 'account') - target_account = Fabricate(:account, domain: 'remote', username: 'target_account') - block = Fabricate(:block, account: account, target_account: target_account) - - unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) - - expect(unblock_salmon.title.text).to eq 'account no longer blocks target_account@remote' - end - - it 'appends author element with account' do - account = Fabricate(:account, domain: nil, username: 'account') - block = Fabricate(:block, account: account) - - unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) - - expect(unblock_salmon.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/account' - end - - it 'appends activity:object-type element with activity type' do - block = Fabricate(:block) - - unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) - - object_type = unblock_salmon.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity] - end - - it 'appends activity:verb element with block' do - block = Fabricate(:block) - - unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) - - verb = unblock_salmon.nodes.find { |node| node.name == 'activity:verb' } - expect(verb.text).to eq OStatus::TagManager::VERBS[:unblock] - end - - it 'appends activity:object element with target account' do - target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id') - block = Fabricate(:block, target_account: target_account) - - unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) - - object = unblock_salmon.nodes.find { |node| node.name == 'activity:object' } - expect(object.id.text).to eq 'https://domain.test/id' - end - - it 'returns element whose rendered view triggers block when processed' do - block = Fabricate(:block) - unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block) - xml = OStatus::AtomSerializer.render(unblock_salmon) - envelope = OStatus2::Salmon.new.pack(xml, block.account.keypair) - - ProcessInteractionService.new.call(envelope, block.target_account) - - expect { block.reload }.to raise_error ActiveRecord::RecordNotFound - end - end - - describe '#favourite_salmon' do - include_examples 'namespaces' do - def serialize - favourite = Fabricate(:favourite) - OStatus::AtomSerializer.new.favourite_salmon(favourite) - end - end - - it 'returns entry element' do - favourite = Fabricate(:favourite) - favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) - expect(favourite_salmon.name).to eq 'entry' - end - - it 'appends id element with unique tag' do - favourite = Fabricate(:favourite, created_at: '2000-01-01T00:00:00Z') - favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) - expect(favourite_salmon.id.text).to eq "tag:cb6e6126.ngrok.io,2000-01-01:objectId=#{favourite.id}:objectType=Favourite" - end - - it 'appends author element with account' do - account = Fabricate(:account, domain: nil, username: 'username') - favourite = Fabricate(:favourite, account: account) - - favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) - - expect(favourite_salmon.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/username' - end - - it 'appends activity:object-type element with activity type' do - favourite = Fabricate(:favourite) - - favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) - - object_type = favourite_salmon.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq 'http://activitystrea.ms/schema/1.0/activity' - end - - it 'appends activity:verb element with favorite' do - favourite = Fabricate(:favourite) - - favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) - - verb = favourite_salmon.nodes.find { |node| node.name == 'activity:verb' } - expect(verb.text).to eq OStatus::TagManager::VERBS[:favorite] - end - - it 'appends activity:object element with status' do - status = Fabricate(:status, created_at: '2000-01-01T00:00:00Z') - favourite = Fabricate(:favourite, status: status) - - favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) - - object = favourite_salmon.nodes.find { |node| node.name == 'activity:object' } - expect(object.id.text).to eq "https://cb6e6126.ngrok.io/users/#{status.account.to_param}/statuses/#{status.id}" - end - - it 'appends thr:in-reply-to element for status' do - status_account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: status_account, created_at: '2000-01-01T00:00:00Z') - favourite = Fabricate(:favourite, status: status) - - favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) - - in_reply_to = favourite_salmon.nodes.find { |node| node.name == 'thr:in-reply-to' } - expect(in_reply_to.ref).to eq "https://cb6e6126.ngrok.io/users/#{status.account.to_param}/statuses/#{status.id}" - expect(in_reply_to.href).to eq "https://cb6e6126.ngrok.io/@username/#{status.id}" - end - - it 'includes description' do - account = Fabricate(:account, domain: nil, username: 'account') - status_account = Fabricate(:account, domain: 'remote', username: 'status_account') - status = Fabricate(:status, account: status_account) - favourite = Fabricate(:favourite, account: account, status: status) - - favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) - - expect(favourite_salmon.title.text).to eq 'account favourited a status by status_account@remote' - expect(favourite_salmon.content.text).to eq 'account favourited a status by status_account@remote' - end - - it 'returns element whose rendered view triggers favourite when processed' do - favourite = Fabricate(:favourite) - favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite) - xml = OStatus::AtomSerializer.render(favourite_salmon) - envelope = OStatus2::Salmon.new.pack(xml, favourite.account.keypair) - favourite.destroy! - - ProcessInteractionService.new.call(envelope, favourite.status.account) - expect(favourite.account.favourited?(favourite.status)).to be true - end - end - - describe '#unfavourite_salmon' do - include_examples 'namespaces' do - def serialize - favourite = Fabricate(:favourite) - OStatus::AtomSerializer.new.favourite_salmon(favourite) - end - end - - it 'returns entry element' do - favourite = Fabricate(:favourite) - unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) - expect(unfavourite_salmon.name).to eq 'entry' - end - - it 'appends id element with unique tag' do - favourite = Fabricate(:favourite) - - time_before = Time.zone.now - unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) - time_after = Time.zone.now - - expect(unfavourite_salmon.id.text).to( - eq(OStatus::TagManager.instance.unique_tag(time_before.utc, favourite.id, 'Favourite')) - .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, favourite.id, 'Favourite'))) - ) - end - - it 'appends author element with account' do - account = Fabricate(:account, domain: nil, username: 'username') - favourite = Fabricate(:favourite, account: account) - - unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) - - expect(unfavourite_salmon.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/username' - end - - it 'appends activity:object-type element with activity type' do - favourite = Fabricate(:favourite) - - unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) - - object_type = unfavourite_salmon.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq 'http://activitystrea.ms/schema/1.0/activity' - end - - it 'appends activity:verb element with favorite' do - favourite = Fabricate(:favourite) - - unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) - - verb = unfavourite_salmon.nodes.find { |node| node.name == 'activity:verb' } - expect(verb.text).to eq OStatus::TagManager::VERBS[:unfavorite] - end - - it 'appends activity:object element with status' do - status = Fabricate(:status, created_at: '2000-01-01T00:00:00Z') - favourite = Fabricate(:favourite, status: status) - - unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) - - object = unfavourite_salmon.nodes.find { |node| node.name == 'activity:object' } - expect(object.id.text).to eq "https://cb6e6126.ngrok.io/users/#{status.account.to_param}/statuses/#{status.id}" - end - - it 'appends thr:in-reply-to element for status' do - status_account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: status_account, created_at: '2000-01-01T00:00:00Z') - favourite = Fabricate(:favourite, status: status) - - unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) - - in_reply_to = unfavourite_salmon.nodes.find { |node| node.name == 'thr:in-reply-to' } - expect(in_reply_to.ref).to eq "https://cb6e6126.ngrok.io/users/#{status.account.to_param}/statuses/#{status.id}" - expect(in_reply_to.href).to eq "https://cb6e6126.ngrok.io/@username/#{status.id}" - end - - it 'includes description' do - account = Fabricate(:account, domain: nil, username: 'account') - status_account = Fabricate(:account, domain: 'remote', username: 'status_account') - status = Fabricate(:status, account: status_account) - favourite = Fabricate(:favourite, account: account, status: status) - - unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) - - expect(unfavourite_salmon.title.text).to eq 'account no longer favourites a status by status_account@remote' - expect(unfavourite_salmon.content.text).to eq 'account no longer favourites a status by status_account@remote' - end - - it 'returns element whose rendered view triggers unfavourite when processed' do - favourite = Fabricate(:favourite) - unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite) - xml = OStatus::AtomSerializer.render(unfavourite_salmon) - envelope = OStatus2::Salmon.new.pack(xml, favourite.account.keypair) - - ProcessInteractionService.new.call(envelope, favourite.status.account) - expect { favourite.reload }.to raise_error ActiveRecord::RecordNotFound - end - end - - describe '#follow_salmon' do - include_examples 'namespaces' do - def serialize - follow = Fabricate(:follow) - OStatus::AtomSerializer.new.follow_salmon(follow) - end - end - - it 'returns entry element' do - follow = Fabricate(:follow) - follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) - expect(follow_salmon.name).to eq 'entry' - end - - it 'appends id element with unique tag' do - follow = Fabricate(:follow, created_at: '2000-01-01T00:00:00Z') - follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) - expect(follow_salmon.id.text).to eq "tag:cb6e6126.ngrok.io,2000-01-01:objectId=#{follow.id}:objectType=Follow" - end - - it 'appends author element with account' do - account = Fabricate(:account, domain: nil, username: 'username') - follow = Fabricate(:follow, account: account) - - follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) - - expect(follow_salmon.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/username' - end - - it 'appends activity:object-type element with activity type' do - follow = Fabricate(:follow) - - follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) - - object_type = follow_salmon.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity] - end - - it 'appends activity:verb element with follow' do - follow = Fabricate(:follow) - - follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) - - verb = follow_salmon.nodes.find { |node| node.name == 'activity:verb' } - expect(verb.text).to eq OStatus::TagManager::VERBS[:follow] - end - - it 'appends activity:object element with target account' do - target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id') - follow = Fabricate(:follow, target_account: target_account) - - follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) - - object = follow_salmon.nodes.find { |node| node.name == 'activity:object' } - expect(object.id.text).to eq 'https://domain.test/id' - end - - it 'includes description' do - account = Fabricate(:account, domain: nil, username: 'account') - target_account = Fabricate(:account, domain: 'remote', username: 'target_account') - follow = Fabricate(:follow, account: account, target_account: target_account) - - follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) - - expect(follow_salmon.title.text).to eq 'account started following target_account@remote' - expect(follow_salmon.content.text).to eq 'account started following target_account@remote' - end - - it 'returns element whose rendered view triggers follow when processed' do - follow = Fabricate(:follow) - follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow) - xml = OStatus::AtomSerializer.render(follow_salmon) - follow.destroy! - envelope = OStatus2::Salmon.new.pack(xml, follow.account.keypair) - - ProcessInteractionService.new.call(envelope, follow.target_account) - - expect(follow.account.following?(follow.target_account)).to be true - end - end - - describe '#unfollow_salmon' do - include_examples 'namespaces' do - def serialize - follow = Fabricate(:follow) - follow.destroy! - OStatus::AtomSerializer.new.unfollow_salmon(follow) - end - end - - it 'returns entry element' do - follow = Fabricate(:follow) - follow.destroy! - - unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) - - expect(unfollow_salmon.name).to eq 'entry' - end - - it 'appends id element with unique tag' do - follow = Fabricate(:follow) - follow.destroy! - - time_before = Time.zone.now - unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) - time_after = Time.zone.now - - expect(unfollow_salmon.id.text).to( - eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow.id, 'Follow')) - .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, follow.id, 'Follow'))) - ) - end - - it 'appends title element with description' do - account = Fabricate(:account, domain: nil, username: 'account') - target_account = Fabricate(:account, domain: 'remote', username: 'target_account') - follow = Fabricate(:follow, account: account, target_account: target_account) - follow.destroy! - - unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) - - expect(unfollow_salmon.title.text).to eq 'account is no longer following target_account@remote' - end - - it 'appends content element with description' do - account = Fabricate(:account, domain: nil, username: 'account') - target_account = Fabricate(:account, domain: 'remote', username: 'target_account') - follow = Fabricate(:follow, account: account, target_account: target_account) - follow.destroy! - - unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) - - expect(unfollow_salmon.content.text).to eq 'account is no longer following target_account@remote' - end - - it 'appends author element with account' do - account = Fabricate(:account, domain: nil, username: 'username') - follow = Fabricate(:follow, account: account) - follow.destroy! - - unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) - - expect(unfollow_salmon.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/username' - end - - it 'appends activity:object-type element with activity type' do - follow = Fabricate(:follow) - follow.destroy! - - unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) - - object_type = unfollow_salmon.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity] - end - - it 'appends activity:verb element with follow' do - follow = Fabricate(:follow) - follow.destroy! - - unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) - - verb = unfollow_salmon.nodes.find { |node| node.name == 'activity:verb' } - expect(verb.text).to eq OStatus::TagManager::VERBS[:unfollow] - end - - it 'appends activity:object element with target account' do - target_account = Fabricate(:account, domain: 'domain.test', uri: 'https://domain.test/id') - follow = Fabricate(:follow, target_account: target_account) - follow.destroy! - - unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) - - object = unfollow_salmon.nodes.find { |node| node.name == 'activity:object' } - expect(object.id.text).to eq 'https://domain.test/id' - end - - it 'returns element whose rendered view triggers unfollow when processed' do - follow = Fabricate(:follow) - follow.destroy! - unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow) - xml = OStatus::AtomSerializer.render(unfollow_salmon) - follow.account.follow!(follow.target_account) - envelope = OStatus2::Salmon.new.pack(xml, follow.account.keypair) - - ProcessInteractionService.new.call(envelope, follow.target_account) - - expect(follow.account.following?(follow.target_account)).to be false - end - end - - describe '#follow_request_salmon' do - include_examples 'namespaces' do - def serialize - follow_request = Fabricate(:follow_request) - OStatus::AtomSerializer.new.follow_request_salmon(follow_request) - end - end - - context do - def serialize(follow_request) - OStatus::AtomSerializer.new.follow_request_salmon(follow_request) - end - - it_behaves_like 'follow request salmon' - - it 'appends id element with unique tag' do - follow_request = Fabricate(:follow_request, created_at: '2000-01-01T00:00:00Z') - follow_request_salmon = serialize(follow_request) - expect(follow_request_salmon.id.text).to eq "tag:cb6e6126.ngrok.io,2000-01-01:objectId=#{follow_request.id}:objectType=FollowRequest" - end - - it 'appends title element with description' do - account = Fabricate(:account, domain: nil, username: 'account') - target_account = Fabricate(:account, domain: 'remote', username: 'target_account') - follow_request = Fabricate(:follow_request, account: account, target_account: target_account) - follow_request_salmon = serialize(follow_request) - expect(follow_request_salmon.title.text).to eq 'account requested to follow target_account@remote' - end - - it 'returns element whose rendered view triggers follow request when processed' do - follow_request = Fabricate(:follow_request) - follow_request_salmon = serialize(follow_request) - xml = OStatus::AtomSerializer.render(follow_request_salmon) - envelope = OStatus2::Salmon.new.pack(xml, follow_request.account.keypair) - follow_request.destroy! - - ProcessInteractionService.new.call(envelope, follow_request.target_account) - - expect(follow_request.account.requested?(follow_request.target_account)).to eq true - end - end - end - - describe '#authorize_follow_request_salmon' do - include_examples 'namespaces' do - def serialize - follow_request = Fabricate(:follow_request) - OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request) - end - end - - it_behaves_like 'follow request salmon' do - def serialize(follow_request) - authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request) - authorize_follow_request_salmon.nodes.find { |node| node.name == 'activity:object' } - end - end - - it 'appends id element with unique tag' do - follow_request = Fabricate(:follow_request) - - time_before = Time.zone.now - authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request) - time_after = Time.zone.now - - expect(authorize_follow_request_salmon.id.text).to( - eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest')) - .or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest'))) - ) - end - - it 'appends title element with description' do - account = Fabricate(:account, domain: 'remote', username: 'account') - target_account = Fabricate(:account, domain: nil, username: 'target_account') - follow_request = Fabricate(:follow_request, account: account, target_account: target_account) - - authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request) - - expect(authorize_follow_request_salmon.title.text).to eq 'target_account authorizes follow request by account@remote' - end - - it 'appends activity:object-type element with activity type' do - follow_request = Fabricate(:follow_request) - - authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request) - - object_type = authorize_follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity] - end - - it 'appends activity:verb element with authorize' do - follow_request = Fabricate(:follow_request) - - authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request) - - verb = authorize_follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' } - expect(verb.text).to eq OStatus::TagManager::VERBS[:authorize] - end - - it 'returns element whose rendered view creates follow from follow request when processed' do - follow_request = Fabricate(:follow_request) - authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request) - xml = OStatus::AtomSerializer.render(authorize_follow_request_salmon) - envelope = OStatus2::Salmon.new.pack(xml, follow_request.target_account.keypair) - - ProcessInteractionService.new.call(envelope, follow_request.account) - - expect(follow_request.account.following?(follow_request.target_account)).to eq true - expect { follow_request.reload }.to raise_error ActiveRecord::RecordNotFound - end - end - - describe '#reject_follow_request_salmon' do - include_examples 'namespaces' do - def serialize - follow_request = Fabricate(:follow_request) - OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request) - end - end - - it_behaves_like 'follow request salmon' do - def serialize(follow_request) - reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request) - reject_follow_request_salmon.nodes.find { |node| node.name == 'activity:object' } - end - end - - it 'appends id element with unique tag' do - follow_request = Fabricate(:follow_request) - - time_before = Time.zone.now - reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request) - time_after = Time.zone.now - - expect(reject_follow_request_salmon.id.text).to( - eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest')) - .or(OStatus::TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest')) - ) - end - - it 'appends title element with description' do - account = Fabricate(:account, domain: 'remote', username: 'account') - target_account = Fabricate(:account, domain: nil, username: 'target_account') - follow_request = Fabricate(:follow_request, account: account, target_account: target_account) - reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request) - expect(reject_follow_request_salmon.title.text).to eq 'target_account rejects follow request by account@remote' - end - - it 'appends activity:object-type element with activity type' do - follow_request = Fabricate(:follow_request) - reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request) - object_type = reject_follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity] - end - - it 'appends activity:verb element with authorize' do - follow_request = Fabricate(:follow_request) - reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request) - verb = reject_follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' } - expect(verb.text).to eq OStatus::TagManager::VERBS[:reject] - end - - it 'returns element whose rendered view deletes follow request when processed' do - follow_request = Fabricate(:follow_request) - reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request) - xml = OStatus::AtomSerializer.render(reject_follow_request_salmon) - envelope = OStatus2::Salmon.new.pack(xml, follow_request.target_account.keypair) - - ProcessInteractionService.new.call(envelope, follow_request.account) - - expect(follow_request.account.following?(follow_request.target_account)).to eq false - expect { follow_request.reload }.to raise_error ActiveRecord::RecordNotFound - end - end - - describe '#object' do - include_examples 'status attributes' do - def serialize(status) - OStatus::AtomSerializer.new.object(status) - end - end - - it 'returns activity:object element' do - status = Fabricate(:status) - object = OStatus::AtomSerializer.new.object(status) - expect(object.name).to eq 'activity:object' - end - - it 'appends id element with URL for status' do - status = Fabricate(:status, created_at: '2000-01-01T00:00:00Z') - object = OStatus::AtomSerializer.new.object(status) - expect(object.id.text).to eq "https://cb6e6126.ngrok.io/users/#{status.account.to_param}/statuses/#{status.id}" - end - - it 'appends published element with created date' do - status = Fabricate(:status, created_at: '2000-01-01T00:00:00Z') - object = OStatus::AtomSerializer.new.object(status) - expect(object.published.text).to eq '2000-01-01T00:00:00Z' - end - - it 'appends updated element with updated date' do - status = Fabricate(:status) - status.updated_at = '2000-01-01T00:00:00Z' - object = OStatus::AtomSerializer.new.object(status) - expect(object.updated.text).to eq '2000-01-01T00:00:00Z' - end - - it 'appends title element with title' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: account) - - object = OStatus::AtomSerializer.new.object(status) - - expect(object.title.text).to eq 'New status by username' - end - - it 'appends author element with account' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: account) - - entry = OStatus::AtomSerializer.new.object(status) - - expect(entry.author.id.text).to eq 'https://cb6e6126.ngrok.io/users/username' - end - - it 'appends activity:object-type element with object type' do - status = Fabricate(:status) - - entry = OStatus::AtomSerializer.new.object(status) - - object_type = entry.nodes.find { |node| node.name == 'activity:object-type' } - expect(object_type.text).to eq OStatus::TagManager::TYPES[:note] - end - - it 'appends activity:verb element with verb' do - status = Fabricate(:status) - - entry = OStatus::AtomSerializer.new.object(status) - - object_type = entry.nodes.find { |node| node.name == 'activity:verb' } - expect(object_type.text).to eq OStatus::TagManager::VERBS[:post] - end - - it 'appends link element for an alternative' do - account = Fabricate(:account, username: 'username') - status = Fabricate(:status, account: account) - - entry = OStatus::AtomSerializer.new.object(status) - - link = entry.nodes.find { |node| node.name == 'link' && node[:rel] == 'alternate' && node[:type] == 'text/html' } - expect(link[:type]).to eq 'text/html' - expect(link[:href]).to eq "https://cb6e6126.ngrok.io/@username/#{status.id}" - end - - it 'appends thr:in-reply-to element if it is a reply and thread is not nil' do - account = Fabricate(:account, username: 'username') - thread = Fabricate(:status, account: account, created_at: '2000-01-01T00:00:00Z') - reply = Fabricate(:status, thread: thread) - - entry = OStatus::AtomSerializer.new.object(reply) - - in_reply_to = entry.nodes.find { |node| node.name == 'thr:in-reply-to' } - expect(in_reply_to.ref).to eq "https://cb6e6126.ngrok.io/users/#{thread.account.to_param}/statuses/#{thread.id}" - expect(in_reply_to.href).to eq "https://cb6e6126.ngrok.io/@username/#{thread.id}" - end - - it 'does not append thr:in-reply-to element if thread is nil' do - status = Fabricate(:status, thread: nil) - entry = OStatus::AtomSerializer.new.object(status) - entry.nodes.each { |node| expect(node.name).not_to eq 'thr:in-reply-to' } - end - - it 'does not append ostatus:conversation element if conversation_id is nil' do - status = Fabricate.build(:status, conversation_id: nil) - status.save!(validate: false) - - entry = OStatus::AtomSerializer.new.object(status) - - entry.nodes.each { |node| expect(node.name).not_to eq 'ostatus:conversation' } - end - - it 'appends ostatus:conversation element if conversation_id is not nil' do - status = Fabricate(:status) - status.conversation.update!(created_at: '2000-01-01T00:00:00Z') - - entry = OStatus::AtomSerializer.new.object(status) - - conversation = entry.nodes.find { |node| node.name == 'ostatus:conversation' } - expect(conversation[:ref]).to eq "tag:cb6e6126.ngrok.io,2000-01-01:objectId=#{status.conversation.id}:objectType=Conversation" - end - end -end diff --git a/spec/lib/request_pool_spec.rb b/spec/lib/request_pool_spec.rb new file mode 100644 index 000000000..4a144d7c7 --- /dev/null +++ b/spec/lib/request_pool_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe RequestPool do + subject { described_class.new } + + describe '#with' do + it 'returns a HTTP client for a host' do + subject.with('http://example.com') do |http_client| + expect(http_client).to be_a HTTP::Client + end + end + + it 'returns the same instance of HTTP client within the same thread for the same host' do + test_client = nil + + subject.with('http://example.com') { |http_client| test_client = http_client } + expect(test_client).to_not be_nil + subject.with('http://example.com') { |http_client| expect(http_client).to be test_client } + end + + it 'returns different HTTP clients for different hosts' do + test_client = nil + + subject.with('http://example.com') { |http_client| test_client = http_client } + expect(test_client).to_not be_nil + subject.with('http://example.org') { |http_client| expect(http_client).to_not be test_client } + end + + it 'grows to the number of threads accessing it' do + stub_request(:get, 'http://example.com/').to_return(status: 200, body: 'Hello!') + + subject + + threads = 20.times.map do |i| + Thread.new do + 20.times do + subject.with('http://example.com') do |http_client| + http_client.get('/').flush + end + end + end + end + + threads.map(&:join) + + expect(subject.size).to be > 1 + end + + it 'closes idle connections' do + stub_request(:get, 'http://example.com/').to_return(status: 200, body: 'Hello!') + + subject.with('http://example.com') do |http_client| + http_client.get('/').flush + end + + expect(subject.size).to eq 1 + sleep RequestPool::MAX_IDLE_TIME + 30 + 1 + expect(subject.size).to eq 0 + end + end +end diff --git a/spec/lib/sanitize_config_spec.rb b/spec/lib/sanitize_config_spec.rb new file mode 100644 index 000000000..c5143bcef --- /dev/null +++ b/spec/lib/sanitize_config_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'rails_helper' +require Rails.root.join('app', 'lib', 'sanitize_config.rb') + +describe Sanitize::Config do + describe '::MASTODON_STRICT' do + subject { Sanitize::Config::MASTODON_STRICT } + + it 'keeps h1' do + expect(Sanitize.fragment('<h1>Foo</h1>', subject)).to eq '<h1>Foo</h1>' + end + + it 'keeps ul' do + expect(Sanitize.fragment('<p>Check out:</p><ul><li>Foo</li><li>Bar</li></ul>', subject)).to eq '<p>Check out:</p><ul><li>Foo</li><li>Bar</li></ul>' + end + end +end diff --git a/spec/lib/spam_check_spec.rb b/spec/lib/spam_check_spec.rb new file mode 100644 index 000000000..d4d66a499 --- /dev/null +++ b/spec/lib/spam_check_spec.rb @@ -0,0 +1,192 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe SpamCheck do + let!(:sender) { Fabricate(:account) } + let!(:alice) { Fabricate(:account, username: 'alice') } + let!(:bob) { Fabricate(:account, username: 'bob') } + + def status_with_html(text, options = {}) + status = PostStatusService.new.call(sender, { text: text }.merge(options)) + status.update_columns(text: Formatter.instance.format(status), local: false) + status + end + + describe '#hashable_text' do + it 'removes mentions from HTML for remote statuses' do + status = status_with_html('@alice Hello') + expect(described_class.new(status).hashable_text).to eq 'hello' + end + + it 'removes mentions from text for local statuses' do + status = PostStatusService.new.call(alice, text: "Hey @#{sender.username}, how are you?") + expect(described_class.new(status).hashable_text).to eq 'hey , how are you?' + end + end + + describe '#insufficient_data?' do + it 'returns true when there is no text' do + status = status_with_html('@alice') + expect(described_class.new(status).insufficient_data?).to be true + end + + it 'returns false when there is text' do + status = status_with_html('@alice h') + expect(described_class.new(status).insufficient_data?).to be false + end + end + + describe '#digest' do + it 'returns a string' do + status = status_with_html('@alice Hello world') + expect(described_class.new(status).digest).to be_a String + end + end + + describe '#spam?' do + it 'returns false for a unique status' do + status = status_with_html('@alice Hello') + expect(described_class.new(status).spam?).to be false + end + + it 'returns false for different statuses to the same recipient' do + status1 = status_with_html('@alice Hello') + described_class.new(status1).remember! + status2 = status_with_html('@alice Are you available to talk?') + expect(described_class.new(status2).spam?).to be false + end + + it 'returns false for statuses with different content warnings' do + status1 = status_with_html('@alice Are you available to talk?') + described_class.new(status1).remember! + status2 = status_with_html('@alice Are you available to talk?', spoiler_text: 'This is a completely different matter than what I was talking about previously, I swear!') + expect(described_class.new(status2).spam?).to be false + end + + it 'returns false for different statuses to different recipients' do + status1 = status_with_html('@alice How is it going?') + described_class.new(status1).remember! + status2 = status_with_html('@bob Are you okay?') + expect(described_class.new(status2).spam?).to be false + end + + it 'returns false for very short different statuses to different recipients' do + status1 = status_with_html('@alice 🙄') + described_class.new(status1).remember! + status2 = status_with_html('@bob Huh?') + expect(described_class.new(status2).spam?).to be false + end + + it 'returns false for statuses with no text' do + status1 = status_with_html('@alice') + described_class.new(status1).remember! + status2 = status_with_html('@bob') + expect(described_class.new(status2).spam?).to be false + end + + it 'returns true for duplicate statuses to the same recipient' do + described_class::THRESHOLD.times do + status1 = status_with_html('@alice Hello') + described_class.new(status1).remember! + end + + status2 = status_with_html('@alice Hello') + expect(described_class.new(status2).spam?).to be true + end + + it 'returns true for duplicate statuses to different recipients' do + described_class::THRESHOLD.times do + status1 = status_with_html('@alice Hello') + described_class.new(status1).remember! + end + + status2 = status_with_html('@bob Hello') + expect(described_class.new(status2).spam?).to be true + end + + it 'returns true for nearly identical statuses with random numbers' do + source_text = 'Sodium, atomic number 11, was first isolated by Humphry Davy in 1807. A chemical component of salt, he named it Na in honor of the saltiest region on earth, North America.' + + described_class::THRESHOLD.times do + status1 = status_with_html('@alice ' + source_text + ' 1234') + described_class.new(status1).remember! + end + + status2 = status_with_html('@bob ' + source_text + ' 9568') + expect(described_class.new(status2).spam?).to be true + end + end + + describe '#skip?' do + it 'returns true when the sender is already silenced' do + status = status_with_html('@alice Hello') + sender.silence! + expect(described_class.new(status).skip?).to be true + end + + it 'returns true when the mentioned person follows the sender' do + status = status_with_html('@alice Hello') + alice.follow!(sender) + expect(described_class.new(status).skip?).to be true + end + + it 'returns false when even one mentioned person doesn\'t follow the sender' do + status = status_with_html('@alice @bob Hello') + alice.follow!(sender) + expect(described_class.new(status).skip?).to be false + end + + it 'returns true when the sender is replying to a status that mentions the sender' do + parent = PostStatusService.new.call(alice, text: "Hey @#{sender.username}, how are you?") + status = status_with_html('@alice @bob Hello', thread: parent) + expect(described_class.new(status).skip?).to be true + end + end + + describe '#remember!' do + let(:status) { status_with_html('@alice') } + let(:spam_check) { described_class.new(status) } + let(:redis_key) { spam_check.send(:redis_key) } + + it 'remembers' do + expect(Redis.current.exists(redis_key)).to be true + spam_check.remember! + expect(Redis.current.exists(redis_key)).to be true + end + end + + describe '#reset!' do + let(:status) { status_with_html('@alice') } + let(:spam_check) { described_class.new(status) } + let(:redis_key) { spam_check.send(:redis_key) } + + before do + spam_check.remember! + end + + it 'resets' do + expect(Redis.current.exists(redis_key)).to be true + spam_check.reset! + expect(Redis.current.exists(redis_key)).to be false + end + end + + describe '#flag!' do + let!(:status1) { status_with_html('@alice General Kenobi you are a bold one') } + let!(:status2) { status_with_html('@alice @bob General Kenobi, you are a bold one') } + + before do + described_class.new(status1).remember! + described_class.new(status2).flag! + end + + it 'creates a report about the account' do + expect(sender.targeted_reports.unresolved.count).to eq 1 + end + + it 'attaches both matching statuses to the report' do + expect(sender.targeted_reports.first.status_ids).to include(status1.id, status2.id) + end + end +end diff --git a/spec/lib/status_finder_spec.rb b/spec/lib/status_finder_spec.rb index 6b4ee434f..61483f4bf 100644 --- a/spec/lib/status_finder_spec.rb +++ b/spec/lib/status_finder_spec.rb @@ -25,15 +25,6 @@ describe StatusFinder do end end - context 'with a stream entry url' do - let(:stream_entry) { Fabricate(:stream_entry) } - let(:url) { account_stream_entry_url(stream_entry.account, stream_entry) } - - it 'finds the stream entry' do - expect(subject.status).to eq(stream_entry.status) - end - end - context 'with a remote url even if id exists on local' do let(:status) { Fabricate(:status) } let(:url) { "https://example.com/users/test/statuses/#{status.id}" } diff --git a/spec/lib/tag_manager_spec.rb b/spec/lib/tag_manager_spec.rb index 3a804ac0f..e9a7aa934 100644 --- a/spec/lib/tag_manager_spec.rb +++ b/spec/lib/tag_manager_spec.rb @@ -119,46 +119,4 @@ RSpec.describe TagManager do expect(TagManager.instance.same_acct?('username', 'incorrect@Cb6E6126.nGrOk.Io')).to eq false end end - - describe '#url_for' do - let(:alice) { Fabricate(:account, username: 'alice') } - - subject { TagManager.instance.url_for(target) } - - context 'activity object' do - let(:target) { Fabricate(:status, account: alice, reblog: Fabricate(:status)).stream_entry } - - it 'returns the unique tag for status' do - expect(target.object_type).to eq :activity - is_expected.to eq "https://cb6e6126.ngrok.io/@alice/#{target.id}" - end - end - - context 'comment object' do - let(:target) { Fabricate(:status, account: alice, reply: true) } - - it 'returns the unique tag for status' do - expect(target.object_type).to eq :comment - is_expected.to eq "https://cb6e6126.ngrok.io/@alice/#{target.id}" - end - end - - context 'note object' do - let(:target) { Fabricate(:status, account: alice, reply: false, thread: nil) } - - it 'returns the unique tag for status' do - expect(target.object_type).to eq :note - is_expected.to eq "https://cb6e6126.ngrok.io/@alice/#{target.id}" - end - end - - context 'person object' do - let(:target) { alice } - - it 'returns the URL for account' do - expect(target.object_type).to eq :person - is_expected.to eq 'https://cb6e6126.ngrok.io/@alice' - end - end - end end diff --git a/spec/mailers/previews/user_mailer_preview.rb b/spec/mailers/previews/user_mailer_preview.rb index 53c836494..464f177d0 100644 --- a/spec/mailers/previews/user_mailer_preview.rb +++ b/spec/mailers/previews/user_mailer_preview.rb @@ -18,6 +18,21 @@ class UserMailerPreview < ActionMailer::Preview UserMailer.password_change(User.first) end + # Preview this email at http://localhost:3000/rails/mailers/user_mailer/two_factor_disabled + def two_factor_disabled + UserMailer.two_factor_disabled(User.first) + end + + # Preview this email at http://localhost:3000/rails/mailers/user_mailer/two_factor_enabled + def two_factor_enabled + UserMailer.two_factor_enabled(User.first) + end + + # Preview this email at http://localhost:3000/rails/mailers/user_mailer/two_factor_recovery_codes_changed + def two_factor_recovery_codes_changed + UserMailer.two_factor_recovery_codes_changed(User.first) + end + # Preview this email at http://localhost:3000/rails/mailers/user_mailer/reconfirmation_instructions def reconfirmation_instructions user = User.first @@ -42,6 +57,6 @@ class UserMailerPreview < ActionMailer::Preview # Preview this email at http://localhost:3000/rails/mailers/user_mailer/warning def warning - UserMailer.warning(User.first, AccountWarning.new(text: '', action: :silence)) + UserMailer.warning(User.first, AccountWarning.new(text: '', action: :silence), [Status.first.id]) end end diff --git a/spec/models/account_alias_spec.rb b/spec/models/account_alias_spec.rb new file mode 100644 index 000000000..27ec215aa --- /dev/null +++ b/spec/models/account_alias_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe AccountAlias, type: :model do + +end diff --git a/spec/models/account_migration_spec.rb b/spec/models/account_migration_spec.rb new file mode 100644 index 000000000..8461b4b28 --- /dev/null +++ b/spec/models/account_migration_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe AccountMigration, type: :model do + +end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 379872316..b2f6234cb 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -126,8 +126,8 @@ RSpec.describe Account, type: :model do end it 'sets default avatar, header, avatar_remote_url, and header_remote_url' do - expect(account.avatar_remote_url).to eq '' - expect(account.header_remote_url).to eq '' + expect(account.avatar_remote_url).to eq 'https://remote.test/invalid_avatar' + expect(account.header_remote_url).to eq expectation.header_remote_url expect(account.avatar_file_name).to eq nil expect(account.header_file_name).to eq nil end @@ -450,7 +450,7 @@ RSpec.describe Account, type: :model do describe '.domains' do it 'returns domains' do Fabricate(:account, domain: 'domain') - expect(Account.domains).to match_array(['domain']) + expect(Account.remote.domains).to match_array(['domain']) end end @@ -583,26 +583,43 @@ RSpec.describe Account, type: :model do expect(account.valid?).to be true end + it 'is valid if we are creating an instance actor account with a period' do + account = Fabricate.build(:account, id: -99, actor_type: 'Application', locked: true, username: 'example.com') + expect(account.valid?).to be true + end + + it 'is valid if we are creating a possibly-conflicting instance actor account' do + account_1 = Fabricate(:account, username: 'examplecom') + account_2 = Fabricate.build(:account, id: -99, actor_type: 'Application', locked: true, username: 'example.com') + expect(account_2.valid?).to be true + end + it 'is invalid if the username doesn\'t only contains letters, numbers and underscores' do account = Fabricate.build(:account, username: 'the-doctor') account.valid? expect(account).to model_have_error_on_field(:username) end + it 'is invalid if the username contains a period' do + account = Fabricate.build(:account, username: 'the.doctor') + account.valid? + expect(account).to model_have_error_on_field(:username) + end + it 'is invalid if the username is longer then 30 characters' do - account = Fabricate.build(:account, username: Faker::Lorem.characters(31)) + account = Fabricate.build(:account, username: Faker::Lorem.characters(number: 31)) account.valid? expect(account).to model_have_error_on_field(:username) end it 'is invalid if the display name is longer than 30 characters' do - account = Fabricate.build(:account, display_name: Faker::Lorem.characters(31)) + account = Fabricate.build(:account, display_name: Faker::Lorem.characters(number: 31)) account.valid? expect(account).to model_have_error_on_field(:display_name) end it 'is invalid if the note is longer than 500 characters' do - account = Fabricate.build(:account, note: Faker::Lorem.characters(501)) + account = Fabricate.build(:account, note: Faker::Lorem.characters(number: 501)) account.valid? expect(account).to model_have_error_on_field(:note) end @@ -636,19 +653,19 @@ RSpec.describe Account, type: :model do end it 'is valid even if the username is longer then 30 characters' do - account = Fabricate.build(:account, domain: 'domain', username: Faker::Lorem.characters(31)) + account = Fabricate.build(:account, domain: 'domain', username: Faker::Lorem.characters(number: 31)) account.valid? expect(account).not_to model_have_error_on_field(:username) end it 'is valid even if the display name is longer than 30 characters' do - account = Fabricate.build(:account, domain: 'domain', display_name: Faker::Lorem.characters(31)) + account = Fabricate.build(:account, domain: 'domain', display_name: Faker::Lorem.characters(number: 31)) account.valid? expect(account).not_to model_have_error_on_field(:display_name) end it 'is valid even if the note is longer than 500 characters' do - account = Fabricate.build(:account, domain: 'domain', note: Faker::Lorem.characters(501)) + account = Fabricate.build(:account, domain: 'domain', note: Faker::Lorem.characters(number: 501)) account.valid? expect(account).not_to model_have_error_on_field(:note) end @@ -665,7 +682,7 @@ RSpec.describe Account, type: :model do { username: 'b', domain: 'b' }, ].map(&method(:Fabricate).curry(2).call(:account)) - expect(Account.alphabetic).to eq matches + expect(Account.where('id > 0').alphabetic).to eq matches end end @@ -687,6 +704,23 @@ RSpec.describe Account, type: :model do end end + describe 'by_domain_and_subdomains' do + it 'returns exact domain matches' do + account = Fabricate(:account, domain: 'example.com') + expect(Account.by_domain_and_subdomains('example.com')).to eq [account] + end + + it 'returns subdomains' do + account = Fabricate(:account, domain: 'foo.example.com') + expect(Account.by_domain_and_subdomains('example.com')).to eq [account] + end + + it 'does not return partially matching domains' do + account = Fabricate(:account, domain: 'grexample.com') + expect(Account.by_domain_and_subdomains('example.com')).to_not eq [account] + end + end + describe 'expiring' do it 'returns remote accounts with followers whose subscription expiration date is past or not given' do local = Fabricate(:account, domain: nil) @@ -715,7 +749,7 @@ RSpec.describe Account, type: :model do 2.times { Fabricate(:account, domain: 'example.com') } Fabricate(:account, domain: 'example2.com') - results = Account.by_domain_accounts + results = Account.where('id > 0').by_domain_accounts expect(results.length).to eq 2 expect(results.first.domain).to eq 'example.com' expect(results.first.accounts_count).to eq 2 @@ -728,7 +762,7 @@ RSpec.describe Account, type: :model do it 'returns an array of accounts who do not have a domain' do account_1 = Fabricate(:account, domain: nil) account_2 = Fabricate(:account, domain: 'example.com') - expect(Account.local).to match_array([account_1]) + expect(Account.where('id > 0').local).to match_array([account_1]) end end @@ -739,14 +773,14 @@ RSpec.describe Account, type: :model do matches[index] = Fabricate(:account, domain: matches[index]) end - expect(Account.partitioned).to match_array(matches) + expect(Account.where('id > 0').partitioned).to match_array(matches) end end describe 'recent' do it 'returns a relation of accounts sorted by recent creation' do matches = 2.times.map { Fabricate(:account) } - expect(Account.recent).to match_array(matches) + expect(Account.where('id > 0').recent).to match_array(matches) end end @@ -770,7 +804,7 @@ RSpec.describe Account, type: :model do context 'when is local' do # Test disabled because test environment omits autogenerating keys for performance xit 'generates keys' do - account = Account.create!(domain: nil, username: Faker::Internet.user_name(nil, ['_'])) + account = Account.create!(domain: nil, username: Faker::Internet.user_name(separators: ['_'])) expect(account.keypair.private?).to eq true end end @@ -778,12 +812,12 @@ RSpec.describe Account, type: :model do context 'when is remote' do it 'does not generate keys' do key = OpenSSL::PKey::RSA.new(1024).public_key - account = Account.create!(domain: 'remote', username: Faker::Internet.user_name(nil, ['_']), public_key: key.to_pem) + account = Account.create!(domain: 'remote', username: Faker::Internet.user_name(separators: ['_']), public_key: key.to_pem) expect(account.keypair.params).to eq key.params end it 'normalizes domain' do - account = Account.create!(domain: 'にゃん', username: Faker::Internet.user_name(nil, ['_'])) + account = Account.create!(domain: 'にゃん', username: Faker::Internet.user_name(separators: ['_'])) expect(account.domain).to eq 'xn--r9j5b5b' end end diff --git a/spec/models/account_stat_spec.rb b/spec/models/account_stat_spec.rb index a94185109..8adc0d1d6 100644 --- a/spec/models/account_stat_spec.rb +++ b/spec/models/account_stat_spec.rb @@ -1,4 +1,57 @@ require 'rails_helper' RSpec.describe AccountStat, type: :model do + describe '#increment_count!' do + it 'increments the count' do + account_stat = AccountStat.create(account: Fabricate(:account)) + expect(account_stat.followers_count).to eq 0 + account_stat.increment_count!(:followers_count) + expect(account_stat.followers_count).to eq 1 + end + + it 'increments the count in multi-threaded an environment' do + account_stat = AccountStat.create(account: Fabricate(:account), statuses_count: 0) + increment_by = 15 + wait_for_start = true + + threads = Array.new(increment_by) do + Thread.new do + true while wait_for_start + AccountStat.find(account_stat.id).increment_count!(:statuses_count) + end + end + + wait_for_start = false + threads.each(&:join) + + expect(account_stat.reload.statuses_count).to eq increment_by + end + end + + describe '#decrement_count!' do + it 'decrements the count' do + account_stat = AccountStat.create(account: Fabricate(:account), followers_count: 15) + expect(account_stat.followers_count).to eq 15 + account_stat.decrement_count!(:followers_count) + expect(account_stat.followers_count).to eq 14 + end + + it 'decrements the count in multi-threaded an environment' do + account_stat = AccountStat.create(account: Fabricate(:account), statuses_count: 15) + decrement_by = 10 + wait_for_start = true + + threads = Array.new(decrement_by) do + Thread.new do + true while wait_for_start + AccountStat.find(account_stat.id).decrement_count!(:statuses_count) + end + end + + wait_for_start = false + threads.each(&:join) + + expect(account_stat.reload.statuses_count).to eq 5 + end + end end diff --git a/spec/models/admin/account_action_spec.rb b/spec/models/admin/account_action_spec.rb index a3db60cfc..87fc28500 100644 --- a/spec/models/admin/account_action_spec.rb +++ b/spec/models/admin/account_action_spec.rb @@ -58,8 +58,8 @@ RSpec.describe Admin::AccountAction, type: :model do end.to change { Admin::ActionLog.count }.by 1 end - it 'calls queue_email!' do - expect(account_action).to receive(:queue_email!) + it 'calls process_email!' do + expect(account_action).to receive(:process_email!) subject end diff --git a/spec/models/concerns/remotable_spec.rb b/spec/models/concerns/remotable_spec.rb index a4289cc45..99a60cbf6 100644 --- a/spec/models/concerns/remotable_spec.rb +++ b/spec/models/concerns/remotable_spec.rb @@ -18,6 +18,8 @@ RSpec.describe Remotable do def hoge=(arg); end + def hoge_file_name; end + def hoge_file_name=(arg); end def has_attribute?(arg); end @@ -109,12 +111,21 @@ RSpec.describe Remotable do end context 'foo[attribute_name] == url' do - it 'makes no request' do + it 'makes no request if file is saved' do allow(foo).to receive(:[]).with(attribute_name).and_return(url) + allow(foo).to receive(:hoge_file_name).and_return('foo.jpg') foo.hoge_remote_url = url expect(request).not_to have_been_requested end + + it 'makes request if file is not saved' do + allow(foo).to receive(:[]).with(attribute_name).and_return(url) + allow(foo).to receive(:hoge_file_name).and_return(nil) + + foo.hoge_remote_url = url + expect(request).to have_been_requested + end end context "scheme is https, parsed_url.host isn't empty, and foo[attribute_name] != url" do diff --git a/spec/models/concerns/streamable_spec.rb b/spec/models/concerns/streamable_spec.rb deleted file mode 100644 index b5f2d5192..000000000 --- a/spec/models/concerns/streamable_spec.rb +++ /dev/null @@ -1,63 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Streamable do - class Parent - def title; end - - def target; end - - def thread; end - - def self.has_one(*); end - - def self.after_create; end - end - - class Child < Parent - include Streamable - end - - child = Child.new - - describe '#title' do - it 'calls Parent#title' do - expect_any_instance_of(Parent).to receive(:title) - child.title - end - end - - describe '#content' do - it 'calls #title' do - expect_any_instance_of(Parent).to receive(:title) - child.content - end - end - - describe '#target' do - it 'calls Parent#target' do - expect_any_instance_of(Parent).to receive(:target) - child.target - end - end - - describe '#object_type' do - it 'returns :activity' do - expect(child.object_type).to eq :activity - end - end - - describe '#thread' do - it 'calls Parent#thread' do - expect_any_instance_of(Parent).to receive(:thread) - child.thread - end - end - - describe '#hidden?' do - it 'returns false' do - expect(child.hidden?).to be false - end - end -end diff --git a/spec/models/custom_emoji_category_spec.rb b/spec/models/custom_emoji_category_spec.rb new file mode 100644 index 000000000..160033f4d --- /dev/null +++ b/spec/models/custom_emoji_category_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe CustomEmojiCategory, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/domain_allow_spec.rb b/spec/models/domain_allow_spec.rb new file mode 100644 index 000000000..e65435127 --- /dev/null +++ b/spec/models/domain_allow_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe DomainAllow, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/domain_block_spec.rb b/spec/models/domain_block_spec.rb index 0035fd0ff..d98c5e118 100644 --- a/spec/models/domain_block_spec.rb +++ b/spec/models/domain_block_spec.rb @@ -21,23 +21,40 @@ RSpec.describe DomainBlock, type: :model do end end - describe 'blocked?' do + describe '.blocked?' do it 'returns true if the domain is suspended' do - Fabricate(:domain_block, domain: 'domain', severity: :suspend) - expect(DomainBlock.blocked?('domain')).to eq true + Fabricate(:domain_block, domain: 'example.com', severity: :suspend) + expect(DomainBlock.blocked?('example.com')).to eq true end it 'returns false even if the domain is silenced' do - Fabricate(:domain_block, domain: 'domain', severity: :silence) - expect(DomainBlock.blocked?('domain')).to eq false + Fabricate(:domain_block, domain: 'example.com', severity: :silence) + expect(DomainBlock.blocked?('example.com')).to eq false end it 'returns false if the domain is not suspended nor silenced' do - expect(DomainBlock.blocked?('domain')).to eq false + expect(DomainBlock.blocked?('example.com')).to eq false end end - describe 'stricter_than?' do + describe '.rule_for' do + it 'returns rule matching a blocked domain' do + block = Fabricate(:domain_block, domain: 'example.com') + expect(DomainBlock.rule_for('example.com')).to eq block + end + + it 'returns a rule matching a subdomain of a blocked domain' do + block = Fabricate(:domain_block, domain: 'example.com') + expect(DomainBlock.rule_for('sub.example.com')).to eq block + end + + it 'returns a rule matching a blocked subdomain' do + block = Fabricate(:domain_block, domain: 'sub.example.com') + expect(DomainBlock.rule_for('sub.example.com')).to eq block + end + end + + describe '#stricter_than?' do it 'returns true if the new block has suspend severity while the old has lower severity' do suspend = DomainBlock.new(domain: 'domain', severity: :suspend) silence = DomainBlock.new(domain: 'domain', severity: :silence) diff --git a/spec/models/form/status_batch_spec.rb b/spec/models/form/status_batch_spec.rb index 00c790a11..68d84a737 100644 --- a/spec/models/form/status_batch_spec.rb +++ b/spec/models/form/status_batch_spec.rb @@ -41,12 +41,12 @@ describe Form::StatusBatch do it 'call RemovalWorker' do form.save - expect(RemovalWorker).to have_received(:perform_async).with(status.id) + expect(RemovalWorker).to have_received(:perform_async).with(status.id, immediate: true) end it 'do not call RemovalWorker' do form.save - expect(RemovalWorker).not_to have_received(:perform_async).with(another_status.id) + expect(RemovalWorker).not_to have_received(:perform_async).with(another_status.id, immediate: true) end end end diff --git a/spec/models/home_feed_spec.rb b/spec/models/home_feed_spec.rb index 3acb997f1..ee7a83960 100644 --- a/spec/models/home_feed_spec.rb +++ b/spec/models/home_feed_spec.rb @@ -34,11 +34,10 @@ RSpec.describe HomeFeed, type: :model do Redis.current.set("account:#{account.id}:regeneration", true) end - it 'gets statuses with ids in the range from database' do + it 'returns nothing' do results = subject.get(3) - expect(results.map(&:id)).to eq [10, 3, 2] - expect(results.first.attributes.keys).to include('id', 'updated_at') + expect(results.map(&:id)).to eq [] end end end diff --git a/spec/models/invite_spec.rb b/spec/models/invite_spec.rb index 0ba1dccb3..30abfb86b 100644 --- a/spec/models/invite_spec.rb +++ b/spec/models/invite_spec.rb @@ -3,27 +3,33 @@ require 'rails_helper' RSpec.describe Invite, type: :model do describe '#valid_for_use?' do it 'returns true when there are no limitations' do - invite = Invite.new(max_uses: nil, expires_at: nil) + invite = Fabricate(:invite, max_uses: nil, expires_at: nil) expect(invite.valid_for_use?).to be true end it 'returns true when not expired' do - invite = Invite.new(max_uses: nil, expires_at: 1.hour.from_now) + invite = Fabricate(:invite, max_uses: nil, expires_at: 1.hour.from_now) expect(invite.valid_for_use?).to be true end it 'returns false when expired' do - invite = Invite.new(max_uses: nil, expires_at: 1.hour.ago) + invite = Fabricate(:invite, max_uses: nil, expires_at: 1.hour.ago) expect(invite.valid_for_use?).to be false end it 'returns true when uses still available' do - invite = Invite.new(max_uses: 250, uses: 249, expires_at: nil) + invite = Fabricate(:invite, max_uses: 250, uses: 249, expires_at: nil) expect(invite.valid_for_use?).to be true end it 'returns false when maximum uses reached' do - invite = Invite.new(max_uses: 250, uses: 250, expires_at: nil) + invite = Fabricate(:invite, max_uses: 250, uses: 250, expires_at: nil) + expect(invite.valid_for_use?).to be false + end + + it 'returns false when invite creator has been disabled' do + invite = Fabricate(:invite, max_uses: nil, expires_at: nil) + SuspendAccountService.new.call(invite.user.account) expect(invite.valid_for_use?).to be false end end diff --git a/spec/models/marker_spec.rb b/spec/models/marker_spec.rb new file mode 100644 index 000000000..d716aa75c --- /dev/null +++ b/spec/models/marker_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Marker, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb index 266cd4920..7ddfba7ed 100644 --- a/spec/models/media_attachment_spec.rb +++ b/spec/models/media_attachment_spec.rb @@ -136,10 +136,10 @@ RSpec.describe MediaAttachment, type: :model do end describe 'descriptions for remote attachments' do - it 'are cut off at 140 characters' do + it 'are cut off at 1500 characters' do media = Fabricate(:media_attachment, description: 'foo' * 1000, remote_url: 'http://example.com/blah.jpg') - expect(media.description.size).to be <= 420 + expect(media.description.size).to be <= 1_500 end end end diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index 59c582cde..d2e676ec2 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -34,32 +34,6 @@ RSpec.describe Notification, type: :model do end end - describe '#browserable?' do - let(:notification) { Fabricate(:notification) } - - subject { notification.browserable? } - - context 'type is :follow_request' do - before do - allow(notification).to receive(:type).and_return(:follow_request) - end - - it 'returns false' do - is_expected.to be false - end - end - - context 'type is not :follow_request' do - before do - allow(notification).to receive(:type).and_return(:else) - end - - it 'returns true' do - is_expected.to be true - end - end - end - describe '#type' do it 'returns :reblog for a Status' do notification = Notification.new(activity: Status.new) diff --git a/spec/models/poll_vote_spec.rb b/spec/models/poll_vote_spec.rb index 354afd535..563f34699 100644 --- a/spec/models/poll_vote_spec.rb +++ b/spec/models/poll_vote_spec.rb @@ -1,5 +1,13 @@ +# frozen_string_literal: true + require 'rails_helper' RSpec.describe PollVote, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + describe '#object_type' do + let(:poll_vote) { Fabricate.build(:poll_vote) } + + it 'returns :vote' do + expect(poll_vote.object_type).to eq :vote + end + end end diff --git a/spec/models/remote_follow_spec.rb b/spec/models/remote_follow_spec.rb index ed2667b28..5b4c19b5b 100644 --- a/spec/models/remote_follow_spec.rb +++ b/spec/models/remote_follow_spec.rb @@ -61,7 +61,7 @@ RSpec.describe RemoteFollow do subject { remote_follow.subscribe_address_for(account) } it 'returns subscribe address' do - is_expected.to eq 'https://quitter.no/main/ostatussub?profile=alice%40cb6e6126.ngrok.io' + is_expected.to eq 'https://quitter.no/main/ostatussub?profile=https%3A%2F%2Fcb6e6126.ngrok.io%2Fusers%2Falice' end end end diff --git a/spec/models/remote_profile_spec.rb b/spec/models/remote_profile_spec.rb deleted file mode 100644 index da5048f0a..000000000 --- a/spec/models/remote_profile_spec.rb +++ /dev/null @@ -1,143 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe RemoteProfile do - let(:remote_profile) { RemoteProfile.new(body) } - let(:body) do - <<-XML - <feed xmlns="http://www.w3.org/2005/Atom"> - <author>John</author> - XML - end - - describe '.initialize' do - it 'calls Nokogiri::XML.parse' do - expect(Nokogiri::XML).to receive(:parse).with(body, nil, 'utf-8') - RemoteProfile.new(body) - end - - it 'sets document' do - remote_profile = RemoteProfile.new(body) - expect(remote_profile).not_to be nil - end - end - - describe '#root' do - let(:document) { remote_profile.document } - - it 'callse document.at_xpath' do - expect(document).to receive(:at_xpath).with( - '/atom:feed|/atom:entry', - atom: OStatus::TagManager::XMLNS - ) - - remote_profile.root - end - end - - describe '#author' do - let(:root) { remote_profile.root } - - it 'calls root.at_xpath' do - expect(root).to receive(:at_xpath).with( - './atom:author|./dfrn:owner', - atom: OStatus::TagManager::XMLNS, - dfrn: OStatus::TagManager::DFRN_XMLNS - ) - - remote_profile.author - end - end - - describe '#hub_link' do - let(:root) { remote_profile.root } - - it 'calls #link_href_from_xml' do - expect(remote_profile).to receive(:link_href_from_xml).with(root, 'hub') - remote_profile.hub_link - end - end - - describe '#display_name' do - let(:author) { remote_profile.author } - - it 'calls author.at_xpath.content' do - expect(author).to receive_message_chain(:at_xpath, :content).with( - './poco:displayName', - poco: OStatus::TagManager::POCO_XMLNS - ).with(no_args) - - remote_profile.display_name - end - end - - describe '#note' do - let(:author) { remote_profile.author } - - it 'calls author.at_xpath.content' do - expect(author).to receive_message_chain(:at_xpath, :content).with( - './atom:summary|./poco:note', - atom: OStatus::TagManager::XMLNS, - poco: OStatus::TagManager::POCO_XMLNS - ).with(no_args) - - remote_profile.note - end - end - - describe '#scope' do - let(:author) { remote_profile.author } - - it 'calls author.at_xpath.content' do - expect(author).to receive_message_chain(:at_xpath, :content).with( - './mastodon:scope', - mastodon: OStatus::TagManager::MTDN_XMLNS - ).with(no_args) - - remote_profile.scope - end - end - - describe '#avatar' do - let(:author) { remote_profile.author } - - it 'calls #link_href_from_xml' do - expect(remote_profile).to receive(:link_href_from_xml).with(author, 'avatar') - remote_profile.avatar - end - end - - describe '#header' do - let(:author) { remote_profile.author } - - it 'calls #link_href_from_xml' do - expect(remote_profile).to receive(:link_href_from_xml).with(author, 'header') - remote_profile.header - end - end - - describe '#locked?' do - before do - allow(remote_profile).to receive(:scope).and_return(scope) - end - - subject { remote_profile.locked? } - - context 'scope is private' do - let(:scope) { 'private' } - - it 'returns true' do - is_expected.to be true - end - end - - context 'scope is not private' do - let(:scope) { 'public' } - - it 'returns false' do - is_expected.to be false - end - end - end -end diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb index a0cd0800d..312954c9d 100644 --- a/spec/models/report_spec.rb +++ b/spec/models/report_spec.rb @@ -125,7 +125,7 @@ describe Report do end it 'is invalid if comment is longer than 1000 characters' do - report = Fabricate.build(:report, comment: Faker::Lorem.characters(1001)) + report = Fabricate.build(:report, comment: Faker::Lorem.characters(number: 1001)) report.valid? expect(report).to model_have_error_on_field(:comment) end diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 8e90b92d0..02f533287 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -333,49 +333,6 @@ RSpec.describe Status, type: :model do end end - describe '.as_home_timeline' do - let(:account) { Fabricate(:account) } - let(:followed) { Fabricate(:account) } - let(:not_followed) { Fabricate(:account) } - - before do - Fabricate(:follow, account: account, target_account: followed) - - @self_status = Fabricate(:status, account: account, visibility: :public) - @self_direct_status = Fabricate(:status, account: account, visibility: :direct) - @followed_status = Fabricate(:status, account: followed, visibility: :public) - @followed_direct_status = Fabricate(:status, account: followed, visibility: :direct) - @not_followed_status = Fabricate(:status, account: not_followed, visibility: :public) - - @results = Status.as_home_timeline(account) - end - - it 'includes statuses from self' do - expect(@results).to include(@self_status) - end - - it 'does not include direct statuses from self' do - expect(@results).to_not include(@self_direct_status) - end - - it 'includes statuses from followed' do - expect(@results).to include(@followed_status) - end - - it 'does not include direct statuses mentioning recipient from followed' do - Fabricate(:mention, account: account, status: @followed_direct_status) - expect(@results).to_not include(@followed_direct_status) - end - - it 'does not include direct statuses not mentioning recipient from followed' do - expect(@results).not_to include(@followed_direct_status) - end - - it 'does not include statuses from non-followed' do - expect(@results).not_to include(@not_followed_status) - end - end - describe '.as_direct_timeline' do let(:account) { Fabricate(:account) } let(:followed) { Fabricate(:account) } diff --git a/spec/models/stream_entry_spec.rb b/spec/models/stream_entry_spec.rb deleted file mode 100644 index 8f8bfbd58..000000000 --- a/spec/models/stream_entry_spec.rb +++ /dev/null @@ -1,192 +0,0 @@ -require 'rails_helper' - -RSpec.describe StreamEntry, type: :model do - let(:alice) { Fabricate(:account, username: 'alice') } - let(:bob) { Fabricate(:account, username: 'bob') } - let(:status) { Fabricate(:status, account: alice) } - let(:reblog) { Fabricate(:status, account: bob, reblog: status) } - let(:reply) { Fabricate(:status, account: bob, thread: status) } - let(:stream_entry) { Fabricate(:stream_entry, activity: activity) } - let(:activity) { reblog } - - describe '#object_type' do - before do - allow(stream_entry).to receive(:orphaned?).and_return(orphaned) - allow(stream_entry).to receive(:targeted?).and_return(targeted) - end - - subject { stream_entry.object_type } - - context 'orphaned? is true' do - let(:orphaned) { true } - let(:targeted) { false } - - it 'returns :activity' do - is_expected.to be :activity - end - end - - context 'targeted? is true' do - let(:orphaned) { false } - let(:targeted) { true } - - it 'returns :activity' do - is_expected.to be :activity - end - end - - context 'orphaned? and targeted? are false' do - let(:orphaned) { false } - let(:targeted) { false } - - context 'activity is reblog' do - let(:activity) { reblog } - - it 'returns :note' do - is_expected.to be :note - end - end - - context 'activity is reply' do - let(:activity) { reply } - - it 'returns :comment' do - is_expected.to be :comment - end - end - end - end - - describe '#verb' do - before do - allow(stream_entry).to receive(:orphaned?).and_return(orphaned) - end - - subject { stream_entry.verb } - - context 'orphaned? is true' do - let(:orphaned) { true } - - it 'returns :delete' do - is_expected.to be :delete - end - end - - context 'orphaned? is false' do - let(:orphaned) { false } - - context 'activity is reblog' do - let(:activity) { reblog } - - it 'returns :share' do - is_expected.to be :share - end - end - - context 'activity is reply' do - let(:activity) { reply } - - it 'returns :post' do - is_expected.to be :post - end - end - end - end - - describe '#mentions' do - before do - allow(stream_entry).to receive(:orphaned?).and_return(orphaned) - end - - subject { stream_entry.mentions } - - context 'orphaned? is true' do - let(:orphaned) { true } - - it 'returns []' do - is_expected.to eq [] - end - end - - context 'orphaned? is false' do - before do - reblog.mentions << Fabricate(:mention, account: alice) - reblog.mentions << Fabricate(:mention, account: bob) - end - - let(:orphaned) { false } - - it 'returns [Account] includes alice and bob' do - is_expected.to eq [alice, bob] - end - end - end - - describe '#targeted?' do - it 'returns true for a reblog' do - expect(reblog.stream_entry.targeted?).to be true - end - - it 'returns false otherwise' do - expect(status.stream_entry.targeted?).to be false - end - end - - describe '#threaded?' do - it 'returns true for a reply' do - expect(reply.stream_entry.threaded?).to be true - end - - it 'returns false otherwise' do - expect(status.stream_entry.threaded?).to be false - end - end - - describe 'delegated methods' do - context 'with a nil status' do - subject { described_class.new(status: nil) } - - it 'returns nil for target' do - expect(subject.target).to be_nil - end - - it 'returns nil for title' do - expect(subject.title).to be_nil - end - - it 'returns nil for content' do - expect(subject.content).to be_nil - end - - it 'returns nil for thread' do - expect(subject.thread).to be_nil - end - end - - context 'with a real status' do - let(:original) { Fabricate(:status, text: 'Test status') } - let(:status) { Fabricate(:status, reblog: original, thread: original) } - subject { described_class.new(status: status) } - - it 'delegates target' do - expect(status.target).not_to be_nil - expect(subject.target).to eq(status.target) - end - - it 'delegates title' do - expect(status.title).not_to be_nil - expect(subject.title).to eq(status.title) - end - - it 'delegates content' do - expect(status.content).not_to be_nil - expect(subject.content).to eq(status.content) - end - - it 'delegates thread' do - expect(status.thread).not_to be_nil - expect(subject.thread).to eq(status.thread) - end - end - end -end diff --git a/spec/models/subscription_spec.rb b/spec/models/subscription_spec.rb deleted file mode 100644 index b83979d13..000000000 --- a/spec/models/subscription_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -require 'rails_helper' - -RSpec.describe Subscription, type: :model do - let(:alice) { Fabricate(:account, username: 'alice') } - - subject { Fabricate(:subscription, account: alice) } - - describe '#expired?' do - it 'return true when expires_at is past' do - subject.expires_at = 2.days.ago - expect(subject.expired?).to be true - end - - it 'return false when expires_at is future' do - subject.expires_at = 2.days.from_now - expect(subject.expired?).to be false - end - end - - describe 'lease_seconds' do - it 'returns the time remaining until expiration' do - datetime = 1.day.from_now - subscription = Subscription.new(expires_at: datetime) - travel_to(datetime - 12.hours) do - expect(subscription.lease_seconds).to eq(12.hours) - end - end - end - - describe 'lease_seconds=' do - it 'sets expires_at to min expiration when small value is provided' do - subscription = Subscription.new - datetime = 1.day.from_now - too_low = Subscription::MIN_EXPIRATION - 1000 - travel_to(datetime) do - subscription.lease_seconds = too_low - end - - expected = datetime + Subscription::MIN_EXPIRATION.seconds - expect(subscription.expires_at).to be_within(1.0).of(expected) - end - - it 'sets expires_at to value when valid value is provided' do - subscription = Subscription.new - datetime = 1.day.from_now - valid = Subscription::MIN_EXPIRATION + 1000 - travel_to(datetime) do - subscription.lease_seconds = valid - end - - expected = datetime + valid.seconds - expect(subscription.expires_at).to be_within(1.0).of(expected) - end - - it 'sets expires_at to max expiration when large value is provided' do - subscription = Subscription.new - datetime = 1.day.from_now - too_high = Subscription::MAX_EXPIRATION + 1000 - travel_to(datetime) do - subscription.lease_seconds = too_high - end - - expected = datetime + Subscription::MAX_EXPIRATION.seconds - expect(subscription.expires_at).to be_within(1.0).of(expected) - end - end -end diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb index 1ca50cc29..df876593c 100644 --- a/spec/models/tag_spec.rb +++ b/spec/models/tag_spec.rb @@ -31,7 +31,51 @@ RSpec.describe Tag, type: :model do end it 'matches #aesthetic' do - expect(subject.match('this is #aesthetic')).to_not be_nil + expect(subject.match('this is #aesthetic').to_s).to eq ' #aesthetic' + end + + it 'matches digits at the start' do + expect(subject.match('hello #3d').to_s).to eq ' #3d' + end + + it 'matches digits in the middle' do + expect(subject.match('hello #l33ts35k').to_s).to eq ' #l33ts35k' + end + + it 'matches digits at the end' do + expect(subject.match('hello #world2016').to_s).to eq ' #world2016' + end + + it 'matches underscores at the beginning' do + expect(subject.match('hello #_test').to_s).to eq ' #_test' + end + + it 'matches underscores at the end' do + expect(subject.match('hello #test_').to_s).to eq ' #test_' + end + + it 'matches underscores in the middle' do + expect(subject.match('hello #one_two_three').to_s).to eq ' #one_two_three' + end + + it 'matches middle dots' do + expect(subject.match('hello #one·two·three').to_s).to eq ' #one·two·three' + end + + it 'matches ZWNJ' do + expect(subject.match('just add #نرمافزار and').to_s).to eq ' #نرمافزار' + end + + it 'does not match middle dots at the start' do + expect(subject.match('hello #·one·two·three')).to be_nil + end + + it 'does not match middle dots at the end' do + expect(subject.match('hello #one·two·three·').to_s).to eq ' #one·two·three' + end + + it 'does not match purely-numeric hashtags' do + expect(subject.match('hello #0123456')).to be_nil end end @@ -42,6 +86,40 @@ RSpec.describe Tag, type: :model do end end + describe '.find_normalized' do + it 'returns tag for a multibyte case-insensitive name' do + upcase_string = 'abcABCabcABCやゆよ' + downcase_string = 'abcabcabcabcやゆよ'; + + tag = Fabricate(:tag, name: downcase_string) + expect(Tag.find_normalized(upcase_string)).to eq tag + end + end + + describe '.matching_name' do + it 'returns tags for multibyte case-insensitive names' do + upcase_string = 'abcABCabcABCやゆよ' + downcase_string = 'abcabcabcabcやゆよ'; + + tag = Fabricate(:tag, name: downcase_string) + expect(Tag.matching_name(upcase_string)).to eq [tag] + end + end + + describe '.find_or_create_by_names' do + it 'runs a passed block once per tag regardless of duplicates' do + upcase_string = 'abcABCabcABCやゆよ' + downcase_string = 'abcabcabcabcやゆよ'; + count = 0 + + Tag.find_or_create_by_names([upcase_string, downcase_string]) do |tag| + count += 1 + end + + expect(count).to eq 1 + end + end + describe '.search_for' do it 'finds tag records with matching names' do tag = Fabricate(:tag, name: "match") @@ -62,8 +140,8 @@ RSpec.describe Tag, type: :model do end it 'finds the exact matching tag as the first item' do - similar_tag = Fabricate(:tag, name: "matchlater") - tag = Fabricate(:tag, name: "match") + similar_tag = Fabricate(:tag, name: "matchlater", reviewed_at: Time.now.utc) + tag = Fabricate(:tag, name: "match", reviewed_at: Time.now.utc) results = Tag.search_for("match") diff --git a/spec/models/trending_tags_spec.rb b/spec/models/trending_tags_spec.rb new file mode 100644 index 000000000..b6122c994 --- /dev/null +++ b/spec/models/trending_tags_spec.rb @@ -0,0 +1,68 @@ +require 'rails_helper' + +RSpec.describe TrendingTags do + describe '.record_use!' do + pending + end + + describe '.update!' do + let!(:at_time) { Time.now.utc } + let!(:tag1) { Fabricate(:tag, name: 'Catstodon') } + let!(:tag2) { Fabricate(:tag, name: 'DogsOfMastodon') } + let!(:tag3) { Fabricate(:tag, name: 'OCs') } + + before do + allow(Redis.current).to receive(:pfcount) do |key| + case key + when "activity:tags:#{tag1.id}:#{(at_time - 1.day).beginning_of_day.to_i}:accounts" + 2 + when "activity:tags:#{tag1.id}:#{at_time.beginning_of_day.to_i}:accounts" + 16 + when "activity:tags:#{tag2.id}:#{(at_time - 1.day).beginning_of_day.to_i}:accounts" + 0 + when "activity:tags:#{tag2.id}:#{at_time.beginning_of_day.to_i}:accounts" + 4 + when "activity:tags:#{tag3.id}:#{(at_time - 1.day).beginning_of_day.to_i}:accounts" + 13 + end + end + + Redis.current.zadd('trending_tags', 0.9, tag3.id) + Redis.current.sadd("trending_tags:used:#{at_time.beginning_of_day.to_i}", [tag1.id, tag2.id]) + + tag3.update(max_score: 0.9, max_score_at: (at_time - 1.day).beginning_of_day + 12.hours) + + described_class.update!(at_time) + end + + it 'calculates and re-calculates scores' do + expect(described_class.get(10, filtered: false)).to eq [tag1, tag3] + end + + it 'omits hashtags below threshold' do + expect(described_class.get(10, filtered: false)).to_not include(tag2) + end + + it 'decays scores' do + expect(Redis.current.zscore('trending_tags', tag3.id)).to be < 0.9 + end + end + + describe '.trending?' do + let(:tag) { Fabricate(:tag) } + + before do + 10.times { |i| Redis.current.zadd('trending_tags', i + 1, Fabricate(:tag).id) } + end + + it 'returns true if the hashtag is within limit' do + Redis.current.zadd('trending_tags', 11, tag.id) + expect(described_class.trending?(tag)).to be true + end + + it 'returns false if the hashtag is outside the limit' do + Redis.current.zadd('trending_tags', 0, tag.id) + expect(described_class.trending?(tag)).to be false + end + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 856254ce4..d7c0b5359 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -506,7 +506,7 @@ RSpec.describe User, type: :model do context 'when user is not confirmed' do let(:confirmed_at) { nil } - it { is_expected.to be false } + it { is_expected.to be true } end end @@ -522,7 +522,7 @@ RSpec.describe User, type: :model do context 'when user is not confirmed' do let(:confirmed_at) { nil } - it { is_expected.to be false } + it { is_expected.to be true } end end end diff --git a/spec/policies/subscription_policy_spec.rb b/spec/policies/subscription_policy_spec.rb deleted file mode 100644 index 21d60c15f..000000000 --- a/spec/policies/subscription_policy_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' -require 'pundit/rspec' - -RSpec.describe SubscriptionPolicy do - let(:subject) { described_class } - let(:admin) { Fabricate(:user, admin: true).account } - let(:john) { Fabricate(:user).account } - - permissions :index? do - context 'admin?' do - it 'permits' do - expect(subject).to permit(admin, Subscription) - end - end - - context '!admin?' do - it 'denies' do - expect(subject).to_not permit(john, Subscription) - end - end - end -end diff --git a/spec/policies/tag_policy_spec.rb b/spec/policies/tag_policy_spec.rb index c7afaa7c9..c63875dc0 100644 --- a/spec/policies/tag_policy_spec.rb +++ b/spec/policies/tag_policy_spec.rb @@ -8,7 +8,7 @@ RSpec.describe TagPolicy do let(:admin) { Fabricate(:user, admin: true).account } let(:john) { Fabricate(:user).account } - permissions :index?, :hide?, :unhide? do + permissions :index?, :show?, :update? do context 'staff?' do it 'permits' do expect(subject).to permit(admin, Tag) diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 3a5e7491e..6fbceca53 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -12,7 +12,7 @@ require 'capybara/rspec' Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } ActiveRecord::Migration.maintain_test_schema! -WebMock.disable_net_connect! +WebMock.disable_net_connect!(allow: Chewy.settings[:host]) Redis.current = Redis::Namespace.new("mastodon_test#{ENV['TEST_ENV_NUMBER']}", redis: Redis.current) Sidekiq::Testing.inline! Sidekiq::Logging.logger = nil diff --git a/spec/requests/link_headers_spec.rb b/spec/requests/link_headers_spec.rb index 3dc408d92..712ee262b 100644 --- a/spec/requests/link_headers_spec.rb +++ b/spec/requests/link_headers_spec.rb @@ -11,16 +11,16 @@ describe 'Link headers' do end it 'contains webfinger url in link header' do - link_header = link_header_with_type('application/xrd+xml') + link_header = link_header_with_type('application/jrd+json') expect(link_header.href).to match 'http://www.example.com/.well-known/webfinger?resource=acct%3Atest%40cb6e6126.ngrok.io' expect(link_header.attr_pairs.first).to eq %w(rel lrdd) end - it 'contains atom url in link header' do - link_header = link_header_with_type('application/atom+xml') + it 'contains activitypub url in link header' do + link_header = link_header_with_type('application/activity+json') - expect(link_header.href).to eq 'http://www.example.com/users/test.atom' + expect(link_header.href).to eq 'https://cb6e6126.ngrok.io/users/test' expect(link_header.attr_pairs.first).to eq %w(rel alternate) end diff --git a/spec/requests/localization_spec.rb b/spec/requests/localization_spec.rb index 496a885e8..175f02ae9 100644 --- a/spec/requests/localization_spec.rb +++ b/spec/requests/localization_spec.rb @@ -26,6 +26,7 @@ describe 'Localization' do I18n.t('about.tagline', locale: 'es') ) end + it 'falls back to english when locale is missing' do headers = { 'Accept-Language' => '12-FAKE' } diff --git a/spec/requests/webfinger_request_spec.rb b/spec/requests/webfinger_request_spec.rb index 7f9e1162e..48823714e 100644 --- a/spec/requests/webfinger_request_spec.rb +++ b/spec/requests/webfinger_request_spec.rb @@ -12,23 +12,6 @@ describe 'The webfinger route' do end end - describe 'asking for xml format' do - it 'returns an xml response for xml format' do - get webfinger_url(resource: alice.to_webfinger_s, format: :xml) - - expect(response).to have_http_status(200) - expect(response.content_type).to eq 'application/xrd+xml' - end - - it 'returns an xml response for xml accept header' do - headers = { 'HTTP_ACCEPT' => 'application/xrd+xml' } - get webfinger_url(resource: alice.to_webfinger_s), headers: headers - - expect(response).to have_http_status(200) - expect(response.content_type).to eq 'application/xrd+xml' - end - end - describe 'asking for json format' do it 'returns a json response for json format' do get webfinger_url(resource: alice.to_webfinger_s, format: :json) diff --git a/spec/serializers/activitypub/update_poll_spec.rb b/spec/serializers/activitypub/update_poll_spec.rb new file mode 100644 index 000000000..f9e035eab --- /dev/null +++ b/spec/serializers/activitypub/update_poll_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe ActivityPub::UpdatePollSerializer do + let(:account) { Fabricate(:account) } + let(:poll) { Fabricate(:poll, account: account) } + let!(:status) { Fabricate(:status, account: account, poll: poll) } + + before(:each) do + @serialization = ActiveModelSerializers::SerializableResource.new(status, serializer: ActivityPub::UpdatePollSerializer, adapter: ActivityPub::Adapter) + end + + subject { JSON.parse(@serialization.to_json) } + + it 'has a Update type' do + expect(subject['type']).to eql('Update') + end + + it 'has an object with Question type' do + expect(subject['object']['type']).to eql('Question') + end + + it 'has the correct actor URI set' do + expect(subject['actor']).to eql(ActivityPub::TagManager.instance.uri_for(account)) + end +end diff --git a/spec/services/account_search_service_spec.rb b/spec/services/account_search_service_spec.rb index 7b071b378..5b7182586 100644 --- a/spec/services/account_search_service_spec.rb +++ b/spec/services/account_search_service_spec.rb @@ -1,126 +1,56 @@ require 'rails_helper' describe AccountSearchService, type: :service do - describe '.call' do - describe 'with a query to ignore' do + describe '#call' do + context 'with a query to ignore' do it 'returns empty array for missing query' do results = subject.call('', nil, limit: 10) expect(results).to eq [] end - it 'returns empty array for hashtag query' do - results = subject.call('#tag', nil, limit: 10) - expect(results).to eq [] - end it 'returns empty array for limit zero' do Fabricate(:account, username: 'match') + results = subject.call('match', nil, limit: 0) expect(results).to eq [] end end - describe 'searching for a simple term that is not an exact match' do + context 'searching for a simple term that is not an exact match' do it 'does not return a nil entry in the array for the exact match' do - match = Fabricate(:account, username: 'matchingusername') - + account = Fabricate(:account, username: 'matchingusername') results = subject.call('match', nil, limit: 5) - expect(results).to eq [match] - end - end - describe 'searching local and remote users' do - describe "when only '@'" do - before do - allow(Account).to receive(:find_local) - allow(Account).to receive(:search_for) - subject.call('@', nil, limit: 10) - end - - it 'uses find_local with empty query to look for local accounts' do - expect(Account).to have_received(:find_local).with('') - end - end - - describe 'when no domain' do - before do - allow(Account).to receive(:find_local) - allow(Account).to receive(:search_for) - subject.call('one', nil, limit: 10) - end - - it 'uses find_local to look for local accounts' do - expect(Account).to have_received(:find_local).with('one') - end - - it 'uses search_for to find matches' do - expect(Account).to have_received(:search_for).with('one', 10, 0) - end - end - - describe 'when there is a domain' do - before do - allow(Account).to receive(:find_remote) - end - - it 'uses find_remote to look for remote accounts' do - subject.call('two@example.com', nil, limit: 10) - expect(Account).to have_received(:find_remote).with('two', 'example.com') - end - - describe 'and there is no account provided' do - it 'uses search_for to find matches' do - allow(Account).to receive(:search_for) - subject.call('two@example.com', nil, limit: 10, resolve: false) - - expect(Account).to have_received(:search_for).with('two example.com', 10, 0) - end - end - - describe 'and there is an account provided' do - it 'uses advanced_search_for to find matches' do - account = Fabricate(:account) - allow(Account).to receive(:advanced_search_for) - subject.call('two@example.com', account, limit: 10, resolve: false) - - expect(Account).to have_received(:advanced_search_for).with('two example.com', account, 10, nil, 0) - end - end + expect(results).to eq [account] end end - describe 'with an exact match' do - it 'returns exact match first, and does not return duplicates' do - partial = Fabricate(:account, username: 'exactness') - exact = Fabricate(:account, username: 'exact') - - results = subject.call('exact', nil, limit: 10) - expect(results.size).to eq 2 - expect(results).to eq [exact, partial] - end - end - - describe 'when there is a local domain' do + context 'when there is a local domain' do around do |example| before = Rails.configuration.x.local_domain + example.run + Rails.configuration.x.local_domain = before end it 'returns exact match first' do remote = Fabricate(:account, username: 'a', domain: 'remote', display_name: 'e') remote_too = Fabricate(:account, username: 'b', domain: 'remote', display_name: 'e') - exact = Fabricate(:account, username: 'e') + exact = Fabricate(:account, username: 'e') + Rails.configuration.x.local_domain = 'example.com' results = subject.call('e@example.com', nil, limit: 2) + expect(results.size).to eq 2 expect(results).to eq([exact, remote]).or eq([exact, remote_too]) end end - describe 'when there is a domain but no exact match' do + context 'when there is a domain but no exact match' do it 'follows the remote account when resolve is true' do service = double(call: nil) allow(ResolveAccountService).to receive(:new).and_return(service) @@ -138,23 +68,21 @@ describe AccountSearchService, type: :service do end end - describe 'should not include suspended accounts' do - it 'returns the fuzzy match first, and does not return suspended exacts' do - partial = Fabricate(:account, username: 'exactness') - exact = Fabricate(:account, username: 'exact', suspended: true) + it 'returns the fuzzy match first, and does not return suspended exacts' do + partial = Fabricate(:account, username: 'exactness') + exact = Fabricate(:account, username: 'exact', suspended: true) + results = subject.call('exact', nil, limit: 10) - results = subject.call('exact', nil, limit: 10) - expect(results.size).to eq 1 - expect(results).to eq [partial] - end + expect(results.size).to eq 1 + expect(results).to eq [partial] + end - it "does not return suspended remote accounts" do - remote = Fabricate(:account, username: 'a', domain: 'remote', display_name: 'e', suspended: true) + it "does not return suspended remote accounts" do + remote = Fabricate(:account, username: 'a', domain: 'remote', display_name: 'e', suspended: true) + results = subject.call('a@example.com', nil, limit: 2) - results = subject.call('a@example.com', nil, limit: 2) - expect(results.size).to eq 0 - expect(results).to eq [] - end + expect(results.size).to eq 0 + expect(results).to eq [] end end end diff --git a/spec/services/activitypub/fetch_remote_status_service_spec.rb b/spec/services/activitypub/fetch_remote_status_service_spec.rb index 9ae409996..78dd59e3b 100644 --- a/spec/services/activitypub/fetch_remote_status_service_spec.rb +++ b/spec/services/activitypub/fetch_remote_status_service_spec.rb @@ -71,6 +71,39 @@ RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do end end + context 'with Audio object' do + let(:object) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: "https://#{valid_domain}/@foo/1234", + type: 'Audio', + name: 'Nyan Cat 10 hours remix', + attributedTo: ActivityPub::TagManager.instance.uri_for(sender), + url: [ + { + type: 'Link', + mimeType: 'application/x-bittorrent', + href: "https://#{valid_domain}/12345.torrent", + }, + + { + type: 'Link', + mimeType: 'text/html', + href: "https://#{valid_domain}/watch?v=12345", + }, + ], + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.url).to eq "https://#{valid_domain}/watch?v=12345" + expect(strip_tags(status.text)).to eq "Nyan Cat 10 hours remix https://#{valid_domain}/watch?v=12345" + end + end + context 'with wrong id' do let(:note) do { diff --git a/spec/services/app_sign_up_service_spec.rb b/spec/services/app_sign_up_service_spec.rb index 7948bb53b..e7c7f3ba1 100644 --- a/spec/services/app_sign_up_service_spec.rb +++ b/spec/services/app_sign_up_service_spec.rb @@ -38,6 +38,15 @@ RSpec.describe AppSignUpService, type: :service do user = User.find_by(id: access_token.resource_owner_id) expect(user).to_not be_nil expect(user.account).to_not be_nil + expect(user.invite_request).to be_nil + end + + it 'creates an account with invite request text' do + access_token = subject.call(app, good_params.merge(reason: 'Foo bar')) + expect(access_token).to_not be_nil + user = User.find_by(id: access_token.resource_owner_id) + expect(user).to_not be_nil + expect(user.invite_request&.text).to eq 'Foo bar' end end end diff --git a/spec/services/authorize_follow_service_spec.rb b/spec/services/authorize_follow_service_spec.rb index 562ef0041..ce56d57a6 100644 --- a/spec/services/authorize_follow_service_spec.rb +++ b/spec/services/authorize_follow_service_spec.rb @@ -38,13 +38,6 @@ RSpec.describe AuthorizeFollowService, type: :service do it 'creates follow relation' do expect(bob.following?(sender)).to be true end - - it 'sends a follow request authorization salmon slap' do - expect(a_request(:post, "http://salmon.example.com/").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:authorize]) - }).to have_been_made.once - end end describe 'remote ActivityPub' do diff --git a/spec/services/batched_remove_status_service_spec.rb b/spec/services/batched_remove_status_service_spec.rb index e53623449..f84256f18 100644 --- a/spec/services/batched_remove_status_service_spec.rb +++ b/spec/services/batched_remove_status_service_spec.rb @@ -14,11 +14,8 @@ RSpec.describe BatchedRemoveStatusService, type: :service do before do allow(Redis.current).to receive_messages(publish: nil) - stub_request(:post, 'http://example.com/push').to_return(status: 200, body: '', headers: {}) - stub_request(:post, 'http://example.com/salmon').to_return(status: 200, body: '', headers: {}) stub_request(:post, 'http://example.com/inbox').to_return(status: 200) - Fabricate(:subscription, account: alice, callback_url: 'http://example.com/push', confirmed: true, expires_at: 30.days.from_now) jeff.user.update(current_sign_in_at: Time.zone.now) jeff.follow!(alice) hank.follow!(alice) @@ -49,19 +46,6 @@ RSpec.describe BatchedRemoveStatusService, type: :service do expect(Redis.current).to have_received(:publish).with('timeline:public', any_args).at_least(:once) end - it 'sends PuSH update to PuSH subscribers' do - expect(a_request(:post, 'http://example.com/push').with { |req| - matches = req.body.match(OStatus::TagManager::VERBS[:delete]) - }).to have_been_made.at_least_once - end - - it 'sends Salmon slap to previously mentioned users' do - expect(a_request(:post, "http://example.com/salmon").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:delete]) - }).to have_been_made.once - end - it 'sends delete activity to followers' do expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.at_least_once end diff --git a/spec/services/block_service_spec.rb b/spec/services/block_service_spec.rb index 6584bb90e..de20dd026 100644 --- a/spec/services/block_service_spec.rb +++ b/spec/services/block_service_spec.rb @@ -28,13 +28,6 @@ RSpec.describe BlockService, type: :service do it 'creates a blocking relation' do expect(sender.blocking?(bob)).to be true end - - it 'sends a block salmon slap' do - expect(a_request(:post, "http://salmon.example.com/").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:block]) - }).to have_been_made.once - end end describe 'remote ActivityPub' do diff --git a/spec/services/bootstrap_timeline_service_spec.rb b/spec/services/bootstrap_timeline_service_spec.rb index a765de791..a28d2407c 100644 --- a/spec/services/bootstrap_timeline_service_spec.rb +++ b/spec/services/bootstrap_timeline_service_spec.rb @@ -22,9 +22,10 @@ RSpec.describe BootstrapTimelineService, type: :service do context 'when setting is set' do let!(:alice) { Fabricate(:account, username: 'alice') } let!(:bob) { Fabricate(:account, username: 'bob') } + let!(:eve) { Fabricate(:account, username: 'eve', suspended: true) } before do - Setting.bootstrap_timeline_accounts = 'alice, bob' + Setting.bootstrap_timeline_accounts = 'alice, @bob, eve, unknown' subject.call(source_account) end @@ -32,6 +33,10 @@ RSpec.describe BootstrapTimelineService, type: :service do expect(source_account.following?(alice)).to be true expect(source_account.following?(bob)).to be true end + + it 'does not follow suspended account' do + expect(source_account.following?(eve)).to be false + end end end end diff --git a/spec/services/favourite_service_spec.rb b/spec/services/favourite_service_spec.rb index 0a20ccf6e..4c29ea77b 100644 --- a/spec/services/favourite_service_spec.rb +++ b/spec/services/favourite_service_spec.rb @@ -30,13 +30,6 @@ RSpec.describe FavouriteService, type: :service do it 'creates a favourite' do expect(status.favourites.first).to_not be_nil end - - it 'sends a salmon slap' do - expect(a_request(:post, "http://salmon.example.com/").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:favorite]) - }).to have_been_made.once - end end describe 'remote ActivityPub' do diff --git a/spec/services/fetch_link_card_service_spec.rb b/spec/services/fetch_link_card_service_spec.rb index 50c60aafd..8b296cc70 100644 --- a/spec/services/fetch_link_card_service_spec.rb +++ b/spec/services/fetch_link_card_service_spec.rb @@ -4,20 +4,13 @@ RSpec.describe FetchLinkCardService, type: :service do subject { FetchLinkCardService.new } before do - stub_request(:head, 'http://example.xn--fiqs8s/').to_return(status: 200, headers: { 'Content-Type' => 'text/html' }) stub_request(:get, 'http://example.xn--fiqs8s/').to_return(request_fixture('idn.txt')) - stub_request(:head, 'http://example.com/sjis').to_return(status: 200, headers: { 'Content-Type' => 'text/html' }) stub_request(:get, 'http://example.com/sjis').to_return(request_fixture('sjis.txt')) - stub_request(:head, 'http://example.com/sjis_with_wrong_charset').to_return(status: 200, headers: { 'Content-Type' => 'text/html' }) stub_request(:get, 'http://example.com/sjis_with_wrong_charset').to_return(request_fixture('sjis_with_wrong_charset.txt')) - stub_request(:head, 'http://example.com/koi8-r').to_return(status: 200, headers: { 'Content-Type' => 'text/html' }) stub_request(:get, 'http://example.com/koi8-r').to_return(request_fixture('koi8-r.txt')) - stub_request(:head, 'http://example.com/日本語').to_return(status: 200, headers: { 'Content-Type' => 'text/html' }) stub_request(:get, 'http://example.com/日本語').to_return(request_fixture('sjis.txt')) - stub_request(:head, 'https://github.com/qbi/WannaCry').to_return(status: 404) - stub_request(:head, 'http://example.com/test-').to_return(status: 200, headers: { 'Content-Type' => 'text/html' }) + stub_request(:get, 'https://github.com/qbi/WannaCry').to_return(status: 404) stub_request(:get, 'http://example.com/test-').to_return(request_fixture('idn.txt')) - stub_request(:head, 'http://example.com/windows-1251').to_return(status: 200, headers: { 'Content-Type' => 'text/html' }) stub_request(:get, 'http://example.com/windows-1251').to_return(request_fixture('windows-1251.txt')) subject.call(status) @@ -87,14 +80,14 @@ RSpec.describe FetchLinkCardService, type: :service do end context 'in a remote status' do - let(:status) { Fabricate(:status, account: Fabricate(:account, domain: 'example.com'), text: 'Habt ihr ein paar gute Links zu #<span class="tag"><a href="https://quitter.se/tag/wannacry" target="_blank" rel="tag noopener" title="https://quitter.se/tag/wannacry">Wannacry</a></span> herumfliegen? Ich will mal unter <br> <a href="https://github.com/qbi/WannaCry" target="_blank" rel="noopener" title="https://github.com/qbi/WannaCry">https://github.com/qbi/WannaCry</a> was sammeln. !<a href="http://sn.jonkman.ca/group/416/id" target="_blank" rel="noopener" title="http://sn.jonkman.ca/group/416/id">security</a> ') } + let(:status) { Fabricate(:status, account: Fabricate(:account, domain: 'example.com'), text: 'Habt ihr ein paar gute Links zu <a>foo</a> #<span class="tag"><a href="https://quitter.se/tag/wannacry" target="_blank" rel="tag noopener noreferrer" title="https://quitter.se/tag/wannacry">Wannacry</a></span> herumfliegen? Ich will mal unter <br> <a href="https://github.com/qbi/WannaCry" target="_blank" rel="noopener noreferrer" title="https://github.com/qbi/WannaCry">https://github.com/qbi/WannaCry</a> was sammeln. !<a href="http://sn.jonkman.ca/group/416/id" target="_blank" rel="noopener noreferrer" title="http://sn.jonkman.ca/group/416/id">security</a> ') } it 'parses out URLs' do - expect(a_request(:head, 'https://github.com/qbi/WannaCry')).to have_been_made.at_least_once + expect(a_request(:get, 'https://github.com/qbi/WannaCry')).to have_been_made.at_least_once end it 'ignores URLs to hashtags' do - expect(a_request(:head, 'https://quitter.se/tag/wannacry')).to_not have_been_made + expect(a_request(:get, 'https://quitter.se/tag/wannacry')).to_not have_been_made end end end diff --git a/spec/services/fetch_oembed_service_spec.rb b/spec/services/fetch_oembed_service_spec.rb index 5789fb53b..a4262b040 100644 --- a/spec/services/fetch_oembed_service_spec.rb +++ b/spec/services/fetch_oembed_service_spec.rb @@ -113,6 +113,24 @@ describe FetchOEmbedService, type: :service do end + context 'when endpoint is cached' do + before do + stub_request(:get, 'http://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=dqwpQarrDwk').to_return( + status: 200, + headers: { 'Content-Type': 'text/html' }, + body: request_fixture('oembed_json_empty.html') + ) + end + + it 'returns new provider without fetching original URL first' do + subject.call('https://www.youtube.com/watch?v=dqwpQarrDwk', cached_endpoint: { endpoint: 'http://www.youtube.com/oembed?format=json&url={url}', format: :json }) + expect(a_request(:get, 'https://www.youtube.com/watch?v=dqwpQarrDwk')).to_not have_been_made + expect(subject.endpoint_url).to eq 'http://www.youtube.com/oembed?format=json&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdqwpQarrDwk' + expect(subject.format).to eq :json + expect(a_request(:get, 'http://www.youtube.com/oembed?format=json&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdqwpQarrDwk')).to have_been_made + end + end + context 'when status code is not 200' do before do stub_request(:get, 'https://host.test/oembed.html').to_return( diff --git a/spec/services/fetch_remote_account_service_spec.rb b/spec/services/fetch_remote_account_service_spec.rb index 3cd86708b..ee7325be2 100644 --- a/spec/services/fetch_remote_account_service_spec.rb +++ b/spec/services/fetch_remote_account_service_spec.rb @@ -4,6 +4,7 @@ RSpec.describe FetchRemoteAccountService, type: :service do let(:url) { 'https://example.com/alice' } let(:prefetched_body) { nil } let(:protocol) { :ostatus } + subject { FetchRemoteAccountService.new.call(url, prefetched_body, protocol) } let(:actor) do @@ -36,36 +37,6 @@ RSpec.describe FetchRemoteAccountService, type: :service do include_examples 'return Account' end - context 'protocol is :ostatus' do - let(:prefetched_body) { xml } - let(:protocol) { :ostatus } - - before do - stub_request(:get, "https://kickass.zone/.well-known/webfinger?resource=acct:localhost@kickass.zone").to_return(request_fixture('webfinger-hacker3.txt')) - stub_request(:get, "https://kickass.zone/api/statuses/user_timeline/7477.atom").to_return(request_fixture('feed.txt')) - end - - include_examples 'return Account' - - it 'does not update account information if XML comes from an unverified domain' do - feed_xml = <<-XML.squish - <?xml version="1.0" encoding="UTF-8"?> - <feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:media="http://purl.org/syndication/atommedia" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:statusnet="http://status.net/schema/api/1/"> - <author> - <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> - <uri>http://kickass.zone/users/localhost</uri> - <name>localhost</name> - <poco:preferredUsername>localhost</poco:preferredUsername> - <poco:displayName>Villain!!!</poco:displayName> - </author> - </feed> - XML - - returned_account = described_class.new.call('https://real-fake-domains.com/alice', feed_xml, :ostatus) - expect(returned_account.display_name).to_not eq 'Villain!!!' - end - end - context 'when prefetched_body is nil' do context 'protocol is :activitypub' do before do @@ -75,15 +46,5 @@ RSpec.describe FetchRemoteAccountService, type: :service do include_examples 'return Account' end - - context 'protocol is :ostatus' do - before do - stub_request(:get, url).to_return(status: 200, body: xml, headers: { 'Content-Type' => 'application/atom+xml' }) - stub_request(:get, "https://kickass.zone/.well-known/webfinger?resource=acct:localhost@kickass.zone").to_return(request_fixture('webfinger-hacker3.txt')) - stub_request(:get, "https://kickass.zone/api/statuses/user_timeline/7477.atom").to_return(request_fixture('feed.txt')) - end - - include_examples 'return Account' - end end end diff --git a/spec/services/fetch_atom_service_spec.rb b/spec/services/fetch_resource_service_spec.rb index 495540004..f836147d3 100644 --- a/spec/services/fetch_atom_service_spec.rb +++ b/spec/services/fetch_resource_service_spec.rb @@ -1,73 +1,80 @@ require 'rails_helper' -RSpec.describe FetchAtomService, type: :service do +RSpec.describe FetchResourceService, type: :service do describe '#call' do let(:url) { 'http://example.com' } - subject { FetchAtomService.new.call(url) } - context 'url is blank' do + subject { described_class.new.call(url) } + + context 'with blank url' do let(:url) { '' } it { is_expected.to be_nil } end - context 'request failed' do + context 'when request fails' do before do - WebMock.stub_request(:get, url).to_return(status: 500, body: '', headers: {}) + stub_request(:get, url).to_return(status: 500, body: '', headers: {}) end it { is_expected.to be_nil } end - context 'raise OpenSSL::SSL::SSLError' do + context 'when OpenSSL::SSL::SSLError is raised' do before do - allow(Request).to receive_message_chain(:new, :add_headers, :perform).and_raise(OpenSSL::SSL::SSLError) + allow(Request).to receive_message_chain(:new, :add_headers, :on_behalf_of, :perform).and_raise(OpenSSL::SSL::SSLError) end - it 'output log and return nil' do - expect_any_instance_of(ActiveSupport::Logger).to receive(:debug).with('SSL error: OpenSSL::SSL::SSLError') - is_expected.to be_nil - end + it { is_expected.to be_nil } end - context 'raise HTTP::ConnectionError' do + context 'when HTTP::ConnectionError is raised' do before do - allow(Request).to receive_message_chain(:new, :add_headers, :perform).and_raise(HTTP::ConnectionError) + allow(Request).to receive_message_chain(:new, :add_headers, :on_behalf_of, :perform).and_raise(HTTP::ConnectionError) end - it 'output log and return nil' do - expect_any_instance_of(ActiveSupport::Logger).to receive(:debug).with('HTTP ConnectionError: HTTP::ConnectionError') - is_expected.to be_nil - end + it { is_expected.to be_nil } end - context 'response success' do + context 'when request succeeds' do let(:body) { '' } - let(:headers) { { 'Content-Type' => content_type } } - let(:json) { - { id: 1, + + let(:content_type) { 'application/json' } + + let(:headers) do + { 'Content-Type' => content_type } + end + + let(:json) do + { + id: 1, '@context': ActivityPub::TagManager::CONTEXT, type: 'Note', }.to_json - } + end before do - WebMock.stub_request(:get, url).to_return(status: 200, body: body, headers: headers) + stub_request(:get, url).to_return(status: 200, body: body, headers: headers) + end + + it 'signs request' do + subject + expect(a_request(:get, url).with(headers: { 'Signature' => /keyId="#{Regexp.escape(ActivityPub::TagManager.instance.uri_for(Account.representative) + '#main-key')}"/ })).to have_been_made end - context 'content type is application/atom+xml' do + context 'when content type is application/atom+xml' do let(:content_type) { 'application/atom+xml' } - it { is_expected.to eq [url, { :prefetched_body => "" }, :ostatus] } + it { is_expected.to eq nil } end - context 'content_type is activity+json' do + context 'when content type is activity+json' do let(:content_type) { 'application/activity+json; charset=utf-8' } let(:body) { json } it { is_expected.to eq [1, { prefetched_body: body, id: true }, :activitypub] } end - context 'content_type is ld+json with profile' do + context 'when content type is ld+json with profile' do let(:content_type) { 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' } let(:body) { json } @@ -75,17 +82,17 @@ RSpec.describe FetchAtomService, type: :service do end before do - WebMock.stub_request(:get, url).to_return(status: 200, body: body, headers: headers) - WebMock.stub_request(:get, 'http://example.com/foo').to_return(status: 200, body: json, headers: { 'Content-Type' => 'application/activity+json' }) + stub_request(:get, url).to_return(status: 200, body: body, headers: headers) + stub_request(:get, 'http://example.com/foo').to_return(status: 200, body: json, headers: { 'Content-Type' => 'application/activity+json' }) end - context 'has link header' do + context 'when link header is present' do let(:headers) { { 'Link' => '<http://example.com/foo>; rel="alternate"; type="application/activity+json"', } } it { is_expected.to eq [1, { prefetched_body: json, id: true }, :activitypub] } end - context 'content type is text/html' do + context 'when content type is text/html' do let(:content_type) { 'text/html' } let(:body) { '<html><head><link rel="alternate" href="http://example.com/foo" type="application/activity+json"/></head></html>' } diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb index 3c4ec59be..ae863a9f0 100644 --- a/spec/services/follow_service_spec.rb +++ b/spec/services/follow_service_spec.rb @@ -30,6 +30,33 @@ RSpec.describe FollowService, type: :service do end end + describe 'unlocked account, from silenced account' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + sender.touch(:silenced_at) + subject.call(sender, bob.acct) + end + + it 'creates a follow request with reblogs' do + expect(FollowRequest.find_by(account: sender, target_account: bob, show_reblogs: true)).to_not be_nil + end + end + + describe 'unlocked account, from a muted account' do + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + + before do + bob.mute!(sender) + subject.call(sender, bob.acct) + end + + it 'creates a following relation with reblogs' do + expect(sender.following?(bob)).to be true + expect(sender.muting_reblogs?(bob)).to be false + end + end + describe 'unlocked account' do let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } @@ -96,74 +123,6 @@ RSpec.describe FollowService, type: :service do end end - context 'remote OStatus account' do - describe 'locked account' do - let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, protocol: :ostatus, locked: true, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com')).account } - - before do - stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) - subject.call(sender, bob.acct) - end - - it 'creates a follow request' do - expect(FollowRequest.find_by(account: sender, target_account: bob)).to_not be_nil - end - - it 'sends a follow request salmon slap' do - expect(a_request(:post, "http://salmon.example.com/").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:request_friend]) - }).to have_been_made.once - end - end - - describe 'unlocked account' do - let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, protocol: :ostatus, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com', hub_url: 'http://hub.example.com')).account } - - before do - stub_request(:post, "http://salmon.example.com/").to_return(:status => 200, :body => "", :headers => {}) - stub_request(:post, "http://hub.example.com/").to_return(status: 202) - subject.call(sender, bob.acct) - end - - it 'creates a following relation' do - expect(sender.following?(bob)).to be true - end - - it 'sends a follow salmon slap' do - expect(a_request(:post, "http://salmon.example.com/").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:follow]) - }).to have_been_made.once - end - - it 'subscribes to PuSH' do - expect(a_request(:post, "http://hub.example.com/")).to have_been_made.once - end - end - - describe 'already followed account' do - let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, protocol: :ostatus, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com', hub_url: 'http://hub.example.com')).account } - - before do - sender.follow!(bob) - subject.call(sender, bob.acct) - end - - it 'keeps a following relation' do - expect(sender.following?(bob)).to be true - end - - it 'does not send a follow salmon slap' do - expect(a_request(:post, "http://salmon.example.com/")).not_to have_been_made - end - - it 'does not subscribe to PuSH' do - expect(a_request(:post, "http://hub.example.com/")).not_to have_been_made - end - end - end - context 'remote ActivityPub account' do let(:bob) { Fabricate(:user, account: Fabricate(:account, username: 'bob', domain: 'example.com', protocol: :activitypub, inbox_url: 'http://example.com/inbox')).account } diff --git a/spec/services/import_service_spec.rb b/spec/services/import_service_spec.rb index 5cf2dadf0..5355133f4 100644 --- a/spec/services/import_service_spec.rb +++ b/spec/services/import_service_spec.rb @@ -3,7 +3,11 @@ require 'rails_helper' RSpec.describe ImportService, type: :service do let!(:account) { Fabricate(:account, locked: false) } let!(:bob) { Fabricate(:account, username: 'bob', locked: false) } - let!(:eve) { Fabricate(:account, username: 'eve', domain: 'example.com', locked: false) } + let!(:eve) { Fabricate(:account, username: 'eve', domain: 'example.com', locked: false, protocol: :activitypub, inbox_url: 'https://example.com/inbox') } + + before do + stub_request(:post, "https://example.com/inbox").to_return(status: 200) + end context 'import old-style list of muted users' do subject { ImportService.new } @@ -95,7 +99,8 @@ RSpec.describe ImportService, type: :service do let(:import) { Import.create(account: account, type: 'following', data: csv) } it 'follows the listed accounts, including boosts' do subject.call(import) - expect(account.following.count).to eq 2 + expect(account.following.count).to eq 1 + expect(account.follow_requests.count).to eq 1 expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true end end @@ -106,7 +111,8 @@ RSpec.describe ImportService, type: :service do it 'follows the listed accounts, including notifications' do account.follow!(bob, reblogs: false) subject.call(import) - expect(account.following.count).to eq 2 + expect(account.following.count).to eq 1 + expect(account.follow_requests.count).to eq 1 expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true end end @@ -117,7 +123,8 @@ RSpec.describe ImportService, type: :service do it 'mutes the listed accounts, including notifications' do account.follow!(bob, reblogs: false) subject.call(import) - expect(account.following.count).to eq 2 + expect(account.following.count).to eq 1 + expect(account.follow_requests.count).to eq 1 expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true end end @@ -136,9 +143,10 @@ RSpec.describe ImportService, type: :service do let(:import) { Import.create(account: account, type: 'following', data: csv) } it 'follows the listed accounts, respecting boosts' do subject.call(import) - expect(account.following.count).to eq 2 + expect(account.following.count).to eq 1 + expect(account.follow_requests.count).to eq 1 expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true - expect(Follow.find_by(account: account, target_account: eve).show_reblogs).to be false + expect(FollowRequest.find_by(account: account, target_account: eve).show_reblogs).to be false end end @@ -148,9 +156,10 @@ RSpec.describe ImportService, type: :service do it 'mutes the listed accounts, respecting notifications' do account.follow!(bob, reblogs: true) subject.call(import) - expect(account.following.count).to eq 2 + expect(account.following.count).to eq 1 + expect(account.follow_requests.count).to eq 1 expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true - expect(Follow.find_by(account: account, target_account: eve).show_reblogs).to be false + expect(FollowRequest.find_by(account: account, target_account: eve).show_reblogs).to be false end end @@ -160,9 +169,10 @@ RSpec.describe ImportService, type: :service do it 'mutes the listed accounts, respecting notifications' do account.follow!(bob, reblogs: true) subject.call(import) - expect(account.following.count).to eq 2 + expect(account.following.count).to eq 1 + expect(account.follow_requests.count).to eq 1 expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true - expect(Follow.find_by(account: account, target_account: eve).show_reblogs).to be false + expect(FollowRequest.find_by(account: account, target_account: eve).show_reblogs).to be false end end end diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index facbe977f..bf06f50e9 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -144,7 +144,6 @@ RSpec.describe PostStatusService, type: :service do it 'gets distributed' do allow(DistributionWorker).to receive(:perform_async) - allow(Pubsubhubbub::DistributionWorker).to receive(:perform_async) allow(ActivityPub::DistributionWorker).to receive(:perform_async) account = Fabricate(:account) @@ -152,7 +151,6 @@ RSpec.describe PostStatusService, type: :service do status = subject.call(account, text: "test status update") expect(DistributionWorker).to have_received(:perform_async).with(status.id) - expect(Pubsubhubbub::DistributionWorker).to have_received(:perform_async).with(status.stream_entry.id) expect(ActivityPub::DistributionWorker).to have_received(:perform_async).with(status.id) end diff --git a/spec/services/process_feed_service_spec.rb b/spec/services/process_feed_service_spec.rb deleted file mode 100644 index 9d3465f3f..000000000 --- a/spec/services/process_feed_service_spec.rb +++ /dev/null @@ -1,252 +0,0 @@ -require 'rails_helper' - -RSpec.describe ProcessFeedService, type: :service do - subject { ProcessFeedService.new } - - describe 'processing a feed' do - let(:body) { File.read(Rails.root.join('spec', 'fixtures', 'xml', 'mastodon.atom')) } - let(:account) { Fabricate(:account, username: 'localhost', domain: 'kickass.zone') } - - before do - stub_request(:post, "https://pubsubhubbub.superfeedr.com/").to_return(:status => 200, :body => "", :headers => {}) - stub_request(:head, "http://kickass.zone/media/2").to_return(:status => 404) - stub_request(:head, "http://kickass.zone/media/3").to_return(:status => 404) - stub_request(:get, "http://kickass.zone/system/accounts/avatars/000/000/001/large/eris.png").to_return(request_fixture('avatar.txt')) - stub_request(:get, "http://kickass.zone/system/media_attachments/files/000/000/002/original/morpheus_linux.jpg?1476059910").to_return(request_fixture('attachment1.txt')) - stub_request(:get, "http://kickass.zone/system/media_attachments/files/000/000/003/original/gizmo.jpg?1476060065").to_return(request_fixture('attachment2.txt')) - end - - context 'when domain does not reject media' do - before do - subject.call(body, account) - end - - it 'updates remote user\'s account information' do - account.reload - expect(account.display_name).to eq '::1' - expect(account).to have_attached_file(:avatar) - expect(account.avatar_file_name).not_to be_nil - end - - it 'creates posts' do - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=1:objectType=Status')).to_not be_nil - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=2:objectType=Status')).to_not be_nil - end - - it 'marks replies as replies' do - status = Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=2:objectType=Status') - expect(status.reply?).to be true - end - - it 'sets account being replied to when possible' do - status = Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=2:objectType=Status') - expect(status.in_reply_to_account_id).to eq status.account_id - end - - it 'ignores delete statuses unless they existed before' do - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=3:objectType=Status')).to be_nil - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=12:objectType=Status')).to be_nil - end - - it 'does not create statuses for follows' do - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=1:objectType=Follow')).to be_nil - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=2:objectType=Follow')).to be_nil - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=4:objectType=Follow')).to be_nil - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=7:objectType=Follow')).to be_nil - end - - it 'does not create statuses for favourites' do - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=2:objectType=Favourite')).to be_nil - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=3:objectType=Favourite')).to be_nil - end - - it 'creates posts with media' do - status = Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=14:objectType=Status') - - expect(status).to_not be_nil - expect(status.media_attachments.first).to have_attached_file(:file) - expect(status.media_attachments.first.image?).to be true - expect(status.media_attachments.first.file_file_name).not_to be_nil - end - end - - context 'when domain is set to reject media' do - let!(:domain_block) { Fabricate(:domain_block, domain: 'kickass.zone', reject_media: true) } - - before do - subject.call(body, account) - end - - it 'updates remote user\'s account information' do - account.reload - expect(account.display_name).to eq '::1' - end - - it 'rejects remote user\'s avatar' do - account.reload - expect(account.display_name).to eq '::1' - expect(account.avatar_file_name).to be_nil - end - - it 'creates posts' do - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=1:objectType=Status')).to_not be_nil - expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=2:objectType=Status')).to_not be_nil - end - - it 'creates posts with remote-only media' do - status = Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=14:objectType=Status') - - expect(status).to_not be_nil - expect(status.media_attachments.first.file_file_name).to be_nil - expect(status.media_attachments.first.unknown?).to be true - end - end - end - - it 'does not accept tampered reblogs' do - good_actor = Fabricate(:account, username: 'tracer', domain: 'overwatch.com') - - real_body = <<XML -<?xml version="1.0"?> -<entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:mastodon="http://mastodon.social/schema/1.0"> - <id>tag:overwatch.com,2017-04-27:objectId=4467137:objectType=Status</id> - <published>2017-04-27T13:49:25Z</published> - <updated>2017-04-27T13:49:25Z</updated> - <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type> - <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> - <author> - <id>https://overwatch.com/users/tracer</id> - <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> - <uri>https://overwatch.com/users/tracer</uri> - <name>tracer</name> - </author> - <content type="html">Overwatch rocks</content> -</entry> -XML - - stub_request(:get, 'https://overwatch.com/users/tracer/updates/1').to_return(status: 200, body: real_body, headers: { 'Content-Type' => 'application/atom+xml' }) - - bad_actor = Fabricate(:account, username: 'sombra', domain: 'talon.xyz') - - body = <<XML -<?xml version="1.0"?> -<entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:mastodon="http://mastodon.social/schema/1.0"> - <id>tag:talon.xyz,2017-04-27:objectId=4467137:objectType=Status</id> - <published>2017-04-27T13:49:25Z</published> - <updated>2017-04-27T13:49:25Z</updated> - <author> - <id>https://talon.xyz/users/sombra</id> - <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> - <uri>https://talon.xyz/users/sombra</uri> - <name>sombra</name> - </author> - <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> - <activity:verb>http://activitystrea.ms/schema/1.0/share</activity:verb> - <content type="html">Overwatch SUCKS AHAHA</content> - <activity:object> - <id>tag:overwatch.com,2017-04-27:objectId=4467137:objectType=Status</id> - <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type> - <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> - <author> - <id>https://overwatch.com/users/tracer</id> - <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> - <uri>https://overwatch.com/users/tracer</uri> - <name>tracer</name> - </author> - <content type="html">Overwatch SUCKS AHAHA</content> - <link rel="alternate" type="text/html" href="https://overwatch.com/users/tracer/updates/1" /> - </activity:object> -</entry> -XML - created_statuses = subject.call(body, bad_actor) - - expect(created_statuses.first.reblog?).to be true - expect(created_statuses.first.account_id).to eq bad_actor.id - expect(created_statuses.first.reblog.account_id).to eq good_actor.id - expect(created_statuses.first.reblog.text).to eq 'Overwatch rocks' - end - - it 'ignores reblogs if it failed to retrieve reblogged statuses' do - stub_request(:get, 'https://overwatch.com/users/tracer/updates/1').to_return(status: 404) - - actor = Fabricate(:account, username: 'tracer', domain: 'overwatch.com') - - body = <<XML -<?xml version="1.0"?> -<entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:mastodon="http://mastodon.social/schema/1.0"> - <id>tag:overwatch.com,2017-04-27:objectId=4467137:objectType=Status</id> - <published>2017-04-27T13:49:25Z</published> - <updated>2017-04-27T13:49:25Z</updated> - <author> - <id>https://overwatch.com/users/tracer</id> - <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> - <uri>https://overwatch.com/users/tracer</uri> - <name>tracer</name> - </author> - <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> - <activity:verb>http://activitystrea.ms/schema/1.0/share</activity:verb> - <content type="html">Overwatch rocks</content> - <activity:object> - <id>tag:overwatch.com,2017-04-27:objectId=4467137:objectType=Status</id> - <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type> - <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> - <author> - <id>https://overwatch.com/users/tracer</id> - <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> - <uri>https://overwatch.com/users/tracer</uri> - <name>tracer</name> - </author> - <content type="html">Overwatch rocks</content> - <link rel="alternate" type="text/html" href="https://overwatch.com/users/tracer/updates/1" /> - </activity:object> -XML - - created_statuses = subject.call(body, actor) - - expect(created_statuses).to eq [] - end - - it 'ignores statuses with an out-of-order delete' do - sender = Fabricate(:account, username: 'tracer', domain: 'overwatch.com') - - delete_body = <<XML -<?xml version="1.0"?> -<entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:mastodon="http://mastodon.social/schema/1.0"> - <id>tag:overwatch.com,2017-04-27:objectId=4487555:objectType=Status</id> - <published>2017-04-27T13:49:25Z</published> - <updated>2017-04-27T13:49:25Z</updated> - <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type> - <activity:verb>http://activitystrea.ms/schema/1.0/delete</activity:verb> - <author> - <id>https://overwatch.com/users/tracer</id> - <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> - <uri>https://overwatch.com/users/tracer</uri> - <name>tracer</name> - </author> -</entry> -XML - - status_body = <<XML -<?xml version="1.0"?> -<entry xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:mastodon="http://mastodon.social/schema/1.0"> - <id>tag:overwatch.com,2017-04-27:objectId=4487555:objectType=Status</id> - <published>2017-04-27T13:49:25Z</published> - <updated>2017-04-27T13:49:25Z</updated> - <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type> - <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> - <author> - <id>https://overwatch.com/users/tracer</id> - <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> - <uri>https://overwatch.com/users/tracer</uri> - <name>tracer</name> - </author> - <content type="html">Overwatch rocks</content> -</entry> -XML - - subject.call(delete_body, sender) - created_statuses = subject.call(status_body, sender) - - expect(created_statuses).to be_empty - end -end diff --git a/spec/services/process_interaction_service_spec.rb b/spec/services/process_interaction_service_spec.rb deleted file mode 100644 index b858c19d0..000000000 --- a/spec/services/process_interaction_service_spec.rb +++ /dev/null @@ -1,151 +0,0 @@ -require 'rails_helper' - -RSpec.describe ProcessInteractionService, type: :service do - let(:receiver) { Fabricate(:user, email: 'alice@example.com', account: Fabricate(:account, username: 'alice')).account } - let(:sender) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } - let(:remote_sender) { Fabricate(:account, username: 'carol', domain: 'localdomain.com', uri: 'https://webdomain.com/users/carol') } - - subject { ProcessInteractionService.new } - - describe 'status delete slap' do - let(:remote_status) { Fabricate(:status, account: remote_sender) } - let(:envelope) { OStatus2::Salmon.new.pack(payload, sender.keypair) } - let(:payload) { - <<~XML - <entry xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/"> - <author> - <email>carol@localdomain.com</email> - <name>carol</name> - <uri>https://webdomain.com/users/carol</uri> - </author> - - <id>#{remote_status.id}</id> - <activity:verb>http://activitystrea.ms/schema/1.0/delete</activity:verb> - </entry> - XML - } - - before do - receiver.update(locked: true) - remote_sender.update(private_key: sender.private_key, public_key: remote_sender.public_key) - end - - it 'deletes a record' do - expect(RemovalWorker).to receive(:perform_async).with(remote_status.id) - subject.call(envelope, receiver) - end - end - - describe 'follow request slap' do - before do - receiver.update(locked: true) - - payload = <<XML -<entry xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/"> - <author> - <name>bob</name> - <uri>https://cb6e6126.ngrok.io/users/bob</uri> - </author> - - <id>someIdHere</id> - <activity:verb>http://activitystrea.ms/schema/1.0/request-friend</activity:verb> -</entry> -XML - - envelope = OStatus2::Salmon.new.pack(payload, sender.keypair) - subject.call(envelope, receiver) - end - - it 'creates a record' do - expect(FollowRequest.find_by(account: sender, target_account: receiver)).to_not be_nil - end - end - - describe 'follow request slap from known remote user identified by email' do - before do - receiver.update(locked: true) - # Copy already-generated key - remote_sender.update(private_key: sender.private_key, public_key: remote_sender.public_key) - - payload = <<XML -<entry xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/"> - <author> - <email>carol@localdomain.com</email> - <name>carol</name> - <uri>https://webdomain.com/users/carol</uri> - </author> - - <id>someIdHere</id> - <activity:verb>http://activitystrea.ms/schema/1.0/request-friend</activity:verb> -</entry> -XML - - envelope = OStatus2::Salmon.new.pack(payload, remote_sender.keypair) - subject.call(envelope, receiver) - end - - it 'creates a record' do - expect(FollowRequest.find_by(account: remote_sender, target_account: receiver)).to_not be_nil - end - end - - describe 'follow request authorization slap' do - before do - receiver.update(locked: true) - FollowRequest.create(account: sender, target_account: receiver) - - payload = <<XML -<entry xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/"> - <author> - <name>alice</name> - <uri>https://cb6e6126.ngrok.io/users/alice</uri> - </author> - - <id>someIdHere</id> - <activity:verb>http://activitystrea.ms/schema/1.0/authorize</activity:verb> -</entry> -XML - - envelope = OStatus2::Salmon.new.pack(payload, receiver.keypair) - subject.call(envelope, sender) - end - - it 'creates a follow relationship' do - expect(Follow.find_by(account: sender, target_account: receiver)).to_not be_nil - end - - it 'removes the follow request' do - expect(FollowRequest.find_by(account: sender, target_account: receiver)).to be_nil - end - end - - describe 'follow request rejection slap' do - before do - receiver.update(locked: true) - FollowRequest.create(account: sender, target_account: receiver) - - payload = <<XML -<entry xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/"> - <author> - <name>alice</name> - <uri>https://cb6e6126.ngrok.io/users/alice</uri> - </author> - - <id>someIdHere</id> - <activity:verb>http://activitystrea.ms/schema/1.0/reject</activity:verb> -</entry> -XML - - envelope = OStatus2::Salmon.new.pack(payload, receiver.keypair) - subject.call(envelope, sender) - end - - it 'does not create a follow relationship' do - expect(Follow.find_by(account: sender, target_account: receiver)).to be_nil - end - - it 'removes the follow request' do - expect(FollowRequest.find_by(account: sender, target_account: receiver)).to be_nil - end - end -end diff --git a/spec/services/process_mentions_service_spec.rb b/spec/services/process_mentions_service_spec.rb index 8a6bb44ac..b1abd79b0 100644 --- a/spec/services/process_mentions_service_spec.rb +++ b/spec/services/process_mentions_service_spec.rb @@ -15,12 +15,8 @@ RSpec.describe ProcessMentionsService, type: :service do subject.call(status) end - it 'creates a mention' do - expect(remote_user.mentions.where(status: status).count).to eq 1 - end - - it 'posts to remote user\'s Salmon end point' do - expect(a_request(:post, remote_user.salmon_url)).to have_been_made.once + it 'does not create a mention' do + expect(remote_user.mentions.where(status: status).count).to eq 0 end end diff --git a/spec/services/pubsubhubbub/subscribe_service_spec.rb b/spec/services/pubsubhubbub/subscribe_service_spec.rb deleted file mode 100644 index 01c956230..000000000 --- a/spec/services/pubsubhubbub/subscribe_service_spec.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Pubsubhubbub::SubscribeService, type: :service do - describe '#call' do - subject { described_class.new } - let(:user_account) { Fabricate(:account) } - - context 'with a nil account' do - it 'returns the invalid topic status results' do - result = service_call(account: nil) - - expect(result).to eq invalid_topic_status - end - end - - context 'with an invalid callback url' do - it 'returns invalid callback status when callback is blank' do - result = service_call(callback: '') - - expect(result).to eq invalid_callback_status - end - it 'returns invalid callback status when callback is not a URI' do - result = service_call(callback: 'invalid-hostname') - - expect(result).to eq invalid_callback_status - end - end - - context 'with a blocked domain in the callback' do - it 'returns callback not allowed' do - Fabricate(:domain_block, domain: 'test.host', severity: :suspend) - result = service_call(callback: 'https://test.host/api') - - expect(result).to eq not_allowed_callback_status - end - end - - context 'with a valid account and callback' do - it 'returns success status and confirms subscription' do - allow(Pubsubhubbub::ConfirmationWorker).to receive(:perform_async).and_return(nil) - subscription = Fabricate(:subscription, account: user_account) - - result = service_call(callback: subscription.callback_url) - expect(result).to eq success_status - expect(Pubsubhubbub::ConfirmationWorker).to have_received(:perform_async).with(subscription.id, 'subscribe', 'asdf', 3600) - end - end - end - - def service_call(account: user_account, callback: 'https://callback.host', secret: 'asdf', lease_seconds: 3600) - subject.call(account, callback, secret, lease_seconds) - end - - def invalid_topic_status - ['Invalid topic URL', 422] - end - - def invalid_callback_status - ['Invalid callback URL', 422] - end - - def not_allowed_callback_status - ['Callback URL not allowed', 403] - end - - def success_status - ['', 202] - end -end diff --git a/spec/services/pubsubhubbub/unsubscribe_service_spec.rb b/spec/services/pubsubhubbub/unsubscribe_service_spec.rb deleted file mode 100644 index 7ed9fc5af..000000000 --- a/spec/services/pubsubhubbub/unsubscribe_service_spec.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Pubsubhubbub::UnsubscribeService, type: :service do - describe '#call' do - subject { described_class.new } - - context 'with a nil account' do - it 'returns an invalid topic status' do - result = subject.call(nil, 'callback.host') - - expect(result).to eq invalid_topic_status - end - end - - context 'with a valid account' do - let(:account) { Fabricate(:account) } - - it 'returns a valid topic status and does not run confirm when no subscription' do - allow(Pubsubhubbub::ConfirmationWorker).to receive(:perform_async).and_return(nil) - result = subject.call(account, 'callback.host') - - expect(result).to eq valid_topic_status - expect(Pubsubhubbub::ConfirmationWorker).not_to have_received(:perform_async) - end - - it 'returns a valid topic status and does run confirm when there is a subscription' do - subscription = Fabricate(:subscription, account: account, callback_url: 'callback.host') - allow(Pubsubhubbub::ConfirmationWorker).to receive(:perform_async).and_return(nil) - result = subject.call(account, 'callback.host') - - expect(result).to eq valid_topic_status - expect(Pubsubhubbub::ConfirmationWorker).to have_received(:perform_async).with(subscription.id, 'unsubscribe') - end - end - - def invalid_topic_status - ['Invalid topic URL', 422] - end - - def valid_topic_status - ['', 202] - end - end -end diff --git a/spec/services/reblog_service_spec.rb b/spec/services/reblog_service_spec.rb index 9d84c41d5..58fb46f0f 100644 --- a/spec/services/reblog_service_spec.rb +++ b/spec/services/reblog_service_spec.rb @@ -46,10 +46,6 @@ RSpec.describe ReblogService, type: :service do it 'creates a reblog' do expect(status.reblogs.count).to eq 1 end - - it 'sends a Salmon slap for a remote reblog' do - expect(a_request(:post, 'http://salmon.example.com')).to have_been_made - end end context 'ActivityPub' do diff --git a/spec/services/reject_follow_service_spec.rb b/spec/services/reject_follow_service_spec.rb index e5ac37ed9..1aec060db 100644 --- a/spec/services/reject_follow_service_spec.rb +++ b/spec/services/reject_follow_service_spec.rb @@ -38,13 +38,6 @@ RSpec.describe RejectFollowService, type: :service do it 'does not create follow relation' do expect(bob.following?(sender)).to be false end - - it 'sends a follow request rejection salmon slap' do - expect(a_request(:post, "http://salmon.example.com/").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:reject]) - }).to have_been_made.once - end end describe 'remote ActivityPub' do diff --git a/spec/services/remove_status_service_spec.rb b/spec/services/remove_status_service_spec.rb index 7bba83a60..06676ec45 100644 --- a/spec/services/remove_status_service_spec.rb +++ b/spec/services/remove_status_service_spec.rb @@ -10,12 +10,9 @@ RSpec.describe RemoveStatusService, type: :service do let!(:bill) { Fabricate(:account, username: 'bill', protocol: :activitypub, domain: 'example2.com', inbox_url: 'http://example2.com/inbox') } before do - stub_request(:post, 'http://example.com/push').to_return(status: 200, body: '', headers: {}) - stub_request(:post, 'http://example.com/salmon').to_return(status: 200, body: '', headers: {}) stub_request(:post, 'http://example.com/inbox').to_return(status: 200) stub_request(:post, 'http://example2.com/inbox').to_return(status: 200) - Fabricate(:subscription, account: alice, callback_url: 'http://example.com/push', confirmed: true, expires_at: 30.days.from_now) jeff.follow!(alice) hank.follow!(alice) @@ -32,23 +29,10 @@ RSpec.describe RemoveStatusService, type: :service do expect(HomeFeed.new(jeff).get(10)).to_not include(@status.id) end - it 'sends PuSH update to PuSH subscribers' do - expect(a_request(:post, 'http://example.com/push').with { |req| - req.body.match(OStatus::TagManager::VERBS[:delete]) - }).to have_been_made - end - it 'sends delete activity to followers' do expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.twice end - it 'sends Salmon slap to previously mentioned users' do - expect(a_request(:post, "http://example.com/salmon").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:delete]) - }).to have_been_made.once - end - it 'sends delete activity to rebloggers' do expect(a_request(:post, 'http://example2.com/inbox')).to have_been_made end diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb index 27a85af7c..cea942e39 100644 --- a/spec/services/resolve_account_service_spec.rb +++ b/spec/services/resolve_account_service_spec.rb @@ -6,19 +6,13 @@ RSpec.describe ResolveAccountService, type: :service do before do stub_request(:get, "https://quitter.no/.well-known/host-meta").to_return(request_fixture('.host-meta.txt')) stub_request(:get, "https://example.com/.well-known/webfinger?resource=acct:catsrgr8@example.com").to_return(status: 404) - stub_request(:get, "https://redirected.com/.well-known/host-meta").to_return(request_fixture('redirected.host-meta.txt')) stub_request(:get, "https://example.com/.well-known/host-meta").to_return(status: 404) - stub_request(:get, "https://quitter.no/.well-known/webfinger?resource=acct:gargron@quitter.no").to_return(request_fixture('webfinger.txt')) - stub_request(:get, "https://redirected.com/.well-known/webfinger?resource=acct:gargron@redirected.com").to_return(request_fixture('webfinger.txt')) - stub_request(:get, "https://redirected.com/.well-known/webfinger?resource=acct:hacker1@redirected.com").to_return(request_fixture('webfinger-hacker1.txt')) - stub_request(:get, "https://redirected.com/.well-known/webfinger?resource=acct:hacker2@redirected.com").to_return(request_fixture('webfinger-hacker2.txt')) - stub_request(:get, "https://quitter.no/.well-known/webfinger?resource=acct:catsrgr8@quitter.no").to_return(status: 404) - stub_request(:get, "https://quitter.no/api/statuses/user_timeline/7477.atom").to_return(request_fixture('feed.txt')) stub_request(:get, "https://quitter.no/avatar/7477-300-20160211190340.png").to_return(request_fixture('avatar.txt')) - stub_request(:get, "https://localdomain.com/.well-known/host-meta").to_return(request_fixture('localdomain-hostmeta.txt')) - stub_request(:get, "https://localdomain.com/.well-known/webfinger?resource=acct:foo@localdomain.com").to_return(status: 404) - stub_request(:get, "https://webdomain.com/.well-known/webfinger?resource=acct:foo@localdomain.com").to_return(request_fixture('localdomain-webfinger.txt')) - stub_request(:get, "https://webdomain.com/users/foo.atom").to_return(request_fixture('localdomain-feed.txt')) + stub_request(:get, "https://quitter.no/.well-known/webfinger?resource=acct:catsrgr8@quitter.no").to_return(status: 404) + stub_request(:get, "https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com").to_return(request_fixture('activitypub-webfinger.txt')) + stub_request(:get, "https://ap.example.com/users/foo").to_return(request_fixture('activitypub-actor.txt')) + stub_request(:get, "https://ap.example.com/users/foo.atom").to_return(request_fixture('activitypub-feed.txt')) + stub_request(:get, %r{https://ap.example.com/users/foo/\w+}).to_return(status: 404) end it 'raises error if no such user can be resolved via webfinger' do @@ -29,74 +23,7 @@ RSpec.describe ResolveAccountService, type: :service do expect(subject.call('catsrgr8@example.com')).to be_nil end - it 'prevents hijacking existing accounts' do - account = subject.call('hacker1@redirected.com') - expect(account.salmon_url).to_not eq 'https://hacker.com/main/salmon/user/7477' - end - - it 'prevents hijacking inexisting accounts' do - expect(subject.call('hacker2@redirected.com')).to be_nil - end - - context 'with an OStatus account' do - it 'returns an already existing remote account' do - old_account = Fabricate(:account, username: 'gargron', domain: 'quitter.no') - returned_account = subject.call('gargron@quitter.no') - - expect(old_account.id).to eq returned_account.id - end - - it 'returns a new remote account' do - account = subject.call('gargron@quitter.no') - - expect(account.username).to eq 'gargron' - expect(account.domain).to eq 'quitter.no' - expect(account.remote_url).to eq 'https://quitter.no/api/statuses/user_timeline/7477.atom' - end - - it 'follows a legitimate account redirection' do - account = subject.call('gargron@redirected.com') - - expect(account.username).to eq 'gargron' - expect(account.domain).to eq 'quitter.no' - expect(account.remote_url).to eq 'https://quitter.no/api/statuses/user_timeline/7477.atom' - end - - it 'returns a new remote account' do - account = subject.call('foo@localdomain.com') - - expect(account.username).to eq 'foo' - expect(account.domain).to eq 'localdomain.com' - expect(account.remote_url).to eq 'https://webdomain.com/users/foo.atom' - end - end - context 'with an ActivityPub account' do - before do - stub_request(:get, "https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com").to_return(request_fixture('activitypub-webfinger.txt')) - stub_request(:get, "https://ap.example.com/users/foo").to_return(request_fixture('activitypub-actor.txt')) - stub_request(:get, "https://ap.example.com/users/foo.atom").to_return(request_fixture('activitypub-feed.txt')) - stub_request(:get, %r{https://ap.example.com/users/foo/\w+}).to_return(status: 404) - end - - it 'fallback to OStatus if actor json could not be fetched' do - stub_request(:get, "https://ap.example.com/users/foo").to_return(status: 404) - - account = subject.call('foo@ap.example.com') - - expect(account.ostatus?).to eq true - expect(account.remote_url).to eq 'https://ap.example.com/users/foo.atom' - end - - it 'fallback to OStatus if actor json did not have inbox_url' do - stub_request(:get, "https://ap.example.com/users/foo").to_return(request_fixture('activitypub-actor-noinbox.txt')) - - account = subject.call('foo@ap.example.com') - - expect(account.ostatus?).to eq true - expect(account.remote_url).to eq 'https://ap.example.com/users/foo.atom' - end - it 'returns new remote account' do account = subject.call('foo@ap.example.com') @@ -124,13 +51,19 @@ RSpec.describe ResolveAccountService, type: :service do it 'processes one remote account at a time using locks' do wait_for_start = true fail_occurred = false - return_values = [] + return_values = Concurrent::Array.new + + # Preload classes that throw circular dependency errors in threads + Account + TagManager + DomainBlock threads = Array.new(5) do Thread.new do true while wait_for_start + begin - return_values << described_class.new.call('foo@localdomain.com') + return_values << described_class.new.call('foo@ap.example.com') rescue ActiveRecord::RecordNotUnique fail_occurred = true end diff --git a/spec/services/resolve_url_service_spec.rb b/spec/services/resolve_url_service_spec.rb index 7bb5d1940..aa4204637 100644 --- a/spec/services/resolve_url_service_spec.rb +++ b/spec/services/resolve_url_service_spec.rb @@ -6,48 +6,14 @@ describe ResolveURLService, type: :service do subject { described_class.new } describe '#call' do - it 'returns nil when there is no atom url' do - url = 'http://example.com/missing-atom' + it 'returns nil when there is no resource url' do + url = 'http://example.com/missing-resource' service = double - allow(FetchAtomService).to receive(:new).and_return service - allow(service).to receive(:call).with(url).and_return(nil) - - result = subject.call(url) - expect(result).to be_nil - end - - it 'fetches remote accounts for feed types' do - url = 'http://example.com/atom-feed' - service = double - allow(FetchAtomService).to receive(:new).and_return service - feed_url = 'http://feed-url' - feed_content = '<feed>contents</feed>' - allow(service).to receive(:call).with(url).and_return([feed_url, { prefetched_body: feed_content }]) - - account_service = double - allow(FetchRemoteAccountService).to receive(:new).and_return(account_service) - allow(account_service).to receive(:call) - - _result = subject.call(url) - expect(account_service).to have_received(:call).with(feed_url, feed_content, nil) - end - - it 'fetches remote statuses for entry types' do - url = 'http://example.com/atom-entry' - service = double - allow(FetchAtomService).to receive(:new).and_return service - feed_url = 'http://feed-url' - feed_content = '<entry>contents</entry>' - allow(service).to receive(:call).with(url).and_return([feed_url, { prefetched_body: feed_content }]) - - account_service = double - allow(FetchRemoteStatusService).to receive(:new).and_return(account_service) - allow(account_service).to receive(:call) - - _result = subject.call(url) + allow(FetchResourceService).to receive(:new).and_return service + allow(service).to receive(:call).with(url).and_return(nil) - expect(account_service).to have_received(:call).with(feed_url, feed_content, nil) + expect(subject.call(url)).to be_nil end end end diff --git a/spec/services/search_service_spec.rb b/spec/services/search_service_spec.rb index d064cd9b8..739bb9cf5 100644 --- a/spec/services/search_service_spec.rb +++ b/spec/services/search_service_spec.rb @@ -27,7 +27,7 @@ describe SearchService, type: :service do it 'returns the empty results' do service = double(call: nil) allow(ResolveURLService).to receive(:new).and_return(service) - results = subject.call(@query, nil, 10) + results = subject.call(@query, nil, 10, resolve: true) expect(service).to have_received(:call).with(@query, on_behalf_of: nil) expect(results).to eq empty_results @@ -40,7 +40,7 @@ describe SearchService, type: :service do service = double(call: account) allow(ResolveURLService).to receive(:new).and_return(service) - results = subject.call(@query, nil, 10) + results = subject.call(@query, nil, 10, resolve: true) expect(service).to have_received(:call).with(@query, on_behalf_of: nil) expect(results).to eq empty_results.merge(accounts: [account]) end @@ -52,7 +52,7 @@ describe SearchService, type: :service do service = double(call: status) allow(ResolveURLService).to receive(:new).and_return(service) - results = subject.call(@query, nil, 10) + results = subject.call(@query, nil, 10, resolve: true) expect(service).to have_received(:call).with(@query, on_behalf_of: nil) expect(results).to eq empty_results.merge(statuses: [status]) end @@ -77,10 +77,10 @@ describe SearchService, type: :service do it 'includes the tag in the results' do query = '#tag' tag = Tag.new - allow(Tag).to receive(:search_for).with('tag', 10, 0).and_return([tag]) + allow(Tag).to receive(:search_for).with('tag', 10, 0, exclude_unreviewed: nil).and_return([tag]) results = subject.call(query, nil, 10) - expect(Tag).to have_received(:search_for).with('tag', 10, 0) + expect(Tag).to have_received(:search_for).with('tag', 10, 0, exclude_unreviewed: nil) expect(results).to eq empty_results.merge(hashtags: [tag]) end it 'does not include tag when starts with @ character' do diff --git a/spec/services/send_interaction_service_spec.rb b/spec/services/send_interaction_service_spec.rb deleted file mode 100644 index 710d8184c..000000000 --- a/spec/services/send_interaction_service_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'rails_helper' - -RSpec.describe SendInteractionService, type: :service do - subject { SendInteractionService.new } - - it 'sends an XML envelope to the Salmon end point of remote user' -end diff --git a/spec/services/subscribe_service_spec.rb b/spec/services/subscribe_service_spec.rb deleted file mode 100644 index 10bdb1ba8..000000000 --- a/spec/services/subscribe_service_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'rails_helper' - -RSpec.describe SubscribeService, type: :service do - let(:account) { Fabricate(:account, username: 'bob', domain: 'example.com', hub_url: 'http://hub.example.com') } - subject { SubscribeService.new } - - it 'sends subscription request to PuSH hub' do - stub_request(:post, 'http://hub.example.com/').to_return(status: 202) - subject.call(account) - expect(a_request(:post, 'http://hub.example.com/')).to have_been_made.once - end - - it 'generates and keeps PuSH secret on successful call' do - stub_request(:post, 'http://hub.example.com/').to_return(status: 202) - subject.call(account) - expect(account.secret).to_not be_blank - end - - it 'fails silently if PuSH hub forbids subscription' do - stub_request(:post, 'http://hub.example.com/').to_return(status: 403) - subject.call(account) - end - - it 'fails silently if PuSH hub is not found' do - stub_request(:post, 'http://hub.example.com/').to_return(status: 404) - subject.call(account) - end - - it 'fails loudly if there is a network error' do - stub_request(:post, 'http://hub.example.com/').to_raise(HTTP::Error) - expect { subject.call(account) }.to raise_error HTTP::Error - end - - it 'fails loudly if PuSH hub is unavailable' do - stub_request(:post, 'http://hub.example.com/').to_return(status: 503) - expect { subject.call(account) }.to raise_error Mastodon::UnexpectedResponseError - end - - it 'fails loudly if rate limited' do - stub_request(:post, 'http://hub.example.com/').to_return(status: 429) - expect { subject.call(account) }.to raise_error Mastodon::UnexpectedResponseError - end -end diff --git a/spec/services/suspend_account_service_spec.rb b/spec/services/suspend_account_service_spec.rb index 6f45762aa..eebbbc12a 100644 --- a/spec/services/suspend_account_service_spec.rb +++ b/spec/services/suspend_account_service_spec.rb @@ -18,7 +18,6 @@ RSpec.describe SuspendAccountService, type: :service do let!(:favourite) { Fabricate(:favourite, account: account) } let!(:active_relationship) { Fabricate(:follow, account: account) } let!(:passive_relationship) { Fabricate(:follow, target_account: account) } - let!(:subscription) { Fabricate(:subscription, account: account) } let!(:remote_alice) { Fabricate(:account, inbox_url: 'https://alice.com/inbox', protocol: :activitypub) } let!(:remote_bob) { Fabricate(:account, inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } @@ -27,14 +26,12 @@ RSpec.describe SuspendAccountService, type: :service do [ account.statuses, account.media_attachments, - account.stream_entries, account.notifications, account.favourites, account.active_relationships, account.passive_relationships, - account.subscriptions ].map(&:count) - }.from([1, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0]) + }.from([1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0]) end it 'sends a delete actor activity to all known inboxes' do @@ -63,21 +60,18 @@ RSpec.describe SuspendAccountService, type: :service do let!(:favourite) { Fabricate(:favourite, account: remote_bob) } let!(:active_relationship) { Fabricate(:follow, account: remote_bob, target_account: account) } let!(:passive_relationship) { Fabricate(:follow, target_account: remote_bob) } - let!(:subscription) { Fabricate(:subscription, account: remote_bob) } it 'deletes associated records' do is_expected.to change { [ remote_bob.statuses, remote_bob.media_attachments, - remote_bob.stream_entries, remote_bob.notifications, remote_bob.favourites, remote_bob.active_relationships, remote_bob.passive_relationships, - remote_bob.subscriptions ].map(&:count) - }.from([1, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0]) + }.from([1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0]) end it 'sends a reject follow to follwer inboxes' do diff --git a/spec/services/unblock_domain_service_spec.rb b/spec/services/unblock_domain_service_spec.rb index 619aefb5c..27dbc92ad 100644 --- a/spec/services/unblock_domain_service_spec.rb +++ b/spec/services/unblock_domain_service_spec.rb @@ -31,7 +31,7 @@ describe UnblockDomainService, type: :service do subject.call(@domain_block) expect_deleted_domain_block expect(@suspended.reload.suspended?).to be false - expect(@silenced.reload.silenced?).to be true + expect(@silenced.reload.silenced?).to be false expect(@independently_suspended.reload.suspended?).to be true expect(@independently_silenced.reload.silenced?).to be true end diff --git a/spec/services/unblock_service_spec.rb b/spec/services/unblock_service_spec.rb index 5835b912b..6350c6834 100644 --- a/spec/services/unblock_service_spec.rb +++ b/spec/services/unblock_service_spec.rb @@ -30,13 +30,6 @@ RSpec.describe UnblockService, type: :service do it 'destroys the blocking relation' do expect(sender.blocking?(bob)).to be false end - - it 'sends an unblock salmon slap' do - expect(a_request(:post, "http://salmon.example.com/").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:unblock]) - }).to have_been_made.once - end end describe 'remote ActivityPub' do diff --git a/spec/services/unfollow_service_spec.rb b/spec/services/unfollow_service_spec.rb index 8a2881ab1..84b5dafbc 100644 --- a/spec/services/unfollow_service_spec.rb +++ b/spec/services/unfollow_service_spec.rb @@ -30,13 +30,6 @@ RSpec.describe UnfollowService, type: :service do it 'destroys the following relation' do expect(sender.following?(bob)).to be false end - - it 'sends an unfollow salmon slap' do - expect(a_request(:post, "http://salmon.example.com/").with { |req| - xml = OStatus2::Salmon.new.unpack(req.body) - xml.match(OStatus::TagManager::VERBS[:unfollow]) - }).to have_been_made.once - end end describe 'remote ActivityPub' do diff --git a/spec/services/unsubscribe_service_spec.rb b/spec/services/unsubscribe_service_spec.rb deleted file mode 100644 index 54d4b1b53..000000000 --- a/spec/services/unsubscribe_service_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'rails_helper' - -RSpec.describe UnsubscribeService, type: :service do - let(:account) { Fabricate(:account, username: 'bob', domain: 'example.com', hub_url: 'http://hub.example.com') } - subject { UnsubscribeService.new } - - it 'removes the secret and resets expiration on account' do - stub_request(:post, 'http://hub.example.com/').to_return(status: 204) - subject.call(account) - account.reload - - expect(account.secret).to be_blank - expect(account.subscription_expires_at).to be_blank - end - - it 'logs error on subscription failure' do - logger = stub_logger - stub_request(:post, 'http://hub.example.com/').to_return(status: 404) - subject.call(account) - - expect(logger).to have_received(:debug).with(/unsubscribe for bob@example.com failed/) - end - - it 'logs error on connection failure' do - logger = stub_logger - stub_request(:post, 'http://hub.example.com/').to_raise(HTTP::Error) - subject.call(account) - - expect(logger).to have_received(:debug).with(/unsubscribe for bob@example.com failed/) - end - - def stub_logger - double(debug: nil).tap do |logger| - allow(Rails).to receive(:logger).and_return(logger) - end - end -end diff --git a/spec/services/update_account_service_spec.rb b/spec/services/update_account_service_spec.rb new file mode 100644 index 000000000..960b26891 --- /dev/null +++ b/spec/services/update_account_service_spec.rb @@ -0,0 +1,38 @@ +require 'rails_helper' + +RSpec.describe UpdateAccountService, type: :service do + subject { UpdateAccountService.new } + + describe 'switching form locked to unlocked accounts' do + let(:account) { Fabricate(:account, locked: true) } + let(:alice) { Fabricate(:user, email: 'alice@example.com', account: Fabricate(:account, username: 'alice')).account } + let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + let(:eve) { Fabricate(:user, email: 'eve@example.com', account: Fabricate(:account, username: 'eve')).account } + + before do + bob.touch(:silenced_at) + account.mute!(eve) + + FollowService.new.call(alice, account) + FollowService.new.call(bob, account) + FollowService.new.call(eve, account) + + subject.call(account, { locked: false }) + end + + it 'auto-accepts pending follow requests' do + expect(alice.following?(account)).to be true + expect(alice.requested?(account)).to be false + end + + it 'does not auto-accept pending follow requests from silenced users' do + expect(bob.following?(account)).to be false + expect(bob.requested?(account)).to be true + end + + it 'auto-accepts pending follow requests from muted users so as to not leak mute' do + expect(eve.following?(account)).to be true + expect(eve.requested?(account)).to be false + end + end +end diff --git a/spec/services/update_remote_profile_service_spec.rb b/spec/services/update_remote_profile_service_spec.rb deleted file mode 100644 index f3ea70b80..000000000 --- a/spec/services/update_remote_profile_service_spec.rb +++ /dev/null @@ -1,84 +0,0 @@ -require 'rails_helper' - -RSpec.describe UpdateRemoteProfileService, type: :service do - let(:xml) { File.read(Rails.root.join('spec', 'fixtures', 'push', 'feed.atom')) } - - subject { UpdateRemoteProfileService.new } - - before do - stub_request(:get, 'https://quitter.no/avatar/7477-300-20160211190340.png').to_return(request_fixture('avatar.txt')) - end - - context 'with updated details' do - let(:remote_account) { Fabricate(:account, username: 'bob', domain: 'example.com') } - - before do - subject.call(xml, remote_account) - end - - it 'downloads new avatar' do - expect(a_request(:get, 'https://quitter.no/avatar/7477-300-20160211190340.png')).to have_been_made - end - - it 'sets the avatar remote url' do - expect(remote_account.reload.avatar_remote_url).to eq 'https://quitter.no/avatar/7477-300-20160211190340.png' - end - - it 'sets display name' do - expect(remote_account.reload.display_name).to eq 'DIGITAL CAT' - end - - it 'sets note' do - expect(remote_account.reload.note).to eq 'Software engineer, free time musician and DIGITAL SPORTS enthusiast. Likes cats. Warning: May contain memes' - end - end - - context 'with unchanged details' do - let(:remote_account) { Fabricate(:account, username: 'bob', domain: 'example.com', display_name: 'DIGITAL CAT', note: 'Software engineer, free time musician and DIGITAL SPORTS enthusiast. Likes cats. Warning: May contain memes', avatar_remote_url: 'https://quitter.no/avatar/7477-300-20160211190340.png') } - - before do - subject.call(xml, remote_account) - end - - it 'does not re-download avatar' do - expect(a_request(:get, 'https://quitter.no/avatar/7477-300-20160211190340.png')).to have_been_made.once - end - - it 'sets the avatar remote url' do - expect(remote_account.reload.avatar_remote_url).to eq 'https://quitter.no/avatar/7477-300-20160211190340.png' - end - - it 'sets display name' do - expect(remote_account.reload.display_name).to eq 'DIGITAL CAT' - end - - it 'sets note' do - expect(remote_account.reload.note).to eq 'Software engineer, free time musician and DIGITAL SPORTS enthusiast. Likes cats. Warning: May contain memes' - end - end - - context 'with updated details from a domain set to reject media' do - let(:remote_account) { Fabricate(:account, username: 'bob', domain: 'example.com') } - let!(:domain_block) { Fabricate(:domain_block, domain: 'example.com', reject_media: true) } - - before do - subject.call(xml, remote_account) - end - - it 'does not the avatar remote url' do - expect(remote_account.reload.avatar_remote_url).to be_nil - end - - it 'sets display name' do - expect(remote_account.reload.display_name).to eq 'DIGITAL CAT' - end - - it 'sets note' do - expect(remote_account.reload.note).to eq 'Software engineer, free time musician and DIGITAL SPORTS enthusiast. Likes cats. Warning: May contain memes' - end - - it 'does not set store the avatar' do - expect(remote_account.reload.avatar_file_name).to be_nil - end - end -end diff --git a/spec/services/verify_link_service_spec.rb b/spec/services/verify_link_service_spec.rb index 2edcdb75f..3fc88e60e 100644 --- a/spec/services/verify_link_service_spec.rb +++ b/spec/services/verify_link_service_spec.rb @@ -28,12 +28,12 @@ RSpec.describe VerifyLinkService, type: :service do end end - context 'when a link contains an <a rel="noopener"> back' do + context 'when a link contains an <a rel="noopener noreferrer"> back' do let(:html) do <<-HTML <!doctype html> <body> - <a href="#{ActivityPub::TagManager.instance.url_for(account)}" rel="noopener me" target="_blank">Follow me on Mastodon</a> + <a href="#{ActivityPub::TagManager.instance.url_for(account)}" rel="me noopener noreferrer" target="_blank">Follow me on Mastodon</a> </body> HTML end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 0cd1f91d0..b6d127a08 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -12,6 +12,7 @@ end gc_counter = -1 RSpec.configure do |config| + config.example_status_persistence_file_path = "tmp/rspec/examples.txt" config.expect_with :rspec do |expectations| expectations.include_chain_clauses_in_custom_matcher_descriptions = true end @@ -27,6 +28,7 @@ RSpec.configure do |config| end config.before :suite do + Rails.application.load_seed Chewy.strategy(:bypass) end diff --git a/spec/validators/disallowed_hashtags_validator_spec.rb b/spec/validators/disallowed_hashtags_validator_spec.rb index 8ec1302ab..9deec0bb9 100644 --- a/spec/validators/disallowed_hashtags_validator_spec.rb +++ b/spec/validators/disallowed_hashtags_validator_spec.rb @@ -3,42 +3,44 @@ require 'rails_helper' RSpec.describe DisallowedHashtagsValidator, type: :validator do + let(:disallowed_tags) { [] } + describe '#validate' do before do - allow_any_instance_of(described_class).to receive(:select_tags) { tags } + disallowed_tags.each { |name| Fabricate(:tag, name: name, usable: false) } described_class.new.validate(status) end - let(:status) { double(errors: errors, local?: local, reblog?: reblog, text: '') } + let(:status) { double(errors: errors, local?: local, reblog?: reblog, text: disallowed_tags.map { |x| '#' + x }.join(' ')) } let(:errors) { double(add: nil) } - context 'unless status.local? && !status.reblog?' do + context 'for a remote reblog' do let(:local) { false } let(:reblog) { true } - it 'not calls errors.add' do + it 'does not add errors' do expect(errors).not_to have_received(:add).with(:text, any_args) end end - context 'status.local? && !status.reblog?' do + context 'for a local original status' do let(:local) { true } let(:reblog) { false } - context 'tags.empty?' do - let(:tags) { [] } + context 'when does not contain any disallowed hashtags' do + let(:disallowed_tags) { [] } - it 'not calls errors.add' do + it 'does not add errors' do expect(errors).not_to have_received(:add).with(:text, any_args) end end - context '!tags.empty?' do - let(:tags) { %w(a b c) } + context 'when contains disallowed hashtags' do + let(:disallowed_tags) { %w(a b c) } - it 'calls errors.add' do + it 'adds an error' do expect(errors).to have_received(:add) - .with(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) + .with(:text, I18n.t('statuses.disallowed_hashtags', tags: disallowed_tags.join(', '), count: disallowed_tags.size)) end end end diff --git a/spec/views/stream_entries/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb index 93f0adb99..dbda3b665 100644 --- a/spec/views/stream_entries/show.html.haml_spec.rb +++ b/spec/views/statuses/show.html.haml_spec.rb @@ -2,10 +2,9 @@ require 'rails_helper' -describe 'stream_entries/show.html.haml', without_verify_partial_doubles: true do +describe 'statuses/show.html.haml', without_verify_partial_doubles: true do before do double(:api_oembed_url => '') - double(:account_stream_entry_url => '') allow(view).to receive(:show_landing_strip?).and_return(true) allow(view).to receive(:site_title).and_return('example site') allow(view).to receive(:site_hostname).and_return('example.com') @@ -23,9 +22,7 @@ describe 'stream_entries/show.html.haml', without_verify_partial_doubles: true d reply = Fabricate(:status, account: bob, thread: status, text: 'Hello Alice') assign(:status, status) - assign(:stream_entry, status.stream_entry) assign(:account, alice) - assign(:type, status.stream_entry.activity_type.downcase) assign(:descendant_threads, []) render @@ -46,11 +43,9 @@ describe 'stream_entries/show.html.haml', without_verify_partial_doubles: true d comment = Fabricate(:status, account: carl, thread: reply, text: 'Hello Bob') assign(:status, reply) - assign(:stream_entry, reply.stream_entry) assign(:account, alice) - assign(:type, reply.stream_entry.activity_type.downcase) - assign(:ancestors, reply.stream_entry.activity.ancestors(1, bob)) - assign(:descendant_threads, [{ statuses: reply.stream_entry.activity.descendants(1) }]) + assign(:ancestors, reply.ancestors(1, bob)) + assign(:descendant_threads, [{ statuses: reply.descendants(1) }]) render @@ -71,9 +66,7 @@ describe 'stream_entries/show.html.haml', without_verify_partial_doubles: true d status = Fabricate(:status, account: alice, text: 'Hello World') assign(:status, status) - assign(:stream_entry, status.stream_entry) assign(:account, alice) - assign(:type, status.stream_entry.activity_type.downcase) assign(:descendant_threads, []) render diff --git a/spec/workers/activitypub/distribute_poll_update_worker_spec.rb b/spec/workers/activitypub/distribute_poll_update_worker_spec.rb new file mode 100644 index 000000000..7eb6119fd --- /dev/null +++ b/spec/workers/activitypub/distribute_poll_update_worker_spec.rb @@ -0,0 +1,22 @@ +require 'rails_helper' + +describe ActivityPub::DistributePollUpdateWorker do + subject { described_class.new } + + let(:account) { Fabricate(:account) } + let(:follower) { Fabricate(:account, protocol: :activitypub, inbox_url: 'http://example.com') } + let(:poll) { Fabricate(:poll, account: account) } + let!(:status) { Fabricate(:status, account: account, poll: poll) } + + describe '#perform' do + before do + allow(ActivityPub::DeliveryWorker).to receive(:push_bulk) + follower.follow!(account) + end + + it 'delivers to followers' do + subject.perform(status.id) + expect(ActivityPub::DeliveryWorker).to have_received(:push_bulk).with(['http://example.com']) + end + end +end diff --git a/spec/workers/after_remote_follow_request_worker_spec.rb b/spec/workers/after_remote_follow_request_worker_spec.rb deleted file mode 100644 index bd623cca5..000000000 --- a/spec/workers/after_remote_follow_request_worker_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe AfterRemoteFollowRequestWorker do - subject { described_class.new } - let(:follow_request) { Fabricate(:follow_request) } - describe 'perform' do - context 'when the follow_request does not exist' do - it 'catches a raise and returns true' do - allow(FollowService).to receive(:new) - result = subject.perform('aaa') - - expect(result).to eq(true) - expect(FollowService).not_to have_received(:new) - end - end - - context 'when the account cannot be updated' do - it 'returns nil and does not call service when account is nil' do - allow(FollowService).to receive(:new) - service = double(call: nil) - allow(FetchRemoteAccountService).to receive(:new).and_return(service) - - result = subject.perform(follow_request.id) - - expect(result).to be_nil - expect(FollowService).not_to have_received(:new) - end - - it 'returns nil and does not call service when account is locked' do - allow(FollowService).to receive(:new) - service = double(call: double(locked?: true)) - allow(FetchRemoteAccountService).to receive(:new).and_return(service) - - result = subject.perform(follow_request.id) - - expect(result).to be_nil - expect(FollowService).not_to have_received(:new) - end - end - - context 'when the account is updated' do - it 'calls the follow service and destroys the follow' do - follow_service = double(call: nil) - allow(FollowService).to receive(:new).and_return(follow_service) - account = Fabricate(:account, locked: false) - service = double(call: account) - allow(FetchRemoteAccountService).to receive(:new).and_return(service) - - result = subject.perform(follow_request.id) - - expect(result).to be_nil - expect(follow_service).to have_received(:call).with(follow_request.account, account.acct) - expect { follow_request.reload }.to raise_error(ActiveRecord::RecordNotFound) - end - end - end -end diff --git a/spec/workers/after_remote_follow_worker_spec.rb b/spec/workers/after_remote_follow_worker_spec.rb deleted file mode 100644 index d93c469f9..000000000 --- a/spec/workers/after_remote_follow_worker_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe AfterRemoteFollowWorker do - subject { described_class.new } - let(:follow) { Fabricate(:follow) } - describe 'perform' do - context 'when the follow does not exist' do - it 'catches a raise and returns true' do - allow(FollowService).to receive(:new) - result = subject.perform('aaa') - - expect(result).to eq(true) - expect(FollowService).not_to have_received(:new) - end - end - - context 'when the account cannot be updated' do - it 'returns nil and does not call service when account is nil' do - allow(FollowService).to receive(:new) - service = double(call: nil) - allow(FetchRemoteAccountService).to receive(:new).and_return(service) - - result = subject.perform(follow.id) - - expect(result).to be_nil - expect(FollowService).not_to have_received(:new) - end - - it 'returns nil and does not call service when account is not locked' do - allow(FollowService).to receive(:new) - service = double(call: double(locked?: false)) - allow(FetchRemoteAccountService).to receive(:new).and_return(service) - - result = subject.perform(follow.id) - - expect(result).to be_nil - expect(FollowService).not_to have_received(:new) - end - end - - context 'when the account is updated' do - it 'calls the follow service and destroys the follow' do - follow_service = double(call: nil) - allow(FollowService).to receive(:new).and_return(follow_service) - account = Fabricate(:account, locked: true) - service = double(call: account) - allow(FetchRemoteAccountService).to receive(:new).and_return(service) - - result = subject.perform(follow.id) - - expect(result).to be_nil - expect(follow_service).to have_received(:call).with(follow.account, account.acct) - expect { follow.reload }.to raise_error(ActiveRecord::RecordNotFound) - end - end - end -end diff --git a/spec/workers/domain_block_worker_spec.rb b/spec/workers/domain_block_worker_spec.rb index c4138501f..48b3e38c4 100644 --- a/spec/workers/domain_block_worker_spec.rb +++ b/spec/workers/domain_block_worker_spec.rb @@ -14,7 +14,7 @@ describe DomainBlockWorker do result = subject.perform(domain_block.id) expect(result).to be_nil - expect(service).to have_received(:call).with(domain_block) + expect(service).to have_received(:call).with(domain_block, false) end it 'calls domain block service for relevant domain block' do diff --git a/spec/workers/move_worker_spec.rb b/spec/workers/move_worker_spec.rb new file mode 100644 index 000000000..b8f4d9900 --- /dev/null +++ b/spec/workers/move_worker_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe MoveWorker do + let(:local_follower) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + let(:source_account) { Fabricate(:account, protocol: :activitypub, domain: 'example.com') } + let(:target_account) { Fabricate(:account, protocol: :activitypub, domain: 'example.com') } + + subject { described_class.new } + + before do + local_follower.follow!(source_account) + end + + context 'both accounts are distant' do + describe 'perform' do + it 'calls UnfollowFollowWorker' do + allow(UnfollowFollowWorker).to receive(:push_bulk) + subject.perform(source_account.id, target_account.id) + expect(UnfollowFollowWorker).to have_received(:push_bulk).with([local_follower.id]) + end + end + end + + context 'target account is local' do + let(:target_account) { Fabricate(:user, email: 'alice@example.com', account: Fabricate(:account, username: 'alice')).account } + + describe 'perform' do + it 'calls UnfollowFollowWorker' do + allow(UnfollowFollowWorker).to receive(:push_bulk) + subject.perform(source_account.id, target_account.id) + expect(UnfollowFollowWorker).to have_received(:push_bulk).with([local_follower.id]) + end + end + end + + context 'both target and source accounts are local' do + let(:target_account) { Fabricate(:user, email: 'alice@example.com', account: Fabricate(:account, username: 'alice')).account } + let(:source_account) { Fabricate(:user, email: 'alice_@example.com', account: Fabricate(:account, username: 'alice_')).account } + + describe 'perform' do + it 'calls makes local followers follow the target account' do + subject.perform(source_account.id, target_account.id) + expect(local_follower.following?(target_account)).to be true + end + + it 'does not fail when a local user is already following both accounts' do + double_follower = Fabricate(:user, email: 'eve@example.com', account: Fabricate(:account, username: 'eve')).account + double_follower.follow!(source_account) + double_follower.follow!(target_account) + subject.perform(source_account.id, target_account.id) + expect(local_follower.following?(target_account)).to be true + end + + it 'does not allow the moved account to follow themselves' do + source_account.follow!(target_account) + subject.perform(source_account.id, target_account.id) + expect(target_account.following?(target_account)).to be false + end + end + end +end diff --git a/spec/workers/pubsubhubbub/confirmation_worker_spec.rb b/spec/workers/pubsubhubbub/confirmation_worker_spec.rb deleted file mode 100644 index 1eecdd2b5..000000000 --- a/spec/workers/pubsubhubbub/confirmation_worker_spec.rb +++ /dev/null @@ -1,88 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Pubsubhubbub::ConfirmationWorker do - include RoutingHelper - - subject { described_class.new } - - let!(:alice) { Fabricate(:account, username: 'alice') } - let!(:subscription) { Fabricate(:subscription, account: alice, callback_url: 'http://example.com/api', confirmed: false, expires_at: 3.days.from_now, secret: nil) } - - describe 'perform' do - describe 'with subscribe mode' do - it 'confirms and updates subscription when challenge matches' do - stub_random_value - stub_request(:get, url_for_mode('subscribe')) - .with(headers: http_headers) - .to_return(status: 200, body: challenge_value, headers: {}) - - seconds = 10.days.seconds.to_i - subject.perform(subscription.id, 'subscribe', 'asdf', seconds) - - subscription.reload - expect(subscription.secret).to eq 'asdf' - expect(subscription.confirmed).to eq true - expect(subscription.expires_at).to be_within(5).of(10.days.from_now) - end - - it 'does not update subscription when challenge does not match' do - stub_random_value - stub_request(:get, url_for_mode('subscribe')) - .with(headers: http_headers) - .to_return(status: 200, body: 'wrong value', headers: {}) - - seconds = 10.days.seconds.to_i - subject.perform(subscription.id, 'subscribe', 'asdf', seconds) - - subscription.reload - expect(subscription.secret).to be_blank - expect(subscription.confirmed).to eq false - expect(subscription.expires_at).to be_within(5).of(3.days.from_now) - end - end - - describe 'with unsubscribe mode' do - it 'confirms and destroys subscription when challenge matches' do - stub_random_value - stub_request(:get, url_for_mode('unsubscribe')) - .with(headers: http_headers) - .to_return(status: 200, body: challenge_value, headers: {}) - - seconds = 10.days.seconds.to_i - subject.perform(subscription.id, 'unsubscribe', 'asdf', seconds) - - expect { subscription.reload }.to raise_error(ActiveRecord::RecordNotFound) - end - - it 'does not destroy subscription when challenge does not match' do - stub_random_value - stub_request(:get, url_for_mode('unsubscribe')) - .with(headers: http_headers) - .to_return(status: 200, body: 'wrong value', headers: {}) - - seconds = 10.days.seconds.to_i - subject.perform(subscription.id, 'unsubscribe', 'asdf', seconds) - - expect { subscription.reload }.not_to raise_error - end - end - end - - def url_for_mode(mode) - "http://example.com/api?hub.challenge=#{challenge_value}&hub.lease_seconds=863999&hub.mode=#{mode}&hub.topic=https://#{Rails.configuration.x.local_domain}/users/alice.atom" - end - - def stub_random_value - allow(SecureRandom).to receive(:hex).and_return(challenge_value) - end - - def challenge_value - '1a2s3d4f' - end - - def http_headers - { 'Connection' => 'close', 'Host' => 'example.com' } - end -end diff --git a/spec/workers/pubsubhubbub/delivery_worker_spec.rb b/spec/workers/pubsubhubbub/delivery_worker_spec.rb deleted file mode 100644 index c0e0d5186..000000000 --- a/spec/workers/pubsubhubbub/delivery_worker_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Pubsubhubbub::DeliveryWorker do - include RoutingHelper - subject { described_class.new } - - let(:payload) { 'test' } - - describe 'perform' do - it 'raises when subscription does not exist' do - expect { subject.perform 123, payload }.to raise_error(ActiveRecord::RecordNotFound) - end - - it 'does not attempt to deliver when domain blocked' do - _domain_block = Fabricate(:domain_block, domain: 'example.com', severity: :suspend) - subscription = Fabricate(:subscription, callback_url: 'https://example.com/api', last_successful_delivery_at: 2.days.ago) - - subject.perform(subscription.id, payload) - - expect(subscription.reload.last_successful_delivery_at).to be_within(2).of(2.days.ago) - end - - it 'raises when request fails' do - subscription = Fabricate(:subscription) - - stub_request_to_respond_with(subscription, 500) - expect { subject.perform(subscription.id, payload) }.to raise_error Mastodon::UnexpectedResponseError - end - - it 'updates subscriptions when delivery succeeds' do - subscription = Fabricate(:subscription) - - stub_request_to_respond_with(subscription, 200) - subject.perform(subscription.id, payload) - - expect(subscription.reload.last_successful_delivery_at).to be_within(2).of(Time.now.utc) - end - - it 'updates subscription without a secret when delivery succeeds' do - subscription = Fabricate(:subscription, secret: nil) - - stub_request_to_respond_with(subscription, 200) - subject.perform(subscription.id, payload) - - expect(subscription.reload.last_successful_delivery_at).to be_within(2).of(Time.now.utc) - end - - def stub_request_to_respond_with(subscription, code) - stub_request(:post, 'http://example.com/callback') - .with(body: payload, headers: expected_headers(subscription)) - .to_return(status: code, body: '', headers: {}) - end - - def expected_headers(subscription) - { - 'Connection' => 'close', - 'Content-Type' => 'application/atom+xml', - 'Host' => 'example.com', - 'Link' => "<https://#{Rails.configuration.x.local_domain}/api/push>; rel=\"hub\", <https://#{Rails.configuration.x.local_domain}/users/#{subscription.account.username}.atom>; rel=\"self\"", - }.tap do |basic| - known_digest = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), subscription.secret.to_s, payload) - basic.merge('X-Hub-Signature' => "sha1=#{known_digest}") if subscription.secret? - end - end - end -end diff --git a/spec/workers/pubsubhubbub/distribution_worker_spec.rb b/spec/workers/pubsubhubbub/distribution_worker_spec.rb deleted file mode 100644 index 584485079..000000000 --- a/spec/workers/pubsubhubbub/distribution_worker_spec.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'rails_helper' - -describe Pubsubhubbub::DistributionWorker do - subject { Pubsubhubbub::DistributionWorker.new } - - let!(:alice) { Fabricate(:account, username: 'alice') } - let!(:bob) { Fabricate(:account, username: 'bob', domain: 'example2.com') } - let!(:anonymous_subscription) { Fabricate(:subscription, account: alice, callback_url: 'http://example1.com', confirmed: true, lease_seconds: 3600) } - let!(:subscription_with_follower) { Fabricate(:subscription, account: alice, callback_url: 'http://example2.com', confirmed: true, lease_seconds: 3600) } - - before do - bob.follow!(alice) - end - - describe 'with public status' do - let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :public) } - - it 'delivers payload to all subscriptions' do - allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk) - subject.perform(status.stream_entry.id) - expect(Pubsubhubbub::DeliveryWorker).to have_received(:push_bulk).with([anonymous_subscription.id, subscription_with_follower.id]) - end - end - - context 'when OStatus privacy is not used' do - describe 'with private status' do - let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :private) } - - it 'does not deliver anything' do - allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk) - subject.perform(status.stream_entry.id) - expect(Pubsubhubbub::DeliveryWorker).to_not have_received(:push_bulk) - end - end - - describe 'with direct status' do - let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :direct) } - - it 'does not deliver payload' do - allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk) - subject.perform(status.stream_entry.id) - expect(Pubsubhubbub::DeliveryWorker).to_not have_received(:push_bulk) - end - end - end -end diff --git a/spec/workers/scheduler/subscriptions_scheduler_spec.rb b/spec/workers/scheduler/subscriptions_scheduler_spec.rb deleted file mode 100644 index a7d1046de..000000000 --- a/spec/workers/scheduler/subscriptions_scheduler_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'rails_helper' - -describe Scheduler::SubscriptionsScheduler do - subject { Scheduler::SubscriptionsScheduler.new } - - let!(:expiring_account1) { Fabricate(:account, subscription_expires_at: 20.minutes.from_now, domain: 'example.com', followers_count: 1, hub_url: 'http://hub.example.com') } - let!(:expiring_account2) { Fabricate(:account, subscription_expires_at: 4.hours.from_now, domain: 'example.org', followers_count: 1, hub_url: 'http://hub.example.org') } - - before do - stub_request(:post, 'http://hub.example.com/').to_return(status: 202) - stub_request(:post, 'http://hub.example.org/').to_return(status: 202) - end - - it 're-subscribes for all expiring accounts' do - subject.perform - expect(a_request(:post, 'http://hub.example.com/')).to have_been_made.once - expect(a_request(:post, 'http://hub.example.org/')).to have_been_made.once - end -end diff --git a/spec/workers/unfollow_follow_worker_spec.rb b/spec/workers/unfollow_follow_worker_spec.rb new file mode 100644 index 000000000..5052c5616 --- /dev/null +++ b/spec/workers/unfollow_follow_worker_spec.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe UnfollowFollowWorker do + let(:local_follower) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account } + let(:source_account) { Fabricate(:account) } + let(:target_account) { Fabricate(:account) } + let(:show_reblogs) { true } + + subject { described_class.new } + + before do + local_follower.follow!(source_account, reblogs: show_reblogs) + end + + context 'when show_reblogs is true' do + let(:show_reblogs) { true } + + describe 'perform' do + it 'unfollows source account and follows target account' do + subject.perform(local_follower.id, source_account.id, target_account.id) + expect(local_follower.following?(source_account)).to be false + expect(local_follower.following?(target_account)).to be true + end + + it 'preserves show_reblogs' do + subject.perform(local_follower.id, source_account.id, target_account.id) + expect(Follow.find_by(account: local_follower, target_account: target_account).show_reblogs?).to be show_reblogs + end + end + end + + context 'when show_reblogs is false' do + let(:show_reblogs) { false } + + describe 'perform' do + it 'unfollows source account and follows target account' do + subject.perform(local_follower.id, source_account.id, target_account.id) + expect(local_follower.following?(source_account)).to be false + expect(local_follower.following?(target_account)).to be true + end + + it 'preserves show_reblogs' do + subject.perform(local_follower.id, source_account.id, target_account.id) + expect(Follow.find_by(account: local_follower, target_account: target_account).show_reblogs?).to be show_reblogs + end + end + end +end diff --git a/streaming/index.js b/streaming/index.js index 10df210a3..64e71f353 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -12,6 +12,7 @@ const uuid = require('uuid'); const fs = require('fs'); const env = process.env.NODE_ENV || 'development'; +const alwaysRequireAuth = process.env.WHITELIST_MODE === 'true' || process.env.AUTHORIZED_FETCH === 'true'; dotenv.config({ path: env === 'production' ? '.env.production' : '.env', @@ -271,7 +272,7 @@ const startWorker = (workerId) => { const wsVerifyClient = (info, cb) => { const location = url.parse(info.req.url, true); - const authRequired = !PUBLIC_STREAMS.some(stream => stream === location.query.stream); + const authRequired = alwaysRequireAuth || !PUBLIC_STREAMS.some(stream => stream === location.query.stream); const allowedScopes = []; if (authRequired) { @@ -306,7 +307,7 @@ const startWorker = (workerId) => { return; } - const authRequired = !PUBLIC_ENDPOINTS.some(endpoint => endpoint === req.path); + const authRequired = alwaysRequireAuth || !PUBLIC_ENDPOINTS.some(endpoint => endpoint === req.path); const allowedScopes = []; if (authRequired) { @@ -376,7 +377,7 @@ const startWorker = (workerId) => { } // Only send local-only statuses to logged-in users - if (payload.local_only && !req.accountId) { + if (event === 'update' && payload.local_only && !req.accountId) { log.silly(req.requestId, `Message ${payload.id} filtered because it was local-only`); return; } @@ -678,7 +679,7 @@ const attachServerWithConfig = (server, onSuccess) => { } }); } else { - server.listen(+process.env.PORT || 4000, process.env.BIND || '0.0.0.0', () => { + server.listen(+process.env.PORT || 4000, process.env.BIND || '127.0.0.1', () => { if (onSuccess) { onSuccess(`${server.address().address}:${server.address().port}`); } diff --git a/yarn.lock b/yarn.lock index fda6e8aad..54c3f140b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,191 +2,213 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.0": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" - integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.3.4" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.3.4" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.3.4" - "@babel/types" "^7.3.4" - convert-source-map "^1.1.0" +"@babel/core@^7.1.0", "@babel/core@^7.4.5": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" + integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.2" + "@babel/helpers" "^7.7.0" + "@babel/parser" "^7.7.2" + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.7.2" + convert-source-map "^1.7.0" debug "^4.1.0" json5 "^2.1.0" - lodash "^4.17.11" + lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" - integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.5" - "@babel/types" "^7.4.4" - convert-source-map "^1.1.0" +"@babel/core@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.4.tgz#37e864532200cb6b50ee9a4045f5f817840166ab" + integrity sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.4" + "@babel/helpers" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + convert-source-map "^1.7.0" debug "^4.1.0" json5 "^2.1.0" - lodash "^4.17.11" + lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e" - integrity sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg== +"@babel/generator@^7.0.0", "@babel/generator@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.2.tgz#2f4852d04131a5e17ea4f6645488b5da66ebf3af" + integrity sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ== dependencies: - "@babel/types" "^7.3.4" + "@babel/types" "^7.7.2" jsesc "^2.5.1" - lodash "^4.17.11" + lodash "^4.17.13" source-map "^0.5.0" - trim-right "^1.0.1" -"@babel/generator@^7.2.2", "@babel/generator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" - integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== +"@babel/generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" + integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.7.4" jsesc "^2.5.1" - lodash "^4.17.11" + lodash "^4.17.13" source-map "^0.5.0" - trim-right "^1.0.1" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== +"@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" + integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-explode-assignable-expression" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-builder-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" - integrity sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw== +"@babel/helper-builder-react-jsx@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz#da188d247508b65375b2c30cf59de187be6b0c66" + integrity sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" esutils "^2.0.0" -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== +"@babel/helper-call-delegate@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" + integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-create-class-features-plugin@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba" - integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA== +"@babel/helper-create-class-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" + integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" -"@babel/helper-define-map@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" - integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== +"@babel/helper-create-regexp-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" + integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.4.4" - lodash "^4.17.11" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== +"@babel/helper-define-map@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" + integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== +"@babel/helper-explode-assignable-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" + integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@babel/helper-function-name@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz#44a5ad151cfff8ed2599c91682dda2ec2c8430a3" + integrity sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q== dependencies: - "@babel/types" "^7.0.0" + "@babel/helper-get-function-arity" "^7.7.0" + "@babel/template" "^7.7.0" + "@babel/types" "^7.7.0" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" + integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== dependencies: - "@babel/types" "^7.4.4" + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== +"@babel/helper-get-function-arity@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz#c604886bc97287a1d1398092bc666bc3d7d7aa2d" + integrity sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.0" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== +"@babel/helper-get-function-arity@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" + integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" - integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== +"@babel/helper-hoist-variables@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" + integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.4.4" - lodash "^4.17.11" + "@babel/types" "^7.7.4" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-module-transforms@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.4.tgz#8d7cdb1e1f8ea3d8c38b067345924ac4f8e0879a" + integrity sha512-ehGBu4mXrhs0FxAqN8tWkzF8GSIGAiEumu4ONZ/hD9M88uHcD+Yu2ttKfOCgwzoesJOJrtQh7trI5YPbRtMmnA== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== + dependencies: + "@babel/types" "^7.7.4" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" @@ -200,69 +222,76 @@ dependencies: lodash "^4.17.11" -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" - integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz#8335f3140f3144270dc63c4732a4f8b0a50b7a21" - integrity sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A== - dependencies: - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.5" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" - integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== - dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-simple-access@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" + integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== + dependencies: + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-split-export-declaration@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz#1365e74ea6c614deeb56ebffabd71006a0eb2300" + integrity sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA== + dependencies: + "@babel/types" "^7.7.0" + +"@babel/helper-split-export-declaration@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" + integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helpers@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.0.tgz#359bb5ac3b4726f7c1fde0ec75f64b3f4275d60b" + integrity sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g== + dependencies: + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helpers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" + integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== + dependencies: + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/highlight@^7.0.0": version "7.0.0" @@ -273,486 +302,499 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489" - integrity sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2": + version "7.7.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.3.tgz#5fad457c2529de476a248f75b0f090b3060af043" + integrity sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A== -"@babel/parser@^7.1.0", "@babel/parser@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" - integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ== +"@babel/parser@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb" + integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g== -"@babel/parser@^7.2.2", "@babel/parser@^7.2.3", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" - integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== +"@babel/plugin-proposal-async-generator-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" + integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== +"@babel/plugin-proposal-class-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" + integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw== dependencies: + "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" -"@babel/plugin-proposal-class-properties@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz#93a6486eed86d53452ab9bab35e368e9461198ce" - integrity sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg== +"@babel/plugin-proposal-decorators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.7.4.tgz#58c1e21d21ea12f9f5f0a757e46e687b94a7ab2b" + integrity sha512-GftcVDcLCwVdzKmwOBDjATd548+IE+mBo7ttgatqNDR7VG7GqIuZPtRWlMLHbhTXhcnFZiGER8iIYl1n/imtsg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.4" + "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-decorators" "^7.7.4" -"@babel/plugin-proposal-decorators@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0" - integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw== +"@babel/plugin-proposal-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" + integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-decorators" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== +"@babel/plugin-proposal-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" + integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.7.4" -"@babel/plugin-proposal-object-rest-spread@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005" - integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g== +"@babel/plugin-proposal-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" + integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-proposal-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" + integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== +"@babel/plugin-proposal-unicode-property-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb" + integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-syntax-async-generators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" + integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-decorators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" - integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== +"@babel/plugin-syntax-decorators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.7.4.tgz#3c91cfee2a111663ff3ac21b851140f5a52a4e0b" + integrity sha512-0oNLWNH4k5ZbBVfAwiTU53rKFWIeTh6ZlaWOXWJc4ywxs0tjz5fc3uZ6jKAnZSxN98eXVgg7bJIuzjX+3SXY+A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" + integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" + integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== +"@babel/plugin-syntax-jsx@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz#dab2b56a36fb6c3c222a1fbc71f7bf97f327a9ec" + integrity sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" + integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" + integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-syntax-top-level-await@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" + integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" - integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA== +"@babel/plugin-transform-arrow-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" + integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== dependencies: - "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-transform-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== dependencies: + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" -"@babel/plugin-transform-block-scoping@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" - integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== +"@babel/plugin-transform-block-scoped-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" + integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.11" -"@babel/plugin-transform-classes@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" - integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== +"@babel/plugin-transform-block-scoping@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" + integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" - "@babel/helper-split-export-declaration" "^7.4.4" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" + integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-define-map" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" + integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f" - integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ== +"@babel/plugin-transform-destructuring@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" + integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== +"@babel/plugin-transform-dotall-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96" + integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== +"@babel/plugin-transform-duplicate-keys@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" + integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-exponentiation-operator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" + integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-for-of@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" + integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" + integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== dependencies: - "@babel/helper-function-name" "^7.1.0" + "@babel/helper-function-name" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" + integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== +"@babel/plugin-transform-member-expression-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== +"@babel/plugin-transform-modules-amd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.4.tgz#276b3845ca2b228f2995e453adc2e6f54d72fb71" + integrity sha512-/542/5LNA18YDtg1F+QHvvUSlxdvjZoD/aldQwkq+E3WCkbEjNSN9zdrOXaSlfg3IfGi22ijzecklF/A7kVZFQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e" - integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw== +"@babel/plugin-transform-modules-commonjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.4.tgz#bee4386e550446343dd52a571eda47851ff857a3" + integrity sha512-k8iVS7Jhc367IcNF53KCwIXtKAH7czev866ThsTgy8CwlXjnKZna2VHwChglzLleYrcHz1eQEIJlGRQxB53nqA== dependencies: - "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-simple-access" "^7.7.4" + babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405" - integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ== +"@babel/plugin-transform-modules-systemjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" + integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-hoist-variables" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== +"@babel/plugin-transform-modules-umd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" + integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" - integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" + integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== dependencies: - regexp-tree "^0.1.6" + "@babel/helper-create-regexp-features-plugin" "^7.7.4" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== +"@babel/plugin-transform-new-target@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" + integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-object-super@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" - integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== +"@babel/plugin-transform-object-super@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" + "@babel/helper-replace-supers" "^7.7.4" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-parameters@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce" + integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-call-delegate" "^7.7.4" + "@babel/helper-get-function-arity" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== +"@babel/plugin-transform-property-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== +"@babel/plugin-transform-react-display-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz#9f2b80b14ebc97eef4a9b29b612c58ed9c0d10dd" + integrity sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-inline-elements@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-inline-elements/-/plugin-transform-react-inline-elements-7.2.0.tgz#3e36e7c47f1c21f52b2b0090d5cd83ceb19a4770" - integrity sha512-OAflI+josEl8xoAzZYpFnN+C4e9wvxDecExTtvDsteAcChIZtsH/D2kMNcJnrrzbFzCroGajCTr9tAB7K0KsiQ== +"@babel/plugin-transform-react-inline-elements@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-inline-elements/-/plugin-transform-react-inline-elements-7.7.4.tgz#356c48c44b22bb9db7ed205800c04d65976f59cd" + integrity sha512-x6Gao9Ef3TCItoh1MsotH25mBAz/CjS3uECoprrgJX5poXTqKsH3Od3M8DlRotSNTp48nuniztkE8thWY/MKIA== dependencies: - "@babel/helper-builder-react-jsx" "^7.0.0" + "@babel/helper-builder-react-jsx" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-jsx-self@^7.0.0", "@babel/plugin-transform-react-jsx-self@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== +"@babel/plugin-transform-react-jsx-self@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.7.4.tgz#81b8fbfd14b2215e8f1c2c3adfba266127b0231c" + integrity sha512-PWYjSfqrO273mc1pKCRTIJXyqfc9vWYBax88yIhQb+bpw3XChVC7VWS4VwRVs63wFHKxizvGSd00XEr+YB9Q2A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-react-jsx-source@^7.0.0", "@babel/plugin-transform-react-jsx-source@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f" - integrity sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g== +"@babel/plugin-transform-react-jsx-source@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz#8994b1bf6014b133f5a46d3b7d1ee5f5e3e72c10" + integrity sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz#ca36b6561c4d3b45524f8efb6f0fbc9a0d1d622f" - integrity sha512-h/fZRel5wAfCqcKgq3OhbmYaReo7KkoJBpt8XnvpS7wqaNMqtw5xhxutzcm35iMUWucfAdT/nvGTsWln0JTg2Q== +"@babel/plugin-transform-react-jsx@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz#d91205717fae4e2f84d020cd3057ec02a10f11da" + integrity sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw== dependencies: - "@babel/helper-builder-react-jsx" "^7.0.0" + "@babel/helper-builder-react-jsx" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/plugin-syntax-jsx" "^7.7.4" -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== +"@babel/plugin-transform-regenerator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.4.tgz#d18eac0312a70152d7d914cbed2dc3999601cfc0" + integrity sha512-e7MWl5UJvmPEwFJTwkBlPmqixCtr9yAASBqff4ggXTNicZiwbF8Eefzm6NVgfiBp7JdAGItecnctKTgH44q2Jw== dependencies: regenerator-transform "^0.14.0" -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== +"@babel/plugin-transform-reserved-words@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" + integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-runtime@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz#a50f5d16e9c3a4ac18a1a9f9803c107c380bce08" - integrity sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q== +"@babel/plugin-transform-runtime@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.4.tgz#51fe458c1c1fa98a8b07934f4ed38b6cd62177a6" + integrity sha512-O8kSkS5fP74Ad/8pfsCMGa8sBRdLxYoSReaARRNSz3FbFQj3z/QUvoUmJ28gn9BO93YfnXc3j+Xyaqe8cKDNBQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@babel/plugin-transform-shorthand-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" + integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== +"@babel/plugin-transform-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" + integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@babel/plugin-transform-sticky-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" + integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== +"@babel/plugin-transform-template-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" + integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== +"@babel/plugin-transform-typeof-symbol@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" + integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== +"@babel/plugin-transform-unicode-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" + integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" -"@babel/preset-env@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" - integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== +"@babel/preset-env@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.4.tgz#ccaf309ae8d1ee2409c85a4e2b5e280ceee830f8" + integrity sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.4.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.4.4" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.4.4" - "@babel/plugin-transform-classes" "^7.4.4" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.4.4" - "@babel/plugin-transform-modules-systemjs" "^7.4.4" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/plugin-proposal-async-generator-functions" "^7.7.4" + "@babel/plugin-proposal-dynamic-import" "^7.7.4" + "@babel/plugin-proposal-json-strings" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/plugin-syntax-top-level-await" "^7.7.4" + "@babel/plugin-transform-arrow-functions" "^7.7.4" + "@babel/plugin-transform-async-to-generator" "^7.7.4" + "@babel/plugin-transform-block-scoped-functions" "^7.7.4" + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@babel/plugin-transform-classes" "^7.7.4" + "@babel/plugin-transform-computed-properties" "^7.7.4" + "@babel/plugin-transform-destructuring" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.4" + "@babel/plugin-transform-duplicate-keys" "^7.7.4" + "@babel/plugin-transform-exponentiation-operator" "^7.7.4" + "@babel/plugin-transform-for-of" "^7.7.4" + "@babel/plugin-transform-function-name" "^7.7.4" + "@babel/plugin-transform-literals" "^7.7.4" + "@babel/plugin-transform-member-expression-literals" "^7.7.4" + "@babel/plugin-transform-modules-amd" "^7.7.4" + "@babel/plugin-transform-modules-commonjs" "^7.7.4" + "@babel/plugin-transform-modules-systemjs" "^7.7.4" + "@babel/plugin-transform-modules-umd" "^7.7.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" + "@babel/plugin-transform-new-target" "^7.7.4" + "@babel/plugin-transform-object-super" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.4" + "@babel/plugin-transform-property-literals" "^7.7.4" + "@babel/plugin-transform-regenerator" "^7.7.4" + "@babel/plugin-transform-reserved-words" "^7.7.4" + "@babel/plugin-transform-shorthand-properties" "^7.7.4" + "@babel/plugin-transform-spread" "^7.7.4" + "@babel/plugin-transform-sticky-regex" "^7.7.4" + "@babel/plugin-transform-template-literals" "^7.7.4" + "@babel/plugin-transform-typeof-symbol" "^7.7.4" + "@babel/plugin-transform-unicode-regex" "^7.7.4" + "@babel/types" "^7.7.4" browserslist "^4.6.0" core-js-compat "^3.1.1" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== +"@babel/preset-react@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.4.tgz#3fe2ea698d8fb536d8e7881a592c3c1ee8bf5707" + integrity sha512-j+vZtg0/8pQr1H8wKoaJyGL2IEk3rG/GIvua7Sec7meXVIvGycihlGMx5xcU00kqCJbwzHs18xTu3YfREOqQ+g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.7.4" + "@babel/plugin-transform-react-jsx" "^7.7.4" + "@babel/plugin-transform-react-jsx-self" "^7.7.4" + "@babel/plugin-transform-react-jsx-source" "^7.7.4" "@babel/runtime@7.0.0": version "7.0.0" @@ -768,107 +810,74 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" - integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b" + integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw== dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.0.0", "@babel/template@^7.1.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" - integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.2.2" - "@babel/types" "^7.2.2" - -"@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.5": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" - integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw== +"@babel/template@^7.0.0", "@babel/template@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0" + integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.2.3" - "@babel/types" "^7.2.2" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" + "@babel/parser" "^7.7.0" + "@babel/types" "^7.7.0" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" - integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== +"@babel/template@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" + integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.4.5" - "@babel/types" "^7.4.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" + integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.2" + "@babel/helper-function-name" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.0" + "@babel/parser" "^7.7.2" + "@babel/types" "^7.7.2" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.11" - -"@babel/traverse@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06" - integrity sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.3.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.3.4" - "@babel/types" "^7.3.4" + lodash "^4.17.13" + +"@babel/traverse@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" + integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/parser" "^7.7.4" + "@babel/types" "^7.7.4" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.11" + lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" - integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.3.0", "@babel/types@^7.7.0", "@babel/types@^7.7.2", "@babel/types@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" + integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== dependencies: esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" - -"@babel/types@^7.0.0-beta.49": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" - integrity sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg== - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@babel/types@^7.3.0", "@babel/types@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed" - integrity sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ== - dependencies: - esutils "^2.0.2" - lodash "^4.17.11" + lodash "^4.17.13" to-fast-properties "^2.0.0" -"@clusterws/cws@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@clusterws/cws/-/cws-0.14.0.tgz#242824b6884454001340222a836db6f6c5e62bfb" - integrity sha512-knZj3KZNHIAGsX7TUc/0Q5gcx2bKMMcTPsAOZomLKdK5a4o/umKFlttWRH84Yr1nVlQy+UMO23qfDR8gRZ/4cw== +"@clusterws/cws@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@clusterws/cws/-/cws-0.16.0.tgz#f6116cbf3a8b7ad0657916616ce5f8248746b797" + integrity sha512-YeGpAPIdkBsOnAkmFKVMWEjCKDH900U2if0B+nc1imfv+64AIb2JX2xiTA6BLDLppEgWV5c6bpWESjbHCNblHw== "@cnakazawa/watch@^1.0.3": version "1.0.3" @@ -878,52 +887,87 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@emotion/babel-utils@^0.6.4": - version "0.6.10" - resolved "https://registry.yarnpkg.com/@emotion/babel-utils/-/babel-utils-0.6.10.tgz#83dbf3dfa933fae9fc566e54fbb45f14674c6ccc" - integrity sha512-/fnkM/LTEp3jKe++T0KyTszVGWNKPNOUJfjNKLO17BzQ6QPxgbg3whayom1Qr2oLFH3V92tDymU+dT5q676uow== - dependencies: - "@emotion/hash" "^0.6.6" - "@emotion/memoize" "^0.6.6" - "@emotion/serialize" "^0.9.1" - convert-source-map "^1.5.1" - find-root "^1.1.0" - source-map "^0.7.2" - -"@emotion/hash@^0.6.2", "@emotion/hash@^0.6.6": - version "0.6.6" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.6.6.tgz#62266c5f0eac6941fece302abad69f2ee7e25e44" - integrity sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ== - -"@emotion/memoize@^0.6.1", "@emotion/memoize@^0.6.6": - version "0.6.6" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.6.6.tgz#004b98298d04c7ca3b4f50ca2035d4f60d2eed1b" - integrity sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ== - -"@emotion/serialize@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.9.1.tgz#a494982a6920730dba6303eb018220a2b629c145" - integrity sha512-zTuAFtyPvCctHBEL8KZ5lJuwBanGSutFEncqLn/m9T1a6a93smBStK+bZzcNPgj4QS8Rkw9VTwJGhRIUVO8zsQ== - dependencies: - "@emotion/hash" "^0.6.6" - "@emotion/memoize" "^0.6.6" - "@emotion/unitless" "^0.6.7" - "@emotion/utils" "^0.8.2" +"@emotion/cache@^10.0.17", "@emotion/cache@^10.0.9": + version "10.0.19" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.19.tgz#d258d94d9c707dcadaf1558def968b86bb87ad71" + integrity sha512-BoiLlk4vEsGBg2dAqGSJu0vJl/PgVtCYLBFJaEO8RmQzPugXewQCXZJNXTDFaRlfCs0W+quesayav4fvaif5WQ== + dependencies: + "@emotion/sheet" "0.9.3" + "@emotion/stylis" "0.8.4" + "@emotion/utils" "0.11.2" + "@emotion/weak-memoize" "0.2.4" + +"@emotion/core@^10.0.9": + version "10.0.17" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.17.tgz#3367376709721f4ee2068cff54ba581d362789d8" + integrity sha512-gykyjjr0sxzVuZBVTVK4dUmYsorc2qLhdYgSiOVK+m7WXgcYTKZevGWZ7TLAgTZvMelCTvhNq8xnf8FR1IdTbg== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/cache" "^10.0.17" + "@emotion/css" "^10.0.14" + "@emotion/serialize" "^0.11.10" + "@emotion/sheet" "0.9.3" + "@emotion/utils" "0.11.2" + +"@emotion/css@^10.0.14", "@emotion/css@^10.0.9": + version "10.0.14" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.14.tgz#95dacabdd0e22845d1a1b0b5968d9afa34011139" + integrity sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg== + dependencies: + "@emotion/serialize" "^0.11.8" + "@emotion/utils" "0.11.2" + babel-plugin-emotion "^10.0.14" + +"@emotion/hash@0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.3.tgz#a166882c81c0c6040975dd30df24fae8549bd96f" + integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw== -"@emotion/stylis@^0.7.0": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.7.1.tgz#50f63225e712d99e2b2b39c19c70fff023793ca5" - integrity sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ== +"@emotion/memoize@0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.3.tgz#5b6b1c11d6a6dddf1f2fc996f74cf3b219644d78" + integrity sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow== + +"@emotion/serialize@^0.11.10", "@emotion/serialize@^0.11.11", "@emotion/serialize@^0.11.8": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.11.tgz#c92a5e5b358070a7242d10508143306524e842a4" + integrity sha512-YG8wdCqoWtuoMxhHZCTA+egL0RSGdHEc+YCsmiSBPBEDNuVeMWtjEWtGrhUterSChxzwnWBXvzSxIFQI/3sHLw== + dependencies: + "@emotion/hash" "0.7.3" + "@emotion/memoize" "0.7.3" + "@emotion/unitless" "0.7.4" + "@emotion/utils" "0.11.2" + csstype "^2.5.7" + +"@emotion/sheet@0.9.3": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.3.tgz#689f135ecf87d3c650ed0c4f5ddcbe579883564a" + integrity sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A== + +"@emotion/stylis@0.8.4": + version "0.8.4" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.4.tgz#6c51afdf1dd0d73666ba09d2eb6c25c220d6fe4c" + integrity sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ== + +"@emotion/unitless@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.4.tgz#a87b4b04e5ae14a88d48ebef15015f6b7d1f5677" + integrity sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ== + +"@emotion/utils@0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.2.tgz#713056bfdffb396b0a14f1c8f18e7b4d0d200183" + integrity sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA== -"@emotion/unitless@^0.6.2", "@emotion/unitless@^0.6.7": - version "0.6.7" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.6.7.tgz#53e9f1892f725b194d5e6a1684a7b394df592397" - integrity sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg== +"@emotion/weak-memoize@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz#622a72bebd1e3f48d921563b4b60a762295a81fc" + integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== -"@emotion/utils@^0.8.2": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.8.2.tgz#576ff7fb1230185b619a75d258cbc98f0867a8dc" - integrity sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw== +"@gamestdio/websocket@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@gamestdio/websocket/-/websocket-0.3.2.tgz#321ba0976ee30fd14e51dbf8faa85ce7b325f76a" + integrity sha512-J3n5SKim+ZoLbe44hRGI/VYAwSMCeIJuBy+FfP6EZaujEpNchPRFcIsVQLWAwpU1bP2Ji63rC+rEUOd1vjUB6Q== "@jest/console@^24.7.1": version "24.7.1" @@ -934,67 +978,77 @@ chalk "^2.0.1" slash "^2.0.0" -"@jest/core@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.8.0.tgz#fbbdcd42a41d0d39cddbc9f520c8bab0c33eed5b" - integrity sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A== +"@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" + integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== dependencies: "@jest/console" "^24.7.1" - "@jest/reporters" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/reporters" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" ansi-escapes "^3.0.0" chalk "^2.0.1" exit "^0.1.2" graceful-fs "^4.1.15" - jest-changed-files "^24.8.0" - jest-config "^24.8.0" - jest-haste-map "^24.8.0" - jest-message-util "^24.8.0" + jest-changed-files "^24.9.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" jest-regex-util "^24.3.0" - jest-resolve-dependencies "^24.8.0" - jest-runner "^24.8.0" - jest-runtime "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" - jest-watcher "^24.8.0" + jest-resolve "^24.9.0" + jest-resolve-dependencies "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + jest-watcher "^24.9.0" micromatch "^3.1.10" p-each-series "^1.0.0" - pirates "^4.0.1" realpath-native "^1.1.0" rimraf "^2.5.4" + slash "^2.0.0" strip-ansi "^5.0.0" -"@jest/environment@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.8.0.tgz#0342261383c776bdd652168f68065ef144af0eac" - integrity sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw== - dependencies: - "@jest/fake-timers" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - -"@jest/fake-timers@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1" - integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw== - dependencies: - "@jest/types" "^24.8.0" - jest-message-util "^24.8.0" - jest-mock "^24.8.0" - -"@jest/reporters@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.8.0.tgz#075169cd029bddec54b8f2c0fc489fd0b9e05729" - integrity sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" +"@jest/environment@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" + integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== + dependencies: + "@jest/fake-timers" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/reporters@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" + integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" exit "^0.1.2" glob "^7.1.2" @@ -1002,13 +1056,13 @@ istanbul-lib-instrument "^3.0.1" istanbul-lib-report "^2.0.4" istanbul-lib-source-maps "^3.0.1" - istanbul-reports "^2.1.1" - jest-haste-map "^24.8.0" - jest-resolve "^24.8.0" - jest-runtime "^24.8.0" - jest-util "^24.8.0" + istanbul-reports "^2.2.6" + jest-haste-map "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" jest-worker "^24.6.0" - node-notifier "^5.2.1" + node-notifier "^5.4.2" slash "^2.0.0" source-map "^0.6.0" string-length "^2.0.0" @@ -1022,59 +1076,69 @@ graceful-fs "^4.1.15" source-map "^0.6.0" -"@jest/test-result@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3" - integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng== +"@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== dependencies: - "@jest/console" "^24.7.1" - "@jest/types" "^24.8.0" + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" "@types/istanbul-lib-coverage" "^2.0.0" -"@jest/test-sequencer@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz#2f993bcf6ef5eb4e65e8233a95a3320248cf994b" - integrity sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg== +"@jest/test-sequencer@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" + integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== dependencies: - "@jest/test-result" "^24.8.0" - jest-haste-map "^24.8.0" - jest-runner "^24.8.0" - jest-runtime "^24.8.0" + "@jest/test-result" "^24.9.0" + jest-haste-map "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" -"@jest/transform@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.8.0.tgz#628fb99dce4f9d254c6fd9341e3eea262e06fef5" - integrity sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA== +"@jest/transform@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" + integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" babel-plugin-istanbul "^5.1.0" chalk "^2.0.1" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.1.15" - jest-haste-map "^24.8.0" - jest-regex-util "^24.3.0" - jest-util "^24.8.0" + jest-haste-map "^24.9.0" + jest-regex-util "^24.9.0" + jest-util "^24.9.0" micromatch "^3.1.10" + pirates "^4.0.1" realpath-native "^1.1.0" slash "^2.0.0" source-map "^0.6.1" write-file-atomic "2.4.1" -"@jest/types@^24.8.0": - version "24.8.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad" - integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg== +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^12.0.9" + "@types/yargs" "^13.0.0" -"@types/babel__core@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.0.tgz#710f2487dda4dcfd010ca6abb2b4dc7394365c51" - integrity sha512-wJTeJRt7BToFx3USrCDs2BhEi4ijBInTQjOIukj6a/5tEkwpFMVZ+1ppgmE+Q/FQyc5P/VWUbx7I9NELrKruHA== +"@types/babel__core@^7.1.0", "@types/babel__core@^7.1.2": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" + integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1144,9 +1208,14 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "10.12.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" - integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== + version "12.7.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.8.tgz#cb1bf6800238898bc2ff6ffa5702c3cadd350708" + integrity sha512-FMdVn84tJJdV+xe+53sYiZS4R5yn1mAIxfj+DVoNiQjTYz1+OYmjwEZr1ev9nU0axXwda0QDbYl06QHanRVH3A== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/q@^1.5.1": version "1.5.1" @@ -1165,10 +1234,17 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": - version "12.0.9" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.9.tgz#693e76a52f61a2f1e7fb48c0eef167b95ea4ffd0" - integrity sha512-sCZy4SxP9rN2w30Hlmg5dtdRwgYQfYRiLo9usw8X9cxlf+H4FqM1xX7+sNH7NNKVdbXMJWqva7iyy+fxh/V7fA== +"@types/yargs-parser@*": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" + integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== + +"@types/yargs@^13.0.0": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653" + integrity sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ== + dependencies: + "@types/yargs-parser" "*" "@webassemblyjs/ast@1.8.5": version "1.8.5" @@ -1344,11 +1420,6 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== - acorn-globals@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" @@ -1364,15 +1435,15 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== +acorn-jsx@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== acorn-walk@^6.0.1, acorn-walk@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" - integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^3.0.4: version "3.3.0" @@ -1384,15 +1455,39 @@ acorn@^5.5.0, acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1, acorn@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" - integrity sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg== +acorn@^6.0.1, acorn@^6.0.7, acorn@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" + integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" -acorn@^6.0.5, acorn@^6.0.7: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +airbnb-prop-types@^2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz#5287820043af1eb469f5b0af0d6f70da6c52aaef" + integrity sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA== + dependencies: + array.prototype.find "^2.1.0" + function.prototype.name "^1.1.1" + has "^1.0.3" + is-regex "^1.0.4" + object-is "^1.0.1" + object.assign "^4.1.0" + object.entries "^1.1.0" + prop-types "^15.7.2" + prop-types-exact "^1.2.0" + react-is "^16.9.0" ajv-errors@^1.0.0: version "1.0.1" @@ -1404,10 +1499,10 @@ ajv-keywords@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw= -ajv-keywords@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo= +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== ajv@^4.7.0: version "4.11.8" @@ -1417,10 +1512,10 @@ ajv@^4.7.0: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^6.1.0, ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1: - version "6.6.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d" - integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g== +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -1433,9 +1528,9 @@ alphanum-sort@^1.0.0: integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= ansi-colors@^3.0.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== ansi-escapes@^1.1.0: version "1.4.0" @@ -1447,6 +1542,13 @@ ansi-escapes@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== +ansi-escapes@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" + integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== + dependencies: + type-fest "^0.8.1" + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -1467,6 +1569,16 @@ ansi-regex@^4.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1487,6 +1599,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.0.3.tgz#2fb624fe0e84bccab00afee3d0006ed310f22f09" + integrity sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1535,6 +1655,11 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -1570,6 +1695,14 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.find@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.0.tgz#630f2eaf70a39e608ac3573e45cf8ccd0ede9ad7" + integrity sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.13.0" + array.prototype.flat@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" @@ -1584,6 +1717,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +arrow-key-navigation@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arrow-key-navigation/-/arrow-key-navigation-1.1.0.tgz#c0f7021d006593e2e34e79aa1f032714877d3a76" + integrity sha512-u73yfJRmKye5eZiMNrAUKaBIRt47/1NM8WEtVAPjjMDab/PVn0sKIuapvCxl7C+tI9nH0QOl1Tc2YL2aO9n9Zw== + asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1611,10 +1749,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0: integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: + object-assign "^4.1.1" util "0.10.3" assign-symbols@^1.0.0: @@ -1638,21 +1777,16 @@ async-each@^1.0.1: integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== - -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== dependencies: - lodash "^4.17.10" + lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" @@ -1668,17 +1802,18 @@ atrament@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/atrament/-/atrament-0.2.3.tgz#6ccbc0daa6d3f25e5aeaeb31befeb78e86980348" -autoprefixer@^9.5.1: - version "9.5.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.5.1.tgz#243b1267b67e7e947f28919d786b50d3bb0fb357" - integrity sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ== +autoprefixer@^9.7.3: + version "9.7.3" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.3.tgz#fd42ed03f53de9beb4ca0d61fb4f7268a9bb50b4" + integrity sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q== dependencies: - browserslist "^4.5.4" - caniuse-lite "^1.0.30000957" + browserslist "^4.8.0" + caniuse-lite "^1.0.30001012" + chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.14" - postcss-value-parser "^3.3.1" + postcss "^7.0.23" + postcss-value-parser "^4.0.2" aws-sign2@~0.7.0: version "0.7.0" @@ -1690,6 +1825,14 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== +axios@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + axios@^0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" @@ -1705,58 +1848,63 @@ axobject-query@^2.0.2: dependencies: ast-types-flow "0.0.7" -babel-eslint@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" - integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== +babel-eslint@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a" + integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA== dependencies: "@babel/code-frame" "^7.0.0" "@babel/parser" "^7.0.0" "@babel/traverse" "^7.0.0" "@babel/types" "^7.0.0" - eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" -babel-jest@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.8.0.tgz#5c15ff2b28e20b0f45df43fe6b7f2aae93dba589" - integrity sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw== +babel-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" + integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== dependencies: - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" "@types/babel__core" "^7.1.0" babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.6.0" + babel-preset-jest "^24.9.0" chalk "^2.4.2" slash "^2.0.0" -babel-loader@^8.0.5: - version "8.0.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33" - integrity sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw== +babel-loader@^8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== dependencies: find-cache-dir "^2.0.0" loader-utils "^1.0.2" mkdirp "^0.5.1" - util.promisify "^1.0.0" + pify "^4.0.1" -babel-plugin-emotion@^9.2.11: - version "9.2.11" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz#319c005a9ee1d15bb447f59fe504c35fd5807728" - integrity sha512-dgCImifnOPPSeXod2znAmgc64NhaaOjGEHROR/M+lmStb3841yK1sgaDYAYMnlvWNz8GnpwIPN0VmNpbWYZ+VQ== +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-emotion@^10.0.14: + version "10.0.19" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.19.tgz#67b9b213f7505c015f163a387a005c12c502b1de" + integrity sha512-1pJb5uKN/gx6bi3gGr588Krj49sxARI9KmxhtMUa+NRJb6lR3OfC51mh3NlWRsOqdjWlT4cSjnZpnFq5K3T5ZA== dependencies: "@babel/helper-module-imports" "^7.0.0" - "@emotion/babel-utils" "^0.6.4" - "@emotion/hash" "^0.6.2" - "@emotion/memoize" "^0.6.1" - "@emotion/stylis" "^0.7.0" + "@emotion/hash" "0.7.3" + "@emotion/memoize" "0.7.3" + "@emotion/serialize" "^0.11.11" babel-plugin-macros "^2.0.0" babel-plugin-syntax-jsx "^6.18.0" convert-source-map "^1.5.0" + escape-string-regexp "^1.0.5" find-root "^1.1.0" - mkdirp "^0.5.1" source-map "^0.5.7" - touch "^2.0.1" babel-plugin-istanbul@^5.1.0: version "5.1.1" @@ -1767,10 +1915,10 @@ babel-plugin-istanbul@^5.1.0: istanbul-lib-instrument "^3.0.0" test-exclude "^5.0.0" -babel-plugin-jest-hoist@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019" - integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w== +babel-plugin-jest-hoist@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" + integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== dependencies: "@types/babel__traverse" "^7.0.6" @@ -1785,38 +1933,34 @@ babel-plugin-lodash@^3.3.4: lodash "^4.17.10" require-package-name "^2.0.1" -babel-plugin-macros@^2.0.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.5.1.tgz#4a119ac2c2e19b458c259b9accd7ee34fd57ec6f" - integrity sha512-xN3KhAxPzsJ6OQTktCanNpIFnnMsCV+t8OloKxIL72D6+SUZYFn9qfklPgef5HyyDtzYZqqb+fs1S12+gQY82Q== - dependencies: - "@babel/runtime" "^7.4.2" - cosmiconfig "^5.2.0" - resolve "^1.10.0" - -babel-plugin-macros@^2.2.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.3.tgz#870345aa538d85f04b4614fea5922b55c45dd551" - integrity sha512-M8cE1Rx0zgfKYBWAS+T6ZVCLGuTKdBI5Rn3fu9q6iVdH0UjaXdmF501/VEYn7kLHCgguhGNk5JBzOn64e2xDEA== +babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.6.2.tgz#98ae30a02645dfa8033628fe613854ec9541bbc8" + integrity sha512-Ntviq8paRTkXIxvrJBauib+2KqQbZQuh4593CEZFF8qz3IVP8VituTZmkGe6N7rsuiOIbejxXj6kx3LMlEq0UA== dependencies: - cosmiconfig "^5.0.5" - resolve "^1.8.1" + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" -babel-plugin-preval@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-preval/-/babel-plugin-preval-3.0.1.tgz#a26f9690114a864a54a5cbdf865496ebf541a9c3" - integrity sha512-s8hmTlRSmzcL7cHSIi0s6WxmpOAxfIlWqSVQwBIt7V5bNBaac+8JMZ6kJXLOazMJ8gCIcb5AJgQUgPHvbSYUzw== +babel-plugin-preval@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-preval/-/babel-plugin-preval-4.0.0.tgz#edb8501167985752aafcc31086791e1314052e9d" + integrity sha512-fZI/4cYneinlj2k/FsXw0/lTWSC5KKoepUueS1g25Gb5vx3GrRyaVwxWCshYqx11GEU4mZnbbFhee8vpquFS2w== dependencies: - babel-plugin-macros "^2.2.2" + "@babel/runtime" "^7.7.2" + babel-plugin-macros "^2.6.1" require-from-string "^2.0.2" -babel-plugin-react-intl@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-3.1.3.tgz#2a28cd43cbba1ed092c7e3376bf8f02b0f72acb8" - integrity sha512-Fq2u6HqYt+pggUXe8DSqZaRA2W9LfOet1dQv1tD+KYcRjL9JW/DXNEn3GPjSw3bCHJiSuGyWPYO7MdbYRVsGDw== +babel-plugin-react-intl@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-3.4.1.tgz#b107b0756599c2fccb09f601454a7b805e8df659" + integrity sha512-1Dp+b5E71ot3YjxPkX1u4l5pJkiLDmU4V6m6gatgrFRxGL8NQlQ67WrPA7GTNJhOhs75PYGmR3+l1PT7It4eyQ== dependencies: + "@babel/core" "^7.4.5" + "@babel/helper-plugin-utils" "^7.0.0" + "@types/babel__core" "^7.1.2" fs-extra "^8.0.1" - intl-messageformat-parser "^1.6.5" + intl-messageformat-parser "^1.7.1" babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" @@ -1828,13 +1972,13 @@ babel-plugin-transform-react-remove-prop-types@^0.4.24: resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== -babel-preset-jest@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984" - integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw== +babel-preset-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" + integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== dependencies: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.6.0" + babel-plugin-jest-hoist "^24.9.0" babel-runtime@^6.26.0: version "6.26.0" @@ -1844,22 +1988,15 @@ babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" -backoff@^2.4.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" - integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= - dependencies: - precond "0.2" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== base@^0.11.1: version "0.11.2" @@ -1887,14 +2024,14 @@ bcrypt-pbkdf@^1.0.0: tweetnacl "^0.14.3" bfj@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48" - integrity sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ== + version "6.1.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" + integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== dependencies: - bluebird "^3.5.1" - check-types "^7.3.0" - hoopy "^0.1.2" - tryer "^1.0.0" + bluebird "^3.5.5" + check-types "^8.0.3" + hoopy "^0.1.4" + tryer "^1.0.1" big.js@^3.1.3: version "3.2.0" @@ -1907,19 +2044,29 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^1.0.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" - integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg== + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -bluebird@^3.5.1, bluebird@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" - integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== -blurhash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-1.0.0.tgz#9087bc5cc4d482f1305059d7410df4133adcab2e" - integrity sha512-x6fpZnd6AWde4U9m7xhUB44qIvGV4W6OdTAXGabYm4oZUOOGh5K1HAEoGAQn3iG4gbbPn9RSGce3VfNgGsX/Vw== +bluebird@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + +blurhash@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-1.1.3.tgz#dc325af7da836d07a0861d830bdd63694382483e" + integrity sha512-yUhPJvXexbqbyijCIE/T2NCXcj9iNPhWmOKbPTuR/cm7Q5snXYIfnVnz6m7MWOXxODMz/Cr3UcVkRdHiuDVRDw== + +bmp-js@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" + integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" @@ -1983,6 +2130,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + bricks.js@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/bricks.js/-/bricks.js-1.8.0.tgz#8fdeb3c0226af251f4d5727a7df7f9ac0092b4b2" @@ -2066,14 +2220,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.5.4, browserslist@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.1.tgz#ee5059b1aec18cbec9d055d6cb5e24ae50343a9b" - integrity sha512-1MC18ooMPRG2UuVFJTHFIAkk6mpByJfxCrnUyvSlu/hyQSFHMrlhM02SzNuCV+quTP4CKmqtOMAIjrifrpBJXQ== +browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.0.tgz#6f06b0f974a7cc3a84babc2ccc56493668e3c789" + integrity sha512-HYnxc/oLRWvJ3TsGegR0SRL/UDnknGq2s/a8dYYEO+kOQ9m9apKoS5oiathLKZdh/e9uE+/J3j92qPlGD/vTqA== dependencies: - caniuse-lite "^1.0.30000971" - electron-to-chromium "^1.3.137" - node-releases "^1.1.21" + caniuse-lite "^1.0.30001012" + electron-to-chromium "^1.3.317" + node-releases "^1.1.41" bser@^2.0.0: version "2.0.0" @@ -2131,26 +2285,71 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^11.0.2, cacache@^11.2.0, cacache@^11.3.2: - version "11.3.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" - integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== +cacache@^11.2.0: + version "11.3.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" + integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== dependencies: - bluebird "^3.5.3" + bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" - glob "^7.1.3" + glob "^7.1.4" graceful-fs "^4.1.15" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" move-concurrently "^1.0.1" promise-inflight "^1.0.1" - rimraf "^2.6.2" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^12.0.2, cacache@^12.0.3: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" ssri "^6.0.1" unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2202,15 +2401,10 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== -camelcase@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - -camelcase@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" - integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-api@^3.0.0: version "3.0.0" @@ -2222,10 +2416,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000957, caniuse-lite@^1.0.30000971: - version "1.0.30000971" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz#d1000e4546486a6977756547352bc96a4cfd2b13" - integrity sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001012: + version "1.0.30001013" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001013.tgz#da2440d4d266a17d40eb79bd19c0c8cc1d029c72" + integrity sha512-hOAXaWKuq/UVFgYawxIOdPdyMQdYcwOCDOjnZcKn7wCgFUrhP7smuNZjGLuJlPSgE6aRA4cRJ+bGSrhtEt7ZAg== capture-exit@^1.2.0: version "1.2.0" @@ -2239,6 +2433,15 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +chalk@2.4.2, chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -2250,25 +2453,21 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-types@^7.3.0: +check-types@^7.4.0: version "7.4.0" resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" integrity sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg== +check-types@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" + integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== + cheerio@^1.0.0-rc.2: version "1.0.0-rc.2" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" @@ -2281,10 +2480,25 @@ cheerio@^1.0.0-rc.2: lodash "^4.15.0" parse5 "^3.0.1" -chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" - integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== +"chokidar@>=2.0.0 <4.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.0.2.tgz#0d1cd6d04eb2df0327446188cd13736a3367d681" + integrity sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA== + dependencies: + anymatch "^3.0.1" + braces "^3.0.2" + glob-parent "^5.0.0" + is-binary-path "^2.1.0" + is-glob "^4.0.1" + normalize-path "^3.0.0" + readdirp "^3.1.1" + optionalDependencies: + fsevents "^2.0.6" + +chokidar@^2.0.2, chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: anymatch "^2.0.0" async-each "^1.0.1" @@ -2300,15 +2514,15 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.1.6: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== -chrome-trace-event@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" - integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A== +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== dependencies: tslib "^1.9.0" @@ -2345,6 +2559,11 @@ classnames@^2.2.5: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-cursor@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -2352,12 +2571,12 @@ cli-cursor@^1.0.1: dependencies: restore-cursor "^1.0.1" -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - restore-cursor "^2.0.0" + restore-cursor "^3.1.0" cli-width@^2.0.0: version "2.2.0" @@ -2373,15 +2592,23 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -clone-deep@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" - integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ== +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: - for-own "^1.0.0" is-plain-object "^2.0.4" - kind-of "^6.0.0" - shallow-clone "^1.0.0" + kind-of "^6.0.2" + shallow-clone "^3.0.0" co@^4.6.0: version "4.6.0" @@ -2455,20 +2682,10 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.18.0, commander@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -commander@^2.8.1: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -commander@~2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== +commander@^2.11.0, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, commander@~2.20.0: + version "2.20.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.1.tgz#3863ce3ca92d0831dcf2a102f5fb4b5926afd0f9" + integrity sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg== commondir@^1.0.1: version "1.0.1" @@ -2476,9 +2693,9 @@ commondir@^1.0.1: integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== compressible@~2.0.16: version "2.0.17" @@ -2487,13 +2704,13 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.40.0 < 2" -compression-webpack-plugin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-2.0.0.tgz#46476350c1eb27f783dccc79ac2f709baa2cffbc" - integrity sha512-bDgd7oTUZC8EkRx8j0sjyCfeiO+e5sFcfgaFcjVhfQf5lLya7oY2BczxcJ7IUuVjz5m6fy8IECFmVFew3xLk8Q== +compression-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-3.0.0.tgz#097d2e4d95c3a14cb5c8ed20899009ab5b9bbca0" + integrity sha512-ls+oKw4eRbvaSv/hj9NmctihhBcR26j76JxV0bLRLcWhrUBdQFgd06z/Kgg7exyQvtWWP484wZxs0gIUX3NO0Q== dependencies: cacache "^11.2.0" - find-cache-dir "^2.0.0" + find-cache-dir "^3.0.0" neo-async "^2.5.0" schema-utils "^1.0.0" serialize-javascript "^1.4.0" @@ -2566,10 +2783,10 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" @@ -2600,6 +2817,24 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +copy-webpack-plugin@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.0.5.tgz#731df6a837a2ef0f8f8e2345bdfe9b7c62a2da68" + integrity sha512-7N68eIoQTyudAuxkfPT7HzGoQ+TsmArN/I3HFwG+lVE3FNzqvZKIiaxtYh4o3BIznioxUvx9j26+Rtsc9htQUQ== + dependencies: + cacache "^12.0.3" + find-cache-dir "^2.1.0" + glob-parent "^3.1.0" + globby "^7.1.1" + is-glob "^4.0.1" + loader-utils "^1.2.3" + minimatch "^3.0.4" + normalize-path "^3.0.0" + p-limit "^2.2.1" + schema-utils "^1.0.0" + serialize-javascript "^2.1.0" + webpack-log "^2.0.0" + core-js-compat@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.3.tgz#0cc3ba4c7f62928c2837e1cffbe8dc78b4f1ae14" @@ -2639,7 +2874,7 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" -cosmiconfig@^5.0.0, cosmiconfig@^5.0.5: +cosmiconfig@^5.0.0: version "5.0.7" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" integrity sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA== @@ -2649,15 +2884,16 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.0.5: js-yaml "^3.9.0" parse-json "^4.0.0" -cosmiconfig@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" create-ecdh@^4.0.0: version "4.0.3" @@ -2667,19 +2903,6 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-emotion@^9.2.12: - version "9.2.12" - resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-9.2.12.tgz#0fc8e7f92c4f8bb924b0fef6781f66b1d07cb26f" - integrity sha512-P57uOF9NL2y98Xrbl2OuiDQUZ30GVmASsv5fbsjF4Hlraip2kyAvMm+2PoYUvFFw03Fhgtxk3RqZSm2/qHL9hA== - dependencies: - "@emotion/hash" "^0.6.2" - "@emotion/memoize" "^0.6.1" - "@emotion/stylis" "^0.7.0" - "@emotion/unitless" "^0.6.2" - csstype "^2.5.2" - stylis "^3.5.0" - stylis-rule-sheet "^0.0.10" - create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -2703,15 +2926,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-env@^5.1.4: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg== +cross-env@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941" + integrity sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag== dependencies: - cross-spawn "^6.0.5" - is-windows "^1.0.0" + cross-spawn "^7.0.0" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -2722,6 +2944,15 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2784,22 +3015,23 @@ css-list-helpers@^1.0.1: dependencies: tcomb "^2.5.0" -css-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea" - integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w== +css-loader@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.2.0.tgz#bb570d89c194f763627fcf1f80059c6832d009b2" + integrity sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ== dependencies: - camelcase "^5.2.0" - icss-utils "^4.1.0" + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" loader-utils "^1.2.3" normalize-path "^3.0.0" - postcss "^7.0.14" + postcss "^7.0.17" postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^2.0.6" + postcss-modules-local-by-default "^3.0.2" postcss-modules-scope "^2.1.0" - postcss-modules-values "^2.0.0" - postcss-value-parser "^3.3.0" - schema-utils "^1.0.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.0" + schema-utils "^2.0.0" css-select-base-adapter@~0.1.0: version "0.1.1" @@ -2964,22 +3196,23 @@ csstype@^2.2.0: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.0.tgz#6cf7b2fa7fc32aab3d746802c244d4eda71371a2" integrity sha512-by8hi8BlLbowQq0qtkx54d9aN73R9oUW20HISpka5kmgsR9F7nnxgfsemuR2sdCKZh+CDNf5egW9UZMm4mgJRg== -csstype@^2.5.2: - version "2.6.5" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.5.tgz#1cd1dff742ebf4d7c991470ae71e12bb6751e034" - integrity sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA== +csstype@^2.5.7: + version "2.6.6" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41" + integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg== -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8= +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== dependencies: - es5-ext "^0.10.9" + es5-ext "^0.10.50" + type "^1.0.1" damerau-levenshtein@^1.0.4: version "1.0.4" @@ -3007,7 +3240,7 @@ date-now@^0.1.4: resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= -debug@2.6.9, debug@^2.1.1, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -3021,7 +3254,7 @@ debug@=3.1.0: dependencies: ms "2.0.0" -debug@^3.2.5: +debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -3046,9 +3279,16 @@ decode-uri-component@^0.2.0: integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + version "1.1.0" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" + integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" deep-extend@^0.5.1: version "0.5.1" @@ -3168,10 +3408,10 @@ detect-passive-events@^1.0.2: resolved "https://registry.yarnpkg.com/detect-passive-events/-/detect-passive-events-1.0.4.tgz#6ed477e6e5bceb79079735dcd357789d37f9a91a" integrity sha1-btR35uW863kHlzXc01d4nTf5qRo= -diff-sequences@^24.3.0: - version "24.3.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" - integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== diffie-hellman@^5.0.0: version "5.0.3" @@ -3182,6 +3422,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" @@ -3222,6 +3469,13 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dom-helpers@^3.2.1, dom-helpers@^3.3.1: version "3.4.0" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" @@ -3289,10 +3543,10 @@ dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" -dotenv@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.0.0.tgz#ed310c165b4e8a97bb745b0a9d99c31bda566440" - integrity sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg== +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== double-ended-queue@^2.1.0-0: version "2.1.0-0" @@ -3305,9 +3559,9 @@ duplexer@^0.1.1: integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= duplexify@^3.4.2, duplexify@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" - integrity sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA== + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -3328,19 +3582,19 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= ejs@^2.3.4, ejs@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" - integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== + version "2.7.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228" + integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ== -electron-to-chromium@^1.3.137: - version "1.3.143" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.143.tgz#8b2a631ab75157aa53d0c2933275643b99ef580b" - integrity sha512-J9jOpxIljQZlV6GIP2fwAWq0T69syawU0sH3EW3O2Bgxquiy+veeIT5mBDRz+i3oHUSL1tvVgRKH3/4QiQh9Pg== +electron-to-chromium@^1.3.317: + version "1.3.321" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.321.tgz#913869f5ec85daabba0e75c9c314b4bf26cdb01e" + integrity sha512-jJy/BZK2s2eAjMPXVMSaCmo7/pSY2aKkfQ+LoAb5Wk39qAhyP9r8KU74c4qTgr9cD/lPUhJgReZxxqU0n5puog== elliptic@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" - integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== + version "6.5.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" + integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -3351,27 +3605,24 @@ elliptic@^6.0.0: minimalistic-crypto-utils "^1.0.0" emoji-mart@Gargron/emoji-mart#build: - version "2.6.2" - resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/ff00dc470b5b2d9f145a6d6e977a54de5df2b4c9" + version "2.6.3" + resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/934f314fd8322276765066e8a2a6be5bac61b1cf" -emoji-regex@^7.0.2: +emoji-regex@^7.0.1, emoji-regex@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= -emotion@^9.1.2: - version "9.2.12" - resolved "https://registry.yarnpkg.com/emotion/-/emotion-9.2.12.tgz#53925aaa005614e65c6e43db8243c843574d1ea9" - integrity sha512-hcx7jppaI8VoXxIWEhxpDW7I+B4kq9RNzQLmsrF6LY8BGKqe2N+gFAQr0EfuFucFlPs2A9HM4+xNj4NeqEWIOQ== - dependencies: - babel-plugin-emotion "^9.2.11" - create-emotion "^9.2.12" - encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -3385,13 +3636,13 @@ encoding@^0.1.11: iconv-lite "~0.4.13" end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -enhanced-resolve@^4.1.0: +enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== @@ -3405,41 +3656,55 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== -enzyme-adapter-react-16@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.7.1.tgz#c37c4cb0fd75e88a063154a7a88096474914496a" - integrity sha512-OQXKgfHWyHN3sFu2nKj3mhgRcqIPIJX6aOzq5AHVFES4R9Dw/vCBZFMPyaG81g2AZ5DogVh39P3MMNUbqNLTcw== +enzyme-adapter-react-16@^1.15.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.1.tgz#8ad55332be7091dc53a25d7d38b3485fc2ba50d5" + integrity sha512-yMPxrP3vjJP+4wL/qqfkT6JAIctcwKF+zXO6utlGPgUJT2l4tzrdjMDWGd/Pp1BjHBcljhN24OzNEGRteibJhA== dependencies: - enzyme-adapter-utils "^1.9.0" - function.prototype.name "^1.1.0" + enzyme-adapter-utils "^1.12.1" + enzyme-shallow-equal "^1.0.0" + has "^1.0.3" object.assign "^4.1.0" - object.values "^1.0.4" - prop-types "^15.6.2" - react-is "^16.6.1" + object.values "^1.1.0" + prop-types "^15.7.2" + react-is "^16.10.2" react-test-renderer "^16.0.0-0" + semver "^5.7.0" -enzyme-adapter-utils@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.9.0.tgz#3997c20f3387fdcd932b155b3740829ea10aa86c" - integrity sha512-uMe4xw4l/Iloh2Fz+EO23XUYMEQXj5k/5ioLUXCNOUCI8Dml5XQMO9+QwUq962hBsY5qftfHHns+d990byWHvg== +enzyme-adapter-utils@^1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.1.tgz#e828e0d038e2b1efa4b9619ce896226f85c9dd88" + integrity sha512-KWiHzSjZaLEoDCOxY8Z1RAbUResbqKN5bZvenPbfKtWorJFVETUw754ebkuCQ3JKm0adx1kF8JaiR+PHPiP47g== dependencies: - function.prototype.name "^1.1.0" + airbnb-prop-types "^2.15.0" + function.prototype.name "^1.1.1" object.assign "^4.1.0" - prop-types "^15.6.2" - semver "^5.6.0" + object.fromentries "^2.0.1" + prop-types "^15.7.2" + semver "^5.7.0" -enzyme@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.8.0.tgz#646d2d5d0798cb98fdec39afcee8a53237b47ad5" - integrity sha512-bfsWo5nHyZm1O1vnIsbwdfhU989jk+squU9NKvB+Puwo5j6/Wg9pN5CO0YJelm98Dao3NPjkDZk+vvgwpMwYxw== +enzyme-shallow-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.0.tgz#d8e4603495e6ea279038eef05a4bf4887b55dc69" + integrity sha512-VUf+q5o1EIv2ZaloNQQtWCJM9gpeux6vudGVH6vLmfPXFLRuxl5+Aq3U260wof9nn0b0i+P5OEUXm1vnxkRpXQ== + dependencies: + has "^1.0.3" + object-is "^1.0.1" + +enzyme@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.10.0.tgz#7218e347c4a7746e133f8e964aada4a3523452f6" + integrity sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg== dependencies: array.prototype.flat "^1.2.1" cheerio "^1.0.0-rc.2" function.prototype.name "^1.1.0" has "^1.0.3" + html-element-map "^1.0.0" is-boolean-object "^1.0.0" is-callable "^1.1.4" is-number-object "^1.0.3" + is-regex "^1.0.4" is-string "^1.0.4" is-subset "^0.1.1" lodash.escape "^4.0.1" @@ -3467,44 +3732,40 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== +es-abstract@^1.10.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.15.0, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.7.0: + version "1.16.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.2.tgz#4e874331645e9925edef141e74fc4bd144669d34" + integrity sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA== dependencies: - es-to-primitive "^1.1.1" + es-to-primitive "^1.2.1" function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.4" is-regex "^1.0.4" + object-inspect "^1.7.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" -es-to-primitive@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.14: - version "0.10.50" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778" - integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw== +es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@^0.10.51, es5-ext@~0.10.14: + version "0.10.51" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.51.tgz#ed2d7d9d48a12df86e0299287e93a09ff478842f" + integrity sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ== dependencies: es6-iterator "~2.0.3" es6-symbol "~3.1.1" next-tick "^1.0.0" -es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.46" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" - integrity sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "1" - es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" @@ -3537,7 +3798,7 @@ es6-set@~0.1.5: es6-symbol "3.1.1" event-emitter "~0.3.5" -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: +es6-symbol@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= @@ -3545,6 +3806,14 @@ es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: d "1" es5-ext "~0.10.14" +es6-symbol@^3.1.1, es6-symbol@^3.1.2, es6-symbol@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.2.tgz#859fdd34f32e905ff06d752e7171ddd4444a7ed1" + integrity sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ== + dependencies: + d "^1.0.1" + es5-ext "^0.10.51" + es6-weak-map@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" @@ -3587,7 +3856,7 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-import-resolver-node@^0.3.1: +eslint-import-resolver-node@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== @@ -3595,35 +3864,42 @@ eslint-import-resolver-node@^0.3.1: debug "^2.6.9" resolve "^1.5.0" -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" - integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y= +eslint-module-utils@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a" + integrity sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw== dependencies: debug "^2.6.8" - pkg-dir "^1.0.0" + pkg-dir "^2.0.0" -eslint-plugin-import@~2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" - integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g== +eslint-plugin-eslint-plugin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.1.0.tgz#a7a00f15a886957d855feacaafee264f039e62d5" + integrity sha512-kT3A/ZJftt28gbl/Cv04qezb/NQ1dwYIbi8lyf806XMxkus7DvOVCLIfTXMrorp322Pnoez7+zabXH29tADIDg== + +eslint-plugin-import@~2.18.2: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== dependencies: + array-includes "^3.0.3" contains-path "^0.1.0" - debug "^2.6.8" + debug "^2.6.9" doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.2.0" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" read-pkg-up "^2.0.0" - resolve "^1.6.0" + resolve "^1.11.0" -eslint-plugin-jsx-a11y@~6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz#4ebba9f339b600ff415ae4166e3e2e008831cf0c" - integrity sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w== +eslint-plugin-jsx-a11y@~6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" + integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== dependencies: + "@babel/runtime" "^7.4.5" aria-query "^3.0.0" array-includes "^3.0.3" ast-types-flow "^0.0.7" @@ -3631,51 +3907,56 @@ eslint-plugin-jsx-a11y@~6.2.1: damerau-levenshtein "^1.0.4" emoji-regex "^7.0.2" has "^1.0.3" - jsx-ast-utils "^2.0.1" + jsx-ast-utils "^2.2.1" -eslint-plugin-promise@~4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.1.1.tgz#1e08cb68b5b2cd8839f8d5864c796f56d82746db" - integrity sha512-faAHw7uzlNPy7b45J1guyjazw28M+7gJokKUjC5JSFoYfUEyy6Gw/i7YQvmv2Yk00sUjWcmzXQLpU1Ki/C2IZQ== +eslint-plugin-promise@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" + integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== -eslint-plugin-react@~7.12.1: - version "7.12.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.1.tgz#b9c4639f72469ff317ac31e3bd630d22d0dbf8f4" - integrity sha512-1YyXVhp6KSB+xRC1BWzmlA4BH9Wp9jMMBE6AJizxuk+bg/KUJpQGRwsU1/q1pV8rM6oEdLCxunXn7Nfh2BOWBg== +eslint-plugin-react@~7.17.0: + version "7.17.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.17.0.tgz#a31b3e134b76046abe3cd278e7482bd35a1d12d7" + integrity sha512-ODB7yg6lxhBVMeiH1c7E95FLD4E/TwmFjltiU+ethv7KPdCwgiFuOZg9zNRHyufStTDLl/dEFqI2Q1VPmCd78A== dependencies: array-includes "^3.0.3" doctrine "^2.1.0" + eslint-plugin-eslint-plugin "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.0.1" - object.fromentries "^2.0.0" - prop-types "^15.6.2" - resolve "^1.9.0" + jsx-ast-utils "^2.2.3" + object.entries "^1.1.0" + object.fromentries "^2.0.1" + object.values "^1.1.0" + prop-types "^15.7.2" + resolve "^1.13.1" -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== eslint@^2.7.0: version "2.13.1" @@ -3716,48 +3997,48 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^5.11.1: - version "5.11.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.11.1.tgz#8deda83db9f354bf9d3f53f9677af7e0e13eadda" - integrity sha512-gOKhM8JwlFOc2acbOrkYR05NW8M6DCMSvfcJiBB5NDxRE1gv8kbvxKaC9u69e6ZGEMWXcswA/7eKR229cEIpvg== +eslint@^6.7.2: + version "6.7.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1" + integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng== dependencies: "@babel/code-frame" "^7.0.0" - ajv "^6.5.3" + ajv "^6.10.0" chalk "^2.1.0" cross-spawn "^6.0.5" debug "^4.0.1" - doctrine "^2.1.0" - eslint-scope "^4.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.0" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" esquery "^1.0.1" esutils "^2.0.2" - file-entry-cache "^2.0.0" + file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" + glob-parent "^5.0.0" + globals "^12.1.0" ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.1.0" - js-yaml "^3.12.0" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.5" + lodash "^4.17.14" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" + optionator "^0.8.3" progress "^2.0.0" regexpp "^2.0.1" - require-uncached "^1.0.3" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.0.2" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" text-table "^0.2.0" + v8-compile-cache "^2.0.3" espree@^3.1.6: version "3.5.4" @@ -3767,14 +4048,14 @@ espree@^3.1.6: acorn "^5.5.0" acorn-jsx "^3.0.0" -espree@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.0.tgz#fc7f984b62b36a0f543b13fb9cd7b9f4a7f5b65c" - integrity sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA== +espree@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" + integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== dependencies: - acorn "^6.0.2" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" + acorn "^7.1.0" + acorn-jsx "^5.1.0" + eslint-visitor-keys "^1.1.0" esprima@^3.1.3: version "3.1.3" @@ -3801,15 +4082,20 @@ esrecurse@^4.1.0: estraverse "^4.1.0" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -esutils@^2.0.0, esutils@^2.0.2: +esutils@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -3823,15 +4109,15 @@ event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== eventsource@^1.0.7: version "1.0.7" @@ -3901,17 +4187,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.8.0.tgz#471f8ec256b7b6129ca2524b2a62f030df38718d" - integrity sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA== +expect@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" + integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" ansi-styles "^3.2.0" - jest-get-type "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-regex-util "^24.3.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.9.0" express@^4.16.3, express@^4.17.1: version "4.17.1" @@ -3969,7 +4255,7 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.0: +external-editor@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== @@ -4012,7 +4298,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4: +fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -4029,9 +4315,9 @@ faye-websocket@^0.10.0: websocket-driver ">=0.5.1" faye-websocket@~0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== dependencies: websocket-driver ">=0.5.1" @@ -4068,10 +4354,10 @@ figures@^1.3.5: escape-string-regexp "^1.0.5" object-assign "^4.1.0" -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== dependencies: escape-string-regexp "^1.0.5" @@ -4083,21 +4369,25 @@ file-entry-cache@^1.1.1: flat-cache "^1.2.1" object-assign "^4.0.1" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" + flat-cache "^2.0.1" -file-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" - integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== +file-loader@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e" + integrity sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ== dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" + loader-utils "^1.2.3" + schema-utils "^2.0.0" + +file-type@^10.5.0: + version "10.11.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-10.11.0.tgz#2961d09e4675b9fb9a3ee6b69e9cd23f43fd1890" + integrity sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw== filesize@^3.6.1: version "3.6.1" @@ -4114,6 +4404,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -4127,29 +4424,30 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" - integrity sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA== +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" - make-dir "^1.0.0" + make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" + integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.0" + pkg-dir "^4.1.0" + find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -4163,13 +4461,21 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -findup-sync@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +findup-sync@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== dependencies: detect-file "^1.0.0" - is-glob "^3.1.0" + is-glob "^4.0.0" micromatch "^3.0.4" resolve-dir "^1.0.1" @@ -4183,13 +4489,27 @@ flat-cache@^1.2.1: rimraf "~2.6.2" write "^0.2.1" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== + flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" + inherits "^2.0.3" + readable-stream "^2.3.6" follow-redirects@1.5.10: version "1.5.10" @@ -4199,34 +4519,22 @@ follow-redirects@1.5.10: debug "=3.1.0" follow-redirects@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.6.0.tgz#d12452c031e8c67eb6637d861bfc7a8090167933" - integrity sha512-4Oh4eI3S9OueVV41AgJ1oLjpaJUhbJ7JDGOMhe0AFqoSejl5Q2nn3eGglAzRUKVKZE8jG5MNn66TjCJMAnpsWA== + version "1.9.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" + integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== dependencies: - debug "=3.1.0" + debug "^3.0.0" font-awesome@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" integrity sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM= -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= - -for-in@^1.0.1, for-in@^1.0.2: +for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -4292,11 +4600,18 @@ fs-extra@^8.0.1: universalify "^0.1.0" fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: - minipass "^2.2.1" + minipass "^2.6.0" + +fs-minipass@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.0.tgz#a6415edab02fae4b9e9230bc87ee2e4472003cd1" + integrity sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A== + dependencies: + minipass "^3.0.0" fs-write-stream-atomic@^1.0.8: version "1.0.10" @@ -4321,6 +4636,11 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +fsevents@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.0.7.tgz#382c9b443c6cbac4c57187cdda23aa3bf1ccfc2a" + integrity sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ== + function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4335,11 +4655,26 @@ function.prototype.name@^1.1.0: function-bind "^1.1.1" is-callable "^1.1.3" +function.prototype.name@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.1.tgz#6d252350803085abc2ad423d4fe3be2f9cbda392" + integrity sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + functions-have-names "^1.1.1" + is-callable "^1.1.4" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.0.tgz#83da7583e4ea0c9ac5ff530f73394b033e0bf77d" + integrity sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -4378,6 +4713,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -4405,22 +4745,17 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.0, glob@~7.1.1: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== +glob-parent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" + integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + is-glob "^4.0.1" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4429,6 +4764,13 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -4449,15 +4791,26 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^11.7.0: - version "11.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" - integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg== +globals@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" + integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== + dependencies: + type-fest "^0.8.1" globals@^9.2.0: version "9.18.0" @@ -4475,6 +4828,18 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + globule@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" @@ -4491,35 +4856,45 @@ gonzales-pe-sl@^4.2.3: dependencies: minimist "1.1.x" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + +graceful-fs@^4.1.6: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= gzip-size@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" - integrity sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA== + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== dependencies: duplexer "^0.1.1" - pify "^3.0.0" + pify "^4.0.1" handle-thing@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== -handlebars@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.0.tgz#0d6a6f34ff1f63cecec8423aa4169827bf787c3a" - integrity sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w== +handlebars@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e" + integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw== dependencies: - async "^2.5.0" + neo-async "^2.6.0" optimist "^0.6.1" source-map "^0.6.1" optionalDependencies: @@ -4555,10 +4930,10 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-unicode@^2.0.0: version "2.0.1" @@ -4624,6 +4999,18 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== +history@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + history@^4.7.2: version "4.7.2" resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" @@ -4663,7 +5050,7 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" -hoopy@^0.1.2: +hoopy@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== @@ -4698,6 +5085,13 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== +html-element-map@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.0.1.tgz#3c4fcb4874ebddfe4283b51c8994e7713782b592" + integrity sha512-BZSfdEm6n706/lBfXKWa4frZRZcT5k1cOusw95ijZsHlI+GdgY0v95h6IzO3iIDf2ROwq570YTwqNPqHcNMozw== + dependencies: + array-filter "^1.0.0" + html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -4727,7 +5121,7 @@ http-deceiver@^1.2.7: resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= -http-errors@1.7.2, http-errors@~1.7.2: +http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== @@ -4748,17 +5142,28 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-link-header@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-1.0.2.tgz#bea50f02e1c7996021f1013b428c63f77e0f4e11" integrity sha512-z6YOZ8ZEnejkcCWlGZzYXNa6i+ZaTfiTg3WhlV/YvnNya3W/RbX1bMVUMTuCrg/DrtTCQxaFCkXCz4FtLpcebg== -http-parser-js@>=0.4.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" - integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= -http-proxy-middleware@^0.19.1: +http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== @@ -4769,11 +5174,11 @@ http-proxy-middleware@^0.19.1: micromatch "^3.1.10" http-proxy@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== + version "1.18.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== dependencies: - eventemitter3 "^3.0.0" + eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" @@ -4798,22 +5203,22 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.0.tgz#339dbbffb9f8729a243b701e1c29d4cc58c52f0e" - integrity sha512-3DEun4VOeMvSczifM3F2cKQrDQ5Pj6WKhkOq6HD4QTnDUAq8MQRxy5TX6Sy1iY6WPBe4gQ3p5vTECjbIkglkkQ== +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== dependencies: postcss "^7.0.14" +idb-keyval@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-3.2.0.tgz#cbbf354deb5684b6cdc84376294fc05932845bd6" + integrity sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ== + ieee754@^1.1.4: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== iferr@^0.1.5: version "0.1.5" @@ -4821,13 +5226,13 @@ iferr@^0.1.5: integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + version "3.0.2" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b" + integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw== dependencies: minimatch "^3.0.4" -ignore@^3.1.2: +ignore@^3.1.2, ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== @@ -4857,6 +5262,14 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" +import-fresh@^3.0.0, import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-from@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" @@ -4864,7 +5277,7 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" -import-local@^2.0.0: +import-local@2.0.0, import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== @@ -4885,15 +5298,20 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" @@ -4903,17 +5321,22 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -ini@^1.3.4, ini@~1.3.0: +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -4937,23 +5360,23 @@ inquirer@^0.12.0: strip-ansi "^3.0.0" through "^2.3.6" -inquirer@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52" - integrity sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg== +inquirer@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" + integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" + ansi-escapes "^4.2.1" + chalk "^2.4.2" + cli-cursor "^3.1.0" cli-width "^2.0.0" - external-editor "^3.0.0" - figures "^2.0.0" - lodash "^4.17.10" - mute-stream "0.0.7" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" run-async "^2.2.0" - rxjs "^6.1.0" - string-width "^2.1.0" - strip-ansi "^5.0.0" + rxjs "^6.4.0" + string-width "^4.1.0" + strip-ansi "^5.1.0" through "^2.3.6" internal-ip@^4.3.0: @@ -4964,7 +5387,7 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@^1.1.0: +interpret@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== @@ -4984,10 +5407,10 @@ intl-messageformat-parser@1.4.0: resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075" integrity sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU= -intl-messageformat-parser@^1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.6.5.tgz#40f5fc19855f203389a3fc926cc3c88d7a573496" - integrity sha512-hngOkdq6FZxT6iEpEqOzGO/8rshM/v+sShGBl6yv8SQmU6lCc4vtfBHNqpSC0Dxuq4tedMkYFQGnKy5b1Tx5GA== +intl-messageformat-parser@^1.7.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz#0eb14c5618333be4c95c409457b66c8c33ddcc01" + integrity sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg== intl-messageformat@^2.0.0, intl-messageformat@^2.1.0, intl-messageformat@^2.2.0: version "2.2.0" @@ -4996,13 +5419,18 @@ intl-messageformat@^2.0.0, intl-messageformat@^2.1.0, intl-messageformat@^2.2.0: dependencies: intl-messageformat-parser "1.4.0" -intl-relativeformat@^2.1.0, intl-relativeformat@^2.2.0: +intl-relativeformat@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz#6aca95d019ec8d30b6c5653b6629f9983ea5b6c5" integrity sha512-4bV/7kSKaPEmu6ArxXf9xjv1ny74Zkwuey8Pm01NH4zggPP7JHwg2STk8Y3JdspCKRDriwIyLRfEXnj2ZLr4Bw== dependencies: intl-messageformat "^2.0.0" +intl-relativeformat@^6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-6.4.3.tgz#cb5559e1e257cc2e763583502012a354bb777efe" + integrity sha512-VxZXZfhuX/zBVfxzE/J6kPUpsyWKYjqtZ3jVGZwr6wzK5BOLVpe1vSlwCQX56w5UjlpL63fS8Nxq0kgTyf1gJA== + intl@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/intl/-/intl-1.2.5.tgz#82244a2190c4e419f8371f5aa34daa3420e2abde" @@ -5030,16 +5458,26 @@ ip@^1.1.0, ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.0, ipaddr.js@^1.9.0: +ipaddr.js@1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== +ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -5054,6 +5492,11 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -5071,6 +5514,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" @@ -5188,6 +5638,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-fn@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" @@ -5200,10 +5655,10 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" @@ -5242,15 +5697,20 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= is-path-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.1.0.tgz#2e0c7e463ff5b7a0eb60852d851a6809347a124c" - integrity sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== is-path-in-cwd@^2.0.0: version "2.1.0" @@ -5266,7 +5726,12 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -5318,18 +5783,28 @@ is-svg@^3.0.0: html-comment-regex "^1.1.0" is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: - has-symbols "^1.0.0" + has-symbols "^1.0.1" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: +is-url@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26" + integrity sha1-SYkFpZO/R8wtnn9zg3K792lsfyY= + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -5417,73 +5892,73 @@ istanbul-lib-source-maps@^3.0.1: rimraf "^2.6.2" source-map "^0.6.1" -istanbul-reports@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.1.1.tgz#72ef16b4ecb9a4a7bd0e2001e00f95d1eec8afa9" - integrity sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw== +istanbul-reports@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" + integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== dependencies: - handlebars "^4.1.0" + handlebars "^4.1.2" -jest-changed-files@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.8.0.tgz#7e7eb21cf687587a85e50f3d249d1327e15b157b" - integrity sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug== +jest-changed-files@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" + integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" execa "^1.0.0" throat "^4.0.0" -jest-cli@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.8.0.tgz#b075ac914492ed114fa338ade7362a301693e989" - integrity sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA== +jest-cli@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" + integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== dependencies: - "@jest/core" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/core" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" exit "^0.1.2" import-local "^2.0.0" is-ci "^2.0.0" - jest-config "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" + jest-config "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" prompts "^2.0.1" realpath-native "^1.1.0" - yargs "^12.0.2" + yargs "^13.3.0" -jest-config@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.8.0.tgz#77db3d265a6f726294687cbbccc36f8a76ee0f4f" - integrity sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw== +jest-config@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" + integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.8.0" - "@jest/types" "^24.8.0" - babel-jest "^24.8.0" + "@jest/test-sequencer" "^24.9.0" + "@jest/types" "^24.9.0" + babel-jest "^24.9.0" chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^24.8.0" - jest-environment-node "^24.8.0" - jest-get-type "^24.8.0" - jest-jasmine2 "^24.8.0" + jest-environment-jsdom "^24.9.0" + jest-environment-node "^24.9.0" + jest-get-type "^24.9.0" + jest-jasmine2 "^24.9.0" jest-regex-util "^24.3.0" - jest-resolve "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" + jest-resolve "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" micromatch "^3.1.10" - pretty-format "^24.8.0" + pretty-format "^24.9.0" realpath-native "^1.1.0" -jest-diff@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.8.0.tgz#146435e7d1e3ffdf293d53ff97e193f1d1546172" - integrity sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g== +jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== dependencies: chalk "^2.0.1" - diff-sequences "^24.3.0" - jest-get-type "^24.8.0" - pretty-format "^24.8.0" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" jest-docblock@^24.3.0: version "24.3.0" @@ -5492,123 +5967,124 @@ jest-docblock@^24.3.0: dependencies: detect-newline "^2.1.0" -jest-each@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.8.0.tgz#a05fd2bf94ddc0b1da66c6d13ec2457f35e52775" - integrity sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA== +jest-each@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" + integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" - jest-get-type "^24.8.0" - jest-util "^24.8.0" - pretty-format "^24.8.0" - -jest-environment-jsdom@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz#300f6949a146cabe1c9357ad9e9ecf9f43f38857" - integrity sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ== - dependencies: - "@jest/environment" "^24.8.0" - "@jest/fake-timers" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - jest-util "^24.8.0" + jest-get-type "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + +jest-environment-jsdom@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" + integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" jsdom "^11.5.1" -jest-environment-node@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.8.0.tgz#d3f726ba8bc53087a60e7a84ca08883a4c892231" - integrity sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q== +jest-environment-node@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" + integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== dependencies: - "@jest/environment" "^24.8.0" - "@jest/fake-timers" "^24.8.0" - "@jest/types" "^24.8.0" - jest-mock "^24.8.0" - jest-util "^24.8.0" + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" -jest-get-type@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.8.0.tgz#a7440de30b651f5a70ea3ed7ff073a32dfe646fc" - integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ== +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== -jest-haste-map@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.0.tgz#51794182d877b3ddfd6e6d23920e3fe72f305800" - integrity sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ== +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" anymatch "^2.0.0" fb-watchman "^2.0.0" graceful-fs "^4.1.15" invariant "^2.2.4" - jest-serializer "^24.4.0" - jest-util "^24.8.0" - jest-worker "^24.6.0" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" micromatch "^3.1.10" sane "^4.0.3" walker "^1.0.7" optionalDependencies: fsevents "^1.2.7" -jest-jasmine2@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz#a9c7e14c83dd77d8b15e820549ce8987cc8cd898" - integrity sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong== +jest-jasmine2@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" + integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" co "^4.6.0" - expect "^24.8.0" + expect "^24.9.0" is-generator-fn "^2.0.0" - jest-each "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-runtime "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - pretty-format "^24.8.0" + jest-each "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" throat "^4.0.0" -jest-leak-detector@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz#c0086384e1f650c2d8348095df769f29b48e6980" - integrity sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g== +jest-leak-detector@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" + integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== dependencies: - pretty-format "^24.8.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" -jest-matcher-utils@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz#2bce42204c9af12bde46f83dc839efe8be832495" - integrity sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw== +jest-matcher-utils@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== dependencies: chalk "^2.0.1" - jest-diff "^24.8.0" - jest-get-type "^24.8.0" - pretty-format "^24.8.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" -jest-message-util@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b" - integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g== +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" "@types/stack-utils" "^1.0.1" chalk "^2.0.1" micromatch "^3.1.10" slash "^2.0.0" stack-utils "^1.0.1" -jest-mock@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56" - integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A== +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" jest-pnp-resolver@^1.2.1: version "1.2.1" @@ -5620,113 +6096,119 @@ jest-regex-util@^24.3.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== -jest-resolve-dependencies@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz#19eec3241f2045d3f990dba331d0d7526acff8e0" - integrity sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw== +jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== + +jest-resolve-dependencies@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" + integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" jest-regex-util "^24.3.0" - jest-snapshot "^24.8.0" + jest-snapshot "^24.9.0" -jest-resolve@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.8.0.tgz#84b8e5408c1f6a11539793e2b5feb1b6e722439f" - integrity sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw== +jest-resolve@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" + integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" browser-resolve "^1.11.3" chalk "^2.0.1" jest-pnp-resolver "^1.2.1" realpath-native "^1.1.0" -jest-runner@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.8.0.tgz#4f9ae07b767db27b740d7deffad0cf67ccb4c5bb" - integrity sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow== +jest-runner@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" + integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== dependencies: "@jest/console" "^24.7.1" - "@jest/environment" "^24.8.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.4.2" exit "^0.1.2" graceful-fs "^4.1.15" - jest-config "^24.8.0" + jest-config "^24.9.0" jest-docblock "^24.3.0" - jest-haste-map "^24.8.0" - jest-jasmine2 "^24.8.0" - jest-leak-detector "^24.8.0" - jest-message-util "^24.8.0" - jest-resolve "^24.8.0" - jest-runtime "^24.8.0" - jest-util "^24.8.0" + jest-haste-map "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-leak-detector "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" jest-worker "^24.6.0" source-map-support "^0.5.6" throat "^4.0.0" -jest-runtime@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.8.0.tgz#05f94d5b05c21f6dc54e427cd2e4980923350620" - integrity sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA== +jest-runtime@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" + integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== dependencies: "@jest/console" "^24.7.1" - "@jest/environment" "^24.8.0" + "@jest/environment" "^24.9.0" "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/yargs" "^12.0.2" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" chalk "^2.0.1" exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.1.15" - jest-config "^24.8.0" - jest-haste-map "^24.8.0" - jest-message-util "^24.8.0" - jest-mock "^24.8.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" jest-regex-util "^24.3.0" - jest-resolve "^24.8.0" - jest-snapshot "^24.8.0" - jest-util "^24.8.0" - jest-validate "^24.8.0" + jest-resolve "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" realpath-native "^1.1.0" slash "^2.0.0" strip-bom "^3.0.0" - yargs "^12.0.2" + yargs "^13.3.0" -jest-serializer@^24.4.0: - version "24.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" - integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== +jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== -jest-snapshot@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.8.0.tgz#3bec6a59da2ff7bc7d097a853fb67f9d415cb7c6" - integrity sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg== +jest-snapshot@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" + integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" - expect "^24.8.0" - jest-diff "^24.8.0" - jest-matcher-utils "^24.8.0" - jest-message-util "^24.8.0" - jest-resolve "^24.8.0" + expect "^24.9.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^24.8.0" - semver "^5.5.0" - -jest-util@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1" - integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA== - dependencies: - "@jest/console" "^24.7.1" - "@jest/fake-timers" "^24.8.0" - "@jest/source-map" "^24.3.0" - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" + pretty-format "^24.9.0" + semver "^6.2.0" + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" callsites "^3.0.0" chalk "^2.0.1" graceful-fs "^4.1.15" @@ -5735,46 +6217,46 @@ jest-util@^24.8.0: slash "^2.0.0" source-map "^0.6.0" -jest-validate@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.8.0.tgz#624c41533e6dfe356ffadc6e2423a35c2d3b4849" - integrity sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA== +jest-validate@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== dependencies: - "@jest/types" "^24.8.0" - camelcase "^5.0.0" + "@jest/types" "^24.9.0" + camelcase "^5.3.1" chalk "^2.0.1" - jest-get-type "^24.8.0" - leven "^2.1.0" - pretty-format "^24.8.0" - -jest-watcher@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.8.0.tgz#58d49915ceddd2de85e238f6213cef1c93715de4" - integrity sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw== - dependencies: - "@jest/test-result" "^24.8.0" - "@jest/types" "^24.8.0" - "@types/yargs" "^12.0.9" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-watcher@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" + integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== + dependencies: + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" ansi-escapes "^3.0.0" chalk "^2.0.1" - jest-util "^24.8.0" + jest-util "^24.9.0" string-length "^2.0.0" -jest-worker@^24.6.0: - version "24.6.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" - integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== +jest-worker@^24.6.0, jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== dependencies: - merge-stream "^1.0.1" + merge-stream "^2.0.0" supports-color "^6.1.0" -jest@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.8.0.tgz#d5dff1984d0d1002196e9b7f12f75af1b2809081" - integrity sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg== +jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" + integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== dependencies: import-local "^2.0.0" - jest-cli "^24.8.0" + jest-cli "^24.9.0" js-base64@^2.1.9: version "2.5.0" @@ -5884,9 +6366,9 @@ json-stringify-safe@~5.0.1: integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== json5@^0.5.0: version "0.5.1" @@ -5941,12 +6423,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= +jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" + integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== dependencies: array-includes "^3.0.3" + object.assign "^4.1.0" keycode@^2.1.7: version "2.2.0" @@ -6009,10 +6492,10 @@ left-pad@^1.3.0: resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.3.0, levn@~0.3.0: version "0.3.0" @@ -6022,6 +6505,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -6042,10 +6530,10 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-runner@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979" - integrity sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw== +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== loader-utils@0.2.x: version "0.2.17" @@ -6057,7 +6545,7 @@ loader-utils@0.2.x: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -6082,6 +6570,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash.capitalize@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" @@ -6142,25 +6637,20 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.tail@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" - integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ= - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.7.11, lodash@~4.17.10: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.3.0, lodash@~4.17.10: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -loglevel@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.2.tgz#668c77948a03dbd22502a3513ace1f62a80cc372" - integrity sha512-Jt2MHrCNdtIe1W6co3tF5KXGRkzF+TYffiQstfXa04mrss9IKXzAAXYWak8LbZseAQY03sH2GzMCMU0ZOUc9bg== +loglevel@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56" + integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -6176,13 +6666,28 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -make-dir@^1.0.0, make-dir@^1.3.0: +make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== + dependencies: + semver "^6.0.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -6244,20 +6749,20 @@ media-typer@0.3.0: integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= mem@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" - integrity sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== dependencies: map-age-cleaner "^0.1.1" - mimic-fn "^1.0.0" - p-is-promise "^1.1.0" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" memoize-one@^5.0.0: version "5.0.4" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.0.4.tgz#005928aced5c43d890a4dfab18ca908b0ec92cbc" integrity sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA== -memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: +memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -6270,12 +6775,10 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= - dependencies: - readable-stream "^2.0.1" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge@^1.2.0: version "1.2.1" @@ -6287,7 +6790,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -6314,24 +6817,29 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0, "mime-db@>= 1.40.0 < 2": +mime-db@1.40.0: version "1.40.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== +"mime-db@>= 1.40.0 < 2": + version "1.42.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" + integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== + mime-db@~1.37.0: version "1.37.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19: +mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.21" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg== dependencies: mime-db "~1.37.0" -mime-types@~2.1.24: +mime-types@~2.1.17, mime-types@~2.1.24: version "2.1.24" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== @@ -6343,22 +6851,23 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.3.tgz#229687331e86f68924e6cb59e1cdd937f18275fe" - integrity sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw== +mime@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz#ac0059b02b9692515a637115b0cc9fed3a35c7b0" - integrity sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw== +mini-css-extract-plugin@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" + integrity sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw== dependencies: loader-utils "^1.1.0" + normalize-url "1.9.1" schema-utils "^1.0.0" webpack-sources "^1.1.0" @@ -6399,20 +6908,48 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.1, minipass@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" + integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== + dependencies: + minipass "^3.0.0" + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== dependencies: - minipass "^2.2.1" + yallist "^4.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" mississippi@^3.0.0: version "3.0.0" @@ -6431,22 +6968,14 @@ mississippi@^3.0.0: through2 "^2.0.0" mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - -mkdirp@0.5.x, mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -6480,11 +7009,16 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1, ms@^2.1.1: +ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -6503,10 +7037,10 @@ mute-stream@0.0.5: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA= -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: version "2.14.0" @@ -6547,11 +7081,11 @@ nearley@^2.7.10: semver "^5.4.1" needle@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== dependencies: - debug "^2.1.2" + debug "^3.2.6" iconv-lite "^0.4.4" sax "^1.2.4" @@ -6560,12 +7094,12 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" - integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== -next-tick@1, next-tick@^1.0.0: +next-tick@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= @@ -6583,20 +7117,20 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" - integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - integrity sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg== +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -6605,10 +7139,10 @@ node-libs-browser@^2.0.0: constants-browserify "^1.0.0" crypto-browserify "^3.11.0" domain-browser "^1.1.1" - events "^1.0.0" + events "^3.0.0" https-browserify "^1.0.0" os-browserify "^0.3.0" - path-browserify "0.0.0" + path-browserify "0.0.1" process "^0.11.10" punycode "^1.2.4" querystring-es3 "^0.2.0" @@ -6619,20 +7153,21 @@ node-libs-browser@^2.0.0: timers-browserify "^2.0.4" tty-browserify "0.0.0" url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" + util "^0.11.0" + vm-browserify "^1.0.1" node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^5.2.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.3.0.tgz#c77a4a7b84038733d5fb351aafd8a268bfe19a01" - integrity sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q== +node-notifier@^5.4.2: + version "5.4.3" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== dependencies: growly "^1.3.0" + is-wsl "^1.1.0" semver "^5.5.0" shellwords "^0.1.1" which "^1.3.0" @@ -6653,12 +7188,12 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.21: - version "1.1.22" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.22.tgz#d90cd5adc59ab9b0f377d4f532b09656399c88bf" - integrity sha512-O6XpteBuntW1j86mw6LlovBIwTe+sO2+7vi9avQffNeIW4upgnaCVm6xrBWH+KATz7mNNRNNeEpuWB7dT6Cr3w== +node-releases@^1.1.41: + version "1.1.41" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.41.tgz#57674a82a37f812d18e3b26118aefaf53a00afed" + integrity sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg== dependencies: - semver "^5.3.0" + semver "^6.3.0" nopt@^4.0.1: version "4.0.1" @@ -6668,13 +7203,6 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - normalize-package-data@^2.3.2: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" @@ -6702,20 +7230,30 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== npm-bundled@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" - integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== npm-packlist@^1.1.6: - version "1.1.12" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" - integrity sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g== + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -6788,20 +7326,20 @@ object-fit-images@^3.2.3: resolved "https://registry.yarnpkg.com/object-fit-images/-/object-fit-images-3.2.4.tgz#6c299d38fdf207746e5d2d46c2877f6f25d15b52" integrity sha512-G+7LzpYfTfqUyrZlfrou/PLLLAPNC52FTy5y1CBywX+1/FkxIloOyQXBmZ3Zxa2AWO+lMF0JTuvqbr7G5e5CWg== -object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== +object-inspect@^1.6.0, object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" @@ -6820,7 +7358,7 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.entries@^1.0.4: +object.entries@^1.0.4, object.entries@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== @@ -6830,15 +7368,15 @@ object.entries@^1.0.4: function-bind "^1.1.1" has "^1.0.3" -object.fromentries@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" - integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== +object.fromentries@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704" + integrity sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA== dependencies: - define-properties "^1.1.2" - es-abstract "^1.11.0" + define-properties "^1.1.3" + es-abstract "^1.15.0" function-bind "^1.1.1" - has "^1.0.1" + has "^1.0.3" object.getownpropertydescriptors@^2.0.3: version "2.0.3" @@ -6905,12 +7443,17 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: - mimic-fn "^1.0.0" + mimic-fn "^2.1.0" + +opencollective-postinstall@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" + integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== opener@^1.5.1: version "1.5.1" @@ -6932,17 +7475,17 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= +optionator@^0.8.1, optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" - fast-levenshtein "~2.0.4" + fast-levenshtein "~2.0.6" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" - wordwrap "~1.0.0" + word-wrap "~1.2.3" original@^1.0.0: version "1.0.2" @@ -6961,7 +7504,7 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^3.0.0: +os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== @@ -7000,10 +7543,10 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== p-limit@^1.1.0: version "1.3.0" @@ -7012,10 +7555,10 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.1.0.tgz#1d5a0d20fb12707c758a655f6bbc4386b5930d68" - integrity sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g== +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== dependencies: p-try "^2.0.0" @@ -7033,25 +7576,46 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== packet-reader@0.3.1: version "0.3.1" @@ -7059,29 +7623,37 @@ packet-reader@0.3.1: integrity sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc= pako@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.7.tgz#2473439021b57f1516c82f58be7275ad8ef1bb27" - integrity sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ== + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: - cyclist "~0.2.2" + cyclist "^1.0.1" inherits "^2.0.3" readable-stream "^2.1.5" +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - integrity sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw== + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" parse-css-font@^2.0.2: version "2.0.2" @@ -7113,6 +7685,16 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -7140,10 +7722,10 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-complete-extname@^1.0.0: version "1.0.0" @@ -7155,18 +7737,16 @@ path-dirname@^1.0.0: resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -7182,6 +7762,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" + integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -7213,6 +7798,11 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -7284,6 +7874,11 @@ pgpass@1.*: dependencies: split "^1.0.0" +picomatch@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" + integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -7318,12 +7913,12 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: - find-up "^1.0.0" + find-up "^2.1.0" pkg-dir@^3.0.0: version "3.0.0" @@ -7332,29 +7927,31 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU= -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== - pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -portfinder@^1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" - integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw== +portfinder@^1.0.25: + version "1.0.25" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" + integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" posix-character-classes@^0.1.0: version "0.1.1" @@ -7505,14 +8102,15 @@ postcss-modules-extract-imports@^2.0.0: dependencies: postcss "^7.0.5" -postcss-modules-local-by-default@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63" - integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA== +postcss-modules-local-by-default@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" + integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - postcss-value-parser "^3.3.1" + icss-utils "^4.1.1" + postcss "^7.0.16" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.0" postcss-modules-scope@^2.1.0: version "2.1.0" @@ -7522,12 +8120,12 @@ postcss-modules-scope@^2.1.0: postcss "^7.0.6" postcss-selector-parser "^6.0.0" -postcss-modules-values@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" - integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w== +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== dependencies: - icss-replace-symbols "^1.1.0" + icss-utils "^4.0.0" postcss "^7.0.6" postcss-normalize-charset@^4.0.1: @@ -7667,7 +8265,7 @@ postcss-selector-parser@^5.0.0-rc.4: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0: +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== @@ -7695,11 +8293,16 @@ postcss-unique-selectors@^4.0.1: postcss "^7.0.0" uniqs "^2.0.0" -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: +postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" + integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== + postcss@^5.0.16: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" @@ -7710,10 +8313,10 @@ postcss@^5.0.16: source-map "^0.5.6" supports-color "^3.2.3" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" - integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.23.tgz#9f9759fad661b15964f3cfc3140f66f1e05eadc1" + integrity sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -7741,22 +8344,22 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" -precond@0.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" - integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= - prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -pretty-format@^24.8.0: - version "24.8.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.8.0.tgz#8dae7044f58db7cb8be245383b565a963e3c27f2" - integrity sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw== +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== dependencies: - "@jest/types" "^24.8.0" + "@jest/types" "^24.9.0" ansi-regex "^4.0.0" ansi-styles "^3.2.0" react-is "^16.8.4" @@ -7767,9 +8370,9 @@ private@^0.1.6: integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process@^0.11.10: version "0.11.10" @@ -7806,6 +8409,15 @@ prompts@^2.0.1: kleur "^3.0.2" sisteransi "^1.0.0" +prop-types-exact@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" + integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== + dependencies: + has "^1.0.3" + object.assign "^4.1.0" + reflect.ownkeys "^0.2.0" + prop-types-extra@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.0.tgz#32609910ea2dcf190366bacd3490d5a6412a605f" @@ -7908,6 +8520,14 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -7918,10 +8538,10 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef" - integrity sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg== +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== quote@^0.4.0: version "0.4.0" @@ -7940,10 +8560,10 @@ railroad-diagrams@^1.0.0: resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= -rails-ujs@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/rails-ujs/-/rails-ujs-5.2.3.tgz#4b65ea781a6befe62e96da6362165286a1fe4099" - integrity sha512-rYgj185MowWFBJI1wdac2FkX4yFYe4+3jJPlB+CTY7a4rmIyg0TqE4vYZmSBBesp7blPUa57oqKzwQjN7eVbEQ== +rails-ujs@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/rails-ujs/-/rails-ujs-5.2.4.tgz#31056ccd62d868f7d044395f31d77a4440550ceb" + integrity sha512-Mzu6bnTBKn4IuJvP7BDJRy4lzvR1zMWVDeTdPwDubXBfxpFEKqwOi5Nb6tfE2SYtTd+bb3PRETf40I94jgKw3w== randexp@0.4.6: version "0.4.6" @@ -7954,9 +8574,9 @@ randexp@0.4.6: ret "~0.1.10" randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - integrity sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" @@ -7993,15 +8613,15 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f" - integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA== +react-dom@^16.12.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" + integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.6" + scheduler "^0.18.0" react-event-listener@^0.6.0: version "0.6.5" @@ -8042,10 +8662,10 @@ react-infinite-scroller@^1.0.12: dependencies: prop-types "^15.5.8" -react-input-autosize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8" - integrity sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA== +react-input-autosize@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2" + integrity sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw== dependencies: prop-types "^15.5.8" @@ -8070,10 +8690,15 @@ react-intl@^2.9.0: intl-relativeformat "^2.1.0" invariant "^2.1.1" -react-is@^16.3.2, react-is@^16.6.1, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.2, react-is@^16.8.4, react-is@^16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== +react-is@^16.10.2, react-is@^16.3.2, react-is@^16.7.0, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0: + version "16.11.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa" + integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw== + +react-is@^16.8.1: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" + integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: version "3.0.4" @@ -8098,23 +8723,23 @@ react-motion@^0.5.2: prop-types "^15.5.8" raf "^3.1.0" -react-notification@^6.8.4: - version "6.8.4" - resolved "https://registry.yarnpkg.com/react-notification/-/react-notification-6.8.4.tgz#c189d23f47b0e1b240932f4cfab2f4082cd420bf" - integrity sha512-El4aaIYeXNpL2M96t4+qg3ODgvAhvpORRCXhseukYlR0X8Efiak9ixGmxgm/Bm5Z43kRdFzpgHlh0uM242IFxA== +react-notification@^6.8.5: + version "6.8.5" + resolved "https://registry.yarnpkg.com/react-notification/-/react-notification-6.8.5.tgz#7ea90a633bb2a280d899e30c93cf372265cce4f0" + integrity sha512-3pJPhSsWNYizpyeMeWuC+jVthqE9WKqQ6rHq2naiiP4fLGN4irwL2Xp2Q8Qn7agW/e4BIDxarab6fJOUp1cKUw== dependencies: prop-types "^15.6.2" -react-overlays@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.8.3.tgz#fad65eea5b24301cca192a169f5dddb0b20d3ac5" - integrity sha512-h6GT3jgy90PgctleP39Yu3eK1v9vaJAW73GOA/UbN9dJ7aAN4BTZD6793eI1D5U+ukMk17qiqN/wl3diK1Z5LA== +react-overlays@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.9.1.tgz#d4702bfe5b5e9335b676ff5a940253771fdeed12" + integrity sha512-b0asy/zHtRd0i2+2/uNxe3YVprF3bRT1guyr791DORjCzE/HSBMog+ul83CdtKQ1kZ+pLnxWCu5W3BMysFhHdQ== dependencies: classnames "^2.2.5" dom-helpers "^3.2.1" prop-types "^15.5.10" prop-types-extra "^1.0.1" - react-transition-group "^2.2.0" + react-transition-group "^2.2.1" warning "^3.0.0" react-redux-loading-bar@^4.0.8: @@ -8125,17 +8750,17 @@ react-redux-loading-bar@^4.0.8: prop-types "^15.6.2" react-lifecycles-compat "^3.0.2" -react-redux@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-6.0.1.tgz#0d423e2c1cb10ada87293d47e7de7c329623ba4d" - integrity sha512-T52I52Kxhbqy/6TEfBv85rQSDz6+Y28V/pf52vDWs1YRXG19mcFOGfHnY2HsNFHyhP+ST34Aih98fvt6tqwVcQ== +react-redux@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.1.1.tgz#ce6eee1b734a7a76e0788b3309bf78ff6b34fa0a" + integrity sha512-QsW0vcmVVdNQzEkrgzh2W3Ksvr8cqpAv5FhEk7tNEft+5pp7rXxAudTz3VOPawRkLIepItpkEIyLcN/VVXzjTg== dependencies: - "@babel/runtime" "^7.3.1" + "@babel/runtime" "^7.5.5" hoist-non-react-statics "^3.3.0" invariant "^2.2.4" loose-envify "^1.4.0" prop-types "^15.7.2" - react-is "^16.8.2" + react-is "^16.9.0" react-router-dom@^4.1.1: version "4.3.1" @@ -8170,17 +8795,18 @@ react-router@^4.3.1: prop-types "^15.6.1" warning "^4.0.1" -react-select@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-2.4.4.tgz#ba72468ef1060c7d46fbb862b0748f96491f1f73" - integrity sha512-C4QPLgy9h42J/KkdrpVxNmkY6p4lb49fsrbDk/hRcZpX7JvZPNb6mGj+c5SzyEtBv1DmQ9oPH4NmhAFvCrg8Jw== +react-select@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.0.8.tgz#06ff764e29db843bcec439ef13e196865242e0c1" + integrity sha512-v9LpOhckLlRmXN5A6/mGGEft4FMrfaBFTGAnuPHcUgVId7Je42kTq9y0Z+Ye5z8/j0XDT3zUqza8gaRaI1PZIg== dependencies: - classnames "^2.2.5" - emotion "^9.1.2" + "@babel/runtime" "^7.4.4" + "@emotion/cache" "^10.0.9" + "@emotion/core" "^10.0.9" + "@emotion/css" "^10.0.9" memoize-one "^5.0.0" prop-types "^15.6.0" - raf "^3.4.0" - react-input-autosize "^2.2.1" + react-input-autosize "^2.2.2" react-transition-group "^2.2.1" react-sparklines@^1.7.0: @@ -8222,42 +8848,32 @@ react-swipeable-views@^0.13.3: react-swipeable-views-utils "^0.13.3" warning "^4.0.1" -react-test-renderer@^16.0.0-0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.7.0.tgz#1ca96c2b450ab47c36ba92cd8c03fcefc52ea01c" - integrity sha512-tFbhSjknSQ6+ttzmuGdv+SjQfmvGcq3PFKyPItohwhhOBmRoTf1We3Mlt3rJtIn85mjPXOkKV+TaKK4irvk9Yg== - dependencies: - object-assign "^4.1.1" - prop-types "^15.6.2" - react-is "^16.7.0" - scheduler "^0.12.0" - -react-test-renderer@^16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.6.tgz#188d8029b8c39c786f998aa3efd3ffe7642d5ba1" - integrity sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw== +react-test-renderer@^16.0.0-0, react-test-renderer@^16.11.0: + version "16.11.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.11.0.tgz#72574566496462c808ac449b0287a4c0a1a7d8f8" + integrity sha512-nh9gDl8R4ut+ZNNb2EeKO5VMvTKxwzurbSMuGBoKtjpjbg8JK/u3eVPVNi1h1Ue+eYK9oSzJjb+K3lzLxyA4ag== dependencies: object-assign "^4.1.1" prop-types "^15.6.2" react-is "^16.8.6" - scheduler "^0.13.6" + scheduler "^0.17.0" -react-textarea-autosize@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.0.tgz#3132cb77e65d94417558d37c0bfe415a5afd3445" - integrity sha512-c2FlR/fP0qbxmlrW96SdrbgP/v0XZMTupqB90zybvmDVDutytUgPl7beU35klwcTeMepUIQEpQUn3P3bdshGPg== +react-textarea-autosize@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.2.tgz#70fdb333ef86bcca72717e25e623e90c336e2cda" + integrity sha512-uH3ORCsCa3C6LHxExExhF4jHoXYCQwE5oECmrRsunlspaDAbS4mGKNlWZqjLfInWtFQcf0o1n1jC/NGXFdUBCg== dependencies: "@babel/runtime" "^7.1.2" prop-types "^15.6.0" -react-toggle@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.0.2.tgz#77f487860efb87fafd197672a2db8c885be1440f" - integrity sha512-EPTWnN7gQHgEAUEmjheanZXNzY5TPnQeyyHfEs3YshaiWZf5WNjfYDrglO5F1Hl/dNveX18i4l0grTEsYH2Ccw== +react-toggle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.1.tgz#2317f67bf918ea3508a96b09dd383efd9da572af" + integrity sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw== dependencies: classnames "^2.2.5" -react-transition-group@^2.2.0, react-transition-group@^2.2.1: +react-transition-group@^2.2.1: version "2.5.2" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.5.2.tgz#9457166a9ba6ce697a3e1b076b3c049b9fb2c408" integrity sha512-vwHP++S+f6KL7rg8V1mfs62+MBKtbMeZDR8KiNmD7v98Gs3UPGsDZDahPJH2PVprFW5YHJfh6cbNim3zPndaSQ== @@ -8267,15 +8883,14 @@ react-transition-group@^2.2.0, react-transition-group@^2.2.1: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" -react@^16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" - integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw== +react@^16.10.2: + version "16.10.2" + resolved "https://registry.yarnpkg.com/react/-/react-16.10.2.tgz#a5ede5cdd5c536f745173c8da47bda64797a4cf0" + integrity sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.6" read-pkg-up@^2.0.0: version "2.0.0" @@ -8311,7 +8926,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -8325,9 +8940,9 @@ read-pkg@^3.0.0: util-deprecate "~1.0.1" readable-stream@^3.0.6: - version "3.1.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06" - integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA== + version "3.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -8342,6 +8957,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.1.1.tgz#b158123ac343c8b0f31d65680269cc0fc1025db1" + integrity sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ== + dependencies: + picomatch "^2.0.4" + readline2@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" @@ -8387,15 +9009,20 @@ redux-thunk@^2.2.0: resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== -redux@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5" - integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg== +redux@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.4.tgz#4ee1aeb164b63d6a1bcc57ae4aa0b6e6fa7a3796" + integrity sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q== dependencies: loose-envify "^1.4.0" symbol-observable "^1.2.0" -regenerate-unicode-properties@^8.0.2: +reflect.ownkeys@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" + integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= + +regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== @@ -8437,23 +9064,25 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.6: - version "0.1.10" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" - integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== +regexp.prototype.flags@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" + integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== + dependencies: + define-properties "^1.1.2" regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpu-core@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" - integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.0.2" + regenerate-unicode-properties "^8.1.0" regjsgen "^0.5.0" regjsparser "^0.6.0" unicode-match-property-ecmascript "^1.0.4" @@ -8471,10 +9100,10 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" -rellax@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/rellax/-/rellax-1.7.1.tgz#2f82aaa1c1d8116eef08fc533c59655a097c8be2" - integrity sha512-z31r9RjKeK5wJU5C6hKBupreKQ7xi+lQHda6ttlc0N1VEyL2ZCPMyckTtvliGRsxqTPqhdCasdhexs8N5aZ4+A== +rellax@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/rellax/-/rellax-1.10.0.tgz#0308b813b458f9175d37ffb4272e1f616eab1341" + integrity sha512-BtxD9b8cAQcTs6iat1fqKvHMjIZ8CaxjsC5U/cIIVHC4LjkIsr0ZmeqxUm5ZvBvyjLwfPbU8Wcryp77sR5C8QA== remove-trailing-separator@^1.0.1: version "1.1.0" @@ -8553,12 +9182,17 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + require-package-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= -require-uncached@^1.0.2, require-uncached@^1.0.3: +require-uncached@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= @@ -8601,11 +9235,21 @@ resolve-from@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve-pathname@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg== +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -8616,17 +9260,10 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.10.0, resolve@^1.3.2: - version "1.11.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" - integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== - dependencies: - path-parse "^1.0.6" - -resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1, resolve@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" - integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ== +resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" + integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== dependencies: path-parse "^1.0.6" @@ -8638,12 +9275,12 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: - onetime "^2.0.0" + onetime "^5.1.0" signal-exit "^3.0.2" ret@~0.1.10: @@ -8651,6 +9288,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" @@ -8661,13 +9303,27 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: +rimraf@2.6.3, rimraf@^2.6.2, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" + integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -8715,18 +9371,23 @@ rx-lite@^3.1.2: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI= -rxjs@^6.1.0: - version "6.3.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" - integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw== +rxjs@^6.4.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" + integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== dependencies: tslib "^1.9.0" -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -8774,42 +9435,41 @@ sass-lint@^1.13.1: path-is-absolute "^1.0.0" util "^0.10.3" -sass-loader@^7.0.3: - version "7.1.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.1.0.tgz#16fd5138cb8b424bf8a759528a1972d72aad069d" - integrity sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w== +sass-loader@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.0.tgz#e7b07a3e357f965e6b03dd45b016b0a9746af797" + integrity sha512-+qeMu563PN7rPdit2+n5uuYVR0SSVwm0JsOUsaJXzgYcClWSlmX0iHDnmeOobPkf5kUglVot3QS6SyLyaQoJ4w== dependencies: - clone-deep "^2.0.1" - loader-utils "^1.0.1" - lodash.tail "^4.1.1" - neo-async "^2.5.0" - pify "^3.0.0" - semver "^5.5.0" + clone-deep "^4.0.1" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.1.0" + semver "^6.3.0" -sass@^1.20.3: - version "1.20.3" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.20.3.tgz#18284a7bac6eab9cbb80453288473194f29efb84" - integrity sha512-kvf+w5XT7FrmFrCKz1gPHqegufG+gxifC8oQesX/s8gkShdeiTqiuvP0c8TvfBwMAuI1YGOgobZQ2KIJGn//jA== +sass@^1.23.3: + version "1.23.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.23.3.tgz#f07503b9e8d2bcf06ef69e8beea5d085589b1620" + integrity sha512-1DKRZxJMOh4Bme16AbWTyYeJAjTlrvw2+fWshHHaepeJfGq2soFZTnt0YhWit+bohtDu4LdyPoEj6VFD4APHog== dependencies: - chokidar "^2.0.0" + chokidar ">=2.0.0 <4.0.0" sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.12.0.tgz#8ab17699939c0aedc5a196a657743c496538647b" - integrity sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw== +scheduler@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe" + integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" -scheduler@^0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" - integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== +scheduler@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" + integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -8823,6 +9483,14 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +schema-utils@^2.0.0, schema-utils@^2.1.0, schema-utils@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.5.0.tgz#8f254f618d402cc80257486213c8970edfd7c22f" + integrity sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ== + dependencies: + ajv "^6.10.2" + ajv-keywords "^3.4.1" + scroll-behavior@^0.9.1: version "0.9.9" resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.9.tgz#ebfe0658455b82ad885b66195215416674dacce2" @@ -8836,32 +9504,27 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" - integrity sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw== +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== dependencies: - node-forge "0.7.5" + node-forge "0.9.0" -"semver@2 || 3 || 4 || 5", semver@^5.5.1, semver@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7" integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c= -semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -semver@^6.1.0, semver@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" - integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== +semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== send@0.17.1: version "0.17.1" @@ -8882,15 +9545,15 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^1.4.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" - integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== +serialize-javascript@^1.4.0, serialize-javascript@^1.7.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" + integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== -serialize-javascript@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" - integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== +serialize-javascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.0.tgz#9310276819efd0eb128258bb341957f6eb2fc570" + integrity sha512-a/mxFfU00QT88umAJQsNWOnUKckhNCqOl028N48e7wFmo2/EHpTo9Wso+iJJCMrQnmFvcjto5RJdAHEvVhcyUQ== serve-index@^1.9.1: version "1.9.1" @@ -8920,20 +9583,10 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -8963,14 +9616,12 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" - integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA== +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - is-extendable "^0.1.1" - kind-of "^5.0.0" - mixin-object "^2.0.1" + kind-of "^6.0.2" shebang-command@^1.2.0: version "1.2.0" @@ -8979,11 +9630,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shelljs@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" @@ -9026,10 +9689,10 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= -slice-ansi@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7" - integrity sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== dependencies: ansi-styles "^3.2.0" astral-regex "^1.0.0" @@ -9065,10 +9728,10 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sockjs-client@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" - integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg== +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== dependencies: debug "^3.2.5" eventsource "^1.0.7" @@ -9085,6 +9748,13 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -9101,7 +9771,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6, source-map-support@~0.5.6: +source-map-support@^0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== @@ -9109,10 +9779,10 @@ source-map-support@^0.5.6, source-map-support@~0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.10: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== +source-map-support@~0.5.12: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -9132,11 +9802,6 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -9175,10 +9840,10 @@ spdy-transport@^3.0.0: readable-stream "^3.0.6" wbuf "^1.7.3" -spdy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52" - integrity sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q== +spdy@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" + integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== dependencies: debug "^4.1.0" handle-thing "^2.0.0" @@ -9227,6 +9892,14 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +ssri@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + stable@~0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -9256,9 +9929,9 @@ stealthy-require@^1.1.0: integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: inherits "~2.0.1" readable-stream "^2.0.2" @@ -9287,6 +9960,11 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -9304,7 +9982,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -9312,6 +9990,24 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string.prototype.trim@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" @@ -9321,12 +10017,28 @@ string.prototype.trim@^1.1.2: es-abstract "^1.5.0" function-bind "^1.0.2" +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - safe-buffer "~5.1.0" + safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" @@ -9335,10 +10047,10 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringz@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stringz/-/stringz-1.0.0.tgz#d2acba994e4ce3c725ee15c86fff4281280d2025" - integrity sha512-oaqFaIAmw1MJmdPNiBqocHHrC0VzJTL3CI1z5uXm3NQSE3AyDU152ZPTSJSOKk+9z1Cm3LZzgLFjCTb8SXZvag== +stringz@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stringz/-/stringz-2.0.0.tgz#0a092bc64ed9b42eff2936d0401d2398393d54e9" + integrity sha512-pRWc5RGpedKEDvQ/ukYs8kS8tKj+cKu5ayOoyOvsavbpiLBcm1dGX6p1o5IagaN11cbfN8tKGpgQ4fHdEq5LBA== dependencies: unicode-astral-regex "^1.0.1" @@ -9356,12 +10068,19 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" - integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: - ansi-regex "^4.0.0" + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" strip-bom@^3.0.0: version "3.0.0" @@ -9373,16 +10092,21 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== strip-json-comments@~1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E= +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + stylehacks@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2" @@ -9392,21 +10116,18 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -stylis-rule-sheet@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" - integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw== - -stylis@^3.5.0: - version "3.5.4" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" - integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== - substring-trie@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/substring-trie/-/substring-trie-1.0.2.tgz#7b42592391628b4f2cb17365c6cce4257c7b7af5" integrity sha1-e0JZI5Fii08ssXNlxszkJXx7evU= +supports-color@6.1.0, supports-color@^6.0.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -9419,20 +10140,13 @@ supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^6.0.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - svgo@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" @@ -9475,86 +10189,106 @@ table@^3.7.8: slice-ansi "0.0.4" string-width "^2.0.0" -table@^5.0.2: - version "5.1.1" - resolved "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837" - integrity sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw== +table@^5.2.3: + version "5.4.1" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.1.tgz#0691ae2ebe8259858efb63e550b6d5f9300171e8" + integrity sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w== dependencies: - ajv "^6.6.1" + ajv "^6.9.1" lodash "^4.17.11" - slice-ansi "2.0.0" - string-width "^2.1.1" + slice-ansi "^2.1.0" + string-width "^3.0.0" -tapable@^1.0.0, tapable@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" - integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA== +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" + minipass "^2.8.6" + minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" - yallist "^3.0.2" + yallist "^3.0.3" tcomb@^2.5.0: version "2.7.0" resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-2.7.0.tgz#10d62958041669a5d53567b9a4ee8cde22b1c2b0" integrity sha1-ENYpWAQWaaXVNWe5pO6M3iKxwrA= -terser-webpack-plugin@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz#7545da9ae5f4f9ae6a0ac961eb46f5e7c845cc26" - integrity sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw== - dependencies: - cacache "^11.0.2" - find-cache-dir "^2.0.0" - schema-utils "^1.0.0" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - terser "^3.8.1" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -terser-webpack-plugin@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" - integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== +terser-webpack-plugin@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" + integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== dependencies: - cacache "^11.3.2" - find-cache-dir "^2.0.0" + cacache "^12.0.2" + find-cache-dir "^2.1.0" is-wsl "^1.1.0" - loader-utils "^1.2.3" schema-utils "^1.0.0" serialize-javascript "^1.7.0" source-map "^0.6.1" - terser "^4.0.0" - webpack-sources "^1.3.0" + terser "^4.1.2" + webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^3.8.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.14.0.tgz#49a8ddf34a1308a901d787dab03a42c51b557447" - integrity sha512-KQC1QNKbC/K1ZUjLIWsezW7wkTJuB4v9ptQQUNOzAPVHuVf2LrwEcB0I9t2HTEYUwAFVGiiS6wc+P4ClLDc5FQ== - dependencies: - commander "~2.17.1" - source-map "~0.6.1" - source-map-support "~0.5.6" +terser-webpack-plugin@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.2.1.tgz#5569e6c7d8be79e5e43d6da23acc3b6ba77d22bd" + integrity sha512-jwdauV5Al7zopR6OAYvIIRcxXCSvLjZjr7uZE8l2tIWb/ryrGN48sJftqGf5k9z09tWhajx53ldp0XPI080YnA== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.0.0" + jest-worker "^24.9.0" + schema-utils "^2.5.0" + serialize-javascript "^2.1.0" + source-map "^0.6.1" + terser "^4.3.9" + webpack-sources "^1.4.3" -terser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374" - integrity sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA== +terser@^4.1.2, terser@^4.3.9: + version "4.3.9" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" + integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA== dependencies: - commander "^2.19.0" + commander "^2.20.0" source-map "~0.6.1" - source-map-support "~0.5.10" + source-map-support "~0.5.12" + +tesseract.js-core@^2.0.0-beta.12: + version "2.0.0-beta.13" + resolved "https://registry.yarnpkg.com/tesseract.js-core/-/tesseract.js-core-2.0.0-beta.13.tgz#a21d798e88098898a9bdd935d0553215e03274f8" + integrity sha512-GboWV/aV5h+Whito6L6Q3WCFZ2+lgxZGgjY84wSpWbTLEkkZgHsU+dz1or+3rWSABH/nuzHDco1bZRk5+f94mw== + +tesseract.js-utils@^1.0.0-beta.8: + version "1.0.0-beta.8" + resolved "https://registry.yarnpkg.com/tesseract.js-utils/-/tesseract.js-utils-1.0.0-beta.8.tgz#d1ef25c12609a337c3e0ac12a33f9903f3145a68" + integrity sha512-qjHBfWfzo2o1ZY9XI0Wh2hmpp38+mIgCMOk60W5Yyie/pBl421VLBKOZUEwQgpbLnOJ24VU6Q8yXsVgtFFHcFg== + dependencies: + axios "^0.18.0" + bmp-js "^0.1.0" + file-type "^10.5.0" + idb-keyval "^3.1.0" + is-url "^1.2.4" + zlibjs "^0.3.1" + +tesseract.js@^2.0.0-alpha.16: + version "2.0.0-alpha.16" + resolved "https://registry.yarnpkg.com/tesseract.js/-/tesseract.js-2.0.0-alpha.16.tgz#1e17717234a1464481abe12283f2c3ac79603d2e" + integrity sha512-8g3je2Kl8rkAFtpmwilGGj+8rCiPClNQaCjW6IafOPNn7hzFnVdL6fU6rG1Xsrc4Twv0HOa75kbpx5u70/WbTA== + dependencies: + axios "^0.18.0" + check-types "^7.4.0" + is-url "1.2.2" + opencollective-postinstall "^2.0.2" + resolve-url "^0.2.1" + tesseract.js-core "^2.0.0-beta.12" + tesseract.js-utils "^1.0.0-beta.8" test-exclude@^5.0.0: version "5.1.0" @@ -9602,9 +10336,9 @@ thunky@^1.0.2: integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow== timers-browserify@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" - integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== dependencies: setimmediate "^1.0.4" @@ -9613,11 +10347,21 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tiny-invariant@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" + integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== + tiny-queue@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046" integrity sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY= +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9655,6 +10399,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -9670,13 +10421,6 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -touch@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/touch/-/touch-2.0.2.tgz#ca0b2a3ae3211246a61b16ba9e6cbf1596287164" - integrity sha512-qjNtvsFXTRq7IuMLweVgFxmEuQ6gLbRs2jQxL80TtZ31dEKWYIxRXquij6w6VimyDek5hD3PytljHmEtAs2u0A== - dependencies: - nopt "~1.0.10" - tough-cookie@>=2.3.3, tough-cookie@^2.3.4: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -9700,20 +10444,15 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -tryer@^1.0.0: +tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tty-browserify@0.0.0: version "0.0.0" @@ -9739,6 +10478,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -9747,6 +10491,11 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +type@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/type/-/type-1.0.3.tgz#16f5d39f27a2d28d86e48f8981859e9d3296c179" + integrity sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -9758,11 +10507,11 @@ ua-parser-js@^0.7.18: integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ== uglify-js@^3.1.4: - version "3.4.9" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" - integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== dependencies: - commander "~2.17.1" + commander "~2.20.0" source-map "~0.6.1" unicode-astral-regex@^1.0.1: @@ -9794,14 +10543,14 @@ unicode-property-aliases-ecmascript@^1.0.4: integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" is-extendable "^0.1.1" - set-value "^0.4.3" + set-value "^2.0.1" uniq@^1.0.1: version "1.0.1" @@ -9821,9 +10570,9 @@ unique-filename@^1.1.1: unique-slug "^2.0.0" unique-slug@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" - integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" @@ -9851,9 +10600,9 @@ unset-value@^1.0.0: isobject "^3.0.0" upath@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" - integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: version "4.2.2" @@ -9868,11 +10617,11 @@ urix@^0.1.0: integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8" - integrity sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg== + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== dependencies: - querystringify "^2.0.0" + querystringify "^2.1.1" requires-port "^1.0.0" url@^0.11.0: @@ -9922,20 +10671,27 @@ util@^0.10.3: dependencies: inherits "2.0.3" +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== -v8-compile-cache@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" - integrity sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw== +v8-compile-cache@2.0.3, v8-compile-cache@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -9950,6 +10706,11 @@ value-equal@^0.4.0: resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" integrity sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw== +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -9969,12 +10730,10 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= - dependencies: - indexof "0.0.1" +vm-browserify@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== w3c-hr-time@^1.0.1: version "1.0.1" @@ -10004,7 +10763,7 @@ warning@^4.0.1: dependencies: loose-envify "^1.0.0" -watchpack@^1.5.0: +watchpack@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== @@ -10013,6 +10772,11 @@ watchpack@^1.5.0: graceful-fs "^4.1.2" neo-async "^2.5.0" +wavesurfer.js@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/wavesurfer.js/-/wavesurfer.js-3.2.0.tgz#c316f3bd1b9f0f4d26188c6865a57e29a13efedc" + integrity sha512-P75SSpYTpzpCKFKjxmHkdp2jGpcm4neaGncBGV/jzfI5FPSIfl5mXTTZlZFpJhs7To+NI34Dj5y661JI43HEzA== + wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" @@ -10038,10 +10802,10 @@ webpack-assets-manifest@^3.1.1: tapable "^1.0.0" webpack-sources "^1.0.0" -webpack-bundle-analyzer@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.1.0.tgz#2f19cbb87bb6d4f3cb4e59cb67c837bd9436e89d" - integrity sha512-nyDyWEs7C6DZlgvu1pR1zzJfIWSiGPbtaByZr8q+Fd2xp70FuM/8ngCJzj3Er1TYRLSFmp1F1OInbEm4DZH8NA== +webpack-bundle-analyzer@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz#39b3a8f829ca044682bc6f9e011c95deb554aefd" + integrity sha512-orUfvVYEfBMDXgEKAKVvab5iQ2wXneIEorGNsyuOyVYpjYrI7CUOhhXNDd3huMwQ3vNNWWlGP+hzflMFYNzi2g== dependencies: acorn "^6.0.7" acorn-walk "^6.1.1" @@ -10052,72 +10816,76 @@ webpack-bundle-analyzer@^3.1.0: express "^4.16.3" filesize "^3.6.1" gzip-size "^5.0.0" - lodash "^4.17.10" + lodash "^4.17.15" mkdirp "^0.5.1" opener "^1.5.1" ws "^6.0.0" -webpack-cli@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.2.tgz#aed2437b0db0a7faa2ad28484e166a5360014a91" - integrity sha512-FLkobnaJJ+03j5eplxlI0TUxhGCOdfewspIGuvDVtpOlrAuKMFC57K42Ukxqs1tn8947/PM6tP95gQc0DCzRYA== - dependencies: - chalk "^2.4.1" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.0" - findup-sync "^2.0.0" - global-modules "^1.0.0" - import-local "^2.0.0" - interpret "^1.1.0" - loader-utils "^1.1.0" - supports-color "^5.5.0" - v8-compile-cache "^2.0.2" - yargs "^12.0.5" - -webpack-dev-middleware@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff" - integrity sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA== +webpack-cli@^3.3.10: + version "3.3.10" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" + integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg== + dependencies: + chalk "2.4.2" + cross-spawn "6.0.5" + enhanced-resolve "4.1.0" + findup-sync "3.0.0" + global-modules "2.0.0" + import-local "2.0.0" + interpret "1.2.0" + loader-utils "1.2.3" + supports-color "6.1.0" + v8-compile-cache "2.0.3" + yargs "13.2.4" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== dependencies: memory-fs "^0.4.1" - mime "^2.4.2" + mime "^2.4.4" + mkdirp "^0.5.1" range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.5.1.tgz#4290ac709bb989dc7382c912899f79fd5677dabf" - integrity sha512-0IdMGddJcnK9zesZOeHWl4uAOVfypn7DSrdNWtclROkVBXy/TcBN+6eEG1wNfLT9dXVfaRZZsLTJt0mJtgTQgw== +webpack-dev-server@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#27c3b5d0f6b6677c4304465ac817623c8b27b89c" + integrity sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" - chokidar "^2.1.6" + chokidar "^2.1.8" compression "^1.7.4" connect-history-api-fallback "^1.6.0" debug "^4.1.1" del "^4.1.1" express "^4.17.1" html-entities "^1.2.1" - http-proxy-middleware "^0.19.1" + http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" + is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.2" + loglevel "^1.6.4" opn "^5.5.0" - portfinder "^1.0.20" + p-retry "^3.0.1" + portfinder "^1.0.25" schema-utils "^1.0.0" - selfsigned "^1.10.4" - semver "^6.1.1" + selfsigned "^1.10.7" + semver "^6.3.0" serve-index "^1.9.1" sockjs "0.3.19" - sockjs-client "1.3.0" - spdy "^4.0.0" + sockjs-client "1.4.0" + spdy "^4.0.1" strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" - webpack-dev-middleware "^3.7.0" + webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" + ws "^6.2.1" yargs "12.0.5" webpack-log@^2.0.0: @@ -10129,56 +10897,56 @@ webpack-log@^2.0.0: uuid "^3.3.2" webpack-merge@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.1.tgz#5e923cf802ea2ace4fd5af1d3247368a633489b4" - integrity sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw== + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== dependencies: - lodash "^4.17.5" + lodash "^4.17.15" -webpack-sources@^1.0.0, webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== +webpack-sources@^1.0.0, webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.29.6: - version "4.29.6" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955" - integrity sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw== +webpack@^4.41.2: + version "4.41.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" + integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" "@webassemblyjs/wasm-edit" "1.8.5" "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.0.5" - acorn-dynamic-import "^4.0.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chrome-trace-event "^1.0.0" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" enhanced-resolve "^4.1.0" - eslint-scope "^4.0.0" + eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - micromatch "^3.1.8" - mkdirp "~0.5.0" - neo-async "^2.5.0" - node-libs-browser "^2.0.0" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" schema-utils "^1.0.0" - tapable "^1.1.0" - terser-webpack-plugin "^1.1.0" - watchpack "^1.5.0" - webpack-sources "^1.3.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.1" + watchpack "^1.6.0" + webpack-sources "^1.4.1" websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= + version "0.7.3" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== dependencies: - http-parser-js ">=0.4.0" + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: @@ -10186,13 +10954,6 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== -websocket.js@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/websocket.js/-/websocket.js-0.1.12.tgz#46c980787c57ebc8edcf44a0263e5d639367b85b" - integrity sha1-RsmAeHxX68jtz0SgJj5dY5NnuFs= - dependencies: - backoff "^2.4.1" - whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -10233,13 +10994,25 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.14, which@^1.2.9, which@^1.3.0: +which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.1.tgz#f1cf94d07a8e571b6ff006aeb91d0300c47ef0a4" + integrity sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w== + dependencies: + isexe "^2.0.0" + +wicg-inert@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/wicg-inert/-/wicg-inert-3.0.0.tgz#4f5797172fbf7ff01effd3839b52872e35d3cba2" + integrity sha512-sZsYZ8pk8y6CgDLkTxivfhLDBvZuDWTWBawU8OuDdO0Id6AOd1Gqjkvt9g9Ni7rgHIS7UbRvbLSv1z7MSJDYCA== + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -10247,23 +11020,16 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -worker-farm@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ== - dependencies: - errno "~0.1.7" - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -10279,6 +11045,15 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -10293,6 +11068,13 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" @@ -10307,10 +11089,10 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -ws@^6.0.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.2.tgz#3cc7462e98792f0ac679424148903ded3b9c3ad8" - integrity sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw== +ws@^6.0.0, ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== dependencies: async-limiter "~1.0.0" @@ -10320,19 +11102,31 @@ xml-name-validator@^3.0.0: integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xtend@^4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.7.2.tgz#f26aabf738590ab61efaca502358e48dc9f348b2" + integrity sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw== + dependencies: + "@babel/runtime" "^7.6.3" yargs-parser@^11.1.1: version "11.1.1" @@ -10342,7 +11136,15 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@12.0.5, yargs@^12.0.2, yargs@^12.0.5: +yargs-parser@^13.1.0, yargs-parser@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== @@ -10359,3 +11161,41 @@ yargs@12.0.5, yargs@^12.0.2, yargs@^12.0.5: which-module "^2.0.0" y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" + +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + +yargs@^13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" + +zlibjs@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/zlibjs/-/zlibjs-0.3.1.tgz#50197edb28a1c42ca659cc8b4e6a9ddd6d444554" + integrity sha1-UBl+2yihxCymWcyLTmqd3W1ERVQ= |